diff options
-rw-r--r-- | constants/map_object_constants.asm | 11 | ||||
-rw-r--r-- | data/sprites/map_objects.asm | 228 | ||||
-rw-r--r-- | engine/battle/ai/scoring.asm | 4 | ||||
-rw-r--r-- | engine/battle/effect_commands.asm | 2 | ||||
-rw-r--r-- | engine/pokemon/move_mon.asm | 10 | ||||
-rw-r--r-- | home/map_objects.asm | 20 | ||||
-rw-r--r-- | macros/code.asm | 8 | ||||
-rw-r--r-- | mobile/mobile_40.asm | 2 |
8 files changed, 150 insertions, 135 deletions
diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm index 73685d4ec..43207a4dd 100644 --- a/constants/map_object_constants.asm +++ b/constants/map_object_constants.asm @@ -75,6 +75,16 @@ OVERHEAD EQU 3 const MAPOBJECT_F ; unused OBJECT_LENGTH EQU const_value +; SpriteMovementData struct members (see data/sprites/map_objects.asm) + const_def + const SPRITEMOVEATTR_MOVEMENT ; 0 + const SPRITEMOVEATTR_FACING ; 1 + const SPRITEMOVEATTR_ACTION ; 2 + const SPRITEMOVEATTR_FLAGS1 ; 3 + const SPRITEMOVEATTR_FLAGS2 ; 4 + const SPRITEMOVEATTR_PALFLAGS ; 5 +NUM_SPRITEMOVEDATA_FIELDS EQU const_value + MAPOBJECT_SCREEN_HEIGHT EQU 11 MAPOBJECT_SCREEN_WIDTH EQU 12 @@ -119,7 +129,6 @@ MAPOBJECT_SCREEN_WIDTH EQU 12 const SPRITEMOVEDATA_GRASS ; 23 const SPRITEMOVEDATA_SWIM_WANDER ; 24 NUM_SPRITEMOVEDATA EQU const_value -SPRITEMOVEDATA_FIELDS EQU 6 ; MapObjectMovementPattern.Pointers indexes (see engine/overworld/map_objects.asm) const_def diff --git a/data/sprites/map_objects.asm b/data/sprites/map_objects.asm index 8821f8a1b..0e19b3787 100644 --- a/data/sprites/map_objects.asm +++ b/data/sprites/map_objects.asm @@ -5,304 +5,304 @@ SpriteMovementData:: ; 4273 db SPRITEMOVEFN_00 ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000010 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_STILL db SPRITEMOVEFN_STANDING ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00001100 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 2 | 1 << 3 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_WANDER db SPRITEMOVEFN_RANDOM_WALK_XY ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SPINRANDOM_SLOW db SPRITEMOVEFN_SLOW_RANDOM_SPIN ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_WALK_UP_DOWN db SPRITEMOVEFN_RANDOM_WALK_Y ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_WALK_LEFT_RIGHT db SPRITEMOVEFN_RANDOM_WALK_X ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_STANDING_DOWN db SPRITEMOVEFN_STANDING ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_STANDING_UP db SPRITEMOVEFN_STANDING ; movement function db UP ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_STANDING_LEFT db SPRITEMOVEFN_STANDING ; movement function db LEFT ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_STANDING_RIGHT db SPRITEMOVEFN_STANDING ; movement function db RIGHT ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SPINRANDOM_FAST db SPRITEMOVEFN_FAST_RANDOM_SPIN ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_PLAYER db SPRITEMOVEFN_OBEY_DPAD ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000010 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_0C db SPRITEMOVEFN_08 ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_0D db SPRITEMOVEFN_09 ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_0E db SPRITEMOVEFN_0A ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_0F db SPRITEMOVEFN_0B ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_10 db SPRITEMOVEFN_0C ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_11 db SPRITEMOVEFN_0D ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_12 db SPRITEMOVEFN_0E ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_FOLLOWING db SPRITEMOVEFN_FOLLOW ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000010 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SCRIPTED db SPRITEMOVEFN_SCRIPTED ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000010 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_BIGDOLLSYM db SPRITEMOVEFN_BIG_SNORLAX ; movement function db DOWN ; facing db OBJECT_ACTION_BIG_DOLL_SYM ; action - db %00101110 ; flags1 - db %00000001 ; flags2 - db %11000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 ; flags1 + db 1 << 0 ; flags2 + db 1 << 6 | 1 << 7 ; palette flags ; SPRITEMOVEDATA_POKEMON db SPRITEMOVEFN_BOUNCE ; movement function db DOWN ; facing db OBJECT_ACTION_BOUNCE ; action - db %00101110 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SUDOWOODO db SPRITEMOVEFN_STANDING ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00001100 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 2 | 1 << 3 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SMASHABLE_ROCK db SPRITEMOVEFN_STANDING ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00101110 ; flags1 - db %00010000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 ; flags1 + db 1 << 4 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_STRENGTH_BOULDER db SPRITEMOVEFN_STRENGTH ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00101110 ; flags1 - db %00000000 ; flags2 - db %01000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 ; flags1 + db 0 ; flags2 + db 1 << 6 ; palette flags ; SPRITEMOVEDATA_FOLLOWNOTEXACT db SPRITEMOVEFN_FOLLOWNOTEXACT ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000010 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SHADOW db SPRITEMOVEFN_SHADOW ; movement function db DOWN ; facing db OBJECT_ACTION_00 ; action - db %10001110 ; flags1 - db %00000001 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 7 ; flags1 + db 1 << 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_EMOTE db SPRITEMOVEFN_EMOTE ; movement function db DOWN ; facing db OBJECT_ACTION_EMOTE ; action - db %10001110 ; flags1 - db %00000010 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 7 ; flags1 + db 1 << 1 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SCREENSHAKE db SPRITEMOVEFN_SCREENSHAKE ; movement function db DOWN ; facing db OBJECT_ACTION_00 ; action - db %10000010 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 7 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE db SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE ; movement function db LEFT ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SPINCLOCKWISE db SPRITEMOVEFN_SPIN_CLOCKWISE ; movement function db RIGHT ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_BIGDOLLASYM db SPRITEMOVEFN_STRENGTH ; movement function db DOWN ; facing db OBJECT_ACTION_BIG_DOLL_ASYM ; action - db %00101110 ; flags1 - db %00000001 ; flags2 - db %11000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 ; flags1 + db 1 << 0 ; flags2 + db 1 << 6 | 1 << 7 ; palette flags ; SPRITEMOVEDATA_BIGDOLL db SPRITEMOVEFN_STRENGTH ; movement function db DOWN ; facing db OBJECT_ACTION_BIG_DOLL ; action - db %00101110 ; flags1 - db %00000001 ; flags2 - db %11000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 ; flags1 + db 1 << 0 ; flags2 + db 1 << 6 | 1 << 7 ; palette flags ; SPRITEMOVEDATA_BOULDERDUST db SPRITEMOVEFN_BOULDERDUST ; movement function db DOWN ; facing db OBJECT_ACTION_BOULDER_DUST ; action - db %10001110 ; flags1 - db %00000001 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 7 ; flags1 + db 1 << 0 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_GRASS db SPRITEMOVEFN_GRASS ; movement function db DOWN ; facing db OBJECT_ACTION_GRASS_SHAKE ; action - db %10001110 ; flags1 - db %00000010 ; flags2 - db %00000000 ; palette flags + db 1 << 1 | 1 << 2 | 1 << 3 | 1 << 7 ; flags1 + db 1 << 1 ; flags2 + db 0 ; palette flags ; SPRITEMOVEDATA_SWIM_WANDER db SPRITEMOVEFN_RANDOM_WALK_XY ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00100000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 1 << 5 ; palette flags ; 25 db SPRITEMOVEFN_00 ; movement function db DOWN ; facing db OBJECT_ACTION_STAND ; action - db %00000000 ; flags1 - db %00000000 ; flags2 - db %00000000 ; palette flags + db 0 ; flags1 + db 0 ; flags2 + db 0 ; palette flags ; 4357 diff --git a/engine/battle/ai/scoring.asm b/engine/battle/ai/scoring.asm index e83682427..567737c1f 100644 --- a/engine/battle/ai/scoring.asm +++ b/engine/battle/ai/scoring.asm @@ -1055,7 +1055,7 @@ AI_Smart_TrapTarget: ; 38a71 jr nz, .asm_38a91 ld a, [wPlayerSubStatus1] - and 1<<SUBSTATUS_IN_LOVE | 1<<SUBSTATUS_ROLLOUT | 1<<SUBSTATUS_IDENTIFIED | 1<<SUBSTATUS_NIGHTMARE + and 1 << SUBSTATUS_IN_LOVE | 1 << SUBSTATUS_ROLLOUT | 1 << SUBSTATUS_IDENTIFIED | 1 << SUBSTATUS_NIGHTMARE jr nz, .asm_38a91 ; Else, 50% chance to greatly encourage this move if it's the player's Pokemon first turn. @@ -1847,7 +1847,7 @@ AI_Smart_MeanLook: ; 38dfb ; 80% chance to greatly encourage this move if the player is either ; in love, identified, stuck in Rollout, or has a Nightmare. ld a, [wPlayerSubStatus1] - and 1<<SUBSTATUS_IN_LOVE | 1<<SUBSTATUS_ROLLOUT | 1<<SUBSTATUS_IDENTIFIED | 1<<SUBSTATUS_NIGHTMARE + and 1 << SUBSTATUS_IN_LOVE | 1 << SUBSTATUS_ROLLOUT | 1 << SUBSTATUS_IDENTIFIED | 1 << SUBSTATUS_NIGHTMARE jr nz, .asm_38e26 ; Otherwise, discourage this move unless the player only has not very effective moves against the enemy. diff --git a/engine/battle/effect_commands.asm b/engine/battle/effect_commands.asm index fad5b27a0..5fd37e054 100644 --- a/engine/battle/effect_commands.asm +++ b/engine/battle/effect_commands.asm @@ -364,7 +364,7 @@ CantMove: ; 341f0 ld a, BATTLE_VARS_SUBSTATUS3 call GetBattleVarAddr ld a, [hl] - and $ff ^ (1<<SUBSTATUS_BIDE + 1<<SUBSTATUS_RAMPAGE + 1<<SUBSTATUS_CHARGED) + and $ff ^ (1 << SUBSTATUS_BIDE | 1 << SUBSTATUS_RAMPAGE | 1 << SUBSTATUS_CHARGED) ld [hl], a call ResetFuryCutterCount diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm index 630479797..2074e537f 100644 --- a/engine/pokemon/move_mon.asm +++ b/engine/pokemon/move_mon.asm @@ -1497,29 +1497,29 @@ CalcMonStatC: ; e17b jr z, .Special cp STAT_SDEF jr z, .Special -; DV_HP = (DV_ATK & 1) << 3 + (DV_DEF & 1) << 2 + (DV_SPD & 1) << 1 + (DV_SPC & 1) +; DV_HP = (DV_ATK & 1) << 3 | (DV_DEF & 1) << 2 | (DV_SPD & 1) << 1 | (DV_SPC & 1) push bc ld a, [hl] swap a - and $1 + and 1 add a add a add a ld b, a ld a, [hli] - and $1 + and 1 add a add a add b ld b, a ld a, [hl] swap a - and $1 + and 1 add a add b ld b, a ld a, [hl] - and $1 + and 1 add b pop bc jr .GotDV diff --git a/home/map_objects.asm b/home/map_objects.asm index c99e27088..5acea7822 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -482,10 +482,10 @@ GetSpriteMovementFunction:: ; 1a2f xor a .ok - ld hl, SpriteMovementData + ld hl, SpriteMovementData + SPRITEMOVEATTR_MOVEMENT ld e, a ld d, 0 -rept SPRITEMOVEDATA_FIELDS +rept NUM_SPRITEMOVEDATA_FIELDS add hl, de endr ld a, [hl] @@ -497,15 +497,15 @@ GetInitialFacing:: ; 1a47 push de ld e, a ld d, 0 - ld hl, SpriteMovementData + 1 ; init facing -rept SPRITEMOVEDATA_FIELDS + ld hl, SpriteMovementData + SPRITEMOVEATTR_FACING +rept NUM_SPRITEMOVEDATA_FIELDS add hl, de endr ld a, BANK(SpriteMovementData) call GetFarByte add a add a - and $c + maskbits NUM_DIRECTIONS, 2 pop de pop bc ret @@ -537,8 +537,8 @@ CopySpriteMovementData:: ; 1a61 push de ld e, a ld d, 0 - ld hl, SpriteMovementData + 1 ; init facing -rept SPRITEMOVEDATA_FIELDS + ld hl, SpriteMovementData + SPRITEMOVEATTR_FACING +rept NUM_SPRITEMOVEDATA_FIELDS add hl, de endr ld b, h @@ -549,7 +549,7 @@ endr inc bc rlca rlca - and %00001100 + maskbits NUM_DIRECTIONS, 2 ld hl, OBJECT_FACING add hl, de ld [hl], a @@ -654,7 +654,7 @@ SetSpriteDirection:: ; 1af8 and %11110011 ld e, a pop af - and %00001100 + maskbits NUM_DIRECTIONS, 2 or e ld [hl], a ret @@ -664,6 +664,6 @@ GetSpriteDirection:: ; 1b07 ld hl, OBJECT_FACING add hl, bc ld a, [hl] - and %00001100 + maskbits NUM_DIRECTIONS, 2 ret ; 1b0f diff --git a/macros/code.asm b/macros/code.asm index 1fb651f30..09b15255e 100644 --- a/macros/code.asm +++ b/macros/code.asm @@ -36,8 +36,10 @@ jumptable: MACRO ENDM maskbits: MACRO -; masks just enough bits to cover the argument +; masks just enough bits to cover the first argument +; the second argument is an optional shift amount ; e.g. "maskbits 26" becomes "and %00011111" (since 26 - 1 = %00011001) +; and "maskbits 3, 2" becomes "and %00001100" (since "maskbits 3" becomes %00000011) ; example usage in rejection sampling: ; .loop ; call Random @@ -50,7 +52,11 @@ if x + 1 < (\1) x = x << 1 | 1 endc endr +if _NARG == 2 + and x << (\2) +else and x +endc ENDM calc_sine_wave: MACRO diff --git a/mobile/mobile_40.asm b/mobile/mobile_40.asm index c64e348de..f82f3d2d3 100644 --- a/mobile/mobile_40.asm +++ b/mobile/mobile_40.asm @@ -83,7 +83,7 @@ EnableMobile: ; 100082 call DoubleSpeed xor a ld [rIF], a - ld a, 1 << VBLANK + 1 << LCD_STAT + 1 << TIMER + 1 << SERIAL + ld a, 1 << VBLANK | 1 << LCD_STAT | 1 << TIMER | 1 << SERIAL ld [rIE], a xor a ld [hMapAnims], a |