13 Commits

10 changed files with 157 additions and 52 deletions

View File

@@ -334,6 +334,8 @@ DungeonMapDoorConnectors:
incbin "menu/door_connectors.3bppc" incbin "menu/door_connectors.3bppc"
MapSheetD4: MapSheetD4:
incbin "menu/map_sheet_d4.3bppc" incbin "menu/map_sheet_d4.3bppc"
DRSheet14:
incbin "menu/dr_sheet_14.3bppc"
org $8CD7DF org $8CD7DF
incsrc data/playernamecharmap.asm incsrc data/playernamecharmap.asm

View File

@@ -368,7 +368,13 @@ CheckEnemies:
ASL A ASL A
TAX TAX
LDA.l UWSpritesPointers, X
; get sprite pointer table
LDA.l $89C298 : STA.b $04
LDA.w #$0089 : STA.b $06
TXY
; get sprite pointer for room
LDA.b [$04], Y
INC A ; skip the layered/unlayered indicator INC A ; skip the layered/unlayered indicator
STA.b $04 STA.b $04
LDA.w #bank(UWSpritesData) LDA.w #bank(UWSpritesData)

View File

@@ -1453,8 +1453,8 @@ MoveDoorsMapCursor:
BRA .done BRA .done
.no_move .no_move
LDA.b #$3C ; LDA.b #$3C
STA.w $012E ; STA.w $012E
.done .done
PLP PLP

View File

@@ -24,6 +24,8 @@ endmacro
%WriteGFXSheetPointer($62, DungeonMapIcons5) %WriteGFXSheetPointer($62, DungeonMapIcons5)
%WriteGFXSheetPointer($63, DungeonMapIcons6) %WriteGFXSheetPointer($63, DungeonMapIcons6)
%WriteGFXSheetPointer($14, DRSheet14)
pullpc pullpc
incsrc doors_dungeon_map.asm incsrc doors_dungeon_map.asm

View File

@@ -12,7 +12,8 @@ db $01
GKRomVersion: GKRomVersion:
; $01 = Dungeon Maps ; $01 = Dungeon Maps
; .., $01 = Dark rooms don't show on map from visition ; .., $01 = Dark rooms don't show on map from visition
db $01, $01, $00 ; .., $02 = OW Fog and Grid modes
db $01, $02, $00
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
;================================================================================ ;================================================================================

BIN
menu/dr_sheet_14.3bpp Normal file

Binary file not shown.

BIN
menu/dr_sheet_14.3bppc Normal file

Binary file not shown.

View File

@@ -49,27 +49,27 @@ WorldMapIcon_pos:
.hc .hc
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
.ep .ep
dw $0F30, $06E0, $FF00, $FF00, $0F30, $06E0 dw $0F40, $0660, $FF00, $FF00, $0F40, $0660
.dp .dp
dw $0170, $0E50, $FF00, $FF00, $0170, $0E50 dw $0140, $0D00, $FF00, $FF00, $0140, $0D00
.at .at
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
.sp .sp
dw $8790, $0FD0, $FF00, $FF00, $8790, $0FD0 dw $8778, $0F50, $FF00, $FF00, $8778, $0F50
.pod .pod
dw $8F30, $06E0, $FF00, $FF00, $8F30, $06E0 dw $8F40, $0660, $FF00, $FF00, $8F40, $0660
.mm .mm
dw $8160, $0D80, $FF00, $FF00, $8160, $0D80 dw $8148, $0D00, $FF00, $FF00, $8148, $0D00
.sw .sw
dw $80F0, $0160, $FF00, $FF00, $80F0, $0160 dw $80B0, $00C0, $FF00, $FF00, $80B0, $00C0
.ip .ip
dw $8CB0, $0E80, $FF00, $FF00, $8CB0, $0E80 dw $8CA0, $0E00, $FF00, $FF00, $8CA0, $0E00
.toh .toh
dw $0900, $0130, $FF00, $FF00, $0900, $0130 dw $0900, $0100, $FF00, $FF00, $0900, $0100
.tt .tt
dw $8240, $0840, $FF00, $FF00, $8240, $0840 dw $81F8, $0800, $FF00, $FF00, $81F8, $0800
.tr .tr
dw $8F30, $01B0, $FF00, $FF00, $8F30, $01B0 dw $8F20, $0100, $FF00, $FF00, $8F20, $0100
.gt .gt
dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00
@@ -262,8 +262,8 @@ DrawPrizesOverride:
; determine if draw and/or continue ; determine if draw and/or continue
JSR WorldMap_ValidateCoords : BCS .advance JSR WorldMap_ValidateCoords : BCS .advance
JSR WorldMap_DrawTileOverlay
JSR WorldMap_DrawTile JSR WorldMap_DrawTile
JSR WorldMap_DrawTileOverlay
.advance .advance
LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : + LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : +
PLB PLB
@@ -321,10 +321,6 @@ RTS
WorldMap_DrawTile: WorldMap_DrawTile:
LDA.b Scrap00 : PHA LDA.b Scrap00 : PHA
SEP #$20
LDX.b Scrap0B : TXA : STA.b (OAMPtr+2)
INC.b OAMPtr+2
REP #$20
LDA.l $7EC10A : BIT.w #$4000 : SEP #$20 : BNE .raw_coords ; use raw OAM coordinates LDA.l $7EC10A : BIT.w #$4000 : SEP #$20 : BNE .raw_coords ; use raw OAM coordinates
JSR WorldMap_CalculateOAMCoordinates JSR WorldMap_CalculateOAMCoordinates
BCS .apply_offsets BCS .apply_offsets
@@ -345,6 +341,8 @@ WorldMap_DrawTile:
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SBC.b #$04 : STA.b Scrap0F LDA.b Scrap0F : SBC.b #$04 : STA.b Scrap0F
.aligned .aligned
LDX.b Scrap0B : TXA : STA.b (OAMPtr+2)
INC.b OAMPtr+2
REP #$20 REP #$20
LDA.b Scrap0E : STA.b (OAMPtr) LDA.b Scrap0E : STA.b (OAMPtr)
INC.b OAMPtr : INC.b OAMPtr INC.b OAMPtr : INC.b OAMPtr
@@ -508,6 +506,45 @@ org $8AC3B6
JMP WorldMap_CalculateOAMCoordinates_exit_successfully JMP WorldMap_CalculateOAMCoordinates_exit_successfully
warnpc $8AC433 warnpc $8AC433
; most of this function is copied from the original, but rearranged
org $8AB7F3
FluteMenu_HandleSprites:
LDA.l $7EC108 : PHA
LDA.l $7EC109 : PHA
LDA.l $7EC10A : PHA
LDA.l $7EC10B : PHA
JSL FluteMenu_MoveLinkSprite ; override vanilla (LDA.b $1A : AND.b #$10)
BEQ .continue
JSR WorldMap_CalculateOAMCoordinates : BCC .continue
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
LDA.b #$00 : STA.b Scrap0D
LDA.b #$3E : STA.b Scrap0C
JSL OWMapFluteCancelIcon ; override vanilla (LDA.b #$02 : STA.b Scrap0B)
LDX.b #$10 : JSR WorldMap_HandleSpriteBlink
.continue
warnpc $8AB831
; most of this function is copied from the original, but rearranged
org $8ABF78
WorldMap_HandleSprites:
LDA.l $7EC108 : PHA
LDA.l $7EC109 : PHA
LDA.l $7EC10A : PHA
LDA.l $7EC10B : PHA
JSL WorldMap_SkipHandleSprites ; override vanilla (LDA.b $1A : AND.b #$10)
BEQ .continue
JSR WorldMap_CalculateOAMCoordinates : BCC .continue
LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E
LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F
LDA.b #$00 : STA.b Scrap0D
LDA.b #$3E : STA.b Scrap0C
LDA.b #$02 : STA.b Scrap0B
LDX.b #$00 : JSR WorldMap_HandleSpriteBlink
.continue
warnpc $8ABFB6
pullpc pullpc
WorldMap_LoadChrHalfSlot: WorldMap_LoadChrHalfSlot:

View File

@@ -78,8 +78,6 @@ org $8ab7af ;LDA $F2 : ORA $F0 : AND #$C0
jml OWFluteCancel2 : nop jml OWFluteCancel2 : nop
org $8ab90d ;JSL $02E99D org $8ab90d ;JSL $02E99D
jsl OWFluteCancel jsl OWFluteCancel
org $8ab816
JSL OWMapFluteCancelIcon
; allows Frog sprite to spawn in LW and also allows his friend to spawn in their house ; allows Frog sprite to spawn in LW and also allows his friend to spawn in their house
org $868a76 ; < 30a76 - sprite_prep.asm:785 (LDA $7EF3CA : AND.w #$40) org $868a76 ; < 30a76 - sprite_prep.asm:785 (LDA $7EF3CA : AND.w #$40)
@@ -107,6 +105,9 @@ org $8aba6c ; < ? - Bank0a.asm:474 ()
jsl OWMapWorldCheck16 : nop jsl OWMapWorldCheck16 : nop
; Custom Overworld Map ; Custom Overworld Map
org $8ABA52
JSL OverworldMap_InitGfx_InitScrap
org $8ABA99 org $8ABA99
WorldMap_LoadDarkWorldMap: WorldMap_LoadDarkWorldMap:
LDA.b GameMode : CMP.b #$14 ; attract module LDA.b GameMode : CMP.b #$14 ; attract module
@@ -121,15 +122,14 @@ BEQ .vanilla_light
warnpc $8ABAB5 warnpc $8ABAB5
.vanilla_light ; $0ABAB5 .vanilla_light ; $0ABAB5
org $8ABD12
JSL MoveZoomedInPositionY
org $8ABD2F
JSL MoveZoomedInPositionX
org $8ABB32 org $8ABB32
JSL LoadMapOppositeWorld JSL LoadMapOppositeWorld
org $8ABF78
JSL WorldMap_SkipHandleSprites
org $8ABA22
JSL MoveLinkMapSprite
org $8ABFF0 org $8ABFF0
JSL MoveMirrorPortalMapSprite JSL MoveMirrorPortalMapSprite
; Could insert similar hooks at $8AB860 and $8AB8AC for flute spots ; Could insert similar hooks at $8AB860 and $8AB8AC for flute spots
@@ -356,7 +356,7 @@ OWFluteCancel2:
} }
OWMapFluteCancelIcon: OWMapFluteCancelIcon:
{ {
STA.b Scrap0B : LDX.b #$10 ; what we wrote over LDA.b #$02 : STA.b Scrap0B ; what we wrote over
LDA.l OWFlags+1 : AND.b #$01 : BEQ .return LDA.l OWFlags+1 : AND.b #$01 : BEQ .return
LDA.b GameSubMode : CMP.b #$0A : BNE .return LDA.b GameSubMode : CMP.b #$0A : BNE .return
LDA.b FrameCounter : AND.b #$10 : BNE .return LDA.b FrameCounter : AND.b #$10 : BNE .return
@@ -515,6 +515,12 @@ GetOWMapTilemapOffsetToCopy:
dw $0400+$0210 ; bottom right dw $0400+$0210 ; bottom right
} }
OverworldMap_InitGfx_InitScrap:
{
STZ.b ScrapBuffer72 ; clear tile swap flag
LDA.b #$11 : STA.b MAINDESQ ; what we wrote over
RTL
}
LoadMapDarkOrCustom_long: LoadMapDarkOrCustom_long:
{ {
PHB : LDA.b #WorldMap_DarkWorldTilemap>>16 : PHA : PLB PHB : LDA.b #WorldMap_DarkWorldTilemap>>16 : PHA : PLB
@@ -543,26 +549,22 @@ LoadMapOppositeWorld:
LDA.b Joy1B_New : AND.b #$70 ; what we wrote over LDA.b Joy1B_New : AND.b #$70 ; what we wrote over
RTL RTL
} }
FluteMenu_MoveLinkSprite:
{
JSR MoveMapSprite
BRA WorldMap_SkipHandleSprites_vanilla
}
WorldMap_SkipHandleSprites: WorldMap_SkipHandleSprites:
{ {
LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla JSR MoveMapSprite : BEQ .vanilla
LDA.b ScrapBuffer72 : BEQ .vanilla ; skip draw if no tile swap LDA.b ScrapBuffer72 : BEQ .vanilla ; skip draw if no tile swap
PLA : PLA : PEA.w $C3AF ; exit without drawing sprites PLA : PLA : PEA.w $C39B ; exit without drawing sprites
RTL RTL
.vanilla .vanilla
LDA.b FrameCounter : AND.b #$10 ; what we wrote over LDA.b FrameCounter : AND.b #$10 ; what we wrote over
RTL RTL
} }
MoveLinkMapSprite:
{
STA.l $7EC10A ; what we overwrote
SEP #$20
JSR MoveMapSprite
REP #$20
RTL
}
MoveMirrorPortalMapSprite: MoveMirrorPortalMapSprite:
{ {
STA.l $7EC109 ; what we overwrote STA.l $7EC109 ; what we overwrote
@@ -570,9 +572,54 @@ MoveMirrorPortalMapSprite:
RTL RTL
} }
MoveZoomedInPositionY:
{
LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
SEP #$20
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetYCoordHighByte
PHA
REP #$20
LDA.l $7EC108 : XBA
SEP #$20
PLA : XBA
REP #$20
RTL
.vanilla
LDA.l $7EC108 ; what we overwrote
RTL
}
MoveZoomedInPositionX:
{
LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla
SEP #$20
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetXCoordHighByte
PHA
REP #$20
LDA.l $7EC10A : XBA
SEP #$20
PLA : XBA
REP #$20
RTL
.vanilla
LDA.l $7EC10A ; what we overwrote
RTL
}
MoveMapSprite: MoveMapSprite:
{ {
LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .return LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .return
PHP
JSR MoveMapSprite_Setup
JSR MoveMapSprite_GetXCoordHighByte : STA.l $7EC10B
JSR MoveMapSprite_GetYCoordHighByte : STA.l $7EC109
PLP
.return
RTS
}
MoveMapSprite_Setup:
{
LDA.l $7EC10B : AND.b #$0E : LSR LDA.l $7EC10B : AND.b #$0E : LSR
STA.b Scrap00 STA.b Scrap00
LDA.l $7EC109 : AND.b #$0E : ASL : ASL LDA.l $7EC109 : AND.b #$0E : ASL : ASL
@@ -591,12 +638,17 @@ MoveMapSprite:
TAX TAX
AND.b #$07 : ASL AND.b #$07 : ASL
STA.b Scrap00 STA.b Scrap00
LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC10B RTS
TXA }
AND.b #$38 : LSR : LSR MoveMapSprite_GetXCoordHighByte:
STA.b Scrap00 {
LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC109 LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00
.return RTS
}
MoveMapSprite_GetYCoordHighByte:
{
TXA : AND.b #$38 : LSR : LSR : STA.b Scrap00
LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00
RTS RTS
} }
@@ -1289,6 +1341,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
STZ.w RandoOverworldForceTrans STZ.w RandoOverworldForceTrans
CMP.b #$02 : BNE + CMP.b #$02 : BNE +
DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
LDA.b #$04 : BRA .set_state LDA.b #$04 : BRA .set_state
+ +
CMP.b #$03 : BNE ++ CMP.b #$03 : BNE ++
@@ -1309,6 +1362,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water,
LDA.b #$01 : STA.w LinkDeepWater LDA.b #$01 : STA.w LinkDeepWater
LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained
LDA.b LinkState : CMP.b #$17 : BEQ .no_flippers ; check if bunny LDA.b LinkState : CMP.b #$17 : BEQ .no_flippers ; check if bunny
LDA.b FlagBY : AND.b #$7F : STA.b FlagBY
LDA.b #$04 : STA.b LinkState : STZ.w LinkSwimDirection : RTS LDA.b #$04 : STA.b LinkState : STZ.w LinkSwimDirection : RTS
.no_flippers .no_flippers
PHX PHX

View File

@@ -65,6 +65,8 @@ LinkSubPixelVelocty = $7E002A ; Word length
LinkAnimationStep = $7E002E ; LinkAnimationStep = $7E002E ;
LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right
; ;
FlagBY = $7E003A ; Bitfield for B and Y buttons.
;
OAMOffsetY = $7E0044 ; OAMOffsetY = $7E0044 ;
OAMOffsetX = $7E0045 ; OAMOffsetX = $7E0045 ;
LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames
@@ -779,6 +781,7 @@ endmacro
%assertRAM(LinkRecoilZ, $7E0029) %assertRAM(LinkRecoilZ, $7E0029)
%assertRAM(LinkAnimationStep, $7E002E) %assertRAM(LinkAnimationStep, $7E002E)
%assertRAM(LinkDirection, $7E002F) %assertRAM(LinkDirection, $7E002F)
%assertRAM(FlagBY, $7E003A)
%assertRAM(OAMOffsetY, $7E0044) %assertRAM(OAMOffsetY, $7E0044)
%assertRAM(OAMOffsetX, $7E0045) %assertRAM(OAMOffsetX, $7E0045)
%assertRAM(LinkIncapacitatedTimer, $7E0046) %assertRAM(LinkIncapacitatedTimer, $7E0046)