From b066d3c9bc02cf4213173538d148cfabcc7212a8 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Mon, 20 Nov 2023 17:53:19 -0500 Subject: Add `bigdw` and `dc` data macros --- engine/battle/animations.asm | 54 ++++++++++++++++++------------------ engine/battle/battle_transitions.asm | 24 ++++++++-------- engine/battle/scale_sprites.asm | 21 +++----------- 3 files changed, 43 insertions(+), 56 deletions(-) (limited to 'engine/battle') diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm index fcfec14d..712958bc 100644 --- a/engine/battle/animations.asm +++ b/engine/battle/animations.asm @@ -976,7 +976,7 @@ AnimationFlashScreenLong: push hl .innerLoop ld a, [hli] - cp $01 ; is it the end of the palettes? + cp 1 jr z, .endOfPalettes ldh [rBGP], a call FlashScreenLongDelay @@ -992,35 +992,35 @@ AnimationFlashScreenLong: ; BG palettes FlashScreenLongMonochrome: - db %11111001 ; 3, 3, 2, 1 - db %11111110 ; 3, 3, 3, 2 - db %11111111 ; 3, 3, 3, 3 - db %11111110 ; 3, 3, 3, 2 - db %11111001 ; 3, 3, 2, 1 - db %11100100 ; 3, 2, 1, 0 - db %10010000 ; 2, 1, 0, 0 - db %01000000 ; 1, 0, 0, 0 - db %00000000 ; 0, 0, 0, 0 - db %01000000 ; 1, 0, 0, 0 - db %10010000 ; 2, 1, 0, 0 - db %11100100 ; 3, 2, 1, 0 - db $01 ; terminator + dc 3, 3, 2, 1 + dc 3, 3, 3, 2 + dc 3, 3, 3, 3 + dc 3, 3, 3, 2 + dc 3, 3, 2, 1 + dc 3, 2, 1, 0 + dc 2, 1, 0, 0 + dc 1, 0, 0, 0 + dc 0, 0, 0, 0 + dc 1, 0, 0, 0 + dc 2, 1, 0, 0 + dc 3, 2, 1, 0 + db 1 ; end ; BG palettes FlashScreenLongSGB: - db %11111000 ; 3, 3, 2, 0 - db %11111100 ; 3, 3, 3, 0 - db %11111111 ; 3, 3, 3, 3 - db %11111100 ; 3, 3, 3, 0 - db %11111000 ; 3, 3, 2, 0 - db %11100100 ; 3, 2, 1, 0 - db %10010000 ; 2, 1, 0, 0 - db %01000000 ; 1, 0, 0, 0 - db %00000000 ; 0, 0, 0, 0 - db %01000000 ; 1, 0, 0, 0 - db %10010000 ; 2, 1, 0, 0 - db %11100100 ; 3, 2, 1, 0 - db $01 ; terminator + dc 3, 3, 2, 0 + dc 3, 3, 3, 0 + dc 3, 3, 3, 3 + dc 3, 3, 3, 0 + dc 3, 3, 2, 0 + dc 3, 2, 1, 0 + dc 2, 1, 0, 0 + dc 1, 0, 0, 0 + dc 0, 0, 0, 0 + dc 1, 0, 0, 0 + dc 2, 1, 0, 0 + dc 3, 2, 1, 0 + db 1 ; end ; causes a delay of 2 frames for the first cycle ; causes a delay of 1 frame for the second and third cycles diff --git a/engine/battle/battle_transitions.asm b/engine/battle/battle_transitions.asm index a16fd250..363533ce 100644 --- a/engine/battle/battle_transitions.asm +++ b/engine/battle/battle_transitions.asm @@ -335,18 +335,18 @@ BattleTransition_FlashScreen_: ret BattleTransition_FlashScreenPalettes: - db %11111001 - db %11111110 - db %11111111 - db %11111110 - db %11111001 - db %11100100 - db %10010000 - db %01000000 - db %00000000 - db %01000000 - db %10010000 - db %11100100 + dc 3, 3, 2, 1 + dc 3, 3, 3, 2 + dc 3, 3, 3, 3 + dc 3, 3, 3, 2 + dc 3, 3, 2, 1 + dc 3, 2, 1, 0 + dc 2, 1, 0, 0 + dc 1, 0, 0, 0 + dc 0, 0, 0, 0 + dc 1, 0, 0, 0 + dc 2, 1, 0, 0 + dc 3, 2, 1, 0 db 1 ; end ; used for low level trainer dungeon battles diff --git a/engine/battle/scale_sprites.asm b/engine/battle/scale_sprites.asm index 8b8942e6..9e24c89d 100644 --- a/engine/battle/scale_sprites.asm +++ b/engine/battle/scale_sprites.asm @@ -77,21 +77,8 @@ ScalePixelsByTwo: add hl, bc ; add offset ret -; repeats each input bit twice +; repeats each input bit twice, e.g. DuplicateBitsTable[%0101] = %00110011 DuplicateBitsTable: - db %00000000 - db %00000011 - db %00001100 - db %00001111 - db %00110000 - db %00110011 - db %00111100 - db %00111111 - db %11000000 - db %11000011 - db %11001100 - db %11001111 - db %11110000 - db %11110011 - db %11111100 - db %11111111 +FOR n, 16 + db (n & 1) * 3 + (n & 2) * 6 + (n & 4) * 12 + (n & 8) * 24 +ENDR -- cgit v1.3.1-sl0p From 9827190aea7ce6a6f30d6a0c04eda34934cbd35e Mon Sep 17 00:00:00 2001 From: BlueZangoose <113498143+BlueZangoose@users.noreply.github.com> Date: Wed, 22 Nov 2023 00:52:53 +0000 Subject: Use MEGA_PUNCH constant in explosion animation routine (#434) * Use MEGA_PUNCH constant in explosion animation routine * Add AnimationType constants and assert --------- Co-authored-by: vulcandth --- constants/battle_anim_constants.asm | 8 ++++++++ engine/battle/core.asm | 14 ++++++++------ engine/battle/effects.asm | 4 ++-- includes.asm | 1 + 4 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 constants/battle_anim_constants.asm (limited to 'engine/battle') diff --git a/constants/battle_anim_constants.asm b/constants/battle_anim_constants.asm new file mode 100644 index 00000000..db57d6c4 --- /dev/null +++ b/constants/battle_anim_constants.asm @@ -0,0 +1,8 @@ +; AnimationTypePointerTable indexes (see engine/battle/animations.asm) + const_def 1 + const ANIMATIONTYPE_SHAKE_SCREEN_VERTICALLY ; 1 + const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_HEAVY ; 2 + const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW ; 3 + const ANIMATIONTYPE_BLINK_ENEMY_MON_SPRITE ; 4 + const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT ; 5 + const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW_2 ; 6 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index f976674a..19ebdfcf 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -3154,9 +3154,9 @@ handleIfPlayerMoveMissed: getPlayerAnimationType: ld a, [wPlayerMoveEffect] and a - ld a, 4 ; move has no effect other than dealing damage + ld a, ANIMATIONTYPE_BLINK_ENEMY_MON_SPRITE ; move has no effect other than dealing damage jr z, playPlayerMoveAnimation - ld a, 5 ; move has effect + ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT ; move has effect playPlayerMoveAnimation: push af ld a, [wPlayerBattleStatus2] @@ -5681,9 +5681,9 @@ handleIfEnemyMoveMissed: GetEnemyAnimationType: ld a, [wEnemyMoveEffect] and a - ld a, $1 + ld a, ANIMATIONTYPE_SHAKE_SCREEN_VERTICALLY jr z, playEnemyMoveAnimation - ld a, $2 + ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_HEAVY jr playEnemyMoveAnimation handleExplosionMiss: call SwapPlayerAndEnemyLevels @@ -6752,9 +6752,11 @@ HandleExplodingAnimation: ld a, [wMoveMissed] and a ret nz - ld a, 5 + ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT ld [wAnimationType], a - + assert ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT == MEGA_PUNCH + ; ld a, MEGA_PUNCH +; fallthrough PlayMoveAnimation: ld [wAnimationID], a vc_hook_red Reduce_move_anim_flashing_Confusion diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index e89d19f3..b94b12d2 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -1460,9 +1460,9 @@ PlayBattleAnimation2: ld [wAnimationID], a ldh a, [hWhoseTurn] and a - ld a, $6 + ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW_2 jr z, .storeAnimationType - ld a, $3 + ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW .storeAnimationType ld [wAnimationType], a jp PlayBattleAnimationGotID diff --git a/includes.asm b/includes.asm index 271828b9..6253859b 100644 --- a/includes.asm +++ b/includes.asm @@ -23,6 +23,7 @@ INCLUDE "constants/serial_constants.asm" INCLUDE "constants/script_constants.asm" INCLUDE "constants/type_constants.asm" INCLUDE "constants/battle_constants.asm" +INCLUDE "constants/battle_anim_constants.asm" INCLUDE "constants/move_constants.asm" INCLUDE "constants/move_animation_constants.asm" INCLUDE "constants/move_effect_constants.asm" -- cgit v1.3.1-sl0p From 465b859c4c75ae7a36d532cc5d8186e96cc16311 Mon Sep 17 00:00:00 2001 From: RainbowMetalPigeon <118711812+RainbowMetalPigeon@users.noreply.github.com> Date: Tue, 21 Nov 2023 17:01:20 -0800 Subject: Replace some `$a` with `EFFECTIVE` (#399) --- engine/battle/core.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engine/battle') diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 19ebdfcf..ed2c4b7a 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -3076,7 +3076,7 @@ ExecutePlayerMove: ld [wMoveMissed], a ld [wMonIsDisobedient], a ld [wMoveDidntMiss], a - ld a, $a + ld a, EFFECTIVE ld [wDamageMultipliers], a ld a, [wActionResultOrTookBattleTurn] and a ; has the player already used the turn (e.g. by using an item, trying to run or switching pokemon) @@ -5602,7 +5602,7 @@ ExecuteEnemyMove: xor a ld [wMoveMissed], a ld [wMoveDidntMiss], a - ld a, $a + ld a, EFFECTIVE ld [wDamageMultipliers], a call CheckEnemyStatusConditions jr nz, .enemyHasNoSpecialConditions -- cgit v1.3.1-sl0p From d4e7a39dd89a32c7af13fed31b3178cc769fb797 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Tue, 21 Nov 2023 20:15:30 -0500 Subject: Use some more constants in place of raw numbers --- constants/battle_constants.asm | 9 +++++++-- engine/battle/core.asm | 32 ++++++++++++++++---------------- 2 files changed, 23 insertions(+), 18 deletions(-) (limited to 'engine/battle') diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index 2ae1cdef..44a85e8d 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -1,15 +1,20 @@ DEF MAX_LEVEL EQU 100 +; maximum moves known per mon DEF NUM_MOVES EQU 4 +; significant stat values +DEF BASE_STAT_LEVEL EQU 7 +DEF MAX_STAT_LEVEL EQU 13 + ; VitaminStats indexes (see data/battle/stat_names.asm) - const_def + const_def 1 const STAT_HEALTH const STAT_ATTACK const STAT_DEFENSE const STAT_SPEED const STAT_SPECIAL -DEF NUM_STATS EQU const_value +DEF NUM_STATS EQU const_value - 1 ; StatModTextStrings indexes (see data/battle/stat_mod_names.asm) const_def diff --git a/engine/battle/core.asm b/engine/battle/core.asm index ed2c4b7a..b93b6fa7 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -18,7 +18,7 @@ SlidePlayerAndEnemySilhouettesOnScreen: call LoadFontTilePatterns call LoadHudAndHpBarAndStatusTilePatterns ld hl, vBGMap0 - ld bc, $400 + ld bc, BG_MAP_WIDTH * BG_MAP_HEIGHT .clearBackgroundLoop ld a, " " ld [hli], a @@ -29,9 +29,9 @@ SlidePlayerAndEnemySilhouettesOnScreen: ; copy the work RAM tile map to VRAM hlcoord 0, 0 ld de, vBGMap0 - ld b, 18 ; number of rows + ld b, SCREEN_HEIGHT .copyRowLoop - ld c, 20 ; number of columns + ld c, SCREEN_WIDTH .copyColumnLoop ld a, [hli] ld [de], a @@ -825,7 +825,7 @@ FaintEnemyPokemon: ; the enemy mon base stats are added to stat exp, so they are halved ; the base exp (which determines normal exp) is also halved ld hl, wEnemyMonBaseStats - ld b, $7 + ld b, NUM_STATS + 2 .halveExpDataLoop srl [hl] inc hl @@ -1259,7 +1259,7 @@ SlideTrainerPicOffScreen: dec c jr nz, .columnLoop pop hl - ld de, 20 + ld de, SCREEN_WIDTH add hl, de dec b jr nz, .rowLoop @@ -4183,7 +4183,7 @@ GetDamageVarsForPlayerAttack: and a ; check for critical hit jr z, .scaleStats ; in the case of a critical hit, reset the player's attack and the enemy's defense to their base values - ld c, 3 ; defense stat + ld c, STAT_DEFENSE call GetEnemyMonStat ldh a, [hProduct + 2] ld b, a @@ -4215,7 +4215,7 @@ GetDamageVarsForPlayerAttack: and a ; check for critical hit jr z, .scaleStats ; in the case of a critical hit, reset the player's and enemy's specials to their base values - ld c, 5 ; special stat + ld c, STAT_SPECIAL call GetEnemyMonStat ldh a, [hProduct + 2] ld b, a @@ -4304,7 +4304,7 @@ GetDamageVarsForEnemyAttack: ld b, a ld c, [hl] push bc - ld c, 2 ; attack stat + ld c, STAT_ATTACK call GetEnemyMonStat ld hl, hProduct + 2 pop bc @@ -4336,7 +4336,7 @@ GetDamageVarsForEnemyAttack: ld b, a ld c, [hl] push bc - ld c, 5 ; special stat + ld c, STAT_SPECIAL call GetEnemyMonStat ld hl, hProduct + 2 pop bc @@ -4380,7 +4380,7 @@ GetDamageVarsForEnemyAttack: ret ; get stat c of enemy mon -; c: stat to get (HP=1,Attack=2,Defense=3,Speed=4,Special=5) +; c: stat to get (STAT_* constant) GetEnemyMonStat: push de push bc @@ -5287,7 +5287,7 @@ AdjustDamageForMoveType: call Multiply ld a, 10 ldh [hDivisor], a - ld b, $04 + ld b, 4 call Divide ldh a, [hQuotient + 2] ld [hli], a @@ -5315,7 +5315,6 @@ AdjustDamageForMoveType: ; this doesn't take into account the effects that dual types can have ; (e.g. 4x weakness / resistance, weaknesses and resistances canceling) ; the result is stored in [wTypeEffectiveness] -; ($05 is not very effective, $10 is neutral, $14 is super effective) ; as far is can tell, this is only used once in some AI code to help decide which move to use AIGetTypeEffectiveness: ld a, [wEnemyMoveType] @@ -5324,8 +5323,10 @@ AIGetTypeEffectiveness: ld b, [hl] ; b = type 1 of player's pokemon inc hl ld c, [hl] ; c = type 2 of player's pokemon - ld a, $10 - ld [wTypeEffectiveness], a ; initialize to neutral effectiveness + ; initialize to neutral effectiveness + ; bug: this is $10 (MORE_EFFECTIVE + 1) but should be 10 (EFFECTIVE) + ld a, MORE_EFFECTIVE + 1 + ld [wTypeEffectiveness], a ld hl, TypeEffects .loop ld a, [hli] @@ -6909,7 +6910,6 @@ _InitBattleCommon: db "@" _LoadTrainerPic: -; wd033-wd034 contain pointer to pic ld a, [wTrainerPicPointer] ld e, a ld a, [wTrainerPicPointer + 1] @@ -7043,7 +7043,7 @@ LoadMonBackPic: call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite ld hl, vSprites ld de, vBackPic - ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied + ld c, (2 * SPRITEBUFFERSIZE) / 16 ; count of 16-byte chunks to be copied ldh a, [hLoadedROMBank] ld b, a jp CopyVideoData -- cgit v1.3.1-sl0p From a247120ac115c7c7f48d487dbaf9aaaf26e18757 Mon Sep 17 00:00:00 2001 From: dannye <33dannye@gmail.com> Date: Tue, 21 Nov 2023 20:18:04 -0600 Subject: Fix a few usages of EFFECTIVE --- engine/battle/core.asm | 3 +-- engine/battle/display_effectiveness.asm | 2 +- engine/overworld/sprite_collisions.asm | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) (limited to 'engine/battle') diff --git a/engine/battle/core.asm b/engine/battle/core.asm index b93b6fa7..ca3294b8 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -5324,8 +5324,7 @@ AIGetTypeEffectiveness: inc hl ld c, [hl] ; c = type 2 of player's pokemon ; initialize to neutral effectiveness - ; bug: this is $10 (MORE_EFFECTIVE + 1) but should be 10 (EFFECTIVE) - ld a, MORE_EFFECTIVE + 1 + ld a, $10 ; bug: should be EFFECTIVE (10) ld [wTypeEffectiveness], a ld hl, TypeEffects .loop diff --git a/engine/battle/display_effectiveness.asm b/engine/battle/display_effectiveness.asm index b23695cf..2879f847 100644 --- a/engine/battle/display_effectiveness.asm +++ b/engine/battle/display_effectiveness.asm @@ -1,7 +1,7 @@ DisplayEffectiveness: ld a, [wDamageMultipliers] and $7F - cp $0A + cp EFFECTIVE ret z ld hl, SuperEffectiveText jr nc, .done diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm index ffed3708..e6d89480 100644 --- a/engine/overworld/sprite_collisions.asm +++ b/engine/overworld/sprite_collisions.asm @@ -1,5 +1,5 @@ _UpdateSprites:: - ld h, $c1 + ld h, HIGH(wSpriteStateData1) inc h ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET .spriteLoop -- cgit v1.3.1-sl0p