Allow moving through doors map
This commit is contained in:
@@ -7,11 +7,19 @@ DrawWackyDoorRandoStuff:
|
|||||||
LDA.b RoomIndex
|
LDA.b RoomIndex
|
||||||
AND.w #$00FF
|
AND.w #$00FF
|
||||||
STA.l CurrentDisplayedRoom
|
STA.l CurrentDisplayedRoom
|
||||||
|
|
||||||
|
DrawCurrentSupertile:
|
||||||
|
LDA.w #$0000
|
||||||
|
STA.l DoorSlotCursor
|
||||||
|
|
||||||
|
LDA.l CurrentDisplayedRoom
|
||||||
STA.b $CA
|
STA.b $CA
|
||||||
LDX.w #!CenterTile
|
LDX.w #!CenterTile
|
||||||
JSL DrawFullRoomTile
|
JSL DrawFullRoomTile
|
||||||
|
|
||||||
JSL ClearDoorSlotsTable
|
JSL ClearDoorSlotsTable
|
||||||
|
LDA.l CurrentDisplayedRoom
|
||||||
|
STA.l DoorSlots
|
||||||
|
|
||||||
; multiply room id by 24 to get index in doors table
|
; multiply room id by 24 to get index in doors table
|
||||||
LDA.l CurrentDisplayedRoom
|
LDA.l CurrentDisplayedRoom
|
||||||
@@ -28,7 +36,7 @@ DrawWackyDoorRandoStuff:
|
|||||||
RTL
|
RTL
|
||||||
|
|
||||||
ClearDoorSlotsTable:
|
ClearDoorSlotsTable:
|
||||||
LDX.w #$0026
|
LDX.w #$0028
|
||||||
LDA.w #$FF0F
|
LDA.w #$FF0F
|
||||||
- STA.l DoorSlots, X
|
- STA.l DoorSlots, X
|
||||||
DEX : DEX
|
DEX : DEX
|
||||||
@@ -37,7 +45,7 @@ ClearDoorSlotsTable:
|
|||||||
|
|
||||||
ClearDoorSlotScratch:
|
ClearDoorSlotScratch:
|
||||||
PHX
|
PHX
|
||||||
LDX.w #$0006
|
LDX.w #$0004
|
||||||
LDA.w #$FF0F
|
LDA.w #$FF0F
|
||||||
- STA.l DoorSlotScratch, X
|
- STA.l DoorSlotScratch, X
|
||||||
DEX : DEX
|
DEX : DEX
|
||||||
@@ -566,7 +574,16 @@ DrawTripleConnector:
|
|||||||
|
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
DrawBlinkerFancyMode:
|
DrawDoorsMapSprites:
|
||||||
|
LDA.l CurrentDisplayedRoom
|
||||||
|
CMP.b RoomIndex
|
||||||
|
BNE +
|
||||||
|
JSR DrawDoorsMapBlinker
|
||||||
|
+
|
||||||
|
JSR DrawDoorsMapCursor
|
||||||
|
RTL
|
||||||
|
|
||||||
|
DrawDoorsMapBlinker:
|
||||||
LDX.b $00
|
LDX.b $00
|
||||||
STZ.w OAMBufferAux, X
|
STZ.w OAMBufferAux, X
|
||||||
TXA
|
TXA
|
||||||
@@ -599,4 +616,188 @@ DrawBlinkerFancyMode:
|
|||||||
|
|
||||||
LDA.w $8AEB58, Y
|
LDA.w $8AEB58, Y
|
||||||
STA.w OAMBuffer+3, X
|
STA.w OAMBuffer+3, X
|
||||||
|
|
||||||
|
INC.b $00
|
||||||
|
RTS
|
||||||
|
|
||||||
|
DrawDoorsMapCursor:
|
||||||
|
LDA.l DoorSlotCursor
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA.l DoorSlotsSprites, X
|
||||||
|
STA.b $0E
|
||||||
|
LDA.l DoorSlotsSprites+1, X
|
||||||
|
STA.b $0F
|
||||||
|
|
||||||
|
LDY.b #$03
|
||||||
|
|
||||||
|
.next_object
|
||||||
|
LDX.b $00
|
||||||
|
LDA.b #$02
|
||||||
|
STA.w OAMBufferAux, X
|
||||||
|
TXA
|
||||||
|
ASL A : ASL A
|
||||||
|
TAX
|
||||||
|
|
||||||
|
LDA.b $0E
|
||||||
|
CLC : ADC.w $8AEB9A, Y
|
||||||
|
STA.w OAMBuffer, X
|
||||||
|
|
||||||
|
LDA.b $0F
|
||||||
|
CLC : ADC.w $8AEB9E, Y
|
||||||
|
DEC A
|
||||||
|
STA.w OAMBuffer+1, X
|
||||||
|
|
||||||
|
STZ.w OAMBuffer+2, X
|
||||||
|
|
||||||
|
LDA.b FrameCounter
|
||||||
|
AND.b #$04
|
||||||
|
BNE +
|
||||||
|
LDA.b #$05
|
||||||
|
+
|
||||||
|
ASL A
|
||||||
|
ORA.w $8AEBA2, Y
|
||||||
|
STA.w OAMBuffer+3, X
|
||||||
|
|
||||||
|
INC.b $00
|
||||||
|
DEY
|
||||||
|
BPL .next_object
|
||||||
|
|
||||||
|
RTS
|
||||||
|
|
||||||
|
; $00 - direction to move
|
||||||
|
; $01 - current spot
|
||||||
|
MoveDoorsMapCursor:
|
||||||
|
PHP
|
||||||
|
SEP #$30
|
||||||
|
LDA.l DoorSlotCursor
|
||||||
|
STA.b $01
|
||||||
|
|
||||||
|
.move_again
|
||||||
|
LDA.b $01
|
||||||
|
ASL A : ASL A
|
||||||
|
CLC : ADC.b $00
|
||||||
|
TAX
|
||||||
|
LDA.l NextCursorSlot, X
|
||||||
|
BPL .easy
|
||||||
|
CMP.b #$FF
|
||||||
|
BEQ .no_move
|
||||||
|
BIT.b #$40
|
||||||
|
BNE .almost_easy
|
||||||
|
|
||||||
|
LDA.b $00
|
||||||
|
TAX
|
||||||
|
LDA.l NextCursorSpecial_center_offset, X
|
||||||
|
TAX
|
||||||
|
DEX
|
||||||
|
.try_next
|
||||||
|
INX
|
||||||
|
LDA.l NextCursorSpecial_center, X
|
||||||
|
BMI .no_move
|
||||||
|
PHX
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA.l DoorSlots+1, X
|
||||||
|
PLX
|
||||||
|
CMP.b #$00
|
||||||
|
BMI .try_next
|
||||||
|
LDA.l NextCursorSpecial_center, X
|
||||||
|
STA.b $01
|
||||||
|
BRA .write
|
||||||
|
|
||||||
|
.almost_easy
|
||||||
|
BIT.b #$20
|
||||||
|
BNE .from_end
|
||||||
|
|
||||||
|
.from_start
|
||||||
|
AND.b #$03
|
||||||
|
TAX
|
||||||
|
LDA.l NextCursorSpecial_start_direction, X
|
||||||
|
STA.b $00
|
||||||
|
LDA.l NextCursorSpecial_start_index, X
|
||||||
|
BRA .easy
|
||||||
|
|
||||||
|
.from_end
|
||||||
|
AND.b #$03
|
||||||
|
TAX
|
||||||
|
LDA.l NextCursorSpecial_end_direction, X
|
||||||
|
STA.b $00
|
||||||
|
LDA.l NextCursorSpecial_end_index, X
|
||||||
|
BRA .easy
|
||||||
|
|
||||||
|
.easy
|
||||||
|
STA.b $01
|
||||||
|
|
||||||
|
.check
|
||||||
|
LDA.b $01
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA.l DoorSlots+1, X
|
||||||
|
BMI .move_again
|
||||||
|
|
||||||
|
.write
|
||||||
|
LDA.b $01
|
||||||
|
STA.l DoorSlotCursor
|
||||||
|
LDA.b #$20
|
||||||
|
STA.w $012F
|
||||||
|
BRA .done
|
||||||
|
|
||||||
|
.no_move
|
||||||
|
LDA.b #$3C
|
||||||
|
STA.w $012E
|
||||||
|
|
||||||
|
.done
|
||||||
|
PLP
|
||||||
|
RTL
|
||||||
|
|
||||||
|
DoorsMapSelectCursor:
|
||||||
|
PHP
|
||||||
|
SEP #$30
|
||||||
|
|
||||||
|
LDA.l DoorSlotCursor
|
||||||
|
BEQ .done
|
||||||
|
|
||||||
|
ASL A
|
||||||
|
TAX
|
||||||
|
LDA.l DoorSlots, X
|
||||||
|
|
||||||
|
STA.l CurrentDisplayedRoom
|
||||||
|
REP #$30
|
||||||
|
JSL ClearDoorsMapBG2
|
||||||
|
JSL DrawCurrentSupertile
|
||||||
|
|
||||||
|
SEP #$30
|
||||||
|
|
||||||
|
LDA.b #$08
|
||||||
|
STA.b $17
|
||||||
|
|
||||||
|
LDA.b #$20
|
||||||
|
STA.w $012F
|
||||||
|
|
||||||
|
.done
|
||||||
|
PLP
|
||||||
|
RTL
|
||||||
|
|
||||||
|
ClearDoorsMapBG2:
|
||||||
|
LDX.w #$0220
|
||||||
|
LDA.w #$000B
|
||||||
|
STA.b $00
|
||||||
|
STA.b $02
|
||||||
|
LDA.w #$0300
|
||||||
|
.next
|
||||||
|
STA.l $7F0000, X
|
||||||
|
INX : INX
|
||||||
|
DEC.b $02
|
||||||
|
BPL .next
|
||||||
|
|
||||||
|
LDA.w #$000B
|
||||||
|
STA.b $02
|
||||||
|
TXA
|
||||||
|
CLC : ADC.w #$0028
|
||||||
|
TAX
|
||||||
|
|
||||||
|
LDA.w #$0300
|
||||||
|
DEC.b $00
|
||||||
|
BPL .next
|
||||||
|
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ DoorConnectionTiles:
|
|||||||
dw $C1D4, $C1D5 ; $02 top -> middle
|
dw $C1D4, $C1D5 ; $02 top -> middle
|
||||||
dw $81C7, $41C7 ; $03 top -> bottom
|
dw $81C7, $41C7 ; $03 top -> bottom
|
||||||
dw $81D4, $81D5 ; $04 middle -> top
|
dw $81D4, $81D5 ; $04 middle -> top
|
||||||
dw $01C5, $41C5 ; $05 middle -> middle
|
dw $01C5, $81C5 ; $05 middle -> middle
|
||||||
dw $01D5, $01D4 ; $06 middle -> bottom
|
dw $01D5, $01D4 ; $06 middle -> bottom
|
||||||
dw $C1C7, $01C7 ; $07 bottom -> top
|
dw $C1C7, $01C7 ; $07 bottom -> top
|
||||||
dw $41D5, $41D4 ; $08 bottom -> middle
|
dw $41D5, $41D4 ; $08 bottom -> middle
|
||||||
|
|||||||
@@ -1,4 +1,22 @@
|
|||||||
|
DoorSlotsSprites:
|
||||||
|
; center
|
||||||
|
dw $68A8
|
||||||
|
; north
|
||||||
|
dw $4090, $40A8, $40C0
|
||||||
|
dw $4098, $40B8
|
||||||
|
; west
|
||||||
|
dw $5080, $6880, $8080
|
||||||
|
dw $5880, $7880
|
||||||
|
; south
|
||||||
|
dw $9090, $90A8, $90C0
|
||||||
|
dw $9098, $90B8
|
||||||
|
; east
|
||||||
|
dw $50D0, $68D0, $80D0
|
||||||
|
dw $58D0, $78D0
|
||||||
|
|
||||||
DoorSlotsBG2:
|
DoorSlotsBG2:
|
||||||
|
; center
|
||||||
|
dw $0000
|
||||||
; north
|
; north
|
||||||
dw $FEBA, $FEC0, $FEC6
|
dw $FEBA, $FEC0, $FEC6
|
||||||
dw $FEBC, $FEC4
|
dw $FEBC, $FEC4
|
||||||
@@ -13,11 +31,56 @@ DoorSlotsBG2:
|
|||||||
dw $FF8A, $008A
|
dw $FF8A, $008A
|
||||||
|
|
||||||
DoorSlotSides:
|
DoorSlotSides:
|
||||||
db $00, $0A, $14, $1E
|
db $02, $0C, $16, $20
|
||||||
|
|
||||||
DoorSlotOffsets:
|
DoorSlotOffsets:
|
||||||
db $02, $02, $06, $00
|
db $02, $02, $06, $00
|
||||||
|
|
||||||
|
; up, left, down, right
|
||||||
|
NextCursorSlot:
|
||||||
|
db $80, $81, $82, $83
|
||||||
|
; top
|
||||||
|
db $FF, $C1, $00, $04
|
||||||
|
db $FF, $04, $00, $05
|
||||||
|
db $FF, $05, $00, $C3
|
||||||
|
db $FF, $01, $00, $02
|
||||||
|
db $FF, $02, $00, $03
|
||||||
|
; left
|
||||||
|
db $C0, $FF, $09, $00
|
||||||
|
db $09, $FF, $0A, $00
|
||||||
|
db $0A, $FF, $C2, $00
|
||||||
|
db $06, $FF, $07, $00
|
||||||
|
db $07, $FF, $08, $00
|
||||||
|
; bottom
|
||||||
|
db $00, $E1, $FF, $0E
|
||||||
|
db $00, $0E, $FF, $0F
|
||||||
|
db $00, $0F, $FF, $E3
|
||||||
|
db $00, $0B, $FF, $0C
|
||||||
|
db $00, $0C, $FF, $0D
|
||||||
|
; right
|
||||||
|
db $E0, $00, $13, $FF
|
||||||
|
db $13, $00, $14, $FF
|
||||||
|
db $14, $00, $E2, $FF
|
||||||
|
db $10, $00, $11, $FF
|
||||||
|
db $11, $00, $12, $FF
|
||||||
|
|
||||||
|
NextCursorSpecial:
|
||||||
|
.center
|
||||||
|
db $02, $04, $05, $01, $03, $FF
|
||||||
|
db $07, $09, $0A, $06, $08, $FF
|
||||||
|
db $0C, $0E, $0F, $0B, $0D, $FF
|
||||||
|
db $11, $13, $14, $10, $12, $FF
|
||||||
|
.center_offset
|
||||||
|
db $00, $06, $0C, $12
|
||||||
|
.start_index
|
||||||
|
db $01, $06, $0B, $10
|
||||||
|
.start_direction
|
||||||
|
db $03, $02, $03, $02
|
||||||
|
.end_index
|
||||||
|
db $03, $08, $0D, $12
|
||||||
|
.end_direction
|
||||||
|
db $01, $00, $01, $00
|
||||||
|
|
||||||
SingleEdgeCurrentRoomConnectors:
|
SingleEdgeCurrentRoomConnectors:
|
||||||
.north
|
.north
|
||||||
dw $01C0, $0300, $01C0, $0300, $01C0, $0300 ; left -> left
|
dw $01C0, $0300, $01C0, $0300, $01C0, $0300 ; left -> left
|
||||||
|
|||||||
@@ -1,14 +1,39 @@
|
|||||||
CheckSwitchMap:
|
CheckSwitchMap:
|
||||||
LDA.l DRMode
|
LDA.l DRMode
|
||||||
BEQ +
|
BEQ .not_fancy_door_map
|
||||||
LDA.l DungeonMapMode
|
LDA.l DungeonMapMode
|
||||||
BNE +
|
BNE .not_fancy_door_map
|
||||||
|
|
||||||
; fancy door map, will figure out later
|
; fancy door map
|
||||||
|
SEP #$20
|
||||||
|
LDA.b $F6
|
||||||
|
BIT.b #$80
|
||||||
|
BNE .select_new_room
|
||||||
|
LDA.b $F4
|
||||||
|
BIT.b #$80
|
||||||
|
BNE .select_new_room
|
||||||
|
|
||||||
|
AND.b #$0F
|
||||||
|
BEQ .doors_done
|
||||||
|
BIT.b #$08 : BEQ + : LDA.b #$00 : BRA .doors_move_cursor : +
|
||||||
|
BIT.b #$04 : BEQ + : LDA.b #$02 : BRA .doors_move_cursor : +
|
||||||
|
BIT.b #$02 : BEQ + : LDA.b #$01 : BRA .doors_move_cursor : +
|
||||||
|
LDA.b #$03
|
||||||
|
|
||||||
|
.doors_move_cursor
|
||||||
|
STA.b $00
|
||||||
|
JSL MoveDoorsMapCursor
|
||||||
|
BRA .doors_done
|
||||||
|
|
||||||
|
.select_new_room
|
||||||
|
JSL DoorsMapSelectCursor
|
||||||
|
|
||||||
|
.doors_done
|
||||||
|
REP #$20
|
||||||
LDA.w #$0002 ; ignore input! nothing to see here!
|
LDA.w #$0002 ; ignore input! nothing to see here!
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
+
|
.not_fancy_door_map
|
||||||
SEP #$20
|
SEP #$20
|
||||||
LDA.b $F6
|
LDA.b $F6
|
||||||
AND.b #$30
|
AND.b #$30
|
||||||
@@ -113,7 +138,7 @@ SkipMapSprites:
|
|||||||
BEQ .no_vanilla_draw
|
BEQ .no_vanilla_draw
|
||||||
JML $8AEADE
|
JML $8AEADE
|
||||||
.no_vanilla_draw
|
.no_vanilla_draw
|
||||||
JSL DrawBlinkerFancyMode
|
JSL DrawDoorsMapSprites
|
||||||
JML $8AEAFC
|
JML $8AEAFC
|
||||||
+
|
+
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
5
ram.asm
5
ram.asm
@@ -569,8 +569,9 @@ CachedCurrentFloor = $7EC22B ; to restore when closing
|
|||||||
CurrentDisplayedRoom = $7EC22C ; 2 bytes, used by dungeon map
|
CurrentDisplayedRoom = $7EC22C ; 2 bytes, used by dungeon map
|
||||||
DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map
|
DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map
|
||||||
;
|
;
|
||||||
DoorSlotScratch = $7EC230 ; 8 bytes, used by dungeon map
|
DoorSlots = $7EC230 ; $2A bytes, used by dungeon map
|
||||||
DoorSlots = $7EC238 ; $28 bytes, used by dungeon map
|
DoorSlotScratch = $7EC25A ; 6 bytes, used by dungeon map
|
||||||
|
DoorSlotCursor = $7EC260 ; 2 bytes, used by dungeon map
|
||||||
;
|
;
|
||||||
LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes.
|
LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes.
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user