From 0781fe650e297e2b707c2fe06067c124dd60ba24 Mon Sep 17 00:00:00 2001 From: scawful Date: Thu, 25 May 2023 11:02:43 -0500 Subject: [PATCH] Update Farore Sprite and Intro Cutscene --- Items/Ocarina/song_of_healing.asm | 17 -- Menu/menu.asm | 1 - Oracle_main.asm | 82 +++++-- .../HappyMaskSalesman/happy_mask_salesman.asm | 12 - Sprites/Impa/impa.asm | 217 ------------------ Sprites/Kydrog/kydrog.asm | 63 ++--- Sprites/{farore_and_maku.asm => farore.asm} | 186 +++++++++------ 7 files changed, 192 insertions(+), 386 deletions(-) delete mode 100644 Items/Ocarina/song_of_healing.asm delete mode 100644 Sprites/HappyMaskSalesman/happy_mask_salesman.asm delete mode 100644 Sprites/Impa/impa.asm rename Sprites/{farore_and_maku.asm => farore.asm} (81%) diff --git a/Items/Ocarina/song_of_healing.asm b/Items/Ocarina/song_of_healing.asm deleted file mode 100644 index 7dd99fd..0000000 --- a/Items/Ocarina/song_of_healing.asm +++ /dev/null @@ -1,17 +0,0 @@ -;; kan flute song of healing - -org $1A8C60 - db $00 - -org $1A9750 - db $E0, $0D - db $2A ; change this to change length of quarter note - db $46 - db $A3, $A1, $9D - db $A3, $A1, $9D - db $A3, $A1 - db $15 ; make this half of whatever you made quarter note - db $9C, $9A - db $7F ; make this triple whatever you made quarter note (max value 7F) - db $9C - db $00 \ No newline at end of file diff --git a/Menu/menu.asm b/Menu/menu.asm index 5a3c1c5..a8cec5e 100644 --- a/Menu/menu.asm +++ b/Menu/menu.asm @@ -332,7 +332,6 @@ Menu_ScrollUp: ; ============================================================================= ; 09 CHECK BOTTLE -print pc Menu_CheckBottle: { LDA.w $0202 : CMP.b #$06 : BNE .not_first diff --git a/Oracle_main.asm b/Oracle_main.asm index 052d76b..255404d 100644 --- a/Oracle_main.asm +++ b/Oracle_main.asm @@ -1,4 +1,4 @@ -;=========================================================== +; ============================================================================= ; The Legend of Zelda: Oracle of Secrets ; Composed by: Scawful ; @@ -10,8 +10,6 @@ ; Intro skip after leaving house ; Key block link's awakening ; Lost Sea Area Combo - -; ; ; Expanded Banks Key: ; 21 - N/A @@ -44,8 +42,14 @@ ; 3C - None ; 3D - None ; 3F - Boat GFX +; +; Used Free RAM: +; $B6 - Cutscene State +; $02B2 - Mask Form +; (0 = Human, 1 = Deku, 2 = Zora, 3 = Wolf, 4 = Bunny, 5 = Minish) +; $0AAB - Diving Flag ; -;=========================================================== +; ============================================================================= namespace Oracle { @@ -55,21 +59,58 @@ namespace Oracle incsrc "Util/ram.asm" incsrc "Util/functions.asm" + incsrc "Util/music_macros.asm" + + ; --------------------------------------------------------- + ; Music + + ; incsrc "Music/stone_tower_temple.asm" + ; print "End of stone_tower_temple.asm ", pc + + ; incsrc "Music/frozen_hyrule.asm" + ; print "End of Music/frozen_hyrule.asm ", pc + + incsrc "Music/lost_woods.asm" + print "End of Music/lost_woods.asm ", pc + + incsrc "Music/dungeon_theme.asm" + print "End of Music/dungeon_theme.asm ", pc + ; --------------------------------------------------------- ; Sprites - incsrc "Sprites/farore_and_maku.asm" - print "End of farore_and_maku.asm ", pc + ; org $02ECF8 + ; dw $0029 + + incsrc "Sprites/farore.asm" + print "End of farore.asm ", pc incsrc "Sprites/Kydrog/kydrog.asm" print "End of kydrog.asm ", pc + incsrc "Sprites/maku_tree.asm" + print "End of maku_tree.asm ", pc + + incsrc "Sprites/mask_salesman.asm" + print "End of mask_salesman.asm ", pc + + print "" + ; --------------------------------------------------------- ; Transformation Masks + print " -- Masks -- " + print "" + incsrc "Masks/mask_routines.asm" + incsrc "Masks/bunny_hood.asm" + print "End of Masks/bunny_hood.asm ", pc + + incsrc "Masks/minish_form.asm" + print "End of Masks/minish_form.asm ", pc + incsrc "Masks/deku_mask.asm" print "End of Masks/deku_mask.asm ", pc @@ -79,13 +120,17 @@ namespace Oracle incsrc "Masks/wolf_mask.asm" print "End of Masks/wolf_mask.asm ", pc - incsrc "Masks/bunny_hood.asm" - print "End of Masks/bunny_hood.asm ", pc - + print "" ; --------------------------------------------------------- ; Items + print " -- Items -- " + print "" + + incsrc "Items/bottle_net.asm" + print "End of Items/bottle_net.asm ", pc + incsrc "Items/jump_feather.asm" print "End of Items/jump_feather.asm ", pc @@ -95,9 +140,10 @@ namespace Oracle incsrc "Items/book_of_secrets.asm" print "End of Items/book_of_secrets.asm ", pc - ; incsrc "Items/bottle_net.asm" - ; print "End of Items/bottle_net.asm ", pc + incsrc "Items/ocarina.asm" + print "End of Items/ocarina.asm ", pc + print "" ; --------------------------------------------------------- ; Events @@ -106,7 +152,10 @@ namespace Oracle print "End of Events/house_tag.asm ", pc incsrc "Events/lost_sea.asm" - print "End of Events/lost_sea.asm ", pc + print "End of Events/lost_sea.asm ", pc + + incsrc "Events/snow_overlay.asm" + print "End of Events/snow_overlay.asm ", pc ; --------------------------------------------------------- @@ -125,6 +174,9 @@ namespace Oracle incsrc "Dungeons/keyblock.asm" print "End of Dungeons/keyblock.asm ", pc + incsrc "Dungeons/entrances.asm" + print "End of Dungeons/entrances.asm ", pc + ; --------------------------------------------------------- ; Custom Menu and HUD @@ -136,7 +188,11 @@ namespace Oracle ; --------------------------------------------------------- incsrc "Debug/debug.asm" print "End of Debug/debug.asm ", pc - + + ; Overworld area which has holes that hurt + ; You can change the area to which holes will hurt the player! + ; currently it only allows you to choose one area + ; 396DB, should be a 05 - Change to another area hex number print "" print "Finished applying patches" diff --git a/Sprites/HappyMaskSalesman/happy_mask_salesman.asm b/Sprites/HappyMaskSalesman/happy_mask_salesman.asm deleted file mode 100644 index ceb18a1..0000000 --- a/Sprites/HappyMaskSalesman/happy_mask_salesman.asm +++ /dev/null @@ -1,12 +0,0 @@ -;=========================================================== -; Happy Mask Salesman -;=========================================================== - -namespace Sprites -{ - namespace HappyMaskSalesman - { - - - } ; namespace HappyMaskSalesman -} ; namespace Sprites diff --git a/Sprites/Impa/impa.asm b/Sprites/Impa/impa.asm deleted file mode 100644 index c0efa66..0000000 --- a/Sprites/Impa/impa.asm +++ /dev/null @@ -1,217 +0,0 @@ -; ============================================================================== -; Impa - Sprite #76 Zelda -; -; Goals: Make the Impa sprite interact with the "Uncle/Priest/Mantle" object -; in the forest. This will trigger the intro cutscene with Farore and the -; antagonist of the story. -; -; Ideas: Maybe make the "Mantle" the Maku Tree? -; ============================================================================== - -; from `sprites/npcs/sprite_uncle_and_priest.asm` -; $2DD72-$2DD9E JUMP LOCATION -{ - LDA.b #$00 : STA $0EB0, X : STA $0DE0, X - - LDA $0DF0, X : BNE .alpha - - ; "Princess Zelda, you are safe! Is this your doing, [Name]?" message - LDA.b #$17 - LDY.b #$00 - - JSL Sprite_ShowMessageUnconditional - - INC $0D80, X - - LDA.b #$01 : STA $7FFE01 - - JSR Zelda_TransitionFromTagalong - - LDA.b #$01 : STA $02E4 - - LDA.b #$01 : STA $7EF3C7 - -.alpha - - RTS -} - -; ============================================================================== -; from `sprites/npcs/sprite_zelda.asm` - -; *$2EC4C-$2EC8D LOCAL -Zelda_TransitionFromTagalong: -{ - ; Transition princess Zelda back into a sprite from the tagalong - ; state (the sage's sprite is doing this). - - LDA.b #$76 : JSL Sprite_SpawnDynamically - - PHX - - LDX $02CF - - LDA $1A64, X : AND.b #$03 : STA $0EB0, Y : STA $0DE0, Y - - LDA $20 : STA $0D00, Y - LDA $21 : STA $0D20, Y - - LDA $22 : STA $0D10, Y - LDA $23 : STA $0D30, Y - - LDA.b #$01 : STA $0E80, Y - - LDA.b #$00 : STA $7EF3CC - - LDA $0BA0, Y : INC A : STA $0BA0, Y - - LDA.b #$03 : STA $0F60, Y - - PLX - - RTS -} - -; ============================================================================== - -; *$2EC9E-$2ECBE LOCAL -Sprite_Zelda: -{ - JSL CrystalMaiden_Draw - JSR Sprite2_CheckIfActive - JSL Sprite_PlayerCantPassThrough - - JSL Sprite_MakeBodyTrackHeadDirection : BCC .cant_move - - JSR Sprite2_Move - -.cant_move - - LDA $0E80, X - - JSL UseImplicitRegIndexedLocalJumpTable - - dw Zelda_InPrison ; On the beach - dw Zelda_EnteringSanctuary ; Approaching Maku Tree - dw Zelda_AtSanctuary ; In the Maku Tree forest area -} - -; ============================================================================== - -; *$2ED69-$2ED75 JUMP LOCATION -Zelda_EnteringSanctuary: -{ - LDA $0D80, X - - JSL UseImplicitRegIndexedLocalJumpTable - - dw Zelda_WalkTowardsPriest - dw Zelda_RespondToPriest - dw Zelda_BeCarefulOutThere -} - -; ============================================================================== - -; $2ED76-$2ED7D DATA -pool Zelda_WalkTowardsPriest: -{ - -.timers - db $26, $1A, $2C, $01 - -.directions - db $01, $03, $01, $02 -} - -; ============================================================================== - -; *$2ED7E-$2EDC3 JUMP LOCATION -Zelda_WalkTowardsPriest: -{ - LDA $0DF0, X : BNE .walking - - LDY $0D90, X : CPY.b #$04 : BCC .beta - - INC $0D80, X - - STZ $0DE0, X - STZ $0EB0, X - - STZ $0D50, X - STZ $0D40, X - - RTS - -.beta - - LDA .timers, Y : STA $0DF0, X - - LDA .directions, Y : STA $0EB0, X : STA $0DE0, X - - INC $0D90, X - - TAY - - LDA Sprite_Zelda.x_speeds, Y : STA $0D50, X - - LDA Sprite_Zelda.y_speeds, Y : STA $0D40, X - -.walking - - LDA $1A : LSR #3 : AND.b #$01 : STA $0DC0, X - - RTS -} - -; ============================================================================== - -; *$2EDC4-$2EDEB JUMP LOCATION -Zelda_RespondToPriest: -{ - ; "Yes, it was [Name] who helped me escape from the dungeon! ..." - LDA.b #$1D - LDY.b #$00 - - JSL Sprite_ShowMessageUnconditional - - INC $0D80, X - - LDA.b #$02 : STA $7FFE01 - - LDA.b #$01 : STA $7EF3C8 - - JSL SavePalaceDeaths - - LDA.b #$02 : STA $7EF3C5 - - PHX - - JSL Sprite_LoadGfxProperties.justLightWorld - - PLX - - RTS -} - -; ============================================================================== - -; *$2EDEC-$2EE05 JUMP LOCATION -Zelda_BeCarefulOutThere: -{ - JSR Sprite2_DirectionToFacePlayer : TYA : EOR.b #$03 : STA $0EB0, X - - ; "[Name], be careful out there! I know you can save Hyrule!" - LDA.b #$1E - LDY.b #$00 - - JSL Sprite_ShowSolicitedMessageIfPlayerFacing : BCC .didnt_speak - - STA $0DE0, X - STA $0EB0, X - -.didnt_speak - - RTS -} - -; ============================================================================== diff --git a/Sprites/Kydrog/kydrog.asm b/Sprites/Kydrog/kydrog.asm index a9e3460..d91ec72 100644 --- a/Sprites/Kydrog/kydrog.asm +++ b/Sprites/Kydrog/kydrog.asm @@ -3,7 +3,7 @@ ;============================================================================== !SPRID = $7B; The sprite ID you are overwriting (HEX) !NbrTiles = 6 ; Number of tiles used in a frame -!Harmless = 00 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless +!Harmless = 01 ; 00 = Sprite is Harmful, 01 = Sprite is Harmless !HVelocity = 00 ; Is your sprite going super fast? put 01 if it is !Health = 0 ; Number of Health the sprite have !Damage = 0 ; (08 is a whole heart), 04 is half heart @@ -54,6 +54,10 @@ Sprite_Kydrog_Prep: PHB : PHK : PLB ; Add more code here to initialize data + LDA.l $7EF300 + BEQ .PlayIntro + STZ.w $0DD0, X ; Kill the sprite +.PlayIntro PLB RTL @@ -69,7 +73,6 @@ Sprite_Kydrog_Main: dw Kydrog_StartCutscene dw Kydrog_AttractPlayer dw Kydrog_SpawnOffspring - dw Kydrog_TurnPlayerToDeku dw Kydrog_WarpPlayerAway @@ -95,7 +98,6 @@ Sprite_Kydrog_Main: { LDA.w SprTimerA, X : BNE + %ShowUnconditionalMessage($21) - LDA.b #$02 : STA.b $B6 ; Update story flag for Farore %GotoAction(2) + RTS @@ -103,29 +105,22 @@ Sprite_Kydrog_Main: Kydrog_SpawnOffspring: { + LDA.b #$02 : STA.b $B6 ; Update story flag for Farore STZ.b $49 ; Stop Link from moving %GotoAction(3) RTS } - Kydrog_TurnPlayerToDeku: - { - LDA #$35 : STA $BC - - %GotoAction(4) - RTS - } - Kydrog_WarpPlayerAway: { ; Set game state to part 03 - LDA.b #$03 : STA $7EF3C5 + ; LDA.b #$03 : STA $7EF3C5 ; Put us in the Dark World. LDA $7EF3CA : EOR.b #$40 : STA $7EF3CA JSL $00FC41 ; Sprite_LoadGfxProperties - ; JSL $00FC62 ; Sprite_LoadGfxProperties.justLightWorld + ; JSL $00FC62 ; Sprite_LoadGfxProperties.justLightWorld STZ $037B : STZ $3C : STZ $3A : STZ $03EF @@ -144,28 +139,11 @@ Sprite_Kydrog_Main: ; Clear submodules STZ $11 : STZ $B0 - ; Remove Impa + ; Remove Impa follower LDA.b #$00 : STA $7EF3CC - ; Mirror Warp Timer - ; #_00D8D2: INC.w $06BA - - ; LDA.w $06BA - ; CMP.b #$20 - ; BEQ .continue - ; STZ.w $0200 - ; RTL - ; .continue - - ; Set the module to magic mirror - ; $10 - 0x15 - Module for Magic Mirror - - ; LoadOverworldFromSpecialOverworld - - ; #_029D5F: LDY.b #$5A - ; #_029D61: JSL DecompressAnimatedOverworldTiles - - ; JSL $00D8D2 + ; Set the flag to remove Farore and Kydrog from Maku area + LDA #$01 : STA.l $7EF300 RTS } @@ -248,8 +226,8 @@ Sprite_Kydrog_Draw: } ; I forget what this is lol -org $02ECF8 - dw $0029 +; org $02ECF8 +; dw $0029 ; ============================================================================== @@ -259,18 +237,3 @@ org $02ECF8 ; org $029E65 ; JSR LoadOverworldFromSpecialOverworld - -; 11E5F - -; 029E66 - -; 00D8A0 -; SetTargetOverworldWarpToPyramid: -; #_029D56: LDA.b $10 -; #_029D58: CMP.b #$15 -; #_029D5A: BNE .exit - -; #_029D5C: JSR LoadOverworldFromUnderworld - -; #_029D5F: LDY.b #$5A -; #_029D61: JSL DecompressAnimatedOverworldTiles diff --git a/Sprites/farore_and_maku.asm b/Sprites/farore.asm similarity index 81% rename from Sprites/farore_and_maku.asm rename to Sprites/farore.asm index 7b0d5cf..a2cfce6 100644 --- a/Sprites/farore_and_maku.asm +++ b/Sprites/farore.asm @@ -1,7 +1,5 @@ ;============================================================================== -; Farore/Maku Tree - Sprite Uncle/Priest -; -; STZ.w $0DD0, X ; Kill the sprite since it's not needed anymore +; Farore Sprite ; ;============================================================================== @@ -18,7 +16,6 @@ incsrc sprite_new_table.asm org $308000 incsrc sprite_new_functions.asm - ;============================================================================== ; Sprite Properties ;============================================================================== @@ -76,14 +73,14 @@ Sprite_Farore_Long: Sprite_Farore_Prep: { PHB : PHK : PLB - - ; LDA.l $7EF300 - ; BEQ .PlayIntro - ; STZ.w $0DD0, X ; Kill the sprite - ; .PlayIntro - + LDA.b #$80 : STA $0CAA, X ; Don't kill Farore when she goes off screen + LDA.l $7EF300 + BEQ .PlayIntro + STZ.w $0DD0, X ; Kill the sprite +.PlayIntro + PLB RTL } @@ -95,6 +92,7 @@ Sprite_Farore_Prep: WALKSPEED = 14 STORY_STATE = $B6 + Sprite_Farore_Main: { LDA.w SprAction, X; Load the SprAction @@ -104,28 +102,36 @@ Sprite_Farore_Main: dw MoveUpTowardsFarore dw MoveLeftTowardsFarore dw WaitAndMessage + dw FaroreGiveSwordAndShield dw FaroreFollowPlayer dw MakuArea_FaroreFollowPlayer dw MakuArea_FaroreWaitForKydrog + ; dw MakuArea_FaroreWalkToPosition + ; 00 IntroStart: { ; JSR SetupMovieEffect ; JSR MovieEffect - LDA $B6 : CMP #$01 : BEQ .maku_area - CMP #$02 : BEQ .waiting + LDA $B6 : CMP.b #$01 : BEQ .maku_area + CMP.b #$02 : BEQ .waiting %GotoAction(1) - + RTS .maku_area - JSR MakuArea_FaroreFollowPlayer - .waiting - JSR MakuArea_FaroreWaitForKydrog + %GotoAction(6) + + ; JSR MakuArea_FaroreFollowPlayer + RTS + .waiting + %GotoAction(7) + ;JSR MakuArea_FaroreWaitForKydrog RTS } + ; 01 MoveUpTowardsFarore: { LDA WALKSPEED : STA.b $57 ; Slow Link down for the cutscene @@ -141,6 +147,7 @@ Sprite_Farore_Main: RTS } + ; 02 MoveLeftTowardsFarore: { ; Move Link Left @@ -161,14 +168,17 @@ Sprite_Farore_Main: RTS } - + ; 03 WaitAndMessage: { %PlayAnimation(1, 2, 8) - %MoveTowardPlayer(15) + LDA.b #$15 + JSL Sprite_ApplySpeedTowardsPlayer + JSL Sprite_MoveVert LDA.w SprTimerA, X : BNE + + STZ $2F - %ShowUnconditionalMessage($24) + %ShowUnconditionalMessage($0E) ; "I am Farore, the Oracle of Secrets." %GotoAction(4) + @@ -176,34 +186,57 @@ Sprite_Farore_Main: } ; 04 + FaroreGiveSwordAndShield: + { + ; Give Link the Sword and shield + LDA.w SprTimerA, X : BNE ++ + + LDY.b #$00 : STZ $02E9 + JSL Link_ReceiveItem + + %GotoAction(5) + ++ + RTS + } + + ; 05 FaroreFollowPlayer: { LDA WALKSPEED : STA.b $57 ; Slow Link down for the cutscene LDA.b #$08 : STA.b $49 ; Auto-movement north %PlayAnimation(3, 4, 8) - %MoveTowardPlayer(16) + + + LDA.b #$15 + JSL Sprite_ApplySpeedTowardsPlayer + JSL Sprite_MoveVert LDA #$02 : STA $7EF3C5 ; (0 - intro, 1 - pendants, 2 - crystals) LDA #$05 : STA $012D ; turn off rain sound - JSL $00FC41 ; fix monsters LDA #$01 : STA $B6 ; Set Story State - %GotoAction(0) - RTS - } - - ; 05 - MakuArea_FaroreFollowPlayer: - { - .keep_walking - %PlayAnimation(3, 4, 8) - %MoveTowardPlayer(18) - LDA $B6 : CMP.b #$02 : BEQ .keep_walking - JSR MakuArea_FaroreWaitForKydrog + JSL $00FC41 ; fix monsters + %GotoAction(6) RTS } ; 06 + MakuArea_FaroreFollowPlayer: + { + ;.keep_walking + %PlayAnimation(3, 4, 8) + + LDA.b #$15 + JSL Sprite_ApplySpeedTowardsPlayer + JSL Sprite_MoveVert + + ; LDA $B6 : CMP.b #$02 : BEQ .keep_walking + %GotoAction(6) + + RTS + } + + ; 07 ; Look at the RAM $0D00 to $0D60, the first few are the actual positions of the sprite that you can just set manually or $0D40 and $0D50 are the "speeds" of the sprites irrc ; You can set one of the speeds and then call the function called Sprite_Move ; And then that will handle it applying the speed for you @@ -211,16 +244,17 @@ Sprite_Farore_Main: { %PlayAnimation(5, 5, 8) + RTS } - ; 07 - MakuArea_FaroreWalkToPosition: - { - %PlayAnimation(3, 4, 8) - RTS - } + ; ; 09 + ; MakuArea_FaroreWalkToPosition: + ; { + ; %PlayAnimation(3, 4, 8) + ; RTS + ; } } ;============================================================================== @@ -284,49 +318,49 @@ Sprite_Farore_Draw: ;============================================================================== .start_index -db $00, $02, $04, $06, $08, $0A, $0C + db $00, $02, $04, $06, $08, $0A, $0C .nbr_of_tiles -db 1, 1, 1, 1, 1, 1, 1 + db 1, 1, 1, 1, 1, 1, 1 .x_offsets -dw 0, 0 -dw 0, 0 -dw 0, 0 -dw 0, 0 -dw 0, 0 -dw 0, 0 -dw 0, -1 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, 0 + dw 0, -1 .y_offsets -dw -8, 4 -dw -8, 4 -dw 4, -8 -dw -8, 4 -dw 4, -7 -dw -8, 4 -dw 4, -7 + dw -8, 4 + dw -8, 4 + dw 4, -8 + dw -8, 4 + dw 4, -7 + dw -8, 4 + dw 4, -7 .chr -db $A8, $AA -db $A8, $88 -db $AA, $A8 -db $8A, $8C -db $8C, $8A -db $8A, $AC -db $AA, $86 + db $A8, $AA + db $A8, $88 + db $AA, $A8 + db $8A, $8C + db $8C, $8A + db $8A, $AC + db $AA, $86 .properties -db $3B, $3B -db $3B, $7B -db $3B, $3B -db $3B, $3B -db $7B, $3B -db $3B, $3B -db $3B, $7B + db $3B, $3B + db $3B, $7B + db $3B, $3B + db $3B, $3B + db $7B, $3B + db $3B, $3B + db $3B, $7B .sizes -db $02, $02 -db $02, $02 -db $02, $02 -db $02, $02 -db $02, $02 -db $02, $02 -db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 + db $02, $02 } ;==============================================================================