FLEA.S 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. *** FLEA.S ***
  2. * SMD 8/8 ATTRACT MODE CORRECTED
  3. * DVP 7/6 SCORPION MOVEMENT ADDED
  4. * DVP 6/29 FLEA MOVEMENT ROUTINE FOR CENTIPEDE
  5. FLEASCRP
  6. LDA ATTRACT
  7. BPL NRMLFLEA
  8. FLOUT RTS
  9. NRMLFLEA LDA SHTRTIMR
  10. BNE FLOUT ;IF SHOOTER IS ALIVE
  11. LDA FLEAOFST ;MOVE IF ON SCREEN
  12. CMP #L(EXPLOS)
  13. BCS FLOUT
  14. BIT FLEASTAT
  15. BPL TRYFLEA
  16. BVS MOVEFLEA
  17. JMP MVSCORP
  18. ;OTHERWISE, DECIDE WHETHER TO START
  19. TRYFLEA LDX PLAYER ;FIRST RACK?
  20. LDA GAMETYPE
  21. CMP #1
  22. BEQ ZGMTPFL1
  23. LDX #0
  24. ZGMTPFL1 LDA CHAINSIZ,X
  25. CMP MAXSGCNT
  26. BCS FLOUT ;YES
  27. LDX PLAYER
  28. LDA GAMETYPE
  29. CMP #2
  30. BCC ZGMTPFL4
  31. LDX #2
  32. CMP #3
  33. BEQ ZGMTPFL4
  34. DEX ;X=1 HERE
  35. LDA SCORE2+1 ;IN COMPETITION GAME, USE PLAYER WITH
  36. CMP SCORE2 ; HIGHER SCORE
  37. BCS ZGMTPFL4
  38. DEX ;X=0 HERE
  39. ZGMTPFL4 LDA SCORE2,X ;DECIDE NUMBER OF MUSHROOMS IN INFIELD
  40. STA GTEMP5
  41. LDY #5 ; TO PREVENT FLEAS, MUST BE AT LEAST
  42. CMP #$02 ; 5 UP TO 20K
  43. BCC ENOUGHM ; 9 UP TO 120K
  44. LDY #9 ; 12 UP TO 140K
  45. CMP #$12 ; 13 UP TO 160K
  46. BCC ENOUGHM ; 14 UP TO 180K
  47. LSR A ; ONE MORE FOR EACH 20K
  48. CLC
  49. ADC #6
  50. TAY
  51. ENOUGHM LDX PLAYER ;ENOUGH MUSHROOMS?
  52. LDA GAMETYPE
  53. CMP #1
  54. BEQ ZGMTPFL2
  55. LDX #0
  56. ZGMTPFL2 TYA
  57. CMP MUSHCNT,X
  58. BCS NEWFLEA
  59. JMP TRYSCORP
  60. NEWFLEA LDA #4 ;FLEASND
  61. JSR TUNIN
  62. JSR RANDOM ;TIME FOR A NEW FLEA -- PICK A RANDOM
  63. AND #$1F ; ROW
  64. BEQ FLOUT
  65. CLC
  66. ADC #MINX/4-1 ;ADJUST FOR LEFT MARGIN
  67. ASL A
  68. ASL A
  69. STA FLEAX
  70. LDA #$C1 ;INITIALIZE OTHER FLEA VARIABLES
  71. STA FLEASTAT
  72. LDA #L(FLEA)
  73. STA FLEAOFST
  74. LDA #MINY
  75. STA FLEAY
  76. MOVEFLEA LDA FRMCNT ;CHANGE GRAPHICS EVERY 4TH FRAME
  77. LSR A
  78. AND #$06
  79. CLC
  80. ADC #L(FLEA)
  81. STA FLEAOFST
  82. LDA #0
  83. LDX DIFLEVEL
  84. BEQ SLOWFLEA
  85. LDA #2
  86. CPX #3
  87. BEQ SLOWFLEA ;ALWAYS FAST IN EXPERT GAME
  88. LDA FLEASTAT ;MOVE DOWN SCREEN
  89. AND #$03
  90. SLOWFLEA SEC ;1 PIXEL/FRAME, NOVICE GAME
  91. ADC FLEAY
  92. CMP #MAXY ;AT BOTTOM?
  93. BCS ENDFLEA ;YES
  94. STA FLEAY
  95. LDX #13 ;CHECK FOR COLLISION WITH PLAYER
  96. JSR SHTRCOLL
  97. LDA SHTRTIMR
  98. BNE FLEAOUT
  99. LDA FRMCNT ;GENERATE A NEW MUSHROOM EVERY 4 FRAMES
  100. AND #$03 ; AT MOST
  101. BNE FLEAOUT
  102. JSR RANDOM ;GENERATE ONLY 1/4 OF THE TIMES ALLOWED
  103. AND #$03
  104. BNE FLEAOUT
  105. ;CHECK WHETHER MUSHROOM ALREADY THERE
  106. LDA FLEAX
  107. STA GTEMP1
  108. LDA FLEAY
  109. CMP #MAXY-ZONELEN
  110. BCS FLEAOUT
  111. ; CLC
  112. SBC #3 ;CHECK 4 PIXELS BEHIND FLEA
  113. JSR OBSTAC
  114. BNE FLEAOUT ;MUSHROOM THERE
  115. LDA FLEAY ;PLACE MUSHROOM 4 PIXELS BEHIND FLEA
  116. SEC
  117. SBC #4
  118. JSR MUSHER ;INCREMENTS COUNT IF IN INFIELD
  119. FLEAOUT RTS
  120. ENDFLEA LDA #0
  121. STA FLEAOFST
  122. STA FLEASTAT
  123. LDA #4
  124. JSR SCRAPONE
  125. RTS
  126. *** START A SCORPION RATHER THAN A FLEA
  127. TRYSCORP
  128. LDA FRMCNT ;EVERY N FRAMES
  129. CMP #$93
  130. BNE FLEAOUT
  131. LDX PLAYER ;ONLY IN RACKS WITH SMALLER CENTIPEDES
  132. LDA GAMETYPE
  133. CMP #1
  134. BEQ ZGMTPFL3
  135. LDX #0
  136. ZGMTPFL3 LDY CHAINSIZ,X
  137. INY
  138. CPY MAXSGCNT
  139. BCS FLEAOUT
  140. JSR RANDOM ;ONLY 1/4 OF THE TIME
  141. AND #$03
  142. BNE FLEAOUT
  143. LDA #5
  144. JSR TUNIN
  145. ;START A NEW SCORPION
  146. LDA GTEMP5 ;IF SCORE < 20K USE SLOW
  147. CMP #2 ; (GTEMP5 SAVED IN TRYFLEA)
  148. BCC SLOWSCRP
  149. JSR RANDOM ;USE SLOW SCORPION 1/4 OF TIME
  150. AND #$03 ; RANDOMLY OVER 20K
  151. BEQ SLOWSCRP
  152. LDA #$82 ;BIT 2 SET, 1 CLEAR = FAST
  153. BNE SCRPRL
  154. SLOWSCRP LDA #$80 ;BIT 2 CLEAR, 1 SET = SLOW
  155. SCRPRL BIT RNDM
  156. BPL RGHTSCRP
  157. LEFTSCRP ORA #$01 ;BIT 0 SET FOR LEFT
  158. LDX #MAXX
  159. BNE SCRPDIR
  160. RGHTSCRP LDX #MINX-SCRPWDTH
  161. SCRPDIR STX FLEAX
  162. STA FLEASTAT
  163. JSR RANDOM ;PICK A VERTICAL POSITION
  164. AND #$1F
  165. TAY
  166. LDA SCRPROW,Y
  167. STA FLEAY
  168. *********** SCORPION MAIN ENTRY POINT
  169. MVSCORP LDA FRMCNT ;CHANGE SCORPION ANIMATION EVERY 4
  170. LSR A
  171. LSR A
  172. AND #$03
  173. TAX
  174. LDA FLEASTAT
  175. LSR A
  176. BCC SANM1
  177. LDA LSCRPANM,X
  178. BCS SANM2
  179. SANM1 LDA RSCRPANM,X
  180. SANM2 STA FLEAOFST
  181. SAMESCRP
  182. LDA FLEASTAT ;ADJUST SCORPION'S HORZ. POS.
  183. AND #$03
  184. LSR A ;CARRY SET = LEFT, CLEAR = RIGHT
  185. EOR #$01 ;CHECK SPEED (HOW OFTEN SHOULD SCORP.
  186. AND FRMCNT ; MOVE)?
  187. BNE RSRSRS
  188. BCC MVSCRPRT
  189. DEC FLEAX ;CARRY SET, MOVE LEFT
  190. BCS RSRSRS
  191. MVSCRPRT INC FLEAX ;CARRY CLEAR, MOVE RIGHT
  192. RSRSRS LDA FLEAX
  193. SEC
  194. SBC #HORIZPOS-SCRPWDTH ;EDGE DETECTION
  195. CMP #MAXX-(HORIZPOS-SCRPWDTH-1)
  196. BCS ENDSCRP
  197. LDA FLEAX
  198. SEC ;CHECK WHETHER IN BOUNDARY FOR POISON
  199. SBC #SCRPWDTH
  200. CMP #MAXX-(SCRPWDTH+4)
  201. BCS NOPOISON
  202. LDA FLEAX
  203. ;;;;; CLC
  204. ADC #4
  205. STA GTEMP1 ;FOR OBSTAC SUBR.
  206. LDA FLEAY ;TEST FOR MUSHROOM
  207. ;;;;; CLC
  208. ADC #4
  209. JSR OBSTAC
  210. CMP #L(QLIVE)
  211. BCC NOPOISON
  212. CMP #L(LIVE+1)
  213. BCS NOPOISON
  214. ORA #$08 ;IT'S THERE, POISON IT
  215. STA (GTEMP3),Y
  216. NOPOISON RTS
  217. ENDSCRP LDA #0
  218. STA FLEASTAT
  219. STA FLEAOFST
  220. LDA #5
  221. JSR SCRAPONE
  222. RTS
  223. SCRPROW DB 12,20,28,36,44,52,60,68,76,84
  224. DB 12,20,28,36,44,52,60,68,76,84
  225. DB 12,20,28,36,44,52,60,68,76,84
  226. DB 12,84
  227. LSCRPANM DB L(LSCRP),L(LSCRP+2),L(LSCRP+4),L(LSCRP+6)
  228. RSCRPANM DB L(RSCRP),L(RSCRP+2),L(RSCRP+4),L(RSCRP+6)