SCOLON.S 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. ******** SCOLON.S COLLISION SHIT
  2. org $D000
  3. * IGNORE THE FOLLOWING DOCUMENTATION ITS ALL BEEN CHANGED
  4. *
  5. * SUBROUTINE TO DETECT COLLISIONS
  6. *
  7. * THIS ROUTINE TAKES A POINT AS INPUT (COLPX,COLPY,COLPZ) AND COMPARES IT TO
  8. * ALL OF THE BOXES STORED IN THE COLLISIN TABLES. IF IT FINDS AN ACTIVE BOX
  9. * THAT CONTAINS THE PASSED POINT, THEN THE COLSTAT OF THE OBJECT IS RETURNED.
  10. * THIS IS THE OBJECT TABLE INDEX OF THE BOXES CORRESPONDING OBJECT ON THE SCREEN
  11. * CARE MUST BE TAKEN HERE ON BOUNDARIES OF THE COLLISION RANGES.
  12. * CURRENTLY, THE BIRD ITS SHOTS ARE NOT IN THE TABLES TO AVOID REDUNDANT CHECKS.
  13. *
  14. BUFZONE EQU 15 ; CUTOFF FOR PUNTING
  15. COLDET: BIT GCOARSE ;NO COLLIISION DETECT ON COARSE SCROLL
  16. BPL COLDTNC
  17. JMP PUNTCOL
  18. COLDTNC: STX TEMPX ;SAVE INDEX OF OBJECT BEING TESTED
  19. LDA DXTBL,X ;GET DC OF OBJECT BEING TESTED
  20. SEC
  21. SBC #BUFZONE ; BUFFER ZONE
  22. STA JTEMP
  23. COLOOP1: LDA RLTBL,X ;GET RIGHT LINK
  24. BMI NEXLOOP ;END OF LIST SO GO OTHER DIRECTION
  25. TAX
  26. LDA DFTBL,X ;GET DF OF POTENTIALLY COLLIDING OBJECT
  27. CMP JTEMP
  28. BCC NEXLOOP ;WE'RE DONE GOING RIGHT
  29. CPX #ZREF0 ;DON'T ATTEMPT TO DO COLLISION ON REF.
  30. BCS COLOOP1 ;POINT
  31. ;DBG1:
  32. LDA COLSTAT,X
  33. BEQ COLOOP1
  34. LDA COLPZ ;CHECK EXTENTS
  35. CMP COLZ1,X
  36. BCC COLOOP1
  37. CMP COLZ2,X
  38. BCS COLOOP1
  39. LDA COLPX
  40. CMP COLX1,X
  41. BCC COLOOP1
  42. CMP COLX2,X
  43. BCS COLOOP1
  44. LDA COLPY
  45. CMP COLY1,X
  46. BCC COLOOP1
  47. CMP COLY2,X
  48. BCS COLOOP1
  49. LDA COLSTAT,X ;YES A COLLISION SO RETURN WITH
  50. RTS ;INDEX IN X AND ID IN ACCUMULATOR
  51. NEXLOOP: LDX TEMPX ;RETRIEVE INDEX OF OBJECT TO BE TESTED
  52. LDA DFTBL,X ;GET DF OF OBJECT BEING TESTED
  53. CLC
  54. ADC #BUFZONE ; BUFFER ZONE
  55. BCC ZADDOK
  56. LDA #$FF ; DON'T LET IT WRAP AROUND
  57. ZADDOK: STA JTEMP
  58. COLOOP2: LDA LLTBL,X ;NOW GO DOWN THE LEFT LINKS
  59. TAX
  60. CMP #ZREF0 ;ON REFERENCE POINT GO TO NEXT ITEM
  61. BCS COLOOP2
  62. CMP #LASTPNT ;END POINT TO THE LEFT
  63. BCS PUNTCOL ;
  64. LDA JTEMP ; DF OF OBJECT BEING TESTED + 10
  65. CMP DXTBL,X
  66. BCC PUNTCOL
  67. DBG2:
  68. LDA COLSTAT,X
  69. BEQ COLOOP2
  70. LDA COLPZ ;CHECK EXTENTS
  71. CMP COLZ1,X
  72. BCC COLOOP2
  73. CMP COLZ2,X
  74. BCS COLOOP2
  75. LDA COLPX
  76. CMP COLX1,X
  77. BCC COLOOP2
  78. CMP COLX2,X
  79. BCS COLOOP2
  80. LDA COLPY
  81. CMP COLY1,X
  82. BCC COLOOP2
  83. CMP COLY2,X
  84. BCS COLOOP2
  85. LDA COLSTAT,X ;PUT ID OF COLLIDED OBJECT IN ACC.
  86. RTS
  87. PUNTCOL: LDA #0
  88. RTS
  89. ; THIS ROUTINE CHECKS TO SEE IF THE BIRD IS OVER A HIEROGLYPH
  90. HIERODET: LDX #ZREF0 ; START FROM REF PNT WITH DX = FC
  91. HIEROLP: LDA LLTBL,X ; AND SEARCH LEFT
  92. BMI PUNTCOL ; PUNT IF AT END
  93. TAX
  94. LDA DXTBL,X
  95. CMP #$FF
  96. BNE HIEROLP ; ONLY CHECK HIERO'S
  97. LDA #ZBIRDZ+3 ;CHECK EXTENTS
  98. CMP COLZ1,X
  99. BCC HIEROLP
  100. CMP COLZ2,X
  101. BCS HIEROLP
  102. LDA XTBL+ZBIRD
  103. CMP COLX1,X
  104. BCC HIEROLP
  105. CMP COLX2,X
  106. BCS HIEROLP
  107. LDA COLSTAT,X ;PUT ID OF COLLIDED OBJECT IN ACC.
  108. RTS
  109. *
  110. * SUBROUTINE TO FIND THE CHARACTER NUMBER CORRESPONDING TO X AND Z
  111. * X = OBJECT INDEX
  112. * A = Z OFFSET FROM REFERENCE POINT
  113. * THE RESULT IS RETURNED IN A
  114. *
  115. GRNDTYPE:
  116. STA TEMP4
  117. STX TEMP3
  118. LDA VPTBL,X
  119. GRNDFLO: CMP #SCRENBOT+1
  120. BCS GRACEFUL
  121. STY TEMP5 ;PRESERVE Y
  122. SEC
  123. SBC TEMP4
  124. SEC ;THIS CALCULATES ZONE NUMBER FROM VP
  125. SBC ZONEOFF ;WHICH IS CORRECTED BY ZOFFSET
  126. CLC
  127. ADC #18 ;14 FROM LOADER PLUS 4 TO GET TO
  128. CLC ;BOTTOM OF STAMP
  129. ADC YTBL,X
  130. LSR
  131. LSR
  132. LSR
  133. LSR ;ZONE NUMBER
  134. TAX ;PUT ZONE NUMBER INTO X
  135. LDA HIBYE,X ;USE ZONE NUMBER TO FIND DISPLAY LIST
  136. STA PTR0+1 ;HIGH BYTE OF DLIST
  137. LDX #0 ;CHARACTER MAP IS AT BEGINNING, SO
  138. STX PTR0 ;LOW BYTE OF DLIST IS 0
  139. LDA (PTR0,X) ;READ CHAR MAP POINTER FROM DLIST
  140. STA PTR1 ;LOW BYTE OF CHAR MAP
  141. LDY #2
  142. LDA (PTR0),Y
  143. STA PTR1+1 ;HIGH BYTE OF CHAR MAP
  144. LDX TEMP3
  145. ; LDA XTBL,X ;THIS IS X+Z
  146. ; CLC
  147. ; ADC ZTBL,X
  148. ; CLC
  149. ; ADC #-NUMBER
  150. LDA HPTBL,X
  151. CLC
  152. ADC TEMP4 ;ZOFFSET
  153. CLC
  154. ADC #$9
  155. CLC
  156. ADC JERKOFF ;HPOS CORRECTED BY SCROLL
  157. LSR ;DIVIDE BY EIGHT TO GET CHAR NUMBER
  158. LSR
  159. LSR
  160. TAY ;CHAR NUMBER
  161. LDA (PTR1),Y ;CHAR VALUE
  162. LDY TEMP5
  163. RTS
  164. GRACEFUL:
  165. LDA #0 ;GUARANTEED LAND CHAR EXIT
  166. RTS
  167. ; END