From fad239b5e76669cb75c99ce5bdd321f9adf2c704 Mon Sep 17 00:00:00 2001 From: scawful Date: Wed, 30 Aug 2023 21:02:33 -0400 Subject: [PATCH] Add GBC Link, update Masks directory --- Masks/all_masks.asm | 20 ++++++++ Masks/deku_mask.asm | 33 +++++++------ Masks/gbc_form.asm | 48 +++++++++++++++++++ Masks/mask_routines.asm | 46 +++++++++--------- Masks/minish_form.asm | 2 + Masks/wolf_mask.asm | 11 +++-- Masks/zora_mask.asm | 1 + .../sprite_functions_hooks.asm | 0 Sprites/{ => ZSpriteLib}/sprite_macros.asm | 0 .../{ => ZSpriteLib}/sprite_new_functions.asm | 0 Sprites/{ => ZSpriteLib}/sprite_new_table.asm | 0 11 files changed, 119 insertions(+), 42 deletions(-) create mode 100644 Masks/all_masks.asm create mode 100644 Masks/gbc_form.asm rename Sprites/{ => ZSpriteLib}/sprite_functions_hooks.asm (100%) rename Sprites/{ => ZSpriteLib}/sprite_macros.asm (100%) rename Sprites/{ => ZSpriteLib}/sprite_new_functions.asm (100%) rename Sprites/{ => ZSpriteLib}/sprite_new_table.asm (100%) diff --git a/Masks/all_masks.asm b/Masks/all_masks.asm new file mode 100644 index 0000000..aa90b75 --- /dev/null +++ b/Masks/all_masks.asm @@ -0,0 +1,20 @@ +; $02B2 - Mask Form +; 00 = Human +; 01 = Deku +; 02 = Zora +; 03 = Wolf +; 04 = Bunny Hood +; 05 = Minish Form +; +; $0AAB - Diving Flag + +incsrc "Masks/mask_routines.asm" + +incsrc "Masks/bunny_hood.asm" +print "End of Masks/bunny_hood.asm ", pc + +incsrc "Masks/minish_form.asm" +incsrc "Masks/deku_mask.asm" +incsrc "Masks/zora_mask.asm" +incsrc "Masks/wolf_mask.asm" +incsrc "Masks/gbc_form.asm" \ No newline at end of file diff --git a/Masks/deku_mask.asm b/Masks/deku_mask.asm index b4e2a65..c990a08 100644 --- a/Masks/deku_mask.asm +++ b/Masks/deku_mask.asm @@ -1,6 +1,6 @@ ; ============================================================================= -; Deku Mask -; ============================================================================= +; Deku Mask +; ============================================================================= org $358000 incbin gfx/deku_link.bin @@ -10,7 +10,7 @@ incbin gfx/deku_link.bin org $07A64B ; formerly Quake LinkItem_DekuMask: { - ; Check for R button held + ; Check for R button held %CheckNewR_ButtonPress() : BEQ .return LDA $6C : BNE .return ; in a doorway @@ -19,19 +19,19 @@ LinkItem_DekuMask: %PlayerTransform() LDA $02B2 : CMP #$01 : BEQ .unequip ; is the deku mask on? - JSL Palette_ArmorAndGloves ; set the palette + JSL Palette_ArmorAndGloves ; set the palette LDA.l $7EF35A : STA $0AAF ; Store the current shield LDA.b #$00 : STA $7EF35A ; Clear the shield LDA #$35 : STA $BC ; put the mask on LDA #$01 : STA $02B2 ; set the deku mask flag - + BRA .return .unequip STZ $5D - ; Restore the shield + ; Restore the shield LDA $0AAF : STA.l $7EF35A %ResetToLinkGraphics() @@ -50,9 +50,10 @@ LinkItem_SlingshotPrepare: { LDA #$01 : TSB $50 LDA $7EF340 + BNE .alpha - JMP $A270 -.alpha + JMP .beta ; $A270 +.alpha CMP #$01 BNE .void ; unused afaik (RTS?) JMP .beta @@ -71,7 +72,7 @@ LinkItem_SlingshotPrepare: LDA $7F502E CMP #$01 BNE .gamma - RTL + RTL ; $A309 .gamma @@ -115,7 +116,7 @@ LinkItem_SlingshotPrepare: LDA #$80 : STA $4305 ; Set DMA transfer size (high byte) LDA #$01 : STA $4300 ; Set DMA mode to 1 (2 registers write once) STA $420B ; Start DMA on channel 0 - RTL ; Return from subroutine long + RTL } @@ -128,17 +129,19 @@ org $07811A pullpc ; Bank 07 Free Space from minish_form Link_HandleDekuTransformation: ; Link_HandleBunnyTransformation { - ; Check if using Quake Medallion + ; Check if using Quake Medallion LDA $5D : CMP.b #$0A : BEQ .continue JSR $82DA -.continue +.continue STZ $03F5 STZ $03F6 - + ; Link can move. CLC - + RTS } -pushpc \ No newline at end of file + +print "End of Masks/deku_mask.asm ", pc +pushpc diff --git a/Masks/gbc_form.asm b/Masks/gbc_form.asm new file mode 100644 index 0000000..1e67f73 --- /dev/null +++ b/Masks/gbc_form.asm @@ -0,0 +1,48 @@ +org $3B8000 +incbin gfx/gbc_link.4bpp + +UpdateGbcPalette: +{ + REP #$30 ; change 16bit mode + LDX #$001E + + .loop + LDA.l GameboyLinkPalette, X : STA $7EC6E0, X + DEX : DEX : BPL .loop + + SEP #$30 ; go back to 8 bit mode + INC $15 ; update the palette + RTL ; or RTS depending on where you need it +} + +GameboyLinkPalette: +{ +dw #$0000, #$7FFF, #$237E, #$B711, #$369E, #$14A5, #$01FF, #$1078, #$46FF +dw #$22A2, #$3B68, #$0A4A, #$12EF, #$2A5C, #$1571, #$7A18, #$7FFF +dw #$237E, #$B711, #$369E, #$14A5, #$01FF, #$1078, #$46FF, #$7E03 +dw #$7691, #$2678, #$435C, #$1199, #$7A18, #$7FFF, #$237E, #$B711 +dw #$369E, #$14A5, #$01FF, #$1078, #$46FF, #$147F, #$457E, #$6DF3 +dw #$7EB9, #$2A5C, #$2227, #$7A18, #$7FFF, #$237E, #$B711, #$369E +dw #$14A5, #$01FF, #$1078, #$46FF, #$05FF, #$3B68, #$0A4A, #$12EF +dw #$567E, #$1872, #$7A18, #$5276, #$0352 +} + +LinkState_GameboyForm: +{ + CLC + LDA $0FFF : BEQ .return ; not in dark world + + ; %PlayerTransform() + + JSL UpdateGbcPalette + LDA #$3B : STA $BC ; change link's sprite + LDA #$06 : STA $02B2 + BRA .return + +.return + LDA $BC : CMP.b #$06 : BNE .not_gbc + LDA #$10 : STA $BC +.not_gbc + CLC + RTL +} \ No newline at end of file diff --git a/Masks/mask_routines.asm b/Masks/mask_routines.asm index 904205b..4872158 100644 --- a/Masks/mask_routines.asm +++ b/Masks/mask_routines.asm @@ -49,7 +49,7 @@ org $008A01 org $1BEDF9 JSL Palette_ArmorAndGloves ; 4bytes - RTL ; 1byte + RTL ; 1byte NOP #$01 org $1BEE1B @@ -67,10 +67,10 @@ StartupMasks: ; bring the screen into force blank after NMI LDA.b #$80 : STA $13 - ; set links sprite bank + ; set links sprite bank LDA #$10 : STA $BC - RTL + RTL } ; ============================================================================= @@ -87,7 +87,7 @@ Palette_ArmorAndGloves: .deku_mask ; Load Deku Mask Location LDA.b #$35 : STA $BC : JMP .original_palette - + .zora_mask ; Load Zora Mask Location LDA.b #$36 : STA $BC : JMP .original_palette @@ -113,7 +113,7 @@ Palette_ArmorAndGloves: .original_palette REP #$21 - LDA $7EF35B ; Link's armor value + LDA $7EF35B ; Link's armor value JSL $1BEDFF ; Read Original Palette Code RTL .part_two @@ -128,33 +128,32 @@ Palette_ArmorAndGloves: PHB : PHK : PLB REP #$20 - + ; Check what Link's armor value is. LDA $7EF35B : AND.w #$00FF : TAX - + LDA $1BEC06, X : AND.w #$00FF : ASL A : ADC.w #$F000 : STA $00 REP #$10 - + LDA.w #$01E2 ; Target SP-7 (sprite palette 6) LDX.w #$000E ; Palette has 15 colors - + TXY : TAX - + LDA.b $BC : AND #$00FF : STA $02 .loop LDA [$00] : STA $7EC300, X : STA $7EC500, X - + INC $00 : INC $00 - + INX #2 - + DEY : BPL .loop SEP #$30 - - + PLB INC $15 PLA : PLY : PLX @@ -162,20 +161,20 @@ Palette_ArmorAndGloves: } ; ============================================================================= -; Overworld Palette Persist +; Overworld Palette Persist ; ============================================================================= Overworld_CgramAuxToMain_Override: { - ; Copies the auxiliary CGRAM buffer to the main one + ; Copies the auxiliary CGRAM buffer to the main one ; Causes NMI to reupload the palette. - + REP #$20 - + LDX.b #$00 .loop - + LDA $7EC300, X : STA $7EC500, X LDA $7EC340, X : STA $7EC540, X LDA $7EC380, X : STA $7EC580, X @@ -188,12 +187,12 @@ Overworld_CgramAuxToMain_Override: .has_mask_palette INX #2 : CPX.b #$40 : BNE .loop - + SEP #$20 - + ; tell NMI to upload new CGRAM data INC $15 - + RTL } pushpc @@ -221,6 +220,7 @@ LinkItem_CheckForSwordSwing_Masks: { LDA $02B2 : BEQ .return CMP.b #$02 : BEQ .return ; zora mask can use sword + CMP.b #$06 : BEQ .return LDA #$01 RTL diff --git a/Masks/minish_form.asm b/Masks/minish_form.asm index 56e90d0..db90ee6 100644 --- a/Masks/minish_form.asm +++ b/Masks/minish_form.asm @@ -65,5 +65,7 @@ LinkState_CheckMinishTile: RTS } + +print "End of Masks/minish_form.asm ", pc pushpc diff --git a/Masks/wolf_mask.asm b/Masks/wolf_mask.asm index e685e37..072211d 100644 --- a/Masks/wolf_mask.asm +++ b/Masks/wolf_mask.asm @@ -50,7 +50,7 @@ LinkItem_ShovelAndFlute: LDA $0202 : CMP.b #$0D : BNE .use_wolf_mask BRL LinkItem_Flute .use_wolf_mask - BRL LinkItem_WolfMask + JMP LinkItem_WolfMask } @@ -61,7 +61,7 @@ pullpc print pc LinkItem_WolfMask: { - SEP #$30 + ; SEP #$30 LDA $02B2 : CMP #$03 : BNE .equip JSR LinkItem_Shovel @@ -83,7 +83,10 @@ LinkItem_WolfMask: %ResetToLinkGraphics() .return - REP #$30 + ; REP #$30 RTS -} \ No newline at end of file +} + +print "End of Masks/wolf_mask.asm ", pc +pushpc \ No newline at end of file diff --git a/Masks/zora_mask.asm b/Masks/zora_mask.asm index 909f0eb..06d3460 100644 --- a/Masks/zora_mask.asm +++ b/Masks/zora_mask.asm @@ -282,4 +282,5 @@ LinkState_ResetMaskAnimated: RTL } +print "End of Masks/zora_mask.asm ", pc pushpc diff --git a/Sprites/sprite_functions_hooks.asm b/Sprites/ZSpriteLib/sprite_functions_hooks.asm similarity index 100% rename from Sprites/sprite_functions_hooks.asm rename to Sprites/ZSpriteLib/sprite_functions_hooks.asm diff --git a/Sprites/sprite_macros.asm b/Sprites/ZSpriteLib/sprite_macros.asm similarity index 100% rename from Sprites/sprite_macros.asm rename to Sprites/ZSpriteLib/sprite_macros.asm diff --git a/Sprites/sprite_new_functions.asm b/Sprites/ZSpriteLib/sprite_new_functions.asm similarity index 100% rename from Sprites/sprite_new_functions.asm rename to Sprites/ZSpriteLib/sprite_new_functions.asm diff --git a/Sprites/sprite_new_table.asm b/Sprites/ZSpriteLib/sprite_new_table.asm similarity index 100% rename from Sprites/sprite_new_table.asm rename to Sprites/ZSpriteLib/sprite_new_table.asm