From ef98c44edd40d28f56afb271d0a64e52ee59fc96 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Sep 2016 09:37:10 -0400 Subject: [PATCH] Person action and facing labels, part 1 --- audio/engine.asm | 50 +++++++++--------- constants/audio_constants.asm | 8 +-- constants/sprite_constants.asm | 46 ++++++++--------- data/map_objects.asm | 78 ++++++++++++++-------------- engine/facings.asm | 92 ++++++++++++++++----------------- engine/map_object_action.asm | 68 ++++++++++++------------ engine/map_objects.asm | 2 +- gfx/credits/ditto.png | Bin 377 -> 405 bytes gfx/credits/igglybuff.png | Bin 482 -> 527 bytes gfx/credits/smoochum.png | Bin 409 -> 428 bytes gfx/misc/badges.png | Bin 517 -> 557 bytes gfx/misc/font.png | Bin 770 -> 792 bytes gfx/misc/font_inversed.png | Bin 736 -> 742 bytes gfx/misc/footprints.png | Bin 3012 -> 3061 bytes gfx/misc/pack_f.png | Bin 356 -> 451 bytes 15 files changed, 174 insertions(+), 170 deletions(-) diff --git a/audio/engine.asm b/audio/engine.asm index 48571fdf4..2cc921bd0 100644 --- a/audio/engine.asm +++ b/audio/engine.asm @@ -258,21 +258,21 @@ UpdateChannels: ; e8125 .asm_e8159 bit NOTE_REST, [hl] ; rest jr nz, .ch1rest - bit NOTE_UNKN_4, [hl] + bit NOTE_NOISE_SAMPLING, [hl] jr nz, .asm_e81a2 - bit NOTE_UNKN_1, [hl] - jr nz, .asm_e816b - bit NOTE_UNKN_6, [hl] + bit NOTE_FREQ_OVERRIDE, [hl] + jr nz, .frequency_override + bit NOTE_VIBRATO_OVERRIDE, [hl] jr nz, .asm_e8184 - jr .asm_e8175 + jr .check_duty_override -.asm_e816b +.frequency_override ld a, [wCurTrackFrequency] ld [rNR13], a ld a, [wCurTrackFrequency + 1] ld [rNR14], a -.asm_e8175 - bit NOTE_UNKN_0, [hl] +.check_duty_override + bit NOTE_DUTY_OVERRIDE, [hl] ret z ld a, [wCurTrackDuty] ld d, a @@ -321,11 +321,11 @@ UpdateChannels: ; e8125 add hl, bc bit NOTE_REST, [hl] ; rest jr nz, .ch2rest - bit NOTE_UNKN_4, [hl] + bit NOTE_NOISE_SAMPLING, [hl] jr nz, .asm_e8204 - bit NOTE_UNKN_6, [hl] + bit NOTE_VIBRATO_OVERRIDE, [hl] jr nz, .asm_e81e6 - bit NOTE_UNKN_0, [hl] + bit NOTE_DUTY_OVERRIDE, [hl] ret z ld a, [wCurTrackDuty] ld d, a @@ -381,9 +381,9 @@ UpdateChannels: ; e8125 add hl, bc bit NOTE_REST, [hl] ; rest jr nz, .ch3rest - bit NOTE_UNKN_4, [hl] + bit NOTE_NOISE_SAMPLING, [hl] jr nz, .asm_e824d - bit NOTE_UNKN_6, [hl] + bit NOTE_VIBRATO_OVERRIDE, [hl] jr nz, .asm_e823a ret @@ -482,7 +482,7 @@ endr add hl, bc bit NOTE_REST, [hl] ; rest jr nz, .ch4rest - bit NOTE_UNKN_4, [hl] + bit NOTE_NOISE_SAMPLING, [hl] jr nz, .asm_e82d4 ret @@ -853,7 +853,7 @@ HandleTrackVibrato: ; e8466 ld [wCurTrackDuty], a ld hl, Channel1NoteFlags - Channel1 add hl, bc - set NOTE_UNKN_0, [hl] + set NOTE_DUTY_OVERRIDE, [hl] .next ld hl, Channel1Flags2 - Channel1 add hl, bc @@ -930,9 +930,9 @@ HandleTrackVibrato: ; e8466 ld d, a ld a, e sub d - jr nc, .asm_e84ef + jr nc, .no_carry ld a, 0 - jr .asm_e84ef + jr .no_carry .down ; vibrato up @@ -943,14 +943,14 @@ HandleTrackVibrato: ; e8466 swap a ; move it to lo ; add e - jr nc, .asm_e84ef + jr nc, .no_carry ld a, $ff -.asm_e84ef +.no_carry ld [wCurTrackFrequency], a ; ld hl, Channel1NoteFlags - Channel1 add hl, bc - set NOTE_UNKN_6, [hl] + set NOTE_VIBRATO_OVERRIDE, [hl] .quit ret @@ -1067,8 +1067,8 @@ ApplyPitchWheel: ; e84f9 ld [hl], d ld hl, Channel1NoteFlags - Channel1 add hl, bc - set NOTE_UNKN_1, [hl] - set NOTE_UNKN_0, [hl] + set NOTE_FREQ_OVERRIDE, [hl] + set NOTE_DUTY_OVERRIDE, [hl] ret ; e858c @@ -1145,7 +1145,7 @@ ReadNoiseSample: ; e85af ld hl, Channel1NoteFlags - Channel1 add hl, bc - set NOTE_UNKN_4, [hl] + set NOTE_NOISE_SAMPLING, [hl] ret .quit @@ -1206,7 +1206,7 @@ ParseMusic: ; e85e1 ; ???? ld hl, Channel1NoteFlags - Channel1 add hl, bc - set NOTE_UNKN_4, [hl] + set NOTE_NOISE_SAMPLING, [hl] jp LoadNote .rest @@ -1288,7 +1288,7 @@ ParseSFXOrRest: ; e8698 ; turn noise sampling on ld hl, Channel1NoteFlags - Channel1 add hl, bc - set NOTE_UNKN_4, [hl] ; noise sample + set NOTE_NOISE_SAMPLING, [hl] ; noise sample ; update note duration ld a, [CurMusicByte] call SetNoteDuration ; top nybble doesnt matter? diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm index b34ffe67d..bc50e3db2 100755 --- a/constants/audio_constants.asm +++ b/constants/audio_constants.asm @@ -55,9 +55,9 @@ SOUND_VIBRATO_DIR EQU 0 SOUND_PITCH_WHEEL_DIR EQU 1 ; NoteFlags -NOTE_UNKN_0 EQU 0 -NOTE_UNKN_1 EQU 1 +NOTE_DUTY_OVERRIDE EQU 0 +NOTE_FREQ_OVERRIDE EQU 1 NOTE_UNKN_3 EQU 3 -NOTE_UNKN_4 EQU 4 +NOTE_NOISE_SAMPLING EQU 4 NOTE_REST EQU 5 -NOTE_UNKN_6 EQU 6 +NOTE_VIBRATO_OVERRIDE EQU 6 diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm index 541934b83..8ebc4a708 100644 --- a/constants/sprite_constants.asm +++ b/constants/sprite_constants.asm @@ -311,30 +311,30 @@ MAX_OUTDOOR_SPRITES EQU 23 const PERSON_ACTION_0C const PERSON_ACTION_0D const PERSON_ACTION_0E - const PERSON_ACTION_0F + const PERSON_ACTION_GRASS_SHAKE const PERSON_ACTION_10 const_def - const FACING_00 - const FACING_01 - const FACING_02 - const FACING_03 - const FACING_04 - const FACING_05 - const FACING_06 - const FACING_07 - const FACING_08 - const FACING_09 - const FACING_0A - const FACING_0B - const FACING_0C - const FACING_0D - const FACING_0E - const FACING_0F - const FACING_10 - const FACING_11 - const FACING_12 - const FACING_13 + const FACING_STEP_DOWN_0 + const FACING_STEP_DOWN_1 + const FACING_STEP_DOWN_2 + const FACING_STEP_DOWN_3 + const FACING_STEP_UP_0 + const FACING_STEP_UP_1 + const FACING_STEP_UP_2 + const FACING_STEP_UP_3 + const FACING_STEP_LEFT_0 + const FACING_STEP_LEFT_1 + const FACING_STEP_LEFT_2 + const FACING_STEP_LEFT_3 + const FACING_STEP_RIGHT_0 + const FACING_STEP_RIGHT_1 + const FACING_STEP_RIGHT_2 + const FACING_STEP_RIGHT_3 + const FACING_FISH_DOWN + const FACING_FISH_UP + const FACING_FISH_LEFT + const FACING_FISH_RIGHT const FACING_EMOTE const FACING_15 const FACING_16 @@ -345,8 +345,8 @@ MAX_OUTDOOR_SPRITES EQU 23 const FACING_1B const FACING_1C const FACING_1D - const FACING_1E - const FACING_1F + const FACING_GRASS_1 + const FACING_GRASS_2 const_def const SPRITEANIMSTRUCT_INDEX ; 0 diff --git a/data/map_objects.asm b/data/map_objects.asm index e940d8118..7468b18e3 100755 --- a/data/map_objects.asm +++ b/data/map_objects.asm @@ -3,42 +3,42 @@ sprite_movement_data: macro dn \6, 0 endm - ; function, facing, action, flags1, flags2, palette flags - sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 00 - sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 01 - sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 02 - sprite_movement_data SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 03 - sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 04 - sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_X, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 05 - sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 06 - sprite_movement_data SPRITEMOVEFN_STANDING, UP, PERSON_ACTION_STAND, $00, $00, %0000 ; 07 - sprite_movement_data SPRITEMOVEFN_STANDING, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 08 - sprite_movement_data SPRITEMOVEFN_STANDING, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 09 - sprite_movement_data SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0a - sprite_movement_data SPRITEMOVEFN_OBEY_DPAD, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 0b - sprite_movement_data SPRITEMOVEFN_08, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0c - sprite_movement_data SPRITEMOVEFN_09, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0d - sprite_movement_data SPRITEMOVEFN_0A, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0e - sprite_movement_data SPRITEMOVEFN_0B, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0f - sprite_movement_data SPRITEMOVEFN_0C, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 10 - sprite_movement_data SPRITEMOVEFN_0D, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 11 - sprite_movement_data SPRITEMOVEFN_0E, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 12 - sprite_movement_data SPRITEMOVEFN_FOLLOW, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 13 - sprite_movement_data SPRITEMOVEFN_SCRIPTED, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 14 - sprite_movement_data SPRITEMOVEFN_BIG_SNORLAX, DOWN, PERSON_ACTION_09, $2e, $01, %1100 ; 15 - sprite_movement_data SPRITEMOVEFN_BOUNCE, DOWN, PERSON_ACTION_0A, $2e, $00, %0000 ; 16 - sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 17 - sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $2e, $10, %0000 ; 18 - sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_STAND, $2e, $00, %0100 ; 19 - sprite_movement_data SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 1a - sprite_movement_data SPRITEMOVEFN_SHADOW, DOWN, PERSON_ACTION_00, $8e, $01, %0000 ; 1b - sprite_movement_data SPRITEMOVEFN_EMOTE, DOWN, PERSON_ACTION_EMOTE, $8e, $02, %0000 ; 1c - sprite_movement_data SPRITEMOVEFN_SCREENSHAKE, DOWN, PERSON_ACTION_00, $82, $00, %0000 ; 1d - sprite_movement_data SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1e - sprite_movement_data SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1f - sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0C, $2e, $01, %1100 ; 20 - sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0D, $2e, $01, %1100 ; 21 - sprite_movement_data SPRITEMOVEFN_BOULDERDUST, DOWN, PERSON_ACTION_0E, $8e, $01, %0000 ; 22 - sprite_movement_data SPRITEMOVEFN_GRASS, DOWN, PERSON_ACTION_0F, $8e, $02, %0000 ; 23 - sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0010 ; 24 - sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 25 \ No newline at end of file + ; function, facing, action, flags1, flags2, palette flags + sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 00 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 01 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 02 + sprite_movement_data SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 03 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 04 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_X, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 05 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 06 + sprite_movement_data SPRITEMOVEFN_STANDING, UP, PERSON_ACTION_STAND, $00, $00, %0000 ; 07 + sprite_movement_data SPRITEMOVEFN_STANDING, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 08 + sprite_movement_data SPRITEMOVEFN_STANDING, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 09 + sprite_movement_data SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0a + sprite_movement_data SPRITEMOVEFN_OBEY_DPAD, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 0b + sprite_movement_data SPRITEMOVEFN_08, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0c + sprite_movement_data SPRITEMOVEFN_09, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0d + sprite_movement_data SPRITEMOVEFN_0A, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0e + sprite_movement_data SPRITEMOVEFN_0B, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0f + sprite_movement_data SPRITEMOVEFN_0C, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 10 + sprite_movement_data SPRITEMOVEFN_0D, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 11 + sprite_movement_data SPRITEMOVEFN_0E, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 12 + sprite_movement_data SPRITEMOVEFN_FOLLOW, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 13 + sprite_movement_data SPRITEMOVEFN_SCRIPTED, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 14 + sprite_movement_data SPRITEMOVEFN_BIG_SNORLAX, DOWN, PERSON_ACTION_09, $2e, $01, %1100 ; 15 + sprite_movement_data SPRITEMOVEFN_BOUNCE, DOWN, PERSON_ACTION_0A, $2e, $00, %0000 ; 16 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 17 + sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $2e, $10, %0000 ; 18 + sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_STAND, $2e, $00, %0100 ; 19 + sprite_movement_data SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 1a + sprite_movement_data SPRITEMOVEFN_SHADOW, DOWN, PERSON_ACTION_00, $8e, $01, %0000 ; 1b + sprite_movement_data SPRITEMOVEFN_EMOTE, DOWN, PERSON_ACTION_EMOTE, $8e, $02, %0000 ; 1c + sprite_movement_data SPRITEMOVEFN_SCREENSHAKE, DOWN, PERSON_ACTION_00, $82, $00, %0000 ; 1d + sprite_movement_data SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1e + sprite_movement_data SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1f + sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0C, $2e, $01, %1100 ; 20 + sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0D, $2e, $01, %1100 ; 21 + sprite_movement_data SPRITEMOVEFN_BOULDERDUST, DOWN, PERSON_ACTION_0E, $8e, $01, %0000 ; 22 + sprite_movement_data SPRITEMOVEFN_GRASS, DOWN, PERSON_ACTION_GRASS_SHAKE, $8e, $02, %0000 ; 23 + sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0010 ; 24 + sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 25 diff --git a/engine/facings.asm b/engine/facings.asm index f807e77f8..68a1e1f23 100644 --- a/engine/facings.asm +++ b/engine/facings.asm @@ -1,25 +1,25 @@ Facings: ; 4049 - dw Facing00 - dw Facing01 - dw Facing02 - dw Facing03 - dw Facing04 - dw Facing05 - dw Facing06 - dw Facing07 - dw Facing08 - dw Facing09 - dw Facing10 - dw Facing11 - dw Facing12 - dw Facing13 - dw Facing14 - dw Facing15 - dw Facing16 - dw Facing17 - dw Facing18 - dw Facing19 - dw Facing20 + dw FacingStepDown0 + dw FacingStepDown1 + dw FacingStepDown2 + dw FacingStepDown3 + dw FacingStepUp0 + dw FacingStepUp1 + dw FacingStepUp2 + dw FacingStepUp3 + dw FacingStepLeft0 + dw FacingStepLeft1 + dw FacingStepLeft2 + dw FacingStepLeft3 + dw FacingStepRight0 + dw FacingStepRight1 + dw FacingStepRight2 + dw FacingStepRight3 + dw FacingFishDown + dw FacingFishUp + dw FacingFishLeft + dw FacingFishRight + dw FacingEmote dw Facing21 dw Facing22 dw Facing23 @@ -29,8 +29,8 @@ Facings: ; 4049 dw Facing27 dw Facing28 dw Facing29 - dw Facing30 - dw Facing31 + dw FacingGrass1 + dw FacingGrass2 FacingsEnd: dw 0 NUM_FACINGS EQU (FacingsEnd - Facings) / 2 @@ -47,8 +47,8 @@ Y_FLIP EQU 1 << OAM_Y_FLIP BEHIND_BG EQU 1 << OAM_PRIORITY -Facing00: -Facing02: +FacingStepDown0: +FacingStepDown2: Facing24: Facing26: ; standing down db 4 ; # @@ -58,7 +58,7 @@ Facing26: ; standing down db 8, 8, 2, $03 ; 409c -Facing01: ; walking down 1 +FacingStepDown1: ; walking down 1 db 4 ; # db 0, 0, 0, $80 db 0, 8, 0, $81 @@ -66,7 +66,7 @@ Facing01: ; walking down 1 db 8, 8, 2, $83 ; 40ad -Facing03: ; walking down 2 +FacingStepDown3: ; walking down 2 db 4 ; # db 0, 8, X_FLIP, $80 db 0, 0, X_FLIP, $81 @@ -74,8 +74,8 @@ Facing03: ; walking down 2 db 8, 0, 2 | X_FLIP, $83 ; 40be -Facing04: -Facing06: ; standing up +FacingStepUp0: +FacingStepUp2: ; standing up db 4 ; # db 0, 0, 0, $04 db 0, 8, 0, $05 @@ -83,7 +83,7 @@ Facing06: ; standing up db 8, 8, 2, $07 ; 40cf -Facing05: ; walking up 1 +FacingStepUp1: ; walking up 1 db 4 ; # db 0, 0, 0, $84 db 0, 8, 0, $85 @@ -91,7 +91,7 @@ Facing05: ; walking up 1 db 8, 8, 2, $87 ; 40e0 -Facing07: ; walking up 2 +FacingStepUp3: ; walking up 2 db 4 ; # db 0, 8, X_FLIP, $84 db 0, 0, X_FLIP, $85 @@ -99,8 +99,8 @@ Facing07: ; walking up 2 db 8, 0, 2 | X_FLIP, $87 ; 40f1 -Facing08: -Facing10: ; standing left +FacingStepLeft0: +FacingStepLeft2: ; standing left db 4 ; # db 0, 0, 0, $08 db 0, 8, 0, $09 @@ -108,8 +108,8 @@ Facing10: ; standing left db 8, 8, 2, $0b ; 4102 -Facing12: -Facing14: ; standing right +FacingStepRight0: +FacingStepRight2: ; standing right db 4 ; # db 0, 8, X_FLIP, $08 db 0, 0, X_FLIP, $09 @@ -117,8 +117,8 @@ Facing14: ; standing right db 8, 0, 2 | X_FLIP, $0b ; 4113 -Facing09: -Facing11: ; walking left +FacingStepLeft1: +FacingStepLeft3: ; walking left db 4 ; # db 0, 0, 0, $88 db 0, 8, 0, $89 @@ -126,8 +126,8 @@ Facing11: ; walking left db 8, 8, 2, $8b ; 4124 -Facing13: -Facing15: ; walking right +FacingStepRight1: +FacingStepRight3: ; walking right db 4 ; # db 0, 8, X_FLIP, $88 db 0, 0, X_FLIP, $89 @@ -135,7 +135,7 @@ Facing15: ; walking right db 8, 0, 2 | X_FLIP, $8b ; 4135 -Facing16: ; fishing down +FacingFishDown: ; fishing down db 5 ; # db 0, 0, 0, $00 db 0, 8, 0, $01 @@ -144,7 +144,7 @@ Facing16: ; fishing down db 16, 0, 4, $fc ; 414a -Facing17: ; fishing up +FacingFishUp: ; fishing up db 5 ; # db 0, 0, 0, $04 db 0, 8, 0, $05 @@ -153,7 +153,7 @@ Facing17: ; fishing up db -8, 0, 4, $fc ; 415f -Facing18: ; fishing left +FacingFishLeft: ; fishing left db 5 ; # db 0, 0, 0, $08 db 0, 8, 0, $09 @@ -162,7 +162,7 @@ Facing18: ; fishing left db 5, -8, 4 | X_FLIP, $fd ; 4174 -Facing19: ; fishing right +FacingFishRight: ; fishing right db 5 ; # db 0, 8, X_FLIP, $08 db 0, 0, X_FLIP, $09 @@ -171,7 +171,7 @@ Facing19: ; fishing right db 5, 16, 4, $fd ; 4189 -Facing20: ; emote +FacingEmote: ; emote db 4 ; # db 0, 0, 4, $f8 db 0, 8, 4, $f9 @@ -255,13 +255,13 @@ Facing29: ; boulder dust 2 db 8, 8, 4, $ff ; 4261 -Facing30: ; 4261 +FacingGrass1: ; 4261 db 2 ; # db 8, 0, 4, $fe db 8, 8, 4 | X_FLIP, $fe ; 426a -Facing31: ; 426a +FacingGrass2: ; 426a db 2 ; # db 9, -1, 4, $fe db 9, 9, 4 | X_FLIP, $fe diff --git a/engine/map_object_action.asm b/engine/map_object_action.asm index 59e0ef7de..4795151ae 100755 --- a/engine/map_object_action.asm +++ b/engine/map_object_action.asm @@ -14,23 +14,23 @@ ; 445f Pointers445f: ; 445f - dw SetFacingStanding, SetFacingStanding ; 00 - dw Function44b5, SetFacingCurrent ; 01 standing? - dw Function44c1, SetFacingCurrent ; 02 walking? - dw Function4508, SetFacingCurrent ; 03 bumping? - dw Function4529, SetFacingCurrent ; 04 - dw Function4539, SetFacingStanding ; 05 - dw Function456e, Function456e ; 06 - dw Function457b, SetFacingStanding ; 07 - dw Function4582, Function4582 ; 08 - dw Function4589, Function4589 ; 09 - dw Function4590, Function45a4 ; 0a - dw Function45ab, SetFacingCurrent ; 0c - dw Function45be, Function45be ; 0b - dw Function45c5, Function45c5 ; 0d - dw Function45da, SetFacingStanding ; 0e - dw Function45ed, SetFacingStanding ; 0f - dw Function44e4, SetFacingCurrent ; 10 + dw SetFacingStanding, SetFacingStanding ; 00 + dw SetFacingStandAction, SetFacingCurrent ; 01 standing? + dw SetFacingStepAction, SetFacingCurrent ; 02 walking? + dw SetFacingBumpAction, SetFacingCurrent ; 03 bumping? + dw SetFacingCounterclockwiseSpin, SetFacingCurrent ; 04 + dw SetFacingCounterclockwiseSpin2, SetFacingStanding ; 05 + dw SetFacingFish, SetFacingFish ; 06 + dw Function457b, SetFacingStanding ; 07 + dw Function4582, Function4582 ; 08 + dw Function4589, Function4589 ; 09 + dw Function4590, Function45a4 ; 0a + dw Function45ab, SetFacingCurrent ; 0c + dw Function45be, Function45be ; 0b + dw Function45c5, Function45c5 ; 0d + dw Function45da, SetFacingStanding ; 0e + dw SetFacingGrassShake, SetFacingStanding ; 0f + dw Function44e4, SetFacingCurrent ; 10 ; 44a3 SetFacingStanding: ; 44a3 @@ -49,16 +49,16 @@ SetFacingCurrent: ; 44aa ret ; 44b5 -Function44b5: ; 44b5 +SetFacingStandAction: ; 44b5 ld hl, OBJECT_FACING_STEP add hl, bc ld a, [hl] and 1 - jr nz, Function44c1 + jr nz, SetFacingStepAction jp SetFacingCurrent ; 44c1 -Function44c1: ; 44c1 +SetFacingStepAction: ; 44c1 ld hl, OBJECT_FLAGS1 add hl, bc bit SLIDING, [hl] @@ -112,7 +112,7 @@ Function44e4: ; 44e4 ret ; 4508 -Function4508: ; 4508 +SetFacingBumpAction: ; 4508 ld hl, OBJECT_FLAGS1 add hl, bc bit SLIDING, [hl] @@ -138,8 +138,8 @@ Function4508: ; 4508 ret ; 4529 -Function4529: ; 4529 - call Function453f +SetFacingCounterclockwiseSpin: ; 4529 + call CounterclockwiseSpinAction ld hl, OBJECT_FACING add hl, bc ld a, [hl] @@ -150,12 +150,16 @@ Function4529: ; 4529 ret ; 4539 -Function4539: ; 4539 - call Function453f +SetFacingCounterclockwiseSpin2: ; 4539 + call CounterclockwiseSpinAction jp SetFacingStanding ; 453f -Function453f: ; 453f +CounterclockwiseSpinAction: ; 453f +; Here, OBJECT_STEP_FRAME consists of two 2-bit components, +; using only bits 0,1 and 4,5. +; bits 0,1 is a timer (4 overworld frames) +; bits 4,5 determines the facing - the direction is counterclockwise. ld hl, OBJECT_STEP_FRAME add hl, bc ld a, [hl] @@ -195,11 +199,11 @@ Function453f: ; 453f db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT ; 456e -Function456e: ; 456e +SetFacingFish: ; 456e call GetSpriteDirection rrca rrca - add $10 + add FACING_FISH_DOWN ld hl, OBJECT_FACING_STEP add hl, bc ld [hl], a @@ -238,7 +242,7 @@ Function4590: ; 4590 jr z, Function45a4 ld hl, OBJECT_FACING_STEP add hl, bc - ld [hl], FACING_04 + ld [hl], FACING_STEP_UP_0 ret ; 45a4 @@ -305,7 +309,7 @@ Function45da: ; 45da ret ; 45ed -Function45ed: ; 45ed +SetFacingGrassShake: ; 45ed ld hl, OBJECT_STEP_FRAME add hl, bc inc [hl] @@ -313,9 +317,9 @@ Function45ed: ; 45ed ld hl, OBJECT_FACING_STEP add hl, bc and 4 - ld a, FACING_1E + ld a, FACING_GRASS_1 jr z, .ok - inc a ; FACING_1F + inc a ; FACING_GRASS_2 .ok ld [hl], a diff --git a/engine/map_objects.asm b/engine/map_objects.asm index 58c30c8fb..949eab968 100644 --- a/engine/map_objects.asm +++ b/engine/map_objects.asm @@ -965,7 +965,7 @@ MapObjectMovementPattern: ; 47dd call ._MovementShadow_Grass_Emote_BoulderDust ld hl, OBJECT_ACTION add hl, bc - ld [hl], PERSON_ACTION_0F + ld [hl], PERSON_ACTION_GRASS_SHAKE ld hl, OBJECT_STEP_DURATION add hl, de ld a, [hl] diff --git a/gfx/credits/ditto.png b/gfx/credits/ditto.png index 17a1191b0c6552c049c2f03d3160cc1580d91b18..6f5b8ed57df1f7f3831c47ffe48debffe2b203cd 100644 GIT binary patch literal 405 zcmV;G0c!qb>!3;<~ZUfi|%L!l)(GO+R~&00000NkvXXu0mjf5CN`C literal 377 zcmV-<0fzpGP)aBB8Qo3vR$!s5!zGD`q_7B&!4pR=9eF zz3cxohM)^>g*C0kEq(mgX8LTGdkp%-+BWd<&o z)<~yf1{(e4UGN^LN7~#1C8=(2;};wi{=u}VD2M&yv*2`zj1H-?s$kF>qk^wGLmCrc z9Pldg8-tQIdy^2;98zO3Pv%bZ!w#tV9%`-^zyu3_3YbrM)Owu+428nSTHroV zaCZ^3G%gI^Xi}Fycb6g?eHRH)--W{krJ|R&<2JA9`dO{vw^O%$U-ekZf7!|d6ifDR XcL%}NH;X&c00000NkvXXu0mjfYu}=( diff --git a/gfx/credits/igglybuff.png b/gfx/credits/igglybuff.png index 3a6d00194f345a1880b179fe85c7911e1209bb91..03776bac3753be8a024b94aa7bd8c999c56b2835 100644 GIT binary patch literal 527 zcmV+q0`UEbP)4$#5QW!A4#GAGA=`&Q;82-5#pSA?YFVTrWttG*ueb|d2-g@~7`)Zq1{>Y`b@>UI zc_Xbac2r3pBk9eXSH*ex(>BFe$u2Aj+yl@MbVof03|sUHLYbDQJPcg6lf{QII!QsgL@dPcIZm=(1IoY zQUDG5lAwzGZ2{g9)Y!oc+5qb5M|^Swc|(DdKDxk#0jaDN)VQL=7~JR;xCNb3#miQe z`Wt%r=!e%HC_ekqiJnDs=0|`H>bW0&ZolLMPxDcloAXh?oDbkhK4y^f0seoMj{@?h zTs;GAn)d&ISifu{^C64*SX(~ci*st`Sw7Na91!{c z)ElsXh(QnEEJ3c%;Ld<^`)ttg!xD7(mBD>7fR%l+lZh#CY(>B;_q(aeCTde0gMim= z6tH3?!4;>y+Gw<7wxigg(muD94f`PO(=kr4(mdis5Hfh@EMqY)4S3G9tiPy8pBiUE Rf0Y0L002ovPDHLkV1hP$_Nf2> literal 482 zcmV<80UiE{P)WHT4_Lf5j+%{QyOX6eoyBkI6FHF z{evJ{DEvs%?9A7%ol;*Ne%rpHSOwU`^##S;tpuiRT>ub}1JiJ2I}TT91EdU#dW=f2 ztOW(?8Y{tiEHDkB=RDpM_qC6SaVLTm;ld+Blb~S`wtRl-fw5o&eof?bgwtihN+*03 zl!?2PkIKBOo0=*jRpc>^@(7~{(wi+hrH0@yG435NDyNeo144$^fMjTEjjnjoQHuwK zd13fb%|el20txB{x3rHQx&aAh;U4PgrshL;H~uU+f}ht5KT7=JIH)$&2@`>(#)N!E z{rnI4{IfqhgCUNp{ZaTWv_A?1+2?o2JbZr!yfH8D`{P>ePupsL80p@qxog9OWpbKo z6OQ^*MA-Dle561EiqD}+8%0xX)cj3>VF2;Sk|D5&#oksL)aFsKeAJ-oXT{oupeEb^ z!5MuX;GCL(ncQO=j)y$voUZ>mcMDs=6@|bhO*wrK|7gQF;V{#x-{qZyCX_a!?C-|% Y4R%YP8b%rPS^xk507*qoM6N<$f~uX_-2eap diff --git a/gfx/credits/smoochum.png b/gfx/credits/smoochum.png index 415bac2685b4ffe4d3e12b1dc9b8b4827b8384d2..ac6d85ad78c815f64780229093647f5ee7cc5c44 100644 GIT binary patch literal 428 zcmV;d0aN~oP)@zc> zQAim`ljS&$?`Dtx|87-0E}s!WM@5g?GjQ9Co5UbA&JciYhD~Om!1A1HTB_iQfa^8V zNVn6U^lo^fKxlZ&L%Hb477tm|m-4)vmtbT98wShaa!4TL>HF0l%<+YaHbSObjN{qv zg#noEO~@RTA~G1&)>bVJVnSk2DVJ2upsoZsR0`=SR;zY>0JInc6AS~tLEP$-g}$vq00002I#}UC@hNVc;(3ZbLLa4zd(R&! zm3D83hI_-uNeJhB{8W8f3V$60V(Sfqa+dZw!gdRWDh0TfkAlm(mI`nsWB{iT{651j zA-H{ZyG)g~qYA3@d&Ak_ijMBeRS%D1UY5(!8HDwCJ!Y7{UK|l>Tf2-KUN-%!NbgJ< zYpV`IrF>Eiy$ni0V!%ZZb^v?*wXu4-I6O(uI3j~LF$px4K(*;MGP{W~`=8VDc6rj` z6Kk=gh2TM38=mRG&Erj1Y;-qlqk`;!L`4UXxm8b|2sA+8DG~`egKVPX%XZSSeEFWg zGcDiYKR-X_=Ql)MALs8ZYBXMtSk$UqiKtIwvq5iomMCX#Us#kUQEa32sSq1VNk0@M zX%&~G1^bcwEDoF>vc%D<(c4s}&_SlC+TtWi2b}!_q10VFrJlSx00000NkvXXu0mjf DY>2Yx diff --git a/gfx/misc/badges.png b/gfx/misc/badges.png index 4e5820da8e54dce2a6789c999c826570a326e57d..e3a8da4eb8cedb814a75893b165446e7a2a43a19 100644 GIT binary patch literal 557 zcmV+|0@D47P)NklH}~HMubx(APV~w77`Np zl2;+l)zWll?b1D1-_GoOo}C2&WPdv?ah9^9p&cfFG+2|TJKIQ?uqRJT+bI-$y;}C1 zq6N->B06d?h*HqGL*jnqgN6NY@DXRAa|#Dt!?0K~=Wa1!OEY>7`s;V&A(0=`|{H6j*9qqBVW7Us%A(2exC>F6Jf|ZYaymL?C z)Wd1A_1?x?7uG6?iitAYaWE%!BlLG+#0otYEBMktDqf5pJ~WX1s;_%6eH@3i?o}|l zMr&BRJ_23zhPB3F08c||28IS!==s=j7=iY;WIun8)CGOVUQ8qG7t`B*9L^!)(B};} z&uLh3xZwiWVI1lC@avcXfIO+s(f|hbN&WZPLY%3jySZ(H4(dAQ z^aka7@iHIE#!7g9t>ExZdI)6xAUb#q52T+-gMKCkwMtJut2`Rma{*m-0Tuoa+QV@1 v^!>`CfvYsUdR0H4{i+`oElxwO?g)&G;1svG zaEc~AO1Xt0Wd^x#OO#Tejf3z9$Wzlro-|yrq~U?3CgFPMq04(8u;aZB^6Q~n2JeO6 zhHMRGr79f4VL-@l2y7`)h}5BAL1rOtz=T+q(7*aXhv?uk?Q!s|$_x^)l@?5q-_IAw z<9Gqaqvc!GYhR>%zeuoNDAgrFW=`poY(>&IB77Vta&ts9r`nLQ%GhRr+HW%LOhv_M3%L|VB9@Lee)aBiiI8xs~0DX{lMK71VEX!p^(IG`kEp>=` zaaA){)6l@@0`TAj_*u+~4m=4W-I`? z=a(R0cDQRMcgg}$}`4R`CMDF=85j8XdQD7++ zK1-GyHTeYik3gC%z&G&8u()X8FTG4?rI%L(bHx!b!3#1W{Qd?^PhhAakMNQCkYT3~ zGC%p&GQ=FwW~qSFR8BpDCn ziA_Q`+Ug+WdIesLZ9)wKh?=6~EfV{tVcx5?I;dKuezhd*+utz1-(evG4j)aKbR zILOB|9#!`=NkC`40&Fv#_A=qQ>pb5-1vc-%xC3Xs0j2)L7(aSpJ7|qR`c#+-;E1+? zdg4+DFmwZg9p=<-Pk@sOqS~fEJ28Qf*`ALp+cx{f1b|=aF|a1e)t`}eY}C|8VC>bQ z3BbFUa{fO!g9e8L<`b?BIe2M38mf>C^dkma2!_Pc;6Vj&HqNl+j7 literal 770 zcmV+d1O5DoP)_^sBPQaKPaI;|G3xLB9&#zr_ z^|p{MR7LZ-@oVA7=NRt3NQgR8+YCl{<0a#dTg z0fr;+hM^d-c90qbm>uq$614aRfD74x)^cqSkS-F?5Gu)GwG3BIZ@_5*F&Nof0u25w zo?@7d+*eGB3>Ns5EEZx(7M~SZTZe#29B>&nbNZOuWt-J~NKf0wSr{ zp$P#>SQkRfJ5QyB8?F!yyKG*j;1--FRniOvhX(-SCxCuo$DS>~#jIUs<-pWwfiVyO z>(4rL;dOrdV*ima-&MQLsA`pbnJU-|Tzh>2nBP)A0+=w&s29Kps<;8XFMV|pkrSvC zRNEAP2@(>4o}5-jyv7jE3!>`_3)jcEq=_9+^&f;HF;*dTw@W})mXpK>K=udEthfeb zJ)Y+W0Q@r_pu`Wm`2!1aQ3!dC_u|23p*SOlz6UY0Kj<-zdDO4k-URCvyNQ}Tma*jh z4S)uX83J_GD?tATU_83)B8Jli>vM!&u=rJnr8WNO-6QjHVl0>&+rmQgZzrI3$~_?5 z(p#YYRJ7TE1w8>$Hvqj`Oxb^LhK$NaxI@x(!J+~W8RT68|Iq3F0>zj%RTW_L4*&oF07*qoM6N<$f}sph AqyPW_ diff --git a/gfx/misc/font_inversed.png b/gfx/misc/font_inversed.png index 519339f39d7e75e5cde08e64bad0a59745badf45..d34c58d16fc824664fedeb545a74cda35ceac4e1 100644 GIT binary patch literal 742 zcmVXf=qXhUBvop9j; z5dsGojxjW)6cGFZaOj~FkU)6y7}O?#&9s3>N}(=uN%2oLgtEIY3fE{t*=|J^V73-y zjm@FDJketTV^GZj)=EG<8YsX6TncW^1t}kcTFU-Wpfz|1w7_&sIwK{6 z@C)FJKpt6uZs3c;o6uVe;8DtEexO*G-3dUy*i>x=;QxkM zpAX<+0JuL&z#d|{KX`l$_4nMKKw;^Pf_|vzGCQtWQEVf+f$SfeSz&qM?L1RIW!Xn*iq*(At=g$ke##AHkP=wm#x z@>g>syYyFUF{@O4*NGFb02Qy`rEzRgms`>ng9R*07*qoM6N<$f{4INVE_OC literal 736 zcmV<60w4W}P)@VU((}^muYHiBjbB8mFK0oHbl~ z^y%i}>RSB_QFk-VDZy8Zh@(lgP&3yABwn&7;J|2%p=1%WGq`ZZ83)7^5PSe|=%JjI z9=UrlqzL!$91qUsA$!Wn00yxvT)-+eTZvuN|(@xEnU+S^=BTR<|Mx zU}%CrbVrx6lyo7$>`+}MVfqOG5wQScNART_ug(bT!T0Gk0i7_GMi804G0 z=uii3FH-4bSb@_`D++W;E8e$q9~fT{E3wBZrFkl!_pBS3ZiwjUV{uIizmGOY2V77r${sX{Y zu~}O8PdbQxW1#w@zwrPPOuuBH{S{TluKk*s#WJC909hY2qv9Hn`M94q0LW)Nz!UPT z78(vm?tW#3A~_|y+qDkvM?2~(#y)h%Q5N>fPf>i+l zg0db54fj#>9?1mU2LH%_bIz?%#$&lkWYSXyCIaV2X%7)q`hZWi6?cHXzbs_Ok><~3 z*xzd>=qg0;VlBZN;GDEWc0M=(78M1ZdFqU>#?IpJtHN**cEEcrc#8`51JH93^%7qK zK-z*2#?jyrGNAAQ&~aVx=%SsIfvS-l)l*VQ{Z}TgE8SmK@T~-98}O|gx_zOyBIwqTFOn@;J|&%Ye*Q3_>9l!b>wN06+#UW{;5g77 zN2KfJI0C(2&bM?uxhu>8^7{cmFt6tSE`6~B@W|KYrUwSSnXmKz0n4%pEN^3RK>+B! z5SG^~EZZa9OxJLJMDO!9(oIoUq^nzgUJKp8Pq5d|f9W$iXchEjdIhs|x~?euE|vMl z@7VPI0lfG8L{Bux*G{$q;T}M~LjZE^GF=q$3P5GTd>1l{;rR;HKkcyr(P0?^D0iMO zoPL1-+NZW6?}*|O2gpEc9AX#Y~$V0WtVmK?11i%t}2@s$L z(37`Xt3cuNrjLi{!?JEgkmMxXBhyI%_=EGyZdXa|19^a#K_>xUywB7?*Fo@^!hyz4mS+NpjB1Fpb{iF|`Pm2D0b=faq zmTM8+-Su`rcrF0^Y5`7`sbM{Q&@GAO5dgX-MI!(@6@XM%go3`X@c#;c@LYVM+{moV zW?jURz4G}1NH8I0UTDN}V9Y)*_(WGK)9d+ku+hjBmt6J>6@V&=Wz*L|0v2mbhG!9_ zig)3Q5j6G-0)T1x1psRcB*!k%NJuyM3_^gr1%NmPh@!rRXx>J#*aF}fV7Es23IHtS zaZDsfo*bps5~5=mh`>;Q6Yfc6!3Lo!s&XAUoV-4kXn5gW+WhAC-VgO;2 ztJrh{aGy7p9O0z?E^$)z;l0`TJaU|rTm zL(!Zk$g2e)l}$y4#L@um6O3DnwKnP=b0~8zF=)}Dwf!o2LjVo)PJo{=fNW>I1z6|2 zcHfi}j%-LpwX*=$Us@+g_`3kBgI@DmfE)@B0o>EoMF&d{k;qe8q2yTR?i8IF<3VQI z*9Moi#?IyFS4z2}$i0(NS6jUhyD2(jV{A}=Hvw2~3N{LGMP+!4;oIO}!1Rg7sjl}% zrU9Tl%6kT2tL5>+Je`{8T8}B&oNUQ2zXZ^Fij+Vm_wOzsWg_%4j?6>ODJH=*1r!7T z4_v1JO;lX%(dE1dULjtY@Lm)$l?7n2KJtHd6kQ1aCje2R+sd}vKLns?O$szamg4p2 zoOoV-VY&JIT_R1>!mp{^7#db(thJyNC}w6V6cZ1}gM9cp1`vXE`Xz4vAPo$|w15q5 zRk@o0Tvfc)aJG?sE(OfWBYK})Kognk5@+=lS(y|cT*ER2m=&hANX7nuEiR6!{ME6t zxVl`Bu&c~DM7Z`i!5aWf0oe!uAXo955GFWfHpd0Gc~BMHecEF_$I)6_F_UaDy<96*2Xh zB(NA$`K$QQMYG?DG+u@;lDUik_#Vi$lbOt40n{CgIe^4Ya{wz<9YDxMhj|691Ks1>-0B&lX zDfN$r0J-;E*qQ}zgR;*vyh8;zavdE^e^nK0DF78KbGJ(X76K6e?@Z^%n2LQs_rV@06%>HzFY2lg z#@eXmkeQ93n<(s&b697`3vH#FWQm`&4J$T%A1CHEnk-vlCW;lvV<+DjhKXhYXxbz> z?BVK9@{P?tDdi^s`UC8nk`(|>0CvYQg9Gg2q&&Egf{ri%AmJc@GiGp)0YIijsq`rT z7J%&X-Q$5(_rul^JX!!OO$u&W3wWv<^(Cuh7BI3C`}UphwxZx2NM8(0N~yO znEpvS@nE;W01u27K*x$IfKb!KnYto*q#nSAy`e69_@>s((+{u57(iUx{!X%a(O=Ny z!=BwZ$uQptrZjd1FpGs&EcL?*0BeA%IkAd4$JDUY@}Oy%ig#A)Y$G(f$^ScnsQ4KB zx}m6XX`P3Xg|4;$ZI);S$%V#0cq}>M{_l5G=B<9krnmBiY=w^_Lh)E(-gg%HZvf1+ zT#1)n+Z(kJ@zVYZdBfvqx z;CAk_F1s%w-}?Lon_S#EPYi}l{x9c}Y*6aWh|#YBq{90a0BqwNN}S3qz^tCA*7|D1 z&dw*jUCmpqFW7%657uzFuc`bgz?AnPk6f9qhqHAyxC2K2Apj)0Gl2Un zBitGs&5?X8BCHRXRVr39$mC4t7mUdFbEnqS$0l3BI`MY780TQp8?pc@JZ;u?0-VWg z9IELa8-ZE+^oId-_5k}q#w!{Lfb$WxMqtOu{LNe%|KFKZ)|%|0)O~6Xq@E~7W;pC5 zjhWFhWqS4!ph~nu-;6nqGKSp)ggTUK2cYfzF4HG8<5W}vvH? z06*B{pHlfUZ#+s)B~uYLavxJZi~(FI0RCM7Z$>F#DfvR>`ox&nnn5r%=k~`iHh18( zPl_$#Gzb9A*ocivG>Qww7J}{Oi0>l+T^aT(v_vXh&rD^irO{AZTQh~)8n%~C9p&Nu5@Wgbf;%cjl!#Z1a!!Wk0s5PSN2Qz%6x4fPa!fh08o0&%I@`4Q9-mqc<_OuE`hF(0HTkG|)sh z$r8Cd6beAQLZ*iRWD~U>$JVL2%^6x6RRGqw$j?pw!Y^>lBz*;`>d!hLTRYiCU!o8w z1Ly#-0ywPpwo8@X;SeBsB$K@;Te1aq&uroizcp&plDNq!6Y{Ra(}sN>W=yZH6lv}F zu>$x)ect1meV_m=hFdVAvWbP6%0F8fsqCD}2ta-e_YRvriV@)`!Khgk)ZOw)bIz7S zBxfj2*W7T%$nYHe3>B~kuxUWP$`dcIFf8-vY+|fEvjGTsWCq6oVO*q5sW0g%6DW-k zxUC0pgHDIW30$p80ML#Qb+fp5%cfv|EDL`!t9ax#5jX3%tvhdnY7ri;!T+4z+Hd9j zNk0Uve&5@k))&wN`Sj(QL%jUMSa2BRT;#PD-O%-9!F2WLx6kcaX{7B2%c%f+YE-mm z|2yyI1nK6Hv?+Ce3YG1k^BtSq&#|TRMJLjEm;U?*{ec()>9de-00000NkvXXu0mjf D`~<&r literal 3012 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 literal 356 zcmV-q0h|7bP)-=R zZQ6)0z(x@DBhEHuE^HU^$@|M1Lj$LX-aazFS~&p;a##%Ma8!G=%|?KBSRVVuTEJ&dlNq_bn^LsG;ND6N+$D;|tvu4Q5~dOxiZ zJ%|T0Ft_5NM1pz%{&f!nhTqE-0&_u>&E-A7gOQuZKx;$~M&1KF7&!q6`9Jf}E*_f2 zL$i3$4R|NIT_bi=_u|OB*S$c3z6YRsI1p`r