diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-07-03 16:37:47 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-07-03 16:37:47 -0400 |
commit | 9878f01e29b1443d6c894c1332cbf381fa12646e (patch) | |
tree | 8e763ca94f2b90faaa470416055c320dbdb89cbf | |
parent | ccb01731fe8cd44ae4c8840ee8ddc02e6bdea97e (diff) |
Organize macros/ like pokecrystal
While doing so I replaced the StopAllMusic macro with a SFX_STOP_ALL_MUSIC constant and applied it throughout the code.
43 files changed, 450 insertions, 389 deletions
diff --git a/audio/play_battle_music.asm b/audio/play_battle_music.asm index 35dd19ad..f8bfcd19 100644 --- a/audio/play_battle_music.asm +++ b/audio/play_battle_music.asm @@ -2,9 +2,9 @@ PlayBattleMusic:: xor a ld [wAudioFadeOutControl], a ld [wLowHealthAlarm], a - dec a + dec a ; SFX_STOP_ALL_MUSIC ld [wNewSoundID], a - call PlaySound ; stop music + call PlaySound call DelayFrame ld c, BANK(Music_GymLeaderBattle) ld a, [wGymLeaderNo] diff --git a/audio/pokedex_rating_sfx.asm b/audio/pokedex_rating_sfx.asm index a218d5e6..f3aace8a 100644 --- a/audio/pokedex_rating_sfx.asm +++ b/audio/pokedex_rating_sfx.asm @@ -10,7 +10,7 @@ PlayPokedexRatingSfx:: jr .getSfxPointer .gotSfxPointer push bc - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySoundWaitForCurrent pop bc diff --git a/constants.asm b/constants.asm index 996458a4..cd306680 100644 --- a/constants.asm +++ b/constants.asm @@ -29,6 +29,7 @@ INCLUDE "constants/palette_constants.asm" INCLUDE "constants/list_constants.asm" INCLUDE "constants/map_constants.asm" INCLUDE "constants/map_data_constants.asm" +INCLUDE "constants/map_object_constants.asm" INCLUDE "constants/hide_show_constants.asm" INCLUDE "constants/credits_constants.asm" INCLUDE "constants/audio_constants.asm" diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm index bb2bb7f2..38719f92 100644 --- a/constants/audio_constants.asm +++ b/constants/audio_constants.asm @@ -1,3 +1,29 @@ +; pitch + const_def + const C_ ; 0 + const C# ; 1 + const D_ ; 2 + const D# ; 3 + const E_ ; 4 + const F_ ; 5 + const F# ; 6 + const G_ ; 7 + const G# ; 8 + const A_ ; 9 + const A# ; A + const B_ ; B + +; channel + const_def + const Ch1 ; 0 + const Ch2 ; 1 + const Ch3 ; 2 + const Ch4 ; 3 + const Ch5 ; 4 + const Ch6 ; 5 + const Ch7 ; 6 + const Ch8 ; 7 + ; HW sound channel register base addresses HW_CH1_BASE EQU (rNR10 % $100) HW_CH2_BASE EQU ((rNR21 % $100) - 1) diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm index 154c4163..4b98bdb3 100755 --- a/constants/map_data_constants.asm +++ b/constants/map_data_constants.asm @@ -7,3 +7,8 @@ EAST EQU 1 WEST EQU 2 SOUTH EQU 4 NORTH EQU 8 + +; tileset environments +INDOOR EQU 0 +CAVE EQU 1 +OUTDOOR EQU 2 diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm new file mode 100644 index 00000000..f5fc952b --- /dev/null +++ b/constants/map_object_constants.asm @@ -0,0 +1,14 @@ +; different kinds of people events +ITEM EQU $80 +TRAINER EQU $40 + +WALK EQU $FE +STAY EQU $FF + +DOWN EQU $D0 +UP EQU $D1 +LEFT EQU $D2 +RIGHT EQU $D3 +NONE EQU $FF + +BOULDER_MOVEMENT_BYTE_2 EQU $10 diff --git a/constants/music_constants.asm b/constants/music_constants.asm index 9f726fb7..7bbe5c62 100644 --- a/constants/music_constants.asm +++ b/constants/music_constants.asm @@ -238,3 +238,5 @@ MAX_SFX_ID_2 EQUS "SFX_SILPH_SCOPE" music_const SFX_SLOTS_NEW_SPIN, SFX_Slots_New_Spin music_const SFX_SHOOTING_STAR, SFX_Shooting_Star MAX_SFX_ID_3 EQUS "SFX_SHOOTING_STAR" + +SFX_STOP_ALL_MUSIC EQU $ff diff --git a/constants/sprite_data_constants.asm b/constants/sprite_data_constants.asm index d5788cb1..48a34446 100644 --- a/constants/sprite_data_constants.asm +++ b/constants/sprite_data_constants.asm @@ -1,9 +1,3 @@ -; different kinds of people events -ITEM EQU $80 -TRAINER EQU $40 - -BOULDER_MOVEMENT_BYTE_2 EQU $10 - ; sprite facing directions SPRITE_FACING_DOWN EQU $00 SPRITE_FACING_UP EQU $04 diff --git a/data/tilesets/tileset_headers.asm b/data/tilesets/tileset_headers.asm index d8e0d9b4..8f825330 100755 --- a/data/tilesets/tileset_headers.asm +++ b/data/tilesets/tileset_headers.asm @@ -1,3 +1,11 @@ +tileset: MACRO + db BANK(\2) ; BANK(GFX) + dw \1, \2, \3 ; Block, GFX, Coll + db \4, \5, \6 ; counter tiles + db \7 ; grass tile + db \8 ; permission (indoor, cave, outdoor) +ENDM + Tilesets: tileset Overworld_Block, Overworld_GFX, Overworld_Coll, $FF,$FF,$FF, $52, OUTDOOR tileset RedsHouse1_Block, RedsHouse1_GFX, RedsHouse1_Coll, $FF,$FF,$FF, $FF, INDOOR diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 86c3f5e5..647436ff 100755 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -958,7 +958,7 @@ TrainerDefeatedText: PlayBattleVictoryMusic: push af - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySoundWaitForCurrent ld c, BANK(Music_DefeatedTrainer) diff --git a/engine/events/hidden_objects/bills_house_pc.asm b/engine/events/hidden_objects/bills_house_pc.asm index 1ffb6954..836aace0 100644 --- a/engine/events/hidden_objects/bills_house_pc.asm +++ b/engine/events/hidden_objects/bills_house_pc.asm @@ -52,7 +52,7 @@ BillsHouseInitiatedText:: TX_FAR _BillsHouseInitiatedText TX_BLINK TX_ASM - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld c, 16 diff --git a/engine/events/hidden_objects/safari_game.asm b/engine/events/hidden_objects/safari_game.asm index 785bab7f..68fc943f 100644 --- a/engine/events/hidden_objects/safari_game.asm +++ b/engine/events/hidden_objects/safari_game.asm @@ -27,7 +27,7 @@ SafariZoneGameOver: call EnableAutoTextBoxDrawing xor a ld [wAudioFadeOutControl], a - dec a + dec a ; SFX_STOP_ALL_MUSIC call PlaySound ld c, BANK(SFX_Safari_Zone_PA) ld a, SFX_SAFARI_ZONE_PA diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index e1723118..1214a3f8 100755 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1844,8 +1844,8 @@ PlayedFluteHadEffectText: and a jr nz, .done ; play out-of-battle pokeflute music - ld a, $ff - call PlaySound ; turn off music + ld a, SFX_STOP_ALL_MUSIC + call PlaySound ld a, SFX_POKEFLUTE ld c, BANK(SFX_Pokeflute) call PlayMusic diff --git a/engine/link/cable_club.asm b/engine/link/cable_club.asm index 141ed396..8aadf1e5 100755 --- a/engine/link/cable_club.asm +++ b/engine/link/cable_club.asm @@ -139,7 +139,7 @@ CableClub_DoBattleOrTradeAgain: call Serial_ExchangeBytes ld a, (1 << SERIAL) | (1 << TIMER) | (1 << VBLANK) ld [rIE], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC call PlaySound ld a, [hSerialConnectionStatus] cp USING_INTERNAL_CLOCK @@ -261,7 +261,7 @@ CableClub_DoBattleOrTradeAgain: ld [wUnusedCF8D + 1], a xor a ld [wTradeCenterPointerTableIndex], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC call PlaySound ld a, [hSerialConnectionStatus] cp USING_INTERNAL_CLOCK diff --git a/engine/movie/credits.asm b/engine/movie/credits.asm index f6900602..dd735df6 100755 --- a/engine/movie/credits.asm +++ b/engine/movie/credits.asm @@ -21,7 +21,7 @@ HallOfFamePC: ld a, %11000000 ld [rBGP], a call EnableLCD - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC call PlaySoundWaitForCurrent ld c, BANK(Music_Credits) ld a, MUSIC_CREDITS diff --git a/engine/movie/evolution.asm b/engine/movie/evolution.asm index 731735c5..af2ed13b 100755 --- a/engine/movie/evolution.asm +++ b/engine/movie/evolution.asm @@ -9,7 +9,7 @@ EvolveMon: xor a ld [wLowHealthAlarm], a ld [wChannelSoundIDs + Ch5], a - dec a + dec a ; SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld a, $1 @@ -67,7 +67,7 @@ EvolveMon: ld a, [wEvoNewSpecies] .done ld [wWholeScreenPaletteMonSpecies], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld a, [wWholeScreenPaletteMonSpecies] diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index b1acfb65..fdcb4778 100755 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -32,8 +32,8 @@ SetDefaultNames: jp CopyData OakSpeech: - ld a, $FF - call PlaySound ; stop music + ld a, SFX_STOP_ALL_MUSIC + call PlaySound ld a, BANK(Music_Routes2) ld c, a ld a, MUSIC_ROUTES2 @@ -133,9 +133,9 @@ OakSpeech: ld [wAudioSavedROMBank], a ld a, 10 ld [wAudioFadeOutControl], a - ld a, $FF + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a - call PlaySound ; stop music + call PlaySound pop af ld [H_LOADEDROMBANK], a ld [MBC1RomBank], a diff --git a/engine/overworld/elevator.asm b/engine/overworld/elevator.asm index d36e2f2c..05ca08c9 100755 --- a/engine/overworld/elevator.asm +++ b/engine/overworld/elevator.asm @@ -4,7 +4,7 @@ ShakeElevator:: ld de, SCREEN_HEIGHT * $20 call ShakeElevatorRedrawRow call Delay3 - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC call PlaySound ld a, [hSCY] ld d, a @@ -27,7 +27,7 @@ ShakeElevator:: jr nz, .shakeLoop ld a, d ld [hSCY], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC call PlaySound ld c, BANK(SFX_Safari_Zone_PA) ld a, SFX_SAFARI_ZONE_PA diff --git a/engine/overworld/healing_machine.asm b/engine/overworld/healing_machine.asm index 510f963b..836af44d 100755 --- a/engine/overworld/healing_machine.asm +++ b/engine/overworld/healing_machine.asm @@ -17,7 +17,7 @@ AnimateHealingMachine: call CopyHealingMachineOAM ld a, 4 ld [wAudioFadeOutControl], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound .waitLoop @@ -38,7 +38,7 @@ AnimateHealingMachine: cp BANK(Audio3_UpdateMusic) ld [wAudioSavedROMBank], a jr nz, .next - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld a, BANK(Music_PkmnHealed) @@ -939,7 +939,7 @@ FadeOutAudio:: ld b, a xor a ld [wAudioFadeOutControl], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld a, [wAudioSavedROMBank] @@ -2506,7 +2506,7 @@ PlayTrainerMusic:: ret nz xor a ld [wAudioFadeOutControl], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC call PlaySound ld a, BANK(Music_MeetEvilTrainer) ld [wAudioROMBank], a diff --git a/home/overworld.asm b/home/overworld.asm index 460ce11e..cc8c498c 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -772,7 +772,7 @@ HandleBlackOut:: StopMusic:: ld [wAudioFadeOutControl], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound .wait @@ -1,5 +1,11 @@ -INCLUDE "macros/asm_macros.asm" -INCLUDE "macros/data_macros.asm" -INCLUDE "macros/text_macros.asm" -INCLUDE "macros/audio_macros.asm" -INCLUDE "macros/event_macros.asm" +INCLUDE "macros/enum.asm" +INCLUDE "macros/predef.asm" +INCLUDE "macros/farcall.asm" +INCLUDE "macros/data.asm" +INCLUDE "macros/code.asm" +INCLUDE "macros/coords.asm" + +INCLUDE "macros/scripts/audio.asm" +INCLUDE "macros/scripts/maps.asm" +INCLUDE "macros/scripts/events.asm" +INCLUDE "macros/scripts/text.asm" diff --git a/macros/asm_macros.asm b/macros/asm_macros.asm deleted file mode 100755 index d3f00b0c..00000000 --- a/macros/asm_macros.asm +++ /dev/null @@ -1,192 +0,0 @@ - -lb: MACRO ; r, hi, lo - ld \1, ((\2) & $ff) << 8 + ((\3) & $ff) -ENDM - -homecall: MACRO - ld a, [H_LOADEDROMBANK] - push af - ld a, BANK(\1) - ld [H_LOADEDROMBANK], a - ld [MBC1RomBank], a - call \1 - pop af - ld [H_LOADEDROMBANK], a - ld [MBC1RomBank], a -ENDM - -farcall EQUS "callba" - -callba: MACRO - ld b, BANK(\1) - ld hl, \1 - call Bankswitch -ENDM - -callab: MACRO - ld hl, \1 - ld b, BANK(\1) - call Bankswitch -ENDM - -jpba: MACRO - ld b, BANK(\1) - ld hl, \1 - jp Bankswitch -ENDM - -jpab: MACRO - ld hl, \1 - ld b, BANK(\1) - jp Bankswitch -ENDM - -validateCoords: MACRO - IF \1 >= SCREEN_WIDTH - fail "x coord out of range" - ENDC - IF \2 >= SCREEN_HEIGHT - fail "y coord out of range" - ENDC -ENDM - -;\1 = r -;\2 = X -;\3 = Y -;\4 = which tilemap (optional) -coord: MACRO - validateCoords \2, \3 - IF _NARG >= 4 - ld \1, \4 + SCREEN_WIDTH * \3 + \2 - ELSE - ld \1, wTileMap + SCREEN_WIDTH * \3 + \2 - ENDC -ENDM - -;\1 = X -;\2 = Y -;\3 = which tilemap (optional) -aCoord: MACRO - validateCoords \1, \2 - IF _NARG >= 3 - ld a, [\3 + SCREEN_WIDTH * \2 + \1] - ELSE - ld a, [wTileMap + SCREEN_WIDTH * \2 + \1] - ENDC -ENDM - -;\1 = X -;\2 = Y -;\3 = which tilemap (optional) -Coorda: MACRO - validateCoords \1, \2 - IF _NARG >= 3 - ld [\3 + SCREEN_WIDTH * \2 + \1], a - ELSE - ld [wTileMap + SCREEN_WIDTH * \2 + \1], a - ENDC -ENDM - -;\1 = X -;\2 = Y -;\3 = which tilemap (optional) -dwCoord: MACRO - validateCoords \1, \2 - IF _NARG >= 3 - dw \3 + SCREEN_WIDTH * \2 + \1 - ELSE - dw wTileMap + SCREEN_WIDTH * \2 + \1 - ENDC -ENDM - -;\1 = r -;\2 = X -;\3 = Y -;\4 = map width -overworldMapCoord: MACRO - ld \1, wOverworldMap + ((\2) + 3) + (((\3) + 3) * ((\4) + (3 * 2))) -ENDM - -; macro for two nibbles -dn: MACRO - db (\1 << 4 | \2) -ENDM - -; macro for putting a byte then a word -dbw: MACRO - db \1 - dw \2 -ENDM - -dba: MACRO - dbw BANK(\1), \1 -ENDM - -dwb: MACRO - dw \1 - db \2 -ENDM - -dab: MACRO - dwb \1, BANK(\1) -ENDM - -dbbw: MACRO - db \1, \2 - dw \3 -ENDM - -; Predef macro. -predef_const: MACRO - const \1PredefID -ENDM - -add_predef: MACRO -\1Predef:: - db BANK(\1) - dw \1 -ENDM - -predef_id: MACRO - ld a, (\1Predef - PredefPointers) / 3 -ENDM - -predef: MACRO - predef_id \1 - call Predef -ENDM - -predef_jump: MACRO - predef_id \1 - jp Predef -ENDM - -tx_pre_const: MACRO - const \1_id -ENDM - -add_tx_pre: MACRO -\1_id:: dw \1 -ENDM - -db_tx_pre: MACRO - db (\1_id - TextPredefs) / 2 + 1 -ENDM - -tx_pre_id: MACRO - ld a, (\1_id - TextPredefs) / 2 + 1 -ENDM - -tx_pre: MACRO - tx_pre_id \1 - call PrintPredefTextID -ENDM - -tx_pre_jump: MACRO - tx_pre_id \1 - jp PrintPredefTextID -ENDM - -ldPal: MACRO - ld \1, \2 << 6 | \3 << 4 | \4 << 2 | \5 -ENDM diff --git a/macros/code.asm b/macros/code.asm new file mode 100755 index 00000000..8b7d6184 --- /dev/null +++ b/macros/code.asm @@ -0,0 +1,9 @@ +; Syntactic sugar macros + +lb: MACRO ; r, hi, lo + ld \1, ((\2) & $ff) << 8 + ((\3) & $ff) +ENDM + +ldPal: MACRO + ld \1, \2 << 6 | \3 << 4 | \4 << 2 | \5 +ENDM diff --git a/macros/coords.asm b/macros/coords.asm new file mode 100644 index 00000000..302260d7 --- /dev/null +++ b/macros/coords.asm @@ -0,0 +1,65 @@ +validateCoords: MACRO + IF \1 >= SCREEN_WIDTH + fail "x coord out of range" + ENDC + IF \2 >= SCREEN_HEIGHT + fail "y coord out of range" + ENDC +ENDM + +;\1 = r +;\2 = X +;\3 = Y +;\4 = which tilemap (optional) +coord: MACRO + validateCoords \2, \3 + IF _NARG >= 4 + ld \1, \4 + SCREEN_WIDTH * \3 + \2 + ELSE + ld \1, wTileMap + SCREEN_WIDTH * \3 + \2 + ENDC +ENDM + +;\1 = X +;\2 = Y +;\3 = which tilemap (optional) +aCoord: MACRO + validateCoords \1, \2 + IF _NARG >= 3 + ld a, [\3 + SCREEN_WIDTH * \2 + \1] + ELSE + ld a, [wTileMap + SCREEN_WIDTH * \2 + \1] + ENDC +ENDM + +;\1 = X +;\2 = Y +;\3 = which tilemap (optional) +Coorda: MACRO + validateCoords \1, \2 + IF _NARG >= 3 + ld [\3 + SCREEN_WIDTH * \2 + \1], a + ELSE + ld [wTileMap + SCREEN_WIDTH * \2 + \1], a + ENDC +ENDM + +;\1 = X +;\2 = Y +;\3 = which tilemap (optional) +dwCoord: MACRO + validateCoords \1, \2 + IF _NARG >= 3 + dw \3 + SCREEN_WIDTH * \2 + \1 + ELSE + dw wTileMap + SCREEN_WIDTH * \2 + \1 + ENDC +ENDM + +;\1 = r +;\2 = X +;\3 = Y +;\4 = map width +overworldMapCoord: MACRO + ld \1, wOverworldMap + ((\2) + 3) + (((\3) + 3) * ((\4) + (3 * 2))) +ENDM diff --git a/macros/data.asm b/macros/data.asm new file mode 100755 index 00000000..54d1d561 --- /dev/null +++ b/macros/data.asm @@ -0,0 +1,62 @@ +; Value macros + +percent EQUS "* $ff / 100" + +bcd2: MACRO + dn ((\1) / 1000) % 10, ((\1) / 100) % 10 + dn ((\1) / 10) % 10, (\1) % 10 +ENDM + +bcd3: MACRO + dn ((\1) / 100000) % 10, ((\1) / 10000) % 10 + dn ((\1) / 1000) % 10, ((\1) / 100) % 10 + dn ((\1) / 10) % 10, (\1) % 10 +ENDM + +coins equs "bcd2" +money equs "bcd3" + +RGB: MACRO + dw (\3 << 10 | \2 << 5 | \1) +ENDM + +tmlearn: MACRO +x = 0 + REPT _NARG +IF \1 != 0 +x = x | (1 << ((\1 - 1) % 8)) +ENDC + SHIFT + ENDR + db x +ENDM + + +; Constant data (db, dw, dl) macros + +dn: MACRO ; nybbles + db (\1 << 4 | \2) +ENDM + +dbw: MACRO + db \1 + dw \2 +ENDM + +dba: MACRO + dbw BANK(\1), \1 +ENDM + +dwb: MACRO + dw \1 + db \2 +ENDM + +dab: MACRO + dwb \1, BANK(\1) +ENDM + +dbbw: MACRO + db \1, \2 + dw \3 +ENDM diff --git a/macros/enum.asm b/macros/enum.asm new file mode 100644 index 00000000..8fe5b534 --- /dev/null +++ b/macros/enum.asm @@ -0,0 +1,43 @@ +; Enumerate variables + +enum_start: MACRO +if _NARG >= 1 +__enum__ = \1 +else +__enum__ = 0 +endc +if _NARG >= 2 +__enumdir__ = \2 +else +__enumdir__ = 1 +endc +ENDM + +enum: MACRO +\1 EQU __enum__ +__enum__ = __enum__ + __enumdir__ +ENDM + +enum_set: MACRO +__enum__ = \1 +ENDM + +; Enumerate constants + +const_def: MACRO +if _NARG >= 1 +const_value = \1 +else +const_value = 0 +endc +ENDM + +const: MACRO +\1 EQU const_value +const_value = const_value + 1 +ENDM + +shift_const: MACRO +\1 EQU (1 << const_value) +const_value = const_value + 1 +ENDM diff --git a/macros/farcall.asm b/macros/farcall.asm new file mode 100644 index 00000000..fc208e3d --- /dev/null +++ b/macros/farcall.asm @@ -0,0 +1,37 @@ +farcall EQUS "callba" + +callba: MACRO + ld b, BANK(\1) + ld hl, \1 + call Bankswitch +ENDM + +callab: MACRO + ld hl, \1 + ld b, BANK(\1) + call Bankswitch +ENDM + +jpba: MACRO + ld b, BANK(\1) + ld hl, \1 + jp Bankswitch +ENDM + +jpab: MACRO + ld hl, \1 + ld b, BANK(\1) + jp Bankswitch +ENDM + +homecall: MACRO + ld a, [H_LOADEDROMBANK] + push af + ld a, BANK(\1) + ld [H_LOADEDROMBANK], a + ld [MBC1RomBank], a + call \1 + pop af + ld [H_LOADEDROMBANK], a + ld [MBC1RomBank], a +ENDM diff --git a/macros/predef.asm b/macros/predef.asm new file mode 100644 index 00000000..fda42004 --- /dev/null +++ b/macros/predef.asm @@ -0,0 +1,49 @@ +predef_const: MACRO + const \1PredefID +ENDM + +add_predef: MACRO +\1Predef:: + db BANK(\1) + dw \1 +ENDM + +predef_id: MACRO + ld a, (\1Predef - PredefPointers) / 3 +ENDM + +predef: MACRO + predef_id \1 + call Predef +ENDM + +predef_jump: MACRO + predef_id \1 + jp Predef +ENDM + +tx_pre_const: MACRO + const \1_id +ENDM + +add_tx_pre: MACRO +\1_id:: dw \1 +ENDM + +db_tx_pre: MACRO + db (\1_id - TextPredefs) / 2 + 1 +ENDM + +tx_pre_id: MACRO + ld a, (\1_id - TextPredefs) / 2 + 1 +ENDM + +tx_pre: MACRO + tx_pre_id \1 + call PrintPredefTextID +ENDM + +tx_pre_jump: MACRO + tx_pre_id \1 + jp PrintPredefTextID +ENDM diff --git a/macros/audio_macros.asm b/macros/scripts/audio.asm index 95b9ecbc..8a250c63 100755 --- a/macros/audio_macros.asm +++ b/macros/scripts/audio.asm @@ -1,18 +1,3 @@ - -StopAllMusic: MACRO - ld a, $ff - call PlaySound -ENDM - -Ch1 EQU 0 -Ch2 EQU 1 -Ch3 EQU 2 -Ch4 EQU 3 -Ch5 EQU 4 -Ch6 EQU 5 -Ch7 EQU 6 -Ch8 EQU 7 - audio_header: MACRO db (_NARG - 2) << 6 | \2 dw \1_\2 @@ -73,19 +58,6 @@ noise_note: MACRO db \4 ENDM -C_ EQU $0 -C# EQU $1 -D_ EQU $2 -D# EQU $3 -E_ EQU $4 -F_ EQU $5 -F# EQU $6 -G_ EQU $7 -G# EQU $8 -A_ EQU $9 -A# EQU $A -B_ EQU $B - ; arguments: pitch, length [1, 16] note: MACRO db (\1 << 4) | (\2 - 1) diff --git a/macros/event_macros.asm b/macros/scripts/events.asm index 20027209..9be354e3 100755 --- a/macros/event_macros.asm +++ b/macros/scripts/events.asm @@ -15,7 +15,8 @@ event_byte = ((\1) / 8) ELSE bit (\1) % 8, a ENDC - ENDM +ENDM + ;\1 = event index CheckEventReuseA: MACRO @@ -25,7 +26,8 @@ event_byte = ((\1) / 8) ENDC bit (\1) % 8, a - ENDM +ENDM + ;\1 = event index ;\2 = event index of the last event used before the branch @@ -37,7 +39,8 @@ event_byte = ((\1) / 8) ENDC bit (\1) % 8, a - ENDM +ENDM + ;\1 = reg ;\2 = event index @@ -48,21 +51,24 @@ EventFlagBit: MACRO ELSE ld \1, (\2) % 8 ENDC - ENDM +ENDM + ;\1 = reg ;\2 = event index EventFlagAddress: MACRO event_byte = ((\2) / 8) ld \1, wEventFlags + event_byte - ENDM +ENDM + ;\1 = event index CheckEventHL: MACRO event_byte = ((\1) / 8) ld hl, wEventFlags + event_byte bit (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index CheckEventReuseHL: MACRO @@ -72,14 +78,16 @@ event_byte = ((\1) / 8) ENDC bit (\1) % 8, [hl] - ENDM +ENDM + ; dangerous, only use when HL is guaranteed to be the desired value ;\1 = event index CheckEventForceReuseHL: MACRO event_byte = ((\1) / 8) bit (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index ;\2 = event index of the last event used before the branch @@ -91,7 +99,8 @@ event_byte = ((\1) / 8) ENDC bit (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index CheckAndSetEvent: MACRO @@ -99,7 +108,8 @@ event_byte = ((\1) / 8) ld hl, wEventFlags + event_byte bit (\1) % 8, [hl] set (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index CheckAndResetEvent: MACRO @@ -107,7 +117,8 @@ event_byte = ((\1) / 8) ld hl, wEventFlags + event_byte bit (\1) % 8, [hl] res (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index CheckAndSetEventA: MACRO @@ -115,7 +126,8 @@ CheckAndSetEventA: MACRO bit (\1) % 8, a set (\1) % 8, a ld [wEventFlags + ((\1) / 8)], a - ENDM +ENDM + ;\1 = event index CheckAndResetEventA: MACRO @@ -123,14 +135,16 @@ CheckAndResetEventA: MACRO bit (\1) % 8, a res (\1) % 8, a ld [wEventFlags + ((\1) / 8)], a - ENDM +ENDM + ;\1 = event index SetEvent: MACRO event_byte = ((\1) / 8) ld hl, wEventFlags + event_byte set (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index SetEventReuseHL: MACRO @@ -140,7 +154,8 @@ event_byte = ((\1) / 8) ENDC set (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index ;\2 = event index of the last event used before the branch @@ -152,14 +167,16 @@ event_byte = ((\1) / 8) ENDC set (\1) % 8, [hl] - ENDM +ENDM + ; dangerous, only use when HL is guaranteed to be the desired value ;\1 = event index SetEventForceReuseHL: MACRO event_byte = ((\1) / 8) set (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index ;\2 = event index @@ -170,14 +187,16 @@ SetEvents: MACRO SetEventReuseHL \2 shift endr - ENDM +ENDM + ;\1 = event index ResetEvent: MACRO event_byte = ((\1) / 8) ld hl, wEventFlags + event_byte res (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index ResetEventReuseHL: MACRO @@ -187,7 +206,8 @@ event_byte = ((\1) / 8) ENDC res (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index ;\2 = event index of the last event used before the branch @@ -199,14 +219,16 @@ event_byte = ((\1) / 8) ENDC res (\1) % 8, [hl] - ENDM +ENDM + ; dangerous, only use when HL is guaranteed to be the desired value ;\1 = event index ResetEventForceReuseHL: MACRO event_byte = ((\1) / 8) res (\1) % 8, [hl] - ENDM +ENDM + ;\1 = event index ;\2 = event index @@ -217,7 +239,8 @@ ResetEvents: MACRO ResetEventReuseHL \2 shift endr - ENDM +ENDM + ;\1 = event index ;\2 = number of bytes away from the base address (optional, for matching the ROM) @@ -227,7 +250,8 @@ dbEventFlagBit: MACRO ELSE db ((\1) % 8) ENDC - ENDM +ENDM + ;\1 = event index ;\2 = number of bytes away from the base address (optional, for matching the ROM) @@ -237,7 +261,8 @@ dwEventFlagAddress: MACRO ELSE dw wEventFlags + ((\1) / 8) ENDC - ENDM +ENDM + ;\1 = start ;\2 = end @@ -297,7 +322,8 @@ event_fill_count = event_fill_count + 1 ENDC ENDC ENDC - ENDM +ENDM + ;\1 = start ;\2 = end @@ -362,7 +388,8 @@ event_fill_count = event_fill_count + 1 ENDC ENDC ENDC - ENDM +ENDM + ; returns whether both events are set in Z flag ; This is counter-intuitive because the other event checks set the Z flag when @@ -400,7 +427,8 @@ event_byte = ((\1) / 8) pop bc ENDC ENDC - ENDM +ENDM + ; returns the complement of whether either event is set in Z flag ;\1 = event index 1 @@ -429,7 +457,8 @@ CheckEitherEventSet: MACRO pop bc ENDC ENDC - ENDM +ENDM + ; for handling fixed event bits when events are inserted/removed ;\1 = event index @@ -438,4 +467,5 @@ AdjustEventBit: MACRO IF ((\1) % 8) != (\2) add ((\1) % 8) - (\2) ENDC - ENDM +ENDM + diff --git a/macros/data_macros.asm b/macros/scripts/maps.asm index 794b75f7..a30561b9 100755..100644 --- a/macros/data_macros.asm +++ b/macros/scripts/maps.asm @@ -1,39 +1,6 @@ - -; Constant enumeration is useful for monsters, items, moves, etc. -const_def: MACRO -if _NARG >= 1 -const_value = \1 -else -const_value = 0 -endc -ENDM - -const: MACRO -\1 EQU const_value -const_value = const_value + 1 -ENDM - -; data format macros - -percent EQUS "* $ff / 100" - -bcd2: MACRO - dn ((\1) / 1000) % 10, ((\1) / 100) % 10 - dn ((\1) / 10) % 10, (\1) % 10 -ENDM - -bcd3: MACRO - dn ((\1) / 100000) % 10, ((\1) / 10000) % 10 - dn ((\1) / 1000) % 10, ((\1) / 100) % 10 - dn ((\1) / 10) % 10, (\1) % 10 -ENDM - -coins equs "bcd2" -money equs "bcd3" - -;\1 = Map Width -;\2 = Rows above (Y-blocks) -;\3 = X movement (X-blocks) +;\1 map width +;\2 Rows above (Y-blocks) +;\3 X movement (X-blocks) EVENT_DISP: MACRO dw (wOverworldMap + 7 + (\1) + ((\1) + 6) * ((\2) >> 1) + ((\3) >> 1)) ; Ev.Disp db \2,\3 ;Y,X @@ -67,32 +34,6 @@ IMAP: MACRO ; imap mapid_less_than,x-coordinate,y-coordinate,textpointer dw \4 ENDM -; tilesets' headers macro -tileset: MACRO - db BANK(\2) ; BANK(GFX) - dw \1, \2, \3 ; Block, GFX, Coll - db \4, \5, \6 ; counter tiles - db \7 ; grass tile - db \8 ; permission (indoor, cave, outdoor) -ENDM - -INDOOR EQU 0 -CAVE EQU 1 -OUTDOOR EQU 2 - -RGB: MACRO - dw (\3 << 10 | \2 << 5 | \1) -ENDM - -WALK EQU $FE -STAY EQU $FF - -DOWN EQU $D0 -UP EQU $D1 -LEFT EQU $D2 -RIGHT EQU $D3 -NONE EQU $FF - ;\1 sprite id ;\2 x position ;\3 y position @@ -144,11 +85,11 @@ warp_to: MACRO EVENT_DISP \3, \2, \1 ENDM +;\1 map name +;\2 map id +;\3 tileset +;\4 connections: combo of NORTH, SOUTH, WEST, and/or EAST, or 0 for none map_header: MACRO -;\1: map name -;\2: map id -;\3: tileset -;\4: connections: combo of NORTH, SOUTH, WEST, and/or EAST, or 0 for none CURRENT_MAP_WIDTH = \2_WIDTH CURRENT_MAP_HEIGHT = \2_HEIGHT CURRENT_MAP_OBJECT EQUS "\1_Object" @@ -161,6 +102,7 @@ CURRENT_MAP_OBJECT EQUS "\1_Object" db \4 ENDM +; Comes after map_header and connection macros end_map_header: MACRO dw CURRENT_MAP_OBJECT PURGE CURRENT_MAP_WIDTH @@ -169,12 +111,12 @@ PURGE CURRENT_MAP_OBJECT ENDM ; Connections go in order: north, south, west, east +;\1 direction +;\2 map name +;\3 map id +;\4 offset of the target map relative to the current map +; (x offset for east/west, y offset for north/south) connection: MACRO -;\1: direction -;\2: map name -;\3: map id -;\4: offset of the target map relative to the current map -; (x offset for east/west, y offset for north/south) ; Calculate tile offsets for source (current) and target maps _src = 0 @@ -240,14 +182,3 @@ endc db _y, _x dw wOverworldMap + _win ENDM - -tmlearn: MACRO -x = 0 - REPT _NARG -IF \1 != 0 -x = x | (1 << ((\1 - 1) % 8)) -ENDC - SHIFT - ENDR - db x -ENDM diff --git a/macros/text_macros.asm b/macros/scripts/text.asm index 21e02634..732a22d4 100755 --- a/macros/text_macros.asm +++ b/macros/scripts/text.asm @@ -1,5 +1,3 @@ - -; text macros text EQUS "db $00," ; Start writing text. next EQUS "db $4e," ; Move a line down. line EQUS "db $4f," ; Start writing at the bottom line. diff --git a/scripts/CeruleanCity.asm b/scripts/CeruleanCity.asm index 117ec4da..94ec2496 100755 --- a/scripts/CeruleanCity.asm +++ b/scripts/CeruleanCity.asm @@ -64,7 +64,7 @@ CeruleanCityScript0: ld a, [wWalkBikeSurfState] and a jr z, .asm_19512 - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound .asm_19512 @@ -171,7 +171,7 @@ CeruleanCityScript2: ld a, $1 ld [hSpriteIndexOrTextID], a call DisplayTextID - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index 11abdf65..79de99ff 100755 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -510,7 +510,7 @@ OaksLabScript15: xor a ld [hJoyHeld], a call EnableAutoTextBoxDrawing - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart @@ -611,7 +611,7 @@ OaksLabScript16: xor a ; NPC_MOVEMENT_DOWN call FillMemory ld [hl], $ff - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart diff --git a/scripts/PalletTown.asm b/scripts/PalletTown.asm index 5ad7d40f..4c6ab015 100755 --- a/scripts/PalletTown.asm +++ b/scripts/PalletTown.asm @@ -27,8 +27,8 @@ PalletTownScript0: ld [hJoyHeld], a ld a, PLAYER_DIR_DOWN ld [wPlayerMovingDirection], a - ld a, $FF - call PlaySound ; stop music + ld a, SFX_STOP_ALL_MUSIC + call PlaySound ld a, BANK(Music_MeetProfOak) ld c, a ld a, MUSIC_MEET_PROF_OAK ; “oak appears” music diff --git a/scripts/PewterPokecenter.asm b/scripts/PewterPokecenter.asm index 22d2fb6b..be933fee 100755 --- a/scripts/PewterPokecenter.asm +++ b/scripts/PewterPokecenter.asm @@ -21,7 +21,8 @@ PewterJigglypuffText: ld [wDoNotWaitForButtonPressAfterDisplayingText], a ld hl, .Text call PrintText - StopAllMusic + ld a, SFX_STOP_ALL_MUSIC + call PlaySound ld c, 32 call DelayFrames ld hl, JigglypuffFacingDirections diff --git a/scripts/PokemonTower2F.asm b/scripts/PokemonTower2F.asm index 81f4c0b3..94916e37 100755 --- a/scripts/PokemonTower2F.asm +++ b/scripts/PokemonTower2F.asm @@ -22,7 +22,7 @@ PokemonTower2Script0: ld hl, CoordsData_6055e call ArePlayerCoordsInArray ret nc - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld c, BANK(Music_MeetRival) @@ -76,7 +76,7 @@ PokemonTower2Script1: ld a, $1 ld [H_SPRITEINDEX], a call MoveSprite - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart diff --git a/scripts/Route22.asm b/scripts/Route22.asm index 7226e509..1fd7e09a 100755 --- a/scripts/Route22.asm +++ b/scripts/Route22.asm @@ -88,7 +88,7 @@ Route22Script0: ld a, [wWalkBikeSurfState] and a jr z, .asm_50f4e - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound .asm_50f4e @@ -167,7 +167,7 @@ Route22Script2: ld a, $1 ld [hSpriteIndexOrTextID], a call DisplayTextID - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart @@ -241,11 +241,11 @@ Route22Script_5104e: ld a, [wWalkBikeSurfState] and a jr z, .skipYVisibilityTesta - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound .skipYVisibilityTesta - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateTempo @@ -326,7 +326,7 @@ Route22Script5: ld a, $2 ld [hSpriteIndexOrTextID], a call DisplayTextID - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStartAndTempo diff --git a/scripts/SSAnne2F.asm b/scripts/SSAnne2F.asm index ba900748..2795d1d1 100755 --- a/scripts/SSAnne2F.asm +++ b/scripts/SSAnne2F.asm @@ -24,7 +24,7 @@ SSAnne2Script0: ld hl, CoordsData_61411 call ArePlayerCoordsInArray ret nc - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld c, BANK(Music_MeetRival) @@ -145,7 +145,7 @@ SSAnne2Script2: ld a, $2 ld [H_SPRITEINDEX], a call MoveSprite - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart diff --git a/scripts/SSAnneCaptainsRoom.asm b/scripts/SSAnneCaptainsRoom.asm index de0272e4..5723c32d 100755 --- a/scripts/SSAnneCaptainsRoom.asm +++ b/scripts/SSAnneCaptainsRoom.asm @@ -48,7 +48,7 @@ SSAnne7RubText: cp BANK(Audio3_UpdateMusic) ld [wAudioSavedROMBank], a jr nz, .asm_61908 - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld a, Bank(Music_PkmnHealed) diff --git a/scripts/SilphCo7F.asm b/scripts/SilphCo7F.asm index e7594663..84a94c92 100755 --- a/scripts/SilphCo7F.asm +++ b/scripts/SilphCo7F.asm @@ -130,7 +130,7 @@ SilphCo7Script0: ld [wJoyIgnore], a ld a, PLAYER_DIR_DOWN ld [wPlayerMovingDirection], a - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld c, BANK(Music_MeetRival) @@ -219,7 +219,7 @@ SilphCo7Script4: ld a, $f ld [hSpriteIndexOrTextID], a call DisplayTextID - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound callba Music_RivalAlternateStart diff --git a/scripts/VermilionDock.asm b/scripts/VermilionDock.asm index 65b66c52..cc237f8e 100755 --- a/scripts/VermilionDock.asm +++ b/scripts/VermilionDock.asm @@ -38,7 +38,7 @@ VermilionDock_Script: VermilionDock_1db9b: SetEventForceReuseHL EVENT_SS_ANNE_LEFT - ld a, $ff + ld a, SFX_STOP_ALL_MUSIC ld [wJoyIgnore], a ld [wNewSoundID], a call PlaySound |