/
AnimaenemigosX.asm
executable file
·215 lines (170 loc) · 3.16 KB
/
AnimaenemigosX.asm
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
STATE = 0 ;Invisible = 0, Visible =1
DIRE = 1 ;Direccion - Norte=0, Este=1, Sur=2, Oeste=3
POSC = 2 ;Posicion por caracter horizontal - 32*3
COL = 3 ;Columna - 0 a 3
POSR = 4 ;Posicion por caracter vertical - 56*3
ROW = 5 ;Linea - 0 a 3
PFEL = 6 ;Punteros fuente
PFEH = 7
PBEL = 8 ;Punteros buffer
PBEH = 9
CONTH = 10 ;Contador horizontal
CONTV = 11
ANIMA_ENEMIGOS
lda CONTENE
asl ;*2
asl ;*4
asl ;*8
asl ;*16
tax
sta TEMP0 ;Buffer para X, numero enemigo
lda TABLENE+STATE,X
bne ES_VISIBLE
rts
ES_VISIBLE
lda TABLENE+PFEL,X ;ENEX
sta PUNTOBJ
lda TABLENE+PFEH,X
sta PUNTOBJ+1
lda TABLENE+PBEL,X ;ENEBUFFERX
sta TEMP1
lda TABLENE+PBEH,X
sta TEMP1+1
lda TABLENE+COL,X ;0 a 3
and #3
sta COLENE
lda TABLENE+ROW,X ;0 a 3
and #3
sta ROWENE
lda TABLENE+POSC,X ;32*3
sta POSCENE ;Columna Memoria
lda TABLENE+POSR,X ;56*3
sta POSRENE ;Linea Memoria
lda TABLENE+DIRE,X ;Norte=0, Este=1, Sur=2, Oeste=3
and #3
ror
bcc ENE_VERTICAL
jmp ENE_HORIZONTAL
ENE_VERTICAL
ror
bcc ENE_NORTE
jmp ENE_SUR
ENE_NORTE
lda TABLENE+ROW,X ;Control Byte 0, scroll grueso
dec TABLENE+ROW,X
and #3
sta TABLENE+ROW,X
bne SIGUE_ENENORTE ;Continua scroll fino
lda PUNTFUE
sta PUNTDES
lda PUNTFUE+1
sta PUNTDES+1
ldy POSRENE
iny
tya
jsr CALC_XY
ldy TABLENE+CONTV,X
ldx #3
C_SCROLL_GNORTE ;scroll grueso
lda (PUNTDES),Y
pha
lda (PUNTFUE),Y
sta (PUNTDES),Y
lda (TEMP1),Y
sta (PUNTFUE),Y
pla
sta (TEMP1),Y
dey
dex
bne C_SCROLL_GNORTE
jsr SCROLL_FNORTE
rts
SIGUE_ENENORTE
ldy TABLENE+POSR,X ;POSRENE
dey
dey
tya
jsr CALC_XY
ldy #1
lda (PUNTFUE),Y
beq J4_ENE_NORTE ;Es pista!
cmp #20+128 ;Cuadra?
bne J1_ENE_NORTE
jsr GIRA_ENE
J1_ENE_NORTE
cmp #54+128 ;Abol?
bne J2_ENE_NORTE
jsr GIRA_ENE
J2_ENE_NORTE
cmp #45+128 ;Roca?
bne J3_ENE_NORTE
jsr GIRA_ENE
J3_ENE_NORTE
cmp #8 ;Humo?
bne J4_ENE_NORTE
jsr ES_HUMO
J4_ENE_NORTE
rts
SCROLL_FNORTE
ENE_SUR
ENE_HORIZONTAL
GIRA_ENE
ES_HUMO
rts
;*** Calcula XY
CALC_XY
pha
asl
tay
pla
cmp #128
bcc J_CALC_XY
inc CME1+2
inc CME2+2
J_CALC_XY
clc
CME1 lda TABLADL,Y
adc POSCENE
sta PUNTFUE ;AREA XY Lo
iny
CME2 lda TABLADL,Y
adc #0
sta PUNTFUE+1 ;AREA XY Hi
lda #>TABLADL
sta CME1+2
sta CME2+2
rts
TABLENE
.BYTE 1 ;STATE
.BYTE 0 ;Direccion
.BYTE 66 ;Pos X
.BYTE 0 ;Columna
.BYTE 169 ;Pos Y
.BYTE 0 ;Linea
.WORD ENE1 ;Font
.WORD E1BU ;Buffer
.BYTE 7 ;CONTH
.BYTE 7 ;CONTV
.BYTE 1,66,0,168,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 1,66,0,168,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 1,66,0,168,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 1,66,0,168,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 1,66,0,168,0,0,0,0,0,0,0,0,0,0,0,0
.BYTE 1,66,0,168,0,0,0,0,0,0,0,0,0,0,0,0
MASCNORTE
.BYTE 255,252,252,255
.BYTE 195,0,0,0
.BYTE 255,63,63,255
.BYTE 252,240,240,240
.BYTE 0,0,0,0
.BYTE 63,15,15,15
POSINIENE
.BYTE 66,168
.BYTE 66,168
.BYTE 66,168
.BYTE 66,168
.BYTE 66,168
.BYTE 66,168
.BYTE 66,168
AI_ENEMIGO
rts