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