mirror of
https://github.com/a2geek/jewel-of-kaldun.git
synced 2024-09-27 08:54:40 +00:00
333 lines
8.7 KiB
ArmAsm
333 lines
8.7 KiB
ArmAsm
|
********************************
|
||
|
* Display map routines: *
|
||
|
********************************
|
||
|
|
||
|
* Default values:
|
||
|
|
||
|
WSCREEN = 24
|
||
|
HSCREEN = 20
|
||
|
WMAP = 48
|
||
|
HMAP = 32
|
||
|
|
||
|
********************************
|
||
|
* Get the value of map @ (x,y) *
|
||
|
********************************
|
||
|
|
||
|
MAPINDEX DEX
|
||
|
DEY
|
||
|
STX XOFF
|
||
|
STY YOFF
|
||
|
LDA #0
|
||
|
STA XOFF+1
|
||
|
STA YOFF+1
|
||
|
LDA MAPSW
|
||
|
BMI :NOMONS
|
||
|
*-------------------------------
|
||
|
LDY #0
|
||
|
:REPEAT LDA M_HP,Y ; if HP = 0, no monster at this
|
||
|
BEQ :CHECK ; location.
|
||
|
LDA M_LEVEL,Y ; check if monster is on the
|
||
|
CMP MAPADDR+1 ; correct level
|
||
|
BNE :CHECK
|
||
|
LDA M_X,Y ; check x-coordinate against
|
||
|
CMP XOFF ; map x-coordinate.
|
||
|
BNE :CHECK
|
||
|
LDA M_Y,Y ; check y-coordinate
|
||
|
CMP YOFF
|
||
|
BNE :CHECK
|
||
|
LDA XOFF ; ensure that map x and map y
|
||
|
ORA YOFF ; are not both 0 (no monster)
|
||
|
BEQ :CHECK
|
||
|
LDA M_TYPE,Y ; get the monster type!
|
||
|
STY MAP_MNUM
|
||
|
RTS ; have mons type, so exit
|
||
|
:CHECK INY
|
||
|
CPY #MONSMAX
|
||
|
BLT :REPEAT
|
||
|
*-------------------------------
|
||
|
:NOMONS IMULW YOFF;#WMAP;PTR
|
||
|
ADDW PTR;MAPADDR;PTR
|
||
|
LDY XOFF
|
||
|
LDA (PTR),Y
|
||
|
RTS
|
||
|
MAP_MNUM HEX 00
|
||
|
|
||
|
********************************
|
||
|
* Update Screen *
|
||
|
********************************
|
||
|
|
||
|
UPSCREEN MOVB X0;AX
|
||
|
MOVB Y0;AY
|
||
|
MOVB CX;X0
|
||
|
MOVB CY;Y0
|
||
|
MOVB CX;X1
|
||
|
MOVB CY;Y1
|
||
|
LDA #%10000000
|
||
|
STA CLRFLAG
|
||
|
LDA #%00000000
|
||
|
STA XORFLAG
|
||
|
:0 LDA Y0
|
||
|
CMP #2
|
||
|
BLT :1
|
||
|
DEC Y0
|
||
|
LDX CX
|
||
|
LDY Y0
|
||
|
JSR MAPCHECK
|
||
|
BCC :0
|
||
|
:1 LDA X0
|
||
|
CMP #2
|
||
|
BLT :2
|
||
|
DEC X0
|
||
|
LDX X0
|
||
|
LDY CY
|
||
|
JSR MAPCHECK
|
||
|
BCC :1
|
||
|
:2 LDA X1
|
||
|
CMP #WMAP+1
|
||
|
BGE :3
|
||
|
INC X1
|
||
|
LDX X1
|
||
|
LDY CY
|
||
|
JSR MAPCHECK
|
||
|
BCC :2
|
||
|
:3 LDA Y1
|
||
|
CMP #HMAP+1
|
||
|
BGE :4
|
||
|
INC Y1
|
||
|
LDX CX
|
||
|
LDY Y1
|
||
|
JSR MAPCHECK
|
||
|
BCC :3
|
||
|
:4 SEC
|
||
|
LDA Y1
|
||
|
SBC Y0
|
||
|
CMP #HSCREEN-1
|
||
|
BLT :5
|
||
|
SEC
|
||
|
LDA CY
|
||
|
SBC Y0
|
||
|
STA TEMP0
|
||
|
SEC
|
||
|
LDA Y1
|
||
|
SBC CY
|
||
|
CMP TEMP0
|
||
|
BLT :40
|
||
|
DEC Y1
|
||
|
JMP :4
|
||
|
:40 INC Y0
|
||
|
JMP :4
|
||
|
:5 SEC
|
||
|
LDA X1
|
||
|
SBC X0
|
||
|
CMP #WSCREEN-1
|
||
|
BLT :6
|
||
|
SEC
|
||
|
LDA CX
|
||
|
SBC X0
|
||
|
STA TEMP0
|
||
|
SEC
|
||
|
LDA X1
|
||
|
SBC CX
|
||
|
CMP TEMP0
|
||
|
BLT :50
|
||
|
DEC X1
|
||
|
JMP :5
|
||
|
:50 INC X0
|
||
|
JMP :5
|
||
|
:6 SUBB X1;X0;WX
|
||
|
SUBB Y1;Y0;WY
|
||
|
LDA WX
|
||
|
LSR
|
||
|
STA ZX
|
||
|
SEC
|
||
|
LDA #WSCREEN/2
|
||
|
SBC ZX
|
||
|
STA ZX
|
||
|
LDA WY
|
||
|
LSR
|
||
|
STA ZY
|
||
|
SEC
|
||
|
LDA #HSCREEN/2
|
||
|
SBC ZY
|
||
|
STA ZY
|
||
|
LDA OX
|
||
|
ORA OY
|
||
|
BPL :7
|
||
|
MOVB ZX;OX
|
||
|
MOVB ZY;OY
|
||
|
JSR HCLEAR
|
||
|
JMP :8
|
||
|
:7 LDA #%10000000 ; to erase old picture
|
||
|
STA XORFLAG ; of Meltok ...
|
||
|
LDA #%00000000
|
||
|
STA CLRFLAG
|
||
|
MOVB #2;SNUM
|
||
|
LDA CH:X+1 ; Should be current location
|
||
|
LDX CH:X ; of Meltok on screen.
|
||
|
LDY CH:Y ; Including "sliding" movement.
|
||
|
JSR DRAWSHAP ; Draw it
|
||
|
LDA #%00000000 ; Clear reverse flag
|
||
|
STA XORFLAG ; Done.
|
||
|
LDA #%10000000
|
||
|
STA CLRFLAG
|
||
|
SUBB AX;X0;DX
|
||
|
SUBB AY;Y0;DY
|
||
|
SUBB OX;DX;NX
|
||
|
SUBB OY;DY;NY
|
||
|
:70 LDA NX
|
||
|
BPL :71
|
||
|
JSR HRIGHT
|
||
|
INC NX
|
||
|
JMP :70
|
||
|
:71 LDA NY
|
||
|
BPL :72
|
||
|
JSR HDOWN
|
||
|
INC NY
|
||
|
JMP :71
|
||
|
:72 CLC
|
||
|
LDA NY
|
||
|
ADC WY
|
||
|
CMP #19
|
||
|
BLT :73
|
||
|
JSR HUP
|
||
|
DEC NY
|
||
|
JMP :72
|
||
|
:73 CLC
|
||
|
LDA NX
|
||
|
ADC WX
|
||
|
CMP #24
|
||
|
BLT :74
|
||
|
JSR HLEFT
|
||
|
DEC NX
|
||
|
JMP :73
|
||
|
:74 MOVB NX;ZX
|
||
|
MOVB NY;ZY
|
||
|
MOVB ZX;OX
|
||
|
MOVB ZY;OY
|
||
|
:8 MOVB Y0;TEMPY
|
||
|
:_NEXTY MOVB X0;TEMPX
|
||
|
:_NEXTX LDY TEMPY
|
||
|
LDX TEMPX
|
||
|
JSR MAPINDEX
|
||
|
CMP #15 ; show monsters too!
|
||
|
BLT :SHGOOD
|
||
|
CMP #98
|
||
|
BNE :NEXTSH1
|
||
|
LDA #1
|
||
|
JMP :SHGOOD
|
||
|
:NEXTSH1 CMP #99
|
||
|
BNE :NEXTSH2
|
||
|
LDA #6
|
||
|
JMP :SHGOOD
|
||
|
:NEXTSH2 CMP #97
|
||
|
BNE :NEXTSH3
|
||
|
LDA #4
|
||
|
JMP :SHGOOD
|
||
|
:NEXTSH3 CMP #100
|
||
|
BLT :NEXTSH4
|
||
|
LDA #0
|
||
|
JMP :SHGOOD
|
||
|
:NEXTSH4 CMP #22 ; barred door
|
||
|
BEQ :SHGOOD
|
||
|
:NEXTSH5 LDA #15 ; circle -- for errors
|
||
|
:SHGOOD STA SNUM
|
||
|
NILB XPLACE+1
|
||
|
NILB YPLACE+1
|
||
|
MOVB ZX;XPLACE
|
||
|
MOVB ZY;YPLACE
|
||
|
LDY #3
|
||
|
:MUL8 ASL XPLACE
|
||
|
ROL XPLACE+1
|
||
|
ASL YPLACE
|
||
|
ROL YPLACE+1
|
||
|
DEY
|
||
|
BNE :MUL8
|
||
|
LDA SNUM
|
||
|
CMP #12
|
||
|
BLT :MOREYET
|
||
|
CMP #14+1
|
||
|
BGE :MOREYET
|
||
|
LDY MAP_MNUM
|
||
|
LDA YPLACE
|
||
|
STA M_Y0,Y
|
||
|
LDA XPLACE
|
||
|
STA M_X0,Y
|
||
|
LDA XPLACE+1
|
||
|
STA M_X1,Y
|
||
|
:MOREYET LDY YPLACE
|
||
|
LDX XPLACE
|
||
|
LDA XPLACE+1
|
||
|
JSR DRAWSHAP
|
||
|
LDA TEMPX
|
||
|
CMP CX
|
||
|
BNE :99
|
||
|
LDA TEMPY
|
||
|
CMP CY
|
||
|
BNE :99
|
||
|
LDA #%00000000
|
||
|
STA CLRFLAG
|
||
|
LDA #%10000000
|
||
|
STA XORFLAG
|
||
|
MOVB #2;SNUM
|
||
|
LDY YPLACE
|
||
|
LDX XPLACE
|
||
|
LDA XPLACE+1
|
||
|
JSR DRAWSHAP
|
||
|
MOVW XPLACE;CH:X
|
||
|
MOVW YPLACE;CH:Y
|
||
|
LDA #%00000000
|
||
|
STA XORFLAG
|
||
|
LDA #%10000000
|
||
|
STA CLRFLAG
|
||
|
:99 INC ZX
|
||
|
INC TEMPX
|
||
|
LDA TEMPX
|
||
|
CMP #WMAP
|
||
|
BEQ :9999
|
||
|
BGE :100
|
||
|
:9999 CMP X1
|
||
|
BLT :NEXTX
|
||
|
BEQ :NEXTX
|
||
|
:100 SUBB ZX;WX;ZX
|
||
|
DEC ZX
|
||
|
INC ZY
|
||
|
INC TEMPY
|
||
|
LDA TEMPY
|
||
|
CMP #HMAP
|
||
|
BEQ :1111
|
||
|
BGE :EXIT
|
||
|
:1111 CMP Y1
|
||
|
BLT :NEXTY
|
||
|
BEQ :NEXTY
|
||
|
JMP :EXIT
|
||
|
:NEXTY JMP :_NEXTY
|
||
|
:NEXTX JMP :_NEXTX
|
||
|
:EXIT RTS
|
||
|
|
||
|
********************************
|
||
|
* Map Check verifies that the *
|
||
|
* check square is valid to *
|
||
|
* see through. *
|
||
|
********************************
|
||
|
MAPSW HEX 00
|
||
|
MAPCHECK LDA #$80 ; special switch to ignore the
|
||
|
STA MAPSW ; monsters!
|
||
|
JSR MAPINDEX ; get data
|
||
|
PHA ; save data
|
||
|
LDA #0 ; reset switch to normal
|
||
|
STA MAPSW ; ...
|
||
|
PLA ; restore data and work with it:
|
||
|
CMP #99
|
||
|
BGE :GOOD
|
||
|
CMP #0
|
||
|
BEQ :GOOD
|
||
|
CMP #6
|
||
|
BLT :BAD
|
||
|
CMP #12 ; for monsters #12-#14
|
||
|
BGE :BAD
|
||
|
:GOOD CLC
|
||
|
RTS
|
||
|
:BAD SEC
|
||
|
RTS
|
||
|
|