mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-08 16:07:14 +00:00
200 lines
2.7 KiB
ArmAsm
200 lines
2.7 KiB
ArmAsm
|
|
; someone pressed UP
|
|
|
|
up_action:
|
|
|
|
|
|
; set X and Y value
|
|
; convert tile values to X,Y
|
|
; X=((DUKE_X/2)-1)+TILEX
|
|
|
|
lda DUKE_X
|
|
lsr
|
|
sec
|
|
sbc #1
|
|
clc
|
|
adc TILEMAP_X
|
|
sta XPOS
|
|
|
|
; Y = (DUKEY/4)+TILEY
|
|
lda DUKE_Y
|
|
lsr
|
|
lsr
|
|
clc
|
|
adc TILEMAP_Y
|
|
sta YPOS
|
|
|
|
; $39,$22 = 57,34
|
|
|
|
; check if it's a key slot
|
|
;check_red_keyhole:
|
|
;
|
|
;
|
|
; ; key slot is 280,148
|
|
; ; 280,148 (-80,-12) -> 200,136 -> (/4,/4) -> 50,34
|
|
;
|
|
; lda XPOS
|
|
; cmp #50
|
|
; beq redkey_x
|
|
; cmp #51
|
|
; bne check_if_exit
|
|
|
|
;redkey_x:
|
|
;
|
|
; lda YPOS
|
|
; cmp #34
|
|
; bne check_if_exit
|
|
;
|
|
; ; check that we have the key
|
|
; lda INVENTORY
|
|
; and #INV_RED_KEY
|
|
; bne open_the_wall
|
|
;
|
|
;no_red_key:
|
|
; jsr buzzer_noise
|
|
; jmp done_up_action
|
|
;
|
|
; open the red wall
|
|
; there has to be a more efficient way of doing this
|
|
;open_the_wall:
|
|
; ; reset smc
|
|
; lda #>BIG_TILEMAP
|
|
; sta rwr_smc1+2
|
|
; sta rwr_smc2+2
|
|
;
|
|
;remove_red_wall_outer:
|
|
; ldx #0
|
|
;remove_red_wall_loop:
|
|
;rwr_smc1:
|
|
; lda BIG_TILEMAP,X
|
|
; cmp #49 ; red key tile
|
|
; bne not_red_tile
|
|
; lda #2 ; lblue bg tile
|
|
;rwr_smc2:
|
|
; sta BIG_TILEMAP,X
|
|
;not_red_tile:
|
|
; inx
|
|
; bne remove_red_wall_loop
|
|
;
|
|
; inc rwr_smc1+2
|
|
; inc rwr_smc2+2
|
|
;
|
|
; lda rwr_smc1+2
|
|
; cmp #(>BIG_TILEMAP)+40
|
|
; bne remove_red_wall_outer
|
|
;
|
|
; ; refresh local tilemap
|
|
;
|
|
; jsr copy_tilemap_subset
|
|
;
|
|
; jsr rumble_noise
|
|
|
|
; jmp done_up_action
|
|
|
|
|
|
; check if it's the exit
|
|
check_if_exit:
|
|
|
|
; exit is 924,84
|
|
; 924,84 (-80,-12) -> 844,72 -> (/4,/4) -> 211,18
|
|
|
|
lda XPOS
|
|
cmp #211
|
|
beq exit_x
|
|
|
|
cmp #212
|
|
bne done_up_action
|
|
|
|
exit_x:
|
|
lda YPOS
|
|
cmp #18
|
|
bne done_up_action
|
|
|
|
lda #1
|
|
sta DOOR_ACTIVATED
|
|
|
|
sta FRAMEL ; restart timer
|
|
|
|
done_up_action:
|
|
|
|
rts
|
|
|
|
|
|
;==========================
|
|
; open the door, end level
|
|
;==========================
|
|
check_open_door:
|
|
lda DOOR_ACTIVATED
|
|
beq done_open_door
|
|
|
|
asl
|
|
tay
|
|
lda door_opening,Y
|
|
sta INL
|
|
lda door_opening+1,Y
|
|
sta INH
|
|
|
|
; need to find actual door location
|
|
; it's at 211,18
|
|
; Y is going to be at 20 unless something weird is going on
|
|
; X is going to be ((211-TILE_X)+2)*2
|
|
|
|
lda #213 ; +2, edge of screen
|
|
sec
|
|
sbc TILEMAP_X
|
|
asl
|
|
sta XPOS
|
|
|
|
lda #20
|
|
sta YPOS
|
|
|
|
jsr put_sprite_crop
|
|
|
|
lda FRAMEL
|
|
and #$7
|
|
bne done_open_door
|
|
|
|
; increment
|
|
|
|
inc DOOR_ACTIVATED
|
|
lda DOOR_ACTIVATED
|
|
cmp #6
|
|
bne done_open_door
|
|
|
|
jsr level_end
|
|
|
|
done_open_door:
|
|
rts
|
|
|
|
|
|
|
|
door_opening:
|
|
.word door_sprite0
|
|
.word door_sprite0
|
|
.word door_sprite1
|
|
.word door_sprite2
|
|
.word door_sprite1
|
|
.word door_sprite0
|
|
|
|
door_sprite0:
|
|
.byte 4,4
|
|
.byte $15,$55,$55,$f5
|
|
.byte $55,$f5,$5f,$55
|
|
.byte $25,$25,$25,$25
|
|
.byte $55,$55,$55,$55
|
|
|
|
door_sprite1:
|
|
.byte 4,4
|
|
.byte $51,$f5,$f5,$5f
|
|
.byte $55,$05,$05,$50
|
|
.byte $05,$50,$50,$55
|
|
.byte $52,$55,$55,$52
|
|
|
|
door_sprite2:
|
|
.byte 4,4
|
|
.byte $f5,$05,$05,$f0
|
|
.byte $55,$00,$00,$55
|
|
.byte $55,$00,$00,$55
|
|
.byte $05,$50,$50,$25
|
|
|