diff options
137 files changed, 15385 insertions, 16028 deletions
diff --git a/asmdiff_de.sh b/asmdiff_de.sh index aa42daa5e..31673d136 100755 --- a/asmdiff_de.sh +++ b/asmdiff_de.sh @@ -4,4 +4,4 @@ OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" $OBJDUMP $OPTIONS baserom_de.gba > baserom_de.dump $OBJDUMP $OPTIONS pokeruby_de.gba > pokeruby_de.dump -diff baserom_de.dump pokeruby_de.dump +diff -u baserom_de.dump pokeruby_de.dump diff --git a/data-de/contest_opponents.inc b/data-de/contest_opponents.inc deleted file mode 100644 index 1bdf7027e..000000000 --- a/data-de/contest_opponents.inc +++ /dev/null @@ -1,663 +0,0 @@ - .align 2 -gContestOpponents:: @ 83C9408 - .2byte 286 @ SPECIES_ID - .string "FIFFI$", 11 @ POKE_NICKNAME - .string "JIMMY$", 8 @ TRAINER_NAME - .byte 7 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x0c000fff @ FLAGS - .2byte 68 @ RANK - .2byte MOVE_ROAR, MOVE_BITE, MOVE_TAKE_DOWN, MOVE_HOWL - .byte 10, 4, 10, 3, 4, 50 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 288 @ SPECIES_ID - .string "ZIGGY$", 11 @ POKE_NICKNAME - .string "KLARA$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 16 @ RANK - .2byte MOVE_REST, MOVE_TAIL_WHIP, MOVE_TACKLE, MOVE_COVET - .byte 10, 10, 6, 1, 2, 60 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 294 @ SPECIES_ID - .string "DOXU$", 11 @ POKE_NICKNAME - .string "KARLO$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x21000fff @ FLAGS - .2byte 8 @ RANK - .2byte MOVE_SILVER_WIND, MOVE_MOONLIGHT, MOVE_LIGHT_SCREEN, MOVE_GUST - .byte 2, 10, 10, 12, 4, 70 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 298 @ SPECIES_ID - .string "SAMINI$", 11 @ POKE_NICKNAME - .string "TRUDI$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x20800fff @ FLAGS - .2byte 96 @ RANK - .2byte MOVE_BIDE, MOVE_SYNTHESIS, MOVE_BULLET_SEED, MOVE_GROWTH - .byte 3, 3, 5, 2, 7, 80 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 304 @ SPECIES_ID - .string "SCHWALBI$", 11 @ POKE_NICKNAME - .string "HELENA$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80400fff @ FLAGS - .2byte 4 @ RANK - .2byte MOVE_WING_ATTACK, MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_GROWL - .byte 1, 3, 3, 5, 4, 90 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 301 @ SPECIES_ID - .string "CADINJA$", 11 @ POKE_NICKNAME - .string "WILLI$", 8 @ TRAINER_NAME - .byte 44 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x10200fff @ FLAGS - .2byte 32 @ RANK - .2byte MOVE_LEECH_LIFE, MOVE_FALSE_SWIPE, MOVE_FURY_SWIPES, MOVE_MIND_READER - .byte 5, 2, 10, 7, 8, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 306 @ SPECIES_ID - .string "KNILZLI$", 11 @ POKE_NICKNAME - .string "HARTMUT$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x20100fff @ FLAGS - .2byte 32 @ RANK - .2byte MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_ATTRACT - .byte 3, 3, 10, 2, 2, 50 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 309 @ SPECIES_ID - .string "WINGI$", 11 @ POKE_NICKNAME - .string "CLAUDIA$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08080fff @ FLAGS - .2byte 24 @ RANK - .2byte MOVE_MIST, MOVE_WATER_GUN, MOVE_GROWL, MOVE_PURSUIT - .byte 3, 5, 1, 10, 10, 60 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 364 @ SPECIES_ID - .string "BLUMPI$", 11 @ POKE_NICKNAME - .string "ALEC$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x40040fff @ FLAGS - .2byte 88 @ RANK - .2byte MOVE_STRENGTH, MOVE_COUNTER, MOVE_YAWN, MOVE_ENCORE - .byte 10, 4, 4, 5, 18, 70 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 370 @ SPECIES_ID - .string "FLURMI$", 11 @ POKE_NICKNAME - .string "SILKE$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 36 @ RANK - .2byte MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_HYPER_VOICE - .byte 2, 2, 7, 2, 7, 80 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 335 @ SPECIES_ID - .string "MAHITA$", 11 @ POKE_NICKNAME - .string "PEER$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08010fff @ FLAGS - .2byte 68 @ RANK - .2byte MOVE_SEISMIC_TOSS, MOVE_VITAL_THROW, MOVE_TACKLE, MOVE_REVERSAL - .byte 9, 1, 1, 8, 1, 90 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 382 @ SPECIES_ID - .string "STOLLI$", 11 @ POKE_NICKNAME - .string "MARIA$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08008fff @ FLAGS - .2byte 68 @ RANK - .2byte MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_HEADBUTT, MOVE_TAKE_DOWN - .byte 5, 10, 2, 10, 2, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 41 @ SPECIES_ID - .string "BLUTBAT$", 11 @ POKE_NICKNAME - .string "RUDOLF$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x90004fff @ FLAGS - .2byte 56 @ RANK - .2byte MOVE_HAZE, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_LEECH_LIFE - .byte 4, 2, 2, 2, 10, 50 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 367 @ SPECIES_ID - .string "SCHLUPPI$", 11 @ POKE_NICKNAME - .string "MELANIE$", 8 @ TRAINER_NAME - .byte 6 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x40002fff @ FLAGS - .2byte 16 @ RANK - .2byte MOVE_SLUDGE, MOVE_AMNESIA, MOVE_TOXIC, MOVE_YAWN - .byte 1, 10, 1, 10, 5, 60 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 337 @ SPECIES_ID - .string "FRIZZZEL$", 11 @ POKE_NICKNAME - .string "BERTRAM$", 8 @ TRAINER_NAME - .byte 15 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80001fff @ FLAGS - .2byte 12 @ RANK - .2byte MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_ROAR - .byte 20, 10, 1, 1, 1, 70 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 363 @ SPECIES_ID - .string "ROSALI$", 11 @ POKE_NICKNAME - .string "KARINA$", 8 @ TRAINER_NAME - .byte 32 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x24000fff @ FLAGS - .2byte 41 @ RANK - .2byte MOVE_PETAL_DANCE, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_INGRAIN - .byte 50, 15, 75, 10, 20, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 84 @ SPECIES_ID - .string "DOLDI$", 11 @ POKE_NICKNAME - .string "BOBBY$", 8 @ TRAINER_NAME - .byte 51 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 125 @ RANK - .2byte MOVE_PECK, MOVE_FURY_ATTACK, MOVE_RETURN, MOVE_GROWL - .byte 15, 21, 15, 85, 35, 110 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 332 @ SPECIES_ID - .string "KNACKI$", 11 @ POKE_NICKNAME - .string "JUDITH$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x81000fff @ FLAGS - .2byte 113 @ RANK - .2byte MOVE_BITE, MOVE_SAND_ATTACK, MOVE_DIG, MOVE_FAINT_ATTACK - .byte 75, 25, 25, 10, 25, 120 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 344 @ SPECIES_ID - .string "KOTUS$", 11 @ POKE_NICKNAME - .string "HELMUT$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80800fff @ FLAGS - .2byte 37 @ RANK - .2byte MOVE_SPIKES, MOVE_LEER, MOVE_POISON_STING, MOVE_SAND_ATTACK - .byte 10, 30, 25, 65, 25, 130 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 27 @ SPECIES_ID - .string "SADAN$", 11 @ POKE_NICKNAME - .string "BRITTA$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x10400fff @ FLAGS - .2byte 69 @ RANK - .2byte MOVE_SLASH, MOVE_DEFENSE_CURL, MOVE_SWIFT, MOVE_FURY_SWIPES - .byte 30, 90, 30, 10, 100, 140 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 318 @ SPECIES_ID - .string "PUPPIBAL$", 11 @ POKE_NICKNAME - .string "TORBEN$", 8 @ TRAINER_NAME - .byte 44 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08200fff @ FLAGS - .2byte 41 @ RANK - .2byte MOVE_SELF_DESTRUCT, MOVE_ROCK_TOMB, MOVE_PSYBEAM, MOVE_CONFUSION - .byte 50, 40, 10, 35, 35, 150 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 339 @ SPECIES_ID - .string "CLAMAUK$", 11 @ POKE_NICKNAME - .string "BIANKA$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x10100fff @ FLAGS - .2byte 77 @ RANK - .2byte MOVE_MAGNITUDE, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY, MOVE_FLAMETHROWER - .byte 40, 5, 40, 40, 40, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 308 @ SPECIES_ID - .string "SPIRRWIRR$", 11 @ POKE_NICKNAME - .string "ALEX$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80080fff @ FLAGS - .2byte 49 @ RANK - .2byte MOVE_TEETER_DANCE, MOVE_PSYCH_UP, MOVE_HYPNOSIS, MOVE_UPROAR - .byte 25, 75, 25, 10, 25, 110 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 358 @ SPECIES_ID - .string "BLUPPF$", 11 @ POKE_NICKNAME - .string "SABINE$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0xa0040fff @ FLAGS - .2byte 41 @ RANK - .2byte MOVE_MIRROR_MOVE, MOVE_PERISH_SONG, MOVE_SAFEGUARD, MOVE_MIST - .byte 30, 30, 40, 30, 25, 120 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 289 @ SPECIES_ID - .string "DAKSIRAD$", 11 @ POKE_NICKNAME - .string "AUGUST$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 25 @ RANK - .2byte MOVE_GROWL, MOVE_COVET, MOVE_SAND_ATTACK, MOVE_REST - .byte 40, 40, 30, 10, 30, 130 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 317 @ SPECIES_ID - .string "KECLI$", 11 @ POKE_NICKNAME - .string "ARIANA$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80010fff @ FLAGS - .2byte 97 @ RANK - .2byte MOVE_THIEF, MOVE_SCREECH, MOVE_ANCIENT_POWER, MOVE_BIND - .byte 10, 10, 40, 75, 35, 140 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 118 @ SPECIES_ID - .string "GOLDINCHEN$", 11 @ POKE_NICKNAME - .string "TONI$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80008fff @ FLAGS - .2byte 13 @ RANK - .2byte MOVE_HORN_ATTACK, MOVE_FURY_ATTACK, MOVE_HORN_DRILL, MOVE_TAIL_WHIP - .byte 70, 30, 5, 30, 25, 150 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 323 @ SPECIES_ID - .string "SCHMERBSE$", 11 @ POKE_NICKNAME - .string "SUSI$", 8 @ TRAINER_NAME - .byte 6 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80004fff @ FLAGS - .2byte 113 @ RANK - .2byte MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_EARTHQUAKE, MOVE_FUTURE_SIGHT - .byte 45, 45, 60, 25, 15, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 227 @ SPECIES_ID - .string "KREBSILI$", 11 @ POKE_NICKNAME - .string "CLEMENS$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08002fff @ FLAGS - .2byte 77 @ RANK - .2byte MOVE_SWIFT, MOVE_DOUBLE_TEAM, MOVE_AGILITY, MOVE_CUT - .byte 40, 30, 25, 60, 20, 110 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 295 @ SPECIES_ID - .string "URLOTZO$", 11 @ POKE_NICKNAME - .string "KATRIN$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08001fff @ FLAGS - .2byte 57 @ RANK - .2byte MOVE_ASTONISH, MOVE_GROWL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE - .byte 15, 15, 30, 15, 75, 120 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 383 @ SPECIES_ID - .string "STROLLAK$", 11 @ POKE_NICKNAME - .string "ACHIM$", 8 @ TRAINER_NAME - .byte 55 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x84000fff @ FLAGS - .2byte 98 @ RANK - .2byte MOVE_METAL_SOUND, MOVE_METAL_CLAW, MOVE_HARDEN, MOVE_TAKE_DOWN - .byte 30, 50, 35, 100, 90, 200 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 299 @ SPECIES_ID - .string "BLASNI$", 11 @ POKE_NICKNAME - .string "GABI$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 14 @ RANK - .2byte MOVE_GROWTH, MOVE_RAZOR_WIND, MOVE_EXPLOSION, MOVE_EXTRASENSORY - .byte 75, 75, 65, 35, 70, 210 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 302 @ SPECIES_ID - .string "ASKINJA$", 11 @ POKE_NICKNAME - .string "ROLF$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x81000fff @ FLAGS - .2byte 114 @ RANK - .2byte MOVE_SCREECH, MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS - .byte 30, 50, 95, 70, 70, 220 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 305 @ SPECIES_ID - .string "SCHWALLO$", 11 @ POKE_NICKNAME - .string "ELSE$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80800fff @ FLAGS - .2byte 14 @ RANK - .2byte MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_WING_ATTACK, MOVE_FLY - .byte 65, 85, 35, 75, 40, 230 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 287 @ SPECIES_ID - .string "JÄNAGI$", 11 @ POKE_NICKNAME - .string "FRANK$", 8 @ TRAINER_NAME - .byte 44 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80400fff @ FLAGS - .2byte 98 @ RANK - .2byte MOVE_TAUNT, MOVE_THIEF, MOVE_ODOR_SLEUTH, MOVE_TAKE_DOWN - .byte 40, 80, 35, 70, 70, 240 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 292 @ SPECIES_ID - .string "PAPINILLI$", 11 @ POKE_NICKNAME - .string "ANNA$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80200fff @ FLAGS - .2byte 42 @ RANK - .2byte MOVE_MORNING_SUN, MOVE_SILVER_WIND, MOVE_STUN_SPORE, MOVE_SECRET_POWER - .byte 40, 70, 25, 80, 100, 250 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 119 @ SPECIES_ID - .string "KINGOLA$", 11 @ POKE_NICKNAME - .string "KONRAD$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80100fff @ FLAGS - .2byte 118 @ RANK - .2byte MOVE_FLAIL, MOVE_SUPERSONIC, MOVE_HORN_ATTACK, MOVE_FURY_ATTACK - .byte 80, 60, 30, 70, 90, 200 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 340 @ SPECIES_ID - .string "ERUPTAM$", 11 @ POKE_NICKNAME - .string "LUISE$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80080fff @ FLAGS - .2byte 78 @ RANK - .2byte MOVE_EARTHQUAKE, MOVE_FISSURE, MOVE_OVERHEAT, MOVE_HYPER_BEAM - .byte 100, 80, 20, 50, 65, 210 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 66 @ SPECIES_ID - .string "OLLOMA$", 11 @ POKE_NICKNAME - .string "MICHAEL$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80040fff @ FLAGS - .2byte 66 @ RANK - .2byte MOVE_SEISMIC_TOSS, MOVE_FOCUS_ENERGY, MOVE_KARATE_CHOP, MOVE_SCARY_FACE - .byte 70, 85, 25, 60, 50, 220 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 296 @ SPECIES_ID - .string "OMBRE$", 11 @ POKE_NICKNAME - .string "ANIKA$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 58 @ RANK - .2byte MOVE_ATTRACT, MOVE_FLASH, MOVE_UPROAR, MOVE_GROWL - .byte 40, 60, 90, 45, 70, 230 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 379 @ SPECIES_ID - .string "PITISVI$", 11 @ POKE_NICKNAME - .string "DETLEF$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80010fff @ FLAGS - .2byte 98 @ RANK - .2byte MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP, MOVE_SCREECH - .byte 35, 50, 90, 40, 100, 240 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 313 @ SPECIES_ID - .string "WAILA$", 11 @ POKE_NICKNAME - .string "XENIA$", 8 @ TRAINER_NAME - .byte 22 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80008fff @ FLAGS - .2byte 26 @ RANK - .2byte MOVE_WATER_PULSE, MOVE_REST, MOVE_WATER_SPOUT, MOVE_SPLASH - .byte 30, 100, 100, 50, 30, 250 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 129 @ SPECIES_ID - .string "KARDORPA$", 11 @ POKE_NICKNAME - .string "FLORIAN$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80004fff @ FLAGS - .2byte 82 @ RANK - .2byte MOVE_TACKLE, MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE - .byte 30, 30, 160, 50, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 348 @ SPECIES_ID - .string "LUNA$", 11 @ POKE_NICKNAME - .string "DIANA$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80002fff @ FLAGS - .2byte 42 @ RANK - .2byte MOVE_EXPLOSION, MOVE_FUTURE_SIGHT, MOVE_PSYCHIC, MOVE_CONFUSION - .byte 50, 70, 60, 70, 50, 210 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 310 @ SPECIES_ID - .string "PEPE$", 11 @ POKE_NICKNAME - .string "LUTZ$", 8 @ TRAINER_NAME - .byte 39 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80001fff @ FLAGS - .2byte 14 @ RANK - .2byte MOVE_MIST, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_WING_ATTACK - .byte 95, 80, 85, 35, 35, 220 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 130 @ SPECIES_ID - .string "GARADI$", 11 @ POKE_NICKNAME - .string "JASMIN$", 8 @ TRAINER_NAME - .byte 32 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x84000fff @ FLAGS - .2byte 79 @ RANK - .2byte MOVE_HYPER_BEAM, MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE - .byte 160, 200, 20, 40, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 371 @ SPECIES_ID - .string "KRAKEEL$", 11 @ POKE_NICKNAME - .string "GERT$", 8 @ TRAINER_NAME - .byte 21 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 71 @ RANK - .2byte MOVE_HYPER_VOICE, MOVE_STOMP, MOVE_ROAR, MOVE_HOWL - .byte 170, 50, 55, 150, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 316 @ SPECIES_ID - .string "ENEKOTO$", 11 @ POKE_NICKNAME - .string "ROSA$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x81000fff @ FLAGS - .2byte 59 @ RANK - .2byte MOVE_ATTRACT, MOVE_ASSIST, MOVE_FAINT_ATTACK, MOVE_TAIL_WHIP - .byte 40, 200, 150, 185, 60, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 366 @ SPECIES_ID - .string "ASSIMAX$", 11 @ POKE_NICKNAME - .string "KURT$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80800fff @ FLAGS - .2byte 115 @ RANK - .2byte MOVE_COVET, MOVE_COUNTER, MOVE_ENCORE, MOVE_SLACK_OFF - .byte 85, 85, 170, 110, 150, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 359 @ SPECIES_ID - .string "RIA$", 11 @ POKE_NICKNAME - .string "SONJA$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80400fff @ FLAGS - .2byte 15 @ RANK - .2byte MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_PERISH_SONG, MOVE_SAFEGUARD - .byte 170, 150, 30, 30, 90, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 393 @ SPECIES_ID - .string "EXUVINJA$", 11 @ POKE_NICKNAME - .string "SÖNKE$", 8 @ TRAINER_NAME - .byte 15 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80200fff @ FLAGS - .2byte 39 @ RANK - .2byte MOVE_SHOCK_WAVE, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, MOVE_RETURN - .byte 230, 60, 60, 230, 80, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 45 @ SPECIES_ID - .string "BLUMIEFT$", 11 @ POKE_NICKNAME - .string "MAGDA$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80100fff @ FLAGS - .2byte 59 @ RANK - .2byte MOVE_PETAL_DANCE, MOVE_SWEET_SCENT, MOVE_STUN_SPORE, MOVE_FLASH - .byte 35, 200, 150, 130, 40, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 361 @ SPECIES_ID - .string "WANDELBOLD$", 11 @ POKE_NICKNAME - .string "SASCHA$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80080fff @ FLAGS - .2byte 115 @ RANK - .2byte MOVE_DISABLE, MOVE_FUTURE_SIGHT, MOVE_NIGHT_SHADE, MOVE_PURSUIT - .byte 25, 35, 230, 150, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 178 @ SPECIES_ID - .string "TUMANI$", 11 @ POKE_NICKNAME - .string "MILA$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80040fff @ FLAGS - .2byte 115 @ RANK - .2byte MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_PSYCHIC - .byte 35, 35, 150, 130, 170, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 331 @ SPECIES_ID - .string "HAITODO$", 11 @ POKE_NICKNAME - .string "KNUT$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 87 @ RANK - .2byte MOVE_AGILITY, MOVE_SWAGGER, MOVE_TAUNT, MOVE_TAKE_DOWN - .byte 140, 70, 140, 75, 100, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 325 @ SPECIES_ID - .string "KUSSLIEB$", 11 @ POKE_NICKNAME - .string "INCA$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80010fff @ FLAGS - .2byte 83 @ RANK - .2byte MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_TAKE_DOWN, MOVE_CHARM - .byte 50, 100, 220, 40, 190, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 214 @ SPECIES_ID - .string "SKARAB$", 11 @ POKE_NICKNAME - .string "FELIX$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80008fff @ FLAGS - .2byte 71 @ RANK - .2byte MOVE_STRENGTH, MOVE_ENDURE, MOVE_REVERSAL, MOVE_ROCK_TOMB - .byte 170, 70, 110, 240, 140, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 101 @ SPECIES_ID - .string "LEKBAL$", 11 @ POKE_NICKNAME - .string "DEBORA$", 8 @ TRAINER_NAME - .byte 6 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80004fff @ FLAGS - .2byte 15 @ RANK - .2byte MOVE_EXPLOSION, MOVE_LIGHT_SCREEN, MOVE_SWIFT, MOVE_FLASH - .byte 200, 200, 30, 35, 50, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 172 @ SPECIES_ID - .string "DEIBEL$", 11 @ POKE_NICKNAME - .string "BORIS$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80002fff @ FLAGS - .2byte 59 @ RANK - .2byte MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_REST, MOVE_TAIL_WHIP - .byte 25, 150, 180, 115, 120, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 202 @ SPECIES_ID - .string "WOHINGENAU$", 11 @ POKE_NICKNAME - .string "DELIA$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80001fff @ FLAGS - .2byte 111 @ RANK - .2byte MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND - .byte 60, 230, 50, 220, 210, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - -@ credit to Valkyrie for helping me properly dump these structs diff --git a/data-de/ingame_trades.inc b/data-de/ingame_trades.inc deleted file mode 100644 index 76ce38c03..000000000 --- a/data-de/ingame_trades.inc +++ /dev/null @@ -1,108 +0,0 @@ - .align 2 -gIngameTrades:: @ 8215AC4 - .string "MAKIT$", 11 @ nickname - .space 1 - .2byte SPECIES_MAKUHITA @ NPC mon species - .byte 5 @ HP IV - .byte 5 @ attack IV - .byte 4 @ defense IV - .byte 4 @ speed IV - .byte 4 @ sp. attack IV - .byte 4 @ sp. defense IV - .byte TRUE @ second ability - .space 3 - .4byte 49562 @ OT ID - .byte 5 @ cool - .byte 5 @ beauty - .byte 5 @ cute - .byte 5 @ smart - .byte 30 @ tough - .space 3 - .4byte 0x9C40 @ personality value - .2byte ITEM_X_ATTACK @ held item - .byte -1 @ mail num - .string "MAIK$", 11 @ OT name - .byte MALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_SLAKOTH @ player mon species - .space 2 - - .string "CONEC$", 11 @ nickname - .space 1 - .2byte SPECIES_SKITTY @ NPC mon species - .byte 5 @ HP IV - .byte 4 @ attack IV - .byte 4 @ defense IV - .byte 5 @ speed IV - .byte 4 @ sp. attack IV - .byte 4 @ sp. defense IV - .byte FALSE @ second ability - .space 3 - .4byte 2259 @ OT ID - .byte 5 @ cool - .byte 5 @ beauty - .byte 30 @ cute - .byte 5 @ smart - .byte 5 @ tough - .space 3 - .4byte 0x498A2E17 @ personality value - .2byte ITEM_GLITTER_MAIL @ held item - .byte 0 @ mail num - .string "MADINA$", 11 @ OT name - .byte FEMALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_PIKACHU @ player mon species - .space 2 - - .string "CORASO$", 11 @ nickname - .space 1 - .2byte SPECIES_CORSOLA @ NPC mon species - .byte 4 @ HP IV - .byte 4 @ attack IV - .byte 5 @ defense IV - .byte 4 @ speed IV - .byte 4 @ sp. attack IV - .byte 5 @ sp. defense IV - .byte TRUE @ second ability - .space 3 - .4byte 50183 @ OT ID - .byte 5 @ cool - .byte 30 @ beauty - .byte 5 @ cute - .byte 5 @ smart - .byte 5 @ tough - .space 3 - .4byte 0x4C970B7F @ personality value - .2byte ITEM_TROPIC_MAIL @ held item - .byte 1 @ mail num - .string "LIANA$", 11 @ OT name - .byte FEMALE @ OT gender - .byte 10 @ sheen - .2byte SPECIES_BELLOSSOM @ player mon species - .space 2 - - .align 1 -gIngameTradeMail:: @ 8215B78 -@ 0 - ec_pokemon1 PIKACHU - ec_word THANK_YOU - ec_word EXCL - ec_word MY - ec_pokemon1 SKITTY - ec_word EATS - .2byte 0xFFFF - ec_word A_LOT - ec_word EXCL - .2byte 0 - -@ 1 - ec_word I - ec_word WANT - ec_word OF - ec_move2 PETAL_DANCE - ec_word WORKS - ec_word THE - ec_word IS - ec_word SO - ec_word PRETTY - .2byte 0 diff --git a/data-de/text/contest_strings.inc b/data-de/text/contest_strings.inc deleted file mode 100644 index 0067f78e3..000000000 --- a/data-de/text/contest_strings.inc +++ /dev/null @@ -1,843 +0,0 @@ -ContestString_DescHighlyAppealing: @ 83CA4EC - .string "Eine sehr ansprechende\n" - .string "Vorführung.$" -ContestString_DescStartled1: @ 83CA505 - .string "Einsatz der Attacke macht\n" - .string "PKMN leichter irritierbar.$" -ContestString_DescGreatLock: @ 83CA538 - .string "Großartiger Ausdruck, der\n" - .string "sich nicht steigern lässt.$" -ContestString_DescRepeatable: @ 83CA56D - .string "Langweilt den JUROR auch\n" - .string "bei Wiederholung nicht.$" -ContestString_DescStartled2: @ 83CA59E - .string "Kann Irritation durch\n" - .string "andere einmal verhindern.$" -ContestString_DescStartled3: @ 83CA5C7 - .string "Kann Irritation durch\n" - .string "andere verhindern.$" -ContestString_DescStartled4: @ 83CA5EB - .string "Kann Irritation durch an-\n" - .string "dere ein wenig eindämmen.$" -ContestString_DescStartled5: @ 83CA618 - .string "Einsatz der Attacke dämmt\n" - .string "danach Irritation ein.$" -ContestString_DescStartled6: @ 83CA651 - .string "Irritiert das vordere\n" - .string "POKéMON ein wenig.$" -ContestString_DescStartled7: @ 83CA679 - .string "Irritiert die POKéMON ein\n" - .string "wenig, die schon auftraten.$" -ContestString_DescStartled8: @ 83CA6A9 - .string "Irritiert das POKéMON, das\n" - .string "vorher aufgetreten ist.$" -ContestString_DescStartled9: @ 83CA6DD - .string "Irritiert alle POKéMON,\n" - .string "die bisher auftraten.$" -ContestString_DescStartled10: @ 83CA710 - .string "Irritiert das vordere\n" - .string "POKéMON sehr stark.$" -ContestString_DescStartled11: @ 83CA735 - .string "Irritiert die POKéMON, die\n" - .string "schon aufgetreten sind.$" -ContestString_DescStartled12: @ 83CA762 - .string "Irritiert das POKéMON, das\n" - .string "vorher aufgetreten ist.$" -ContestString_DescStartled13: @ 83CA796 - .string "Irritiert alle POKéMON, die\n" - .string "vorher aufgetreten sind.$" -ContestString_DescAttentionShift: @ 83CA7CA - .string "Lenkt den JUROR von den\n" - .string "anderen POKéMON ab.$" -ContestString_DescStartled14: @ 83CA7F4 - .string "Irritiert PKMN, bes. die,\n" - .string "auf die der JUROR achtet.$" -ContestString_DescJamOthersMissTurn: @ 83CA829 - .string "Stört die anderen und An-\n" - .string "wender setzt 1 Runde aus.$" -ContestString_DescStartled15: @ 83CA85A - .string "Irritiert PKMN, bes. die, die\n" - .string "Ausdruck gl. Typs zeigten.$" -ContestString_DescStartled16: @ 83CA889 - .string "Irritiert PKMN, die Ausdrck.\n" - .string "des Typs COOL vorführten.$" -ContestString_DescStartled17: @ 83CA8B8 - .string "Irritiert PKMN, die Ausdrck.\n" - .string "des Typs SCHÖN vorführten.$" -ContestString_DescStartled18: @ 83CA8E9 - .string "Irritiert PKMN, die Ausdrck.\n" - .string "des Typs ANMUT vorführten.$" -ContestString_DescStartled19: @ 83CA918 - .string "Irritiert PKMN, die Ausdrck.\n" - .string "des Typs KLUG vorführten.$" -ContestString_DescStartled20: @ 83CA948 - .string "Irritiert PKMN, die Ausdrck.\n" - .string "des Typs STARK vorführten.$" - -ContestString_DescNervousOne: @ 83CA978 - .string "Macht nachfolgendes\n" - .string "POKéMON nervös.$" - -ContestString_DescNervousAllAfter: @ 83CA9A2 - .string "Macht alle nachfolgenden\n" - .string "POKéMON nervös.$" - -ContestString_DescConditionWorseBefore: @ 83CA9CC - .string "Schwächt Kondition der\n" - .string "PKMN, die bisher auftraten.$" - -ContestString_DescStartled21: @ 83CA9FE - .string "Irritiert POKéMON, die eine\n" - .string "gute Kondition haben.$" -ContestString_DescGreatWhenFirst: @ 83CAA28 - .string "Ausdruck gelingt sehr gut,\n" - .string "wenn als Erster vorgeführt.$" -ContestString_DescGreatWhenLast: @ 83CAA53 - .string "Ausdruck gelingt sehr gut,\n" - .string "wenn zuletzt vorgeführt.$" -ContestString_DescAppealGoodBeforeAll: @ 83CAA7D - .string "Ausdruck gelingt so gut\n" - .string "wie die der Vorgänger.$" -ContestString_DescAppealGoodBeforeOne: @ 83CAAAA - .string "Ausdruck gelingt so gut\n" - .string "wie der des Vorgängers.$" -ContestString_DescBetterWhenLater: @ 83CAAD9 - .string "Je später der Auftritt,\n" - .string "desto besser der Ausdruck.$" -ContestString_DescAffectedByTiming: @ 83CAB0C - .string "Die Qualität des Ausdrucks\n" - .string "hängt vom Timing ab.$" -ContestString_DescBetterWhenSameType: @ 83CAB41 - .string "Gelingt gut, wenn vom\n" - .string "selben Typ wie der vorige.$" -ContestString_DescBetterWhenDiffType: @ 83CAB75 - .string "Gelingt gut, wenn vom\n" - .string "anderen Typ als der vorige.$" -ContestString_DescAffectedByFront: @ 83CABAA - .string "Hängt von Qualität des Aus-\n" - .string "drucks des Vorgängers ab.$" -ContestString_DescConditionUp: @ 83CABD9 - .string "Verbessert die Kondition\n" - .string "und verhindert Nervosität.$" -ContestString_DescAffectedByCondition: @ 83CAC0E - .string "Ausdruck gelingt gut, wenn\n" - .string "Kondition des PKMN gut ist.$" -ContestString_DescAppealEarlier: @ 83CAC45 - .string "Der nächste Ausdruck kann\n" - .string "früher vorgeführt werden.$" -ContestString_DescAppealLater: @ 83CAC74 - .string "Der nächste Ausdruck kann\n" - .string "später vorgeführt werden.$" -ContestString_DescRandomOrderEasier: @ 83CACA1 - .string "Ändert die Reihenfolge der\n" - .string "nächst. Auftritte leichter.$" -ContestString_DescRandomOrder: @ 83CACD4 - .string "Ändert die Reihenfolge der\n" - .string "nächsten Auftritte.$" -ContestString_DescAnyExcitement: @ 83CAD05 - .string "Verzückt das Publikum in \n" - .string "jedem WETTBEWERB.$" -ContestString_DescStartled22: @ 83CAD39 - .string "Irritiert alle POKéMON,\n" - .string "deren Ausdruck gut war.$" -ContestString_DescScaleWithExcitement: @ 83CAD6C - .string "Gelingt am besten, wenn\n" - .string "das Publikum gespannt ist.$" -ContestString_DescStopExcitement: @ 83CADA1 - .string "Bremst zeitweise Begeis-\n" - .string "terung des Publikums.$" - - .align 2 -gContestEffectStrings:: @ 83CADD4 - .4byte ContestString_DescHighlyAppealing - .4byte ContestString_DescStartled1 - .4byte ContestString_DescGreatLock - .4byte ContestString_DescRepeatable - .4byte ContestString_DescStartled2 - .4byte ContestString_DescStartled3 - .4byte ContestString_DescStartled4 - .4byte ContestString_DescStartled5 - .4byte ContestString_DescStartled6 - .4byte ContestString_DescStartled7 - .4byte ContestString_DescStartled8 - .4byte ContestString_DescStartled9 - .4byte ContestString_DescStartled10 - .4byte ContestString_DescStartled11 - .4byte ContestString_DescStartled12 - .4byte ContestString_DescStartled13 - .4byte ContestString_DescAttentionShift - .4byte ContestString_DescStartled14 - .4byte ContestString_DescJamOthersMissTurn - .4byte ContestString_DescStartled15 - .4byte ContestString_DescStartled16 - .4byte ContestString_DescStartled17 - .4byte ContestString_DescStartled18 - .4byte ContestString_DescStartled19 - .4byte ContestString_DescStartled20 - .4byte ContestString_DescNervousOne - .4byte ContestString_DescNervousAllAfter - .4byte ContestString_DescConditionWorseBefore - .4byte ContestString_DescStartled21 - .4byte ContestString_DescGreatWhenFirst - .4byte ContestString_DescGreatWhenLast - .4byte ContestString_DescAppealGoodBeforeAll - .4byte ContestString_DescAppealGoodBeforeOne - .4byte ContestString_DescBetterWhenLater - .4byte ContestString_DescAffectedByTiming - .4byte ContestString_DescBetterWhenSameType - .4byte ContestString_DescBetterWhenDiffType - .4byte ContestString_DescAffectedByFront - .4byte ContestString_DescConditionUp - .4byte ContestString_DescAffectedByCondition - .4byte ContestString_DescAppealEarlier - .4byte ContestString_DescAppealLater - .4byte ContestString_DescRandomOrderEasier - .4byte ContestString_DescRandomOrder - .4byte ContestString_DescAnyExcitement - .4byte ContestString_DescStartled22 - .4byte ContestString_DescScaleWithExcitement - .4byte ContestString_DescStopExcitement - -ContestString_MoveRainDance: @ 83CAE94 - .string "REGENTANZ$" -ContestString_MoveRage: @ 83CAE9F - .string "RASEREI$" -ContestString_MoveFocusEnergy: @ 83CAEA4 - .string "ENERGIEFOKUS$" -ContestString_MoveHypnosis: @ 83CAEB1 - .string "HYPNOSE$" -ContestString_MoveSoftboiled: @ 83CAEBA - .string "WEICHEI$" -ContestString_MoveHornAttack: @ 83CAEC5 - .string "HORNATTACKE$" -ContestString_MoveSwordsDance: @ 83CAED1 - .string "SCHWERTTANZ$" -ContestString_MoveConversion: @ 83CAEDE - .string "UMWANDLUNG$" -ContestString_MoveSunnyDay: @ 83CAEE9 - .string "SONNENTAG$" -ContestString_MoveRest: @ 83CAEF3 - .string "ERHOLUNG$" -ContestString_MoveVicegrip: @ 83CAEF8 - .string "KLAMMER$" -ContestString_MoveDefenseCurl: @ 83CAF01 - .string "EINIGLER$" -ContestString_MoveLockOn: @ 83CAF0E - .string "ZIELSCHUSS$" - - .align 2 - .4byte ContestString_MoveRainDance - .4byte ContestString_MoveRainDance - .4byte ContestString_MoveRage - .4byte ContestString_MoveFocusEnergy - .4byte ContestString_MoveHypnosis - .4byte ContestString_MoveSoftboiled - .4byte ContestString_MoveHornAttack - .4byte ContestString_MoveSwordsDance - .4byte ContestString_MoveConversion - .4byte ContestString_MoveSunnyDay - .4byte ContestString_MoveRest - .4byte ContestString_MoveVicegrip - .4byte ContestString_MoveDefenseCurl - .4byte ContestString_MoveLockOn - -ContestString_Cool: - .string "COOL.$" -ContestString_Beauty: - .string "SCHÖN.$" -ContestString_Cute: - .string "ANMUT$" -ContestString_Smart: - .string "KLUG.$" -ContestString_Tough: - .string "STÄRKE$" - - .align 2 -gContestCategoryNames:: @ 83CAF70 - .4byte ContestString_Cool - .4byte ContestString_Beauty - .4byte ContestString_Cute - .4byte ContestString_Smart - .4byte ContestString_Tough - -gText_Contest_WhichMoveWillBePlayed:: @ 83CAF84 - .string "Ausdruck {NAME_END}! Welche\n" - .string "Attacke wird gezeigt?$" - -gText_Contest_ButItCantParticipate:: @ 83CAFAE - .string "Ausdruck {NAME_END}! Aber es\n" - .string "kann nicht teilnehmen!$" - -gUnknown_083CAFD7:: @ 83CAFD7 - .string "{STR_VAR_1} führt\n" - .string "{STR_VAR_2} vor!$" - - .string "Die anderen POKéMON\n" - .string "zeigten ihre Attacken!$" - -gUnknown_083CB00D:: @ 83CB00D - .string "{STR_VAR_1} beobachtet\n" - .string "die anderen.{PAUSE 60}$" - -gUnknown_083CB02C:: @ 83CB02C - .string "Soweit zur\n" - .string "Ausdruckskraft!{PAUSE 60}$" - - .string "{STR_VAR_3}-\n" - .string "Att. {STR_VAR_2}\n" - .string "von {STR_VAR_1}!$" - - .string "TRICK$" - - .string "SPEZIAL$" - -ContestString_AppealJammed: - .string "Der Auftritt\n" - .string "wurde gestört.$" -ContestString_FollowLead: - .string "Es folgte einem\n" - .string "anderen POKéMON.$" -ContestString_MessedUp: - .string "Es scheiterte.$" -ContestString_BetterUsual: - .string "Das lief besser\n" - .string "als sonst.$" -ContestString_JudgeLookAway: - .string "Der JUROR war\n" - .string "irgendwie abgelenkt.$" -ContestString_WorkHard: - .string "Es strengte sich an,\n" - .string "Fehler auszubügeln.$" -ContestString_NoMoreMoves: - .string "Es kann keine Attacken\n" - .string "mehr ausführen.$" -ContestString_WorkReallyWell: - .string "Das lief unheimlich gut.$" -ContestString_WorkHardStandout: - .string "Es strengte sich genauso\n" - .string "wie das beste POKéMON an.$" -ContestString_JudgeExpectantly: - .string "Der JUROR schaute es\n" - .string "besonders aufmerksam an.$" -ContestString_WorkRatherWell: - .string "Das lief bedeutend\n" - .string "besser.$" -ContestString_WorkBetter: - .string "Es lief etwas besser\n" - .string "als sonst.$" - - .align 2 - .4byte ContestString_AppealJammed - .4byte ContestString_FollowLead - .4byte ContestString_MessedUp - .4byte ContestString_BetterUsual - .4byte ContestString_BetterUsual - .4byte ContestString_JudgeLookAway - .4byte ContestString_WorkHard - .4byte ContestString_NoMoreMoves - .4byte ContestString_WorkReallyWell - .4byte ContestString_WorkHardStandout - .4byte ContestString_JudgeExpectantly - .4byte ContestString_WorkRatherWell - .4byte ContestString_WorkBetter - -ContestString_StandOutNone: - .string "{STR_VAR_1} stach\n" - .string "überhaupt nicht hervor...{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutNotMuch: - .string "{STR_VAR_1} stach nicht\n" - .string "besonders hervor...{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutLittle: - .string "{STR_VAR_1} erregte ein\n" - .string "wenig Aufmerksamkeit.{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutLot: - .string "{STR_VAR_1} erregte eine\n" - .string "Menge Aufmerksamkeit.{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutTotal: - .string "{STR_VAR_1} erhielt die\n" - .string "volle Aufmerksamkeit.{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutDidnt: - .string "{STR_VAR_1} konnte\n" - .string "keinen Ausdruck zeigen.{PAUSE_UNTIL_PRESS}$" - - .align 2 -gContestStandOutStrings:: @ 83CB2F0 - .4byte ContestString_StandOutNone - .4byte ContestString_StandOutNotMuch - .4byte ContestString_StandOutLittle - .4byte ContestString_StandOutLot - .4byte ContestString_StandOutTotal - .4byte ContestString_StandOutDidnt - -ContestString_AppealAnticipation3: - .string "Heiß ersehnt: Der Aus-\n" - .string "druck von {STR_VAR_1}.$" -ContestString_JudgeSatisfied: - .string "Der JUROR war sehr\n" - .string "zufrieden.$" -ContestString_Terminator: - .string "$" -ContestString_JudgeHeldFirm: - .string "Der JUROR behält\n" - .string "{STR_VAR_1} fest im Blick.$" -ContestString_ChangedPerceptions: - .string "{STR_VAR_3} von {STR_VAR_1}\n" - .string "ändert die Wahrnehmung.$" -ContestString_AppealWoreOff: - .string "Wirkung von {STR_VAR_1}\n" - .string "lässt nach.$" -ContestString_AppealWoreOff2: - .string "Die besondere Wirkung\n" - .string "lässt nach.$" -ContestString_AppealLookSame: - .string "Jeder Ausdruck wird sich\n" - .string "nun gleichen.$" -ContestString_AppealCheapened: - .string "Ausdruck von {STR_VAR_2}\n" - .string "wurde abgewertet.$" -ContestString_AppealCheapened2: - .string "Es wertete die Ausdrücke\n" - .string "der anderen PKMN ab.$" -ContestString_AppealAttentionStolen: - .string "Es stahl {STR_VAR_2} die\n" - .string "Aufmerksamkeit.$" -ContestString_AppealCheapened3: - .string "Es wertete Ausdruck\n" - .string "von {STR_VAR_2} ab.$" -ContestString_AppealCheapened4: - .string "Es wertete die Ausdrücke\n" - .string "der anderen stark ab.$" -ContestString_AppealAnticipation: - .string "Alle warten sehnsüchtig\n" - .string "auf {STR_VAR_1}.$" -ContestString_AppealCheapened5: - .string "Es wertete den Ausdruck\n" - .string "der PKMN vor ihm ab.$" -ContestString_AppealCheapened6: - .string "Es wertete den Lieblings-\n" - .string "ausdruck des JURORS ab.$" -ContestString_AppealCheapened7: - .string "Der Ausdruckswert der\n" - .string "anderen wurde halbiert.$" -ContestString_JammedStoodOut: - .string "Es macht sich bereit, die\n" - .string "anderen zu beeindrucken.$" -ContestString_AppealNoMore: - .string "Es kann an keiner Vor-\n" - .string "führung mehr teilnehmen.$" -ContestString_AppealTouched: - .string "Der fantastische Aus-\n" - .string "druck berührte den JUROR.$" -ContestString_AppealAnticipation2: - .string "Die Erwartung für die fol-\n" - .string "genden Ausdrücke steigt.$" -ContestString_AppealStoodOut2: - .string "Es war so beeindruckend\n" - .string "wie ein Spezialausdruck.$" -ContestString_AppealStoodOut3: - .string "Es war so beeindruckend\n" - .string "wie {STR_VAR_1}.$" -ContestString_JammedAppealsNotice: - .string "Ein Ausdruck, der gestört\n" - .string "wurde, ist unauffälliger.$" -ContestString_AppealSame: - .string "Jeder Teilnehmer hat nun\n" - .string "den gleichen Ausdruck.$" -ContestString_AppealFullWorse: - .string "{STR_VAR_1} ist voll. Der\n" - .string "Ausdruck wird schlechter.$" - - .align 2 - .4byte ContestString_JudgeHeldFirm - .4byte ContestString_ChangedPerceptions - .4byte ContestString_Terminator - .4byte ContestString_AppealWoreOff - .4byte ContestString_AppealWoreOff2 - .4byte ContestString_AppealLookSame - .4byte ContestString_AppealCheapened - .4byte ContestString_AppealCheapened2 - .4byte ContestString_AppealAttentionStolen - .4byte ContestString_AppealCheapened3 - .4byte ContestString_AppealCheapened4 - .4byte ContestString_AppealAnticipation - .4byte ContestString_AppealCheapened5 - .4byte ContestString_AppealCheapened6 - .4byte ContestString_AppealCheapened7 - .4byte ContestString_JammedStoodOut - .4byte ContestString_AppealNoMore - .4byte ContestString_AppealTouched - .4byte ContestString_AppealAnticipation2 - .4byte ContestString_AppealStoodOut2 - .4byte ContestString_AppealStoodOut3 - .4byte ContestString_Terminator - .4byte ContestString_Terminator - .4byte ContestString_Terminator - .4byte ContestString_JammedAppealsNotice - .4byte ContestString_AppealSame -ContestString_MoreConscious: - .string "Es wird sich der anderen\n" - .string "PKMN mehr bewusst.{PAUSE 60}$" -ContestString_NoAppeal: - .string "{STR_VAR_1} kann danach\n" - .string "keinen Ausdruck zeigen.{PAUSE 60}$" -ContestString_SettleDown: - .string "Es kommt ein wenig\n" - .string "zur Ruhe.{PAUSE 60}$" -ContestString_ObliviousToOthers: - .string "Die anderen PKMN nehmen\n" - .string "es überhaupt nicht wahr.{PAUSE 60}$" -ContestString_LessAware: - .string "Es ist sich der anderen\n" - .string "PKMN kaum bewusst.{PAUSE 60}$" -ContestString_StoppedCaring: - .string "Es kümmert sich nicht\n" - .string "mehr viel um andere PKMN.{PAUSE 60}$" -ContestString_StartleAttempt: - .string "Es versucht, die anderen\n" - .string "PKMN zu erschrecken.{PAUSE 60}$" -ContestString_DazzleAttempt: - .string "Es versucht, die anderen\n" - .string "PKMN zu blenden.{PAUSE 60}$" -ContestString_JudgeLookAway2: - .string "Der JUROR schaut\n" - .string "{STR_VAR_1} nicht mehr an.{PAUSE 60}$" -ContestString_UnnerveAttempt: - .string "Es versucht, die folgenden\n" - .string "PKMN zu entnerven.{PAUSE 60}$" -ContestString_Nervous: - .string "{STR_VAR_1} wird\n" - .string "nervös.{PAUSE 60}$" -ContestString_UnnerveWaiting: - .string "Dieser Ausdruck soll die\n" - .string "anderen PKMN entnerven.{PAUSE 60}$" -ContestString_TauntWell: - .string "Es verhöhnt die\n" - .string "besseren PKMN.{PAUSE 60}$" -ContestString_RegainedForm: - .string "{STR_VAR_1} findet zu\n" - .string "seiner Form zurück.{PAUSE 60}$" -ContestString_JamWell: - .string "Es versucht, die besseren\n" - .string "PKMN zu beeindrucken.{PAUSE 60}$" -ContestString_HustleStandout: - .string "{STR_VAR_1} an der Spitze\n" - .string "engagiert sich noch mehr.{PAUSE 60}$" -ContestString_WorkHardUnnoticed: - .string "Das bisher unauffällige\n" - .string "{STR_VAR_1} gibt alles.$" -ContestString_WorkBefore: - .string "Es strengt sich genauso\n" - .string "an wie die PKMN vor ihm.{PAUSE 60}$" -ContestString_AppealNotWell: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Kam nicht gut an.{PAUSE 60}$" -ContestString_WorkPreceding: - .string "Es strengt sich an wie die\n" - .string "vorangegangenen PKMN.{PAUSE 60}$" -ContestString_AppealNotWell2: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Verlief nicht so gut.{PAUSE 60}$" -ContestString_AppealNotShownWell: - .string "Ausdruck v. {STR_VAR_1}: \n" - .string "Wurde gestört.{PAUSE 60}$" -ContestString_AppealSlightlyWell: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Verlief ganz gut.{PAUSE 60}$" -ContestString_AppealPrettyWell: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Kam ganz gut an.{PAUSE 60}$" -ContestString_AppealExcellently: - .string "{STR_VAR_1} führte seinen\n" - .string "Ausdruck exzellent vor.{PAUSE 60}$" -ContestString_AppealDud: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Er war absolut mies.{PAUSE 60}$" -ContestString_AppealNotVeryWell: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Er war nicht so gut.{PAUSE 60}$" -ContestString_AppealSlightlyWell2: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Er war nicht schlecht.{PAUSE 60}$" -ContestString_AppealPrettyWell2: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Er war recht gut.{PAUSE 60}$" -ContestString_AppealVeryWell: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Er war sehr gut.{PAUSE 60}$" -ContestString_AppealExcellently2: - .string "Ausdruck von {STR_VAR_1}:\n" - .string "Er war exzellent.{PAUSE 60}$" -ContestString_SameTypeGood: - .string "Der gleiche Typ wie das\n" - .string "vorhergehende PKMN - gut!{PAUSE 60}$" -ContestString_DiffTypeGood: - .string "Nicht der gleiche Typ wie\n" - .string "das vorherige PKMN - gut!{PAUSE 60}$" -ContestString_StoodOutAsMuch: - .string "Es ist viel besser als die\n" - .string "vorhergehenden PKMN.{PAUSE 60}$" -ContestString_NotAsWell: - .string "Es war nicht so gut wie\n" - .string "das PKMN vor ihm.{PAUSE 60}$" -ContestString_ConditionRose: - .string "Die Kondition von\n" - .string "{STR_VAR_1} stieg.{PAUSE 60}$" -ContestString_HotStatus: - .string "Status von {STR_VAR_1}:\n" - .string "Bewirkt guten Ausdruck!{PAUSE 60}$" -ContestString_MoveUpLine: - .string "Es steigt in der Reihen-\n" - .string "folge auf.{PAUSE 60}$" -ContestString_MoveBackLine: - .string "Es fällt in der Reihen-\n" - .string "folge zurück.{PAUSE 60}$" -ContestString_ScrambleOrder: - .string "Es bringt die Reihenfolge\n" - .string "durcheinander.{PAUSE 60}$" - -gUnknown_083CBD52:: @ 83CBD52 -ContestString_JudgeExpectantly2:: - .string "Der JUROR betrachtet\n" - .string "{STR_VAR_1} interessiert.{PAUSE 60}$" - -gUnknown_083CBD79:: @ 83CBD79 -ContestString_WentOverWell:: - .string "Die Combo der Ausdrücke\n" - .string "kam gut an.{PAUSE 60}$" - -gUnknown_083CBD9D:: @ 83CBD9D -ContestString_WentOverVeryWell:: - .string "Die Combo der Ausdrücke\n" - .string "kam sehr gut an.{PAUSE 60}$" - -gUnknown_083CBDC6:: @ 83CBDC6 -ContestString_AppealComboExcellently:: - .string "Die Combo der Ausdrücke\n" - .string "kam exzellent an.{PAUSE 60}$" -ContestString_AvertGaze: - .string "{STR_VAR_1} gelingt es,\n" - .string "den Blick abzuwenden.{PAUSE 60}$" -ContestString_AvoidSeeing: - .string "{STR_VAR_1} wandte den\n" - .string "Blick erfolgreich ab.{PAUSE 60}$" -ContestString_NotFazed: - .string "{STR_VAR_1} lässt sich\n" - .string "davon nicht ablenken.{PAUSE 60}$" -ContestString_LittleDistracted: - .string "{STR_VAR_1} wurde etwas\n" - .string "unruhig.{PAUSE 60}$" -ContestString_AttemptStartle: - .string "Es versucht, die anderen\n" - .string "PKMN zu verschrecken.{PAUSE 60}$" -ContestString_LookedDown: - .string "{STR_VAR_1} blickt\n" - .string "irritiert zu Boden.{PAUSE 60}$" -ContestString_TurnedBack: - .string "{STR_VAR_1} dreht sich\n" - .string "irritiert um.{PAUSE 60}$" -ContestString_UtterCry: - .string "{STR_VAR_1} kann einen \n" - .string "Laut nicht unterdrücken.{PAUSE 60}$" -ContestString_LeaptUp: - .string "{STR_VAR_1} kann nicht\n" - .string "anders und springt auf.{PAUSE 60}$" -ContestString_TrippedOver: - .string "{STR_VAR_1} ist so irri-\n" - .string "tiert, dass es stolpert.{PAUSE 60}$" - -gUnknown_083CBF60:: @ 83CBF60 -ContestString_TooNervous: - .string "{STR_VAR_1} ist zu nervös,\n" - .string "um etwas vorzuführen.{PAUSE 60}$" -ContestString_MessedUp2: - .string "Es hatte keinen Erfolg.{PAUSE 60}$" -ContestString_FailedTargetNervous: - .string "Es konnte keine\n" - .string "Nervosität erzeugen.{PAUSE 60}$" -ContestString_FailedAnyoneNervous: - .string "Aber es konnte niemanden\n" - .string "nervös machen.{PAUSE 60}$" -ContestString_Ignored: - .string "Es wurde ignoriert...{PAUSE 60}$" -ContestString_NoConditionImprove: - .string "Es konnte seinen Aus-\n" - .string "druck nicht verstärken...{PAUSE 60}$" -ContestString_BadConditionWeakAppeal: - .string "Schwacher Ausdruck we-\n" - .string "gen schlechter Konditon.{PAUSE 60}$" -ContestString_Unaffected: - .string "{STR_VAR_1} blieb\n" - .string "unbeeindruckt.{PAUSE 60}$" - -gUnknown_083CC075:: @ 83CC075 -ContestString_DissapointedRepeat:: - .string "{STR_VAR_1} enttäuscht\n" - .string "durch Wiederholung.{PAUSE 60}$" - -gUnknown_083CC0A0:: @ 83CC0A0 -ContestString_WentOverGreat:: - .string "Die {STR_VAR_3} von\n" - .string "{STR_VAR_1} war sehr gut.{PAUSE 60}$" - -gUnknown_083CC0BC:: @ 83CC0BC -ContestString_DidntGoWell:: - .string "Die {STR_VAR_3} von\n" - .string "{STR_VAR_1} war nicht gut.{PAUSE 60}$" - -gUnknown_083CC0E3:: @ 83CC0E3 -ContestString_GotCrowdGoing:: - .string "{STR_VAR_1} begeistert\n" - .string "Publikum mit {STR_VAR_3}.{PAUSE 60}$" - -gUnknown_083CC103:: @ 83CC103 -ContestString_CantAppealNextTurn:: - .string "{STR_VAR_1} setzt in der \n" - .string "folgenden Runde aus.{PAUSE 60}$" -ContestString_AttractedAttention:: - .string "Die Aufmerksamkeit des\n" - .string "Publikums liegt auf ihm.{PAUSE 60}$" - -gUnknown_083CC14A:: @ 83CC14A -ContestString_CrowdWatches:: - .string "Das Publikum beobachtet\n" - .string "weiterhin {STR_VAR_3}.{PAUSE 60}$" - -gUnknown_083CC16E:: @ 83CC16E -ContestString_Ignored2:: - .string "{STR_VAR_2} von\n" - .string "{STR_VAR_1} ist ignoriert.{PAUSE 60}$" - - .align 2 -gUnknown_083CC188:: @ 83CC188 - .4byte ContestString_MoreConscious - .4byte ContestString_NoAppeal - .4byte ContestString_SettleDown - .4byte ContestString_ObliviousToOthers - .4byte ContestString_LessAware - .4byte ContestString_StoppedCaring - .4byte ContestString_StartleAttempt - .4byte ContestString_DazzleAttempt - .4byte ContestString_JudgeLookAway2 - .4byte ContestString_UnnerveAttempt - .4byte ContestString_Nervous - .4byte ContestString_UnnerveWaiting - .4byte ContestString_TauntWell - .4byte ContestString_RegainedForm - .4byte ContestString_JamWell - .4byte ContestString_HustleStandout - .4byte ContestString_WorkHardUnnoticed - .4byte ContestString_WorkBefore - .4byte ContestString_AppealNotWell - .4byte ContestString_WorkPreceding - .4byte ContestString_AppealNotWell2 - .4byte ContestString_AppealNotShownWell - .4byte ContestString_AppealSlightlyWell - .4byte ContestString_AppealPrettyWell - .4byte ContestString_AppealExcellently - .4byte ContestString_AppealDud - .4byte ContestString_AppealNotVeryWell - .4byte ContestString_AppealSlightlyWell2 - .4byte ContestString_AppealPrettyWell2 - .4byte ContestString_AppealVeryWell - .4byte ContestString_AppealExcellently2 - .4byte ContestString_SameTypeGood - .4byte ContestString_DiffTypeGood - .4byte ContestString_StoodOutAsMuch - .4byte ContestString_NotAsWell - .4byte ContestString_ConditionRose - .4byte ContestString_HotStatus - .4byte ContestString_MoveUpLine - .4byte ContestString_MoveBackLine - .4byte ContestString_ScrambleOrder - .4byte ContestString_JudgeExpectantly2 @ expectantly - .4byte ContestString_WentOverWell - .4byte ContestString_WentOverVeryWell - .4byte ContestString_AppealComboExcellently - .4byte ContestString_AvertGaze - .4byte ContestString_AvoidSeeing - .4byte ContestString_NotFazed - .4byte ContestString_LittleDistracted - .4byte ContestString_AttemptStartle - .4byte ContestString_LookedDown - .4byte ContestString_TurnedBack - .4byte ContestString_UtterCry - .4byte ContestString_LeaptUp - .4byte ContestString_TrippedOver - .4byte ContestString_MessedUp2 - .4byte ContestString_FailedTargetNervous - .4byte ContestString_FailedAnyoneNervous - .4byte ContestString_Ignored - .4byte ContestString_NoConditionImprove - .4byte ContestString_BadConditionWeakAppeal - .4byte ContestString_Unaffected - .4byte ContestString_AttractedAttention - -gText_Contest_Shyness:: @ 83CC280 - .string "Scheu$" - -gText_Contest_Anxiety:: @ 83CC288 - .string "Besorgnis$" - -gText_Contest_Laziness:: @ 83CC290 - .string "Faulheit$" - -gText_Contest_Hesitancy:: @ 83CC299 - .string "Zögern$" - -gText_Contest_Fear:: @ 83CC2A3 - .string "Furcht$" - -ContestString_Coolness: - .string "Coolness$" -ContestString_Beauty2: - .string "Schönheit$" -ContestString_Cuteness: - .string "Anmut$" -ContestString_Smartness: - .string "Klugheit$" -ContestString_Toughness: - .string "Stärke$" - - .align 2 -gContestCategoryStrings:: @ 83CC2D8 - .4byte ContestString_Coolness - .4byte ContestString_Beauty2 - .4byte ContestString_Cuteness - .4byte ContestString_Smartness - .4byte ContestString_Toughness - -gUnknown_083CC2EC:: @ 83CC2EC - .string "SPANNUNG:$" - -ContestString_CoolMove: - .string "COOLE Att.$" - -ContestString_BeautyMove: - .string "SCHÖNE Att.$" - -ContestString_CuteMove: - .string "ANMUT-Att.$" - -ContestString_SmartMove: - .string "KLUGE Att.$" - -ContestString_ToughMove: - .string "STARKE Att.$" - -ContestString_UnknownMoveType: - .string "???$" - - .align 2 -gUnknown_083CC330:: @ 83CC330 - .4byte ContestString_CoolMove - .4byte ContestString_BeautyMove - .4byte ContestString_CuteMove - .4byte ContestString_SmartMove - .4byte ContestString_ToughMove - .4byte ContestString_UnknownMoveType - -@ unused? -ContestString_Rank: - .string "KLASSE$" - - .string "{HIGHLIGHT TRANSPARENT}{COLOR MAGENTA} $" diff --git a/data-de/text/trainer_class_names.inc b/data-de/text/trainer_class_names.inc deleted file mode 100644 index 94ab2078b..000000000 --- a/data-de/text/trainer_class_names.inc +++ /dev/null @@ -1,59 +0,0 @@ -gTrainerClassNames:: @ 81F0208 - .string "{PKMN}-TRAINER$", 13 - .string "{PKMN}-TRAINER$", 13 - .string "AQUA BOSS$", 13 - .string "TEAM AQUA$", 13 - .string "AQUA VORS.$", 13 - .string "AROMALADY$", 13 - .string "RUINENMANIAC$", 13 - .string "INTERVIEWER$", 13 - .string "PLANSCHER$", 13 @ うきわガール (Inner Tube Girl) in Japanese - .string "PLANSCHER$", 13 @ うきわボーイ (Inner Tube Boy) in Japanese - .string "ASS-TRAINER$", 13 - .string "HEXE$", 13 - .string "LADY$", 13 - .string "SCHÖNHEIT$", 13 - .string "SCHNÖSEL$", 13 - .string "POKéMANIAC$", 13 - .string "SCHWIMMER$", 13 - .string "SCHWARZGURT$", 13 - .string "GITARRIST$", 13 - .string "HITZKOPF$", 13 - .string "CAMPER$", 13 - .string "KÄFERMANIAC$", 13 - .string "PSYCHO$", 13 - .string "GENTLEMAN$", 13 - .string "TOP VIER$", 13 - .string "LEITER$", 13 - .string "SCHULKIND$", 13 - .string "SEN. & JUN.$", 13 - .string "SIHGERS,$", 13 - .string "POKéFAN$", 13 - .string "EXPERTE$", 13 - .string "TEENAGER$", 13 - .string "CHAMP$", 13 - .string "ANGLER$", 13 - .string "TRIATHLET$", 13 - .string "DRACHENPROFI$", 13 - .string "VOGELFÄNGER$", 13 - .string "NINJAJUNGE$", 13 - .string "KÄMPFERIN$", 13 - .string "SCHIRMDAME$", 13 - .string "SCHWIMMERIN$", 13 - .string "PICKNICKER$", 13 - .string "ZWIL.$", 13 - .string "MATROSE$", 13 - .string "SNOWBOARDER$", 13 - .string "{PKMN}-SAMMLER$", 13 - .string "{PKMN}-TRAINER$", 13 - .string "{PKMN}-ZÜCHTER$", 13 - .string "{PKMN}-RANGER$", 13 - .string "MAGMA BOSS$", 13 - .string "TEAM MAGMA$", 13 - .string "MAGMA VORS.$", 13 - .string "GÖRE$", 13 - .string "KÄFERSAMMLER$", 13 - .string "WANDERER$", 13 - .string "JUNGES GLÜCK$", 13 - .string "ALTES PAAR$", 13 - .string "GESCHWISTER$", 13 diff --git a/data/battle_7.s b/data/battle_7.s index 50fad468a..b6a708e3c 100644 --- a/data/battle_7.s +++ b/data/battle_7.s @@ -18,7 +18,7 @@ gSpriteTemplate_81FAF34:: @ 81FAF34 spr_template 55129, 55039, gOamData_81FAF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8032978 .align 2 -gUnknown_081FAF4C:: @ 81FAF4C +gMonSpriteGfx_Sprite_ptr:: @ 81FAF4C .4byte gSharedMem + 0x8000 .4byte gSharedMem + 0xA000 .4byte gSharedMem + 0xC000 diff --git a/data/btl_attrs.s b/data/btl_attrs.s index 54328e7c7..e7868555b 100644 --- a/data/btl_attrs.s +++ b/data/btl_attrs.s @@ -98,11 +98,40 @@ gUnknown_Debug_821F58C:: gUnknown_Debug_821F598:: .byte 0x00, 0x00, 0x09, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x4b, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00 + .align 2, 0 + @ struct Pokeblock gUnknown_Debug_821F5AC:: - .byte 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x03, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00 - .byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x00, 0x06, 0x14, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x07, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x14, 0x00, 0x14, 0x14, 0x00 - .byte 0x09, 0x14, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0a, 0x00, 0x14, 0x00, 0x00, 0x14, 0x14, 0x00, 0x0b, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x0c, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00 - .byte 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x0e, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + @ color, spicy, dry, sweet, bitter, sour, feel + .byte 0x01, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14 + .align 2, 0 + .byte 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14 + .align 2, 0 + .byte 0x03, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14 + .align 2, 0 + .byte 0x04, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14 + .align 2, 0 + .byte 0x05, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14 + .align 2, 0 + .byte 0x06, 0x14, 0x00, 0x14, 0x00, 0x00, 0x14 + .align 2, 0 + .byte 0x07, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14 + .align 2, 0 + .byte 0x08, 0x00, 0x00, 0x14, 0x00, 0x14, 0x14 + .align 2, 0 + .byte 0x09, 0x14, 0x00, 0x00, 0x14, 0x00, 0x14 + .align 2, 0 + .byte 0x0a, 0x00, 0x14, 0x00, 0x00, 0x14, 0x14 + .align 2, 0 + .byte 0x0b, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00 + .align 2, 0 + .byte 0x0c, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00 + .align 2, 0 + .byte 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 + .align 2, 0 + .byte 0x0e, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14 + .align 2, 0 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .align 2, 0 .ifdef ENGLISH Str_821F624:: @ 0x821F624 diff --git a/data/contest.s b/data/contest.s deleted file mode 100644 index 7ed6e24bc..000000000 --- a/data/contest.s +++ /dev/null @@ -1,456 +0,0 @@ -#include "constants/moves.h" -#include "constants/species.h" - .include "include/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -@ 83C9408 - .include "data/contest_opponents.inc" - -gUnknown_083CA308:: @ 83CA308 - .byte 19, 0 - .byte 19, 5 - .byte 19, 10 - .byte 19, 15 - -gUnknown_083CA310:: @ 83CA310 - .byte 25, 0 - .byte 25, 5 - .byte 25, 10 - .byte 25, 15 - -gUnknown_083CA318:: @ 83CA318 - .byte 20, 2 - .byte 20, 7 - .byte 20, 12 - .byte 20, 17 - .byte 24, 2 - .byte 24, 7 - .byte 24, 12 - .byte 24, 17 - .byte 220, 24 - .byte 220, 64 - .byte 220, 104 - .byte 220, 144 - -gUnknown_083CA330:: @ 83CA330 - .byte 224, 24 - .byte 224, 64 - .byte 224, 104 - .byte 224, 144 - -gUnknown_083CA338:: @ 83CA338 - .byte 36, 76, 116, 156 - -gUnknown_083CA33C:: @ 83CA33C - .byte 36, 76, 116, 156 - -gUnknown_083CA340:: @ 83CA340 - .byte 0, 31, 9, 39 - .byte 0, 33, 9, 39 - .byte 0, 35, 9, 39 - .byte 0, 37, 9, 39 - - .align 2 -gUnknown_083CA350:: @ 83CA350 - obj_tiles gTiles_8D1975C, 0x20, 20004 - - .align 2 -gOamData_83CA358:: @ 83CA358 - .2byte 0x0000 - .2byte 0x0000 - .2byte 0x0000 - - .align 2 -gSpriteAffineAnim_83CA360:: @ 83CA360 - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83CA370:: @ 83CA370 - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_frame 0xFFF6, 0xFFF6, -20, 20 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83CA388:: @ 83CA388 - obj_rot_scal_anim_frame 0x38, 0x38, 0, 0 - obj_rot_scal_anim_frame 0xA, 0xA, 20, 20 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83CA3A0:: @ 83CA3A0 - .4byte gSpriteAffineAnim_83CA360 - .4byte gSpriteAffineAnim_83CA370 - .4byte gSpriteAffineAnim_83CA388 - - .align 2 -gSpriteTemplate_83CA3AC:: @ 83CA3AC - spr_template 20004, 44000, gOamData_83CA358, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83CA3A0, SpriteCallbackDummy - - .align 2 -gUnknown_083CA3C4:: @ 83CA3C4 - obj_tiles gContestNextTurnGfx, 256, 0x4e26 - obj_tiles gContestNextTurnGfx, 256, 0x4e27 - obj_tiles gContestNextTurnGfx, 256, 0x4e28 - obj_tiles gContestNextTurnGfx, 256, 0x4e29 - - .align 2 -gUnknown_083CA3E4:: @ 83CA3E4 - obj_pal gContestPal, 0x4E26 - - .align 2 -gOamData_83CA3EC:: @ 83CA3EC - .2byte 0x4000 - .2byte 0x4000 - .2byte 0x0000 - - .align 2 -gSpriteTemplate_83CA3F4:: @ 83CA3F4 - spr_template 20006, 20006, gOamData_83CA3EC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CA40C:: @ 83CA40C - spr_template 20007, 20006, gOamData_83CA3EC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CA424:: @ 83CA424 - spr_template 20008, 20006, gOamData_83CA3EC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CA43C:: @ 83CA43C - spr_template 20009, 20006, gOamData_83CA3EC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSubspriteTable_83CA454:: @ 83CA454 - subsprite -26, -4, 0, 0, 32x8 - subsprite 6, -4, 0, 4, 32x8 - - .align 2 -gSubspriteTables_83CA464:: @ 83CA464 - .4byte 2, gSubspriteTable_83CA454 - - .align 2 -gUnknown_083CA46C:: @ 83CA46C - obj_tiles gContestApplauseGfx, 1024, 44002 - - .align 2 -gUnknown_083CA474:: @ 83CA474 - obj_pal gContestPal, 44002 - - .align 2 -gOamData_83CA47C:: @ 83CA47C - .2byte 0x4000 - .2byte 0xC000 - .2byte 0x0000 - - .align 2 -gSpriteTemplate_83CA484:: @ 83CA484 - spr_template 44002, 44002, gOamData_83CA47C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gOamData_83CA49C:: @ 83CA49C - .2byte 0x0000 - .2byte 0xC000 - .2byte 0x2C00 - - .align 2 -gSpriteTemplate_83CA4A4:: @ 83CA4A4 - spr_template 20005, 20005, gOamData_83CA49C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_083CA4BC:: @ 83CA4BC - obj_tiles gContestJudgeGfx, 2048, 0x4e25 - - .align 2 -gUnknown_083CA4C4:: @ 83CA4C4 - obj_tiles gContestJudgeSymbolsGfx, 896, 0xabe0 - - .align 2 -gUnknown_083CA4CC:: @ 83CA4CC - obj_pal gContest3Pal, 0xabe0 - - .align 2 -gUnknown_083CA4D4:: @ 83CA4D4 - spr_template 0xABE0, 0xABE0, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .include "data/text/contest_strings.inc" - -gUnknownText_MissedTurn:: @ 83CC355 -.ifdef ENGLISH - .string "Missed turn$" -.else - .string "Verpasste Chance$" -.endif - -gUnknownText_LinkStandbyAndWinner:: @ 83CC361 -.ifdef ENGLISH - .string "Link standby...$" - .string "{COLOR WHITE2}$" - .string "The winner is {STR_VAR_1}'s {STR_VAR_2}!\nCongratulations!$" -.else - .string "Verbindung...$" - .string "{COLOR WHITE2}$" - .string "Der Sieger ist {STR_VAR_2} von\n" - .string "{STR_VAR_1}! Herzlichen Glückwunsch!$" -.endif - - .align 1 -@ unknown, unreferenced data - .byte 0x9C - .byte 0x77 - -gUnknownText_UnknownFormatting2:: @ 83CC3A0 - .string "{COLOR GREEN}{SHADOW RED}$" - -gUnknownText_UnknownFormatting3:: @ 83CC3A7 - .string "{COLOR LIGHT_GREY}$" - - .align 2 -gUnknown_083CC3AC:: @ 83CC3AC - obj_tiles gContestNumbers_UnusedGfx, 512, 0x4e20 - - .align 2 -gUnknown_083CC3B4:: @ 83CC3B4 - obj_pal gContestNumbers_UnusedPal, 0x4E20 - obj_pal gContestNumbers_UnusedPal, 0x4E21 - obj_pal gContestNumbers_UnusedPal, 0x4E22 - obj_pal gContestNumbers_UnusedPal, 0x4E23 - - .align 2 -gSpriteAnim_83CC3D4:: @ 83CC3D4 - obj_image_anim_frame 0, 1 - obj_image_anim_end - - .align 2 -gSpriteAnim_83CC3DC:: @ 83CC3DC - obj_image_anim_frame 4, 1 - obj_image_anim_end - - .align 2 -gSpriteAnim_83CC3E4:: @ 83CC3E4 - obj_image_anim_frame 8, 1 - obj_image_anim_end - - .align 2 -gSpriteAnim_83CC3EC:: @ 83CC3EC - obj_image_anim_frame 12, 1 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83CC3F4:: @ 83CC3F4 - .4byte gSpriteAnim_83CC3D4 - .4byte gSpriteAnim_83CC3DC - .4byte gSpriteAnim_83CC3E4 - .4byte gSpriteAnim_83CC3EC - - .align 2 -gSpriteAffineAnim_83CC404:: @ 83CC404 - obj_rot_scal_anim_frame 0x0, 0x0, 0, 1 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83CC414:: @ 83CC414 - obj_rot_scal_anim_frame 0xFFF1, 0xFFF1, 0, 15 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83CC424:: @ 83CC424 - obj_rot_scal_anim_frame 0x1F, 0x1F, 0, 0 - obj_rot_scal_anim_frame 0xF, 0xF, 0, 15 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83CC43C:: @ 83CC43C - .4byte gSpriteAffineAnim_83CC404 - .4byte gSpriteAffineAnim_83CC414 - .4byte gSpriteAffineAnim_83CC424 - .4byte NULL - - .align 2 -gOamData_83CC44C:: @ 83CC44C - .2byte 0x0000 - .2byte 0x4000 - .2byte 0x0000 - - .align 2 -gSpriteTemplate_83CC454:: @ 83CC454 - spr_template 20000, 20000, gOamData_83CC44C, gSpriteAnimTable_83CC3F4, NULL, gSpriteAffineAnimTable_83CC43C, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CC46C:: @ 83CC46C - spr_template 20000, 20001, gOamData_83CC44C, gSpriteAnimTable_83CC3F4, NULL, gSpriteAffineAnimTable_83CC43C, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CC484:: @ 83CC484 - spr_template 20000, 20002, gOamData_83CC44C, gSpriteAnimTable_83CC3F4, NULL, gSpriteAffineAnimTable_83CC43C, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CC49C:: @ 83CC49C - spr_template 20000, 20003, gOamData_83CC44C, gSpriteAnimTable_83CC3F4, NULL, gSpriteAffineAnimTable_83CC43C, SpriteCallbackDummy - - .align 2 -gUnknown_083CC4B4:: @ 83CC4B4 - obj_tiles gBlankGfxCompressed, 4096, 33000 - obj_tiles gBlankGfxCompressed, 4096, 33001 - obj_tiles gBlankGfxCompressed, 4096, 33002 - obj_tiles gBlankGfxCompressed, 4096, 33003 - - .align 2 -gUnknown_083CC4D4:: @ 83CC4D4 - obj_pal gSharedMem + 0x180A4, 33000 - obj_pal gSharedMem + 0x180C4, 33001 - obj_pal gSharedMem + 0x180E4, 33002 - obj_pal gSharedMem + 0x18104, 33003 - - .align 2 -gOamData_83CC4F4:: @ 83CC4F4 - .2byte 0x0700 - .2byte 0xC000 - .2byte 0x0000 - - .align 2 -gSpriteAffineAnim_83CC4FC:: @ 83CC4FC - obj_rot_scal_anim_frame 0x100, 0x100, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83CC50C:: @ 83CC50C - obj_rot_scal_anim_frame 0x3, 0x3, 0, 15 - obj_rot_scal_anim_frame 0xFFFD, 0xFFFD, 0, 15 - obj_rot_scal_anim_frame 0x3, 0x3, 0, 15 - obj_rot_scal_anim_frame 0xFFFD, 0xFFFD, 0, 15 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83CC534:: @ 83CC534 - .4byte gSpriteAffineAnim_83CC4FC - .4byte gSpriteAffineAnim_83CC50C - - .align 2 -gSpriteTemplate_83CC53C:: @ 83CC53C - spr_template 33000, 33000, gOamData_83CC4F4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83CC534, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CC554:: @ 83CC554 - spr_template 33001, 33001, gOamData_83CC4F4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83CC534, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CC56C:: @ 83CC56C - spr_template 33002, 33002, gOamData_83CC4F4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83CC534, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83CC584:: @ 83CC584 - spr_template 33003, 33003, gOamData_83CC4F4, gDummySpriteAnimTable, NULL, gSpriteAffineAnimTable_83CC534, SpriteCallbackDummy - -gUnknown_083CC59C:: @ 83CC59C - .string "{HIGHLIGHT TRANSPARENT}{COLOR}$" - -gUnknown_083CC5A2:: @ 83CC5A2 - .string "/$" - - .align 1 -gUnknown_083CC5A4:: @ 83CC5A4 - .2byte 0x73, 0x19E6, 0x253, 0x4CC4, 0x1F, 0x3E0, 0x3FF, 0x7C00 - -@ 83CC5B4 - .include "data/contest_excitement_table.inc" - - .align 2 -gUnknown_083CC5D0:: @ 83CC5D0 - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_TAILLOW - .byte CONTEST_SMART -.ifdef ENGLISH - .string "TAILTA$", 11 - .string "WYATT$", 10 -.else - .string "SCHWALBI$", 11 - .string "ROSEL$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_BRELOOM - .byte CONTEST_BEAUTY -.ifdef ENGLISH - .string "BRELO$", 11 - .string "LIANA$", 10 -.else - .string "TUFUNG$", 11 - .string "WITOLD$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_PELIPPER - .byte CONTEST_COOL -.ifdef ENGLISH - .string "PELEP$", 11 - .string "TIERA$", 10 -.else - .string "LIPPER$", 11 - .string "RUFUS$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_PELIPPER - .byte CONTEST_COOL -.ifdef ENGLISH - .string "PELEP$", 11 - .string "TIERA$", 10 -.else - .string "LIPPER$", 11 - .string "ELLEN$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_PELIPPER - .byte CONTEST_COOL -.ifdef ENGLISH - .string "PELEP$", 11 - .string "TIERA$", 10 -.else - .string "LIPPER$", 11 - .string "AVIA$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_DELCATTY - .byte CONTEST_SMART -.ifdef ENGLISH - .string "KITSY$", 11 - .string "OMAR$", 10 -.else - .string "CONEC$", 11 - .string "HAUBERT$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_GULPIN - .byte CONTEST_CUTE -.ifdef ENGLISH - .string "GULPS$", 11 - .string "MACIE$", 10 -.else - .string "SCHLUCKI$", 11 - .string "HEILWIG$", 10 -.endif - - .4byte 0 - .4byte 0xFFFF - .2byte SPECIES_LOUDRED - .byte CONTEST_TOUGH -.ifdef ENGLISH - .string "LOUDED$", 11 - .string "BRYANT$", 10 -.else - .string "KEELO$", 11 - .string "ISEGRIM$", 10 -.endif diff --git a/data/contest_excitement_table.inc b/data/contest_excitement_table.inc deleted file mode 100644 index 359e46c54..000000000 --- a/data/contest_excitement_table.inc +++ /dev/null @@ -1,7 +0,0 @@ -gContestExcitementTable:: @ 83CC5B4 - @ Cool Beauty Cute Smart Tough - .byte 1, 0, -1, -1, 0 @ Cool Contest - .byte 0, 1, 0, -1, -1 @ Beauty Contest - .byte -1, 0, 1, 0, -1 @ Cute Contest - .byte -1, -1, 0, 1, 0 @ Smart Contest - .byte 0, -1, -1, 0, 1 @ Tough Contest diff --git a/data/contest_opponents.inc b/data/contest_opponents.inc deleted file mode 100644 index 8c9c76f1b..000000000 --- a/data/contest_opponents.inc +++ /dev/null @@ -1,663 +0,0 @@ - .align 2 -gContestOpponents:: @ 83C9408 - .2byte 286 @ SPECIES_ID - .string "POOCHY$", 11 @ POKE_NICKNAME - .string "JIMMY$", 8 @ TRAINER_NAME - .byte 7 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x0c000fff @ FLAGS - .2byte 68 @ RANK - .2byte MOVE_ROAR, MOVE_BITE, MOVE_TAKE_DOWN, MOVE_HOWL - .byte 10, 4, 10, 3, 4, 50 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 288 @ SPECIES_ID - .string "ZIGOON$", 11 @ POKE_NICKNAME - .string "EDITH$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 16 @ RANK - .2byte MOVE_REST, MOVE_TAIL_WHIP, MOVE_TACKLE, MOVE_COVET - .byte 10, 10, 6, 1, 2, 60 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 294 @ SPECIES_ID - .string "DUSTER$", 11 @ POKE_NICKNAME - .string "EVAN$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x21000fff @ FLAGS - .2byte 8 @ RANK - .2byte MOVE_SILVER_WIND, MOVE_MOONLIGHT, MOVE_LIGHT_SCREEN, MOVE_GUST - .byte 2, 10, 10, 12, 4, 70 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 298 @ SPECIES_ID - .string "DOTS$", 11 @ POKE_NICKNAME - .string "KELSEY$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x20800fff @ FLAGS - .2byte 96 @ RANK - .2byte MOVE_BIDE, MOVE_SYNTHESIS, MOVE_BULLET_SEED, MOVE_GROWTH - .byte 3, 3, 5, 2, 7, 80 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 304 @ SPECIES_ID - .string "TATAY$", 11 @ POKE_NICKNAME - .string "MADISON$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80400fff @ FLAGS - .2byte 4 @ RANK - .2byte MOVE_WING_ATTACK, MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_GROWL - .byte 1, 3, 3, 5, 4, 90 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 301 @ SPECIES_ID - .string "NINDA$", 11 @ POKE_NICKNAME - .string "RAYMOND$", 8 @ TRAINER_NAME - .byte 44 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x10200fff @ FLAGS - .2byte 32 @ RANK - .2byte MOVE_LEECH_LIFE, MOVE_FALSE_SWIPE, MOVE_FURY_SWIPES, MOVE_MIND_READER - .byte 5, 2, 10, 7, 8, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 306 @ SPECIES_ID - .string "SMISH$", 11 @ POKE_NICKNAME - .string "GRANT$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x20100fff @ FLAGS - .2byte 32 @ RANK - .2byte MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_ATTRACT - .byte 3, 3, 10, 2, 2, 50 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 309 @ SPECIES_ID - .string "GULWEE$", 11 @ POKE_NICKNAME - .string "PAIGE$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08080fff @ FLAGS - .2byte 24 @ RANK - .2byte MOVE_MIST, MOVE_WATER_GUN, MOVE_GROWL, MOVE_PURSUIT - .byte 3, 5, 1, 10, 10, 60 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 364 @ SPECIES_ID - .string "SLOKTH$", 11 @ POKE_NICKNAME - .string "ALEC$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x40040fff @ FLAGS - .2byte 88 @ RANK - .2byte MOVE_STRENGTH, MOVE_COUNTER, MOVE_YAWN, MOVE_ENCORE - .byte 10, 4, 4, 5, 18, 70 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 370 @ SPECIES_ID - .string "WHIRIS$", 11 @ POKE_NICKNAME - .string "SYDNEY$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 36 @ RANK - .2byte MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_HYPER_VOICE - .byte 2, 2, 7, 2, 7, 80 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 335 @ SPECIES_ID - .string "MAHITA$", 11 @ POKE_NICKNAME - .string "MORRIS$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08010fff @ FLAGS - .2byte 68 @ RANK - .2byte MOVE_SEISMIC_TOSS, MOVE_VITAL_THROW, MOVE_TACKLE, MOVE_REVERSAL - .byte 9, 1, 1, 8, 1, 90 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 382 @ SPECIES_ID - .string "RONAR$", 11 @ POKE_NICKNAME - .string "MARIAH$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08008fff @ FLAGS - .2byte 68 @ RANK - .2byte MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_HEADBUTT, MOVE_TAKE_DOWN - .byte 5, 10, 2, 10, 2, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 41 @ SPECIES_ID - .string "ZUTZU$", 11 @ POKE_NICKNAME - .string "RUSSELL$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x90004fff @ FLAGS - .2byte 56 @ RANK - .2byte MOVE_HAZE, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_LEECH_LIFE - .byte 4, 2, 2, 2, 10, 50 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 367 @ SPECIES_ID - .string "GULIN$", 11 @ POKE_NICKNAME - .string "MELANIE$", 8 @ TRAINER_NAME - .byte 6 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x40002fff @ FLAGS - .2byte 16 @ RANK - .2byte MOVE_SLUDGE, MOVE_AMNESIA, MOVE_TOXIC, MOVE_YAWN - .byte 1, 10, 1, 10, 5, 60 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 337 @ SPECIES_ID - .string "RIKELEC$", 11 @ POKE_NICKNAME - .string "CHANCE$", 8 @ TRAINER_NAME - .byte 15 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80001fff @ FLAGS - .2byte 12 @ RANK - .2byte MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_ROAR - .byte 20, 10, 1, 1, 1, 70 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 363 @ SPECIES_ID - .string "RELIA$", 11 @ POKE_NICKNAME - .string "KARINA$", 8 @ TRAINER_NAME - .byte 32 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x24000fff @ FLAGS - .2byte 41 @ RANK - .2byte MOVE_PETAL_DANCE, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_INGRAIN - .byte 50, 15, 75, 10, 20, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 84 @ SPECIES_ID - .string "DUODO$", 11 @ POKE_NICKNAME - .string "BOBBY$", 8 @ TRAINER_NAME - .byte 51 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 125 @ RANK - .2byte MOVE_PECK, MOVE_FURY_ATTACK, MOVE_RETURN, MOVE_GROWL - .byte 15, 21, 15, 85, 35, 110 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 332 @ SPECIES_ID - .string "PINCHIN$", 11 @ POKE_NICKNAME - .string "CLAIRE$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x81000fff @ FLAGS - .2byte 113 @ RANK - .2byte MOVE_BITE, MOVE_SAND_ATTACK, MOVE_DIG, MOVE_FAINT_ATTACK - .byte 75, 25, 25, 10, 25, 120 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 344 @ SPECIES_ID - .string "NACAC$", 11 @ POKE_NICKNAME - .string "WILLIE$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80800fff @ FLAGS - .2byte 37 @ RANK - .2byte MOVE_SPIKES, MOVE_LEER, MOVE_POISON_STING, MOVE_SAND_ATTACK - .byte 10, 30, 25, 65, 25, 130 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 27 @ SPECIES_ID - .string "SHRAND$", 11 @ POKE_NICKNAME - .string "CASSIDY$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x10400fff @ FLAGS - .2byte 69 @ RANK - .2byte MOVE_SLASH, MOVE_DEFENSE_CURL, MOVE_SWIFT, MOVE_FURY_SWIPES - .byte 30, 90, 30, 10, 100, 140 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 318 @ SPECIES_ID - .string "TOYBAL$", 11 @ POKE_NICKNAME - .string "MORGAN$", 8 @ TRAINER_NAME - .byte 44 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08200fff @ FLAGS - .2byte 41 @ RANK - .2byte MOVE_SELF_DESTRUCT, MOVE_ROCK_TOMB, MOVE_PSYBEAM, MOVE_CONFUSION - .byte 50, 40, 10, 35, 35, 150 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 339 @ SPECIES_ID - .string "LENUM$", 11 @ POKE_NICKNAME - .string "SUMMER$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x10100fff @ FLAGS - .2byte 77 @ RANK - .2byte MOVE_MAGNITUDE, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY, MOVE_FLAMETHROWER - .byte 40, 5, 40, 40, 40, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 308 @ SPECIES_ID - .string "SPININ$", 11 @ POKE_NICKNAME - .string "MILES$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80080fff @ FLAGS - .2byte 49 @ RANK - .2byte MOVE_TEETER_DANCE, MOVE_PSYCH_UP, MOVE_HYPNOSIS, MOVE_UPROAR - .byte 25, 75, 25, 10, 25, 110 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 358 @ SPECIES_ID - .string "SWABY$", 11 @ POKE_NICKNAME - .string "AUDREY$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0xa0040fff @ FLAGS - .2byte 41 @ RANK - .2byte MOVE_MIRROR_MOVE, MOVE_PERISH_SONG, MOVE_SAFEGUARD, MOVE_MIST - .byte 30, 30, 40, 30, 25, 120 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 289 @ SPECIES_ID - .string "NOONE$", 11 @ POKE_NICKNAME - .string "AVERY$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 25 @ RANK - .2byte MOVE_GROWL, MOVE_COVET, MOVE_SAND_ATTACK, MOVE_REST - .byte 40, 40, 30, 10, 30, 130 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 317 @ SPECIES_ID - .string "KECON$", 11 @ POKE_NICKNAME - .string "ARIANA$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80010fff @ FLAGS - .2byte 97 @ RANK - .2byte MOVE_THIEF, MOVE_SCREECH, MOVE_ANCIENT_POWER, MOVE_BIND - .byte 10, 10, 40, 75, 35, 140 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 118 @ SPECIES_ID - .string "GOLDEN$", 11 @ POKE_NICKNAME - .string "ASHTON$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80008fff @ FLAGS - .2byte 13 @ RANK - .2byte MOVE_HORN_ATTACK, MOVE_FURY_ATTACK, MOVE_HORN_DRILL, MOVE_TAIL_WHIP - .byte 70, 30, 5, 30, 25, 150 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 323 @ SPECIES_ID - .string "BOBOACH$", 11 @ POKE_NICKNAME - .string "SANDRA$", 8 @ TRAINER_NAME - .byte 6 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80004fff @ FLAGS - .2byte 113 @ RANK - .2byte MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_EARTHQUAKE, MOVE_FUTURE_SIGHT - .byte 45, 45, 60, 25, 15, 100 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 227 @ SPECIES_ID - .string "CORPY$", 11 @ POKE_NICKNAME - .string "CARSON$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08002fff @ FLAGS - .2byte 77 @ RANK - .2byte MOVE_SWIFT, MOVE_DOUBLE_TEAM, MOVE_AGILITY, MOVE_CUT - .byte 40, 30, 25, 60, 20, 110 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 295 @ SPECIES_ID - .string "TADO$", 11 @ POKE_NICKNAME - .string "KATRINA$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x08001fff @ FLAGS - .2byte 57 @ RANK - .2byte MOVE_ASTONISH, MOVE_GROWL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE - .byte 15, 15, 30, 15, 75, 120 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 383 @ SPECIES_ID - .string "LAIRN$", 11 @ POKE_NICKNAME - .string "RONNIE$", 8 @ TRAINER_NAME - .byte 55 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x84000fff @ FLAGS - .2byte 98 @ RANK - .2byte MOVE_METAL_SOUND, MOVE_METAL_CLAW, MOVE_HARDEN, MOVE_TAKE_DOWN - .byte 30, 50, 35, 100, 90, 200 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 299 @ SPECIES_ID - .string "NUZLE$", 11 @ POKE_NICKNAME - .string "CLAUDIA$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 14 @ RANK - .2byte MOVE_GROWTH, MOVE_RAZOR_WIND, MOVE_EXPLOSION, MOVE_EXTRASENSORY - .byte 75, 75, 65, 35, 70, 210 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 302 @ SPECIES_ID - .string "NINAS$", 11 @ POKE_NICKNAME - .string "ELIAS$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x81000fff @ FLAGS - .2byte 114 @ RANK - .2byte MOVE_SCREECH, MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS - .byte 30, 50, 95, 70, 70, 220 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 305 @ SPECIES_ID - .string "WELOW$", 11 @ POKE_NICKNAME - .string "JADE$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80800fff @ FLAGS - .2byte 14 @ RANK - .2byte MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_WING_ATTACK, MOVE_FLY - .byte 65, 85, 35, 75, 40, 230 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 287 @ SPECIES_ID - .string "YENA$", 11 @ POKE_NICKNAME - .string "FRANCIS$", 8 @ TRAINER_NAME - .byte 44 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80400fff @ FLAGS - .2byte 98 @ RANK - .2byte MOVE_TAUNT, MOVE_THIEF, MOVE_ODOR_SLEUTH, MOVE_TAKE_DOWN - .byte 40, 80, 35, 70, 70, 240 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 292 @ SPECIES_ID - .string "TIFLY$", 11 @ POKE_NICKNAME - .string "ALISHA$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80200fff @ FLAGS - .2byte 42 @ RANK - .2byte MOVE_MORNING_SUN, MOVE_SILVER_WIND, MOVE_STUN_SPORE, MOVE_SECRET_POWER - .byte 40, 70, 25, 80, 100, 250 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 119 @ SPECIES_ID - .string "KINGSEA$", 11 @ POKE_NICKNAME - .string "SAUL$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80100fff @ FLAGS - .2byte 118 @ RANK - .2byte MOVE_FLAIL, MOVE_SUPERSONIC, MOVE_HORN_ATTACK, MOVE_FURY_ATTACK - .byte 80, 60, 30, 70, 90, 200 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 340 @ SPECIES_ID - .string "ERUPAM$", 11 @ POKE_NICKNAME - .string "FELICIA$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80080fff @ FLAGS - .2byte 78 @ RANK - .2byte MOVE_EARTHQUAKE, MOVE_FISSURE, MOVE_OVERHEAT, MOVE_HYPER_BEAM - .byte 100, 80, 20, 50, 65, 210 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 66 @ SPECIES_ID - .string "CHOPAM$", 11 @ POKE_NICKNAME - .string "EMILIO$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80040fff @ FLAGS - .2byte 66 @ RANK - .2byte MOVE_SEISMIC_TOSS, MOVE_FOCUS_ENERGY, MOVE_KARATE_CHOP, MOVE_SCARY_FACE - .byte 70, 85, 25, 60, 50, 220 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 296 @ SPECIES_ID - .string "LOMBE$", 11 @ POKE_NICKNAME - .string "KARLA$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 58 @ RANK - .2byte MOVE_ATTRACT, MOVE_FLASH, MOVE_UPROAR, MOVE_GROWL - .byte 40, 60, 90, 45, 70, 230 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 379 @ SPECIES_ID - .string "VIPES$", 11 @ POKE_NICKNAME - .string "DARRYL$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80010fff @ FLAGS - .2byte 98 @ RANK - .2byte MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP, MOVE_SCREECH - .byte 35, 50, 90, 40, 100, 240 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 313 @ SPECIES_ID - .string "MERAIL$", 11 @ POKE_NICKNAME - .string "SELENA$", 8 @ TRAINER_NAME - .byte 22 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80008fff @ FLAGS - .2byte 26 @ RANK - .2byte MOVE_WATER_PULSE, MOVE_REST, MOVE_WATER_SPOUT, MOVE_SPLASH - .byte 30, 100, 100, 50, 30, 250 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 129 @ SPECIES_ID - .string "KARPAG$", 11 @ POKE_NICKNAME - .string "NOEL$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80004fff @ FLAGS - .2byte 82 @ RANK - .2byte MOVE_TACKLE, MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE - .byte 30, 30, 160, 50, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 348 @ SPECIES_ID - .string "LUNONE$", 11 @ POKE_NICKNAME - .string "LACEY$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80002fff @ FLAGS - .2byte 42 @ RANK - .2byte MOVE_EXPLOSION, MOVE_FUTURE_SIGHT, MOVE_PSYCHIC, MOVE_CONFUSION - .byte 50, 70, 60, 70, 50, 210 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 310 @ SPECIES_ID - .string "PELIPE$", 11 @ POKE_NICKNAME - .string "CORBIN$", 8 @ TRAINER_NAME - .byte 39 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80001fff @ FLAGS - .2byte 14 @ RANK - .2byte MOVE_MIST, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_WING_ATTACK - .byte 95, 80, 85, 35, 35, 220 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 130 @ SPECIES_ID - .string "RADOS$", 11 @ POKE_NICKNAME - .string "JUSTINA$", 8 @ TRAINER_NAME - .byte 32 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x84000fff @ FLAGS - .2byte 79 @ RANK - .2byte MOVE_HYPER_BEAM, MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE - .byte 160, 200, 20, 40, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 371 @ SPECIES_ID - .string "LOUDERD$", 11 @ POKE_NICKNAME - .string "RALPH$", 8 @ TRAINER_NAME - .byte 21 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x82000fff @ FLAGS - .2byte 71 @ RANK - .2byte MOVE_HYPER_VOICE, MOVE_STOMP, MOVE_ROAR, MOVE_HOWL - .byte 170, 50, 55, 150, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 316 @ SPECIES_ID - .string "CATTED$", 11 @ POKE_NICKNAME - .string "ROSA$", 8 @ TRAINER_NAME - .byte 8 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x81000fff @ FLAGS - .2byte 59 @ RANK - .2byte MOVE_ATTRACT, MOVE_ASSIST, MOVE_FAINT_ATTACK, MOVE_TAIL_WHIP - .byte 40, 200, 150, 185, 60, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 366 @ SPECIES_ID - .string "SLING$", 11 @ POKE_NICKNAME - .string "KEATON$", 8 @ TRAINER_NAME - .byte 11 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80800fff @ FLAGS - .2byte 115 @ RANK - .2byte MOVE_COVET, MOVE_COUNTER, MOVE_ENCORE, MOVE_SLACK_OFF - .byte 85, 85, 170, 110, 150, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 359 @ SPECIES_ID - .string "TARIA$", 11 @ POKE_NICKNAME - .string "MAYRA$", 8 @ TRAINER_NAME - .byte 18 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80400fff @ FLAGS - .2byte 15 @ RANK - .2byte MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_PERISH_SONG, MOVE_SAFEGUARD - .byte 170, 150, 30, 30, 90, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 393 @ SPECIES_ID - .string "SHEDJA$", 11 @ POKE_NICKNAME - .string "LAMAR$", 8 @ TRAINER_NAME - .byte 15 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80200fff @ FLAGS - .2byte 39 @ RANK - .2byte MOVE_SHOCK_WAVE, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, MOVE_RETURN - .byte 230, 60, 60, 230, 80, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 45 @ SPECIES_ID - .string "PLUMILE$", 11 @ POKE_NICKNAME - .string "AUBREY$", 8 @ TRAINER_NAME - .byte 26 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80100fff @ FLAGS - .2byte 59 @ RANK - .2byte MOVE_PETAL_DANCE, MOVE_SWEET_SCENT, MOVE_STUN_SPORE, MOVE_FLASH - .byte 35, 200, 150, 130, 40, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 361 @ SPECIES_ID - .string "KULLUSK$", 11 @ POKE_NICKNAME - .string "NIGEL$", 8 @ TRAINER_NAME - .byte 31 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80080fff @ FLAGS - .2byte 115 @ RANK - .2byte MOVE_DISABLE, MOVE_FUTURE_SIGHT, MOVE_NIGHT_SHADE, MOVE_PURSUIT - .byte 25, 35, 230, 150, 160, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 178 @ SPECIES_ID - .string "UTAN$", 11 @ POKE_NICKNAME - .string "CAMILLE$", 8 @ TRAINER_NAME - .byte 47 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80040fff @ FLAGS - .2byte 115 @ RANK - .2byte MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_PSYCHIC - .byte 35, 35, 150, 130, 170, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 331 @ SPECIES_ID - .string "PEDOS$", 11 @ POKE_NICKNAME - .string "DEON$", 8 @ TRAINER_NAME - .byte 38 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80020fff @ FLAGS - .2byte 87 @ RANK - .2byte MOVE_AGILITY, MOVE_SWAGGER, MOVE_TAUNT, MOVE_TAKE_DOWN - .byte 140, 70, 140, 75, 100, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 325 @ SPECIES_ID - .string "LUVIS$", 11 @ POKE_NICKNAME - .string "JANELLE$", 8 @ TRAINER_NAME - .byte 10 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80010fff @ FLAGS - .2byte 83 @ RANK - .2byte MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_TAKE_DOWN, MOVE_CHARM - .byte 50, 100, 220, 40, 190, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 214 @ SPECIES_ID - .string "HEROSS$", 11 @ POKE_NICKNAME - .string "HEATH$", 8 @ TRAINER_NAME - .byte 33 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80008fff @ FLAGS - .2byte 71 @ RANK - .2byte MOVE_STRENGTH, MOVE_ENDURE, MOVE_REVERSAL, MOVE_ROCK_TOMB - .byte 170, 70, 110, 240, 140, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 101 @ SPECIES_ID - .string "RODLECT$", 11 @ POKE_NICKNAME - .string "SASHA$", 8 @ TRAINER_NAME - .byte 6 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80004fff @ FLAGS - .2byte 15 @ RANK - .2byte MOVE_EXPLOSION, MOVE_LIGHT_SCREEN, MOVE_SWIFT, MOVE_FLASH - .byte 200, 200, 30, 35, 50, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 172 @ SPECIES_ID - .string "CHUPY$", 11 @ POKE_NICKNAME - .string "FRANKIE$", 8 @ TRAINER_NAME - .byte 35 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80002fff @ FLAGS - .2byte 59 @ RANK - .2byte MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_REST, MOVE_TAIL_WHIP - .byte 25, 150, 180, 115, 120, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - - .2byte 202 @ SPECIES_ID - .string "WOBET$", 11 @ POKE_NICKNAME - .string "HELEN$", 8 @ TRAINER_NAME - .byte 16 @ TRAINER_SPRITE - .2byte 0x0000 @padding - .4byte 0x80001fff @ FLAGS - .2byte 111 @ RANK - .2byte MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND - .byte 60, 230, 50, 220, 210, 255 @ STAT_COOL, STAT_BEAUTY, STAT_CUTE, STAT_SMART, STAT_TOUGH, STAT_SHEEN - .4byte 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff @ RESERVED - -@ credit to Valkyrie for helping me properly dump these structs diff --git a/data/contest_painting_effects.s b/data/contest_painting_effects.s deleted file mode 100644 index e3e75753d..000000000 --- a/data/contest_painting_effects.s +++ /dev/null @@ -1,3206 +0,0 @@ - .include "include/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_083E7A50:: @ 83E7A50 - .byte 0x00, 0x1D, 0x1C - .byte 0x0E, 0x1E, 0x1B - .byte 0x00, 0x01, 0x32 - .byte 0x2E, 0x1E, 0x37 - .byte 0x0A, 0x22, 0x1F - .byte 0x05, 0x26, 0x2E - .byte 0x12, 0x17, 0x1E - .byte 0x1A, 0x03, 0x11 - .byte 0x05, 0x11, 0x18 - .byte 0x05, 0x27, 0x2F - .byte 0x1A, 0x3F, 0x12 - .byte 0x22, 0x3F, 0x16 - .byte 0x2B, 0x2F, 0x2E - .byte 0x11, 0x02, 0x2D - .byte 0x23, 0x0D, 0x28 - .byte 0x17, 0x0C, 0x19 - .byte 0x2F, 0x0E, 0x13 - .byte 0x30, 0x18, 0x20 - .byte 0x2D, 0x28, 0x22 - .byte 0x01, 0x03, 0x19 - .byte 0x0E, 0x2A, 0x2B - .byte 0x22, 0x15, 0x25 - .byte 0x22, 0x0A, 0x26 - .byte 0x39, 0x06, 0x23 - .byte 0x16, 0x07, 0x2F - .byte 0x22, 0x3A, 0x1B - .byte 0x3B, 0x36, 0x35 - .byte 0x0A, 0x2B, 0x24 - .byte 0x36, 0x09, 0x12 - .byte 0x1C, 0x2F, 0x23 - .byte 0x2E, 0x38, 0x2C - .byte 0x05, 0x2A, 0x20 - .byte 0x07, 0x14, 0x32 - .byte 0x31, 0x08, 0x17 - .byte 0x1A, 0x24, 0x2D - .byte 0x22, 0x0A, 0x16 - .byte 0x1B, 0x26, 0x2B - .byte 0x29, 0x16, 0x11 - .byte 0x35, 0x08, 0x14 - .byte 0x1E, 0x08, 0x14 - .byte 0x05, 0x31, 0x14 - .byte 0x38, 0x31, 0x17 - .byte 0x34, 0x33, 0x12 - .byte 0x11, 0x09, 0x1F - .byte 0x28, 0x3D, 0x32 - .byte 0x35, 0x03, 0x1E - .byte 0x3C, 0x2B, 0x2E - .byte 0x10, 0x01, 0x17 - .byte 0x03, 0x3E, 0x22 - .byte 0x17, 0x18, 0x34 - .byte 0x08, 0x29, 0x19 - .byte 0x03, 0x24, 0x28 - .byte 0x3D, 0x33, 0x2F - .byte 0x31, 0x24, 0x19 - .byte 0x1B, 0x18, 0x26 - .byte 0x07, 0x0D, 0x25 - .byte 0x2D, 0x3F, 0x12 - .byte 0x2F, 0x15, 0x25 - .byte 0x29, 0x0F, 0x12 - .byte 0x07, 0x2C, 0x12 - .byte 0x2C, 0x0B, 0x26 - .byte 0x12, 0x1A, 0x16 - .byte 0x00, 0x0B, 0x2F - .byte 0x16, 0x35, 0x24 - .byte 0x1F, 0x1C, 0x22 - .byte 0x29, 0x33, 0x27 - .byte 0x3B, 0x30, 0x17 - .byte 0x11, 0x06, 0x35 - .byte 0x3E, 0x31, 0x2F - .byte 0x11, 0x3A, 0x25 - .byte 0x2A, 0x02, 0x19 - .byte 0x33, 0x18, 0x35 - .byte 0x2A, 0x20, 0x21 - .byte 0x2E, 0x32, 0x1B - .byte 0x3B, 0x1F, 0x23 - .byte 0x39, 0x29, 0x2A - .byte 0x2E, 0x31, 0x29 - .byte 0x2A, 0x0E, 0x2D - .byte 0x2D, 0x00, 0x1F - .byte 0x38, 0x28, 0x1B - .byte 0x14, 0x3B, 0x2B - .byte 0x2E, 0x04, 0x26 - .byte 0x36, 0x30, 0x11 - .byte 0x3B, 0x21, 0x2D - .byte 0x2B, 0x3F, 0x1B - .byte 0x20, 0x13, 0x31 - .byte 0x33, 0x0C, 0x30 - .byte 0x22, 0x2B, 0x2B - .byte 0x16, 0x02, 0x1E - .byte 0x1C, 0x12, 0x1C - .byte 0x0F, 0x3C, 0x36 - .byte 0x38, 0x10, 0x2D - .byte 0x18, 0x2F, 0x2D - .byte 0x35, 0x3B, 0x11 - .byte 0x37, 0x31, 0x13 - .byte 0x13, 0x3D, 0x2F - .byte 0x1E, 0x2C, 0x33 - .byte 0x2E, 0x37, 0x12 - .byte 0x3C, 0x1F, 0x33 - .byte 0x32, 0x2A, 0x27 - .byte 0x0D, 0x3B, 0x1C - .byte 0x35, 0x2A, 0x27 - .byte 0x09, 0x3D, 0x27 - .byte 0x12, 0x0B, 0x18 - .byte 0x0C, 0x15, 0x1D - .byte 0x20, 0x01, 0x1C - .byte 0x08, 0x3B, 0x1C - .byte 0x12, 0x37, 0x33 - .byte 0x15, 0x03, 0x2C - .byte 0x2A, 0x3B, 0x31 - .byte 0x0F, 0x04, 0x35 - .byte 0x08, 0x17, 0x33 - .byte 0x38, 0x3D, 0x2A - .byte 0x2F, 0x35, 0x16 - .byte 0x10, 0x35, 0x16 - .byte 0x23, 0x13, 0x2C - .byte 0x2F, 0x06, 0x20 - .byte 0x27, 0x3A, 0x24 - .byte 0x00, 0x1C, 0x2A - .byte 0x03, 0x39, 0x1D - .byte 0x28, 0x07, 0x1A - .byte 0x20, 0x0A, 0x37 - .byte 0x07, 0x35, 0x2D - .byte 0x15, 0x2F, 0x2C - .byte 0x10, 0x2C, 0x23 - .byte 0x3F, 0x29, 0x14 - .byte 0x2A, 0x21, 0x36 - .byte 0x34, 0x1A, 0x2C - .byte 0x1C, 0x3D, 0x33 - .byte 0x38, 0x2B, 0x22 - .byte 0x35, 0x28, 0x1F - .byte 0x3D, 0x0F, 0x1C - .byte 0x1E, 0x3E, 0x1B - .byte 0x0C, 0x3E, 0x1F - .byte 0x2B, 0x31, 0x2C - .byte 0x32, 0x39, 0x11 - .byte 0x05, 0x09, 0x11 - .byte 0x04, 0x38, 0x2A - .byte 0x32, 0x00, 0x16 - .byte 0x13, 0x0B, 0x31 - .byte 0x34, 0x2A, 0x13 - .byte 0x2C, 0x22, 0x21 - .byte 0x39, 0x2F, 0x15 - .byte 0x37, 0x28, 0x1E - .byte 0x07, 0x3B, 0x2D - .byte 0x11, 0x03, 0x28 - .byte 0x2D, 0x30, 0x1E - .byte 0x31, 0x11, 0x11 - .byte 0x23, 0x01, 0x1E - .byte 0x3D, 0x31, 0x34 - .byte 0x1C, 0x02, 0x34 - .byte 0x21, 0x0E, 0x25 - .byte 0x3D, 0x07, 0x17 - .byte 0x33, 0x15, 0x10 - .byte 0x29, 0x32, 0x32 - .byte 0x18, 0x1F, 0x30 - .byte 0x2D, 0x3B, 0x30 - .byte 0x27, 0x3E, 0x16 - .byte 0x31, 0x15, 0x12 - .byte 0x30, 0x25, 0x17 - .byte 0x33, 0x06, 0x34 - .byte 0x00, 0x29, 0x18 - .byte 0x3C, 0x03, 0x12 - .byte 0x2C, 0x0C, 0x11 - .byte 0x09, 0x30, 0x30 - .byte 0x10, 0x0E, 0x11 - .byte 0x27, 0x16, 0x1B - .byte 0x0C, 0x3B, 0x2E - .byte 0x2B, 0x33, 0x1E - .byte 0x13, 0x2D, 0x2D - .byte 0x11, 0x24, 0x29 - .byte 0x34, 0x3E, 0x2B - .byte 0x24, 0x1E, 0x21 - .byte 0x27, 0x1A, 0x2D - .byte 0x04, 0x39, 0x16 - .byte 0x3E, 0x33, 0x26 - .byte 0x1B, 0x2E, 0x25 - .byte 0x0C, 0x06, 0x19 - .byte 0x25, 0x19, 0x18 - .byte 0x1D, 0x33, 0x33 - .byte 0x1D, 0x28, 0x2D - .byte 0x1C, 0x10, 0x2A - .byte 0x1F, 0x35, 0x1E - .byte 0x34, 0x02, 0x10 - .byte 0x2B, 0x3A, 0x14 - .byte 0x0D, 0x0B, 0x15 - .byte 0x0C, 0x2C, 0x10 - .byte 0x37, 0x3A, 0x19 - .byte 0x06, 0x13, 0x17 - .byte 0x24, 0x10, 0x25 - .byte 0x24, 0x04, 0x1E - .byte 0x00, 0x35, 0x34 - .byte 0x3A, 0x00, 0x37 - .byte 0x3C, 0x07, 0x1A - .byte 0x2B, 0x28, 0x36 - .byte 0x34, 0x39, 0x2F - .byte 0x28, 0x09, 0x1F - .byte 0x38, 0x31, 0x30 - .byte 0x16, 0x25, 0x31 - .byte 0x18, 0x28, 0x31 - .byte 0x18, 0x0C, 0x22 - .byte 0x06, 0x39, 0x2D - .byte 0x3D, 0x20, 0x24 - .byte 0x2E, 0x27, 0x21 - .byte 0x3E, 0x18, 0x18 - .byte 0x15, 0x3C, 0x24 - .byte 0x06, 0x1B, 0x26 - .byte 0x15, 0x0E, 0x22 - .byte 0x0A, 0x0D, 0x1F - .byte 0x18, 0x16, 0x34 - .byte 0x10, 0x28, 0x21 - .byte 0x20, 0x11, 0x11 - .byte 0x36, 0x32, 0x15 - .byte 0x3B, 0x2E, 0x24 - .byte 0x1F, 0x2D, 0x12 - .byte 0x36, 0x2E, 0x20 - .byte 0x0B, 0x17, 0x33 - .byte 0x26, 0x03, 0x1F - .byte 0x08, 0x19, 0x31 - .byte 0x2A, 0x18, 0x25 - .byte 0x35, 0x2D, 0x2D - .byte 0x30, 0x38, 0x18 - .byte 0x1C, 0x25, 0x14 - .byte 0x1C, 0x22, 0x28 - .byte 0x08, 0x23, 0x21 - .byte 0x26, 0x1E, 0x30 - .byte 0x19, 0x0F, 0x15 - .byte 0x10, 0x2F, 0x22 - .byte 0x12, 0x02, 0x25 - .byte 0x3C, 0x01, 0x1D - .byte 0x0E, 0x14, 0x18 - .byte 0x0D, 0x18, 0x17 - .byte 0x22, 0x0B, 0x31 - .byte 0x13, 0x34, 0x21 - .byte 0x0F, 0x2D, 0x36 - .byte 0x39, 0x1F, 0x25 - .byte 0x18, 0x10, 0x1F - .byte 0x2D, 0x20, 0x20 - .byte 0x19, 0x0B, 0x31 - .byte 0x33, 0x13, 0x14 - .byte 0x2E, 0x11, 0x21 - .byte 0x2D, 0x0A, 0x37 - .byte 0x07, 0x15, 0x1B - .byte 0x32, 0x04, 0x32 - .byte 0x06, 0x18, 0x1B - .byte 0x13, 0x24, 0x12 - .byte 0x36, 0x22, 0x16 - .byte 0x1D, 0x29, 0x1C - .byte 0x35, 0x17, 0x21 - .byte 0x36, 0x17, 0x2B - .byte 0x35, 0x32, 0x19 - .byte 0x2A, 0x0F, 0x2E - .byte 0x10, 0x00, 0x34 - .byte 0x02, 0x0E, 0x28 - .byte 0x31, 0x32, 0x32 - .byte 0x3B, 0x05, 0x20 - .byte 0x36, 0x26, 0x12 - .byte 0x34, 0x06, 0x34 - .byte 0x1E, 0x31, 0x32 - .byte 0x35, 0x05, 0x34 - .byte 0x1E, 0x13, 0x15 - .byte 0x15, 0x14, 0x2C - .byte 0x29, 0x1C, 0x18 - .byte 0x24, 0x24, 0x12 - .byte 0x22, 0x29, 0x18 - .byte 0x34, 0x36, 0x30 - .byte 0x1E, 0x01, 0x23 - .byte 0x0C, 0x3C, 0x24 - .byte 0x0A, 0x3D, 0x16 - .byte 0x27, 0x1E, 0x23 - .byte 0x15, 0x02, 0x12 - .byte 0x11, 0x19, 0x2A - .byte 0x1D, 0x31, 0x15 - .byte 0x03, 0x3B, 0x2A - .byte 0x21, 0x19, 0x2C - .byte 0x0A, 0x23, 0x11 - .byte 0x25, 0x11, 0x1A - .byte 0x1A, 0x0A, 0x34 - .byte 0x3B, 0x0B, 0x33 - .byte 0x21, 0x0B, 0x37 - .byte 0x01, 0x31, 0x28 - .byte 0x35, 0x1D, 0x27 - .byte 0x2C, 0x30, 0x31 - .byte 0x2E, 0x39, 0x2D - .byte 0x30, 0x05, 0x2C - .byte 0x12, 0x2A, 0x2B - .byte 0x39, 0x22, 0x20 - .byte 0x15, 0x34, 0x1C - .byte 0x1C, 0x01, 0x15 - .byte 0x20, 0x16, 0x22 - .byte 0x13, 0x04, 0x18 - .byte 0x1E, 0x13, 0x10 - .byte 0x25, 0x33, 0x15 - .byte 0x39, 0x03, 0x31 - .byte 0x3F, 0x36, 0x18 - .byte 0x14, 0x23, 0x10 - .byte 0x2F, 0x1E, 0x1F - .byte 0x1F, 0x17, 0x2C - .byte 0x02, 0x16, 0x31 - .byte 0x20, 0x18, 0x30 - .byte 0x2E, 0x18, 0x37 - .byte 0x3B, 0x0E, 0x30 - .byte 0x10, 0x39, 0x24 - .byte 0x26, 0x39, 0x1E - .byte 0x30, 0x26, 0x2E - .byte 0x12, 0x01, 0x14 - .byte 0x37, 0x2A, 0x2E - .byte 0x21, 0x06, 0x1D - .byte 0x2A, 0x16, 0x32 - .byte 0x09, 0x38, 0x1C - .byte 0x07, 0x22, 0x17 - .byte 0x3B, 0x2D, 0x15 - .byte 0x07, 0x1E, 0x2E - .byte 0x1B, 0x2E, 0x1D - .byte 0x04, 0x09, 0x30 - .byte 0x30, 0x2D, 0x37 - .byte 0x2D, 0x34, 0x24 - .byte 0x18, 0x24, 0x25 - .byte 0x0E, 0x2D, 0x26 - .byte 0x23, 0x0A, 0x16 - .byte 0x12, 0x2D, 0x11 - .byte 0x21, 0x28, 0x2E - .byte 0x0F, 0x01, 0x21 - .byte 0x01, 0x31, 0x12 - .byte 0x3F, 0x1B, 0x1E - .byte 0x21, 0x25, 0x2B - .byte 0x26, 0x18, 0x13 - .byte 0x15, 0x2D, 0x34 - .byte 0x23, 0x21, 0x36 - .byte 0x0E, 0x2E, 0x1C - .byte 0x14, 0x22, 0x1C - .byte 0x2C, 0x0B, 0x28 - .byte 0x1A, 0x18, 0x21 - .byte 0x21, 0x07, 0x1A - .byte 0x24, 0x26, 0x29 - .byte 0x2B, 0x0A, 0x34 - .byte 0x3E, 0x27, 0x33 - .byte 0x12, 0x34, 0x1B - .byte 0x1F, 0x01, 0x2A - .byte 0x2E, 0x06, 0x23 - .byte 0x2F, 0x1F, 0x14 - .byte 0x18, 0x06, 0x26 - .byte 0x31, 0x1F, 0x2B - .byte 0x22, 0x26, 0x2E - .byte 0x1E, 0x15, 0x16 - .byte 0x20, 0x22, 0x28 - .byte 0x15, 0x37, 0x12 - .byte 0x25, 0x04, 0x2C - .byte 0x1F, 0x04, 0x2E - .byte 0x0C, 0x13, 0x18 - .byte 0x07, 0x0B, 0x36 - .byte 0x1D, 0x1C, 0x2A - .byte 0x30, 0x22, 0x1C - .byte 0x2E, 0x12, 0x2F - .byte 0x2B, 0x21, 0x1E - .byte 0x16, 0x38, 0x30 - .byte 0x04, 0x02, 0x16 - .byte 0x05, 0x14, 0x20 - .byte 0x38, 0x3C, 0x33 - .byte 0x21, 0x1B, 0x2F - .byte 0x14, 0x2A, 0x27 - .byte 0x38, 0x14, 0x1B - .byte 0x2B, 0x1F, 0x2B - .byte 0x29, 0x2B, 0x25 - .byte 0x27, 0x36, 0x21 - .byte 0x11, 0x22, 0x1B - .byte 0x29, 0x03, 0x1B - .byte 0x18, 0x24, 0x28 - .byte 0x21, 0x2D, 0x36 - .byte 0x3C, 0x2C, 0x24 - .byte 0x33, 0x17, 0x1F - .byte 0x2A, 0x3A, 0x21 - .byte 0x0A, 0x23, 0x37 - .byte 0x00, 0x0B, 0x21 - .byte 0x11, 0x38, 0x19 - .byte 0x0F, 0x0E, 0x1C - .byte 0x1F, 0x0F, 0x37 - .byte 0x3C, 0x10, 0x37 - .byte 0x38, 0x31, 0x35 - .byte 0x07, 0x15, 0x28 - .byte 0x1E, 0x2E, 0x19 - .byte 0x26, 0x10, 0x33 - .byte 0x3D, 0x35, 0x2F - .byte 0x3A, 0x04, 0x34 - .byte 0x0D, 0x18, 0x1A - .byte 0x01, 0x2D, 0x15 - .byte 0x3D, 0x1A, 0x17 - .byte 0x17, 0x3F, 0x32 - .byte 0x0B, 0x21, 0x11 - .byte 0x1E, 0x26, 0x2B - .byte 0x0D, 0x19, 0x24 - .byte 0x2E, 0x04, 0x1B - .byte 0x1B, 0x33, 0x20 - .byte 0x15, 0x21, 0x1D - .byte 0x1F, 0x04, 0x21 - .byte 0x0F, 0x12, 0x1F - .byte 0x2D, 0x2A, 0x32 - .byte 0x03, 0x37, 0x1F - .byte 0x35, 0x07, 0x27 - .byte 0x24, 0x1F, 0x31 - .byte 0x2F, 0x30, 0x15 - .byte 0x06, 0x00, 0x24 - .byte 0x0B, 0x22, 0x1A - .byte 0x0C, 0x3B, 0x29 - .byte 0x14, 0x1A, 0x17 - .byte 0x37, 0x20, 0x25 - .byte 0x3F, 0x26, 0x37 - .byte 0x3A, 0x3E, 0x10 - .byte 0x22, 0x04, 0x11 - .byte 0x28, 0x12, 0x1C - .byte 0x03, 0x2E, 0x2E - .byte 0x0E, 0x38, 0x28 - .byte 0x01, 0x29, 0x22 - .byte 0x1E, 0x33, 0x19 - .byte 0x06, 0x21, 0x27 - .byte 0x33, 0x19, 0x1A - .byte 0x02, 0x05, 0x17 - .byte 0x11, 0x11, 0x2C - .byte 0x1F, 0x26, 0x1E - .byte 0x39, 0x1F, 0x28 - .byte 0x2E, 0x2F, 0x12 - .byte 0x22, 0x34, 0x13 - .byte 0x3B, 0x26, 0x2F - .byte 0x34, 0x00, 0x14 - .byte 0x10, 0x31, 0x11 - .byte 0x1D, 0x2D, 0x2A - .byte 0x08, 0x08, 0x37 - .byte 0x15, 0x18, 0x34 - .byte 0x04, 0x2B, 0x24 - .byte 0x2F, 0x1E, 0x27 - .byte 0x22, 0x2A, 0x24 - .byte 0x07, 0x14, 0x25 - .byte 0x01, 0x27, 0x19 - .byte 0x29, 0x0A, 0x29 - .byte 0x3D, 0x1C, 0x2F - .byte 0x0D, 0x1F, 0x1C - .byte 0x24, 0x3D, 0x32 - .byte 0x36, 0x1D, 0x24 - .byte 0x14, 0x21, 0x16 - .byte 0x1A, 0x0D, 0x29 - .byte 0x3F, 0x2B, 0x2A - .byte 0x1A, 0x3E, 0x35 - .byte 0x11, 0x28, 0x18 - .byte 0x32, 0x05, 0x15 - .byte 0x21, 0x2E, 0x34 - .byte 0x2D, 0x14, 0x2A - .byte 0x3C, 0x08, 0x37 - .byte 0x3F, 0x34, 0x1E - .byte 0x27, 0x24, 0x1C - .byte 0x16, 0x16, 0x33 - .byte 0x29, 0x3B, 0x19 - .byte 0x36, 0x2F, 0x1C - .byte 0x03, 0x25, 0x2C - .byte 0x0B, 0x16, 0x36 - .byte 0x1C, 0x1D, 0x1B - .byte 0x2C, 0x27, 0x1B - .byte 0x0B, 0x1F, 0x2B - .byte 0x08, 0x10, 0x27 - .byte 0x3F, 0x25, 0x2F - .byte 0x33, 0x13, 0x1F - .byte 0x04, 0x31, 0x37 - .byte 0x0E, 0x2F, 0x12 - .byte 0x08, 0x23, 0x20 - .byte 0x3A, 0x1A, 0x1E - .byte 0x2F, 0x0B, 0x1F - .byte 0x1E, 0x20, 0x19 - .byte 0x23, 0x3B, 0x14 - .byte 0x25, 0x00, 0x27 - .byte 0x14, 0x04, 0x25 - .byte 0x36, 0x1A, 0x2B - .byte 0x27, 0x21, 0x15 - .byte 0x28, 0x13, 0x2C - .byte 0x0E, 0x3C, 0x35 - .byte 0x0C, 0x2D, 0x2B - .byte 0x37, 0x16, 0x15 - .byte 0x29, 0x15, 0x1D - .byte 0x17, 0x34, 0x36 - .byte 0x09, 0x0A, 0x31 - .byte 0x37, 0x22, 0x28 - .byte 0x17, 0x2B, 0x35 - .byte 0x14, 0x2B, 0x12 - .byte 0x08, 0x13, 0x1F - .byte 0x31, 0x13, 0x28 - .byte 0x06, 0x07, 0x35 - .byte 0x23, 0x3A, 0x29 - .byte 0x0F, 0x24, 0x2E - .byte 0x07, 0x35, 0x26 - .byte 0x0E, 0x12, 0x15 - .byte 0x23, 0x33, 0x2C - .byte 0x0E, 0x21, 0x26 - .byte 0x1C, 0x12, 0x25 - .byte 0x23, 0x1D, 0x2F - .byte 0x04, 0x35, 0x33 - .byte 0x16, 0x01, 0x24 - .byte 0x3D, 0x2C, 0x2E - .byte 0x35, 0x0A, 0x25 - .byte 0x11, 0x13, 0x25 - .byte 0x1B, 0x1B, 0x15 - .byte 0x15, 0x39, 0x10 - .byte 0x0B, 0x35, 0x24 - .byte 0x3A, 0x27, 0x30 - .byte 0x2E, 0x2F, 0x15 - .byte 0x10, 0x1F, 0x35 - .byte 0x1B, 0x28, 0x35 - .byte 0x26, 0x30, 0x37 - .byte 0x34, 0x37, 0x2B - .byte 0x0F, 0x30, 0x29 - .byte 0x2E, 0x3F, 0x2B - .byte 0x38, 0x34, 0x2B - .byte 0x2B, 0x2F, 0x25 - .byte 0x0D, 0x28, 0x2A - .byte 0x33, 0x18, 0x10 - .byte 0x21, 0x12, 0x11 - .byte 0x1F, 0x22, 0x34 - .byte 0x11, 0x25, 0x23 - .byte 0x21, 0x3F, 0x11 - .byte 0x26, 0x27, 0x25 - .byte 0x28, 0x36, 0x12 - .byte 0x15, 0x26, 0x32 - .byte 0x11, 0x18, 0x24 - .byte 0x32, 0x25, 0x37 - .byte 0x27, 0x3A, 0x33 - .byte 0x35, 0x07, 0x1C - .byte 0x1A, 0x0E, 0x2A - .byte 0x1E, 0x2F, 0x1F - .byte 0x00, 0x2E, 0x21 - .byte 0x1B, 0x3C, 0x14 - .byte 0x2F, 0x3A, 0x2F - .byte 0x3E, 0x38, 0x15 - .byte 0x1A, 0x13, 0x2F - .byte 0x29, 0x0D, 0x2F - .byte 0x37, 0x17, 0x18 - .byte 0x30, 0x1C, 0x35 - .byte 0x15, 0x34, 0x14 - .byte 0x28, 0x11, 0x2C - .byte 0x2C, 0x25, 0x2A - .byte 0x20, 0x3F, 0x28 - .byte 0x0C, 0x34, 0x1B - .byte 0x30, 0x2E, 0x25 - .byte 0x37, 0x1C, 0x24 - .byte 0x1F, 0x25, 0x26 - .byte 0x0C, 0x19, 0x34 - .byte 0x18, 0x10, 0x35 - .byte 0x0A, 0x13, 0x11 - .byte 0x25, 0x13, 0x20 - .byte 0x13, 0x19, 0x11 - .byte 0x20, 0x28, 0x1D - .byte 0x3E, 0x30, 0x1B - .byte 0x23, 0x24, 0x21 - .byte 0x0D, 0x23, 0x23 - .byte 0x1D, 0x28, 0x2E - .byte 0x2D, 0x12, 0x1F - .byte 0x0E, 0x2E, 0x2B - .byte 0x0B, 0x31, 0x32 - .byte 0x24, 0x3C, 0x2C - .byte 0x13, 0x3C, 0x12 - .byte 0x28, 0x16, 0x2A - .byte 0x05, 0x0C, 0x32 - .byte 0x39, 0x0B, 0x32 - .byte 0x21, 0x04, 0x14 - .byte 0x10, 0x31, 0x32 - .byte 0x12, 0x1F, 0x23 - .byte 0x39, 0x2E, 0x2E - .byte 0x22, 0x3D, 0x27 - .byte 0x0C, 0x1E, 0x18 - .byte 0x25, 0x00, 0x17 - .byte 0x06, 0x31, 0x14 - .byte 0x13, 0x21, 0x1A - .byte 0x14, 0x20, 0x35 - .byte 0x0A, 0x3B, 0x25 - .byte 0x33, 0x08, 0x28 - .byte 0x3D, 0x02, 0x33 - .byte 0x23, 0x00, 0x13 - .byte 0x22, 0x21, 0x28 - .byte 0x30, 0x14, 0x2E - .byte 0x14, 0x32, 0x36 - .byte 0x39, 0x23, 0x1E - .byte 0x1C, 0x11, 0x30 - .byte 0x37, 0x16, 0x30 - .byte 0x15, 0x31, 0x1F - .byte 0x34, 0x28, 0x2C - .byte 0x35, 0x05, 0x29 - .byte 0x37, 0x33, 0x2A - .byte 0x1C, 0x17, 0x2E - .byte 0x10, 0x06, 0x16 - .byte 0x32, 0x1F, 0x2F - .byte 0x00, 0x29, 0x1E - .byte 0x04, 0x01, 0x16 - .byte 0x3B, 0x23, 0x1E - .byte 0x1B, 0x34, 0x2A - .byte 0x30, 0x11, 0x2B - .byte 0x03, 0x00, 0x1F - .byte 0x1D, 0x37, 0x1A - .byte 0x3A, 0x18, 0x25 - .byte 0x1C, 0x16, 0x2C - .byte 0x04, 0x3F, 0x33 - .byte 0x26, 0x23, 0x2D - .byte 0x15, 0x2C, 0x27 - .byte 0x02, 0x35, 0x27 - .byte 0x07, 0x35, 0x33 - .byte 0x1A, 0x0C, 0x10 - .byte 0x28, 0x26, 0x2C - .byte 0x2F, 0x36, 0x16 - .byte 0x37, 0x0B, 0x27 - .byte 0x1B, 0x3D, 0x18 - .byte 0x27, 0x1F, 0x20 - .byte 0x2B, 0x2A, 0x33 - .byte 0x0B, 0x0F, 0x20 - .byte 0x35, 0x3C, 0x2F - .byte 0x33, 0x21, 0x15 - .byte 0x2D, 0x26, 0x34 - .byte 0x1F, 0x1A, 0x21 - .byte 0x2F, 0x2C, 0x2A - .byte 0x1A, 0x32, 0x1A - .byte 0x3B, 0x3F, 0x21 - .byte 0x13, 0x3F, 0x13 - .byte 0x0F, 0x24, 0x22 - .byte 0x14, 0x1B, 0x10 - .byte 0x21, 0x06, 0x28 - .byte 0x25, 0x34, 0x10 - .byte 0x2E, 0x0E, 0x14 - .byte 0x3C, 0x3E, 0x25 - .byte 0x16, 0x06, 0x30 - .byte 0x0B, 0x04, 0x1F - .byte 0x3E, 0x02, 0x24 - .byte 0x0C, 0x17, 0x25 - .byte 0x2B, 0x3C, 0x2D - .byte 0x15, 0x36, 0x33 - .byte 0x18, 0x23, 0x2A - .byte 0x1D, 0x10, 0x2A - .byte 0x35, 0x17, 0x28 - .byte 0x00, 0x37, 0x24 - .byte 0x0A, 0x3B, 0x15 - .byte 0x1D, 0x0B, 0x1F - .byte 0x3C, 0x31, 0x25 - .byte 0x1D, 0x0F, 0x1D - .byte 0x20, 0x13, 0x34 - .byte 0x11, 0x2B, 0x2E - .byte 0x23, 0x0C, 0x2E - .byte 0x24, 0x02, 0x14 - .byte 0x31, 0x16, 0x19 - .byte 0x0E, 0x23, 0x35 - .byte 0x1A, 0x10, 0x16 - .byte 0x14, 0x04, 0x19 - .byte 0x2D, 0x27, 0x37 - .byte 0x33, 0x02, 0x31 - .byte 0x02, 0x04, 0x16 - .byte 0x0D, 0x22, 0x25 - .byte 0x25, 0x00, 0x16 - .byte 0x2A, 0x3F, 0x26 - .byte 0x20, 0x0C, 0x12 - .byte 0x2F, 0x2E, 0x35 - .byte 0x1B, 0x0D, 0x22 - .byte 0x1E, 0x01, 0x34 - .byte 0x05, 0x22, 0x21 - .byte 0x34, 0x2A, 0x32 - .byte 0x0B, 0x09, 0x1D - .byte 0x3F, 0x32, 0x2F - .byte 0x3D, 0x18, 0x2D - .byte 0x0B, 0x38, 0x36 - .byte 0x39, 0x17, 0x28 - .byte 0x34, 0x04, 0x24 - .byte 0x36, 0x0E, 0x2A - .byte 0x38, 0x01, 0x14 - .byte 0x3C, 0x24, 0x22 - .byte 0x21, 0x03, 0x18 - .byte 0x32, 0x2F, 0x12 - .byte 0x29, 0x24, 0x31 - .byte 0x0A, 0x3B, 0x12 - .byte 0x1A, 0x1C, 0x20 - .byte 0x30, 0x31, 0x1B - .byte 0x1A, 0x21, 0x10 - .byte 0x05, 0x29, 0x10 - .byte 0x26, 0x2D, 0x13 - .byte 0x16, 0x0C, 0x1D - .byte 0x2B, 0x06, 0x1B - .byte 0x06, 0x12, 0x14 - .byte 0x38, 0x0F, 0x35 - .byte 0x23, 0x3A, 0x2C - .byte 0x00, 0x19, 0x33 - .byte 0x29, 0x14, 0x2D - .byte 0x2A, 0x21, 0x29 - .byte 0x14, 0x31, 0x14 - .byte 0x1A, 0x06, 0x1E - .byte 0x18, 0x1B, 0x28 - .byte 0x3B, 0x16, 0x29 - .byte 0x15, 0x1E, 0x12 - .byte 0x34, 0x0A, 0x14 - .byte 0x1B, 0x05, 0x27 - .byte 0x0B, 0x01, 0x26 - .byte 0x2A, 0x22, 0x35 - .byte 0x21, 0x20, 0x18 - .byte 0x20, 0x37, 0x17 - .byte 0x14, 0x1F, 0x11 - .byte 0x1D, 0x11, 0x25 - .byte 0x24, 0x2B, 0x2F - .byte 0x07, 0x3F, 0x1F - .byte 0x2C, 0x25, 0x25 - .byte 0x2A, 0x29, 0x18 - .byte 0x11, 0x24, 0x28 - .byte 0x31, 0x2C, 0x2A - .byte 0x39, 0x0B, 0x26 - .byte 0x28, 0x10, 0x26 - .byte 0x22, 0x06, 0x16 - .byte 0x09, 0x2C, 0x13 - .byte 0x34, 0x19, 0x15 - .byte 0x3A, 0x12, 0x21 - .byte 0x1D, 0x38, 0x23 - .byte 0x12, 0x25, 0x24 - .byte 0x21, 0x30, 0x12 - .byte 0x37, 0x1A, 0x12 - .byte 0x24, 0x3B, 0x25 - .byte 0x32, 0x15, 0x23 - .byte 0x0D, 0x1A, 0x10 - .byte 0x16, 0x2E, 0x26 - .byte 0x1D, 0x14, 0x16 - .byte 0x3E, 0x2E, 0x1F - .byte 0x0A, 0x16, 0x10 - .byte 0x1D, 0x30, 0x2B - .byte 0x04, 0x3A, 0x19 - .byte 0x08, 0x2D, 0x2E - .byte 0x28, 0x1E, 0x33 - .byte 0x0A, 0x12, 0x2E - .byte 0x0D, 0x03, 0x2F - .byte 0x26, 0x3A, 0x1E - .byte 0x35, 0x3B, 0x2A - .byte 0x03, 0x1A, 0x18 - .byte 0x3F, 0x0B, 0x27 - .byte 0x04, 0x05, 0x34 - .byte 0x36, 0x0B, 0x27 - .byte 0x3B, 0x17, 0x11 - .byte 0x0D, 0x27, 0x26 - .byte 0x2C, 0x1F, 0x20 - .byte 0x26, 0x10, 0x20 - .byte 0x25, 0x23, 0x2D - .byte 0x37, 0x09, 0x13 - .byte 0x14, 0x17, 0x2D - .byte 0x2E, 0x3D, 0x23 - .byte 0x1D, 0x1A, 0x1F - .byte 0x21, 0x33, 0x2E - .byte 0x28, 0x17, 0x13 - .byte 0x26, 0x3C, 0x36 - .byte 0x14, 0x1A, 0x33 - .byte 0x32, 0x20, 0x2B - .byte 0x19, 0x3E, 0x20 - .byte 0x0C, 0x02, 0x2D - .byte 0x3C, 0x3C, 0x2A - .byte 0x30, 0x30, 0x28 - .byte 0x25, 0x3F, 0x1E - .byte 0x03, 0x17, 0x1E - .byte 0x35, 0x11, 0x1C - .byte 0x1B, 0x14, 0x2A - .byte 0x28, 0x3A, 0x23 - .byte 0x0E, 0x1F, 0x12 - .byte 0x36, 0x21, 0x20 - .byte 0x07, 0x3B, 0x10 - .byte 0x23, 0x19, 0x34 - .byte 0x0D, 0x2E, 0x18 - .byte 0x3F, 0x20, 0x25 - .byte 0x3E, 0x3B, 0x15 - .byte 0x0B, 0x2E, 0x12 - .byte 0x37, 0x0B, 0x23 - .byte 0x3D, 0x32, 0x1F - .byte 0x16, 0x03, 0x27 - .byte 0x14, 0x0C, 0x21 - .byte 0x18, 0x03, 0x30 - .byte 0x3E, 0x21, 0x13 - .byte 0x0F, 0x00, 0x32 - .byte 0x3F, 0x23, 0x16 - .byte 0x0E, 0x31, 0x1D - .byte 0x18, 0x1C, 0x1D - .byte 0x30, 0x0E, 0x1E - .byte 0x21, 0x20, 0x23 - .byte 0x3F, 0x0C, 0x1E - .byte 0x14, 0x33, 0x22 - .byte 0x22, 0x21, 0x15 - .byte 0x36, 0x05, 0x1E - .byte 0x1D, 0x31, 0x14 - .byte 0x20, 0x11, 0x37 - .byte 0x0D, 0x33, 0x19 - .byte 0x25, 0x05, 0x36 - .byte 0x1E, 0x31, 0x20 - .byte 0x35, 0x3A, 0x2F - .byte 0x32, 0x2F, 0x30 - .byte 0x14, 0x23, 0x2D - .byte 0x35, 0x1E, 0x29 - .byte 0x05, 0x05, 0x1B - .byte 0x09, 0x1F, 0x26 - .byte 0x2F, 0x0B, 0x15 - .byte 0x15, 0x11, 0x13 - .byte 0x29, 0x1B, 0x18 - .byte 0x1C, 0x13, 0x35 - .byte 0x34, 0x31, 0x23 - .byte 0x27, 0x3F, 0x2F - .byte 0x09, 0x30, 0x19 - .byte 0x23, 0x12, 0x34 - .byte 0x02, 0x2A, 0x21 - .byte 0x09, 0x3C, 0x1D - .byte 0x0C, 0x02, 0x10 - .byte 0x22, 0x05, 0x17 - .byte 0x22, 0x08, 0x1B - .byte 0x0A, 0x0F, 0x15 - .byte 0x02, 0x11, 0x13 - .byte 0x01, 0x21, 0x22 - .byte 0x16, 0x39, 0x33 - .byte 0x24, 0x38, 0x34 - .byte 0x0F, 0x1E, 0x2B - .byte 0x2B, 0x15, 0x15 - .byte 0x20, 0x22, 0x2E - .byte 0x3A, 0x3F, 0x31 - .byte 0x1A, 0x27, 0x2B - .byte 0x29, 0x34, 0x14 - .byte 0x16, 0x39, 0x2F - .byte 0x13, 0x3E, 0x16 - .byte 0x36, 0x21, 0x30 - .byte 0x00, 0x24, 0x2B - .byte 0x24, 0x21, 0x30 - .byte 0x15, 0x31, 0x13 - .byte 0x10, 0x37, 0x24 - .byte 0x08, 0x07, 0x23 - .byte 0x21, 0x09, 0x25 - .byte 0x05, 0x3C, 0x32 - .byte 0x19, 0x03, 0x25 - .byte 0x0F, 0x29, 0x2B - .byte 0x16, 0x07, 0x13 - .byte 0x3E, 0x3D, 0x25 - .byte 0x36, 0x0B, 0x28 - .byte 0x2E, 0x2B, 0x16 - .byte 0x0C, 0x31, 0x11 - .byte 0x30, 0x13, 0x2D - .byte 0x26, 0x3E, 0x37 - .byte 0x29, 0x2F, 0x2E - .byte 0x15, 0x3D, 0x17 - .byte 0x1C, 0x2E, 0x21 - .byte 0x33, 0x2F, 0x10 - .byte 0x0D, 0x05, 0x1D - .byte 0x1C, 0x1A, 0x12 - .byte 0x0E, 0x18, 0x37 - .byte 0x1B, 0x11, 0x14 - .byte 0x06, 0x14, 0x21 - .byte 0x31, 0x0E, 0x27 - .byte 0x1A, 0x03, 0x10 - .byte 0x00, 0x34, 0x31 - .byte 0x3F, 0x0B, 0x1D - .byte 0x0F, 0x12, 0x1F - .byte 0x1A, 0x15, 0x10 - .byte 0x0F, 0x00, 0x24 - .byte 0x3E, 0x0A, 0x2A - .byte 0x30, 0x2B, 0x24 - .byte 0x26, 0x31, 0x10 - .byte 0x2D, 0x2F, 0x2F - .byte 0x3F, 0x0C, 0x13 - .byte 0x12, 0x0B, 0x16 - .byte 0x15, 0x07, 0x1F - .byte 0x28, 0x10, 0x32 - .byte 0x0F, 0x17, 0x15 - .byte 0x0B, 0x27, 0x33 - .byte 0x34, 0x1D, 0x10 - .byte 0x1C, 0x3A, 0x12 - .byte 0x2C, 0x27, 0x37 - .byte 0x0A, 0x1A, 0x32 - .byte 0x05, 0x1F, 0x21 - .byte 0x24, 0x0D, 0x1F - .byte 0x1C, 0x17, 0x24 - .byte 0x2F, 0x3B, 0x32 - .byte 0x3B, 0x25, 0x10 - .byte 0x03, 0x2F, 0x21 - .byte 0x0C, 0x10, 0x23 - .byte 0x0E, 0x3A, 0x2C - .byte 0x33, 0x03, 0x2C - .byte 0x12, 0x06, 0x1C - .byte 0x2A, 0x37, 0x30 - .byte 0x3F, 0x01, 0x1E - .byte 0x35, 0x16, 0x37 - .byte 0x2C, 0x32, 0x35 - .byte 0x05, 0x11, 0x22 - .byte 0x29, 0x09, 0x20 - .byte 0x2B, 0x0D, 0x1F - .byte 0x18, 0x0D, 0x20 - .byte 0x23, 0x39, 0x16 - .byte 0x0F, 0x3A, 0x18 - .byte 0x21, 0x35, 0x2B - .byte 0x36, 0x26, 0x2B - .byte 0x23, 0x05, 0x2F - .byte 0x1B, 0x08, 0x17 - .byte 0x3E, 0x09, 0x16 - .byte 0x2D, 0x3A, 0x37 - .byte 0x15, 0x35, 0x35 - .byte 0x29, 0x0A, 0x12 - .byte 0x02, 0x39, 0x1F - .byte 0x14, 0x34, 0x33 - .byte 0x17, 0x1D, 0x18 - .byte 0x16, 0x1D, 0x1A - .byte 0x01, 0x39, 0x22 - .byte 0x1E, 0x27, 0x36 - .byte 0x32, 0x14, 0x26 - .byte 0x0A, 0x39, 0x36 - .byte 0x1F, 0x0D, 0x1E - .byte 0x0B, 0x0A, 0x19 - .byte 0x35, 0x1D, 0x34 - .byte 0x03, 0x12, 0x16 - .byte 0x0C, 0x13, 0x2E - .byte 0x0C, 0x34, 0x1E - .byte 0x10, 0x14, 0x1E - .byte 0x23, 0x32, 0x27 - .byte 0x02, 0x10, 0x29 - .byte 0x35, 0x18, 0x33 - .byte 0x33, 0x1D, 0x1A - .byte 0x3C, 0x15, 0x23 - .byte 0x3E, 0x3F, 0x22 - .byte 0x2A, 0x02, 0x2C - .byte 0x28, 0x0A, 0x2F - .byte 0x1A, 0x06, 0x35 - .byte 0x3C, 0x17, 0x2B - .byte 0x03, 0x12, 0x17 - .byte 0x2F, 0x0A, 0x26 - .byte 0x12, 0x38, 0x11 - .byte 0x36, 0x1B, 0x23 - .byte 0x01, 0x39, 0x35 - .byte 0x19, 0x19, 0x17 - .byte 0x09, 0x28, 0x22 - .byte 0x1E, 0x27, 0x2C - .byte 0x35, 0x33, 0x2C - .byte 0x27, 0x25, 0x31 - .byte 0x06, 0x31, 0x2D - .byte 0x1A, 0x39, 0x28 - .byte 0x2D, 0x04, 0x1E - .byte 0x24, 0x3E, 0x1C - .byte 0x3C, 0x30, 0x1B - .byte 0x3F, 0x3E, 0x37 - .byte 0x22, 0x36, 0x11 - .byte 0x00, 0x01, 0x1C - .byte 0x12, 0x1A, 0x10 - .byte 0x12, 0x1E, 0x2C - .byte 0x1F, 0x12, 0x2A - .byte 0x2F, 0x06, 0x19 - .byte 0x35, 0x1A, 0x18 - .byte 0x3B, 0x09, 0x36 - .byte 0x34, 0x1D, 0x13 - .byte 0x02, 0x07, 0x10 - .byte 0x20, 0x2F, 0x1D - .byte 0x0B, 0x03, 0x33 - .byte 0x1C, 0x16, 0x31 - .byte 0x05, 0x13, 0x1B - .byte 0x29, 0x06, 0x13 - .byte 0x30, 0x2D, 0x36 - .byte 0x2A, 0x2D, 0x2C - .byte 0x19, 0x34, 0x1C - .byte 0x0F, 0x15, 0x12 - .byte 0x36, 0x15, 0x2C - .byte 0x3A, 0x06, 0x1C - .byte 0x12, 0x1D, 0x26 - .byte 0x03, 0x38, 0x1D - .byte 0x01, 0x01, 0x2D - .byte 0x17, 0x2E, 0x10 - .byte 0x14, 0x17, 0x1C - .byte 0x34, 0x0F, 0x28 - .byte 0x09, 0x37, 0x1B - .byte 0x28, 0x1D, 0x26 - .byte 0x29, 0x2D, 0x36 - .byte 0x1E, 0x17, 0x28 - .byte 0x15, 0x0F, 0x1C - .byte 0x20, 0x2D, 0x10 - .byte 0x27, 0x16, 0x2E - .byte 0x14, 0x09, 0x12 - .byte 0x3B, 0x3D, 0x21 - .byte 0x25, 0x1A, 0x2C - .byte 0x00, 0x22, 0x36 - .byte 0x0D, 0x30, 0x10 - .byte 0x17, 0x19, 0x1B - .byte 0x00, 0x3B, 0x21 - .byte 0x2A, 0x28, 0x34 - .byte 0x2D, 0x0F, 0x16 - .byte 0x0A, 0x30, 0x28 - .byte 0x06, 0x00, 0x25 - .byte 0x31, 0x2E, 0x2A - .byte 0x14, 0x33, 0x28 - .byte 0x36, 0x10, 0x2E - .byte 0x05, 0x2E, 0x19 - .byte 0x19, 0x1A, 0x15 - .byte 0x2C, 0x14, 0x17 - .byte 0x37, 0x0F, 0x13 - .byte 0x32, 0x17, 0x1B - .byte 0x39, 0x18, 0x32 - .byte 0x2E, 0x32, 0x1E - .byte 0x24, 0x1D, 0x31 - .byte 0x12, 0x1D, 0x2B - .byte 0x14, 0x0C, 0x27 - .byte 0x36, 0x2E, 0x32 - .byte 0x06, 0x0A, 0x1A - .byte 0x28, 0x28, 0x20 - .byte 0x3A, 0x3A, 0x17 - .byte 0x08, 0x27, 0x36 - .byte 0x18, 0x1A, 0x10 - .byte 0x1E, 0x26, 0x1B - .byte 0x1F, 0x33, 0x1F - .byte 0x21, 0x17, 0x2F - .byte 0x01, 0x08, 0x20 - .byte 0x35, 0x03, 0x19 - .byte 0x3B, 0x02, 0x20 - .byte 0x02, 0x2D, 0x23 - .byte 0x0E, 0x17, 0x32 - .byte 0x31, 0x29, 0x11 - .byte 0x22, 0x17, 0x22 - .byte 0x3A, 0x2C, 0x23 - .byte 0x34, 0x20, 0x18 - .byte 0x00, 0x3A, 0x22 - .byte 0x25, 0x33, 0x21 - .byte 0x33, 0x04, 0x27 - .byte 0x04, 0x18, 0x32 - .byte 0x2C, 0x0C, 0x2F - .byte 0x28, 0x14, 0x2C - .byte 0x3F, 0x30, 0x2B - .byte 0x30, 0x21, 0x1D - .byte 0x01, 0x25, 0x32 - .byte 0x05, 0x23, 0x34 - .byte 0x24, 0x10, 0x30 - .byte 0x3D, 0x14, 0x1B - .byte 0x3F, 0x38, 0x2F - .byte 0x22, 0x1B, 0x32 - .byte 0x25, 0x07, 0x37 - .byte 0x0A, 0x0C, 0x1D - .byte 0x03, 0x1E, 0x1A - .byte 0x0F, 0x3C, 0x12 - .byte 0x11, 0x18, 0x1D - .byte 0x00, 0x35, 0x2F - .byte 0x32, 0x18, 0x14 - .byte 0x23, 0x30, 0x1B - .byte 0x11, 0x3D, 0x12 - .byte 0x1A, 0x16, 0x35 - .byte 0x28, 0x05, 0x24 - .byte 0x17, 0x3D, 0x37 - .byte 0x2E, 0x09, 0x2E - .byte 0x18, 0x1D, 0x17 - .byte 0x20, 0x1F, 0x18 - .byte 0x23, 0x2C, 0x2F - .byte 0x20, 0x3F, 0x16 - .byte 0x3F, 0x29, 0x2E - .byte 0x23, 0x3B, 0x29 - .byte 0x18, 0x39, 0x13 - .byte 0x1E, 0x32, 0x35 - .byte 0x14, 0x1D, 0x2A - .byte 0x35, 0x01, 0x1D - .byte 0x3E, 0x3B, 0x1E - .byte 0x22, 0x1E, 0x16 - .byte 0x18, 0x22, 0x12 - .byte 0x3E, 0x29, 0x33 - .byte 0x2F, 0x14, 0x19 - .byte 0x3B, 0x07, 0x15 - .byte 0x06, 0x3D, 0x29 - .byte 0x35, 0x37, 0x23 - .byte 0x34, 0x1D, 0x2D - .byte 0x18, 0x12, 0x1B - .byte 0x0B, 0x13, 0x24 - .byte 0x13, 0x38, 0x1C - .byte 0x1F, 0x0B, 0x1B - .byte 0x13, 0x21, 0x1C - .byte 0x06, 0x39, 0x32 - .byte 0x37, 0x3D, 0x26 - .byte 0x29, 0x26, 0x15 - .byte 0x3C, 0x33, 0x27 - .byte 0x00, 0x01, 0x2E - .byte 0x15, 0x18, 0x31 - .byte 0x0D, 0x2C, 0x13 - .byte 0x27, 0x3B, 0x20 - .byte 0x2D, 0x01, 0x26 - .byte 0x23, 0x15, 0x30 - .byte 0x24, 0x00, 0x17 - .byte 0x37, 0x3F, 0x33 - .byte 0x25, 0x24, 0x31 - .byte 0x06, 0x3B, 0x37 - .byte 0x03, 0x18, 0x1A - .byte 0x2C, 0x34, 0x14 - .byte 0x1D, 0x36, 0x18 - .byte 0x3A, 0x04, 0x23 - .byte 0x12, 0x26, 0x15 - .byte 0x2B, 0x19, 0x1A - .byte 0x29, 0x2C, 0x36 - .byte 0x01, 0x19, 0x1D - .byte 0x2F, 0x06, 0x2B - .byte 0x0C, 0x12, 0x26 - .byte 0x36, 0x32, 0x1D - .byte 0x0D, 0x12, 0x28 - .byte 0x03, 0x28, 0x13 - .byte 0x29, 0x06, 0x17 - .byte 0x03, 0x38, 0x21 - .byte 0x30, 0x2C, 0x10 - .byte 0x22, 0x00, 0x28 - .byte 0x24, 0x3B, 0x1C - .byte 0x20, 0x3E, 0x13 - .byte 0x02, 0x0C, 0x19 - .byte 0x29, 0x2C, 0x1A - .byte 0x39, 0x30, 0x22 - .byte 0x2A, 0x1F, 0x22 - .byte 0x14, 0x34, 0x2C - .byte 0x14, 0x25, 0x1B - .byte 0x06, 0x3B, 0x15 - .byte 0x06, 0x1C, 0x13 - .byte 0x15, 0x03, 0x18 - .byte 0x1E, 0x2A, 0x1B - .byte 0x17, 0x25, 0x2F - .byte 0x1C, 0x29, 0x2E - .byte 0x02, 0x32, 0x1E - .byte 0x1D, 0x28, 0x35 - .byte 0x36, 0x03, 0x34 - .byte 0x16, 0x3D, 0x2A - .byte 0x12, 0x0D, 0x13 - .byte 0x1D, 0x2D, 0x21 - .byte 0x32, 0x17, 0x2E - .byte 0x1A, 0x15, 0x26 - .byte 0x22, 0x2F, 0x15 - .byte 0x3C, 0x0E, 0x20 - .byte 0x2F, 0x27, 0x13 - .byte 0x04, 0x09, 0x32 - .byte 0x1E, 0x01, 0x34 - .byte 0x06, 0x16, 0x1E - .byte 0x2E, 0x1B, 0x1C - .byte 0x28, 0x13, 0x2A - .byte 0x30, 0x34, 0x12 - .byte 0x12, 0x32, 0x18 - .byte 0x1D, 0x1D, 0x35 - .byte 0x07, 0x1C, 0x16 - .byte 0x2D, 0x3D, 0x35 - .byte 0x1C, 0x1B, 0x24 - .byte 0x21, 0x2D, 0x1E - .byte 0x10, 0x09, 0x14 - .byte 0x3D, 0x11, 0x12 - .byte 0x25, 0x02, 0x26 - .byte 0x23, 0x02, 0x19 - .byte 0x19, 0x05, 0x14 - .byte 0x0B, 0x21, 0x1A - .byte 0x09, 0x02, 0x2C - .byte 0x18, 0x28, 0x2D - .byte 0x1E, 0x10, 0x12 - .byte 0x2E, 0x18, 0x2E - .byte 0x1F, 0x02, 0x2C - .byte 0x14, 0x17, 0x24 - .byte 0x39, 0x08, 0x32 - .byte 0x16, 0x14, 0x22 - .byte 0x16, 0x28, 0x21 - .byte 0x11, 0x10, 0x2C - .byte 0x23, 0x36, 0x2B - .byte 0x39, 0x21, 0x26 - .byte 0x0E, 0x06, 0x2D - .byte 0x3C, 0x3E, 0x26 - .byte 0x2A, 0x1B, 0x1F - .byte 0x00, 0x3C, 0x33 - .byte 0x35, 0x3F, 0x14 - .byte 0x00, 0x0B, 0x10 - .byte 0x34, 0x3C, 0x17 - .byte 0x2D, 0x07, 0x1F - .byte 0x24, 0x39, 0x27 - .byte 0x16, 0x00, 0x1D - .byte 0x33, 0x2B, 0x1E - .byte 0x0F, 0x08, 0x31 - .byte 0x3A, 0x09, 0x13 - .byte 0x0C, 0x21, 0x1C - .byte 0x2A, 0x17, 0x34 - .byte 0x29, 0x27, 0x10 - .byte 0x37, 0x1B, 0x18 - .byte 0x15, 0x08, 0x2F - .byte 0x1F, 0x16, 0x12 - .byte 0x1F, 0x28, 0x34 - .byte 0x1C, 0x20, 0x22 - .byte 0x12, 0x01, 0x12 - .byte 0x21, 0x31, 0x10 - .byte 0x22, 0x26, 0x1E - .byte 0x01, 0x3D, 0x11 - .byte 0x1E, 0x27, 0x25 - .byte 0x3D, 0x30, 0x24 - .byte 0x1D, 0x11, 0x22 - .byte 0x36, 0x30, 0x16 - .byte 0x1F, 0x3E, 0x2A - .byte 0x3C, 0x27, 0x1B - .byte 0x1F, 0x29, 0x10 - .byte 0x1E, 0x05, 0x2A - .byte 0x0A, 0x10, 0x14 - .byte 0x1F, 0x00, 0x2E - .byte 0x0B, 0x3B, 0x18 - .byte 0x0A, 0x39, 0x30 - .byte 0x37, 0x0B, 0x1F - .byte 0x1D, 0x0A, 0x29 - .byte 0x3E, 0x1C, 0x33 - .byte 0x13, 0x2E, 0x28 - .byte 0x27, 0x1B, 0x1E - .byte 0x1D, 0x02, 0x1C - .byte 0x01, 0x25, 0x14 - .byte 0x3A, 0x10, 0x1C - .byte 0x12, 0x05, 0x2A - .byte 0x30, 0x20, 0x26 - .byte 0x2F, 0x2E, 0x2E - .byte 0x03, 0x07, 0x24 - .byte 0x36, 0x04, 0x2B - .byte 0x11, 0x25, 0x2D - .byte 0x28, 0x0E, 0x2E - .byte 0x0F, 0x1D, 0x15 - .byte 0x1C, 0x28, 0x30 - .byte 0x1F, 0x23, 0x26 - .byte 0x36, 0x12, 0x37 - .byte 0x3A, 0x31, 0x10 - .byte 0x2C, 0x2C, 0x2F - .byte 0x1A, 0x0D, 0x15 - .byte 0x3F, 0x3C, 0x32 - .byte 0x35, 0x1C, 0x16 - .byte 0x33, 0x16, 0x28 - .byte 0x1D, 0x3F, 0x21 - .byte 0x2C, 0x3E, 0x2B - .byte 0x24, 0x23, 0x2F - .byte 0x32, 0x15, 0x2A - .byte 0x1B, 0x10, 0x35 - .byte 0x18, 0x37, 0x10 - .byte 0x3B, 0x1E, 0x11 - .byte 0x2B, 0x16, 0x24 - .byte 0x1D, 0x16, 0x26 - .byte 0x3C, 0x2D, 0x11 - .byte 0x15, 0x28, 0x28 - .byte 0x27, 0x27, 0x27 - .byte 0x3B, 0x3A, 0x16 - .byte 0x1A, 0x0C, 0x1A - .byte 0x15, 0x08, 0x25 - .byte 0x0B, 0x10, 0x22 - .byte 0x1A, 0x3E, 0x17 - .byte 0x28, 0x1F, 0x1E - .byte 0x01, 0x1E, 0x1E - .byte 0x1C, 0x2F, 0x10 - .byte 0x25, 0x0B, 0x34 - .byte 0x3E, 0x0C, 0x1A - .byte 0x1B, 0x10, 0x2A - .byte 0x0F, 0x14, 0x17 - .byte 0x0F, 0x3F, 0x17 - .byte 0x03, 0x15, 0x1F - .byte 0x02, 0x36, 0x17 - .byte 0x15, 0x1D, 0x18 - .byte 0x08, 0x36, 0x10 - .byte 0x14, 0x0D, 0x2B - .byte 0x0A, 0x05, 0x1D - .byte 0x26, 0x12, 0x1E - .byte 0x3E, 0x18, 0x19 - .byte 0x36, 0x18, 0x37 - .byte 0x17, 0x39, 0x2E - .byte 0x0D, 0x04, 0x19 - .byte 0x16, 0x22, 0x15 - .byte 0x3E, 0x26, 0x1F - .byte 0x00, 0x06, 0x17 - .byte 0x33, 0x22, 0x1D - .byte 0x2B, 0x39, 0x2B - .byte 0x3E, 0x31, 0x1C - .byte 0x22, 0x3F, 0x13 - .byte 0x30, 0x1C, 0x31 - .byte 0x07, 0x2B, 0x14 - .byte 0x32, 0x35, 0x1E - .byte 0x02, 0x07, 0x20 - .byte 0x0F, 0x3B, 0x11 - .byte 0x20, 0x07, 0x12 - .byte 0x2A, 0x30, 0x1D - .byte 0x28, 0x38, 0x36 - .byte 0x20, 0x01, 0x17 - .byte 0x15, 0x20, 0x21 - .byte 0x3A, 0x1B, 0x1E - .byte 0x38, 0x12, 0x24 - .byte 0x03, 0x3E, 0x1F - .byte 0x29, 0x1D, 0x13 - .byte 0x20, 0x27, 0x19 - .byte 0x12, 0x25, 0x20 - .byte 0x32, 0x33, 0x2B - .byte 0x3F, 0x05, 0x31 - .byte 0x35, 0x3C, 0x2D - .byte 0x2D, 0x02, 0x2E - .byte 0x10, 0x2A, 0x16 - .byte 0x17, 0x08, 0x31 - .byte 0x17, 0x2E, 0x2B - .byte 0x30, 0x1E, 0x15 - .byte 0x31, 0x15, 0x26 - .byte 0x08, 0x10, 0x33 - .byte 0x15, 0x01, 0x27 - .byte 0x12, 0x07, 0x2F - .byte 0x29, 0x27, 0x34 - .byte 0x3F, 0x08, 0x31 - .byte 0x1C, 0x20, 0x1A - .byte 0x33, 0x0C, 0x13 - .byte 0x18, 0x31, 0x24 - .byte 0x37, 0x2D, 0x2E - .byte 0x21, 0x18, 0x24 - .byte 0x3A, 0x27, 0x31 - .byte 0x35, 0x3E, 0x30 - .byte 0x3A, 0x14, 0x33 - .byte 0x0F, 0x1A, 0x2D - .byte 0x30, 0x2E, 0x11 - .byte 0x1A, 0x31, 0x1D - .byte 0x17, 0x3C, 0x18 - .byte 0x33, 0x31, 0x23 - .byte 0x1D, 0x39, 0x2D - .byte 0x10, 0x1D, 0x2F - .byte 0x24, 0x15, 0x1C - .byte 0x25, 0x01, 0x2B - .byte 0x22, 0x16, 0x2E - .byte 0x1B, 0x25, 0x35 - .byte 0x37, 0x10, 0x26 - .byte 0x39, 0x01, 0x36 - .byte 0x17, 0x2B, 0x14 - .byte 0x09, 0x16, 0x17 - .byte 0x20, 0x28, 0x23 - .byte 0x26, 0x3A, 0x26 - .byte 0x27, 0x2A, 0x24 - .byte 0x36, 0x02, 0x2C - .byte 0x29, 0x30, 0x35 - .byte 0x36, 0x01, 0x1F - .byte 0x28, 0x3B, 0x1D - .byte 0x23, 0x1E, 0x2D - .byte 0x11, 0x1E, 0x2C - .byte 0x2F, 0x32, 0x19 - .byte 0x3F, 0x26, 0x31 - .byte 0x38, 0x1E, 0x17 - .byte 0x05, 0x18, 0x2E - .byte 0x00, 0x2E, 0x12 - .byte 0x34, 0x3F, 0x34 - .byte 0x16, 0x10, 0x29 - .byte 0x20, 0x3D, 0x36 - .byte 0x2F, 0x16, 0x25 - .byte 0x12, 0x17, 0x10 - .byte 0x21, 0x37, 0x35 - .byte 0x25, 0x37, 0x2D - .byte 0x01, 0x08, 0x27 - .byte 0x03, 0x1F, 0x29 - .byte 0x0D, 0x2A, 0x16 - .byte 0x3A, 0x3F, 0x33 - .byte 0x2B, 0x19, 0x1D - .byte 0x2A, 0x1F, 0x29 - .byte 0x28, 0x2C, 0x10 - .byte 0x28, 0x30, 0x10 - .byte 0x39, 0x14, 0x1B - .byte 0x00, 0x18, 0x21 - .byte 0x28, 0x0C, 0x37 - .byte 0x11, 0x10, 0x11 - .byte 0x3C, 0x33, 0x32 - .byte 0x33, 0x36, 0x1A - .byte 0x36, 0x00, 0x1C - .byte 0x31, 0x1B, 0x1D - .byte 0x38, 0x1D, 0x10 - .byte 0x3C, 0x39, 0x27 - .byte 0x3A, 0x3F, 0x14 - .byte 0x19, 0x12, 0x14 - .byte 0x0D, 0x1F, 0x18 - .byte 0x00, 0x25, 0x18 - .byte 0x28, 0x1C, 0x32 - .byte 0x27, 0x03, 0x1A - .byte 0x26, 0x2D, 0x2A - .byte 0x29, 0x28, 0x27 - .byte 0x0A, 0x2A, 0x18 - .byte 0x0A, 0x1A, 0x30 - .byte 0x20, 0x1A, 0x2E - .byte 0x06, 0x0B, 0x1D - .byte 0x0F, 0x0C, 0x1C - .byte 0x35, 0x28, 0x1C - .byte 0x3D, 0x16, 0x23 - .byte 0x21, 0x1C, 0x31 - .byte 0x14, 0x1C, 0x2E - .byte 0x22, 0x32, 0x35 - .byte 0x09, 0x29, 0x30 - .byte 0x20, 0x1A, 0x10 - .byte 0x31, 0x3F, 0x2C - .byte 0x0A, 0x3D, 0x37 - .byte 0x0B, 0x2E, 0x2D - .byte 0x1F, 0x22, 0x31 - .byte 0x06, 0x07, 0x29 - .byte 0x22, 0x17, 0x2D - .byte 0x30, 0x11, 0x18 - .byte 0x0C, 0x19, 0x15 - .byte 0x07, 0x0A, 0x34 - .byte 0x18, 0x29, 0x27 - .byte 0x33, 0x0C, 0x30 - .byte 0x03, 0x1A, 0x37 - .byte 0x06, 0x01, 0x2D - .byte 0x0F, 0x3B, 0x2B - .byte 0x11, 0x1F, 0x37 - .byte 0x2B, 0x21, 0x36 - .byte 0x3F, 0x23, 0x17 - .byte 0x17, 0x07, 0x2B - .byte 0x2B, 0x0E, 0x30 - .byte 0x11, 0x39, 0x1D - .byte 0x29, 0x03, 0x33 - .byte 0x30, 0x03, 0x2F - .byte 0x3C, 0x20, 0x26 - .byte 0x03, 0x22, 0x14 - .byte 0x3A, 0x28, 0x35 - .byte 0x01, 0x28, 0x2B - .byte 0x3E, 0x15, 0x18 - .byte 0x30, 0x07, 0x17 - .byte 0x3B, 0x2C, 0x30 - .byte 0x15, 0x07, 0x2C - .byte 0x17, 0x27, 0x1D - .byte 0x3F, 0x1E, 0x33 - .byte 0x0D, 0x17, 0x10 - .byte 0x15, 0x0E, 0x30 - .byte 0x09, 0x05, 0x30 - .byte 0x2D, 0x20, 0x15 - .byte 0x3C, 0x3D, 0x30 - .byte 0x0C, 0x17, 0x1C - .byte 0x1A, 0x0D, 0x25 - .byte 0x2B, 0x2B, 0x2A - .byte 0x02, 0x16, 0x2D - .byte 0x17, 0x31, 0x17 - .byte 0x00, 0x08, 0x13 - .byte 0x37, 0x35, 0x21 - .byte 0x1E, 0x1C, 0x1F - .byte 0x2B, 0x32, 0x1C - .byte 0x10, 0x2A, 0x16 - .byte 0x3A, 0x33, 0x31 - .byte 0x17, 0x2B, 0x2A - .byte 0x0C, 0x3D, 0x11 - .byte 0x28, 0x0A, 0x30 - .byte 0x23, 0x0A, 0x26 - .byte 0x0A, 0x14, 0x24 - .byte 0x0B, 0x0F, 0x30 - .byte 0x1B, 0x1E, 0x29 - .byte 0x02, 0x35, 0x28 - .byte 0x3B, 0x02, 0x14 - .byte 0x00, 0x0F, 0x35 - .byte 0x1C, 0x3C, 0x2E - .byte 0x28, 0x38, 0x19 - .byte 0x1B, 0x11, 0x12 - .byte 0x09, 0x16, 0x10 - .byte 0x2E, 0x0D, 0x20 - .byte 0x3D, 0x04, 0x32 - .byte 0x16, 0x2C, 0x25 - .byte 0x02, 0x3D, 0x18 - .byte 0x0B, 0x13, 0x1C - .byte 0x22, 0x2A, 0x1C - .byte 0x20, 0x27, 0x22 - .byte 0x05, 0x26, 0x22 - .byte 0x12, 0x1D, 0x2C - .byte 0x08, 0x05, 0x2E - .byte 0x3F, 0x1C, 0x17 - .byte 0x24, 0x0D, 0x33 - .byte 0x36, 0x08, 0x24 - .byte 0x10, 0x22, 0x29 - .byte 0x1C, 0x0A, 0x11 - .byte 0x25, 0x0F, 0x10 - .byte 0x24, 0x38, 0x2F - .byte 0x25, 0x32, 0x1E - .byte 0x06, 0x2A, 0x29 - .byte 0x3E, 0x3A, 0x28 - .byte 0x34, 0x17, 0x33 - .byte 0x18, 0x33, 0x17 - .byte 0x07, 0x14, 0x1F - .byte 0x11, 0x17, 0x20 - .byte 0x13, 0x0E, 0x14 - .byte 0x3B, 0x1C, 0x12 - .byte 0x2A, 0x13, 0x37 - .byte 0x2A, 0x35, 0x32 - .byte 0x30, 0x02, 0x25 - .byte 0x00, 0x07, 0x1F - .byte 0x0C, 0x04, 0x2C - .byte 0x37, 0x37, 0x30 - .byte 0x25, 0x12, 0x25 - .byte 0x12, 0x22, 0x21 - .byte 0x22, 0x35, 0x33 - .byte 0x07, 0x20, 0x2D - .byte 0x27, 0x0E, 0x30 - .byte 0x34, 0x19, 0x1A - .byte 0x0A, 0x3C, 0x25 - .byte 0x07, 0x1D, 0x2B - .byte 0x31, 0x3A, 0x12 - .byte 0x1A, 0x3D, 0x37 - .byte 0x16, 0x15, 0x16 - .byte 0x39, 0x13, 0x15 - .byte 0x2D, 0x03, 0x2E - .byte 0x06, 0x39, 0x2C - .byte 0x16, 0x00, 0x13 - .byte 0x35, 0x2A, 0x35 - .byte 0x24, 0x01, 0x18 - .byte 0x24, 0x37, 0x28 - .byte 0x25, 0x1B, 0x34 - .byte 0x25, 0x19, 0x17 - .byte 0x27, 0x2F, 0x1B - .byte 0x27, 0x0D, 0x10 - .byte 0x36, 0x3C, 0x30 - .byte 0x3C, 0x33, 0x23 - .byte 0x3E, 0x27, 0x1E - .byte 0x25, 0x2D, 0x29 - .byte 0x1F, 0x12, 0x21 - .byte 0x37, 0x32, 0x1F - .byte 0x11, 0x21, 0x35 - .byte 0x30, 0x0C, 0x19 - .byte 0x25, 0x3D, 0x26 - .byte 0x17, 0x02, 0x1D - .byte 0x14, 0x2E, 0x11 - .byte 0x38, 0x13, 0x30 - .byte 0x0A, 0x2B, 0x20 - .byte 0x1E, 0x10, 0x15 - .byte 0x37, 0x30, 0x2E - .byte 0x1E, 0x04, 0x2C - .byte 0x14, 0x34, 0x19 - .byte 0x08, 0x14, 0x18 - .byte 0x0E, 0x1C, 0x30 - .byte 0x1A, 0x2E, 0x1B - .byte 0x1F, 0x39, 0x31 - .byte 0x0C, 0x1C, 0x28 - .byte 0x3E, 0x33, 0x23 - .byte 0x0F, 0x13, 0x16 - .byte 0x25, 0x39, 0x2F - .byte 0x14, 0x1B, 0x1A - .byte 0x28, 0x3E, 0x21 - .byte 0x2D, 0x19, 0x11 - .byte 0x0C, 0x34, 0x32 - .byte 0x39, 0x31, 0x19 - .byte 0x1A, 0x08, 0x34 - .byte 0x09, 0x2F, 0x11 - .byte 0x30, 0x04, 0x1C - .byte 0x02, 0x3B, 0x1B - .byte 0x33, 0x21, 0x33 - .byte 0x38, 0x02, 0x1A - .byte 0x31, 0x38, 0x32 - .byte 0x1F, 0x1D, 0x16 - .byte 0x17, 0x10, 0x1B - .byte 0x32, 0x20, 0x17 - .byte 0x00, 0x33, 0x12 - .byte 0x21, 0x0F, 0x27 - .byte 0x14, 0x19, 0x27 - .byte 0x24, 0x2C, 0x37 - .byte 0x25, 0x05, 0x2F - .byte 0x3D, 0x25, 0x11 - .byte 0x12, 0x30, 0x1A - .byte 0x16, 0x03, 0x1A - .byte 0x14, 0x09, 0x13 - .byte 0x02, 0x23, 0x22 - .byte 0x01, 0x3C, 0x10 - .byte 0x3F, 0x2D, 0x23 - .byte 0x31, 0x3F, 0x23 - .byte 0x17, 0x00, 0x33 - .byte 0x3F, 0x0F, 0x2F - .byte 0x26, 0x07, 0x15 - .byte 0x21, 0x2B, 0x2A - .byte 0x38, 0x39, 0x1E - .byte 0x09, 0x25, 0x2B - .byte 0x3B, 0x30, 0x25 - .byte 0x12, 0x2D, 0x13 - .byte 0x32, 0x19, 0x28 - .byte 0x24, 0x1C, 0x2D - .byte 0x35, 0x32, 0x26 - .byte 0x0D, 0x23, 0x1E - .byte 0x1D, 0x07, 0x21 - .byte 0x0B, 0x34, 0x17 - .byte 0x2D, 0x32, 0x32 - .byte 0x3A, 0x3C, 0x35 - .byte 0x1A, 0x10, 0x33 - .byte 0x1A, 0x07, 0x22 - .byte 0x3B, 0x1B, 0x2A - .byte 0x33, 0x1F, 0x26 - .byte 0x0E, 0x35, 0x1A - .byte 0x3B, 0x0A, 0x1C - .byte 0x11, 0x07, 0x11 - .byte 0x0D, 0x3C, 0x2D - .byte 0x1E, 0x37, 0x29 - .byte 0x11, 0x05, 0x12 - .byte 0x15, 0x2F, 0x1C - .byte 0x24, 0x31, 0x16 - .byte 0x2B, 0x21, 0x1B - .byte 0x23, 0x10, 0x31 - .byte 0x02, 0x14, 0x29 - .byte 0x26, 0x20, 0x16 - .byte 0x10, 0x17, 0x10 - .byte 0x0B, 0x0F, 0x33 - .byte 0x01, 0x2E, 0x14 - .byte 0x21, 0x0E, 0x37 - .byte 0x1A, 0x1D, 0x2F - .byte 0x1E, 0x30, 0x24 - .byte 0x04, 0x14, 0x2D - .byte 0x11, 0x00, 0x30 - .byte 0x08, 0x2A, 0x1D - .byte 0x1D, 0x22, 0x21 - .byte 0x24, 0x2C, 0x37 - .byte 0x24, 0x11, 0x12 - .byte 0x04, 0x2E, 0x28 - .byte 0x1D, 0x18, 0x23 - .byte 0x3C, 0x16, 0x16 - .byte 0x10, 0x17, 0x31 - .byte 0x20, 0x21, 0x12 - .byte 0x33, 0x3E, 0x34 - .byte 0x06, 0x13, 0x13 - .byte 0x17, 0x38, 0x2B - .byte 0x14, 0x0D, 0x15 - .byte 0x24, 0x3B, 0x2B - .byte 0x34, 0x3B, 0x1E - .byte 0x18, 0x07, 0x34 - .byte 0x37, 0x1D, 0x1F - .byte 0x0B, 0x29, 0x20 - .byte 0x12, 0x1E, 0x1D - .byte 0x1A, 0x24, 0x24 - .byte 0x3D, 0x28, 0x24 - .byte 0x0B, 0x12, 0x33 - .byte 0x1B, 0x3A, 0x22 - .byte 0x14, 0x13, 0x2A - .byte 0x31, 0x38, 0x15 - .byte 0x37, 0x2B, 0x2E - .byte 0x19, 0x1E, 0x2C - .byte 0x3F, 0x1B, 0x2A - .byte 0x33, 0x1F, 0x33 - .byte 0x3F, 0x15, 0x29 - .byte 0x01, 0x1E, 0x18 - .byte 0x1F, 0x22, 0x19 - .byte 0x33, 0x3C, 0x34 - .byte 0x1E, 0x12, 0x22 - .byte 0x0D, 0x37, 0x2C - .byte 0x0F, 0x08, 0x31 - .byte 0x2E, 0x09, 0x36 - .byte 0x01, 0x05, 0x1E - .byte 0x1C, 0x04, 0x1E - .byte 0x0C, 0x01, 0x1C - .byte 0x29, 0x28, 0x2F - .byte 0x39, 0x2D, 0x14 - .byte 0x09, 0x22, 0x36 - .byte 0x04, 0x37, 0x37 - .byte 0x2D, 0x2F, 0x35 - .byte 0x24, 0x23, 0x1B - .byte 0x08, 0x20, 0x32 - .byte 0x20, 0x1F, 0x34 - .byte 0x02, 0x31, 0x19 - .byte 0x18, 0x13, 0x36 - .byte 0x06, 0x2B, 0x1E - .byte 0x0E, 0x1B, 0x10 - .byte 0x2F, 0x0E, 0x1C - .byte 0x11, 0x38, 0x13 - .byte 0x01, 0x37, 0x19 - .byte 0x14, 0x11, 0x26 - .byte 0x31, 0x3D, 0x33 - .byte 0x1D, 0x1B, 0x34 - .byte 0x25, 0x31, 0x2F - .byte 0x11, 0x0A, 0x2F - .byte 0x39, 0x17, 0x1B - .byte 0x05, 0x0E, 0x13 - .byte 0x29, 0x25, 0x22 - .byte 0x15, 0x0D, 0x20 - .byte 0x2B, 0x27, 0x21 - .byte 0x3E, 0x24, 0x27 - .byte 0x2A, 0x2B, 0x16 - .byte 0x24, 0x3D, 0x15 - .byte 0x15, 0x30, 0x31 - .byte 0x0F, 0x33, 0x24 - .byte 0x06, 0x16, 0x13 - .byte 0x06, 0x31, 0x10 - .byte 0x2E, 0x3F, 0x10 - .byte 0x05, 0x0D, 0x2F - .byte 0x3C, 0x1F, 0x19 - .byte 0x12, 0x13, 0x24 - .byte 0x0F, 0x33, 0x36 - .byte 0x15, 0x3B, 0x33 - .byte 0x03, 0x0F, 0x2A - .byte 0x3B, 0x3C, 0x2C - .byte 0x36, 0x09, 0x29 - .byte 0x11, 0x3B, 0x27 - .byte 0x28, 0x2B, 0x31 - .byte 0x1A, 0x0E, 0x2F - .byte 0x39, 0x2C, 0x31 - .byte 0x0E, 0x3C, 0x35 - .byte 0x2C, 0x24, 0x33 - .byte 0x3D, 0x11, 0x2B - .byte 0x07, 0x3C, 0x37 - .byte 0x14, 0x18, 0x13 - .byte 0x1D, 0x3F, 0x2E - .byte 0x30, 0x12, 0x25 - .byte 0x26, 0x1D, 0x11 - .byte 0x07, 0x11, 0x1E - .byte 0x34, 0x01, 0x11 - .byte 0x0B, 0x39, 0x21 - .byte 0x29, 0x02, 0x29 - .byte 0x15, 0x10, 0x1A - .byte 0x30, 0x1F, 0x35 - .byte 0x3C, 0x2B, 0x2A - .byte 0x30, 0x3B, 0x36 - .byte 0x20, 0x1A, 0x23 - .byte 0x32, 0x24, 0x2B - .byte 0x15, 0x20, 0x1C - .byte 0x25, 0x3D, 0x36 - .byte 0x2D, 0x14, 0x31 - .byte 0x18, 0x23, 0x17 - .byte 0x18, 0x05, 0x13 - .byte 0x34, 0x30, 0x37 - .byte 0x0E, 0x39, 0x23 - .byte 0x1D, 0x1F, 0x17 - .byte 0x01, 0x15, 0x2F - .byte 0x0B, 0x3E, 0x1B - .byte 0x0D, 0x19, 0x2E - .byte 0x31, 0x38, 0x1C - .byte 0x15, 0x34, 0x15 - .byte 0x13, 0x19, 0x29 - .byte 0x19, 0x14, 0x27 - .byte 0x15, 0x18, 0x23 - .byte 0x29, 0x0C, 0x27 - .byte 0x2D, 0x0E, 0x17 - .byte 0x34, 0x18, 0x10 - .byte 0x3B, 0x1E, 0x29 - .byte 0x34, 0x2C, 0x22 - .byte 0x31, 0x08, 0x13 - .byte 0x1D, 0x18, 0x1A - .byte 0x1C, 0x0B, 0x2A - .byte 0x19, 0x1E, 0x1A - .byte 0x23, 0x27, 0x17 - .byte 0x3B, 0x0E, 0x37 - .byte 0x19, 0x2B, 0x16 - .byte 0x2F, 0x08, 0x21 - .byte 0x37, 0x02, 0x20 - .byte 0x0B, 0x32, 0x30 - .byte 0x16, 0x05, 0x30 - .byte 0x13, 0x05, 0x1A - .byte 0x07, 0x39, 0x19 - .byte 0x0C, 0x3B, 0x2A - .byte 0x15, 0x05, 0x30 - .byte 0x30, 0x05, 0x19 - .byte 0x13, 0x00, 0x12 - .byte 0x27, 0x16, 0x2A - .byte 0x0F, 0x28, 0x27 - .byte 0x0C, 0x23, 0x2F - .byte 0x39, 0x28, 0x2A - .byte 0x24, 0x25, 0x1F - .byte 0x18, 0x29, 0x14 - .byte 0x16, 0x05, 0x1A - .byte 0x35, 0x2F, 0x26 - .byte 0x0A, 0x3A, 0x29 - .byte 0x34, 0x2C, 0x36 - .byte 0x2E, 0x3A, 0x15 - .byte 0x1A, 0x0A, 0x2D - .byte 0x16, 0x14, 0x2E - .byte 0x35, 0x28, 0x2A - .byte 0x35, 0x0F, 0x11 - .byte 0x11, 0x32, 0x19 - .byte 0x20, 0x1A, 0x28 - .byte 0x17, 0x1A, 0x28 - .byte 0x16, 0x33, 0x25 - .byte 0x13, 0x2C, 0x29 - .byte 0x09, 0x16, 0x33 - .byte 0x1D, 0x27, 0x26 - .byte 0x15, 0x0C, 0x2F - .byte 0x22, 0x1C, 0x19 - .byte 0x29, 0x33, 0x10 - .byte 0x2D, 0x11, 0x1B - .byte 0x16, 0x19, 0x2E - .byte 0x0D, 0x0C, 0x28 - .byte 0x37, 0x3A, 0x34 - .byte 0x2A, 0x1D, 0x37 - .byte 0x30, 0x0A, 0x36 - .byte 0x24, 0x39, 0x1B - .byte 0x39, 0x0A, 0x32 - .byte 0x11, 0x03, 0x2D - .byte 0x32, 0x1D, 0x30 - .byte 0x38, 0x1E, 0x27 - .byte 0x2E, 0x17, 0x18 - .byte 0x16, 0x17, 0x2A - .byte 0x36, 0x3B, 0x31 - .byte 0x17, 0x04, 0x19 - .byte 0x3A, 0x25, 0x2D - .byte 0x00, 0x36, 0x27 - .byte 0x25, 0x12, 0x33 - .byte 0x06, 0x0A, 0x14 - .byte 0x11, 0x05, 0x2F - .byte 0x03, 0x35, 0x2F - .byte 0x0B, 0x34, 0x29 - .byte 0x00, 0x31, 0x13 - .byte 0x27, 0x0F, 0x1C - .byte 0x1D, 0x06, 0x2D - .byte 0x1C, 0x30, 0x27 - .byte 0x2F, 0x2A, 0x27 - .byte 0x16, 0x20, 0x31 - .byte 0x33, 0x2B, 0x2B - .byte 0x05, 0x30, 0x36 - .byte 0x29, 0x23, 0x35 - .byte 0x10, 0x16, 0x2F - .byte 0x2D, 0x20, 0x29 - .byte 0x37, 0x13, 0x24 - .byte 0x2D, 0x0E, 0x25 - .byte 0x08, 0x0A, 0x18 - .byte 0x0F, 0x03, 0x1B - .byte 0x31, 0x0C, 0x37 - .byte 0x1E, 0x34, 0x31 - .byte 0x1B, 0x0E, 0x25 - .byte 0x1A, 0x07, 0x34 - .byte 0x0D, 0x3C, 0x33 - .byte 0x00, 0x3A, 0x36 - .byte 0x04, 0x27, 0x12 - .byte 0x23, 0x18, 0x24 - .byte 0x0D, 0x0B, 0x18 - .byte 0x31, 0x32, 0x37 - .byte 0x00, 0x0D, 0x21 - .byte 0x32, 0x10, 0x12 - .byte 0x26, 0x0D, 0x19 - .byte 0x29, 0x24, 0x2B - .byte 0x3D, 0x21, 0x1F - .byte 0x1E, 0x1B, 0x28 - .byte 0x0D, 0x12, 0x28 - .byte 0x35, 0x1E, 0x23 - .byte 0x0A, 0x2E, 0x22 - .byte 0x27, 0x27, 0x35 - .byte 0x01, 0x0E, 0x20 - .byte 0x31, 0x39, 0x29 - .byte 0x3B, 0x24, 0x36 - .byte 0x14, 0x10, 0x33 - .byte 0x18, 0x2C, 0x26 - .byte 0x04, 0x2D, 0x15 - .byte 0x1A, 0x11, 0x37 - .byte 0x0F, 0x0B, 0x14 - .byte 0x0E, 0x2C, 0x2C - .byte 0x21, 0x17, 0x2C - .byte 0x16, 0x21, 0x35 - .byte 0x3E, 0x10, 0x10 - .byte 0x0A, 0x05, 0x1E - .byte 0x3B, 0x09, 0x13 - .byte 0x26, 0x18, 0x1E - .byte 0x23, 0x0C, 0x1A - .byte 0x33, 0x37, 0x1F - .byte 0x09, 0x12, 0x35 - .byte 0x3D, 0x0D, 0x15 - .byte 0x36, 0x06, 0x24 - .byte 0x33, 0x30, 0x29 - .byte 0x3B, 0x0F, 0x28 - .byte 0x34, 0x2A, 0x2C - .byte 0x02, 0x12, 0x35 - .byte 0x09, 0x22, 0x31 - .byte 0x3B, 0x31, 0x1C - .byte 0x33, 0x22, 0x27 - .byte 0x3D, 0x34, 0x15 - .byte 0x14, 0x22, 0x28 - .byte 0x28, 0x10, 0x1E - .byte 0x21, 0x31, 0x10 - .byte 0x2D, 0x16, 0x21 - .byte 0x1E, 0x05, 0x33 - .byte 0x0F, 0x30, 0x31 - .byte 0x0E, 0x1A, 0x35 - .byte 0x38, 0x2E, 0x28 - .byte 0x26, 0x37, 0x1E - .byte 0x2B, 0x13, 0x33 - .byte 0x1F, 0x1E, 0x37 - .byte 0x0A, 0x28, 0x24 - .byte 0x32, 0x1C, 0x1A - .byte 0x1F, 0x3F, 0x19 - .byte 0x39, 0x39, 0x29 - .byte 0x2C, 0x1B, 0x14 - .byte 0x15, 0x2A, 0x17 - .byte 0x32, 0x0F, 0x21 - .byte 0x30, 0x21, 0x18 - .byte 0x23, 0x2A, 0x27 - .byte 0x3D, 0x07, 0x10 - .byte 0x0B, 0x3F, 0x2F - .byte 0x31, 0x02, 0x2E - .byte 0x08, 0x39, 0x2F - .byte 0x3F, 0x20, 0x18 - .byte 0x2D, 0x34, 0x11 - .byte 0x2E, 0x34, 0x10 - .byte 0x26, 0x12, 0x23 - .byte 0x25, 0x0A, 0x37 - .byte 0x34, 0x09, 0x25 - .byte 0x0A, 0x3E, 0x16 - .byte 0x1A, 0x17, 0x11 - .byte 0x38, 0x1C, 0x20 - .byte 0x11, 0x21, 0x26 - .byte 0x05, 0x0F, 0x18 - .byte 0x26, 0x2B, 0x32 - .byte 0x0A, 0x0C, 0x16 - .byte 0x03, 0x29, 0x1D - .byte 0x29, 0x3B, 0x23 - .byte 0x16, 0x1B, 0x29 - .byte 0x07, 0x09, 0x17 - .byte 0x17, 0x2C, 0x1C - .byte 0x35, 0x33, 0x30 - .byte 0x17, 0x12, 0x1E - .byte 0x3D, 0x1A, 0x2B - .byte 0x21, 0x1D, 0x10 - .byte 0x0A, 0x08, 0x17 - .byte 0x14, 0x3C, 0x36 - .byte 0x28, 0x36, 0x36 - .byte 0x3B, 0x20, 0x1B - .byte 0x13, 0x22, 0x1D - .byte 0x13, 0x3A, 0x15 - .byte 0x02, 0x23, 0x2C - .byte 0x3E, 0x19, 0x14 - .byte 0x39, 0x3C, 0x1A - .byte 0x10, 0x08, 0x1E - .byte 0x0A, 0x13, 0x29 - .byte 0x3F, 0x38, 0x2C - .byte 0x07, 0x23, 0x1F - .byte 0x19, 0x2A, 0x24 - .byte 0x14, 0x3C, 0x1F - .byte 0x0D, 0x04, 0x37 - .byte 0x1A, 0x2F, 0x28 - .byte 0x2A, 0x1D, 0x1E - .byte 0x11, 0x37, 0x29 - .byte 0x28, 0x27, 0x12 - .byte 0x0D, 0x00, 0x26 - .byte 0x0A, 0x3C, 0x26 - .byte 0x1F, 0x1C, 0x33 - .byte 0x04, 0x3A, 0x2C - .byte 0x24, 0x3D, 0x2B - .byte 0x26, 0x31, 0x2F - .byte 0x13, 0x1C, 0x21 - .byte 0x3E, 0x12, 0x23 - .byte 0x36, 0x0A, 0x1A - .byte 0x2D, 0x1E, 0x19 - .byte 0x05, 0x1F, 0x1B - .byte 0x1E, 0x0A, 0x1F - .byte 0x20, 0x08, 0x24 - .byte 0x2C, 0x0C, 0x33 - .byte 0x1D, 0x1F, 0x11 - .byte 0x0E, 0x12, 0x10 - .byte 0x27, 0x12, 0x19 - .byte 0x2A, 0x13, 0x31 - .byte 0x1C, 0x04, 0x30 - .byte 0x1A, 0x38, 0x1F - .byte 0x2C, 0x35, 0x25 - .byte 0x07, 0x0B, 0x33 - .byte 0x2D, 0x02, 0x1A - .byte 0x2A, 0x35, 0x35 - .byte 0x16, 0x2F, 0x14 - .byte 0x11, 0x31, 0x33 - .byte 0x2C, 0x31, 0x1E - .byte 0x3C, 0x3A, 0x27 - .byte 0x3C, 0x2B, 0x12 - .byte 0x27, 0x1D, 0x12 - .byte 0x36, 0x2C, 0x2B - .byte 0x25, 0x3B, 0x35 - .byte 0x12, 0x3D, 0x27 - .byte 0x13, 0x23, 0x19 - .byte 0x33, 0x2C, 0x26 - .byte 0x09, 0x3C, 0x12 - .byte 0x15, 0x1A, 0x23 - .byte 0x21, 0x07, 0x1A - .byte 0x22, 0x25, 0x20 - .byte 0x19, 0x1B, 0x2C - .byte 0x3A, 0x19, 0x35 - .byte 0x05, 0x26, 0x1D - .byte 0x23, 0x22, 0x25 - .byte 0x0E, 0x1E, 0x11 - .byte 0x13, 0x30, 0x12 - .byte 0x2C, 0x22, 0x25 - .byte 0x0A, 0x1D, 0x18 - .byte 0x23, 0x3E, 0x1D - .byte 0x02, 0x28, 0x25 - .byte 0x21, 0x0E, 0x20 - .byte 0x21, 0x22, 0x37 - .byte 0x18, 0x33, 0x27 - .byte 0x23, 0x23, 0x31 - .byte 0x24, 0x1A, 0x1A - .byte 0x3E, 0x25, 0x24 - .byte 0x24, 0x01, 0x18 - .byte 0x34, 0x10, 0x22 - .byte 0x07, 0x00, 0x37 - .byte 0x06, 0x20, 0x20 - .byte 0x3A, 0x02, 0x2B - .byte 0x07, 0x2C, 0x2C - .byte 0x09, 0x2F, 0x2A - .byte 0x01, 0x32, 0x2C - .byte 0x00, 0x35, 0x13 - .byte 0x2B, 0x3C, 0x1F - .byte 0x36, 0x37, 0x1E - .byte 0x20, 0x35, 0x1D - .byte 0x0C, 0x07, 0x33 - .byte 0x16, 0x08, 0x12 - .byte 0x3F, 0x36, 0x11 - .byte 0x0B, 0x1F, 0x2D - .byte 0x21, 0x20, 0x33 - .byte 0x17, 0x1A, 0x2E - .byte 0x16, 0x01, 0x2F - .byte 0x2F, 0x1C, 0x34 - .byte 0x29, 0x31, 0x2E - .byte 0x3B, 0x38, 0x31 - .byte 0x0D, 0x16, 0x12 - .byte 0x07, 0x29, 0x24 - .byte 0x33, 0x3C, 0x34 - .byte 0x3E, 0x1E, 0x18 - .byte 0x30, 0x02, 0x34 - .byte 0x2A, 0x34, 0x1B - .byte 0x2E, 0x23, 0x18 - .byte 0x34, 0x00, 0x1F - .byte 0x20, 0x0E, 0x28 - .byte 0x15, 0x33, 0x37 - .byte 0x27, 0x35, 0x23 - .byte 0x37, 0x3E, 0x11 - .byte 0x32, 0x2E, 0x36 - .byte 0x3A, 0x02, 0x2B - .byte 0x00, 0x36, 0x1D - .byte 0x13, 0x29, 0x16 - .byte 0x08, 0x2B, 0x37 - .byte 0x08, 0x02, 0x27 - .byte 0x32, 0x2D, 0x34 - .byte 0x30, 0x36, 0x29 - .byte 0x2E, 0x10, 0x12 - .byte 0x3C, 0x2E, 0x2A - .byte 0x04, 0x33, 0x30 - .byte 0x3F, 0x01, 0x22 - .byte 0x37, 0x14, 0x1D - .byte 0x27, 0x00, 0x2F - .byte 0x0C, 0x39, 0x26 - .byte 0x27, 0x04, 0x21 - .byte 0x19, 0x08, 0x1D - .byte 0x01, 0x04, 0x1E - .byte 0x27, 0x1B, 0x2B - .byte 0x31, 0x17, 0x1F - .byte 0x07, 0x01, 0x2D - .byte 0x2E, 0x3B, 0x1F - .byte 0x34, 0x24, 0x31 - .byte 0x32, 0x2B, 0x24 - .byte 0x0E, 0x07, 0x1E - .byte 0x0F, 0x33, 0x10 - .byte 0x16, 0x21, 0x32 - .byte 0x39, 0x02, 0x1A - .byte 0x33, 0x3D, 0x22 - .byte 0x0C, 0x25, 0x1A - .byte 0x29, 0x29, 0x28 - .byte 0x3A, 0x32, 0x26 - .byte 0x0B, 0x13, 0x22 - .byte 0x1F, 0x0F, 0x1C - .byte 0x04, 0x2C, 0x20 - .byte 0x39, 0x1A, 0x1B - .byte 0x1A, 0x2A, 0x1F - .byte 0x24, 0x13, 0x1A - .byte 0x31, 0x3B, 0x33 - .byte 0x39, 0x23, 0x28 - .byte 0x31, 0x07, 0x31 - .byte 0x1F, 0x10, 0x20 - .byte 0x29, 0x17, 0x32 - .byte 0x26, 0x3B, 0x2D - .byte 0x02, 0x3C, 0x1C - .byte 0x0E, 0x00, 0x20 - .byte 0x14, 0x3E, 0x37 - .byte 0x01, 0x0F, 0x2D - .byte 0x06, 0x12, 0x27 - .byte 0x30, 0x13, 0x19 - .byte 0x00, 0x33, 0x2A - .byte 0x0C, 0x07, 0x27 - .byte 0x11, 0x3A, 0x1C - .byte 0x15, 0x0A, 0x13 - .byte 0x1F, 0x0D, 0x2A - .byte 0x37, 0x07, 0x2A - .byte 0x34, 0x35, 0x34 - .byte 0x28, 0x16, 0x27 - .byte 0x06, 0x02, 0x36 - .byte 0x09, 0x23, 0x30 - .byte 0x14, 0x02, 0x28 - .byte 0x39, 0x32, 0x34 - .byte 0x24, 0x35, 0x12 - .byte 0x12, 0x22, 0x26 - .byte 0x09, 0x07, 0x33 - .byte 0x0F, 0x3E, 0x1E - .byte 0x00, 0x3C, 0x33 - .byte 0x10, 0x37, 0x14 - .byte 0x3A, 0x03, 0x25 - .byte 0x2D, 0x1E, 0x24 - .byte 0x36, 0x36, 0x26 - .byte 0x1F, 0x3C, 0x1A - .byte 0x37, 0x33, 0x25 - .byte 0x23, 0x13, 0x1F - .byte 0x33, 0x0D, 0x13 - .byte 0x25, 0x30, 0x1E - .byte 0x17, 0x03, 0x18 - .byte 0x18, 0x18, 0x14 - .byte 0x30, 0x07, 0x22 - .byte 0x3E, 0x33, 0x21 - .byte 0x14, 0x37, 0x16 - .byte 0x16, 0x00, 0x12 - .byte 0x2C, 0x12, 0x2F - .byte 0x25, 0x3F, 0x1E - .byte 0x24, 0x19, 0x16 - .byte 0x16, 0x0F, 0x35 - .byte 0x2D, 0x10, 0x11 - .byte 0x24, 0x2A, 0x28 - .byte 0x19, 0x25, 0x2E - .byte 0x0C, 0x16, 0x1F - .byte 0x38, 0x21, 0x36 - .byte 0x3D, 0x1A, 0x2F - .byte 0x3B, 0x32, 0x12 - .byte 0x36, 0x13, 0x29 - .byte 0x0E, 0x30, 0x31 - .byte 0x19, 0x07, 0x2F - .byte 0x25, 0x23, 0x28 - .byte 0x20, 0x08, 0x29 - .byte 0x2A, 0x00, 0x30 - .byte 0x30, 0x38, 0x23 - .byte 0x1E, 0x0F, 0x1F - .byte 0x3B, 0x1B, 0x30 - .byte 0x3A, 0x37, 0x2F - .byte 0x39, 0x37, 0x35 - .byte 0x39, 0x2D, 0x2F - .byte 0x1F, 0x2E, 0x1E - .byte 0x1A, 0x2B, 0x1E - .byte 0x14, 0x17, 0x20 - .byte 0x2F, 0x03, 0x11 - .byte 0x1D, 0x00, 0x30 - .byte 0x17, 0x2B, 0x1D - .byte 0x35, 0x28, 0x25 - .byte 0x3B, 0x0F, 0x11 - .byte 0x09, 0x04, 0x2E - .byte 0x23, 0x11, 0x1E - .byte 0x13, 0x37, 0x1E - .byte 0x37, 0x37, 0x1E - .byte 0x07, 0x01, 0x32 - .byte 0x14, 0x06, 0x32 - .byte 0x11, 0x0C, 0x2E - .byte 0x36, 0x2E, 0x24 - .byte 0x15, 0x2A, 0x1C - .byte 0x22, 0x15, 0x34 - .byte 0x2C, 0x1E, 0x35 - .byte 0x22, 0x27, 0x33 - .byte 0x19, 0x3F, 0x2D - .byte 0x21, 0x33, 0x15 - .byte 0x26, 0x1A, 0x11 - .byte 0x16, 0x3E, 0x12 - .byte 0x2B, 0x24, 0x15 - .byte 0x3C, 0x0F, 0x2D - .byte 0x31, 0x15, 0x36 - .byte 0x3F, 0x24, 0x1D - .byte 0x25, 0x01, 0x37 - .byte 0x33, 0x16, 0x1A - .byte 0x1F, 0x0E, 0x10 - .byte 0x2F, 0x0B, 0x12 - .byte 0x2A, 0x1A, 0x25 - .byte 0x17, 0x0A, 0x35 - .byte 0x09, 0x28, 0x35 - .byte 0x02, 0x13, 0x36 - .byte 0x34, 0x2F, 0x17 - .byte 0x03, 0x04, 0x31 - .byte 0x3E, 0x26, 0x11 - .byte 0x35, 0x33, 0x31 - .byte 0x22, 0x17, 0x23 - .byte 0x1D, 0x05, 0x2B - .byte 0x2E, 0x27, 0x20 - .byte 0x03, 0x2B, 0x1D - .byte 0x01, 0x19, 0x1E - .byte 0x0E, 0x05, 0x18 - .byte 0x16, 0x25, 0x17 - .byte 0x02, 0x28, 0x18 - .byte 0x19, 0x0B, 0x24 - .byte 0x3E, 0x35, 0x16 - .byte 0x2E, 0x29, 0x25 - .byte 0x3E, 0x38, 0x1E - .byte 0x3A, 0x2F, 0x12 - .byte 0x14, 0x17, 0x2D - .byte 0x11, 0x12, 0x30 - .byte 0x15, 0x31, 0x18 - .byte 0x08, 0x0B, 0x29 - .byte 0x2D, 0x00, 0x33 - .byte 0x2C, 0x06, 0x1A - .byte 0x14, 0x1C, 0x2E - .byte 0x04, 0x08, 0x12 - .byte 0x1B, 0x2B, 0x2D - .byte 0x2A, 0x37, 0x33 - .byte 0x10, 0x27, 0x2C - .byte 0x1D, 0x0E, 0x34 - .byte 0x20, 0x02, 0x12 - .byte 0x1E, 0x1A, 0x2E - .byte 0x07, 0x0B, 0x10 - .byte 0x36, 0x1E, 0x33 - .byte 0x2B, 0x28, 0x1B - .byte 0x31, 0x25, 0x1F - .byte 0x38, 0x3A, 0x2F - .byte 0x39, 0x30, 0x2F - .byte 0x12, 0x09, 0x14 - .byte 0x0E, 0x08, 0x19 - .byte 0x00, 0x0D, 0x2C - .byte 0x1B, 0x0E, 0x34 - .byte 0x11, 0x25, 0x15 - .byte 0x0C, 0x2D, 0x26 - .byte 0x36, 0x2C, 0x16 - .byte 0x31, 0x31, 0x2C - .byte 0x03, 0x1A, 0x16 - .byte 0x1C, 0x32, 0x14 - .byte 0x0A, 0x3E, 0x36 - .byte 0x33, 0x1B, 0x27 - .byte 0x1F, 0x32, 0x18 - .byte 0x33, 0x26, 0x33 - .byte 0x1A, 0x13, 0x1A - .byte 0x0F, 0x34, 0x1C - .byte 0x35, 0x2C, 0x2F - .byte 0x38, 0x03, 0x18 - .byte 0x15, 0x0F, 0x27 - .byte 0x31, 0x29, 0x20 - .byte 0x28, 0x0E, 0x28 - .byte 0x31, 0x2C, 0x2E - .byte 0x15, 0x19, 0x1B - .byte 0x10, 0x03, 0x2F - .byte 0x2E, 0x2A, 0x32 - .byte 0x2A, 0x27, 0x1B - .byte 0x36, 0x04, 0x1E - .byte 0x3B, 0x04, 0x21 - .byte 0x07, 0x2F, 0x19 - .byte 0x27, 0x1D, 0x1D - .byte 0x3C, 0x3D, 0x2E - .byte 0x25, 0x08, 0x32 - .byte 0x3B, 0x34, 0x2A - .byte 0x0C, 0x10, 0x13 - .byte 0x25, 0x35, 0x1A - .byte 0x2F, 0x19, 0x28 - .byte 0x17, 0x00, 0x2B - .byte 0x0A, 0x1C, 0x17 - .byte 0x0A, 0x11, 0x1B - .byte 0x35, 0x13, 0x37 - .byte 0x29, 0x1C, 0x28 - .byte 0x0C, 0x31, 0x35 - .byte 0x3C, 0x10, 0x1A - .byte 0x1B, 0x3A, 0x2D - .byte 0x3A, 0x1C, 0x18 - .byte 0x22, 0x10, 0x2D - .byte 0x1C, 0x3C, 0x12 - .byte 0x17, 0x18, 0x2A - .byte 0x0B, 0x2B, 0x2F - .byte 0x2D, 0x04, 0x2E - .byte 0x3C, 0x13, 0x23 - .byte 0x01, 0x1C, 0x2E - .byte 0x14, 0x16, 0x22 - .byte 0x0C, 0x24, 0x13 - .byte 0x35, 0x37, 0x34 - .byte 0x1B, 0x30, 0x1E - .byte 0x3A, 0x1C, 0x20 - .byte 0x06, 0x06, 0x36 - .byte 0x09, 0x15, 0x1A - .byte 0x1B, 0x1A, 0x27 - .byte 0x0F, 0x33, 0x35 - .byte 0x37, 0x06, 0x23 - .byte 0x3A, 0x12, 0x1D - .byte 0x00, 0x16, 0x29 - .byte 0x0E, 0x1D, 0x35 - .byte 0x3F, 0x38, 0x16 - .byte 0x2A, 0x3C, 0x34 - .byte 0x13, 0x32, 0x10 - .byte 0x17, 0x2C, 0x37 - .byte 0x29, 0x2A, 0x1E - .byte 0x35, 0x2F, 0x2D - .byte 0x3C, 0x2A, 0x11 - .byte 0x28, 0x13, 0x21 - .byte 0x19, 0x1E, 0x34 - .byte 0x0C, 0x06, 0x2D - .byte 0x09, 0x04, 0x1C - .byte 0x1D, 0x2F, 0x26 - .byte 0x39, 0x07, 0x16 - .byte 0x14, 0x04, 0x2D - .byte 0x3A, 0x2F, 0x2E - .byte 0x29, 0x15, 0x35 - .byte 0x24, 0x02, 0x36 - .byte 0x3F, 0x02, 0x1A - .byte 0x0F, 0x18, 0x24 - .byte 0x16, 0x1D, 0x19 - .byte 0x14, 0x16, 0x10 - .byte 0x29, 0x1B, 0x13 - .byte 0x15, 0x0E, 0x19 - .byte 0x3A, 0x2E, 0x2B - .byte 0x08, 0x30, 0x15 - .byte 0x35, 0x16, 0x30 - .byte 0x2E, 0x18, 0x35 - .byte 0x3B, 0x0B, 0x1C - .byte 0x3A, 0x18, 0x13 - .byte 0x29, 0x13, 0x1E - .byte 0x20, 0x13, 0x27 - .byte 0x04, 0x1D, 0x34 - .byte 0x00, 0x38, 0x19 - .byte 0x08, 0x39, 0x32 - .byte 0x20, 0x10, 0x26 - .byte 0x08, 0x02, 0x28 - .byte 0x3F, 0x0F, 0x16 - .byte 0x30, 0x1F, 0x19 - .byte 0x20, 0x2D, 0x10 - .byte 0x38, 0x17, 0x1C - .byte 0x18, 0x31, 0x27 - .byte 0x33, 0x38, 0x30 - .byte 0x16, 0x33, 0x23 - .byte 0x00, 0x01, 0x36 - .byte 0x0D, 0x02, 0x23 - .byte 0x39, 0x04, 0x1F - .byte 0x0E, 0x30, 0x24 - .byte 0x06, 0x01, 0x2C - .byte 0x34, 0x33, 0x35 - .byte 0x16, 0x34, 0x2E - .byte 0x32, 0x16, 0x24 - .byte 0x26, 0x39, 0x34 - .byte 0x1F, 0x3C, 0x1D - .byte 0x28, 0x1D, 0x37 - .byte 0x17, 0x15, 0x2B - .byte 0x27, 0x39, 0x30 - .byte 0x0B, 0x1B, 0x18 - .byte 0x35, 0x20, 0x2D - .byte 0x0B, 0x35, 0x1C - .byte 0x03, 0x0E, 0x21 - .byte 0x06, 0x0C, 0x20 - .byte 0x02, 0x18, 0x34 - .byte 0x1E, 0x36, 0x2D - .byte 0x16, 0x0C, 0x19 - .byte 0x25, 0x09, 0x2C - .byte 0x37, 0x05, 0x2E - .byte 0x2E, 0x2B, 0x2C - .byte 0x24, 0x1A, 0x14 - .byte 0x27, 0x04, 0x10 - .byte 0x32, 0x38, 0x33 - .byte 0x37, 0x15, 0x35 - .byte 0x11, 0x3F, 0x1D - .byte 0x23, 0x23, 0x1F - .byte 0x29, 0x3F, 0x1D - .byte 0x1A, 0x3C, 0x2B - .byte 0x1B, 0x2C, 0x2C - .byte 0x38, 0x3B, 0x36 - .byte 0x04, 0x13, 0x33 - .byte 0x2C, 0x14, 0x12 - .byte 0x1A, 0x09, 0x1B - .byte 0x36, 0x11, 0x24 - .byte 0x3A, 0x3F, 0x11 - .byte 0x01, 0x0E, 0x2B - .byte 0x3B, 0x03, 0x2A - .byte 0x08, 0x0D, 0x2B - .byte 0x2B, 0x13, 0x27 - .byte 0x3A, 0x3C, 0x1C - .byte 0x3A, 0x15, 0x2A - .byte 0x24, 0x00, 0x17 - .byte 0x3E, 0x0A, 0x15 - .byte 0x0C, 0x29, 0x2D - .byte 0x1F, 0x15, 0x30 - .byte 0x35, 0x18, 0x19 - .byte 0x3D, 0x37, 0x37 - .byte 0x12, 0x38, 0x1B - .byte 0x3B, 0x02, 0x20 - .byte 0x08, 0x21, 0x19 - .byte 0x2E, 0x36, 0x1D - .byte 0x15, 0x3D, 0x24 - .byte 0x22, 0x0C, 0x27 - .byte 0x36, 0x3F, 0x33 - .byte 0x33, 0x12, 0x11 - .byte 0x1A, 0x19, 0x1F - .byte 0x2B, 0x24, 0x12 - .byte 0x11, 0x2A, 0x18 - .byte 0x25, 0x32, 0x2A - .byte 0x2C, 0x1A, 0x12 - .byte 0x26, 0x06, 0x10 - .byte 0x11, 0x29, 0x33 - .byte 0x2C, 0x09, 0x14 - .byte 0x2B, 0x12, 0x2B - .byte 0x1D, 0x03, 0x24 - .byte 0x00, 0x12, 0x15 - .byte 0x22, 0x3D, 0x26 - .byte 0x15, 0x37, 0x1A - .byte 0x0F, 0x12, 0x37 - .byte 0x24, 0x01, 0x18 - .byte 0x2A, 0x17, 0x13 - .byte 0x14, 0x3B, 0x29 - .byte 0x2A, 0x19, 0x32 - .byte 0x2D, 0x17, 0x17 - .byte 0x0B, 0x2C, 0x33 - .byte 0x07, 0x2D, 0x34 - .byte 0x07, 0x38, 0x1D - .byte 0x1F, 0x36, 0x22 - .byte 0x11, 0x0A, 0x17 - .byte 0x14, 0x11, 0x13 - .byte 0x2A, 0x17, 0x25 - .byte 0x01, 0x3A, 0x1C - .byte 0x26, 0x27, 0x30 - .byte 0x2D, 0x3B, 0x35 - .byte 0x3A, 0x30, 0x34 - .byte 0x06, 0x3A, 0x1C - .byte 0x2D, 0x05, 0x13 - .byte 0x21, 0x32, 0x12 - .byte 0x3E, 0x1E, 0x2C - .byte 0x3A, 0x3F, 0x2D - .byte 0x20, 0x2A, 0x34 - .byte 0x26, 0x03, 0x1A - .byte 0x19, 0x27, 0x2E - .byte 0x31, 0x04, 0x26 - .byte 0x2A, 0x3F, 0x30 - .byte 0x25, 0x23, 0x2A - .byte 0x08, 0x08, 0x35 - .byte 0x2C, 0x30, 0x1E - .byte 0x08, 0x05, 0x18 - .byte 0x06, 0x09, 0x2D - .byte 0x19, 0x00, 0x27 - .byte 0x0D, 0x10, 0x19 - .byte 0x1C, 0x00, 0x13 - .byte 0x3D, 0x0B, 0x24 - .byte 0x2E, 0x1F, 0x16 - .byte 0x3D, 0x18, 0x34 - .byte 0x12, 0x1E, 0x15 - .byte 0x15, 0x39, 0x25 - .byte 0x33, 0x0F, 0x17 - .byte 0x1A, 0x1C, 0x1B - .byte 0x37, 0x29, 0x1B - .byte 0x3B, 0x38, 0x12 - .byte 0x1D, 0x22, 0x34 - .byte 0x26, 0x0A, 0x31 - .byte 0x16, 0x2D, 0x13 - .byte 0x0D, 0x20, 0x27 - .byte 0x24, 0x1D, 0x16 - .byte 0x2E, 0x2B, 0x18 - .byte 0x16, 0x2A, 0x1B - .byte 0x24, 0x17, 0x36 - .byte 0x02, 0x05, 0x2B - .byte 0x37, 0x1A, 0x17 - .byte 0x11, 0x3D, 0x2C - .byte 0x1E, 0x2F, 0x22 - .byte 0x2C, 0x29, 0x1A - .byte 0x2F, 0x04, 0x25 - .byte 0x36, 0x0C, 0x35 - .byte 0x30, 0x3E, 0x12 - .byte 0x11, 0x30, 0x37 - .byte 0x12, 0x21, 0x2E - .byte 0x21, 0x30, 0x17 - .byte 0x2C, 0x3D, 0x24 - .byte 0x11, 0x23, 0x14 - .byte 0x1A, 0x32, 0x17 - .byte 0x39, 0x27, 0x18 - .byte 0x0F, 0x24, 0x19 - .byte 0x00, 0x3D, 0x37 - .byte 0x2C, 0x3C, 0x1C - .byte 0x0B, 0x39, 0x23 - .byte 0x0E, 0x04, 0x1F - .byte 0x1C, 0x31, 0x14 - .byte 0x00, 0x04, 0x15 - .byte 0x26, 0x2A, 0x2A - .byte 0x20, 0x25, 0x2A - .byte 0x0B, 0x3C, 0x33 - .byte 0x11, 0x0B, 0x2E - .byte 0x37, 0x22, 0x2E - .byte 0x0E, 0x22, 0x26 - .byte 0x18, 0x2D, 0x27 - .byte 0x06, 0x0C, 0x1C - .byte 0x26, 0x18, 0x2F - .byte 0x3A, 0x01, 0x2A - .byte 0x2F, 0x31, 0x34 - .byte 0x1F, 0x34, 0x1A - .byte 0x31, 0x05, 0x10 - .byte 0x2E, 0x17, 0x34 - .byte 0x18, 0x22, 0x23 - .byte 0x23, 0x21, 0x32 - .byte 0x07, 0x08, 0x22 - .byte 0x26, 0x1C, 0x22 - .byte 0x31, 0x12, 0x2F - .byte 0x08, 0x1F, 0x10 - .byte 0x27, 0x15, 0x2A - .byte 0x1F, 0x0B, 0x26 - .byte 0x2F, 0x14, 0x35 - .byte 0x24, 0x1F, 0x26 - .byte 0x3B, 0x23, 0x33 - .byte 0x20, 0x3E, 0x2D - .byte 0x17, 0x0C, 0x15 - .byte 0x13, 0x39, 0x1A - .byte 0x30, 0x14, 0x25 - .byte 0x09, 0x07, 0x17 - .byte 0x38, 0x38, 0x1F - .byte 0x29, 0x24, 0x27 - .byte 0x17, 0x27, 0x28 - .byte 0x1B, 0x12, 0x2A - .byte 0x2B, 0x3D, 0x2D - .byte 0x19, 0x34, 0x1C - .byte 0x01, 0x1D, 0x10 - .byte 0x08, 0x39, 0x11 - .byte 0x0E, 0x36, 0x1B - .byte 0x26, 0x13, 0x10 - .byte 0x16, 0x28, 0x1E - .byte 0x3C, 0x28, 0x17 - .byte 0x3E, 0x39, 0x34 - .byte 0x0A, 0x03, 0x2E - .byte 0x37, 0x1A, 0x13 - .byte 0x2B, 0x33, 0x26 - .byte 0x13, 0x2C, 0x21 - .byte 0x25, 0x14, 0x10 - .byte 0x16, 0x0B, 0x35 - .byte 0x1D, 0x35, 0x33 - .byte 0x21, 0x08, 0x33 - .byte 0x28, 0x21, 0x1A - .byte 0x12, 0x0C, 0x1B - .byte 0x36, 0x2A, 0x19 - .byte 0x2C, 0x2B, 0x23 - .byte 0x01, 0x0F, 0x26 - .byte 0x17, 0x0C, 0x18 - .byte 0x09, 0x0F, 0x11 - .byte 0x2B, 0x24, 0x1C - .byte 0x09, 0x09, 0x15 - .byte 0x36, 0x08, 0x13 - .byte 0x20, 0x39, 0x21 - .byte 0x00, 0x3A, 0x1F - .byte 0x2B, 0x36, 0x31 - .byte 0x02, 0x37, 0x13 - .byte 0x04, 0x34, 0x35 - .byte 0x37, 0x3D, 0x1A - .byte 0x17, 0x3D, 0x13 - .byte 0x2B, 0x36, 0x2F - .byte 0x13, 0x1E, 0x13 - .byte 0x3E, 0x11, 0x33 - .byte 0x27, 0x3A, 0x2D - .byte 0x1E, 0x31, 0x1A - .byte 0x03, 0x03, 0x2D - .byte 0x25, 0x37, 0x1F - .byte 0x11, 0x01, 0x22 - .byte 0x1C, 0x12, 0x17 - .byte 0x30, 0x3A, 0x30 - .byte 0x17, 0x1D, 0x29 - .byte 0x0E, 0x13, 0x27 - .byte 0x1A, 0x2E, 0x24 - .byte 0x2D, 0x00, 0x1C - .byte 0x17, 0x28, 0x1D - .byte 0x09, 0x1F, 0x2E - .byte 0x1A, 0x2D, 0x26 - .byte 0x0A, 0x13, 0x32 - .byte 0x3E, 0x00, 0x27 - .byte 0x0B, 0x3B, 0x30 - .byte 0x08, 0x3A, 0x2D - .byte 0x22, 0x12, 0x1E - .byte 0x34, 0x1D, 0x2B - .byte 0x26, 0x22, 0x35 - .byte 0x17, 0x2C, 0x17 - .byte 0x29, 0x13, 0x2D - .byte 0x2D, 0x10, 0x10 - .byte 0x20, 0x31, 0x23 - .byte 0x1E, 0x33, 0x18 - .byte 0x33, 0x06, 0x2D - .byte 0x26, 0x14, 0x27 - .byte 0x22, 0x1D, 0x2A - .byte 0x2D, 0x06, 0x18 - .byte 0x07, 0x09, 0x2E - .byte 0x21, 0x15, 0x2E - .byte 0x21, 0x38, 0x23 - .byte 0x35, 0x0B, 0x34 - .byte 0x24, 0x0B, 0x22 - .byte 0x1E, 0x01, 0x17 - .byte 0x0B, 0x24, 0x11 - .byte 0x17, 0x07, 0x20 - .byte 0x14, 0x25, 0x32 - .byte 0x1A, 0x0E, 0x2F - .byte 0x35, 0x17, 0x1F - .byte 0x0C, 0x08, 0x21 - .byte 0x30, 0x35, 0x1F - .byte 0x0C, 0x0B, 0x20 - .byte 0x04, 0x10, 0x11 - .byte 0x35, 0x11, 0x1E - .byte 0x33, 0x3D, 0x16 - .byte 0x1E, 0x2B, 0x1D - .byte 0x1A, 0x19, 0x10 - .byte 0x04, 0x06, 0x22 - .byte 0x03, 0x3D, 0x24 - .byte 0x2A, 0x0E, 0x35 - .byte 0x03, 0x3E, 0x17 - .byte 0x0B, 0x18, 0x36 - .byte 0x3D, 0x0D, 0x26 - .byte 0x35, 0x12, 0x20 - .byte 0x1F, 0x0D, 0x16 - .byte 0x23, 0x32, 0x1A - .byte 0x00, 0x3D, 0x26 - .byte 0x30, 0x19, 0x36 - .byte 0x12, 0x0E, 0x23 - .byte 0x01, 0x23, 0x28 - .byte 0x3B, 0x31, 0x11 - .byte 0x2D, 0x1C, 0x36 - .byte 0x2A, 0x05, 0x16 - .byte 0x14, 0x0E, 0x30 - .byte 0x3A, 0x37, 0x19 - .byte 0x1F, 0x30, 0x25 - .byte 0x10, 0x26, 0x2F - .byte 0x22, 0x11, 0x1F - .byte 0x2E, 0x2B, 0x1E - .byte 0x16, 0x16, 0x21 - .byte 0x32, 0x18, 0x35 - .byte 0x23, 0x32, 0x1A - .byte 0x3D, 0x0D, 0x19 - .byte 0x39, 0x09, 0x23 - .byte 0x30, 0x2E, 0x24 - .byte 0x1E, 0x0F, 0x24 - .byte 0x09, 0x21, 0x31 - .byte 0x05, 0x03, 0x11 - .byte 0x05, 0x22, 0x2A - .byte 0x03, 0x07, 0x37 - .byte 0x04, 0x08, 0x13 - .byte 0x05, 0x10, 0x34 - .byte 0x37, 0x14, 0x29 - .byte 0x0A, 0x24, 0x32 - .byte 0x34, 0x1E, 0x1B - .byte 0x12, 0x17, 0x2E - .byte 0x01, 0x02, 0x13 - .byte 0x0A, 0x0C, 0x11 - .byte 0x02, 0x14, 0x13 - .byte 0x0D, 0x25, 0x23 - .byte 0x00, 0x07, 0x1A - .byte 0x1C, 0x28, 0x35 - .byte 0x08, 0x0E, 0x2C - .byte 0x1B, 0x3C, 0x15 - .byte 0x1C, 0x19, 0x1D - .byte 0x32, 0x13, 0x1A - .byte 0x1C, 0x00, 0x37 - .byte 0x22, 0x1B, 0x35 - .byte 0x39, 0x3E, 0x14 - .byte 0x32, 0x06, 0x31 - .byte 0x17, 0x05, 0x2B - .byte 0x01, 0x0F, 0x20 - .byte 0x1E, 0x0F, 0x34 - .byte 0x18, 0x03, 0x1F - .byte 0x2B, 0x00, 0x14 - .byte 0x15, 0x3A, 0x30 - .byte 0x25, 0x30, 0x21 - .byte 0x0B, 0x00, 0x37 - .byte 0x24, 0x37, 0x1D - .byte 0x29, 0x21, 0x16 - .byte 0x24, 0x0F, 0x2C - .byte 0x3E, 0x15, 0x36 - .byte 0x3C, 0x2D, 0x23 - .byte 0x3D, 0x3C, 0x17 - .byte 0x1A, 0x1C, 0x13 - .byte 0x0A, 0x29, 0x22 - .byte 0x25, 0x3F, 0x26 - .byte 0x3B, 0x39, 0x2F - .byte 0x1D, 0x08, 0x16 - .byte 0x0B, 0x19, 0x14 - .byte 0x12, 0x01, 0x2C - .byte 0x35, 0x11, 0x2A - .byte 0x02, 0x00, 0x13 - .byte 0x39, 0x2A, 0x35 - .byte 0x07, 0x1A, 0x11 - .byte 0x24, 0x0E, 0x1E - .byte 0x0E, 0x2C, 0x15 - .byte 0x08, 0x31, 0x1B - .byte 0x21, 0x1D, 0x26 - .byte 0x1D, 0x1C, 0x2A - .byte 0x1D, 0x24, 0x13 - .byte 0x01, 0x00, 0x18 - .byte 0x28, 0x2A, 0x37 - .byte 0x15, 0x0F, 0x13 - .byte 0x10, 0x32, 0x36 - .byte 0x22, 0x13, 0x31 - .byte 0x13, 0x05, 0x1E - .byte 0x17, 0x35, 0x35 - .byte 0x3B, 0x0E, 0x24 - .byte 0x35, 0x3A, 0x1D - .byte 0x1B, 0x36, 0x1B - .byte 0x03, 0x1D, 0x24 - .byte 0x0F, 0x16, 0x30 - .byte 0x2D, 0x09, 0x25 - .byte 0x05, 0x21, 0x13 - .byte 0x0A, 0x27, 0x36 - .byte 0x04, 0x0D, 0x1C - .byte 0x06, 0x3E, 0x21 - .byte 0x2A, 0x27, 0x33 - .byte 0x28, 0x0E, 0x15 - .byte 0x0B, 0x17, 0x1D - .byte 0x1D, 0x32, 0x2D - .byte 0x08, 0x3D, 0x29 - .byte 0x21, 0x32, 0x17 - .byte 0x33, 0x31, 0x22 - .byte 0x0E, 0x03, 0x21 - .byte 0x0D, 0x0B, 0x16 - .byte 0x3E, 0x2A, 0x2E - .byte 0x19, 0x36, 0x2A - .byte 0x0D, 0x00, 0x14 - .byte 0x22, 0x07, 0x36 - .byte 0x0A, 0x09, 0x15 - .byte 0x14, 0x10, 0x22 - .byte 0x07, 0x16, 0x2C - .byte 0x36, 0x13, 0x15 - .byte 0x09, 0x2F, 0x1B - .byte 0x20, 0x3B, 0x2E - .byte 0x3A, 0x3A, 0x16 - .byte 0x0D, 0x15, 0x2A - .byte 0x39, 0x13, 0x2B - .byte 0x0B, 0x01, 0x2A - .byte 0x13, 0x17, 0x1E - .byte 0x08, 0x17, 0x1E - .byte 0x0C, 0x0F, 0x34 - .byte 0x1F, 0x31, 0x12 - .byte 0x07, 0x3A, 0x1D - .byte 0x35, 0x1E, 0x12 - .byte 0x24, 0x2C, 0x15 - .byte 0x0E, 0x21, 0x19 - .byte 0x34, 0x3B, 0x33 - .byte 0x19, 0x0F, 0x28 - .byte 0x10, 0x2F, 0x2E - .byte 0x23, 0x27, 0x31 - .byte 0x39, 0x2E, 0x18 - .byte 0x3C, 0x3F, 0x24 - .byte 0x07, 0x23, 0x30 - .byte 0x28, 0x13, 0x35 - .byte 0x13, 0x0A, 0x10 - .byte 0x35, 0x19, 0x33 - .byte 0x23, 0x28, 0x29 - .byte 0x13, 0x2F, 0x1A - .byte 0x3A, 0x19, 0x14 - .byte 0x37, 0x36, 0x26 - .byte 0x20, 0x3B, 0x15 - .byte 0x37, 0x39, 0x10 - .byte 0x3C, 0x21, 0x34 - .byte 0x1C, 0x38, 0x30 - .byte 0x15, 0x07, 0x26 - .byte 0x27, 0x21, 0x19 - .byte 0x18, 0x11, 0x23 - .byte 0x30, 0x28, 0x37 - .byte 0x32, 0x2D, 0x1F - .byte 0x2C, 0x3F, 0x30 - .byte 0x1D, 0x2F, 0x26 - .byte 0x01, 0x11, 0x1C - .byte 0x3B, 0x0F, 0x12 - .byte 0x2A, 0x17, 0x27 - .byte 0x05, 0x00, 0x1B - .byte 0x25, 0x1C, 0x32 - .byte 0x04, 0x22, 0x2D - .byte 0x10, 0x0F, 0x25 - .byte 0x0D, 0x39, 0x30 - .byte 0x0B, 0x2E, 0x27 - .byte 0x2D, 0x34, 0x15 - .byte 0x3E, 0x30, 0x36 - .byte 0x16, 0x26, 0x2A - .byte 0x05, 0x3F, 0x2B - .byte 0x20, 0x3B, 0x2E - .byte 0x3B, 0x1C, 0x2F - .byte 0x01, 0x18, 0x16 - .byte 0x16, 0x3D, 0x10 - .byte 0x0A, 0x1F, 0x18 - .byte 0x17, 0x0F, 0x22 - .byte 0x06, 0x13, 0x11 - .byte 0x38, 0x21, 0x17 - .byte 0x17, 0x0A, 0x37 - .byte 0x1C, 0x19, 0x30 - .byte 0x16, 0x38, 0x31 - .byte 0x30, 0x10, 0x36 - .byte 0x31, 0x2F, 0x26 - .byte 0x3C, 0x1B, 0x23 - .byte 0x33, 0x2F, 0x19 - .byte 0x16, 0x35, 0x25 - .byte 0x3A, 0x18, 0x1F - .byte 0x37, 0x01, 0x1E - .byte 0x0D, 0x18, 0x12 - .byte 0x1F, 0x1C, 0x1B - .byte 0x07, 0x34, 0x2D - .byte 0x0B, 0x3F, 0x33 - .byte 0x1E, 0x34, 0x1D - .byte 0x2C, 0x13, 0x2C - .byte 0x20, 0x20, 0x13 - .byte 0x20, 0x0F, 0x31 - .byte 0x08, 0x0F, 0x24 - .byte 0x18, 0x3D, 0x1C - .byte 0x36, 0x34, 0x27 - .byte 0x33, 0x2A, 0x25 - .byte 0x2D, 0x30, 0x26 - .byte 0x3D, 0x37, 0x26 - .byte 0x25, 0x11, 0x11 - .byte 0x03, 0x05, 0x18 - .byte 0x10, 0x04, 0x29 - .byte 0x07, 0x2E, 0x36 - .byte 0x2A, 0x29, 0x15 - .byte 0x3A, 0x0E, 0x33 - .byte 0x2A, 0x06, 0x29 - .byte 0x3D, 0x01, 0x29 - .byte 0x27, 0x0E, 0x16 - .byte 0x1D, 0x28, 0x1B - .byte 0x10, 0x33, 0x2B - .byte 0x0C, 0x14, 0x1D - .byte 0x15, 0x3F, 0x25 - .byte 0x37, 0x23, 0x1E - .byte 0x04, 0x2C, 0x1C - .byte 0x15, 0x34, 0x2A - .byte 0x09, 0x2F, 0x15 - .byte 0x02, 0x3F, 0x14 - .byte 0x19, 0x2C, 0x33 - .byte 0x39, 0x32, 0x20 - .byte 0x2A, 0x18, 0x32 - .byte 0x17, 0x23, 0x21 - .byte 0x0B, 0x2D, 0x25 - .byte 0x24, 0x3A, 0x2D - .byte 0x31, 0x3F, 0x34 - .byte 0x18, 0x19, 0x24 - .byte 0x1E, 0x15, 0x1A - .byte 0x17, 0x33, 0x2B - .byte 0x23, 0x09, 0x26 - .byte 0x1B, 0x0D, 0x15 - .byte 0x36, 0x26, 0x28 - .byte 0x3A, 0x1C, 0x14 - .byte 0x0C, 0x3E, 0x10 - .byte 0x18, 0x06, 0x35 - .byte 0x37, 0x26, 0x36 - .byte 0x21, 0x26, 0x17 - .byte 0x3D, 0x1C, 0x2C - .byte 0x16, 0x25, 0x1D - .byte 0x1E, 0x0B, 0x1E - .byte 0x1D, 0x0D, 0x32 - .byte 0x08, 0x1F, 0x1B - .byte 0x12, 0x1C, 0x12 - .byte 0x20, 0x2A, 0x28 - .byte 0x06, 0x3B, 0x35 - .byte 0x39, 0x0E, 0x1E - .byte 0x31, 0x30, 0x28 - .byte 0x02, 0x21, 0x14 - .byte 0x06, 0x1E, 0x29 - .byte 0x16, 0x09, 0x1C - .byte 0x27, 0x32, 0x2D - .byte 0x39, 0x03, 0x27 - .byte 0x29, 0x09, 0x1E - .byte 0x1B, 0x11, 0x1C - .byte 0x28, 0x3A, 0x2C - .byte 0x03, 0x03, 0x18 - .byte 0x23, 0x09, 0x2F - .byte 0x30, 0x17, 0x23 - .byte 0x0F, 0x25, 0x33 - .byte 0x06, 0x24, 0x37 - .byte 0x22, 0x09, 0x33 - .byte 0x2C, 0x09, 0x2A - .byte 0x0C, 0x12, 0x2A - .byte 0x28, 0x20, 0x10 - .byte 0x15, 0x29, 0x33 - .byte 0x0F, 0x1A, 0x13 - .byte 0x13, 0x18, 0x36 - .byte 0x2E, 0x16, 0x13 - .byte 0x3C, 0x1A, 0x15 - .byte 0x3A, 0x11, 0x32 - .byte 0x02, 0x0A, 0x2C - .byte 0x19, 0x39, 0x11 - .byte 0x31, 0x3E, 0x1D - .byte 0x32, 0x14, 0x32 - .byte 0x12, 0x2E, 0x34 - .byte 0x3E, 0x36, 0x23 - .byte 0x37, 0x3E, 0x15 - .byte 0x15, 0x35, 0x34 - .byte 0x01, 0x3A, 0x2C - .byte 0x26, 0x25, 0x22 - .byte 0x01, 0x2B, 0x37 - .byte 0x1C, 0x3D, 0x33 - .byte 0x3E, 0x10, 0x1C - .byte 0x26, 0x33, 0x19 - .byte 0x05, 0x19, 0x17 - .byte 0x12, 0x38, 0x1C - .byte 0x15, 0x3C, 0x32 - .byte 0x3F, 0x0F, 0x37 - .byte 0x02, 0x39, 0x32 - .byte 0x13, 0x00, 0x1D - .byte 0x1D, 0x2C, 0x10 - .byte 0x39, 0x13, 0x31 - .byte 0x0F, 0x37, 0x19 - .byte 0x09, 0x0D, 0x2A - .byte 0x20, 0x2F, 0x32 - .byte 0x3B, 0x34, 0x22 - .byte 0x26, 0x14, 0x10 - .byte 0x24, 0x3D, 0x22 - .byte 0x0B, 0x31, 0x23 - .byte 0x2F, 0x2D, 0x2A - .byte 0x30, 0x04, 0x35 - .byte 0x19, 0x20, 0x2A - .byte 0x16, 0x36, 0x37 - .byte 0x14, 0x28, 0x37 - .byte 0x11, 0x0B, 0x27 - .byte 0x1D, 0x06, 0x29 - .byte 0x35, 0x16, 0x2E - .byte 0x24, 0x2E, 0x29 - .byte 0x36, 0x14, 0x2A - .byte 0x21, 0x0C, 0x1F - .byte 0x3F, 0x39, 0x19 - .byte 0x27, 0x10, 0x2A - .byte 0x1E, 0x12, 0x34 - .byte 0x10, 0x24, 0x34 - .byte 0x1D, 0x13, 0x1D - .byte 0x17, 0x16, 0x37 - .byte 0x27, 0x1B, 0x27 - .byte 0x07, 0x24, 0x21 - .byte 0x37, 0x21, 0x11 - .byte 0x37, 0x28, 0x24 - .byte 0x19, 0x02, 0x1C - .byte 0x14, 0x12, 0x1D - .byte 0x1B, 0x24, 0x2E - .byte 0x2E, 0x3A, 0x15 - .byte 0x37, 0x34, 0x21 - .byte 0x33, 0x2D, 0x29 - .byte 0x2F, 0x1E, 0x34 - .byte 0x29, 0x3C, 0x12 - .byte 0x05, 0x15, 0x20 - .byte 0x05, 0x3E, 0x19 - .byte 0x18, 0x0B, 0x30 - .byte 0x2F, 0x02, 0x27 - .byte 0x14, 0x1C, 0x34 - .byte 0x12, 0x20, 0x30 - .byte 0x2B, 0x22, 0x1B - .byte 0x06, 0x31, 0x28 - .byte 0x15, 0x2D, 0x12 - .byte 0x01, 0x0E, 0x13 - .byte 0x13, 0x0C, 0x28 - .byte 0x07, 0x2A, 0x14 - .byte 0x1D, 0x36, 0x14 - .byte 0x15, 0x2B, 0x26 - .byte 0x03, 0x25, 0x15 - .byte 0x3E, 0x3B, 0x20 - .byte 0x35, 0x0C, 0x25 - .byte 0x2B, 0x16, 0x35 - .byte 0x1E, 0x31, 0x2C - .byte 0x06, 0x03, 0x29 - .byte 0x24, 0x07, 0x1F - .byte 0x32, 0x2F, 0x19 - .byte 0x25, 0x21, 0x31 - .byte 0x22, 0x26, 0x1D - .byte 0x00, 0x1B, 0x18 - .byte 0x2A, 0x24, 0x31 - .byte 0x20, 0x06, 0x2F - .byte 0x1E, 0x32, 0x26 - .byte 0x32, 0x39, 0x12 - .byte 0x20, 0x01, 0x19 - .byte 0x0F, 0x15, 0x15 - .byte 0x27, 0x10, 0x2E - .byte 0x09, 0x25, 0x19 - .byte 0x29, 0x37, 0x30 - .byte 0x13, 0x1C, 0x1D - .byte 0x29, 0x2D, 0x26 - .byte 0x02, 0x1A, 0x16 - .byte 0x1D, 0x2B, 0x1C - .byte 0x18, 0x04, 0x34 - .byte 0x28, 0x2A, 0x21 - .byte 0x15, 0x1B, 0x2E - .byte 0x16, 0x01, 0x10 - .byte 0x05, 0x09, 0x14 - .byte 0x22, 0x03, 0x22 - .byte 0x02, 0x1B, 0x34 - .byte 0x29, 0x2A, 0x23 - .byte 0x26, 0x36, 0x13 - .byte 0x23, 0x3D, 0x1A - .byte 0x1D, 0x10, 0x24 - .byte 0x25, 0x2B, 0x37 - .byte 0x19, 0x24, 0x26 - .byte 0x28, 0x13, 0x16 - .byte 0x17, 0x14, 0x19 - .byte 0x0B, 0x2F, 0x25 - .byte 0x37, 0x34, 0x37 - .byte 0x39, 0x21, 0x1B - .byte 0x0F, 0x3D, 0x2D - .byte 0x0D, 0x10, 0x20 - .byte 0x05, 0x0B, 0x2D - .byte 0x01, 0x12, 0x24 - .byte 0x18, 0x3D, 0x32 - .byte 0x09, 0x21, 0x26 - .byte 0x1A, 0x0E, 0x1F - .byte 0x30, 0x06, 0x1F - .byte 0x0B, 0x3C, 0x29 - .byte 0x07, 0x3E, 0x27 - .byte 0x13, 0x1E, 0x1A - .byte 0x13, 0x07, 0x23 - .byte 0x10, 0x34, 0x1E - .byte 0x32, 0x17, 0x23 - .byte 0x35, 0x16, 0x31 - .byte 0x32, 0x2E, 0x1B - .byte 0x28, 0x0E, 0x22 - .byte 0x14, 0x3A, 0x23 - .byte 0x22, 0x03, 0x29 - .byte 0x2A, 0x10, 0x20 - .byte 0x3E, 0x3C, 0x27 - .byte 0x16, 0x20, 0x12 - .byte 0x3F, 0x24, 0x31 - .byte 0x0D, 0x2E, 0x32 - .byte 0x2F, 0x17, 0x2D - .byte 0x36, 0x3B, 0x17 - .byte 0x24, 0x23, 0x18 - .byte 0x37, 0x1D, 0x13 - .byte 0x17, 0x3A, 0x1A - .byte 0x0A, 0x3D, 0x1E - .byte 0x05, 0x12, 0x16 - .byte 0x33, 0x32, 0x25 - .byte 0x1D, 0x1F, 0x29 - .byte 0x34, 0x2C, 0x26 - .byte 0x20, 0x29, 0x35 - .byte 0x0E, 0x32, 0x17 - .byte 0x01, 0x39, 0x2D - .byte 0x27, 0x24, 0x23 - .byte 0x28, 0x3F, 0x18 - .byte 0x39, 0x38, 0x25 - .byte 0x23, 0x11, 0x11 - .byte 0x19, 0x2C, 0x29 - .byte 0x30, 0x08, 0x28 - .byte 0x25, 0x27, 0x1D - .byte 0x17, 0x25, 0x21 - .byte 0x09, 0x3D, 0x16 - .byte 0x1B, 0x0F, 0x2C - .byte 0x1B, 0x12, 0x22 - .byte 0x28, 0x3E, 0x26 - .byte 0x34, 0x10, 0x1B - .byte 0x02, 0x34, 0x15 - .byte 0x1A, 0x29, 0x19 - .byte 0x29, 0x11, 0x31 - .byte 0x12, 0x27, 0x17 - .byte 0x27, 0x27, 0x2F - .byte 0x34, 0x27, 0x24 - .byte 0x03, 0x19, 0x36 - .byte 0x17, 0x1D, 0x33 - .byte 0x19, 0x25, 0x1A - .byte 0x2B, 0x39, 0x13 - .byte 0x3B, 0x33, 0x1D - .byte 0x27, 0x31, 0x34 - .byte 0x28, 0x33, 0x37 - .byte 0x09, 0x30, 0x1B - .byte 0x03, 0x3A, 0x27 - .byte 0x19, 0x11, 0x1F - .byte 0x0B, 0x1A, 0x34 - .byte 0x3D, 0x2A, 0x15 - .byte 0x04, 0x24, 0x36 - .byte 0x30, 0x23, 0x30 - .byte 0x0F, 0x22, 0x1B - .byte 0x3D, 0x3D, 0x24 - .byte 0x29, 0x1D, 0x12 - .byte 0x16, 0x19, 0x2E - .byte 0x03, 0x12, 0x17 - .byte 0x18, 0x25, 0x33 - .byte 0x2F, 0x23, 0x1A - .byte 0x1A, 0x35, 0x27 - .byte 0x21, 0x26, 0x19 - .byte 0x1B, 0x30, 0x18 - .byte 0x2B, 0x22, 0x2D - .byte 0x2C, 0x1A, 0x34 - .byte 0x3E, 0x12, 0x19 - .byte 0x28, 0x27, 0x15 - .byte 0x1B, 0x11, 0x12 - .byte 0x17, 0x15, 0x10 - .byte 0x34, 0x37, 0x25 - .byte 0x12, 0x3F, 0x15 - .byte 0x31, 0x0D, 0x37 - .byte 0x3E, 0x2A, 0x2D - .byte 0x0F, 0x24, 0x24 - .byte 0x3C, 0x3F, 0x1F - .byte 0x1D, 0x34, 0x17 - .byte 0x1A, 0x23, 0x1F - .byte 0x37, 0x0F, 0x10 - .byte 0x32, 0x34, 0x35 - .byte 0x19, 0x05, 0x22 - .byte 0x33, 0x16, 0x34 - .byte 0x1E, 0x14, 0x1E - .byte 0x08, 0x13, 0x29 - .byte 0x3A, 0x37, 0x30 - .byte 0x1D, 0x36, 0x15 - .byte 0x29, 0x2E, 0x1D - .byte 0x32, 0x2E, 0x23 - .byte 0x35, 0x17, 0x1C - .byte 0x36, 0x1D, 0x13 - .byte 0x23, 0x34, 0x34 - .byte 0x24, 0x1A, 0x37 - .byte 0x2F, 0x26, 0x2E - .byte 0x1E, 0x17, 0x1A - .byte 0x1F, 0x15, 0x1F - .byte 0x2B, 0x1F, 0x19 - .byte 0x0A, 0x33, 0x1A - .byte 0x35, 0x31, 0x24 - .byte 0x2D, 0x17, 0x2C - .byte 0x0C, 0x21, 0x36 - .byte 0x2C, 0x35, 0x35 - .byte 0x1B, 0x03, 0x27 - .byte 0x01, 0x0D, 0x1D - .byte 0x1C, 0x0E, 0x11 - .byte 0x11, 0x2B, 0x10 - .byte 0x25, 0x3B, 0x20 - .byte 0x1F, 0x17, 0x19 - .byte 0x20, 0x08, 0x36 - .byte 0x13, 0x38, 0x19 - .byte 0x1B, 0x2B, 0x24 - .byte 0x0B, 0x1F, 0x29 - .byte 0x27, 0x15, 0x2C - .byte 0x37, 0x39, 0x10 - .byte 0x3A, 0x15, 0x2E - .byte 0x2F, 0x11, 0x36 - .byte 0x24, 0x04, 0x20 - .byte 0x3B, 0x2A, 0x35 - .byte 0x27, 0x35, 0x34 - .byte 0x0D, 0x1B, 0x20 - .byte 0x10, 0x22, 0x37 - .byte 0x1F, 0x38, 0x27 - .byte 0x31, 0x0F, 0x28 - .byte 0x28, 0x25, 0x15 - .byte 0x00, 0x1D, 0x25 - .byte 0x31, 0x28, 0x28 - .byte 0x0B, 0x3A, 0x1D - .byte 0x2D, 0x13, 0x1B - .byte 0x03, 0x37, 0x2E - .byte 0x1D, 0x28, 0x19 - .byte 0x08, 0x2D, 0x22 - .byte 0x27, 0x39, 0x32 - .byte 0x3F, 0x2F, 0x1D - .byte 0x33, 0x34, 0x28 - .byte 0x18, 0x08, 0x31 - .byte 0x23, 0x1F, 0x13 - .byte 0x0D, 0x2C, 0x23 - .byte 0x3A, 0x2D, 0x1A - .byte 0x02, 0x25, 0x13 - .byte 0x20, 0x36, 0x34 - .byte 0x12, 0x2B, 0x2D - .byte 0x35, 0x35, 0x34 - .byte 0x23, 0x20, 0x21 - .byte 0x3A, 0x19, 0x1B - .byte 0x1F, 0x2B, 0x19 - .byte 0x35, 0x0E, 0x19 - .byte 0x26, 0x24, 0x37 - .byte 0x18, 0x08, 0x10 - .byte 0x0C, 0x16, 0x2D - .byte 0x1F, 0x34, 0x21 - .byte 0x05, 0x38, 0x19 - .byte 0x14, 0x21, 0x24 - .byte 0x11, 0x31, 0x14 - .byte 0x3E, 0x38, 0x29 - .byte 0x3F, 0x08, 0x25 - .byte 0x2A, 0x1F, 0x25 - .byte 0x25, 0x06, 0x28 - .byte 0x0B, 0x1E, 0x14 - .byte 0x1A, 0x38, 0x22 - .byte 0x24, 0x18, 0x29 - .byte 0x1A, 0x11, 0x20 - .byte 0x3B, 0x3A, 0x1E - .byte 0x1C, 0x26, 0x1A - .byte 0x05, 0x32, 0x19 - .byte 0x39, 0x2A, 0x31 - .byte 0x09, 0x07, 0x25 - .byte 0x05, 0x3E, 0x16 - .byte 0x34, 0x26, 0x14 - .byte 0x1B, 0x32, 0x26 - .byte 0x05, 0x08, 0x37 - .byte 0x0F, 0x03, 0x20 - .byte 0x2A, 0x39, 0x31 - .byte 0x08, 0x01, 0x1E - .byte 0x1D, 0x23, 0x31 - .byte 0x28, 0x1B, 0x28 - .byte 0x1E, 0x37, 0x14 - .byte 0x13, 0x0E, 0x28 - .byte 0x2A, 0x3B, 0x37 - .byte 0x2F, 0x1C, 0x28 - .byte 0x30, 0x30, 0x1A - .byte 0x36, 0x1F, 0x16 - .byte 0x3E, 0x0D, 0x15 - .byte 0x2E, 0x16, 0x18 - .byte 0x15, 0x37, 0x20 - .byte 0x2A, 0x33, 0x30 - .byte 0x2B, 0x0E, 0x25 - .byte 0x18, 0x20, 0x16 - .byte 0x02, 0x19, 0x25 - .byte 0x0A, 0x2E, 0x30 - .byte 0x16, 0x03, 0x11 - .byte 0x04, 0x27, 0x25 - .byte 0x1B, 0x1C, 0x21 - .byte 0x29, 0x04, 0x27 - .byte 0x3D, 0x20, 0x1E - .byte 0x28, 0x33, 0x31 - .byte 0x1E, 0x39, 0x10 - .byte 0x31, 0x29, 0x1E - .byte 0x06, 0x25, 0x28 - .byte 0x19, 0x3B, 0x12 - .byte 0x0B, 0x1B, 0x1C - .byte 0x3E, 0x37, 0x20 - .byte 0x0A, 0x37, 0x33 - .byte 0x02, 0x2C, 0x25 - .byte 0x15, 0x18, 0x14 - .byte 0x3B, 0x20, 0x1C - .byte 0x22, 0x3B, 0x1C - .byte 0x24, 0x34, 0x35 - .byte 0x0F, 0x2F, 0x31 - .byte 0x3B, 0x17, 0x35 - .byte 0x30, 0x39, 0x37 - .byte 0x0D, 0x15, 0x11 - .byte 0x10, 0x03, 0x1E - .byte 0x1A, 0x39, 0x33 - .byte 0x2F, 0x2E, 0x28 - .byte 0x1C, 0x28, 0x36 - .byte 0x28, 0x18, 0x1F - .byte 0x15, 0x01, 0x30 - .byte 0x3E, 0x32, 0x28 - .byte 0x34, 0x2F, 0x23 - .byte 0x07, 0x0C, 0x36 - .byte 0x28, 0x2C, 0x34 - .byte 0x2A, 0x0C, 0x1F - .byte 0x3F, 0x20, 0x13 - .byte 0x2B, 0x17, 0x27 - .byte 0x28, 0x29, 0x2A - .byte 0x3C, 0x13, 0x36 - .byte 0x26, 0x2D, 0x2A - .byte 0x0A, 0x06, 0x1E - .byte 0x20, 0x04, 0x1A - .byte 0x02, 0x07, 0x35 - .byte 0x0E, 0x18, 0x30 - .byte 0x00, 0x34, 0x34 - .byte 0x2F, 0x14, 0x37 - .byte 0x21, 0x30, 0x1F - .byte 0x15, 0x37, 0x1B - .byte 0x3A, 0x0B, 0x32 - .byte 0x22, 0x22, 0x21 - .byte 0x1B, 0x35, 0x23 - .byte 0x0D, 0x03, 0x1C - .byte 0x23, 0x3B, 0x13 - .byte 0x0E, 0x1D, 0x1F - .byte 0x1D, 0x3F, 0x2E - .byte 0x39, 0x27, 0x2E - .byte 0x0F, 0x38, 0x20 - .byte 0x31, 0x3C, 0x35 - .byte 0x0B, 0x0F, 0x2E - .byte 0x06, 0x06, 0x28 - .byte 0x25, 0x39, 0x23 - .byte 0x0A, 0x32, 0x15 - .byte 0x0F, 0x1D, 0x25 - .byte 0x0C, 0x0D, 0x34 - .byte 0x12, 0x2E, 0x21 - .byte 0x36, 0x18, 0x1F - .byte 0x1F, 0x34, 0x1B - .byte 0x05, 0x3A, 0x36 - .byte 0x2B, 0x01, 0x17 - .byte 0x0E, 0x16, 0x2B - .byte 0x0E, 0x0B, 0x26 - .byte 0x0D, 0x2D, 0x10 - .byte 0x21, 0x11, 0x27 - .byte 0x3D, 0x13, 0x32 - .byte 0x15, 0x25, 0x2A - .byte 0x1B, 0x2D, 0x35 - .byte 0x2C, 0x2B, 0x26 - .byte 0x26, 0x1F, 0x20 - .byte 0x22, 0x2B, 0x12 - .byte 0x3F, 0x3D, 0x27 - .byte 0x30, 0x0A, 0x36 - .byte 0x35, 0x1F, 0x17 - .byte 0x21, 0x08, 0x29 - .byte 0x1D, 0x20, 0x33 - .byte 0x34, 0x11, 0x16 - .byte 0x05, 0x38, 0x2D diff --git a/data/maps/LilycoveCity/scripts.inc b/data/maps/LilycoveCity/scripts.inc index 22f980016..f7df3f4ab 100644 --- a/data/maps/LilycoveCity/scripts.inc +++ b/data/maps/LilycoveCity/scripts.inc @@ -164,7 +164,7 @@ LilycoveCity_EventScript_14CC79:: @ 814CC79 LilycoveCity_EventScript_14CC82:: @ 814CC82 lockall - specialvar VAR_0x8004, sub_80C4D50 + specialvar VAR_0x8004, CountPlayerMuseumPaintings switch VAR_0x8004 case 0, LilycoveCity_EventScript_14CCA2 msgbox LilycoveCity_Text_168EA4, MSGBOX_DEFAULT diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc index 5dabc84a3..c3e83734a 100644 --- a/data/maps/LilycoveCity_ContestLobby/scripts.inc +++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc @@ -40,7 +40,7 @@ LilycoveCity_ContestLobby_EventScript_158898:: @ 8158898 LilycoveCity_ContestLobby_EventScript_1588DE:: @ 81588DE msgbox LilycoveCity_ContestLobby_Text_188AE8, MSGBOX_DEFAULT closemessage - special sub_80C4CEC + special SaveMuseumContestPainting setvar VAR_LILYCOVE_CONTEST_LOBBY_STATE, 0 specialvar VAR_RESULT, GiveMonArtistRibbon compare VAR_RESULT, 1 @@ -86,7 +86,7 @@ LilycoveCity_ContestLobby_EventScript_158948:: @ 8158948 return LilycoveCity_ContestLobby_EventScript_158994:: @ 8158994 - specialvar VAR_0x8004, sub_80C4D50 + specialvar VAR_0x8004, CountPlayerMuseumPaintings switch VAR_0x8004 case 1, LilycoveCity_ContestLobby_EventScript_1589D6 case 2, LilycoveCity_ContestLobby_EventScript_1589DA @@ -212,7 +212,7 @@ LilycoveCity_ContestLobby_EventScript_158A6A:: @ 8158A6A LilycoveCity_ContestLobby_EventScript_158AAE:: @ 8158AAE msgbox LilycoveCity_ContestLobby_Text_188AE8, MSGBOX_DEFAULT closemessage - special sub_80C4CEC + special SaveMuseumContestPainting setvar VAR_LILYCOVE_CONTEST_LOBBY_STATE, 0 specialvar VAR_RESULT, GiveMonArtistRibbon compare VAR_RESULT, 1 diff --git a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc index 8c6d9a72b..b8c026a10 100644 --- a/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc +++ b/data/maps/LilycoveCity_LilycoveMuseum_2F/scripts.inc @@ -92,7 +92,7 @@ LilycoveCity_LilycoveMuseum_2F_Movement_1586D5:: @ 81586D5 LilycoveCity_LilycoveMuseum_2F_EventScript_1586D8:: @ 81586D8 lockall goto_if_set FLAG_RECEIVED_GLASS_ORNAMENT, LilycoveCity_LilycoveMuseum_2F_EventScript_158793 - specialvar VAR_0x8004, sub_80C4D50 + specialvar VAR_0x8004, CountPlayerMuseumPaintings switch VAR_0x8004 case 1, LilycoveCity_LilycoveMuseum_2F_EventScript_15872C case 2, LilycoveCity_LilycoveMuseum_2F_EventScript_15872C diff --git a/data/mon_attrs.s b/data/mon_attrs.s index ea47c8de6..76459ad44 100644 --- a/data/mon_attrs.s +++ b/data/mon_attrs.s @@ -138,7 +138,7 @@ gSpriteAffineAnim_81E7BDC:: @ 81E7BDC obj_rot_scal_anim_end .align 2 -gSpriteAffineAnimTable_81E7BEC:: @ 81E7BEC +gAffineAnims_BattleSpriteOpponentSide:: @ 81E7BEC .4byte gSpriteAffineAnim_81E7AA0 .4byte gSpriteAffineAnim_81E7AC0 .4byte gSpriteAffineAnim_81E7AD8 @@ -152,7 +152,7 @@ gSpriteAffineAnimTable_81E7BEC:: @ 81E7BEC .4byte gSpriteAffineAnim_81E7BDC .align 2 -gSpriteAffineAnimTable_81E7C18:: @ 81E7C18 +gAffineAnims_BattleSpriteContest:: @ 81E7C18 .4byte gSpriteAffineAnim_81E7AB0 .4byte gSpriteAffineAnim_81E7AC0 .4byte gSpriteAffineAnim_81E7AD8 diff --git a/data/scripts/contest_hall.inc b/data/scripts/contest_hall.inc index 465b0bfe8..5abc83c86 100644 --- a/data/scripts/contest_hall.inc +++ b/data/scripts/contest_hall.inc @@ -335,7 +335,7 @@ LinkContestRoom1_EventScript_1A5311:: @ 81A5311 return LinkContestRoom1_EventScript_1A5323:: @ 81A5323 - special sub_80C4C64 + special BufferContestTrainerAndMonNames addvar VAR_0x8006, 1 buffernumberstring 1, VAR_0x8006 lockall @@ -1003,7 +1003,7 @@ LinkContestRoom1_EventScript_1A5BAB:: @ 81A5BAB setvar VAR_TEMP_1, 0 call LinkContestRoom1_EventScript_1A5A90 delay 30 - special sub_80C4CF8 + special ShouldReadyContestArtist compare VAR_0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return @@ -1012,7 +1012,7 @@ LinkContestRoom1_EventScript_1A5BF6:: @ 81A5BF6 incrementgamestat GAME_STAT_WON_CONTEST msgbox LinkContestRoom1_Text_1A6DF1, MSGBOX_SIGN delay 90 - special sub_80C4CF8 + special ShouldReadyContestArtist compare VAR_0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C46 return @@ -1049,7 +1049,7 @@ LinkContestRoom1_EventScript_1A5C46:: @ 81A5C46 LinkContestRoom1_EventScript_1A5C4C:: @ 81A5C4C delay 60 call LinkContestRoom1_EventScript_1A5C6A - special sub_80C4CF8 + special ShouldReadyContestArtist compare VAR_0x8004, 1 goto_if_eq LinkContestRoom1_EventScript_1A5C64 closemessage diff --git a/data/specials.inc b/data/specials.inc index a511742e3..2e7ce8fc9 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -86,14 +86,14 @@ gSpecials:: def_special ResetTVShowState def_special ScrSpecial_GetContestWinnerIdx def_special ScrSpecial_GetContestPlayerMonIdx - def_special sub_80C4C28 + def_special GetNpcContestantLocalId def_special ScrSpecial_GetContestWinnerTrainerName def_special ScrSpecial_GetContestWinnerNick - def_special sub_80C4C64 + def_special BufferContestTrainerAndMonNames def_special ScrSpecial_CountContestMonsWithBetterCondition def_special SetContestTrainerGfxIds def_special ScrSpecial_CheckSelectedMonAndInitContest - def_special sub_80C4D80 + def_special GetContestantNamesAtRank def_special ScrSpecial_SetLinkContestTrainerGfxIdx def_special ScrSpecial_GetMonCondition def_special ScrSpecial_CanMonParticipateInSelectedLinkContest @@ -142,10 +142,10 @@ gSpecials:: def_special CalculatePlayerPartyCount def_special GetNumValidDaycarePartyMons def_special CountAlivePartyMonsExceptSelectedOne - def_special sub_80C4CF8 - def_special sub_80C4CEC - def_special sub_80C4C78 - def_special sub_80C4D50 + def_special ShouldReadyContestArtist + def_special SaveMuseumContestPainting + def_special DoesContestCategoryHaveMuseumPainting + def_special CountPlayerMuseumPaintings def_special ShowContestWinner def_special MauvilleGymSpecial2 def_special MauvilleGymSpecial1 diff --git a/data/text/contest_strings.inc b/data/text/contest_strings.inc deleted file mode 100644 index f435f5d15..000000000 --- a/data/text/contest_strings.inc +++ /dev/null @@ -1,669 +0,0 @@ -ContestString_DescHighlyAppealing: - .string "A highly appealing move.$" -ContestString_DescStartled1: - .string "After this move, the user is\nmore easily startled.$" -ContestString_DescGreatLock: - .string "Makes a great appeal, but\nallows no more to the end.$" -ContestString_DescRepeatable: - .string "Can be repeatedly used\nwithout boring the JUDGE.$" -ContestString_DescStartled2: - .string "Can avoid being startled\nby others once.$" -ContestString_DescStartled3: - .string "Can avoid being startled\nby others.$" -ContestString_DescStartled4: - .string "Can avoid being startled\nby others a little.$" -ContestString_DescStartled5: - .string "After this move, the user is\nless likely to be startled.$" -ContestString_DescStartled6: - .string "Slightly startles the\nPOKéMON in front.$" -ContestString_DescStartled7: - .string "Slightly startles those\nthat have made appeals.$" -ContestString_DescStartled8: - .string "Startles the POKéMON that\nappealed before the user.$" -ContestString_DescStartled9: - .string "Startles all POKéMON that\nhave done their appeals.$" -ContestString_DescStartled10: - .string "Badly startles the\nPOKéMON in front.$" -ContestString_DescStartled11: - .string "Badly startles those that\nhave made appeals.$" -ContestString_DescStartled12: - .string "Startles the POKéMON that\nappealed before the user.$" -ContestString_DescStartled13: - .string "Startles all POKéMON that\nappealed before the user.$" -ContestString_DescAttentionShift: - .string "Shifts the JUDGE's\nattention from others.$" -ContestString_DescStartled14: - .string "Startles the POKéMON that\nhas the JUDGE's attention.$" -ContestString_DescJamOthersMissTurn: - .string "Jams the others, and misses\none turn of appeals.$" -ContestString_DescStartled15: - .string "Startles POKéMON that\nmade a same-type appeal.$" -ContestString_DescStartled16: - .string "Badly startles POKéMON\nthat made COOL appeals.$" -ContestString_DescStartled17: - .string "Badly startles POKéMON\nthat made BEAUTY appeals.$" -ContestString_DescStartled18: - .string "Badly startles POKéMON\nthat made CUTE appeals.$" -ContestString_DescStartled19: - .string "Badly startles POKéMON\nthat made SMART appeals.$" -ContestString_DescStartled20: - .string "Badly startles POKéMON\nthat made TOUGH appeals.$" -ContestString_DescNervousOne: - .string "Makes one POKéMON after\nthe user nervous.$" -ContestString_DescNervousAllAfter: - .string "Makes all POKéMON after\nthe user nervous.$" -ContestString_DescConditionWorseBefore: - .string "Worsens the condition of\nthose that made appeals.$" -ContestString_DescStartled21: - .string "Badly startles POKéMON in\ngood condition.$" -ContestString_DescGreatWhenFirst: - .string "The appeal works great if\nperformed first.$" -ContestString_DescGreatWhenLast: - .string "The appeal works great if\nperformed last.$" -ContestString_DescAppealGoodBeforeAll: - .string "Makes the appeal as good\nas those before it.$" -ContestString_DescAppealGoodBeforeOne: - .string "Makes the appeal as good\nas the one before it.$" -ContestString_DescBetterWhenLater: - .string "The appeal works better\nthe later it is performed.$" -ContestString_DescAffectedByTiming: - .string "The appeal's quality varies\ndepending on its timing.$" -ContestString_DescBetterWhenSameType: - .string "Works well if it's the same\ntype as the one before.$" -ContestString_DescBetterWhenDiffType: - .string "Works well if different in\ntype than the one before.$" -ContestString_DescAffectedByFront: - .string "Affected by how well the\nappeal in front goes.$" -ContestString_DescConditionUp: - .string "Ups the user's condition.\nHelps prevent nervousness.$" -ContestString_DescAffectedByCondition: - .string "The appeal works well if the\nuser's condition is good.$" -ContestString_DescAppealEarlier: - .string "The next appeal can be made\nearlier next turn.$" -ContestString_DescAppealLater: - .string "The next appeal can be made\nlater next turn.$" -ContestString_DescRandomOrderEasier: - .string "Makes the next turn's order\nmore easily scrambled.$" -ContestString_DescRandomOrder: - .string "Scrambles the order of\nappeals on the next turn.$" -ContestString_DescAnyExcitement: - .string "An appeal that excites the\naudience in any CONTEST.$" -ContestString_DescStartled22: - .string "Badly startles all POKéMON\nthat made good appeals.$" -ContestString_DescScaleWithExcitement: - .string "The appeal works best the\nmore the crowd is excited.$" -ContestString_DescStopExcitement: - .string "Temporarily stops the\ncrowd from growing excited.$" - - .align 2 -gContestEffectStrings:: @ 83CADD4 - .4byte ContestString_DescHighlyAppealing - .4byte ContestString_DescStartled1 - .4byte ContestString_DescGreatLock - .4byte ContestString_DescRepeatable - .4byte ContestString_DescStartled2 - .4byte ContestString_DescStartled3 - .4byte ContestString_DescStartled4 - .4byte ContestString_DescStartled5 - .4byte ContestString_DescStartled6 - .4byte ContestString_DescStartled7 - .4byte ContestString_DescStartled8 - .4byte ContestString_DescStartled9 - .4byte ContestString_DescStartled10 - .4byte ContestString_DescStartled11 - .4byte ContestString_DescStartled12 - .4byte ContestString_DescStartled13 - .4byte ContestString_DescAttentionShift - .4byte ContestString_DescStartled14 - .4byte ContestString_DescJamOthersMissTurn - .4byte ContestString_DescStartled15 - .4byte ContestString_DescStartled16 - .4byte ContestString_DescStartled17 - .4byte ContestString_DescStartled18 - .4byte ContestString_DescStartled19 - .4byte ContestString_DescStartled20 - .4byte ContestString_DescNervousOne - .4byte ContestString_DescNervousAllAfter - .4byte ContestString_DescConditionWorseBefore - .4byte ContestString_DescStartled21 - .4byte ContestString_DescGreatWhenFirst - .4byte ContestString_DescGreatWhenLast - .4byte ContestString_DescAppealGoodBeforeAll - .4byte ContestString_DescAppealGoodBeforeOne - .4byte ContestString_DescBetterWhenLater - .4byte ContestString_DescAffectedByTiming - .4byte ContestString_DescBetterWhenSameType - .4byte ContestString_DescBetterWhenDiffType - .4byte ContestString_DescAffectedByFront - .4byte ContestString_DescConditionUp - .4byte ContestString_DescAffectedByCondition - .4byte ContestString_DescAppealEarlier - .4byte ContestString_DescAppealLater - .4byte ContestString_DescRandomOrderEasier - .4byte ContestString_DescRandomOrder - .4byte ContestString_DescAnyExcitement - .4byte ContestString_DescStartled22 - .4byte ContestString_DescScaleWithExcitement - .4byte ContestString_DescStopExcitement - -ContestString_MoveRainDance: - .string "RAIN DANCE$" -ContestString_MoveRage: - .string "RAGE$" -ContestString_MoveFocusEnergy: - .string "FOCUS ENERGY$" -ContestString_MoveHypnosis: - .string "HYPNOSIS$" -ContestString_MoveSoftboiled: - .string "SOFTBOILED$" -ContestString_MoveHornAttack: - .string "HORN ATTACK$" -ContestString_MoveSwordsDance: - .string "SWORDS DANCE$" -ContestString_MoveConversion: - .string "CONVERSION$" -ContestString_MoveSunnyDay: - .string "SUNNY DAY$" -ContestString_MoveRest: - .string "REST$" -ContestString_MoveVicegrip: - .string "VICEGRIP$" -ContestString_MoveDefenseCurl: - .string "DEFENSE CURL$" -ContestString_MoveLockOn: - .string "LOCK-ON$" - - .align 2 - .4byte ContestString_MoveRainDance - .4byte ContestString_MoveRainDance - .4byte ContestString_MoveRage - .4byte ContestString_MoveFocusEnergy - .4byte ContestString_MoveHypnosis - .4byte ContestString_MoveSoftboiled - .4byte ContestString_MoveHornAttack - .4byte ContestString_MoveSwordsDance - .4byte ContestString_MoveConversion - .4byte ContestString_MoveSunnyDay - .4byte ContestString_MoveRest - .4byte ContestString_MoveVicegrip - .4byte ContestString_MoveDefenseCurl - .4byte ContestString_MoveLockOn - -ContestString_Cool: - .string "COOL$" -ContestString_Beauty: - .string "BEAUTY$" -ContestString_Cute: - .string "CUTE$" -ContestString_Smart: - .string "SMART$" -ContestString_Tough: - .string "TOUGH$" - - .align 2 -gContestCategoryNames:: @ 83CAF70 - .4byte ContestString_Cool - .4byte ContestString_Beauty - .4byte ContestString_Cute - .4byte ContestString_Smart - .4byte ContestString_Tough - -gText_Contest_WhichMoveWillBePlayed:: @ 83CAF84 - .string "Appeal no. {NAME_END}!\nWhich move will be played?$" - -gText_Contest_ButItCantParticipate:: @ 83CAFAE - .string "Appeal no. {NAME_END}!\nBut it can't participate!$" - -gUnknown_083CAFD7:: @ 83CAFD7 - .string "{STR_VAR_1} appealed with\n{STR_VAR_2}!$" - .string "The other POKéMON\nmade moves.{PAUSE 60}$" - -gUnknown_083CB00D:: @ 83CB00D - .string "{STR_VAR_1} was watching\nthe others.{PAUSE 60}$" - -gUnknown_083CB02C:: @ 83CB02C - .string "We're all out of\nAppeal Time!{PAUSE 60}$" - .string "{STR_VAR_1}'s {STR_VAR_3}\nmove {STR_VAR_2}!{PAUSE 60}$" - .string "TRICK$" - .string "SPECIAL$" -ContestString_AppealJammed: - .string "But the appeal was\njammed.$" -ContestString_FollowLead: - .string "It followed another\nPOKéMON's lead.$" -ContestString_MessedUp: - .string "But it messed up.$" -ContestString_BetterUsual: - .string "It went better than\nusual.$" -ContestString_JudgeLookAway: - .string "The JUDGE looked away\nfor some reason.$" -ContestString_WorkHard: - .string "It worked hard to build on\npast mistakes.$" -ContestString_NoMoreMoves: - .string "It can't make any more\nmoves.$" -ContestString_WorkReallyWell: - .string "It worked frighteningly\nwell.$" -ContestString_WorkHardStandout: - .string "It worked as hard as the\nstandout POKéMON.$" -ContestString_JudgeExpectantly: - .string "The JUDGE looked on\nexpectantly.$" -ContestString_WorkRatherWell: - .string "It worked rather well.$" -ContestString_WorkBetter: - .string "It worked a little better\nthan usual.$" - - .align 2 - .4byte ContestString_AppealJammed - .4byte ContestString_FollowLead - .4byte ContestString_MessedUp - .4byte ContestString_BetterUsual - .4byte ContestString_BetterUsual - .4byte ContestString_JudgeLookAway - .4byte ContestString_WorkHard - .4byte ContestString_NoMoreMoves - .4byte ContestString_WorkReallyWell - .4byte ContestString_WorkHardStandout - .4byte ContestString_JudgeExpectantly - .4byte ContestString_WorkRatherWell - .4byte ContestString_WorkBetter - -ContestString_StandOutNone: - .string "{STR_VAR_1} failed to\nstand out at all...{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutNotMuch: - .string "{STR_VAR_1} didn't stand\nout very much...{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutLittle: - .string "{STR_VAR_1} caught a\nlittle attention.{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutLot: - .string "{STR_VAR_1} attracted a\nlot of attention.{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutTotal: - .string "{STR_VAR_1} commanded\ntotal attention.{PAUSE_UNTIL_PRESS}$" -ContestString_StandOutDidnt: - .string "{STR_VAR_1} hasn't made\nits appeal.{PAUSE_UNTIL_PRESS}$" - - .align 2 -gContestStandOutStrings:: @ 83CB2F0 - .4byte ContestString_StandOutNone - .4byte ContestString_StandOutNotMuch - .4byte ContestString_StandOutLittle - .4byte ContestString_StandOutLot - .4byte ContestString_StandOutTotal - .4byte ContestString_StandOutDidnt - -ContestString_AppealAnticipation3: - .string "Anticipation swelled for\n{STR_VAR_1}'s appeal next.$" -ContestString_JudgeSatisfied: - .string "The JUDGE was very\nsatisfied.$" -ContestString_Terminator: - .string "$" -ContestString_JudgeHeldFirm: - .string "The JUDGE 's views on\n{STR_VAR_1} held firm.$" -ContestString_ChangedPerceptions: - .string "{STR_VAR_1}'s {STR_VAR_3}\nchanged perceptions.$" -ContestString_AppealWoreOff: - .string "{STR_VAR_1}'s appeal\neffect wore off.$" -ContestString_AppealWoreOff2: - .string "The special appeal's\neffect wore off.$" -ContestString_AppealLookSame: - .string "Everyone's appeals were\nmade to look the same.$" -ContestString_AppealCheapened: - .string "{STR_VAR_2}'s appeal was\ncheapened.$" -ContestString_AppealCheapened2: - .string "It cheapened the appeal\nof those ahead.$" -ContestString_AppealAttentionStolen: - .string "It stole attention away\nfrom {STR_VAR_2}.$" -ContestString_AppealCheapened3: - .string "It cheapened\n{STR_VAR_2}'s appeal.$" -ContestString_AppealCheapened4: - .string "It severely cheapened\nother appeals.$" -ContestString_AppealAnticipation: - .string "Anticipation swelled for\n{STR_VAR_1}'s appeal next.$" -ContestString_AppealCheapened5: - .string "It cheapened the appeal\nof those ahead.$" -ContestString_AppealCheapened6: - .string "It cheapened the JUDGE's\nfavorite appeal.$" -ContestString_AppealCheapened7: - .string "The appeals of others\nwere cheapened by half.$" -ContestString_JammedStoodOut: - .string "It stood out to make up\nfor being jammed.$" -ContestString_AppealNoMore: - .string "It can't participate in\nappeals any more.$" -ContestString_AppealTouched: - .string "It touched the JUDGE for\na fantastic appeal.$" -ContestString_AppealAnticipation2: - .string "Anticipation rose for\nupcoming appeals.$" -ContestString_AppealStoodOut2: - .string "It stood out as much as\nspecial appeals.$" -ContestString_AppealStoodOut3: - .string "It stood out as much as\n{STR_VAR_1}.$" -ContestString_JammedAppealsNotice: - .string "Jammed appeals were made\neven less noticeable.$" -ContestString_AppealSame: - .string "Everyone's appeals were\nmade the same.$" -ContestString_AppealFullWorse: - .string "Its {STR_VAR_1} is full.\nIt worsened its appeal.$" - - .align 2 - .4byte ContestString_JudgeHeldFirm - .4byte ContestString_ChangedPerceptions - .4byte ContestString_Terminator - .4byte ContestString_AppealWoreOff - .4byte ContestString_AppealWoreOff2 - .4byte ContestString_AppealLookSame - .4byte ContestString_AppealCheapened - .4byte ContestString_AppealCheapened2 - .4byte ContestString_AppealAttentionStolen - .4byte ContestString_AppealCheapened3 - .4byte ContestString_AppealCheapened4 - .4byte ContestString_AppealAnticipation - .4byte ContestString_AppealCheapened5 - .4byte ContestString_AppealCheapened6 - .4byte ContestString_AppealCheapened7 - .4byte ContestString_JammedStoodOut - .4byte ContestString_AppealNoMore - .4byte ContestString_AppealTouched - .4byte ContestString_AppealAnticipation2 - .4byte ContestString_AppealStoodOut2 - .4byte ContestString_AppealStoodOut3 - .4byte ContestString_Terminator - .4byte ContestString_Terminator - .4byte ContestString_Terminator - .4byte ContestString_JammedAppealsNotice - .4byte ContestString_AppealSame -ContestString_MoreConscious: - .string "It became more conscious\nof the other POKéMON.{PAUSE 60}$" -ContestString_NoAppeal: - .string "{STR_VAR_1} can't make an\nappeal after this.{PAUSE 60}$" -ContestString_SettleDown: - .string "It settled down just a\nlittle bit.{PAUSE 60}$" -ContestString_ObliviousToOthers: - .string "It became oblivious to\nthe other POKéMON.{PAUSE 60}$" -ContestString_LessAware: - .string "It became less aware of\nthe other POKéMON.{PAUSE 60}$" -ContestString_StoppedCaring: - .string "It stopped caring about\nother POKéMON much.{PAUSE 60}$" -ContestString_StartleAttempt: - .string "It tried to startle the\nother POKéMON.{PAUSE 60}$" -ContestString_DazzleAttempt: - .string "It tried to dazzle the\nothers.{PAUSE 60}$" -ContestString_JudgeLookAway2: - .string "The JUDGE looked away\nfrom {STR_VAR_1}.{PAUSE 60}$" -ContestString_UnnerveAttempt: - .string "It tried to unnerve the\nnext POKéMON.{PAUSE 60}$" -ContestString_Nervous: - .string "{STR_VAR_1} became\nnervous.{PAUSE 60}$" -ContestString_UnnerveWaiting: - .string "The appeal tried to\nunnerve waiting POKéMON.{PAUSE 60}$" -ContestString_TauntWell: - .string "It taunted POKéMON\ndoing well.{PAUSE 60}$" -ContestString_RegainedForm: - .string "{STR_VAR_1} regained its\nform.{PAUSE 60}$" -ContestString_JamWell: - .string "It tried to jam POKéMON\ndoing well.{PAUSE 60}$" -ContestString_HustleStandout: - .string "The standout {STR_VAR_1}\nhustled even more.{PAUSE 60}$" -ContestString_WorkHardUnnoticed: - .string "The largely unnoticed\n{STR_VAR_1} worked hard.{PAUSE 60}$" -ContestString_WorkBefore: - .string "It worked as much as\nPOKéMON before it.{PAUSE 60}$" -ContestString_AppealNotWell: - .string "{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 60}$" -ContestString_WorkPreceding: - .string "It worked as much as the\npreceding POKéMON.{PAUSE 60}$" -ContestString_AppealNotWell2: - .string "{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 60}$" -ContestString_AppealNotShownWell: - .string "{STR_VAR_1}'s appeal\ncouldn't be shown well.{PAUSE 60}$" -ContestString_AppealSlightlyWell: - .string "{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 60}$" -ContestString_AppealPrettyWell: - .string "{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 60}$" -ContestString_AppealExcellently: - .string "{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 60}$" -ContestString_AppealDud: - .string "{STR_VAR_1}'s appeal was\na dud.{PAUSE 60}$" -ContestString_AppealNotVeryWell: - .string "{STR_VAR_1}'s appeal did\nnot work very well.{PAUSE 60}$" -ContestString_AppealSlightlyWell2: - .string "{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 60}$" -ContestString_AppealPrettyWell2: - .string "{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 60}$" -ContestString_AppealVeryWell: - .string "{STR_VAR_1}'s appeal\nwent very well.{PAUSE 60}$" -ContestString_AppealExcellently2: - .string "{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 60}$" -ContestString_SameTypeGood: - .string "It's the same type as the\nPOKéMON before - good!{PAUSE 60}$" -ContestString_DiffTypeGood: - .string "It's not the same type as\nthe one before - good!{PAUSE 60}$" -ContestString_StoodOutAsMuch: - .string "It stood out much more\nthan the POKéMON before.{PAUSE 60}$" -ContestString_NotAsWell: - .string "It didn't do as well as the\nPOKéMON before.{PAUSE 60}$" -ContestString_ConditionRose: - .string "{STR_VAR_1}'s condition\nrose above usual.{PAUSE 60}$" -ContestString_HotStatus: - .string "{STR_VAR_1}'s hot status\nmade it a great appeal!{PAUSE 60}$" -ContestString_MoveUpLine: - .string "It moved up in line for\nthe next appeal.{PAUSE 60}$" -ContestString_MoveBackLine: - .string "It moved back in line once\nfor the next appeal.{PAUSE 60}$" -ContestString_ScrambleOrder: - .string "It scrambled up the\norder for the next turn.{PAUSE 60}$" - -gUnknown_083CBD52:: @ 83CBD52 -ContestString_JudgeExpectantly2:: - .string "The JUDGE looked at\n{STR_VAR_1} expectantly.{PAUSE 60}$" - -gUnknown_083CBD79:: @ 83CBD79 -ContestString_WentOverWell:: - .string "The appeal combo went\nover well.{PAUSE 60}$" - -gUnknown_083CBD9D:: @ 83CBD9D -ContestString_WentOverVeryWell:: - .string "The appeal combo went\nover very well.{PAUSE 60}$" - -gUnknown_083CBDC6:: @ 83CBDC6 -ContestString_AppealComboExcellently:: - .string "The appeal combo went\nover excellently.{PAUSE 60}$" -ContestString_AvertGaze: - .string "{STR_VAR_1} managed to\navert its gaze.{PAUSE 60}$" -ContestString_AvoidSeeing: - .string "{STR_VAR_1} managed to\navoid seeing it.{PAUSE 60}$" -ContestString_NotFazed: - .string "{STR_VAR_1} isn't fazed\nby that sort of thing.{PAUSE 60}$" -ContestString_LittleDistracted: - .string "{STR_VAR_1} became a\nlittle distracted.{PAUSE 60}$" -ContestString_AttemptStartle: - .string "It tried to startle the\nother POKéMON.{PAUSE 60}$" -ContestString_LookedDown: - .string "{STR_VAR_1} looked down\nout of distraction.{PAUSE 60}$" -ContestString_TurnedBack: - .string "{STR_VAR_1} turned back\nout of distraction.{PAUSE 60}$" -ContestString_UtterCry: - .string "{STR_VAR_1} couldn't help\nuttering a cry.{PAUSE 60}$" -ContestString_LeaptUp: - .string "{STR_VAR_1} couldn't help\nleaping up.{PAUSE 60}$" -ContestString_TrippedOver: - .string "{STR_VAR_1} tripped over\nout of distraction.{PAUSE 60}$" - -gUnknown_083CBF60:: @ 83CBF60 -ContestString_TooNervous: - .string "{STR_VAR_1} was too\nnervous to move.{PAUSE 60}$" -ContestString_MessedUp2: - .string "But it messed up.{PAUSE 60}$" -ContestString_FailedTargetNervous: - .string "But it failed to make\nthe target nervous.{PAUSE 60}$" -ContestString_FailedAnyoneNervous: - .string "But it failed to make\nanyone nervous.{PAUSE 60}$" -ContestString_Ignored: - .string "But it was ignored...{PAUSE 60}$" -ContestString_NoConditionImprove: - .string "But it couldn't improve\nits condition...{PAUSE 60}$" -ContestString_BadConditionWeakAppeal: - .string "Its bad condition\nresulted in a weak appeal.{PAUSE 60}$" -ContestString_Unaffected: - .string "{STR_VAR_1} was\nunaffected.{PAUSE 60}$" - -gUnknown_083CC075:: @ 83CC075 -ContestString_DissapointedRepeat:: - .string "{STR_VAR_1} disappointed\nby repeating an appeal.{PAUSE 60}$" - -gUnknown_083CC0A0:: @ 83CC0A0 -ContestString_WentOverGreat:: - .string "{STR_VAR_1}'s {STR_VAR_3}\nwent over great.{PAUSE 60}$" - -gUnknown_083CC0BC:: @ 83CC0BC -ContestString_DidntGoWell:: - .string "{STR_VAR_1}'s {STR_VAR_3}\ndidn't go over well here...{PAUSE 60}$" - -gUnknown_083CC0E3:: @ 83CC0E3 -ContestString_GotCrowdGoing:: - .string "{STR_VAR_1}'s {STR_VAR_3}\ngot the crowd going.{PAUSE 60}$" - -gUnknown_083CC103:: @ 83CC103 -ContestString_CantAppealNextTurn:: - .string "{STR_VAR_1} can't appeal\nnext turn...{PAUSE 60}$" -ContestString_AttractedAttention:: - .string "It attracted the crowd's\nattention.{PAUSE 60}$" - -gUnknown_083CC14A:: @ 83CC14A -ContestString_CrowdWatches:: - .string "The crowd continues to\nwatch {STR_VAR_3}.{PAUSE 60}$" - -gUnknown_083CC16E:: @ 83CC16E -ContestString_Ignored2:: - .string "{STR_VAR_1}'s\n{STR_VAR_2} is ignored.{PAUSE 60}$" - - .align 2 -gUnknown_083CC188:: @ 83CC188 - .4byte ContestString_MoreConscious - .4byte ContestString_NoAppeal - .4byte ContestString_SettleDown - .4byte ContestString_ObliviousToOthers - .4byte ContestString_LessAware - .4byte ContestString_StoppedCaring - .4byte ContestString_StartleAttempt - .4byte ContestString_DazzleAttempt - .4byte ContestString_JudgeLookAway2 - .4byte ContestString_UnnerveAttempt - .4byte ContestString_Nervous - .4byte ContestString_UnnerveWaiting - .4byte ContestString_TauntWell - .4byte ContestString_RegainedForm - .4byte ContestString_JamWell - .4byte ContestString_HustleStandout - .4byte ContestString_WorkHardUnnoticed - .4byte ContestString_WorkBefore - .4byte ContestString_AppealNotWell - .4byte ContestString_WorkPreceding - .4byte ContestString_AppealNotWell2 - .4byte ContestString_AppealNotShownWell - .4byte ContestString_AppealSlightlyWell - .4byte ContestString_AppealPrettyWell - .4byte ContestString_AppealExcellently - .4byte ContestString_AppealDud - .4byte ContestString_AppealNotVeryWell - .4byte ContestString_AppealSlightlyWell2 - .4byte ContestString_AppealPrettyWell2 - .4byte ContestString_AppealVeryWell - .4byte ContestString_AppealExcellently2 - .4byte ContestString_SameTypeGood - .4byte ContestString_DiffTypeGood - .4byte ContestString_StoodOutAsMuch - .4byte ContestString_NotAsWell - .4byte ContestString_ConditionRose - .4byte ContestString_HotStatus - .4byte ContestString_MoveUpLine - .4byte ContestString_MoveBackLine - .4byte ContestString_ScrambleOrder - .4byte ContestString_JudgeExpectantly2 @ expectantly - .4byte ContestString_WentOverWell - .4byte ContestString_WentOverVeryWell - .4byte ContestString_AppealComboExcellently - .4byte ContestString_AvertGaze - .4byte ContestString_AvoidSeeing - .4byte ContestString_NotFazed - .4byte ContestString_LittleDistracted - .4byte ContestString_AttemptStartle - .4byte ContestString_LookedDown - .4byte ContestString_TurnedBack - .4byte ContestString_UtterCry - .4byte ContestString_LeaptUp - .4byte ContestString_TrippedOver - .4byte ContestString_MessedUp2 - .4byte ContestString_FailedTargetNervous - .4byte ContestString_FailedAnyoneNervous - .4byte ContestString_Ignored - .4byte ContestString_NoConditionImprove - .4byte ContestString_BadConditionWeakAppeal - .4byte ContestString_Unaffected - .4byte ContestString_AttractedAttention - -gText_Contest_Shyness:: @ 83CC280 - .string "shyness$" - -gText_Contest_Anxiety:: @ 83CC288 - .string "anxiety$" - -gText_Contest_Laziness:: @ 83CC290 - .string "laziness$" - -gText_Contest_Hesitancy:: @ 83CC299 - .string "hesitancy$" - -gText_Contest_Fear:: @ 83CC2A3 - .string "fear$" - -ContestString_Coolness: - .string "coolness$" -ContestString_Beauty2: - .string "beauty$" -ContestString_Cuteness: - .string "cuteness$" -ContestString_Smartness: - .string "smartness$" -ContestString_Toughness: - .string "toughness$" - - .align 2 -gContestCategoryStrings:: @ 83CC2D8 - .4byte ContestString_Coolness - .4byte ContestString_Beauty2 - .4byte ContestString_Cuteness - .4byte ContestString_Smartness - .4byte ContestString_Toughness - -gUnknown_083CC2EC:: @ 83CC2EC - .string "TENSION:$" - -ContestString_CoolMove: - .string "COOL Move$" - -ContestString_BeautyMove: - .string "BEAUTY Move$" - -ContestString_CuteMove: - .string "CUTE Move$" - -ContestString_SmartMove: - .string "SMART Move$" - -ContestString_ToughMove: - .string "TOUGH Move$" - -ContestString_UnknownMoveType: - .string "???$" - - .align 2 -gUnknown_083CC330:: @ 83CC330 - .4byte ContestString_CoolMove - .4byte ContestString_BeautyMove - .4byte ContestString_CuteMove - .4byte ContestString_SmartMove - .4byte ContestString_ToughMove - .4byte ContestString_UnknownMoveType - -@ unused? -ContestString_Rank: - .string "RANK$" - - .string "{HIGHLIGHT TRANSPARENT}{COLOR MAGENTA} $" diff --git a/de_after.sh b/de_after.sh index 92f940d8d..e690258e5 100755 --- a/de_after.sh +++ b/de_after.sh @@ -1,2 +1 @@ -git checkout override.mk data/ graphics -rm data/ingame_trades.inc +git checkout data/ graphics diff --git a/de_before.sh b/de_before.sh index 392726948..f6a028265 100755 --- a/de_before.sh +++ b/de_before.sh @@ -1,3 +1,2 @@ -cp override-de.mk override.mk rsync -avhI data-de/ data/ rsync -avhI graphics-de/ graphics/ diff --git a/include/battle.h b/include/battle.h index afebbc781..af0a9a43e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -4,6 +4,7 @@ #include "sprite.h" #include "constants/battle.h" #include "battle_setup.h" +#include "main.h" #define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler]) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) @@ -281,16 +282,22 @@ struct AI_Stack u8 size; }; +struct LinkPartnerHeader +{ + u8 versionSignatureLo; + u8 versionSignatureHi; + u8 vsScreenHealthFlagsLo; + u8 vsScreenHealthFlagsHi; + struct BattleEnigmaBerry battleEnigmaBerry; +}; + struct BattleStruct /* 0x2000000 */ { - /*0x00000*/ u8 unk0; - /*0x00001*/ bool8 unk1; - /*0x00002*/ u8 unk2; - /*0x00003*/ bool8 unk3; - u8 filler4[0x15DDA]; - /*0x15DDE*/ u8 unk15DDE; - /*0x15DDF*/ u8 unk15DDF; - /*0x15DE0*/ u8 filler15DE0[0x220]; + /*0x00000*/ union{ + struct LinkPartnerHeader linkPartnerHeader; + struct MultiBattlePokemonTx multiBattleMons[3]; + } multiBuffer; + u8 filler60[0x15FA0]; /*0x16000*/ u8 turnEffectsTracker; /*0x16001*/ u8 turnEffectsBattlerId; /*0x16002*/ u8 animTurn; @@ -330,14 +337,14 @@ struct BattleStruct /* 0x2000000 */ /*0x16064*/ u8 unk16064[4]; /*0x16068*/ u8 monToSwitchIntoId[MAX_BATTLERS_COUNT]; /*0x1606C*/ u8 unk1606C[4][3]; - /*0x16078*/ u8 unk16078; + /*0x16078*/ u8 runTries; /*0x16079*/ u8 caughtNick[11]; - /*0x16084*/ u8 unk16084; + /*0x16084*/ u8 battleStyle; /*0x16085*/ u8 unk16085; - /*0x16086*/ u8 unk16086; - /*0x16087*/ u8 unk16087; + /*0x16086*/ u8 safariGoNearCounter; + /*0x16087*/ u8 safariPkblThrowCounter; /*0x16088*/ u8 safariFleeRate; - /*0x16089*/ u8 unk16089; + /*0x16089*/ u8 safariCatchFactor; /*0x1608A*/ u8 unk1608A; /*0x1608B*/ u8 unk1608B; /*0x1608C*/ u8 ChosenMoveID[4]; @@ -366,34 +373,15 @@ struct BattleStruct /* 0x2000000 */ /*0x160A9*/ u8 unk160A9; /*0x160AA*/ u8 unk160Aa; /*0x160AB*/ u8 unk160Ab; - /*0x160AC*/ u8 unk160AC; - /*0x160AD*/ u8 unk160AD; - /*0x160AE*/ u8 unk160AE; - /*0x160AF*/ u8 unk160AF; - /*0x160B0*/ u8 unk160B0; - /*0x160B1*/ u8 unk160B1; - /*0x160B2*/ u8 unk160B2; - /*0x160B3*/ u8 unk160B3; - /*0x160B4*/ u8 unk160B4; - /*0x160B5*/ u8 unk160B5; - /*0x160B6*/ u8 unk160B6; - /*0x160B7*/ u8 unk160B7; - /*0x160B8*/ u8 unk160B8; - /*0x160B9*/ u8 unk160B9; - /*0x160BA*/ u8 unk160Ba; - /*0x160BB*/ u8 unk160Bb; + /*0x160AC*/ u16 lastTakenMove[4 * 2]; /*0x160BC*/ u16 HP_OnSwitchout[2]; /*0x160C0*/ u8 unk160C0; /*0x160C1*/ u8 hpScale; - /*0x160C2*/ u8 unk160C2; - /*0x160C3*/ u8 unk160C3; - /*0x160C4*/ u8 unk160C4; - /*0x160C5*/ u8 unk160C5; - /*0x160C6*/ u8 unk160C6; - /*0x160C7*/ u8 unk160C7; + /*0x160C2*/ u16 unk160C2; + /*0x160C4*/ MainCallback unk160C4; /*0x160C8*/ u8 AI_monToSwitchIntoId[2]; /*0x160CA*/ u8 synchroniseEffect; - /*0x160CB*/ u8 linkPlayerIndex; + /*0x160CB*/ u8 multiplayerId; /*0x160CC*/ u16 usedHeldItems[4]; /*0x160D4*/ u8 unk160D4; /*0x160D5*/ u8 unk160D5; @@ -413,22 +401,8 @@ struct BattleStruct /* 0x2000000 */ /*0x160E5*/ u8 unk160E5; /*0x160E6*/ u8 unk160E6; /*0x160E7*/ u8 atkCancellerTracker; - /*0x160E8*/ u8 unk160E8; - /*0x160E9*/ u8 unk160E9; - /*0x160EA*/ u8 unk160EA; - /*0x160EB*/ u8 unk160EB; - /*0x160EC*/ u8 unk160EC; - /*0x160ED*/ u8 unk160ED; - /*0x160EE*/ u8 unk160EE; - /*0x160EF*/ u8 unk160EF; - /*0x160F0*/ u8 unk160F0; - /*0x160F1*/ u8 unk160F1; - /*0x160F2*/ u8 unk160F2; - /*0x160F3*/ u8 unk160F3; - /*0x160F4*/ u8 unk160F4; - /*0x160F5*/ u8 unk160F5; - /*0x160F6*/ u8 unk160F6; - /*0x160F7*/ u8 unk160F7; + /*0x160E8*/ u16 choicedMove[4]; + /*0x160F0*/ u16 changedItems[4]; /*0x160F8*/ u8 unk160F8; /*0x160F9*/ u8 unk160F9; /*0x160FA*/ u8 unk160FA; @@ -437,26 +411,11 @@ struct BattleStruct /* 0x2000000 */ /*0x160FD*/ u8 unk160FD; /*0x160FE*/ u8 unk160FE; /*0x160FF*/ u8 unk160FF; - /*0x16100*/ u8 unk16100; - /*0x16101*/ u8 unk16101; - /*0x16102*/ u8 unk16102; - /*0x16103*/ u8 unk16103; - /*0x16104*/ u8 unk16104; - /*0x16105*/ u8 unk16105; - /*0x16106*/ u8 unk16106; - /*0x16107*/ u8 unk16107; - /*0x16108*/ u8 unk16108; - /*0x16109*/ u8 unk16109; - /*0x1610A*/ u8 unk1610A; - /*0x1610B*/ u8 unk1610B; - /*0x1610C*/ u8 unk1610C; - /*0x1610D*/ u8 unk1610D; - /*0x1610E*/ u8 unk1610E; - /*0x1610F*/ u8 unk1610F; + /*0x16100*/ u8 lastTakenMoveFrom[2 * 2 * 4]; /*0x16110*/ u8 wishPerishSongState; /*0x16111*/ u8 wishPerishSongBattlerId; - /*0x16112*/ u8 unk16112; - /*0x16113*/ u8 unk16113; + /*0x16112*/ u8 multihitMoveEffect; + /*0x16113*/ u8 givenExpMons; /*0x16114*/ u8 unk16114; /*0x16115*/ u8 unk16115; /*0x16116*/ u8 unk16116; @@ -474,18 +433,18 @@ struct BattleStruct /* 0x2000000 */ /* 0x16A00 */ struct BattleHistory unk_2016A00_2; }; -struct Struct2017100 +struct ResourceFlags { u32 arr[4]; }; -struct Struct2017800 +struct BattleSpriteInfo { u8 invisible:1; - u8 unk0_1:1; + u8 lowHpSong:1; u8 substituteSprite:1; - u8 unk0_3:1; - u8 unk0_4:1; + u8 flag_x8:1; + u8 hpNumbersNoBars:1; u16 transformedSpecies; }; @@ -529,8 +488,6 @@ struct Struct20238C8 u8 unk0_7:1; }; -#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180)) - #define GET_MOVE_TYPE(move, typeArg) \ { \ if (gBattleStruct->dynamicMoveType) \ @@ -659,7 +616,7 @@ void sub_800D6D4(); void ApplyPlayerChosenFrameToBattleMenu(); void DrawMainBattleBackground(void); void LoadBattleTextboxAndBackground(); -void sub_800DE30(u8); +void InitLinkBattleVsScreen(u8); void DrawBattleEntryBackground(); // src/battle_2.o @@ -667,7 +624,7 @@ void CB2_InitBattle(void); void CB2_InitBattleInternal(void); void CB2_HandleStartBattle(void); void sub_800F104(void); -void sub_800F298(void); +void CB2_HandleStartMultiBattle(void); void BattleMainCB2(void); void sub_800F838(struct Sprite *); u8 CreateNPCTrainerParty(struct Pokemon *, u16); @@ -688,7 +645,7 @@ void objc_dp11b_pingpong(struct Sprite *); void nullsub_41(void); void sub_8010800(void); void BattleMainCB1(void); -void sub_8010874(void); +void BattleStartClearSetData(void); void bc_8012FAC(void); void sub_8011384(void); void bc_801333C(void); diff --git a/include/constants/contest.h b/include/constants/contest.h new file mode 100644 index 000000000..e960809cc --- /dev/null +++ b/include/constants/contest.h @@ -0,0 +1,44 @@ +#ifndef POKERUBY_CONSTANTS_CONTEST_H +#define POKERUBY_CONSTANTS_CONTEST_H + + +#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0) +#define CONTEST_AI_CHECK_COMBO (1 << 1) +#define CONTEST_AI_CHECK_BORING (1 << 2) +#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3) +#define CONTEST_AI_CHECK_ORDER (1 << 4) +#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5) +#define CONTEST_AI_ERRATIC (1 << 6) +#define CONTEST_AI_DUMMY_1 (1 << 7) +#define CONTEST_AI_DUMMY_2 (1 << 8) +#define CONTEST_AI_DUMMY_3 (1 << 9) +#define CONTEST_AI_DUMMY_4 (1 << 10) +#define CONTEST_AI_DUMMY_5 (1 << 11) +#define CONTEST_AI_DUMMY_6 (1 << 12) +#define CONTEST_AI_DUMMY_7 (1 << 13) +#define CONTEST_AI_DUMMY_8 (1 << 14) +#define CONTEST_AI_DUMMY_9 (1 << 15) +#define CONTEST_AI_DUMMY_10 (1 << 16) +#define CONTEST_AI_DUMMY_11 (1 << 17) +#define CONTEST_AI_DUMMY_12 (1 << 18) +#define CONTEST_AI_DUMMY_13 (1 << 19) +#define CONTEST_AI_DUMMY_14 (1 << 20) +#define CONTEST_AI_DUMMY_15 (1 << 21) +#define CONTEST_AI_DUMMY_16 (1 << 22) +#define CONTEST_AI_DUMMY_17 (1 << 23) +#define CONTEST_AI_DUMMY_18 (1 << 24) +#define CONTEST_AI_DUMMY_19 (1 << 25) +#define CONTEST_AI_DUMMY_20 (1 << 26) +#define CONTEST_AI_DUMMY_21 (1 << 27) +#define CONTEST_AI_DUMMY_22 (1 << 28) +#define CONTEST_AI_DUMMY_23 (1 << 29) +#define CONTEST_AI_DUMMY_24 (1 << 30) +#define CONTEST_AI_DUMMY_25 (1 << 31) + +// The below scripts are used by every AI contest opponent +// It includes every non-dummy script +#define CONTEST_AI_COMMON (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | \ + CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC | \ + CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5) + +#endif //POKERUBY_CONSTANTS_CONTEST_H diff --git a/include/contest.h b/include/contest.h index bf2613fe3..ff1492e81 100644 --- a/include/contest.h +++ b/include/contest.h @@ -13,6 +13,38 @@ enum enum { + CONTEST_WINNER_ARTIST, + CONTEST_WINNER_NORMAL, + CONTEST_WINNER_SUPER, + CONTEST_WINNER_HYPER_1, + CONTEST_WINNER_HYPER_2, + CONTEST_WINNER_HYPER_3, + CONTEST_WINNER_MASTER_1, + CONTEST_WINNER_MASTER_2, + CONTEST_WINNER_MASTER_3, + NUM_CONTEST_HALL_WINNERS = CONTEST_WINNER_MASTER_3, + MUSEUM_CONTEST_WINNERS_START = CONTEST_WINNER_MASTER_3, + CONTEST_WINNER_MUSEUM_COOL, + CONTEST_WINNER_MUSEUM_BEAUTY, + CONTEST_WINNER_MUSEUM_CUTE, + CONTEST_WINNER_MUSEUM_SMART, + CONTEST_WINNER_MUSEUM_TOUGH, +}; + +enum +{ + CONTEST_RANK_NORMAL, + CONTEST_RANK_SUPER, + CONTEST_RANK_HYPER, + CONTEST_RANK_MASTER, + CONTEST_RANK_LINK +}; + +#define CONTEST_SAVE_FOR_MUSEUM ((u8)-1) +#define CONTEST_SAVE_FOR_ARTIST ((u8)-2) + +enum +{ CONTEST_EFFECT_HIGHLY_APPEALING, CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES, @@ -263,130 +295,127 @@ void CB2_StartContest(void); void Contest_CreatePlayerMon(u8); void Contest_InitAllPokemon(u8, u8); u8 CanMonParticipateInContest(struct Pokemon *party); -u16 InitContestMonConditionI(u8, u8); -void InitContestMonConditions(u8); +u16 CalculateContestantRound1Points(u8, u8); +void CalculateRound1Points(u8); u8 IsSpeciesNotUnown(u16); -void sub_80AF668(void); -void sub_80B0F28(u8); +void CalculateFinalScores(void); +void SortContestants(u8); bool8 Contest_SaveWinner(u8); -u8 sub_80B2C4C(u8, u8); +u8 GetContestWinnerSaveIdx(u8, u8); void Contest_ResetWinners(void); s8 Contest_GetMoveExcitement(u16); // Contest Shared EWRAM -struct Shared18000 +struct ContestTempSave { - /*0x18000*/ u8 unk18000; - /*0x18001*/ u8 filler18001[3]; - /*0x18004*/ u16 unk18004[16][16]; - /*0x18204*/ u16 unk18204[0x200]; - /*0x18604*/ u16 unk18604[0x200]; - /*0x18A04*/ u8 unk18A04[0x800]; + /*0x18004*/ u16 cachedWindowPalettes[16][16]; + /*0x18204*/ u16 cachedPlttBufferUnfaded[0x200]; + /*0x18604*/ u16 cachedPlttBufferFaded[0x200]; + /*0x18A04*/ u8 savedJunk[0x800]; }; struct Contest { /*0x19204*/ u8 playerMoveChoice; - /*0x19205*/ u8 turnNumber; + /*0x19205*/ u8 appealNumber; /*0x19206*/ u8 unk19206[4]; // seems to only be used by an unref function - /*0x1920A*/ u16 unk1920A_0:1; // Task active flags? - u16 unk1920A_1:1; - u16 unk1920A_2:1; - u16 unk1920A_3:1; - u16 unk1920A_4:1; - u16 unk1920A_5:1; - u16 unk1920A_6:1; - u16 unk1920A_7:1; - /*0x1920B*/ u16 unk1920B_0:1; - u16 unk1920B_1:1; - u16 unk1920B_2:1; + /*0x1920A*/ bool16 unk1920A_0:1; // Task active flags? + bool16 unk1920A_1:1; + bool16 unk1920A_2:1; + bool16 unk1920A_3:1; + bool16 waitForJudgeSpeechBubble:1; + bool16 isShowingApplauseMeter:1; + bool16 applauseMeterIsMoving:1; + bool16 animatingAudience:1; + /*0x1920B*/ bool16 waitForAudienceBlend:1; + bool16 sliderHeartsAnimating:1; + bool16 waitForLink:1; /*0x1920C*/ u8 mainTaskId; /*0x1920D*/ u8 unk1920D[4]; - /*0x19211*/ u8 unk19211; - /*0x19212*/ u8 unk19212; + /*0x19211*/ u8 judgeAttentionTaskId; + /*0x19212*/ u8 blendTaskId; /*0x19213*/ u8 filler19213; - /*0x19214*/ u8 unk19214; - /*0x19215*/ u8 unk19215; - /*0x19216*/ u8 unk19216; // sprite ID + /*0x19214*/ u8 turnNumber; + /*0x19215*/ u8 currentContestant; + /*0x19216*/ u8 judgeSpeechBubbleSpriteId; /*0x19217*/ s8 applauseLevel; - /*0x19218*/ u8 unk19218[4]; - /*0x1921C*/ u32 unk1921C; // saved RNG value? - u16 unk19220[5][4]; // move history? - u8 unk19248[5][4]; // excitement history + /*0x19218*/ u8 prevTurnOrder[4]; + /*0x1921C*/ u32 unusedRng; // saved RNG value? + u16 moveHistory[5][4]; // move history? + u8 excitementHistory[5][4]; // excitement history u8 applauseMeterSpriteId; // sprite ID - /*0x1925D*/ u8 unk1925D; - /*0x1925E*/ u8 unk1925E; + /*0x1925D*/ u8 contestSetupState; + /*0x1925E*/ u8 moveAnimTurnCount; }; struct ContestantStatus { - /*0x00*/ s16 appeal1; // move appeal? - /*0x02*/ s16 appeal2; // final appeal after end of turn, maybe? - /*0x04*/ s16 unk4; + /*0x00*/ s16 baseAppeal; + /*0x02*/ s16 appeal; + /*0x04*/ s16 pointTotal; /*0x06*/ u16 currMove; /*0x08*/ u16 prevMove; /*0x0A*/ u8 moveCategory; - /*0x0B*/ u8 unkB_0:2; - u8 unkB_2:2; + /*0x0B*/ u8 ranking:2; + u8 unkB_2:2; // unused u8 moveRepeatCount:3; - u8 noMoreTurns:1; // used a one-time move? - /*0x0C*/ u8 nervous:1; + bool8 noMoreTurns:1; // used a one-time move? + /*0x0C*/ bool8 nervous:1; u8 numTurnsSkipped:2; /*0x0D*/ s8 condition; /*0x0E*/ u8 jam; /*0x0F*/ u8 jamReduction; // Flags set by move effect - /*0x10*/ u8 resistant:1; - u8 immune:1; - u8 moreEasilyStartled:1; - u8 usedRepeatableMove:1; + /*0x10*/ bool8 resistant:1; + bool8 immune:1; + bool8 moreEasilyStartled:1; + bool8 usedRepeatableMove:1; u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition u8 turnOrderMod:2; // 1: defined; 2: random /*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random - u8 turnSkipped:1; - u8 exploded:1; - u8 overrideCategoryExcitementMod:1; - u8 appealTripleCondition:1; + bool8 turnSkipped:1; + bool8 exploded:1; + bool8 overrideCategoryExcitementMod:1; + bool8 appealTripleCondition:1; /*0x12*/ u8 jamSafetyCount; /*0x13*/ u8 effectStringId; // status action? /*0x14*/ u8 effectStringId2; - /*0x15*/ u8 disappointedRepeat:1; - u8 unk15_1:1; - u8 unk15_2:1; - u8 unk15_3:1; - u8 hasJudgesAttention:1; - u8 judgesAttentionWasRemoved:1; - u8 unk15_6:1; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; - /*0x18*/ u8 unk18; + /*0x15*/ bool8 repeatedMove:1; + bool8 unk15_1:1; // unused + bool8 repeatedPrevMove:1; + bool8 completedComboFlag:1; + bool8 hasJudgesAttention:1; + bool8 judgesAttentionWasRemoved:1; + bool8 usedComboMove:1; + /*0x16*/ u8 completedCombo; + /*0x17*/ u8 comboAppealBonus; + /*0x18*/ u8 repeatJam; /*0x19*/ u8 nextTurnOrder; // turn position /*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out" - /*0x1B*/ u8 unk1B; + /*0x1B*/ u8 contestantAnimTarget; }; -// possibly the same as UnknownContestStruct3? -struct UnknownContestStruct4 +struct ContestGfxState { - u8 unk0; // sprite ID - u8 unk1; // sprite ID - u8 unk2_0:1; - u8 unk2_1:1; - u8 unk2_2:1; + u8 sliderHeartSpriteId; + u8 nextTurnSpriteId; + bool8 sliderUpdating:1; + bool8 boxBlinking:1; + bool8 updatingAppealHearts:1; }; -struct UnknownContestStruct5 +struct ContestExcitement { - s8 bits_0; // current move excitement? - u8 excitementFrozen:1; + s8 moveExcitement; + bool8 excitementFrozen:1; u8 excitementFreezer:3; - s8 unk2; + s8 excitementAppealBonus; }; -struct UnknownContestStruct7 +struct ContestAppealMoveResults { u8 turnOrder[4]; s16 jam; @@ -396,49 +425,36 @@ struct UnknownContestStruct7 u8 contestant; }; -struct UnknownContestStruct8 +struct ContestMoveAnim { - u16 unk0; - u16 unk2; - u8 unk4_0:1; - u8 unk5; - u32 unk8; - u32 unkC; + u16 species; + u16 targetSpecies; + bool8 hasTargetAnim :1; + u8 contestant; + u32 personality; + u32 otId; u32 unk10; }; -struct UnknownContestStruct6 +struct ContestFinalStandings { - s32 unk0; - s32 unk4; - s32 unk8; - s32 unkC; + s32 totalPoints; + s32 round1Points; + s32 random; + s32 contestant; }; -// TODO: Please move these to ewram.h once the defines are settled down and figured out completely. -#define shared15800 (gSharedMem + 0x15800) -#define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0)) -#define shared16800 (gSharedMem + 0x16800) -#define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000)) -#define shared18004 ((u16 *)(gSharedMem + 0x18004)) -#define sContest (*(struct Contest *)(gSharedMem + 0x19204)) -#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260)) -#define shared192E4 (gSharedMem + 0x192E4) -#define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328)) -#define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338)) -#define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) - extern u8 gContestPlayerMonIndex; extern u8 gIsLinkContest; extern u32 gContestRngValue; -extern u8 gUnknown_02038696[4]; -extern s16 gContestMonConditions[4]; -extern s16 gUnknown_02038678[4]; -extern s16 gUnknown_02038680[4]; -extern s16 gUnknown_02038688[4]; +extern u8 gContestantTurnOrder[4]; +extern s16 gContestMonRound1Points[4]; +extern s16 gContestMonTotalPoints[4]; +extern s16 gContestMonAppealPointTotals[4]; +extern s16 gContestMonRound2Points[4]; extern u8 gContestFinalStandings[4]; -extern u8 gUnknown_02038696[4]; -extern u8 gUnknown_0203869B; +extern u8 gContestantTurnOrder[4]; +extern u8 gContestLinkLeaderIndex; extern u16 gSpecialVar_ContestRank; extern u16 gSpecialVar_ContestCategory; extern u8 gContestMonPartyIndex; @@ -447,7 +463,7 @@ void SetContestantEffectStringID(u8 a, u8 b); void SetContestantEffectStringID2(u8 a, u8 b); void MakeContestantNervous(u8 p); bool8 Contest_IsMonsTurnDisabled(u8 a); -bool8 sub_80B214C(u8 a); +bool8 IsContestantAllowedToCombo(u8 contestant); void SetStartledString(u8 a, u8 b); #endif // GUARD_CONTEST_H diff --git a/include/contest_internal.h b/include/contest_internal.h new file mode 100644 index 000000000..1c9e875ea --- /dev/null +++ b/include/contest_internal.h @@ -0,0 +1,154 @@ +#ifndef GUARD_CONTEST_INTERNAL_H +#define GUARD_CONTEST_INTERNAL_H + +void InitContestResources(void); +void Task_StartContestWaitFade(u8 taskId); +void Task_TryStartLinkContest(u8 taskId); +void Task_CommunicateMonIdxs(u8 taskId); +void Task_EndCommunicateMonIdxs(u8 taskId); +void Task_ReadyStartLinkContest(u8 taskId); +u8 SetupContestGraphics(u8 *a); +void Task_WaitToRaiseCurtainAtStart(u8 taskId); +void Task_RaiseCurtainAtStart(u8 taskId); +void ContestMainCallback2(void); +void ContestVBlankCallback(void); +void Task_DisplayAppealNumberText(u8 taskId); +void sub_80ABC3C(u8); +void Task_TryShowMoveSelectScreen(u8 taskId); +void Task_ShowMoveSelectScreen(u8 taskId); +void Task_HandleMoveSelectInput(u8 taskId); +void DrawMoveSelectArrow(s8 a); +void EraseMoveSelectArrow(s8 a); // nullsub +void Task_SelectedMove(u8 taskId); +void Task_EndCommunicateMoveSelections(u8 taskId); +void Task_HideMoveSelectScreen(u8 taskId); +void Task_HideApplauseMeterForAppealStart(u8 taskId); +void Task_WaitHideApplauseMeterForAppealStart(u8 taskId); +void Task_AppealSetup(u8 taskId); +void Task_DoAppeals(u8 taskId); +void Task_EndWaitForLink(u8 taskId); +void SpriteCB_MonSlideIn(struct Sprite *sprite); +void SpriteCB_MonSlideOut(struct Sprite *sprite); +void Task_FinishRoundOfAppeals(u8 taskId); +void Task_ReadyUpdateHeartSliders(u8 taskId); +void Task_UpdateHeartSliders(u8 taskId); +void Task_WaitForHeartSliders(u8 taskId); +void sub_80ADB04(u8 taskId); +void Task_WaitBeforePrintRoundResult(u8 taskId); +void Task_PrintRoundResultText(u8 taskId); +void Task_WaitPrintRoundResultText(u8 taskId); +void Task_ReUpdateHeartSliders(u8 taskId); +void Task_WaitForHeartSlidersAgain(u8 taskId); +void Task_DropCurtainAtRoundEnd(u8 taskId); +void Task_TryStartNextRoundOfAppeals(u8 taskId); +void Task_StartNewRoundOfAppeals(u8 taskId); +void Task_EndAppeals(u8 taskId); +void Task_WaitForOutOfTimeMsg(u8 taskId); +void Task_DropCurtainAtAppealsEnd(u8 taskId); +void Task_TryCommunicateFinalStandings(u8 taskId); +void Task_CommunicateFinalStandings(u8 taskId); +void Task_EndCommunicateFinalStandings(u8 taskId); +void Task_ContestReturnToField(u8 taskId); +void FieldCB_ContestReturnToField(void); +void InsertStringDigit(u8 *, s32); +bool8 IsPlayerLinkLeader(void); +void __copy_tilemap(void *); +void PrintContestantTrainerName(u8 contestant); +void PrintContestantTrainerNameWithColor(u8 contestant, u8 color); +void PrintContestantMonName(u8 contestant); +void PrintContestantMonNameWithColor(u8 contestant, u8 color); +u8 CreateJudgeSprite(void); +u8 CreateJudgeSpeechBubbleSprite(void); +u8 CreateContestantSprite(u16, u32, u32); +void SwapMoveDescAndContestTilemaps(void); +void PrintContestMoveDescription(u16); +void Contest_ClearMoveDescriptionBox(void); +bool8 UpdateConditionStars(u8, u8); +bool8 DrawStatusSymbol(u8); +void DrawStatusSymbols(void); +void ContestClearGeneralTextWindow(void); +u16 GetChosenMove(u8); +void GetAllChosenMoves(void); +void sub_80AF2A0(u8); +void RankContestants(void); +void SetAttentionLevels(void); +s16 GetContestantRound2Points(u8 a); +void DetermineFinalStandings(void); +bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c); +void ContestPrintLinkStandby(void); +void Task_unused_80AF94C(u8 taskId); +void FillContestantWindowBgs(void); +u16 GetAppealHeartTileOffset(u8 a); +s8 GetNumHeartsFromAppealPoints(s16 a); +u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant); +void Task_UpdateAppealHearts(u8 taskId); +void CreateSliderHeartSprites(void); +void UpdateHeartSliders(void); +bool8 SlidersDoneUpdating(void); +void sub_80AFF60(struct Sprite *); +void SetBottomSliderHeartsInvisibility(bool8); +void CreateNextTurnSprites(void); +void CreateApplauseMeterSprite(void); +void nullsub_18(s8); +void sub_80B0238(struct Sprite *); +void sub_80B0280(struct Sprite *); +void sub_80B02A8(struct Sprite *); +void sub_80B02F4(struct Sprite *); +void CreateJudgeAttentionEyeTask(void); +void sub_80B03A8(u8); +void sub_80B03D8(u8); +void sub_80B0458(u8); +void CreateUnusedBlendTask(void); +void InitUnusedBlendTaskData(u8 contestant); +void UpdateBlendTaskContestantData(u8 contestant); +void nullsub_19(int); +void Task_UnusedBlend(u8 taskId); +void Task_UnusedBrokenBlend(u8 taskId); +void StartStopFlashJudgeAttentionEye(u8); +u8 CreateContestantBoxBlinkSprites(u8); +void BlinkContestantBox(u8, bool8); +void SpriteCB_BlinkContestantBox(struct Sprite *); +void SpriteCB_EndBlinkContestantBox(struct Sprite *); +void Unused_EndBlinkingState(u8 a, int unused); +void ContestDebugTogglePointTotal(void); +void ContestDebugDoPrint(void); +void DrawContestantWindows(void); +void CalculateAppealMoveImpact(u8 contestant); +void PrintAppealMoveResultText(u8, u8); +void ApplyNextTurnOrder(void); +void DoJudgeSpeechBubble(u8); +void UpdateApplauseMeter(void); +u8 StartApplauseOverflowAnimation(void); +void Task_ApplauseOverflowAnimation(u8); +void SlideApplauseMeterIn(void); +void Task_SlideApplauseMeterIn(u8); +void SlideApplauseMeterOut(void); +void Task_SlideApplauseMeterOut(u8); +void ShowAndUpdateApplauseMeter(s8); +void Task_ShowAndUpdateApplauseMeter(u8); +void AnimateAudience(void); +void Task_AnimateAudience(u8); +void BlendAudienceBackground(s8 excitementDir, s8 blendDir); +void Task_BlendAudienceBackground(u8 taskId); +void ShowHideNextTurnGfx(bool8 a); +const u8 *GetTurnOrderNumberGfx(u8); +void DrawUnnervedSymbols(void); +void SetBgForCurtainDrop(void); +void UpdateContestantBoxOrder(void); +void Task_StartDropCurtainAtRoundEnd(u8 taskId); +void Task_UpdateCurtainDropAtRoundEnd(u8 taskId); +void Task_ResetForNextRound(u8 taskId); +void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId); +void Task_StartRaiseCurtainAtRoundEnd(u8 taskId); +void AnimateSliderHearts(u8 animId); +void Task_WaitForSliderHeartAnim(u8 taskId); +u16 SanitizeMove(u16 move); +u16 SanitizeSpecies(u16 species); +void SetMoveSpecificAnimData(u8 contestant); +void ClearMoveAnimData(u8 contestant); +void SetMoveAnimAttackerData(u8 contestant); +void CreateInvisibleBattleTargetSprite(void); +void SetBattleTargetSpritePosition(void); +void SelectContestMoveBankTarget(u16); + +#endif //GUARD_CONTEST_INTERNAL_H diff --git a/include/contest_link.h b/include/contest_link.h new file mode 100644 index 000000000..3bd5fa2bb --- /dev/null +++ b/include/contest_link.h @@ -0,0 +1,14 @@ +#ifndef GUARD_CONTEST_LINK_H +#define GUARD_CONTEST_LINK_H + +void sub_80C8734(u8 taskId); +void Task_LinkContest_CommunicateRng(u8 taskId); +void Task_LinkContest_CommunicateMonIdxs(u8 taskId); +void Task_LinkContest_CommunicateLeaderIds(u8 taskId); +void Task_LinkContest_CommunicateRound1Points(u8 taskId); +void Task_LinkContest_CommunicateTurnOrder(u8 taskId); +u8 GetStringLanguage(const u8 *string); +void Task_LinkContest_Init(u8 taskId); +void Task_LinkContest_CommunicateCategory(u8 taskId); + +#endif // GUARD_CONTEST_LINK_H diff --git a/include/contest_link_80C857C.h b/include/contest_link_80C857C.h deleted file mode 100644 index 15f41fe7f..000000000 --- a/include/contest_link_80C857C.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef GUARD_CONTEST_LINK_80C857C_H -#define GUARD_CONTEST_LINK_80C857C_H - -void sub_80C8734(u8); -void sub_80C88AC(u8); -void sub_80C89DC(u8); -void sub_80C8E1C(u8); -void sub_80C8EBC(u8); -void sub_80C8F34(u8); -u8 GetStringLanguage(const u8 *string); -void sub_80C8604(u8 taskId); -void sub_80C8938(u8 taskId); - -#endif // GUARD_CONTEST_LINK_80C857C_H diff --git a/include/contest_link_80C2020.h b/include/contest_link_util.h index 5b1390ce1..8c527f971 100644 --- a/include/contest_link_80C2020.h +++ b/include/contest_link_util.h @@ -1,15 +1,15 @@ -#ifndef GUARD_CONTEST_LINK_80C2020_H -#define GUARD_CONTEST_LINK_80C2020_H +#ifndef GUARD_CONTEST_LINK_UTIL_H +#define GUARD_CONTEST_LINK_UTIL_H void sub_80C2358(void); void Contest_GetTrainerNameI_StringVar1(void); void Contest_GetNicknameI_StringVar1(void); void sub_80C48C8(void); -void sub_80C48F4(void); +void Contest_GetSpeciesNameI_StringVar1(void); void sub_80C4940(void); -void sub_80C4980(u8); -u8 sub_80C4B34(u8 *); +void ContestLinkTransfer(u8 category); +u8 LinkContest_GetLeaderIndex(u8 *a0); void Contest_CopyAndConvertTrainerName_Intl(u8 *, const u8 *); void Contest_CopyAndConvertNicknameI_Intl(u8 *, u8); -#endif // GUARD_CONTEST_LINK_80C2020_H +#endif // GUARD_CONTEST_LINK_UTIL_H diff --git a/include/contest_painting.h b/include/contest_painting.h index 81535ec8b..fda6e963a 100644 --- a/include/contest_painting.h +++ b/include/contest_painting.h @@ -32,21 +32,10 @@ enum CONTESTRESULT_TOUGH = 6, }; -struct Unk2015E00 +struct ContestPaintingBuffers { - u16 unk2015e00[128][32]; - u16 unk2017e00[0]; -}; - -struct ContestEntry -{ - /*0x00*/ u32 personality; - /*0x04*/ u32 otId; - /*0x08*/ u16 species; - /*0x0A*/ u8 contestType; - /*0x0B*/ u8 pokemon_name[POKEMON_NAME_LENGTH]; - /*0x15*/ u8 pad15; - /*0x16*/ u8 trainer_name[OT_NAME_LENGTH]; + u16 pixels[0x1000]; + u16 palette[0x100]; }; struct LabelPair @@ -55,7 +44,7 @@ struct LabelPair const u8 *suffix; }; -void sub_8106630(u32); +void SetContestWinnerForPainting(u32 contestWinnerId); void CB2_ContestPainting(void); #endif diff --git a/include/contest_painting_effects.h b/include/contest_painting_effects.h deleted file mode 100644 index 8b99ba692..000000000 --- a/include/contest_painting_effects.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef GUARD_CUTE_SKETCH_H -#define GUARD_CUTE_SKETCH_H - -struct Unk03005E20 -{ - u8 var_0; - u8 pad1[3]; - u16 (*var_4)[][32]; - u16 *var_8; - u8 pad0C[4]; - u16 (*var_10)[][32]; - u16 var_14; - u16 var_16; - u8 var_18; - u8 var_19; - u8 var_1A; - u8 var_1B; - u8 var_1C; - u8 var_1D; - u8 var_1E; - u8 var_1F; -}; - -void sub_80FC7A0(struct Unk03005E20 *); -void sub_80FD8CC(struct Unk03005E20 *); -void sub_80FDA18(struct Unk03005E20 *); - -#endif // GUARD_CUTE_SKETCH_H diff --git a/include/script_pokemon_80C4.h b/include/contest_util.h index fab07994e..a22bd9548 100644 --- a/include/script_pokemon_80C4.h +++ b/include/contest_util.h @@ -6,7 +6,7 @@ void sub_80C5580(void); void SetBattleTowerPlayerParty(void); void ReducePlayerPartyToThree(void); -u8 sub_80C4D50(void); +u8 CountPlayerMuseumPaintings(void); void ShowContestWinner(void); void ScrSpecial_HealPlayerParty(); u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8); diff --git a/include/data2.h b/include/data2.h index ed23a10ce..c5c8a42fb 100644 --- a/include/data2.h +++ b/include/data2.h @@ -21,9 +21,9 @@ extern const struct SpriteFrameImage gSpriteImageTable_81E7A30[]; extern const struct SpriteFrameImage gSpriteImageTable_81E7A50[]; extern const struct SpriteFrameImage gSpriteImageTable_81E7A70[]; extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7B70[]; -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; +extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[]; -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[]; +extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[]; extern const union AnimCmd *const gSpriteAnimTable_81E7C64[]; extern const struct MonCoords gMonFrontPicCoords[]; extern const struct MonCoords gMonBackPicCoords[]; @@ -48,8 +48,8 @@ extern const u8 gUnknown_081F96C8[]; extern const struct CompressedSpriteSheet gUnknown_081FAEA4; extern const struct CompressedSpritePalette gUnknown_081FAEAC; extern const struct SpriteTemplate gSpriteTemplate_81FAF0C; -extern u8 *const gUnknown_081FAF4C[]; -//extern u8 (*const gUnknown_081FAF4C[])[0x800]; +extern u8 *const gMonSpriteGfx_Sprite_ptr[]; +//extern u8 (*const gMonSpriteGfx_Sprite_ptr[])[0x800]; extern const struct BattleMove gBattleMoves[]; // data/graphics/trainers/front_pic_coords.inc diff --git a/include/decompress.h b/include/decompress.h index a97dd78f1..5bf992217 100644 --- a/include/decompress.h +++ b/include/decompress.h @@ -10,8 +10,10 @@ void LoadCompressedObjectPicOverrideBuffer(const struct CompressedSpriteSheet *s void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src); void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer); void DecompressPicFromTable_2(const struct CompressedSpriteSheet *a, u8 coords, u8 y_offset, void *d, void *dest, s32 species); -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 coords, u32 y_offset, u32 d, void *dest, s32 species, u32 pid); -void LoadSpecialPokePic(const struct CompressedSpriteSheet *spriteSheet, u32 coords, u32 y_offset, u32 d, void *dest, s32 species, u32 pid, u32 frontOrBack); +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 coords, u32 y_offset, + void *decompBuf, void *dest, s32 species, u32 pid); +void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, + void *decompBuffer, void *dest, s32 species, u32 pid, u32 frontOrBack); void Unused_LZDecompressWramIndirect(const void **src, void *dest); #endif // GUARD_DECOMPRESS_H diff --git a/include/easy_chat.h b/include/easy_chat.h index 729bc0b62..468902e4c 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -18,7 +18,7 @@ struct Shared1000 u16 *unk4; u8 unk8; u8 unk9; - u8 unkA; // length of unkC array + u8 unkA; // length of contestant array u8 unkB; // reporter talked to (Gabby or Ty) u16 unkC[9]; void (*unk20)(void); diff --git a/include/ewram.h b/include/ewram.h index da544f5c2..e7fb25d71 100644 --- a/include/ewram.h +++ b/include/ewram.h @@ -2,12 +2,14 @@ #define GUARD_EWRAM_H extern u8 gSharedMem[]; -#define ewram_addr 0x02000000 // used in gSharedMem addr hacks +#define ewram_addr EWRAM // used in gSharedMem addr hacks // Note: we have duplicate ewram labels because its clear some memory // regions overlap others but have different definitions. Until some // dupes can be determined to be the same, they will be deliberate // seperated. +#define gDecompressionBuffer (gSharedMem + 0x1E000) + #define eDroughtPaletteData (*(struct WeatherPaletteData *)gSharedMem) #define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0)) #define ewram0_2 (*(struct Struct2000000 *)(gSharedMem + 0x0)) @@ -17,16 +19,13 @@ extern u8 gSharedMem[]; #define ewram0_5 (*(struct UnkStruct *)(gSharedMem + 0x0)) #define eMatsudaDebugVar (gSharedMem[0x0]) #define eBrendanSprite (gSharedMem + 0x0) -#define ewram0_6 (u32)(&gSharedMem[0]) #define ewram0_7 (&gSharedMem[0]) #define eSaveSection (struct SaveSector *)(gSharedMem + 0x0) #define ewram0arr ((u8 (*)[32])gSharedMem) #define eVoidSharedArr (void *)(ewram_addr + 0x0) -#define eVoidSharedArr2 (u32)(ewram_addr) // ew(ram) #define eSlotMachine ((struct SlotMachineEwramStruct *)(gSharedMem + 0x0)) #define ewram0_9(i) (u8 *)(ewram_addr + (i * 0x20)) #define ePokemonStorageSystem (*(struct PokemonStorageSystemData *)(gSharedMem + 0)) -#define ewram4 (*(struct UnknownStruct8 *)(gSharedMem + 0x4)) #define ewram520 ((struct UnknownStruct7 *)(gSharedMem + 0x00520)) #define ewram520_2 (u8 *)(ewram_addr + 0x520) #define eMaySprite (gSharedMem + 0x800) @@ -41,42 +40,29 @@ extern u8 gSharedMem[]; #define ARRAY_2007800 ((struct EasyChatPair *)(gSharedMem + 0x7800)) #define ARRAY_2007900 ((struct EasyChatPair *)(gSharedMem + 0x7900)) #define ewram_2008000 (*(struct PlayerRecords *)(gSharedMem + 0x08000)) -#define ewram8000 (&gSharedMem[0x8000]) -#define ePokedexPalAddr1 (void *)(gSharedMem + 0x8000) -#define ewram8800 (&gSharedMem[0x8800]) -#define ewram9000 (&gSharedMem[0x9000]) + +// pokedex.c +#define ePokedexGraphicsBuffer ((void *)&gSharedMem[0x8000]) +#define ePokedexView1 (struct PokedexView *)(gSharedMem + 0x18000) +#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800) +#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000) +#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800) + +// pokedex_cry_screen.c +#define sCryWaveformWindowTiledata (&gSharedMem[0]) +#define ePokedexCryScreen (*(struct PokedexCryScreen *)(gSharedMem + 0x1C000)) +#define ePokedexCryScreen2 (*(struct PokedexCryMeterNeedle *)(gSharedMem + 0x1C800)) + #define ewram9000_hack (void *)(ewram_addr + 0x9000) // TODO: Fix this. -#define ewram9800 (&gSharedMem[0x9800]) -#define ewramA000 (&gSharedMem[0xA000]) -#define ewramA800 (&gSharedMem[0xA800]) -#define ewramB000 (&gSharedMem[0xB000]) -#define ewramB800 (&gSharedMem[0xB800]) #define TRANSITION_STRUCT (*(struct TransitionData *) (gSharedMem + 0xC000)) -#define ewramC000 (&gSharedMem[0xC000]) -#define ePokedexPalAddr2 (void *)(gSharedMem + 0xC000) #define ewramC03C (&gSharedMem[0xC03C]) -#define ewramC800 (&gSharedMem[0xC800]) -#define ewramD000 (&gSharedMem[0xD000]) -#define ewramD800 (&gSharedMem[0xD800]) -#define ewramE000 (&gSharedMem[0xE000]) -#define ewramE800 (&gSharedMem[0xE800]) -#define ewramF000 (&gSharedMem[0xF000]) -#define ewramF800 (&gSharedMem[0xF800]) #define ewram_2010000 (*(struct TradeEwramStruct *)(gSharedMem + 0x10000)) #define ewram10000 (&gSharedMem[0x10000]) #define eSlotMachineGfxBuffer (void *)(gSharedMem + 0x10000) // slot machine -#define ePokedexPalAddr3 (void *)(gSharedMem + 0x10000) -#define ewram10800 (&gSharedMem[0x10800]) #define ewram11000 (&gSharedMem[0x11000]) -#define ewram11800 (&gSharedMem[0x11800]) -#define ewram12000 (&gSharedMem[0x12000]) -#define ewram12800 (&gSharedMem[0x12800]) #define ewram13000 (&gSharedMem[0x13000]) #define eSlotMachineReelTimeGfxBuffer (&gSharedMem[0x13200]) -#define ewram13800 (&gSharedMem[0x13800]) #define EWRAM_14000 ((u8 *)(gSharedMem + 0x14000)) -#define ewram14000 (&gSharedMem[0x14000]) -#define ePokedexPalAddr4 (void *)(gSharedMem + 0x14000) #define ewram14000arr(i, data) (gSharedMem[0x14000 + i + data]) #define ewram14004arr(i, data) (gSharedMem[0x14004 + i + data]) #define ewram14008arr(i, data) (gSharedMem[0x14008 + data + i]) @@ -84,77 +70,56 @@ extern u8 gSharedMem[]; #define EWRAM_14800 ((u16 *)(gSharedMem + 0x14800)) #define sEvoInfo ((*(struct EvoInfo*)(gSharedMem + 0x14800))) #define EWRAM_15000 ((u8 *)(gSharedMem + 0x15000)) -#define ewram15000 (&gSharedMem[0x15000]) #define ewram15000arr(i, data) (gSharedMem[0x15000 + data + i]) -#define ewram15800 (&gSharedMem[0x15800]) -#define ewram15DDE (gSharedMem[0x15DDE]) -#define ewram15DDF (gSharedMem[0x15DDF]) -#define ewram15DE0 ((*(struct ContestEntry*)(gSharedMem + 0x15DE0))) -#define ewram15E00 ((*(struct Unk2015E00*)(gSharedMem + 0x15E00))) -#define ewram16000 (gSharedMem[0x16000]) -#define ewram16000_2 (&gSharedMem[0x16000]) -#define ewram16001 (gSharedMem[0x16001]) -#define ewram16002 (gSharedMem[0x16002]) + +// Contest +#define eUnzippedContestAudience_Gfx (&gSharedMem[0x15800]) // overlaps other contest vars +#define eCurContestWinnerSaveIdx (gSharedMem[0x15DDE]) +#define eCurContestWinnerIsForArtist (gSharedMem[0x15DDF]) +#define eCurContestWinner ((*(struct ContestWinner*)(gSharedMem + 0x15DE0))) +#define eContestPaintingBuffers ((*(struct ContestPaintingBuffers*)(gSharedMem + 0x15E00))) +#define eEnableContestDebugging (gSharedMem[0x18000]) +#define eContestTempSave (*(struct ContestTempSave *)(gSharedMem + 0x18004)) +#define sContest (*(struct Contest *)(gSharedMem + 0x19204)) +#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260)) +#define eContestAppealResults (*(struct ContestAppealMoveResults *)(gSharedMem + 0x192D0)) +#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4)) +#define eContestExcitement (*(struct ContestExcitement *)(gSharedMem + 0x19328)) +#define eContestGfxState ((struct ContestGfxState *)(gSharedMem + 0x19338)) +#define gContestResources__moveAnim (*(struct ContestMoveAnim *)(gSharedMem + 0x19348)) + +// Battle Struct +// For matching purposes, the struct is placed at 0x02000000 and +// there's a ton of filler. #define ewram16003 (gSharedMem[0x16003]) #define ewram16004arr(i, battler) (gSharedMem[0x16004 + i + battler * 2]) -#define ewram1600C (gSharedMem[0x1600C]) -#define ewram1600E (gSharedMem[0x1600E]) #define ewram16010arr(battler) (gSharedMem[0x16010 + battler]) -#define ewram1601B (gSharedMem[0x1601B]) #define eDynamicMoveType (gSharedMem[0x1601C]) #define eFocusPunchBattler (gSharedMem[0x1601D]) #define eDmgMultiplier (gSharedMem[0x1601F]) #define ewram16020 ((u8 *)(gSharedMem + 0x16020)) #define ewram16020arr(i) (gSharedMem[0x16020 + i]) -#define ewram16054 (gSharedMem[0x16054]) -#define ewram16056 (gSharedMem[0x16056]) #define ewram16058 (gSharedMem[0x16058]) -#define ewram16059 (gSharedMem[0x16059]) #define ewram16060(battler) (gSharedMem[0x16060 + battler]) #define BATTLE_PARTY_ID(battler) (gSharedMem[0x16064 + battler]) -#define ewram16064 (&gSharedMem[0x16064]) #define ewram16064arr(battler) (gSharedMem[0x16064 + battler]) #define ewram16068arr(i) (gSharedMem[0x16068 + i]) #define UNK_201606C_ARRAY (gSharedMem + 0x1606C) // lazy define but whatever. #define ewram1606Carr(i, a) (gSharedMem[0x1606C + i + a * 3]) -#define ewram16078 (gSharedMem[0x16078]) -#define ewram16084 (gSharedMem[0x16084]) -#define ewram16086 (gSharedMem[0x16086]) -#define ewram16087 (gSharedMem[0x16087]) #define ewram16088 (gSharedMem[0x16088]) -#define ewram16088_2 (*(u8 *)(gSharedMem + 0x16088)) #define ewram16089 (gSharedMem[0x16089]) -#define ewram16089_2 (*(u8 *)(gSharedMem + 0x16089)) - -// src/battle/anim/battle_intro.c -#define ewram1608A gSharedMem[0x1608A] -#define ewram1608B gSharedMem[0x1608B] #define ewram1608Carr(battler) (gSharedMem[0x1608C + battler]) #define ewram16094arr(battler) (gSharedMem[0x16094 + battler]) #define EWRAM_1609D (gSharedMem[0x1609D]) -#define ewram1609e(flank) (gSharedMem[0x1609E + (flank)]) -#define ewram160A1 (gSharedMem[0x160A1]) -#define ewram160A4 (gSharedMem[0x160A4]) -#define ewram160A5 (gSharedMem[0x160A5]) -#define ewram160A6 (gSharedMem[0x160A6]) #define ewram160A8 (gSharedMem[0x160A8]) #define ewram160A9 (gSharedMem[0x160A9]) #define ewram160AA (gSharedMem[0x160AA]) #define ewram160AB (gSharedMem[0x160AB]) -#define ewram160AC ((u8 *)(gSharedMem + 0x160AC)) -#define ewram160ACarr(i) (gSharedMem[0x160AC + i]) -#define ewram160ACarr2(i, battler) (gSharedMem[0x160AC + i + battler * 2]) -#define ewram160BC ((u16 *)(gSharedMem + 0x160BC)) // hp -#define ewram160BCarr(battler) (gSharedMem[0x160BC + battler * 2]) -#define ewram160C0 (gSharedMem[0x160C0]) -#define ewram160C2_Flags ((u16 *)(gSharedMem + 0x160C2)) -#define ewram160C4_Callback ((MainCallback *)(gSharedMem + 0x160C4)) -#define ewram160C8 (gSharedMem[0x160C8]) +#define eLastTakenMove_flat(i) (gSharedMem[0x160AC + i]) +#define eLastTakenMove_2d(i, battler) (gSharedMem[0x160AC + i + battler * 2]) +#define eHpOnSwitchout(battler) (gSharedMem[0x160BC + battler * 2]) #define ewram160C8arr(battler) (gSharedMem[0x160C8 + (battler / 2)]) -#define ewram160C9 (gSharedMem[0x160C9]) -#define ewram160CB (gSharedMem[0x160CB]) -#define ewram160CC ((u8 *)(gSharedMem + 0x160CC)) #define ewram160CCarr(i) (gSharedMem[0x160CC + i]) #define USED_HELD_ITEM(battler) ((((u16*)(&gSharedMem[0x160CC + battler * 2])))) #define USED_HELD_ITEMS(battler) (*(u16 *)&gSharedMem[0x160CC + 2 * (battler)]) @@ -163,8 +128,6 @@ extern u8 gSharedMem[]; #define ewram160DA(battler) (gSharedMem[0x160DA + (battler >> 1)]) #define ewram160DD (gSharedMem[0x160DD]) #define ewram160E0(i) (gSharedMem[0x160E0 + i]) -#define ewram160E6 (gSharedMem[0x160E6]) -#define ewram160E7 (gSharedMem[0x160E7]) #define CHOICED_MOVE(battler) (((u16*)(&gSharedMem[0x160E8 + battler * 2]))) #define ewram160E8 ((u8 *)(gSharedMem + 0x160E8)) #define ewram160E8arr(i) (gSharedMem[0x160E8 + i]) @@ -172,7 +135,6 @@ extern u8 gSharedMem[]; #define ewram160F0 ((u8 *)(gSharedMem + 0x160F0)) #define ewram160F0arr(i) (gSharedMem[0x160F0 + i]) #define ewram160F8 (gSharedMem[0x160F8]) -#define ewram160F9 (gSharedMem[0x160F9]) #define eStatHp (gSharedMem[0x160FA]) #define ewram160FB (gSharedMem[0x160FB]) #define ewram16100 ((u8 *)(gSharedMem + 0x16100)) @@ -180,81 +142,70 @@ extern u8 gSharedMem[]; #define ewram16100arr2(i, battler) (gSharedMem[0x16100 + i + battler * 4]) #define ewram16108 ((u8 *)(gSharedMem + 0x16108)) #define ewram16108arr(i) (gSharedMem[0x16108 + i]) -#define ewram16110 (gSharedMem[0x16110]) -#define ewram16111 (gSharedMem[0x16111]) -#define eMultihitMoveEffect (gSharedMem[0x16112]) -#define ewram16113 (gSharedMem[0x16113]) #define ewram16400 (gSharedMem + 0x16400) +#define AI_ARRAY_160CC(i) (gSharedMem[0x160CC + i * 2]) +#define ewram16800 (&gSharedMem[0x16800]) + +// gBattleResources #define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gSharedMem + 0x16800)) #define AI_BATTLE_HISTORY ((struct BattleHistory *) (gSharedMem + 0x16A00)) #define AI_STACK ((struct AI_Stack *) (gSharedMem + 0x16C00)) -#define AI_ARRAY_160CC(i) (gSharedMem[0x160CC + i * 2]) -#define ewram16800 (&gSharedMem[0x16800]) -#define ewram17000 (&gSharedMem[0x17000]) -#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000) #define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000)) -#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000)) -#define ewram17002 (&gSharedMem[0x17002]) -#define eFlashFireArr (*(struct Struct2017100 *)(gSharedMem + 0x17100)) +#define eBattleFlagsArr (*(struct ResourceFlags *)(gSharedMem + 0x17100)) #define B_BATTLESCRIPTS_STACK ((struct BattleScriptsStack *) (gSharedMem + 0x17110)) -#define ewram17130 (gSharedMem[0x17130]) #define B_FUNCTION_STACK ((struct BattleCallbacksStack *) (gSharedMem + 0x17140)) -#define ewram17160 (gSharedMem[0x17160]) -#define ewram17800 ((struct Struct2017800 *) (gSharedMem + 0x17800)) -#define ewram17800_2 (&gSharedMem[0x17800]) +#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180)) + +// roulette_gfx.c +#define ewram17000 (&gSharedMem[0x17000]) +#define ewram17E00 ((u16 *)(gSharedMem + 0x17E00)) +#define ewram18000 ((u16 *)(gSharedMem + 0x18000)) + +#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000) +#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000)) +#define gBattleSpriteInfo ((struct BattleSpriteInfo *) (gSharedMem + 0x17800)) #define EWRAM_17800 ((struct UnknownStruct1 *)(gSharedMem + 0x17800)) #define eTransformStatuses ((struct TransformStatus *)(gSharedMem + 0x17800)) #define ewram17810 ((struct Struct2017810 *) (gSharedMem + 0x17810)) #define EWRAM_17810 ((struct UnknownStruct3 *)(gSharedMem + 0x17810)) #define ewram17840 (*(struct Struct2017840 *) (gSharedMem + 0x17840)) #define ewram17850 ((struct UnknownStruct5 *)(gSharedMem + 0x17850)) -#define ewram17E00 ((u16 *)(gSharedMem + 0x17E00)) #define ewram_2018000 (*(struct PlayerRecords *)(gSharedMem + 0x18000)) #define EWRAM_18000 ((u16 *)(gSharedMem + 0x18000)) -#define ewram18000 ((u16 *)(gSharedMem + 0x18000)) #define ewram18000_2 (&gSharedMem[0x18000]) #define ewram18000_3 *(struct Pokemon **)(gSharedMem + 0x18000) #define eBerryBlenderData (struct BerryBlenderData*)(&gSharedMem[0x18000]) #define eEggHatchData (struct EggHatchData*)(&gSharedMem[0x18000]) -#define ePokedexView1 (struct PokedexView *)(gSharedMem + 0x18000) #define UNK_2018000_STRUCT (*(struct UnknownStruct2018000 *)(gSharedMem + 0x18000)) #define pssData (*(struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000)) #define ewram18300 ((u16 *)(gSharedMem + 0x18300)) #define ewram18800 (&gSharedMem[0x18800]) -#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800) #define ewram189a0 ((u16 *)(gSharedMem + 0x189A0)) #define ewram18a20 ((u16 *)(gSharedMem + 0x18A20)) #define ewram18a32 ((u16 *)(gSharedMem + 0x18A32)) #define ewram18a80 ((u16 *)(gSharedMem + 0x18a80)) -#define ewram19000 (&gSharedMem[0x19000]) #define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000)) -#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000) #define eRoulette ((struct Roulette *)(gSharedMem + 0x19000)) -#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0)) -#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4)) #define EWRAM_19348 ((u16 *)(gSharedMem + 0x19348)) #define eWRAM_19348Struct ((struct EWRAM_19348_Struct *)(gSharedMem + 0x19348)) -#define ewram19800 (&gSharedMem[0x19800]) -#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800) #define ewram1A000 (&gSharedMem[0x1A000]) -#define ewram1A800 (&gSharedMem[0x1A800]) #define ewram1B000 (*(struct Unk201B000 *)(gSharedMem + 0x1B000)) #define ewram1B000_alt (*(struct Struct201B000 *)(gSharedMem + 0x1B000)) #define EWRAM_1B000 ewram1B000_alt // FIXME #define EWRAM_1B000_2 (*(struct Struct201B000 *)(gSharedMem + 0x1B000)) -#define ewram1B000_2 (&gSharedMem[0x1B000]) -#define ewram1B800 (&gSharedMem[0x1B800]) #define EWRAM_1C000 (*(struct Struct201C000 *)(gSharedMem + 0x1C000)) #define ewram1C000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) #define ewram1c000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) // FIXME, names too similar -#define eHallOfFameMons1 (struct HallofFameMons*)(&gSharedMem[0x1C000]) + +// hall_of_fame.c +#define eHofGfxPtr (gSharedMem + 0x8000) +#define eHofMonPtr (struct HallofFameMons*)(&gSharedMem[0x1C000]) #define eHOFPCScreenEffect (*(struct PCScreenEffectStruct *)(gSharedMem + 0x1c000)) + #define ewram1D000 ((struct Pokemon *)(gSharedMem + 0x1D000)) #define ewram1D000_2 ((u16 *)(gSharedMem + 0x1D000)) #define ewram1D400 ((u16 *)(gSharedMem + 0x1D400)) #define ewramSavedItemsPocket ((struct ItemSlot *)(gSharedMem + 0x1E000)) // saved items pocket (for Wally battle) -#define ewram1E000(i) (gSharedMem[0x1E000 + i]) -#define eHallOfFameMons2 (struct HallofFameMons*)(&gSharedMem[0x1E000]) #define eHallOfFame (struct HallOfFame *)(gSharedMem + 0x1E000) #define HALL_OF_FAME_SHEET_0 ((u8 *)(gSharedMem + 0x1E000)) #define ewram1E000_2 (const u8 *)(gSharedMem + 0x1E000) diff --git a/include/field_effect.h b/include/field_effect.h index 6bf98d4f7..f961e3a3f 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -9,7 +9,7 @@ extern const struct SpritePalette gUnknown_0839F114; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[2]; extern const struct SpriteTemplate gSpriteTemplate_839F128; extern const struct OamData gOamData_839F0F4; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gLastFieldPokeMenuOpened; diff --git a/include/global.h b/include/global.h index e5114c396..7b7ffdaaf 100644 --- a/include/global.h +++ b/include/global.h @@ -36,6 +36,12 @@ #define KANA(txt) _(txt) #endif +#define SWAP(x,y,t) {\ + t = x; \ + x = y; \ + y = t; \ +} + // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -89,6 +95,18 @@ enum (ptr)[3] = ((value) >> 24) & 0xFF;\ }) +// Converts a number to Q8.8 fixed-point format +#define Q_8_8(n) ((s16)((n) * 256)) + +// Converts a number from Q8.8 fixed-point format to integer +#define Q_8_8_TO_INT(n) ((s16)((n) >> 8)) + +// Converts a number to Q4.12 fixed-point format +#define Q_4_12(n) ((s16)((n) * 4096)) + +// Converts a number from Q4.12 fixed-point format to integer +#define Q_4_12_TO_INT(n) ((s16)((n) >> 12)) + // Credits to Made (dolphin emoji) #define S16TOPOSFLOAT(val) \ ({ \ @@ -115,26 +133,31 @@ struct UCoords16 u16 y; }; +struct SecretBaseParty +{ + /*0x1A3C*/ u32 personality[PARTY_SIZE]; + /*0x1A54*/ u16 moves[PARTY_SIZE * 4]; + /*0x1A84*/ u16 species[PARTY_SIZE]; + /*0x1A90*/ u16 heldItems[PARTY_SIZE]; + /*0x1A9C*/ u8 levels[PARTY_SIZE]; + /*0x1AA2*/ u8 EVs[PARTY_SIZE]; +}; + struct SecretBaseRecord { /*0x1A08*/ u8 secretBaseId; - /*0x1A09*/ u8 sbr_field_1_0:4; + /*0x1A09*/ u8 toRegister:4; /*0x1A09*/ u8 gender:1; - /*0x1A09*/ u8 sbr_field_1_5:1; - /*0x1A09*/ u8 sbr_field_1_6:2; + /*0x1A09*/ u8 battledOwnerToday:1; + /*0x1A09*/ u8 registryStatus:2; /*0x1A0A*/ u8 playerName[OT_NAME_LENGTH]; /*0x1A11*/ u8 trainerId[4]; // byte 0 is used for determining trainer class - /*0x1A16*/ u16 sbr_field_e; - /*0x1A18*/ u8 sbr_field_10; - /*0x1A19*/ u8 sbr_field_11; + /*0x1A16*/ u16 numSecretBasesReceived; + /*0x1A18*/ u8 numTimesEntered; + /*0x1A19*/ u8 unused; /*0x1A1A*/ u8 decorations[DECOR_MAX_SECRET_BASE]; /*0x1A2A*/ u8 decorationPos[DECOR_MAX_SECRET_BASE]; - /*0x1A3C*/ u32 partyPersonality[PARTY_SIZE]; - /*0x1A54*/ u16 partyMoves[PARTY_SIZE * 4]; - /*0x1A84*/ u16 partySpecies[PARTY_SIZE]; - /*0x1A90*/ u16 partyHeldItems[PARTY_SIZE]; - /*0x1A9C*/ u8 partyLevels[PARTY_SIZE]; - /*0x1AA2*/ u8 partyEVs[PARTY_SIZE]; + /*0x1A3C*/ struct SecretBaseParty party; }; #include "constants/game_stat.h" @@ -735,7 +758,7 @@ struct Time struct Pokedex { /*0x00*/ u8 order; - /*0x01*/ u8 unknown1; + /*0x01*/ u8 mode; /*0x02*/ u8 nationalMagic; // must equal 0xDA in order to have National mode /*0x03*/ u8 unknown2; /*0x04*/ u32 unownPersonality; // set when you first see Unown diff --git a/include/graphics.h b/include/graphics.h index 66ef9a028..a6ccc520f 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -35,14 +35,16 @@ extern const u8 gInterfaceGfx_PremierBall[]; extern const u8 gInterfacePal_PremierBall[]; extern const u8 gUnknown_08D030D0[]; -extern const u8 gUnknown_08D17144[]; -extern const u8 gUnknown_08D1725C[]; -extern const u8 gUnknown_08D17424[]; +extern const u8 gContestPalette[]; +extern const u8 gContestGfx[]; +extern const u8 gContestBgmap[]; extern const u8 gUnknown_08D17C3C[]; extern const u8 gContestMiscGfx[]; extern const u8 gContestAudienceGfx[]; extern const u8 gContestJudgeSymbolsGfx[]; extern const u8 gContest3Pal[]; +extern const u8 gContestNumbers_UnusedGfx[]; +extern const u8 gContestNumbers_UnusedPal[]; extern const u8 gTiles_8D1975C[]; extern const u8 gUnknown_08D1977C[]; extern const u8 gUnknown_08D1A250[]; diff --git a/include/image_processing_effects.h b/include/image_processing_effects.h new file mode 100644 index 000000000..47153023b --- /dev/null +++ b/include/image_processing_effects.h @@ -0,0 +1,53 @@ +#ifndef GUARD_IMAGE_PROCESSING_EFFECTS_H +#define GUARD_IMAGE_PROCESSING_EFFECTS_H + +enum +{ + IMAGE_EFFECT_POINTILLISM = 2, + IMAGE_EFFECT_GRAYSCALE_LIGHT = 6, + IMAGE_EFFECT_BLUR = 8, + IMAGE_EFFECT_OUTLINE_COLORED = 9, + IMAGE_EFFECT_INVERT_BLACK_WHITE = 10, + IMAGE_EFFECT_THICK_BLACK_WHITE = 11, + IMAGE_EFFECT_SHIMMER = 13, + IMAGE_EFFECT_OUTLINE = 30, + IMAGE_EFFECT_INVERT = 31, + IMAGE_EFFECT_BLUR_RIGHT = 32, + IMAGE_EFFECT_BLUR_DOWN = 33, + IMAGE_EFFECT_CHARCOAL = 36, +}; + +enum +{ + QUANTIZE_EFFECT_STANDARD, + QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS, + QUANTIZE_EFFECT_PRIMARY_COLORS, + QUANTIZE_EFFECT_GRAYSCALE, + QUANTIZE_EFFECT_GRAYSCALE_SMALL, + QUANTIZE_EFFECT_BLACK_WHITE, +}; + +struct ImageProcessingContext +{ + u8 effect; + void *canvasPixels; + u16 *canvasPalette; + u8 fillerC[0x4]; + void *dest; + u16 quantizeEffect; + u16 bgType; + u8 paletteStart; + u8 columnStart; + u8 rowStart; + u8 columnEnd; + u8 rowEnd; + u8 canvasWidth; + u8 canvasHeight; + u8 personality; +}; + +void ApplyImageProcessingEffects(struct ImageProcessingContext *); +void ConvertImageProcessingToGBA(struct ImageProcessingContext *); +void ApplyImageProcessingQuantization(struct ImageProcessingContext *); + +#endif // GUARD_IMAGE_PROCESSING_EFFECTS_H diff --git a/include/link.h b/include/link.h index 6c9c25202..a4540b346 100644 --- a/include/link.h +++ b/include/link.h @@ -185,7 +185,7 @@ void sub_800826C(void); void sub_80082EC(void); u8 GetLinkPlayerCount_2(void); bool8 IsLinkMaster(void); -void sub_800832C(void); +void SetCloseLinkCallback(void); void sub_8008480(void); void sub_80084A4(void); void CB2_LinkError(void); diff --git a/include/menu.h b/include/menu.h index a6ff6050e..9b132bda2 100644 --- a/include/menu.h +++ b/include/menu.h @@ -69,7 +69,9 @@ u8 sub_8072A18(const u8 *, u8, u16, u8, u32); u8 unref_sub_8072A5C(u8 *, u8 *, u8, u16, u8, u32); int sub_8072AB0(const u8 *, u8, u16, u8, u8, u32); void MenuPrint_RightAligned(const u8 *, u8, u8); -void sub_8072B80(const u8 *, u8, u8, const u8 *); + +// Prints src aligned to right edge of widthRefStr in window defined by left and top +void MenuPrint_AlignedToRightOfReferenceString(const u8 *src, u8 left, u8 top, const u8 *widthRefStr); void MenuPrint_Centered(const u8 *, u8, u8, u16); u8 *AlignInt1InMenuWindow(u8 *, s32, u8, u8); u8 *AlignInt2InMenuWindow(u8 *, s32, u8, u8); diff --git a/include/party_menu.h b/include/party_menu.h index 172435b2d..98ac0ddde 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -97,20 +97,6 @@ struct Unk2001000 u16 array[53561]; }; -struct UnknownPokemonStruct2 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[11]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - void CB2_PartyMenuMain(void); void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed); void SetPartyMenuSettings(u8 menuType, u8 battleTypeFlags, TaskFunc menuHandlerFunc, u8 textId); @@ -151,7 +137,7 @@ void SetHeldItemIconVisibility(u8 a, u8 monIndex); void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer); void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon); void PrintPartyMenuMonNicknames(void); -void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon); +void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct MultiBattlePokemonTx *pokemon); u8 *GetMonNickname(struct Pokemon *pokemon, u8 *stringBuffer); void PartyMenuPutStatusTilemap(u8 monIndex, u8 b, u8 status); void PartyMenuDoPrintLevel(u8 monIndex, u8 b, u8 level); diff --git a/include/pokedex.h b/include/pokedex.h index 1d3d9b388..7592d6ba9 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -7,7 +7,7 @@ #define NATIONAL_DEX_COUNT 386 void ResetPokedex(void); -void sub_808C0A0(void); +void ResetPokedexScrollPositions(void); void CB2_InitPokedex(void); u8 sub_809070C(u16 dexNum, u32 b, u32 c); const u8 *GetPokemonCategory(u16); @@ -28,7 +28,7 @@ u16 GetHoennPokedexCount(u8); bool8 CompletedHoennPokedex(void); bool16 CompletedNationalPokedex(void); -extern bool8 gUnknown_03005CE8; +extern bool8 gUnusedPokedexU8; struct PokedexEntry { @@ -46,9 +46,9 @@ struct PokedexEntry extern const struct PokedexEntry gPokedexEntries[]; -u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum); -u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum); +u16 CreateSizeScreenTrainerPic(u16 gender, s16 x, s16 y, u16 paletteNum); +u16 CreateMonSpriteFromNationalDexNumber(u16 num, s16 x, s16 y, u16 paletteNum); -void sub_8091738(u16, u16, u16); +void PrintFootprint(u16 num, u16 b, u16 c); #endif // GUARD_POKEDEX_H diff --git a/include/pokedex_cry_screen.h b/include/pokedex_cry_screen.h index ee586a092..d2134eb51 100644 --- a/include/pokedex_cry_screen.h +++ b/include/pokedex_cry_screen.h @@ -1,19 +1,19 @@ #ifndef GUARD_POKEDEX_CRY_SCREEN_H #define GUARD_POKEDEX_CRY_SCREEN_H -struct CryRelatedStruct +struct CryScreenWindow { - u16 unk0; - u8 unk2; + u16 charBase; + u8 screenBase; u8 paletteNo; u8 xPos; u8 yPos; }; -u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8); -u8 sub_8119E3C(struct CryRelatedStruct *, u8); -void sub_8119F88(u8 a); -void sub_811A050(u16 species); +bool8 ShowPokedexCryScreen(struct CryScreenWindow * cry, u8 arg1); +bool8 LoadCryWaveformWindow(struct CryScreenWindow * cry, u8 bgId); +void UpdateCryWaveformWindow(u8 bgId); +void CryScreenPlayButton(u16 species); void DestroyCryMeterNeedleSprite(); #endif // GUARD_POKEDEX_CRY_SCREEN_H diff --git a/include/pokemon.h b/include/pokemon.h index d2ab1335c..57da75e16 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -193,6 +193,20 @@ struct UnknownPokemonStruct /*0x2B*/u8 friendship; }; +struct MultiBattlePokemonTx +{ + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u8 nickname[11]; + /*0x0F*/ u8 level; + /*0x10*/ u16 hp; + /*0x12*/ u16 maxhp; + /*0x14*/ u32 status; + /*0x18*/ u32 personality; + /*0x1C*/ u8 gender; + /*0x1D*/ u8 language; +}; + #define BATTLE_STATS_NO 8 struct BattlePokemon diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 4f49885bf..e17d836de 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -17,7 +17,7 @@ struct TransformStatus }; u8 GetBattlerSpriteCoord(u8, u8); -u8 sub_8077E44(u8 slot, u16 species, u8 a3); +u8 GetBattlerSpriteFinal_Y(u8 slot, u16 species, u8 a3); u8 GetAnimBattlerSpriteId(u8 bank); void StoreSpriteCallbackInData(struct Sprite *sprite, void(*callback)(struct Sprite *)); void sub_8078314(struct Sprite *sprite); diff --git a/include/text.h b/include/text.h index 8b5df9280..dba242fe3 100644 --- a/include/text.h +++ b/include/text.h @@ -75,7 +75,6 @@ #define CHAR_NEWLINE 0xFE #define EOS 0xFF // end of string -#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 4 #define TEXT_COLOR_TRANSPARENT 0x00 #define TEXT_COLOR_DARK_GREY 0x01 #define TEXT_COLOR_RED 0x02 @@ -93,8 +92,28 @@ #define TEXT_COLOR_LIGHT_BLUE 0x0E #define TEXT_COLOR_WHITE2 0x0F -#define EXT_CTRL_CODE_CLEAR 17 - +#define EXT_CTRL_CODE_COLOR 0x01 +#define EXT_CTRL_CODE_HIGHLIGHT 0x02 +#define EXT_CTRL_CODE_SHADOW 0x03 +#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04 +#define EXT_CTRL_CODE_PALETTE 0x05 +#define EXT_CTRL_CODE_SIZE 0x06 +#define EXT_CTRL_CODE_RESET_SIZE 0x07 +#define EXT_CTRL_CODE_PAUSE 0x08 +#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09 +#define EXT_CTRL_CODE_WAIT_SE 0x0A +#define EXT_CTRL_CODE_PLAY_BGM 0x0B +#define EXT_CTRL_CODE_ESCAPE 0x0C +#define EXT_CTRL_CODE_SHIFT_TEXT 0x0D // nop +#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E +#define EXT_CTRL_CODE_FILL_WINDOW 0x0F +#define EXT_CTRL_CODE_PLAY_SE 0x10 +#define EXT_CTRL_CODE_CLEAR 0x11 +#define EXT_CTRL_CODE_SKIP 0x12 +#define EXT_CTRL_CODE_CLEAR_TO 0x13 +#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14 +#define EXT_CTRL_CODE_JPN 0x15 +#define EXT_CTRL_CODE_ENG 0x16 struct WindowTemplate { @@ -206,7 +225,7 @@ extern const struct WindowTemplate gWindowTemplate_81E70F0; extern const struct WindowTemplate gWindowTemplate_81E710C; extern const struct WindowTemplate gWindowTemplate_81E7128; extern const struct WindowTemplate gWindowTemplate_81E7144; -extern const struct WindowTemplate gWindowTemplate_81E7160; +extern const struct WindowTemplate gWindowTemplate_ContestPainting; extern const struct WindowTemplate gWindowTemplate_81E717C; extern const struct WindowTemplate gWindowTemplate_81E7198; extern const struct WindowTemplate gWindowTemplate_81E71B4; @@ -236,7 +255,7 @@ void Text_InitWindowWithTemplate(struct Window *win, const struct WindowTemplate void Text_InitWindow(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top); void Text_InitWindow8002E4C(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u16 top, u32 a6); void Text_SetWindowText(struct Window *win, const u8 *text); -void Text_InitWindow8002EB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top); +void Contest_StartTextPrinter(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top); u8 Text_PrintWindow8002F44(struct Window *win); u8 Text_PrintWindowSimple(struct Window *win); u8 Text_InitWindowAndPrintText(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top); @@ -248,7 +267,7 @@ u8 *sub_8003558(u8 *dest, const u8 *src, u8 alignAmount, u8 alignType); u8 Text_UpdateWindow(struct Window *win); u8 Text_UpdateWindowInBattle(struct Window *win); u8 Text_UpdateWindowAutoscroll(struct Window *win); -u8 Text_UpdateWindowInContest(struct Window *win); +u8 Contest_RunTextPrinter(struct Window *win); u32 Text_UpdateWindowOverrideLineLength(struct Window *win, u8 lineLength); void Text_ClearWindow(struct Window *win); u16 Text_GetWindowTilemapEntry(struct Window *win, u8 x, u8 y); diff --git a/ld_script.txt b/ld_script.txt index 9dee04d9b..8cfbd5b86 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -147,6 +147,7 @@ SECTIONS { src/debug/matsuda_debug_menu.o(.text); src/debug/crash.o(.text); src/contest.o(.text); + src/contest_2.o(.text); src/shop.o(.text); src/fldeff_escalator.o(.text); src/berry.o(.text); @@ -159,8 +160,8 @@ SECTIONS { src/debug/sound_check_menu.o(.text); src/secret_base.o(.text); src/tv.o(.text); - src/contest_link_80C2020.o(.text); - src/script_pokemon_util_80C4BF0.o(.text); + src/contest_link_util.o(.text); + src/contest_util.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); src/pc_screen_effect.o(.text); @@ -173,7 +174,7 @@ SECTIONS { src/field_special_scene.o(.text); src/rotating_gate.o(.text); src/safari_zone.o(.text); - src/contest_link_80C857C.o(.text); + src/contest_link.o(.text); src/item_use.o(.text); src/battle/anim/powder.o(.text); src/battle/anim/orbs.o(.text); @@ -304,7 +305,7 @@ SECTIONS { src/dewford_trend.o(.text); src/heal_location.o(.text); src/region_map.o(.text); - src/contest_painting_effects.o(.text); + src/image_processing_effects.o(.text); src/decoration.o(.text); src/slot_machine.o(.text); src/contest_painting.o(.text); @@ -574,7 +575,7 @@ SECTIONS { src/item.o(.rodata); src/debug/matsuda_debug_menu.o(.rodata); src/contest.o(.rodata); - data/contest.o(.rodata); + src/contest_2.o(.rodata); src/shop.o(.rodata); src/fldeff_escalator.o(.rodata); src/berry.o(.rodata); @@ -589,8 +590,8 @@ SECTIONS { src/debug/sound_check_menu.o(.rodata); src/secret_base.o(.rodata); src/tv.o(.rodata); - src/contest_link_80C2020.o(.rodata); - src/script_pokemon_util_80C4BF0.o(.rodata); + src/contest_link_util.o(.rodata); + src/contest_util.o(.rodata); src/pokemon_size_record.o(.rodata); src/pc_screen_effect.o(.rodata); src/pc_screen_effect.o(.data); @@ -600,7 +601,7 @@ SECTIONS { src/fldeff_recordmixing.o(.rodata); src/field_special_scene.o(.rodata); src/rotating_gate.o(.rodata); - src/contest_link_80C857C.o(.rodata); + src/contest_link.o(.rodata); src/item_use.o(.rodata); src/battle/anim/powder.o(.rodata); src/battle/anim/orbs.o(.rodata); @@ -725,8 +726,7 @@ SECTIONS { src/script_pokemon_util_80F99CC.o(.rodata); src/heal_location.o(.rodata); src/region_map.o(.rodata); - src/contest_painting_effects.o(.rodata); - data/contest_painting_effects.o(.rodata); + src/image_processing_effects.o(.rodata); src/decoration.o(.rodata); src/slot_machine.o(.rodata); src/contest_painting.o(.rodata); diff --git a/override.mk b/override.mk index e69de29bb..0b94ce13e 100644 --- a/override.mk +++ b/override.mk @@ -0,0 +1,3 @@ +ifeq ($(GAME_LANGUAGE),GERMAN) +include override-de.mk +endif diff --git a/src/battle/anim/battle_intro.c b/src/battle/anim/battle_intro.c index c18f5790c..e432701f4 100644 --- a/src/battle/anim/battle_intro.c +++ b/src/battle/anim/battle_intro.c @@ -12,7 +12,7 @@ #include "trig.h" extern u16 gBattleTypeFlags; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gBattleMonForms[]; extern void sub_800FE20(struct Sprite *); @@ -118,7 +118,7 @@ static void BattleIntroTask_ScrollScenery(u8 taskId) gTasks[taskId].tState++; gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -227,7 +227,7 @@ static void BattleIntroTask_FadeScenery(u8 taskId) gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; gTasks[taskId].data[5] = 1; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -323,7 +323,7 @@ static void BattleIntroTask_ScrollAndFadeScenery(u8 taskId) gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; gTasks[taskId].data[5] = 1; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -402,10 +402,10 @@ static void BattleIntroTask_80E4C34(u8 taskId) if (gTasks[taskId].tBgXOffset == 0) { gTasks[taskId].tState++; - gSprites[ewram1608A].oam.objMode = 2; - gSprites[ewram1608A].callback = sub_800FE20; - gSprites[ewram1608B].oam.objMode = 2; - gSprites[ewram1608B].callback = sub_800FE20; + gSprites[gBattleStruct->unk1608A].oam.objMode = 2; + gSprites[gBattleStruct->unk1608A].callback = sub_800FE20; + gSprites[gBattleStruct->unk1608B].oam.objMode = 2; + gSprites[gBattleStruct->unk1608B].callback = sub_800FE20; REG_WININ = 0x3F; REG_WINOUT = 0x3F06; } @@ -419,7 +419,7 @@ static void BattleIntroTask_80E4C34(u8 taskId) gTasks[taskId].tState++; gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; gTasks[taskId].tFramesUntilBg1Slide = 32; - gUnknown_02024DE8 &= ~1; + gIntroSlideFlags &= ~1; } break; case 3: @@ -463,7 +463,7 @@ void sub_80E4EF8(u8 left, u8 top, u8 c, u8 paletteNum, u16 e, u8 bgMap, u8 g) s32 y; u8 bank = GetBattlerAtPosition(c); - DmaCopy16(3, gUnknown_081FAF4C[c] + gBattleMonForms[bank] * 0x800, (void *)(VRAM + e), 0x800); + DmaCopy16(3, gMonSpriteGfx_Sprite_ptr[c] + gBattleMonForms[bank] * 0x800, (void *)(VRAM + e), 0x800); tileNum = e / 32 - g * 512; for (y = top; y < top + 8; y++) { @@ -481,7 +481,7 @@ void unref_sub_80E4FDC(u8 left, u8 top, u8 c, u8 form, u8 paletteNum, u16 f, u8 s32 x; s32 y; - DmaCopy16(3, gUnknown_081FAF4C[c] + form * 0x800, (void *)(VRAM + f), 0x800); + DmaCopy16(3, gMonSpriteGfx_Sprite_ptr[c] + form * 0x800, (void *)(VRAM + f), 0x800); tileNum = f / 32 - h * 512; for (y = top; y < top + 8; y++) { diff --git a/src/battle/anim/normal.c b/src/battle/anim/normal.c index 9053d7844..9be913b70 100644 --- a/src/battle/anim/normal.c +++ b/src/battle/anim/normal.c @@ -1932,8 +1932,8 @@ void sub_80E4300(u8 taskId) } else { - gTasks[taskId].data[0] = ewram17800[gBattleAnimAttacker].invisible; - ewram17800[gBattleAnimAttacker].invisible = TRUE; + gTasks[taskId].data[0] = gBattleSpriteInfo[gBattleAnimAttacker].invisible; + gBattleSpriteInfo[gBattleAnimAttacker].invisible = TRUE; gTasks[taskId].func = sub_80E4368; gAnimVisualTaskCount--; } @@ -1943,7 +1943,7 @@ static void sub_80E4368(u8 taskId) { if (gBattleAnimArgs[7] == 0x1000) { - ewram17800[gBattleAnimAttacker].invisible = gTasks[taskId].data[0] & 1; + gBattleSpriteInfo[gBattleAnimAttacker].invisible = gTasks[taskId].data[0] & 1; DestroyTask(taskId); } } diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 9bc88e258..a22e96428 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -137,7 +137,7 @@ static void sub_812B108(u8 taskId) } } -// #define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) +// #define gContestResources__moveAnim (*(struct ContestMoveAnim *)(gSharedMem + 0x19348)) // #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) // used in 3 moves: @@ -150,7 +150,7 @@ void sub_812B18C(u8 taskId) if (IsContest()) { if (!gBattleAnimArgs[0]) - species = shared19348.unk0; + species = gContestResources__moveAnim.species; else DestroyAnimVisualTask(taskId); } @@ -200,7 +200,7 @@ void sub_812B2B8(u8 taskId) s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER_NEG); if (IsContest()) - species = shared19348.unk0; + species = gContestResources__moveAnim.species; else species = gAnimSpeciesByBanks[gBattleAnimAttacker]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f83334be3..9de1e9b1f 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -82,7 +82,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; GetMonData(&gEnemyParty[i], MON_DATA_SPECIES); // Unused return value. GetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY); // Unused return value. - + for (opposingBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT), j = 0; j < MAX_MON_MOVES; ++j) { move = GetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j); diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 881f13c97..3df51d5df 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -32,8 +32,8 @@ extern u16 gBattle_BG2_Y; extern u16 gWeatherMoveAnim; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220; -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[]; -extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; +extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[]; +extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[]; extern const u32 gUnknown_08D2AA98[]; extern const u32 gUnknown_08D2A9E0[]; extern const u16 gUnknown_08D2AA80[]; @@ -2297,7 +2297,7 @@ void sub_812D7E8(u8 taskId) else position = GetBattlerPosition(gBattleAnimAttacker); - dest = gUnknown_081FAF4C[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); + dest = gMonSpriteGfx_Sprite_ptr[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); src = subStruct.field_0; DmaCopy32(3, dest, src, 0x800); @@ -2327,9 +2327,11 @@ void sub_812D7E8(u8 taskId) ptr = EWRAM_19348; if (IsSpeciesNotUnown(ptr[1])) - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = + gAffineAnims_BattleSpriteContest; else - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7BEC; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = + gAffineAnims_BattleSpriteOpponentSide; StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); } @@ -4667,7 +4669,8 @@ void sub_81312E4(u8 taskId) refresh_graphics_maybe(gBattleAnimAttacker, 0, spriteId); if (IsContest()) { - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = + gAffineAnims_BattleSpriteContest; StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); } diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index e86b9359c..50a5323e3 100755 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -1843,7 +1843,7 @@ void sub_81416C4(u8 taskId) void sub_81417D8(u8 taskId) { - gBattleAnimArgs[7] = ewram17800[gBattleAnimAttacker].substituteSprite; + gBattleAnimArgs[7] = gBattleSpriteInfo[gBattleAnimAttacker].substituteSprite; DestroyAnimVisualTask(taskId); } diff --git a/src/battle_bg.c b/src/battle_bg.c index 6aa22edf6..f9b1e192c 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -19,7 +19,7 @@ extern u16 gBattleTypeFlags; extern u8 gBattleOutcome; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 BattleText_Win[]; extern u8 BattleText_Loss[]; @@ -247,9 +247,9 @@ void sub_800D6D4(void) void ApplyPlayerChosenFrameToBattleMenu(void) { TextWindow_SetBaseTileNum(0x12); - TextWindow_LoadStdFrameGraphicsOverridePal(&gUnknown_03004210, 1); + TextWindow_LoadStdFrameGraphicsOverridePal(&gWindowTemplate_Contest_MoveDescription, 1); TextWindow_SetBaseTileNum(0x22); - TextWindow_LoadStdFrameGraphicsOverridePal(&gUnknown_03004210, 1); + TextWindow_LoadStdFrameGraphicsOverridePal(&gWindowTemplate_Contest_MoveDescription, 1); gPlttBufferUnfaded[92] = 0x7fe0; gPlttBufferUnfaded[93] = 0x2529; gPlttBufferUnfaded[94] = 0x7fff; @@ -416,7 +416,7 @@ static void sub_800DAF8(u8 taskId, u8 windowId, u8 *dest) } CpuSet(src, dest, 3); } else { - if (windowId == gBattleStruct->linkPlayerIndex) { + if (windowId == gBattleStruct->multiplayerId) { r4 = gTasks[taskId].data[3]; } else { r4 = gTasks[taskId].data[4]; @@ -444,8 +444,8 @@ static void sub_800DAF8(u8 taskId, u8 windowId, u8 *dest) #define PRINT_MESSAGE(text, tileDataStartOffset, x) \ { \ - Text_InitWindow(&gUnknown_03004210, text, tileDataStartOffset, x, MESSAGE_Y); \ - Text_PrintWindow8002F44(&gUnknown_03004210); \ + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, text, tileDataStartOffset, x, MESSAGE_Y); \ + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); \ } #define PRINT_MESSAGE_LEFT(text, tileDataStartOffset) PRINT_MESSAGE(text, tileDataStartOffset, LEFT_MESSAGE_X) @@ -468,7 +468,7 @@ static void PrintLinkBattleWinLossTie(void) { // id = player position? - switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].id) + switch (gLinkPlayers[gBattleStruct->multiplayerId].id) { case 0: case 2: @@ -486,7 +486,7 @@ static void PrintLinkBattleWinLossTie(void) else { - switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].id) + switch (gLinkPlayers[gBattleStruct->multiplayerId].id) { case 1: case 3: @@ -508,7 +508,7 @@ static void PrintLinkBattleWinLossTie(void) if (gBattleOutcome == 1) { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id != 0) + if (gLinkPlayers[gBattleStruct->multiplayerId].id != 0) { PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); @@ -521,7 +521,7 @@ static void PrintLinkBattleWinLossTie(void) } else { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id != 0) + if (gLinkPlayers[gBattleStruct->multiplayerId].id != 0) { PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); @@ -535,7 +535,7 @@ static void PrintLinkBattleWinLossTie(void) } -void sub_800DE30(u8 taskId) +void InitLinkBattleVsScreen(u8 taskId) { u8 palette; int i; @@ -559,11 +559,11 @@ void sub_800DE30(u8 taskId) } else { u8 windowId = 4; - u8 playerId = gBattleStruct->linkPlayerIndex; - u8 opponentId = gBattleStruct->linkPlayerIndex ^ 1; + u8 playerId = gBattleStruct->multiplayerId; + u8 opponentId = gBattleStruct->multiplayerId ^ 1; if (gLinkPlayers[playerId].id) { - opponentId = gBattleStruct->linkPlayerIndex; - playerId = gBattleStruct->linkPlayerIndex ^ 1; + opponentId = gBattleStruct->multiplayerId; + playerId = gBattleStruct->multiplayerId ^ 1; } Text_InitWindow8002E4C( diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index d781599e9..6826ac60d 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -44,11 +44,11 @@ extern void (*gAnimScriptCallback)(void); extern u8 gDisplayedStringBattle[]; extern bool8 gDoingBattleAnim; extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gAnimMoveTurn; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gUnknown_0300434C[]; extern u32 gBattleControllerExecFlags; extern MainCallback gPreBattleCallback1; @@ -427,7 +427,7 @@ void sub_8037BBC(void) void sub_8037C2C(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) LinkOpponentBufferExecCompleted(); } @@ -454,7 +454,7 @@ void sub_8037CC0(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_8037D2C; } @@ -519,7 +519,7 @@ void sub_8037F34(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - sub_800832C(); + SetCloseLinkCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_8037EF0; } else @@ -1148,7 +1148,7 @@ void LinkOpponentHandleLoadPokeSprite(void) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), sub_8077F68(gActiveBattler), GetBattlerSubpriority(gActiveBattler)); @@ -1178,7 +1178,7 @@ void sub_8039430(u8 a, u8 b) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[a]], a); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a)); gBattlerSpriteIds[a] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(a, 2), sub_8077F68(a), GetBattlerSubpriority(a)); @@ -1214,7 +1214,7 @@ void sub_8039648(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1250,7 +1250,7 @@ void LinkOpponentHandleTrainerThrow(void) sub_8031A6C(gender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 176 + xOffset, 40 + 4 * (8 - gTrainerFrontPicCoords[gender].coords), GetBattlerSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240; @@ -1283,7 +1283,7 @@ void LinkOpponentHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -1358,9 +1358,9 @@ void sub_8039B64(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite && !ewram17800[gActiveBattler].unk0_3) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite && !gBattleSpriteInfo[gActiveBattler].flag_x8) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -1378,10 +1378,10 @@ void sub_8039B64(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBattler].substituteSprite) && r7 <= 1) + if ((gBattleSpriteInfo[gActiveBattler].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -1405,7 +1405,8 @@ void LinkOpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_8037C2C; } @@ -1613,7 +1614,7 @@ void LinkOpponentHandleFaintingCry(void) void LinkOpponentHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; LinkOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 67c46c59d..ec6616962 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -38,17 +38,17 @@ extern u32 gBattleControllerExecFlags; extern u16 gBattlerPartyIndexes[]; extern u8 gBattlerSpriteIds[]; extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; extern u8 gDoingBattleAnim; extern u32 gTransformedPersonalities[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern s32 gAnimMoveDmg; extern u16 gAnimMovePower; extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u8 gAnimMoveTurn; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern MainCallback gPreBattleCallback1; extern void (*gBattlerControllerFuncs[])(void); extern u8 gHealthboxSpriteIds[]; @@ -368,7 +368,7 @@ void sub_811DF34(void) void sub_811DFA0(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) LinkPartnerBufferExecCompleted(); } @@ -396,7 +396,7 @@ void sub_811E034(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_811E0A0; } @@ -456,7 +456,7 @@ void sub_811E29C(void) { if (gBattleTypeFlags & 2) { - sub_800832C(); + SetCloseLinkCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_811E258; } else @@ -1088,7 +1088,7 @@ void LinkPartnerHandleLoadPokeSprite(void) GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES), GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), sub_8077F68(gActiveBattler), GetBattlerSubpriority(gActiveBattler)); @@ -1118,7 +1118,7 @@ void sub_811F864(u8 a, u8 b) gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a)); gBattlerSpriteIds[a] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(a, 2), sub_8077F68(a), GetBattlerSubpriority(a)); @@ -1153,7 +1153,7 @@ void sub_811FA5C(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1189,7 +1189,7 @@ void LinkPartnerHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(gender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80 + xOffset, 80 + 4 * (8 - gTrainerBackPicCoords[gender].coords), GetBattlerSubpriority(gActiveBattler)); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1219,7 +1219,7 @@ void LinkPartnerHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -1294,9 +1294,9 @@ void sub_811FF30(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite && !ewram17800[gActiveBattler].unk0_3) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite && !gBattleSpriteInfo[gActiveBattler].flag_x8) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -1314,10 +1314,10 @@ void sub_811FF30(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBattler].substituteSprite) && r7 <= 1) + if ((gBattleSpriteInfo[gActiveBattler].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -1341,7 +1341,8 @@ void LinkPartnerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_811DFA0; } @@ -1549,7 +1550,7 @@ void LinkPartnerHandleFaintingCry(void) void LinkPartnerHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; LinkPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index b3685806d..6154655ad 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -39,7 +39,7 @@ extern u8 gBattleBufferA[][0x200]; extern u16 gBattlerPartyIndexes[]; extern u8 gBattlerSpriteIds[]; extern u8 gBattleMonForms[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern void (*gBattlerControllerFuncs[])(void); extern u8 gUnknown_0300434C[]; extern u8 gHealthboxSpriteIds[]; @@ -53,12 +53,12 @@ extern u32 gTransformedPersonalities[]; extern u8 gAnimMoveTurn; extern u8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gDisplayedStringBattle[]; extern u8 gBattlerTarget; extern u8 gAbsentBattlerFlags; extern bool8 gDoingBattleAnim; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; extern MainCallback gPreBattleCallback1; extern struct MusicPlayerInfo gMPlayInfo_SE1; @@ -432,7 +432,7 @@ void sub_8033160(void) void sub_80331D0(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) OpponentBufferExecCompleted(); } @@ -459,7 +459,7 @@ void sub_8033264(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_80332D0; } @@ -1119,7 +1119,7 @@ void OpponentHandleLoadPokeSprite(void) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(gActiveBattler, 2), sub_8077F68(gActiveBattler), GetBattlerSubpriority(gActiveBattler)); @@ -1151,7 +1151,7 @@ void sub_803495C(u8 a, u8 b) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[a]], a); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(a)); gBattlerSpriteIds[a] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(a, 2), sub_8077F68(a), GetBattlerSubpriority(a)); @@ -1187,7 +1187,7 @@ void sub_8034B74(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1227,7 +1227,7 @@ void OpponentHandleTrainerThrow(void) sub_8031A6C(trainerPicIndex, gActiveBattler); GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 0xB0, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), GetBattlerSubpriority(gActiveBattler)); @@ -1257,7 +1257,7 @@ void OpponentHandleTrainerSlide(void) sub_8031A6C(trainerPicIndex, gActiveBattler); GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 0xB0, 40 + 4 * (8 - gTrainerFrontPicCoords[trainerPicIndex].coords), 0x1E); @@ -1287,7 +1287,7 @@ void OpponentHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -1362,9 +1362,9 @@ void sub_8035238(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite && !ewram17800[gActiveBattler].unk0_3) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite && !gBattleSpriteInfo[gActiveBattler].flag_x8) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -1382,10 +1382,10 @@ void sub_8035238(void) if (!gAnimScriptActive) { sub_80326EC(1); - if ((ewram17800[gActiveBattler].substituteSprite) && r7 <= 1) + if ((gBattleSpriteInfo[gActiveBattler].substituteSprite) && r7 <= 1) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -1409,7 +1409,8 @@ void OpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_80331D0; } @@ -2019,7 +2020,7 @@ void OpponentHandleFaintingCry(void) void OpponentHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 772728295..92a5172d0 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -36,7 +36,7 @@ struct MovePpInfo #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern void (*gBattlerControllerFuncs[])(void); @@ -64,9 +64,9 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u32 gTransformedPersonalities[]; extern u8 gBattleMonForms[]; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gAnimMoveTurn; extern u8 gUnknown_02038470[]; extern u8 gUnknown_03004344; @@ -141,7 +141,7 @@ extern u8 gAbsentBattlerFlags; extern u8 gUnknown_03004344; extern u8 gBattlersCount; extern u16 gBattlerPartyIndexes[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; extern struct BattlePokemon gBattleMons[]; @@ -739,9 +739,9 @@ void sub_802C68C(void) else gUnknown_03004344 = gMoveSelectionCursor[gActiveBattler] + 1; sub_802E3B4(gUnknown_03004344, 27); - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_SwitchWhich, 0x290, 0x17, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_SwitchWhich, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gBattlerControllerFuncs[gActiveBattler] = sub_802CA60; } } @@ -751,34 +751,34 @@ void sub_802C68C(void) const u8 *moveName; s32 i; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x3A); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 16, 0x3A); moveName = gMoveNames[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1)]; - Text_InitWindowAndPrintText(&gUnknown_03004210, moveName, 0x100, 2, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, moveName, 0x100, 2, 0x37); ConvertIntToDecimalStringN( gDisplayedStringBattle, GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1), 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x110, 10, 0x37); - Text_InitWindowAndPrintText(&gUnknown_03004210, gString_TurnJP, 0x116, 1, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x110, 10, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gString_TurnJP, 0x116, 1, 0x39); ConvertIntToDecimalStringN(gDisplayedStringBattle, gAnimMoveTurn, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x11C, 4, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x11C, 4, 0x39); for (i = 0; i < 64; i++) { if (gSprites[i].inUse) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x122, 8, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x122, 8, 0x39); count = GetTaskCount(); ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x126, 11, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x126, 11, 0x39); for (i = 0, count = 0; i < 32; i++) { if (gOamMatrixAllocBitmap & (1 << i)) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x12A, 14, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x12A, 14, 0x39); gBattlerControllerFuncs[gActiveBattler] = debug_sub_8030C24; } #endif @@ -885,9 +885,9 @@ void sub_802CA60(void) gBattlerControllerFuncs[gActiveBattler] = sub_802C68C; gMoveSelectionCursor[gActiveBattler] = gUnknown_03004344; sub_802E3B4(gMoveSelectionCursor[gActiveBattler], 0); - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_PP, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); sub_802E220(); sub_802E2D4(); } @@ -898,9 +898,9 @@ void sub_802CA60(void) sub_802E3B4(gMoveSelectionCursor[gActiveBattler], 0); sub_802E12C(gMoveSelectionCursor[gActiveBattler], BattleText_Format); gBattlerControllerFuncs[gActiveBattler] = sub_802C68C; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_PP, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); sub_802E220(); sub_802E2D4(); } @@ -975,7 +975,7 @@ void sub_802D18C(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - sub_800832C(); + SetCloseLinkCallback(); gBattlerControllerFuncs[gActiveBattler] = sub_802D148; } else @@ -1045,10 +1045,10 @@ void debug_sub_8030C24(void) move = 1; SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1, &move); gBattleMons[gActiveBattler].moves[0] = move; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x38); - Text_InitWindowAndPrintText(&gUnknown_03004210, gMoveNames[move], 0x100, 2, 0x37); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 16, 0x38); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gMoveNames[move], 0x100, 2, 0x37); ConvertIntToDecimalStringN(gDisplayedStringBattle, move, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 272, 10, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 272, 10, 0x37); } break; case L_BUTTON: @@ -1070,10 +1070,10 @@ void debug_sub_8030C24(void) move = 354; SetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1, &move); gBattleMons[gActiveBattler].moves[0] = move; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x38); - Text_InitWindowAndPrintText(&gUnknown_03004210, gMoveNames[move], 0x100, 2, 0x37); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 16, 0x38); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gMoveNames[move], 0x100, 2, 0x37); ConvertIntToDecimalStringN(gDisplayedStringBattle, move, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 272, 10, 0x37); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 272, 10, 0x37); } break; case DPAD_UP: @@ -1083,7 +1083,7 @@ void debug_sub_8030C24(void) else gAnimMoveTurn++; ConvertIntToDecimalStringN(gDisplayedStringBattle, gAnimMoveTurn, 2, 3); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 284, 4, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 284, 4, 0x39); break; } @@ -1098,12 +1098,12 @@ void debug_sub_8030C24(void) move = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + i); StringAppend(gDisplayedStringBattle, gMoveNames[move]); Text_InitWindow( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x100 + i * 16, (i & 1) ? 10 : 2, (i < 2) ? 0x37 : 0x39); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } gBattlerControllerFuncs[gActiveBattler] = sub_802C68C; } @@ -1128,11 +1128,11 @@ void debug_sub_803107C(void) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 290, 8, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 290, 8, 0x39); count = GetTaskCount(); ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 294, 11, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 294, 11, 0x39); for (i = 0, count = 0; i < 32; i++) { @@ -1140,7 +1140,7 @@ void debug_sub_803107C(void) count++; } ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); - Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 298, 14, 0x39); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 298, 14, 0x39); gBattlerControllerFuncs[gActiveBattler] = debug_sub_8030C24; } @@ -1258,7 +1258,7 @@ void sub_802D680(void) ewram17810[gActiveBattler].unk1_0 = 0; FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); gBattlerControllerFuncs[gActiveBattler] = sub_802D730; } @@ -1317,7 +1317,7 @@ void bx_t1_healthbar_update(void) void sub_802D90C(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) PlayerBufferExecCompleted(); } @@ -1507,7 +1507,7 @@ void sub_802DEAC(void) // Duplicate of sub_802D90C void sub_802DF18(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) PlayerBufferExecCompleted(); } @@ -1589,12 +1589,12 @@ void sub_802E12C(s32 a, const u8 *b) StringCopy(gDisplayedStringBattle, b); StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); Text_InitWindow( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x300 + a * 20, (a & 1) ? 11 : 1, (a < 2) ? 0x37 : 0x39); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void sub_802E1B0(void) @@ -1603,7 +1603,7 @@ void sub_802E1B0(void) s32 i; gUnknown_03004348 = 0; - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 1, 0x37, 0x14, 0x3A); for (i = 0; i < 4; i++) { nullsub_7(i); @@ -1632,8 +1632,8 @@ void sub_802E220(void) str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBattler]], 1, 2); *str++ = CHAR_SLASH; ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBattler]], 1, 2); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } } @@ -1644,8 +1644,8 @@ void sub_802E2D4(void) { if (gBattleBufferA[gActiveBattler][2] == 1) { - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, BattleText_ForgetMove, 0x290, 0x13, 0x37); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_ForgetMove, 0x290, 0x13, 0x37); } else { @@ -1654,10 +1654,10 @@ void sub_802E2D4(void) str = StringCopy(str, BattleText_Format); StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBattler]]].type]); - Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 0x1016, 0x17, 0x39, 0x1C, 0x3A); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); } - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } const u8 gUnknown_081FAE89[][2] = @@ -1728,7 +1728,8 @@ void b_link_standby_message(void) { gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - Text_InitWindow8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2350,7 +2351,7 @@ void sub_802F934(u8 bank, u8 b) gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(bank)); gBattlerSpriteIds[bank] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), sub_8077F68(bank), GetBattlerSubpriority(bank)); @@ -2385,7 +2386,7 @@ void sub_802FB2C(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -2417,7 +2418,7 @@ void PlayerHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, r7 + 80, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, GetBattlerSubpriority(gActiveBattler)); @@ -2433,7 +2434,7 @@ void PlayerHandleTrainerSlide(void) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, 30); @@ -2460,7 +2461,7 @@ void PlayerHandlecmd10(void) { if (ewram17810[gActiveBattler].unk4 == 0) { - if (ewram17800[gActiveBattler].substituteSprite) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4++; } @@ -2548,9 +2549,10 @@ void sub_8030190(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite == 1 && ewram17800[gActiveBattler].unk0_3 == 0) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1 && + gBattleSpriteInfo[gActiveBattler].flag_x8 == 0) { - ewram17800[gActiveBattler].unk0_3 = 1; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 1; move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); } ewram17810[gActiveBattler].unk4 = 1; @@ -2568,10 +2570,10 @@ void sub_8030190(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBattler].substituteSprite == 1 && r7 < 2) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1 && r7 < 2) { move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); - ewram17800[gActiveBattler].unk0_3 = 0; + gBattleSpriteInfo[gActiveBattler].flag_x8 = 0; } ewram17810[gActiveBattler].unk4 = 3; } @@ -2593,7 +2595,8 @@ void PlayerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x90, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_802DF18; } @@ -2611,13 +2614,13 @@ void PlayerHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - Text_FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); - Text_FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 10, 2, 15, 27, 18); + Text_FillWindowRect(&gWindowTemplate_Contest_MoveDescription, 10, 2, 35, 16, 38); gBattlerControllerFuncs[gActiveBattler] = sub_802C098; - Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_MenuOptions, 400, 18, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); for (r4 = 0; r4 < 4; r4++) @@ -2626,8 +2629,8 @@ void PlayerHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(BattleText_OtherMenu); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void PlayerHandlecmd19() @@ -2650,8 +2653,8 @@ void sub_80304A8(void) sub_802E3B4(gMoveSelectionCursor[gActiveBattler], 0); if (gBattleBufferA[gActiveBattler][2] != 1) { - Text_InitWindow(&gUnknown_03004210, BattleText_PP, 656, 23, 55); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_PP, 656, 23, 55); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } sub_802E220(); sub_802E2D4(); @@ -2674,9 +2677,9 @@ void PlayerHandlecmd22(void) gUnknown_0300434C[gActiveBattler] = CreateTask(TaskDummy, 0xFF); gTasks[gUnknown_0300434C[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; - ewram16054 = gBattleBufferA[gActiveBattler][1] >> 4; - EWRAM_1609D = gBattleBufferA[gActiveBattler][2]; - ewram160C0 = gBattleBufferA[gActiveBattler][3]; + gBattleStruct->unk16054 = gBattleBufferA[gActiveBattler][1] >> 4; + gBattleStruct->unk1609D = gBattleBufferA[gActiveBattler][2]; + gBattleStruct->unk160C0 = gBattleBufferA[gActiveBattler][3]; for (i = 0; i < 3; i++) gUnknown_02038470[i] = gBattleBufferA[gActiveBattler][4 + i]; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); @@ -2892,7 +2895,7 @@ void PlayerHandleFaintingCry(void) void PlayerHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; PlayerBufferExecCompleted(); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index c015cb4cf..92dcffa5b 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -15,7 +15,7 @@ #include "util.h" #include "ewram.h" -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gDisplayedStringBattle[]; extern u8 gActionSelectionCursor[]; @@ -27,7 +27,7 @@ extern void *gBattlerControllerFuncs[]; extern u8 gBattleBufferA[][0x200]; extern bool8 gDoingBattleAnim; extern u8 gBattlerSpriteIds[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u16 gBattleTypeFlags; extern u32 gBattleControllerExecFlags; extern u16 gSpecialVar_ItemId; @@ -35,7 +35,7 @@ extern MainCallback gPreBattleCallback1; extern u8 gBankInMenu; extern u8 gHealthboxSpriteIds[]; extern u16 gBattlerPartyIndexes[]; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gBattleOutcome; extern u8 GetBattlerSide(u8); @@ -290,7 +290,7 @@ void sub_812B65C(void) void sub_812B694(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) SafariBufferExecCompleted(); } @@ -396,7 +396,7 @@ void SafariHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBattler); GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, 30); @@ -461,7 +461,8 @@ void SafariHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBattler][2]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_812B694; } @@ -479,13 +480,13 @@ void SafariHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - gUnknown_03004210.paletteNum = 0; - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gWindowTemplate_Contest_MoveDescription.paletteNum = 0; + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 35, 16, 36); gBattlerControllerFuncs[gActiveBattler] = bx_battle_menu_t6_2; - Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_MenuOptionsSafari, 400, 18, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); for (i = 0; i < 4; i++) @@ -494,8 +495,8 @@ void SafariHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBattler], 0); BattleStringExpandPlaceholdersToDisplayedString(BattleText_PlayerMenu); - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void SafariHandlecmd19(void) @@ -650,7 +651,7 @@ void SafariHandleFaintingCry(void) void SafariHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; SafariBufferExecCompleted(); } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 50ede7c7d..417706adf 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -49,11 +49,11 @@ extern u8 gDisplayedStringBattle[]; extern u8 gBankInMenu; extern u8 gBattleMonForms[]; extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gUnknown_02024E68[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gAnimMoveTurn; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gUnknown_0300434C[]; extern const u8 BattleText_WallyMenu[]; extern const u8 BattleText_MenuOptions[]; @@ -324,7 +324,7 @@ void sub_813741C(void) void sub_8137454(void) { - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) WallyBufferExecCompleted(); } @@ -1098,7 +1098,7 @@ void WallyHandleTrainerThrow(void) LoadPlayerTrainerBankSprite(2, gActiveBattler); GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), 30); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1113,7 +1113,7 @@ void WallyHandleTrainerSlide(void) LoadPlayerTrainerBankSprite(2, gActiveBattler); GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, 80, 80 + 4 * (8 - gTrainerBackPicCoords[2].coords), 30); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; @@ -1195,7 +1195,7 @@ void sub_81390D0(void) switch (ewram17810[gActiveBattler].unk4) { case 0: - if (ewram17800[gActiveBattler].substituteSprite == 1) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 5); ewram17810[gActiveBattler].unk4 = 1; break; @@ -1212,7 +1212,7 @@ void sub_81390D0(void) if (!gAnimScriptActive) { sub_80326EC(1); - if (ewram17800[gActiveBattler].substituteSprite == 1) + if (gBattleSpriteInfo[gActiveBattler].substituteSprite == 1) move_anim_start_t4(gActiveBattler, gActiveBattler, gActiveBattler, 6); ewram17810[gActiveBattler].unk4 = 3; } @@ -1239,7 +1239,8 @@ void WallyHandlePrintString(void) if (*ptr == 2) DestroyMenuCursor(); BufferStringBattle(*ptr); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 0x90, 2, 15); gBattlerControllerFuncs[gActiveBattler] = sub_8137454; } @@ -1257,23 +1258,23 @@ void WallyHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - gUnknown_03004210.paletteNum = 0; - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + gWindowTemplate_Contest_MoveDescription.paletteNum = 0; + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 10, 2, 35, 16, 36); gBattlerControllerFuncs[gActiveBattler] = sub_81372BC; - Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_MenuOptions, 400, 18, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); for (i = 0; i < 4; i++) nullsub_8(i); sub_802E3E4(0, 0); BattleStringExpandPlaceholdersToDisplayedString(BattleText_WallyMenu); #ifdef ENGLISH - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 440, 2, 35); #else - Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 444, 2, 35); #endif - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void WallyHandlecmd19(void) @@ -1464,7 +1465,7 @@ void WallyHandleFaintingCry(void) void WallyHandleIntroSlide(void) { StartBattleIntroAnim(gBattleBufferA[gActiveBattler][1]); - gUnknown_02024DE8 |= 1; + gIntroSlideFlags |= 1; WallyBufferExecCompleted(); } @@ -1496,13 +1497,13 @@ void sub_81398BC(u8 bank) { u16 species; - ewram17800[bank].transformedSpecies = 0; + gBattleSpriteInfo[bank].transformedSpecies = 0; gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); GetMonSpriteTemplate_803C56C(species, GetBattlerPosition(bank)); gBattlerSpriteIds[bank] = CreateSprite( - &gUnknown_02024E8C, + &gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), sub_8077F68(bank), GetBattlerSubpriority(bank)); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 104a0eecf..1d45002ca 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -29,10 +29,10 @@ extern u8 gBattlersCount; extern u16 gBattlerPartyIndexes[]; extern u8 gBattlerPositions[]; extern u8 gBattlerSpriteIds[]; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gDoingBattleAnim; extern u32 gTransformedPersonalities[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern void (*gBattlerControllerFuncs[])(void); extern u8 gHealthboxSpriteIds[]; extern u8 gUnknown_0300434C[]; @@ -142,7 +142,7 @@ void unref_sub_8031364(struct Sprite *sprite, bool8 stupid) void sub_80313A0(struct Sprite *sprite) { - if (!(gUnknown_02024DE8 & 1)) + if (!(gIntroSlideFlags & 1)) { sprite->pos2.x += sprite->data[0]; if (sprite->pos2.x == 0) @@ -194,9 +194,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e) gBattleMonForms[a] = e & 0x7F; return TRUE; } - if (ewram17800[a].substituteSprite && sub_803163C(d) == 0) + if (gBattleSpriteInfo[a].substituteSprite && sub_803163C(d) == 0) return TRUE; - if (ewram17800[a].substituteSprite && d == 2 && gSprites[gBattlerSpriteIds[a]].invisible) + if (gBattleSpriteInfo[a].substituteSprite && d == 2 && gSprites[gBattlerSpriteIds[a]].invisible) { refresh_graphics_maybe(a, 1, gBattlerSpriteIds[a]); sub_80324E0(a); @@ -296,14 +296,14 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].transformedSpecies; + species = gBattleSpriteInfo[b].transformedSpecies; r7 = gTransformedPersonalities[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); @@ -312,12 +312,12 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[var], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[var], species, r7); paletteOffset = 0x100 + b * 16; - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) lzPaletteData = GetMonSpritePal(pkmn); else lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); @@ -330,7 +330,7 @@ void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b) LZDecompressWram(lzPaletteData, ewram16400); LoadPalette(ewram16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[b].transformedSpecies != 0) + if (gBattleSpriteInfo[b].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -348,14 +348,14 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) const u8 *lzPaletteData; personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) { species = GetMonData(pkmn, MON_DATA_SPECIES); r7 = personalityValue; } else { - species = ewram17800[b].transformedSpecies; + species = gBattleSpriteInfo[b].transformedSpecies; r7 = gTransformedPersonalities[b]; } otId = GetMonData(pkmn, MON_DATA_OT_ID); @@ -364,12 +364,12 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[var], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[var], species, r7); paletteOffset = 0x100 + b * 16; - if (ewram17800[b].transformedSpecies == 0) + if (gBattleSpriteInfo[b].transformedSpecies == 0) lzPaletteData = GetMonSpritePal(pkmn); else lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); @@ -382,7 +382,7 @@ void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b) LZDecompressWram(lzPaletteData, ewram16400); LoadPalette(ewram16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); } - if (ewram17800[b].transformedSpecies != 0) + if (gBattleSpriteInfo[b].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -408,9 +408,9 @@ void sub_8031A6C(u16 a, u8 b) gTrainerFrontPicCoords[a].coords, gTrainerFrontPicCoords[a].y_offset, eVoidSharedArr, - gUnknown_081FAF4C[status], + gMonSpriteGfx_Sprite_ptr[status], 0); - spriteSheet.data = gUnknown_081FAF4C[status]; + spriteSheet.data = gMonSpriteGfx_Sprite_ptr[status]; spriteSheet.size = gTrainerFrontPicTable[a].size; spriteSheet.tag = gTrainerFrontPicTable[a].tag; LoadCompressedObjectPic(&spriteSheet); @@ -427,7 +427,7 @@ void LoadPlayerTrainerBankSprite(u16 a, u8 b) gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, eVoidSharedArr, - gUnknown_081FAF4C[status], + gMonSpriteGfx_Sprite_ptr[status], 0); LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); } @@ -611,7 +611,7 @@ void sub_8031EE8(void) void sub_8031F0C(void) { sub_8031EE8(); - memset(ewram17800, 0, 0x10); + memset(gBattleSpriteInfo, 0, 0x10); } void sub_8031F24(void) @@ -619,12 +619,12 @@ void sub_8031F24(void) s32 i; for (i = 0; i < gBattlersCount; i++) - ewram17800[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible; + gBattleSpriteInfo[i].invisible = gSprites[gBattlerSpriteIds[i]].invisible; } void sub_8031F88(u8 a) { - ewram17800[a].invisible = gSprites[gBattlerSpriteIds[a]].invisible; + gBattleSpriteInfo[a].invisible = gSprites[gBattlerSpriteIds[a]].invisible; } void sub_8031FC4(u8 a, u8 b, bool8 c) @@ -642,7 +642,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) paletteOffset = 0x100 + a * 16; LoadPalette(ewram16400 + ewram17840.unk0 * 32, paletteOffset, 32); gBattleMonForms[a] = ewram17840.unk0; - if (ewram17800[a].transformedSpecies != 0) + if (gBattleSpriteInfo[a].transformedSpecies != 0) { BlendPalette(paletteOffset, 16, 6, RGB(31, 31, 31)); CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); @@ -654,17 +654,17 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) if (IsContest()) { r10 = 0; - species = shared19348.unk2; - personalityValue = shared19348.unk8; - otId = shared19348.unkC; + species = gContestResources__moveAnim.targetSpecies; + personalityValue = gContestResources__moveAnim.personality; + otId = gContestResources__moveAnim.otId; HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[0], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[0], species, - shared19348.unk10); + gContestResources__moveAnim.unk10); } else { @@ -681,8 +681,8 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[r10], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[r10], species, gTransformedPersonalities[a]); } @@ -694,13 +694,13 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - eVoidSharedArr2, - gUnknown_081FAF4C[r10], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[r10], species, gTransformedPersonalities[a]); } } - DmaCopy32Defvars(3, gUnknown_081FAF4C[r10], (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[a]].oam.tileNum * 32), 0x800); + DmaCopy32Defvars(3, gMonSpriteGfx_Sprite_ptr[r10], (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[a]].oam.tileNum * 32), 0x800); paletteOffset = 0x100 + a * 16; lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); LZDecompressWram(lzPaletteData, gSharedMem); @@ -716,7 +716,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); if (!IsContest()) { - ewram17800[a].transformedSpecies = species; + gBattleSpriteInfo[a].transformedSpecies = species; gBattleMonForms[a] = gBattleMonForms[b]; } gSprites[gBattlerSpriteIds[a]].pos1.y = sub_8077F68(a); @@ -739,15 +739,15 @@ void BattleLoadSubstituteSprite(u8 a, u8 b) else r4 = GetBattlerPosition(a); if (IsContest()) - LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); + LZDecompressVram(gSubstituteDollTilemap, gMonSpriteGfx_Sprite_ptr[r4]); else if (GetBattlerSide(a) != 0) - LZDecompressVram(gSubstituteDollGfx, gUnknown_081FAF4C[r4]); + LZDecompressVram(gSubstituteDollGfx, gMonSpriteGfx_Sprite_ptr[r4]); else - LZDecompressVram(gSubstituteDollTilemap, gUnknown_081FAF4C[r4]); + LZDecompressVram(gSubstituteDollTilemap, gMonSpriteGfx_Sprite_ptr[r4]); // There is probably a way to do this without all the temp variables, but I couldn't figure it out. foo = a * 16; gSubstituteDollPal_ = gSubstituteDollPal; - src = gUnknown_081FAF4C[r4]; + src = gMonSpriteGfx_Sprite_ptr[r4]; for (i = 0; i < 3; i++) DmaCopy32(3, src, src + i * 0x800 + 0x800, 0x800); LoadCompressedPalette(gSubstituteDollPal_, 0x100 + foo, 32); @@ -777,12 +777,12 @@ void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId) void sub_80324BC(u8 a, u16 b) { if (b == 0xA4) - ewram17800[a].substituteSprite = 1; + gBattleSpriteInfo[a].substituteSprite = 1; } void sub_80324E0(u8 a) { - ewram17800[a].substituteSprite = 0; + gBattleSpriteInfo[a].substituteSprite = 0; } void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b) @@ -792,22 +792,22 @@ void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b) if (GetHPBarLevel(hp, maxHP) == 1) { - if (!ewram17800[b].unk0_1) + if (!gBattleSpriteInfo[b].lowHpSong) { - if (!ewram17800[b ^ 2].unk0_1) + if (!gBattleSpriteInfo[b ^ 2].lowHpSong) PlaySE(SE_LOW_HEALTH); - ewram17800[b].unk0_1 = 1; + gBattleSpriteInfo[b].lowHpSong = 1; } } else { - ewram17800[b].unk0_1 = 0; + gBattleSpriteInfo[b].lowHpSong = 0; if (!IsDoubleBattle()) { m4aSongNumStop(SE_LOW_HEALTH); return; } - if (IsDoubleBattle() && !ewram17800[b ^ 2].unk0_1) + if (IsDoubleBattle() && !gBattleSpriteInfo[b ^ 2].lowHpSong) { m4aSongNumStop(SE_LOW_HEALTH); return; @@ -819,9 +819,9 @@ void BattleStopLowHpSound(void) { u8 r4 = GetBattlerAtPosition(0); - ewram17800[r4].unk0_1 = 0; + gBattleSpriteInfo[r4].lowHpSong = 0; if (IsDoubleBattle()) - ewram17800[r4 ^ 2].unk0_1 = 0; + gBattleSpriteInfo[r4 ^ 2].lowHpSong = 0; m4aSongNumStop(SE_LOW_HEALTH); } @@ -903,9 +903,9 @@ void sub_80328A4(struct Sprite *sprite) } if (gAnimScriptActive || r7->invisible) invisible = TRUE; - else if (ewram17800[r4].transformedSpecies != 0 && gEnemyMonElevation[ewram17800[r4].transformedSpecies] == 0) + else if (gBattleSpriteInfo[r4].transformedSpecies != 0 && gEnemyMonElevation[gBattleSpriteInfo[r4].transformedSpecies] == 0) invisible = TRUE; - if (ewram17800[r4].substituteSprite) + if (gBattleSpriteInfo[r4].substituteSprite) invisible = TRUE; sprite->pos1.x = r7->pos1.x; sprite->pos2.x = r7->pos2.x; @@ -921,8 +921,8 @@ void sub_8032984(u8 a, u16 b) { if (GetBattlerSide(a) != 0) { - if (ewram17800[a].transformedSpecies != 0) - b = ewram17800[a].transformedSpecies; + if (gBattleSpriteInfo[a].transformedSpecies != 0) + b = gBattleSpriteInfo[a].transformedSpecies; if (gEnemyMonElevation[b] != 0) gSprites[ewram17810[a].unk7].callback = sub_80328A4; else @@ -960,7 +960,7 @@ void sub_8032A38(void) void sub_8032AA8(u8 a, u8 b) { - ewram17800[a].transformedSpecies = 0; + gBattleSpriteInfo[a].transformedSpecies = 0; gBattleMonForms[a] = 0; if (b == 0) sub_80324E0(a); diff --git a/src/battle_interface.c b/src/battle_interface.c index c36556f11..be9554bf2 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1048,7 +1048,7 @@ _0804420C: .4byte 0x04000008\n\ // TODO: make this a local variable memcpy(str, gUnknown_0820A89C, sizeof(str)); r4 = gSprites[a].data[6]; - if ((ewram17800[r4].unk0_4) == 0) + if ((gBattleSpriteInfo[r4].hpNumbersNoBars) == 0) return; ptr = str + 6; if (c == 0) @@ -1427,8 +1427,8 @@ void sub_804454C(void) { u8 r6; - ewram17800[i].unk0_4 ^= 1; - r6 = ewram17800[i].unk0_4; + gBattleSpriteInfo[i].hpNumbersNoBars ^= 1; + r6 = gBattleSpriteInfo[i].hpNumbersNoBars; if (GetBattlerSide(i) == 0) { @@ -2702,7 +2702,7 @@ static void sub_8045458(u8 a, u8 b) for (i = 0; i < 3; i++) CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8 + i) * 32, 32); - if (!ewram17800[r7].unk0_4) + if (!gBattleSpriteInfo[r7].hpNumbersNoBars) CpuCopy32(sub_8043CDC(1), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 64); sub_8045458(a, 1); @@ -2717,7 +2717,7 @@ static void sub_8045458(u8 a, u8 b) CpuCopy32(r6, OBJ_VRAM0 + (gSprites[a].oam.tileNum + r8) * 32, 96); if (IsDoubleBattle() == TRUE || GetBattlerSide(r7) == TRUE) { - if (!ewram17800[r7].unk0_4) + if (!gBattleSpriteInfo[r7].hpNumbersNoBars) { CpuCopy32(sub_8043CDC(0), OBJ_VRAM0 + gSprites[r10].oam.tileNum * 32, 32); CpuCopy32(sub_8043CDC(0x41), OBJ_VRAM0 + (gSprites[r10].oam.tileNum + 1) * 32, 32); @@ -2933,7 +2933,7 @@ s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) r5 = ABS(r8 / r5); r6 = sub_8045F58(ewram17850[a].unk4, ewram17850[a].unk8, r8, &ewram17850[a].unk10, 8, r5); } - if (c == 1 || (c == 0 && (!ewram17800[a].unk0_4))) + if (c == 1 || (c == 0 && (!gBattleSpriteInfo[a].hpNumbersNoBars))) sub_8045D58(a, c); if (r6 == -1) ewram17850[a].unk10 = 0; diff --git a/src/battle_main.c b/src/battle_main.c index e41b2a114..5b259b1d1 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -66,7 +66,7 @@ struct UnknownStruct8 extern void sub_802BBD4(); -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern const u8 Str_821F7B8[]; extern u8 gUnknown_02023A14_50; extern const u16 gBattleTextboxPalette[]; @@ -76,7 +76,7 @@ extern const u8 gUnknown_Debug_821F7F3[]; extern const u8 BattleText_YesNo[]; extern u8 gStatStageRatios[][2]; extern u8 gActionsByTurnOrder[4]; -extern struct UnknownPokemonStruct2 gMultiPartnerParty[]; +extern struct MultiBattlePokemonTx gMultiPartnerParty[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBattler; extern u32 gBattleControllerExecFlags; @@ -91,15 +91,15 @@ extern u8 gPotentialItemEffectBattler; extern u8 gAbsentBattlerFlags; extern u8 gMultiHitCounter; extern u8 gActionForBanks[]; -extern u16 gUnknown_02024C2C[]; +extern u16 gLastPrintedMoves[]; extern u16 gLastMoves[]; extern u16 gLastLandedMoves[]; extern u16 gLastHitByType[]; -extern u16 gUnknown_02024C4C[]; +extern u16 gLastResultingMoves[]; extern u16 gLockedMoves[]; extern u16 gChosenMovesByBanks[]; extern u32 gHitMarker; -extern u8 gUnknown_02024C70[]; +extern u8 sUnusedBattlersArray[]; extern u16 gSideStatuses[]; extern u32 gStatuses3[]; //extern u8 gDisableStructs[][0x1C]; @@ -109,7 +109,7 @@ extern u16 gRandomTurnNumber; extern u8 gBattleCommunication[]; extern u8 gUnknown_02024D1F[]; // I don't actually know what type this is. extern u8 gBattleOutcome; -extern u16 gUnknown_02024DE8; +extern u16 gIntroSlideFlags; extern u8 gActionSelectionCursor[]; extern u8 gMoveSelectionCursor[]; extern u8 gUnknown_02038470[]; @@ -204,7 +204,7 @@ s8 gBattleTerrain; void (*gBattleMainFunc)(void); u32 gUnknown_03004284; -struct Window gUnknown_03004210; +struct Window gWindowTemplate_Contest_MoveDescription; struct Window gUnknown_030041D0; struct Window gUnknown_03004250; @@ -250,7 +250,7 @@ void CB2_InitBattleInternal(void) gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10; } - //ScanlineEffect_SetParams(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + //ScanlineEffect_SetParams(gUnknown_081F9674.totalPoints, gUnknown_081F9674.round1Points, gUnknown_081F9674.random); ScanlineEffect_SetParams(gUnknown_081F9674); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); @@ -270,7 +270,7 @@ void CB2_InitBattleInternal(void) gBattleTerrain = BattleSetup_GetTerrain(); #endif - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); @@ -283,7 +283,7 @@ void CB2_InitBattleInternal(void) SetVBlankCallback(sub_800FCFC); SetUpBattleVarsAndBirchPoochyena(); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - SetMainCallback2(sub_800F298); + SetMainCallback2(CB2_HandleStartMultiBattle); else SetMainCallback2(CB2_HandleStartBattle); if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) @@ -301,7 +301,7 @@ void CB2_InitBattleInternal(void) gBattleCommunication[0] = 0; } -void sub_800E9EC(void) +void BufferPartyVsScreenHealth_AtStart(void) { u16 r6 = 0; u16 species; @@ -330,21 +330,21 @@ void sub_800E9EC(void) if (species != SPECIES_EGG && hp == 0) r6 |= 3 << i * 2; } - gBattleStruct->unk2 = r6; - gBattleStruct->unk3 = r6 >> 8; + gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsLo = r6; + gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsHi = r6 >> 8; } static void SetPlayerBerryDataInBattleStruct(void) { s32 i; - struct UnknownStruct8 *_ewram4 = &ewram4; + struct BattleEnigmaBerry * battleBerry = &gBattleStruct->multiBuffer.linkPartnerHeader.battleEnigmaBerry; for (i = 0; i < 7; i++) - _ewram4->unk0[i] = gSaveBlock1.enigmaBerry.berry.name[i]; + battleBerry->name[i] = gSaveBlock1.enigmaBerry.berry.name[i]; for (i = 0; i < 18; i++) - _ewram4->unk8[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; - _ewram4->unk7 = gSaveBlock1.enigmaBerry.holdEffect; - _ewram4->unk1A = gSaveBlock1.enigmaBerry.holdEffectParam; + battleBerry->itemEffect[i] = gSaveBlock1.enigmaBerry.itemEffect[i]; + battleBerry->holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + battleBerry->holdEffectParam = gSaveBlock1.enigmaBerry.holdEffectParam; } void SetAllPlayersBerryData(void) @@ -419,7 +419,7 @@ void CB2_HandleStartBattle(void) BuildOamBuffer(); playerId = GetMultiplayerId(); - ewram160CB = playerId; + gBattleStruct->multiplayerId = playerId; enemyId = playerId ^ 1; switch (gBattleCommunication[0]) @@ -429,9 +429,9 @@ void CB2_HandleStartBattle(void) { if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { - gBattleStruct->unk0 = 1; - gBattleStruct->unk1 = 1; - sub_800E9EC(); + gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureLo = 1; + gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureHi = 1; + BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); #if DEBUG if (gUnknown_02023A14_50 & 8) @@ -443,7 +443,7 @@ void CB2_HandleStartBattle(void) } } #endif - SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkPartnerHeader, sizeof(gBattleStruct->multiBuffer.linkPartnerHeader)); gBattleCommunication[0] = 1; } } @@ -494,11 +494,11 @@ void CB2_HandleStartBattle(void) } } SetAllPlayersBerryData(); - taskId = CreateTask(sub_800DE30, 0); + taskId = CreateTask(InitLinkBattleVsScreen, 0); gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = gBattleStruct->unk2 | (gBattleStruct->unk3 << 8); + gTasks[taskId].data[3] = gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsLo | (gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsHi << 8); gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; gBattleCommunication[0]++; } @@ -576,7 +576,7 @@ void CB2_HandleStartBattle(void) } } -void sub_800F02C(void) +void PrepareOwnMultiPartnerBuffer(void) { s32 i; @@ -598,7 +598,7 @@ void sub_800F02C(void) if (gMultiPartnerParty[i].language != 1) PadNameString(nickname, 0); } - memcpy(gSharedMem, gMultiPartnerParty, 0x60); + memcpy(gBattleStruct->multiBuffer.multiBattleMons, gMultiPartnerParty, 3 * sizeof(struct MultiBattlePokemonTx)); } void sub_800F104(void) @@ -609,10 +609,10 @@ void sub_800F104(void) s32 i; playerId = GetMultiplayerId(); - ewram160CB = playerId; + gBattleStruct->multiplayerId = playerId; // Seriously, Game Freak? - pSavedCallback = ewram160C4_Callback; - pSavedBattleTypeFlags = ewram160C2_Flags; + pSavedCallback = &gBattleStruct->unk160C4; + pSavedBattleTypeFlags = &gBattleStruct->unk160C2; RunTasks(); AnimateSprites(); BuildOamBuffer(); @@ -634,8 +634,8 @@ void sub_800F104(void) #endif if (IsLinkTaskFinished()) { - sub_800F02C(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); + PrepareOwnMultiPartnerBuffer(); + SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, 3 * sizeof(struct MultiBattlePokemonTx)); gBattleCommunication[0]++; } } @@ -652,7 +652,7 @@ void sub_800F104(void) { if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerId].id & 1)) || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[playerId].id & 1))) - memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], 0x60); + memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], 3 * sizeof(struct MultiBattlePokemonTx)); } } gBattleCommunication[0]++; @@ -666,7 +666,7 @@ void sub_800F104(void) if (!gPaletteFade.active) { gBattleCommunication[0] = 3; - sub_800832C(); + SetCloseLinkCallback(); } break; case 3: @@ -680,13 +680,13 @@ void sub_800F104(void) } } -void sub_800F298(void) +void CB2_HandleStartMultiBattle(void) { u8 playerId; s32 id; playerId = GetMultiplayerId(); - ewram160CB = playerId; + gBattleStruct->multiplayerId = playerId; RunTasks(); AnimateSprites(); BuildOamBuffer(); @@ -707,11 +707,11 @@ void sub_800F298(void) #endif if (IsLinkTaskFinished()) { - gBattleStruct->unk0 = 1; - gBattleStruct->unk1 = 1; - sub_800E9EC(); + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureLo) = 1; + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureHi) = 1; + BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkPartnerHeader, sizeof(gBattleStruct->multiBuffer.linkPartnerHeader)); gBattleCommunication[0]++; } } @@ -722,6 +722,7 @@ void sub_800F298(void) u8 taskId; ResetBlockReceivedFlags(); + // LinkBattleComputeBattleTypeFlags id = 0; if (gBlockRecvBuffer[0][0] == 0x100) { @@ -767,9 +768,9 @@ void sub_800F298(void) } SetAllPlayersBerryData(); memcpy(ewram1D000, gPlayerParty, sizeof(struct Pokemon) * 3); - taskId = CreateTask(sub_800DE30, 0); - gTasks[taskId].data[1] = 0x10E; - gTasks[taskId].data[2] = 0x5A; + taskId = CreateTask(InitLinkBattleVsScreen, 0); + gTasks[taskId].data[1] = 270; + gTasks[taskId].data[2] = 90; gTasks[taskId].data[5] = 0; gTasks[taskId].data[3] = 0; gTasks[taskId].data[4] = 0; @@ -986,7 +987,7 @@ void BattleMainCB2(void) } #endif - Text_UpdateWindowInBattle(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gWindowTemplate_Contest_MoveDescription); UpdatePaletteFade(); RunTasks(); } @@ -1195,7 +1196,7 @@ void sub_800FE40(u8 taskId) { struct Pokemon *sp4 = NULL; struct Pokemon *sp8 = NULL; - u8 r2 = ewram160CB; + u8 r2 = gBattleStruct->multiplayerId; u32 r7; s32 i; @@ -1308,7 +1309,7 @@ void c2_8011A1C(void) gBattle_BG3_X = 0; gBattle_BG3_Y = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); @@ -1321,7 +1322,7 @@ void c2_8011A1C(void) FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; SetVBlankCallback(sub_800FCFC); - taskId = CreateTask(sub_800DE30, 0); + taskId = CreateTask(InitLinkBattleVsScreen, 0); gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 1; @@ -2083,9 +2084,9 @@ void debug_sub_801174C(void) { gUnknown_02023A14_50 |= 0x10; if (gUnknown_Debug_2023A76[0][2] > 5) - gSharedMem[0x160A3] = gUnknown_Debug_2023A76[0][2] - 2; + gBattleStruct->unk160A3 = gUnknown_Debug_2023A76[0][2] - 2; else - gSharedMem[0x160A3] = gUnknown_Debug_2023A76[0][2]; + gBattleStruct->unk160A3 = gUnknown_Debug_2023A76[0][2]; sub_80408BC(); } else if (gUnknown_Debug_2023A76[0][0x22] == 5) @@ -2616,17 +2617,17 @@ void debug_sub_8012688(void) FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; gCurrentMove = 1; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); DecompressPicFromTable_2( &gMonFrontPicTable[gCurrentMove], gMonFrontPicCoords[gCurrentMove].coords, gMonFrontPicCoords[gCurrentMove].y_offset, (void *)EWRAM, - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[1], gCurrentMove); LoadCompressedPalette(gMonPaletteTable[gCurrentMove].data, 272, 32); GetMonSpriteTemplate_803C56C(gCurrentMove, 1); - spriteId = CreateSprite(&gUnknown_02024E8C, 176, 40 + gMonFrontPicCoords[gCurrentMove].y_offset, 40); + spriteId = CreateSprite(&gCreatingSpriteTemplate, 176, 40 + gMonFrontPicCoords[gCurrentMove].y_offset, 40); gSprites[spriteId].callback = nullsub_37; gSprites[spriteId].oam.paletteNum = 1; REG_DISPCNT = 0x1F40; @@ -2643,7 +2644,7 @@ void debug_sub_8012878(void) { AnimateSprites(); BuildOamBuffer(); - Text_UpdateWindowInBattle(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gWindowTemplate_Contest_MoveDescription); UpdatePaletteFade(); RunTasks(); if (gMain.heldKeys == (SELECT_BUTTON | R_BUTTON)) @@ -2653,25 +2654,25 @@ void debug_sub_8012878(void) void debug_sub_80128B4(void) { debug_sub_8010A7C(0, 9); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); ConvertIntToDecimalStringN(gBattleTextBuff1, gCurrentMove, 2, 3); gBattleTextBuff1[3] = CHAR_SPACE; gBattleTextBuff1[4] = EOS; StringAppend(gBattleTextBuff1, gSpeciesNames[gCurrentMove]); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } void debug_sub_8012938(u8 taskId) { debug_sub_8010A7C(0, 7); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); StringCopy(gBattleTextBuff1, Str_821F7B8); ConvertIntToDecimalStringN(gBattleTextBuff1 + 4, gUnknown_Debug_2023B62[gCurrentMove - 1], 2, 3); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gSprites[gTasks[taskId].data[1]].pos2.y = -gUnknown_Debug_2023B62[gCurrentMove - 1]; } @@ -2682,7 +2683,7 @@ void debug_sub_80129F8(u8 taskId) gMonFrontPicCoords[gCurrentMove].coords, gMonFrontPicCoords[gCurrentMove].y_offset, (void *)EWRAM, - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[1], gCurrentMove); LoadCompressedPalette(gMonPaletteTable[gCurrentMove].data, 272, 32); gSprites[gTasks[taskId].data[1]].pos1.y = gMonFrontPicCoords[gCurrentMove].y_offset + 40; @@ -2731,8 +2732,8 @@ void debug_sub_8012B70(u8 taskId, u8 b) { sub_802BBD4(24, 28, 29, 33, 0); gTasks[taskId].data[0] = 2; - Text_InitWindow(&gUnknown_03004210, Str_821F7DA, 656, 26, 29); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, Str_821F7DA, 656, 26, 29); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gTasks[taskId].data[3] = 0; debug_sub_8012B2C(0); } @@ -2741,25 +2742,25 @@ void debug_sub_8012B70(u8 taskId, u8 b) void debug_sub_8012C08(u8 taskId, u8 b) { debug_sub_8010A7C(0, 9); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); debug_sub_8010A7C(0, 7); - Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); sub_802BBD4(24, 28, 29, 33, 0); if (b != 0) { gTasks[taskId].data[0] = 4; - Text_InitWindow(&gUnknown_03004210, gUnknown_Debug_821F7F3, 144, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, gUnknown_Debug_821F7F3, 144, 2, 35); } else { gTasks[taskId].data[0] = 3; - Text_InitWindow(&gUnknown_03004210, Str_821F7EA, 144, 2, 35); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, Str_821F7EA, 144, 2, 35); } - Text_PrintWindow8002F44(&gUnknown_03004210); - Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 656, 26, 29); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_YesNo, 656, 26, 29); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gTasks[taskId].data[3] = 1; debug_sub_8012B2C(1); } @@ -2771,8 +2772,8 @@ void debug_sub_8012D10(u8 taskId) case 0: debug_sub_80128B4(); debug_sub_8012938(taskId); - Text_InitWindow(&gUnknown_03004210, Str_821F7BD, 400, 19, 35); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, Str_821F7BD, 400, 19, 35); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); gTasks[taskId].data[0]++; sub_802E3E4(gTasks[taskId].data[2], 0); break; @@ -3064,7 +3065,7 @@ void oac_poke_opponent(struct Sprite *sprite) void sub_8010278(struct Sprite *sprite) { - if ((gUnknown_02024DE8 & 1) == 0) + if ((gIntroSlideFlags & 1) == 0) { sprite->pos2.x += 2; if (sprite->pos2.x == 0) @@ -3121,8 +3122,8 @@ void sub_8010384(struct Sprite *sprite) u16 species; u8 yOffset; - if (ewram17800[r6].transformedSpecies != 0) - species = ewram17800[r6].transformedSpecies; + if (gBattleSpriteInfo[r6].transformedSpecies != 0) + species = gBattleSpriteInfo[r6].transformedSpecies; else species = sprite->data[2]; @@ -3178,7 +3179,7 @@ void sub_8010494(struct Sprite *sprite) else { // this should use a MEMSET_ALT, but *(dst++) wont match with it. - dst = (u8 *)gUnknown_081FAF4C[GetBattlerPosition(sprite->data[0])] + (gBattleMonForms[sprite->data[0]] << 11) + (sprite->data[3] << 8); + dst = (u8 *)gMonSpriteGfx_Sprite_ptr[GetBattlerPosition(sprite->data[0])] + (gBattleMonForms[sprite->data[0]] << 11) + (sprite->data[3] << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; StartSpriteAnim(sprite, gBattleMonForms[sprite->data[0]]); @@ -3217,7 +3218,7 @@ void sub_80105A0(struct Sprite *sprite) void oac_poke_ally_(struct Sprite *sprite) { - if ((gUnknown_02024DE8 & 1) == 0) + if ((gIntroSlideFlags & 1) == 0) { sprite->pos2.x -= 2; if (sprite->pos2.x == 0) @@ -3239,7 +3240,7 @@ void nullsub_86(struct Sprite *sprite) void sub_80105EC(struct Sprite *sprite) { - if ((gUnknown_02024DE8 & 1) == 0) + if ((gIntroSlideFlags & 1) == 0) { sprite->pos2.x += sprite->data[1]; sprite->pos2.y += sprite->data[2]; @@ -3329,7 +3330,7 @@ void nullsub_41(void) void sub_8010800(void) { - sub_8010874(); + BattleStartClearSetData(); gBattleCommunication[1] = 0; gBattleMainFunc = bc_8012FAC; } @@ -3339,39 +3340,39 @@ void debug_sub_80138CC(void) { if (GetBattlerSide(gActiveBattler) == 0) { - switch (gSharedMem[0x160FD]) + switch (gBattleStruct->unk160FD) { case 0: if (gBattlerControllerFuncs[gActiveBattler] == sub_802C098) - gSharedMem[0x160FD]++; + gBattleStruct->unk160FD++; break; case 1: gMain.heldKeys = A_BUTTON; gMain.newKeys = A_BUTTON; - gSharedMem[0x160FD]++; - gSharedMem[0x160FE] = 0x80; + gBattleStruct->unk160FD++; + gBattleStruct->unk160FE = 0x80; break; case 2: - gSharedMem[0x160FE]--; - if (gSharedMem[0x160FE] == 0) + gBattleStruct->unk160FE--; + if (gBattleStruct->unk160FE == 0) { gMain.heldKeys = A_BUTTON; gMain.newKeys = A_BUTTON; - gSharedMem[0x160FD]++; - gSharedMem[0x160FE] = 0x80; + gBattleStruct->unk160FD++; + gBattleStruct->unk160FE = 0x80; } break; case 3: - gSharedMem[0x160FE]--; - if (gSharedMem[0x160FE] == 0) + gBattleStruct->unk160FE--; + if (gBattleStruct->unk160FE == 0) { gMain.heldKeys = A_BUTTON; gMain.newKeys = A_BUTTON; - gSharedMem[0x160FD]++; + gBattleStruct->unk160FD++; } break; case 4: - gSharedMem[0x160FD] = 0; + gBattleStruct->unk160FD = 0; break; } } @@ -3398,7 +3399,7 @@ void BattleMainCB1(void) } } -void sub_8010874(void) +void BattleStartClearSetData(void) { s32 i; u32 j; @@ -3412,70 +3413,78 @@ void sub_8010874(void) gStatuses3[i] = 0; MEMSET_ALT(&gDisableStructs[i], 0, 0x1C, j, r4); - gDisableStructs[i].isFirstTurn= 2; - gUnknown_02024C70[i] = 0; + gDisableStructs[i].isFirstTurn = 2; + sUnusedBattlersArray[i] = 0; gLastMoves[i] = 0; gLastLandedMoves[i] = 0; gLastHitByType[i] = 0; - gUnknown_02024C4C[i] = 0; + gLastResultingMoves[i] = 0; gLastHitBy[i] = 0xFF; gLockedMoves[i] = 0; - gUnknown_02024C2C[i] = 0; - eFlashFireArr.arr[i] = 0; + gLastPrintedMoves[i] = 0; + eBattleFlagsArr.arr[i] = 0; } for (i = 0; i < 2; i++) { gSideStatuses[i] = 0; - MEMSET_ALT(&gSideTimers[i], 0, 12, j, r4); + MEMSET_ALT(&gSideTimers[i], 0, sizeof(struct SideTimer), j, r4); } gBattlerAttacker = 0; gBattlerTarget = 0; gBattleWeather = 0; - MEMSET_ALT(&gWishFutureKnock, 0, 0x2C, i, r4); + MEMSET_ALT(&gWishFutureKnock, 0, sizeof(struct WishFutureKnock), i, r4); gHitMarker = 0; if ((gBattleTypeFlags & BATTLE_TYPE_LINK) == 0 && gSaveBlock2.optionsBattleSceneOff == TRUE) gHitMarker = HITMARKER_NO_ANIMATIONS; - ewram16084 = gSaveBlock2.optionsBattleStyle; + + gBattleStruct->battleStyle = gSaveBlock2.optionsBattleStyle; + gMultiHitCounter = 0; gBattleOutcome = 0; gBattleControllerExecFlags = 0; gPaydayMoney = 0; - ewram17130 = 0; - ewram17160 = 0; + (*(u8 *)&B_BATTLESCRIPTS_STACK->size) = 0; + (*(u8 *)&B_FUNCTION_STACK->size) = 0; + for (i = 0; i < 8; i++) gBattleCommunication[i] = 0; + gPauseCounterBattle = 0; gBattleMoveDamage = 0; - gUnknown_02024DE8 = 0; - ewram16002 = 0; - ewram160A1 = 0; + gIntroSlideFlags = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; gLeveledUpInBattle = 0; gAbsentBattlerFlags = 0; - ewram16078 = 0; - ewram16086 = 0; - ewram16087 = 0; - ewram16089 = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; - ewram16088 = 3; - ewram1601B = 0; - ewram16056 = 1; + gBattleStruct->runTries = 0; + gBattleStruct->safariGoNearCounter = 0; + gBattleStruct->safariPkblThrowCounter = 0; + gBattleStruct->safariCatchFactor = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275; + gBattleStruct->safariFleeRate = 3; + gBattleStruct->wildVictorySong = 0; + gBattleStruct->moneyMultiplier = 1; for (i = 0; i < 8; i++) { - ewram160ACarr(i) = 0; - ewram160CCarr(i) = 0; - ewram160E8arr(i) = 0; - ewram160F0arr(i) = 0; - ewram16100arr(i) = 0; - ewram16108arr(i) = 0; + // TODO: Find matching access here + eLastTakenMove_flat(i) = 0;/*((u8 *)(gBattleStruct->lastTakenMove))[i] = 0;*/ + ewram160CCarr(i) = 0;/*((u8 *)(gBattleStruct->usedHeldItems))[i] = 0;*/ + ewram160E8arr(i) = 0;/*((u8 *)(gBattleStruct->choicedMove))[i] = 0;*/ + ewram160F0arr(i) = 0;/*((u8 *)(gBattleStruct->changedItems))[i] = 0;*/ + ewram16100arr(i) = 0;/*((u8 *)(gBattleStruct->lastTakenMoveFrom) + 8 * 0)[i] = 0;*/ + ewram16108arr(i) = 0;/*((u8 *)(gBattleStruct->lastTakenMoveFrom) + 8 * 1)[i] = 0;*/ } - ewram160C8 = 6; - ewram160C9 = 6; - ewram16113 = 0; + gBattleStruct->AI_monToSwitchIntoId[0] = PARTY_SIZE; + gBattleStruct->AI_monToSwitchIntoId[1] = PARTY_SIZE; + + gBattleStruct->givenExpMons = 0; + + // Reset gBattleResults for (i = 0; i < 11; i++) gBattleResults.usedBalls[i] = 0; gBattleResults.battleTurnCounter = 0; @@ -3499,8 +3508,8 @@ void sub_8010874(void) gBattleResults.caughtNick[i] = 0; } #if DEBUG - gSharedMem[0x1609E] = 0; - gSharedMem[0x1609F] = 0; + gBattleStruct->unk1609E = 0; + gBattleStruct->unk1609F = 0; #endif } @@ -3572,12 +3581,12 @@ void SwitchInClearSetData(void) gLastMoves[gActiveBattler] = 0; gLastLandedMoves[gActiveBattler] = 0; gLastHitByType[gActiveBattler] = 0; - gUnknown_02024C4C[gActiveBattler] = 0; - gUnknown_02024C2C[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = 0; + gLastPrintedMoves[gActiveBattler] = 0; gLastHitBy[gActiveBattler] = 0xFF; - ewram160ACarr2(0, gActiveBattler) = 0; - ewram160ACarr2(1, gActiveBattler) = 0; + eLastTakenMove_2d(0, gActiveBattler) = 0; + eLastTakenMove_2d(1, gActiveBattler) = 0; ewram16100arr2(0, gActiveBattler) = 0; ewram16100arr2(1, gActiveBattler) = 0; ewram16100arr2(2, gActiveBattler) = 0; @@ -3585,7 +3594,7 @@ void SwitchInClearSetData(void) ewram160E8arr2(0, gActiveBattler) = 0; ewram160E8arr2(1, gActiveBattler) = 0; - eFlashFireArr.arr[gActiveBattler] = 0; + eBattleFlagsArr.arr[gActiveBattler] = 0; gCurrentMove = 0; } @@ -3636,20 +3645,20 @@ void UndoEffectsAfterFainting(void) gLastMoves[gActiveBattler] = 0; gLastLandedMoves[gActiveBattler] = 0; gLastHitByType[gActiveBattler] = 0; - gUnknown_02024C4C[gActiveBattler] = 0; - gUnknown_02024C2C[gActiveBattler] = 0; + gLastResultingMoves[gActiveBattler] = 0; + gLastPrintedMoves[gActiveBattler] = 0; gLastHitBy[gActiveBattler] = 0xFF; ewram160E8arr2(0, gActiveBattler) = 0; ewram160E8arr2(1, gActiveBattler) = 0; - ewram160ACarr2(0, gActiveBattler) = 0; - ewram160ACarr2(1, gActiveBattler) = 0; + eLastTakenMove_2d(0, gActiveBattler) = 0; + eLastTakenMove_2d(1, gActiveBattler) = 0; ewram16100arr2(0, gActiveBattler) = 0; ewram16100arr2(1, gActiveBattler) = 0; ewram16100arr2(2, gActiveBattler) = 0; ewram16100arr2(3, gActiveBattler) = 0; - eFlashFireArr.arr[gActiveBattler] = 0; + eBattleFlagsArr.arr[gActiveBattler] = 0; gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; @@ -3707,14 +3716,15 @@ void sub_8011384(void) } else { - u8 r0; + u16 *hpOnSwitchout; MEMSET_ALT(&gBattleMons[gActiveBattler], gBattleBufferB[gActiveBattler][4 + i], 0x58, i, ptr); gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].altAbility); - r0 = GetBattlerSide(gActiveBattler); - ewram160BC[r0] = gBattleMons[gActiveBattler].hp; + + hpOnSwitchout = &gBattleStruct->HP_OnSwitchout[GetBattlerSide(gActiveBattler)]; + *hpOnSwitchout = gBattleMons[gActiveBattler].hp; for (i = 0; i < 8; i++) gBattleMons[gActiveBattler].statStages[i] = 6; gBattleMons[gActiveBattler].status2 = 0; @@ -3933,9 +3943,9 @@ void sub_80119B4(void) MarkBattlerForControllerExec(gActiveBattler); } } - ewram16058 = 0; - ewram160F9 = 0; - ewram160E6 = 0; + gBattleStruct->unk16058 = 0; + gBattleStruct->unk160F9 = 0; + gBattleStruct->unk160E6 = 0; gBattleMainFunc = BattleBeginFirstTurn; } } @@ -3952,9 +3962,9 @@ void unref_sub_8011A68(void) MarkBattlerForControllerExec(gActiveBattler); } } - ewram16058 = 0; - ewram160F9 = 0; - ewram160E6 = 0; + gBattleStruct->unk16058 = 0; + gBattleStruct->unk160F9 = 0; + gBattleStruct->unk160E6 = 0; gBattleMainFunc = BattleBeginFirstTurn; } } @@ -3967,7 +3977,7 @@ void BattleBeginFirstTurn(void) if (gBattleControllerExecFlags == 0) { - if (ewram16058 == 0) + if (gBattleStruct->unk16058 == 0) { for (i = 0; i < gBattlersCount; i++) gBattlerByTurnOrder[i] = i; @@ -3980,16 +3990,16 @@ void BattleBeginFirstTurn(void) } } } - if (ewram160E6 == 0 && AbilityBattleEffects(0, 0, 0, 0xFF, 0) != 0) + if (gBattleStruct->unk160E6 == 0 && AbilityBattleEffects(0, 0, 0, 0xFF, 0) != 0) { - ewram160E6 = 1; + gBattleStruct->unk160E6 = 1; return; } - while (ewram16058 < gBattlersCount) + while (gBattleStruct->unk16058 < gBattlersCount) { - if (AbilityBattleEffects(0, gBattlerByTurnOrder[ewram16058], 0, 0, 0) != 0) + if (AbilityBattleEffects(0, gBattlerByTurnOrder[gBattleStruct->unk16058], 0, 0, 0) != 0) r9++; - ewram16058++; + gBattleStruct->unk16058++; if (r9 != 0) return; } @@ -3997,11 +4007,11 @@ void BattleBeginFirstTurn(void) return; if (AbilityBattleEffects(11, 0, 0, 0, 0) != 0) return; - while (ewram160F9 < gBattlersCount) + while (gBattleStruct->unk160F9 < gBattlersCount) { - if (ItemBattleEffects(0, gBattlerByTurnOrder[ewram160F9], 0) != 0) + if (ItemBattleEffects(0, gBattlerByTurnOrder[gBattleStruct->unk160F9], 0) != 0) r9++; - ewram160F9++; + gBattleStruct->unk160F9++; if (r9 != 0) return; } @@ -4016,20 +4026,20 @@ void BattleBeginFirstTurn(void) } TurnValuesCleanUp(0); SpecialStatusesClear(); - ewram160A6 = gAbsentBattlerFlags; + gBattleStruct->unk160A6 = gAbsentBattlerFlags; gBattleMainFunc = sub_8012324; ResetSentPokesToOpponentValue(); for (i = 0; i < 8; i++) gBattleCommunication[i] = 0; for (i = 0; i < gBattlersCount; i++) gBattleMons[i].status2 &= ~8; - ewram16000 = 0; - ewram16001 = 0; - ewram16110 = 0; - ewram16111 = 0; - ewram1600C = 0; - ewram16059 = 0; - ewram1600E = 0; + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBattlerId = 0; + gBattleStruct->wishPerishSongState = 0; + gBattleStruct->wishPerishSongBattlerId = 0; + gBattleStruct->cmd49StateTracker = 0; + gBattleStruct->sub80173A4_Tracker = 0; + gBattleStruct->turnCountersTracker = 0; gMoveResultFlags = 0; gRandomTurnNumber = Random(); } @@ -4050,11 +4060,11 @@ void bc_8013B1C(void) if ((gBattleMons[i].status1 & 7) && (gBattleMons[i].status2 & 0x1000)) CancelMultiTurnMoves(i); } - ewram16000 = 0; - ewram16001 = 0; - ewram16110 = 0; - ewram16111 = 0; - ewram1600E = 0; + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBattlerId = 0; + gBattleStruct->wishPerishSongState = 0; + gBattleStruct->wishPerishSongBattlerId = 0; + gBattleStruct->turnCountersTracker = 0; gMoveResultFlags = 0; } } @@ -4073,7 +4083,7 @@ void BattleTurnPassed(void) } if (HandleFaintedMonActions() != 0) return; - ewram16059 = 0; + gBattleStruct->sub80173A4_Tracker = 0; if (HandleWishPerishSongOnTurnEnd() != 0) return; TurnValuesCleanUp(0); @@ -4081,9 +4091,9 @@ void BattleTurnPassed(void) gHitMarker &= ~0x80000; gHitMarker &= ~0x400000; gHitMarker &= ~0x100000; - ewram16002 = 0; - ewram160A1 = 0; - ewram1600C = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; + gBattleStruct->cmd49StateTracker = 0; gBattleMoveDamage = 0; gMoveResultFlags = 0; for (i = 0; i < 5; i++) @@ -4103,7 +4113,7 @@ void BattleTurnPassed(void) } for (i = 0; i < 4; i++) ewram16068arr(i) = 6; - ewram160A6 = gAbsentBattlerFlags; + gBattleStruct->unk160A6 = gAbsentBattlerFlags; gBattleMainFunc = sub_8012324; gRandomTurnNumber = Random(); } @@ -4131,7 +4141,7 @@ u8 CanRunFromBattle(void) if (r6 != GetBattlerSide(i) && gBattleMons[i].ability == ABILITY_SHADOW_TAG) { - ewram16003 = i; + gBattleStruct->scriptingActive = i; gLastUsedAbility = gBattleMons[i].ability; gBattleCommunication[5] = 2; return 2; @@ -4142,7 +4152,7 @@ u8 CanRunFromBattle(void) && gBattleMons[gActiveBattler].type2 != 2 && gBattleMons[i].ability == ABILITY_ARENA_TRAP) { - ewram16003 = i; + gBattleStruct->scriptingActive = i; gLastUsedAbility = gBattleMons[i].ability; gBattleCommunication[5] = 2; return 2; @@ -4151,7 +4161,7 @@ u8 CanRunFromBattle(void) i = AbilityBattleEffects(15, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0); if (i != 0 && (gBattleMons[gActiveBattler].type1 == 8 || gBattleMons[gActiveBattler].type2 == 8)) { - ewram16003 = i - 1; + gBattleStruct->scriptingActive = i - 1; gLastUsedAbility = gBattleMons[i - 1].ability; gBattleCommunication[5] = 2; return 2; @@ -4232,11 +4242,11 @@ void sub_8012324(void) ewram16068arr(gActiveBattler) = 6; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && (position & BIT_FLANK) != B_FLANK_LEFT - && !(ewram160A6 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]) + && !(gBattleStruct->unk160A6 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]) && gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] != STATE_WAIT_ACTION_CONFIRMED) break; //_080123F8 - if (ewram160A6 & gBitTable[gActiveBattler]) + if (gBattleStruct->unk160A6 & gBitTable[gActiveBattler]) { gActionForBanks[gActiveBattler] = 13; if (!(gBattleTypeFlags & 0x40)) @@ -4509,7 +4519,7 @@ void sub_8012324(void) { if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) || (position & BIT_FLANK) != B_FLANK_LEFT - || (ewram160A6 & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) + || (gBattleStruct->unk160A6 & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) { BtlController_EmitLinkStandbyMsg(0, 0); } @@ -4895,8 +4905,8 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) gBattleMainFunc = RunTurnActionsFunctions; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; - eMultihitMoveEffect = 0; - ewram17130 = 0; + gBattleStruct->multihitMoveEffect = 0; + B_BATTLESCRIPTS_STACK->size = 0; } static void RunTurnActionsFunctions(void) @@ -5170,7 +5180,7 @@ void HandleAction_UseMove(void) gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (ewram160A6 & gBitTable[gBattlerAttacker]) + if (gBattleStruct->unk160A6 & gBitTable[gBattlerAttacker]) { gCurrentActionFuncId = B_ACTION_FINISHED; return; @@ -5178,7 +5188,7 @@ void HandleAction_UseMove(void) gCritMultiplier = 1; eDmgMultiplier = 1; - ewram160E7 = 0; + gBattleStruct->atkCancellerTracker = 0; gMoveResultFlags = 0; gMultiHitCounter = 0; gBattleCommunication[6] = 0; @@ -5359,7 +5369,7 @@ void HandleAction_Switch(void) PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, ewram16064arr(gBattlerAttacker)) - ewram16003 = gBattlerAttacker; + gBattleStruct->scriptingActive = gBattlerAttacker; gBattlescriptCurrInstr = BattleScript_ActionSwitch; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; @@ -5390,7 +5400,7 @@ void HandleAction_UseItem(void) else { - switch (ewram160D8((ewram16003 = gBattlerAttacker))) + switch (ewram160D8((gBattleStruct->scriptingActive = gBattlerAttacker))) { case AI_ITEM_FULL_RESTORE: case AI_ITEM_HEAL_HP: @@ -5428,8 +5438,8 @@ void HandleAction_UseItem(void) gBattleTextBuff1[2]++; } - ewram160A4 = gBattleTextBuff1[2] + 14; - ewram160A5 = 0; + gBattleStruct->animArg1 = gBattleTextBuff1[2] + 14; + gBattleStruct->animArg2 = 0; } break; case AI_ITEM_GUARD_SPECS: @@ -5476,7 +5486,7 @@ bool8 TryRunFromBattle(u8 bank) { if (gBattleMons[bank].speed < gBattleMons[bank ^ BIT_SIDE].speed) { - speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (ewram16078 * 30); + speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (gBattleStruct->runTries * 30); if (speedVar > (Random() & 0xFF)) effect++; } @@ -5486,7 +5496,7 @@ bool8 TryRunFromBattle(u8 bank) } } - ewram16078++; + gBattleStruct->runTries++; } if (effect) @@ -5579,14 +5589,14 @@ void HandleAction_ThrowPokeblock(void) gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1; gLastUsedItem = gBattleBufferB[gBattlerAttacker][2]; - if (ewram16087 < 3) - ewram16087++; - if (ewram16088 > 1) + if (gBattleStruct->safariPkblThrowCounter < 3) + gBattleStruct->safariPkblThrowCounter++; + if (gBattleStruct->safariFleeRate > 1) { - if (ewram16088 < gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]) - ewram16088 = 1; + if (gBattleStruct->safariFleeRate < gUnknown_081FA70C[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + gBattleStruct->safariFleeRate = 1; else - ewram16088 -= gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]; + gBattleStruct->safariFleeRate -= gUnknown_081FA70C[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; } gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; @@ -5599,17 +5609,17 @@ void HandleAction_GoNear(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - ewram16089 += gUnknown_081FA71B[ewram16086]; - if (ewram16089 > 20) - ewram16089 = 20; + gBattleStruct->safariCatchFactor += gUnknown_081FA71B[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariCatchFactor > 20) + gBattleStruct->safariCatchFactor = 20; - ewram16088 += gUnknown_081FA71F[ewram16086]; - if (ewram16088 > 20) - ewram16088 = 20; + gBattleStruct->safariFleeRate += gUnknown_081FA71F[gBattleStruct->safariGoNearCounter]; + if (gBattleStruct->safariFleeRate > 20) + gBattleStruct->safariFleeRate = 20; - if (ewram16086 < 3) + if (gBattleStruct->safariGoNearCounter < 3) { - ewram16086++; + gBattleStruct->safariGoNearCounter++; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } else @@ -5645,7 +5655,7 @@ void HandleAction_Action11(void) { if (!HandleFaintedMonActions()) { - ewram16059 = 0; + gBattleStruct->sub80173A4_Tracker = 0; gCurrentActionFuncId = B_ACTION_FINISHED; } } @@ -5673,15 +5683,15 @@ void HandleAction_ActionFinished(void) | HITMARKER_CHARGING | HITMARKER_x4000000); gBattleMoveDamage = 0; - ewram16002 = 0; - ewram160A1 = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; gLastLandedMoves[gBattlerAttacker] = 0; gLastHitByType[gBattlerAttacker] = 0; eDynamicMoveType = 0; gDynamicBasePower = 0; - ewram1600C = 0; + gBattleStruct->cmd49StateTracker = 0; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; - eMultihitMoveEffect = 0; - ewram17130 = 0; + gBattleStruct->multihitMoveEffect = 0; + B_BATTLESCRIPTS_STACK->size = 0; } diff --git a/src/battle_message.c b/src/battle_message.c index ce1e63edd..b8872163b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -658,7 +658,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) { if (gLastUsedItem == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id == gPotentialItemEffectBattler) + if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler) { StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name); #ifdef ENGLISH @@ -724,7 +724,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst) if (gTrainerBattleOpponent == SECRET_BASE_OPPONENT) { memset(text, 0xFF, 8); - memcpy(text, ewram17002, 7); + memcpy(text, eSecretBaseRecord->playerName, 7); toCpy = text; } else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) @@ -949,7 +949,7 @@ void ExpandBattleTextBuffPlaceholders(u8* src, u8* dst) { if (hword == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[gBattleStruct->linkPlayerIndex].id == gPotentialItemEffectBattler) + if (gLinkPlayers[gBattleStruct->multiplayerId].id == gPotentialItemEffectBattler) { StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name); #ifdef ENGLISH diff --git a/src/battle_records.c b/src/battle_records.c index 307b977d5..e040418a7 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -29,7 +29,7 @@ const struct DebugStruct1 gUnknown_Debug_4245CC[] = { 7, DTR("ナンバー7", "NUMBER7") }, }; -const struct {u8 unk0; u8 unk1;} gUnknown_Debug_8424620[] = +const struct {u8 totalPoints; u8 nextTurnSpriteId;} gUnknown_Debug_8424620[] = { { 1, 1 }, { 2, 1 }, @@ -231,13 +231,13 @@ void debug_sub_81257E0(void) InitLinkBattleRecords(); for (i = 0; i < 3; i++) { - u32 id = gUnknown_Debug_8424620[i].unk0 - 1; + u32 id = gUnknown_Debug_8424620[i].totalPoints - 1; UpdateLinkBattleRecords_( gSaveBlock1.linkBattleRecords, gUnknown_Debug_4245CC[id].var1, gUnknown_Debug_4245CC[id].var0, - gUnknown_Debug_8424620[i].unk1, + gUnknown_Debug_8424620[i].nextTurnSpriteId, gLinkPlayers[gLinkPlayerObjectEvents[id].linkPlayerId].language); } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0cdcfe8f9..d1143d764 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -91,7 +91,7 @@ extern u8 gBattleTextBuff2[]; extern u8 gBattleTextBuff3[]; extern u8 gLeveledUpInBattle; extern void (*gBattleMainFunc)(void); -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern const u8 BattleText_YesNo[]; extern u8 gPlayerPartyCount; extern u16 gMoveToLearn; //move to learn @@ -101,8 +101,8 @@ extern u8* gBattleScriptsForMoveEffects[]; extern u16 gChosenMove; //last used move in battle extern u8 gBankInMenu; extern u8 gActionForBanks[4]; -extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch -extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one +extern u16 gLastPrintedMoves[4]; //last used moves 2, used by sketch +extern u16 gLastResultingMoves[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; @@ -4991,7 +4991,7 @@ static void atk15_seteffectwithchance(void) } gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - gBattleStruct->unk16112 = 0; + gBattleStruct->multihitMoveEffect = 0; } static void atk16_seteffectprimary(void) @@ -5015,7 +5015,7 @@ static void atk18_clearstatusfromeffect(void) gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattlescriptCurrInstr += 2; - gBattleStruct->unk16112 = 0; + gBattleStruct->multihitMoveEffect = 0; } static void atk19_tryfaintmon(void) @@ -5057,8 +5057,8 @@ static void atk19_tryfaintmon(void) if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]) && gBattleMons[gActiveBattler].hp == 0) { - ewram160ACarr2(0, battlerId) = 0; - ewram160ACarr2(1, battlerId) = 0; + eLastTakenMove_2d(0, battlerId) = 0; + eLastTakenMove_2d(1, battlerId) = 0; ewram16100arr2(0, battlerId) = 0; ewram16100arr2(1, battlerId) = 0; ewram16100arr2(2, battlerId) = 0; @@ -5334,7 +5334,7 @@ static void atk23_getexp(void) else { gBattleStruct->getexpStateTracker++; - gBattleStruct->unk16113 |= gBitTable[gBattlerPartyIndexes[gBank1]]; + gBattleStruct->givenExpMons |= gBitTable[gBattlerPartyIndexes[gBank1]]; } break; case 1: // calculate experience points to redistribute @@ -6673,7 +6673,7 @@ void atk49_moveend(void) } if (gBattleMoves[gChosenMove].effect != 0x7F || (gMoveResultFlags & 0x29)) - gUnknown_02024C2C[gBattlerAttacker] = gChosenMove; + gLastPrintedMoves[gBattlerAttacker] = gChosenMove; if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gSharedMem[0x160A6] & gBitTable[gBattlerAttacker]) @@ -6682,12 +6682,12 @@ void atk49_moveend(void) if (gHitMarker & HITMARKER_OBEYS) { gLastMoves[gBattlerAttacker] = gChosenMove; - gUnknown_02024C4C[gBattlerAttacker] = gCurrentMove; + gLastResultingMoves[gBattlerAttacker] = gCurrentMove; } else { gLastMoves[gBattlerAttacker] = 0xFFFF; - gUnknown_02024C4C[gBattlerAttacker] = 0xFFFF; + gLastResultingMoves[gBattlerAttacker] = 0xFFFF; } if (!(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))) @@ -8294,8 +8294,8 @@ void atk59_handlelearnnewmove(void) void sub_8023A80(void) { sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); - Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 0x100, 0x19, 0x9); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gWindowTemplate_Contest_MoveDescription, BattleText_YesNo, 0x100, 0x19, 0x9); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); MenuCursor_Create814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); } @@ -9304,7 +9304,7 @@ _08024AB8:\n\ bgt _08024AC4\n\ b _0802495A\n\ _08024AC4:\n\ - ldr r4, _08024AE4 @ =gUnknown_03004210\n\ + ldr r4, _08024AE4 @ =gWindowTemplate_Contest_MoveDescription\n\ ldr r1, _08024AE8 @ =gStringVar4\n\ adds r2, 0xFF\n\ movs r0, 0x1\n\ @@ -9319,7 +9319,7 @@ _08024AC4:\n\ adds r1, r2\n\ b _08024BEA\n\ .align 2, 0\n\ -_08024AE4: .4byte gUnknown_03004210\n\ +_08024AE4: .4byte gWindowTemplate_Contest_MoveDescription\n\ _08024AE8: .4byte gStringVar4\n\ _08024AEC: .4byte gSharedMem\n\ _08024AF0: .4byte 0x0001609c\n\ @@ -9424,7 +9424,7 @@ _08024BC0:\n\ mov r2, r8\n\ cmp r2, 0x5\n\ ble _08024B1C\n\ - ldr r4, _08024BF4 @ =gUnknown_03004210\n\ + ldr r4, _08024BF4 @ =gWindowTemplate_Contest_MoveDescription\n\ ldr r1, _08024BF8 @ =gStringVar4\n\ movs r2, 0x80\n\ lsls r2, 1\n\ @@ -9444,7 +9444,7 @@ _08024BEA:\n\ strb r0, [r1]\n\ b _08024C38\n\ .align 2, 0\n\ -_08024BF4: .4byte gUnknown_03004210\n\ +_08024BF4: .4byte gWindowTemplate_Contest_MoveDescription\n\ _08024BF8: .4byte gStringVar4\n\ _08024BFC: .4byte gSharedMem\n\ _08024C00: .4byte 0x0001609c\n\ @@ -9574,7 +9574,7 @@ static void atk74_hpthresholds2(void) { gActiveBattler = GetBattlerForBattleScript(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBattler ^ 1; - hp_switchout = ewram160BCarr(GetBattlerSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBattlerSide(opposing_bank)]; + hp_switchout = eHpOnSwitchout(GetBattlerSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBattlerSide(opposing_bank)]; result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; if (gBattleMons[opposing_bank].hp >= hp_switchout) @@ -9666,7 +9666,7 @@ static void atk76_various(void) static void atk77_setprotectlike(void) //protect and endure { bool8 not_last_turn = 1; - u16 last_move = gUnknown_02024C4C[gBattlerAttacker]; + u16 last_move = gLastResultingMoves[gBattlerAttacker]; if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) gDisableStructs[gBattlerAttacker].protectUses = 0; @@ -9788,7 +9788,7 @@ static void atk7B_tryhealhalfhealth(void) static void atk7C_trymirrormove(void) { - u16 r7 = ewram160ACarr2(0, gBattlerAttacker) | (ewram160ACarr2(1, gBattlerAttacker) << 8); + u16 r7 = eLastTakenMove_2d(0, gBattlerAttacker) | (eLastTakenMove_2d(1, gBattlerAttacker) << 8); u16 r6 = ewram16100arr2(0, gBattlerAttacker) | (ewram16100arr2(1, gBattlerAttacker) << 8); u16 r5 = ewram16100arr2(2, gBattlerAttacker) | (ewram16100arr2(3, gBattlerAttacker) << 8); @@ -11867,14 +11867,14 @@ struct move_pp static void atkA8_copymovepermanently(void) { gChosenMove = 0xFFFF; - if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) && gUnknown_02024C2C[gBattlerTarget] != MOVE_STRUGGLE && gUnknown_02024C2C[gBattlerTarget] != 0 && gUnknown_02024C2C[gBattlerTarget] != 0xFFFF && gUnknown_02024C2C[gBattlerTarget] != MOVE_SKETCH) + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) && gLastPrintedMoves[gBattlerTarget] != MOVE_STRUGGLE && gLastPrintedMoves[gBattlerTarget] != 0 && gLastPrintedMoves[gBattlerTarget] != 0xFFFF && gLastPrintedMoves[gBattlerTarget] != MOVE_SKETCH) { int i; for (i = 0; i < 4; i++) { if (gBattleMons[gBattlerAttacker].moves[i] == MOVE_SKETCH) continue; - if (gBattleMons[gBattlerAttacker].moves[i] == gUnknown_02024C2C[gBattlerTarget]) + if (gBattleMons[gBattlerAttacker].moves[i] == gLastPrintedMoves[gBattlerTarget]) break; } if (i != 4) //sketch fail @@ -11882,8 +11882,8 @@ static void atkA8_copymovepermanently(void) else //sketch worked { struct move_pp moves_data; - gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gUnknown_02024C2C[gBattlerTarget]; - gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gUnknown_02024C2C[gBattlerTarget]].pp; + gBattleMons[gBattlerAttacker].moves[gCurrMovePos] = gLastPrintedMoves[gBattlerTarget]; + gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = gBattleMoves[gLastPrintedMoves[gBattlerTarget]].pp; gActiveBattler = gBattlerAttacker; for (i = 0; i < 4; i++) { @@ -11895,8 +11895,8 @@ static void atkA8_copymovepermanently(void) MarkBattlerForControllerExec(gActiveBattler); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gUnknown_02024C2C[gBattlerTarget]; - gBattleTextBuff1[3] = gUnknown_02024C2C[gBattlerTarget] >> 8; + gBattleTextBuff1[2] = gLastPrintedMoves[gBattlerTarget]; + gBattleTextBuff1[3] = gLastPrintedMoves[gBattlerTarget] >> 8; gBattleTextBuff1[4] = 0xFF; gBattlescriptCurrInstr += 5; } @@ -13376,7 +13376,7 @@ void atkEF_handleballthrow(void) u32 odds; u8 catch_rate; if (gLastUsedItem == ITEM_SAFARI_BALL) - catch_rate = gBattleStruct->unk16089 * 1275 / 100; //correct the name to safariFleeRate + catch_rate = gBattleStruct->safariCatchFactor * 1275 / 100; //correct the name to safariFleeRate else catch_rate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate; if (gLastUsedItem > 5) diff --git a/src/battle_setup.c b/src/battle_setup.c index d8319e620..bc569dff7 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -2,6 +2,14 @@ #include "battle_setup.h" #include "battle.h" #include "battle_transition.h" +#include "constants/battle_setup.h" +#include "constants/items.h" +#include "constants/map_types.h" +#include "constants/maps.h" +#include "constants/opponents.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest_util.h" #include "data2.h" #include "event_data.h" #include "field_control_avatar.h" @@ -13,12 +21,11 @@ #include "fldeff_poison.h" #include "main.h" #include "metatile_behavior.h" +#include "overworld.h" #include "palette.h" #include "random.h" -#include "overworld.h" #include "safari_zone.h" #include "script.h" -#include "script_pokemon_80C4.h" #include "secret_base.h" #include "sound.h" #include "starter_choose.h" @@ -27,13 +34,6 @@ #include "task.h" #include "text.h" #include "trainer.h" -#include "constants/battle_setup.h" -#include "constants/map_types.h" -#include "constants/maps.h" -#include "constants/opponents.h" -#include "constants/songs.h" -#include "constants/species.h" -#include "constants/items.h" extern u16 gSpecialVar_Result; diff --git a/src/battle_tower.c b/src/battle_tower.c index 5d3bc207d..6b8af4d86 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,31 +1,31 @@ #include "global.h" +#include "battle_tower.h" #include "battle.h" #include "battle_setup.h" -#include "battle_tower.h" #include "battle_transition.h" +#include "constants/easy_chat.h" +#include "constants/event_objects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/vars.h" +#include "contest_util.h" #include "data2.h" #include "easy_chat.h" -#include "constants/easy_chat.h" #include "event_data.h" +#include "ewram.h" #include "item.h" -#include "constants/items.h" #include "main.h" -#include "constants/event_objects.h" -#include "constants/moves.h" #include "new_game.h" #include "overworld.h" #include "pokedex.h" #include "random.h" #include "save.h" -#include "script_pokemon_80C4.h" -#include "constants/species.h" #include "string_util.h" #include "task.h" #include "text.h" #include "trainer.h" #include "tv.h" -#include "constants/vars.h" -#include "ewram.h" #if ENGLISH #include "data/battle_tower/trainers.h" diff --git a/src/battle_util.c b/src/battle_util.c index b1260cd4e..4f8a0b036 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1303,7 +1303,7 @@ bool8 HandleFaintedMonActions(void) do { gBank1 = gBattlerTarget = gBattleStruct->unk1605A; - if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->unk16113 & gBitTable[gBattlerPartyIndexes[gBattleStruct->unk1605A]]) && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->unk1605A])) + if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->unk1605A]]) && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->unk1605A])) { BattleScriptExecute(BattleScript_GiveExp); gBattleStruct->sub80173A4_Tracker = 2; @@ -2003,14 +2003,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS1_FREEZE)) { - if (!(eFlashFireArr.arr[bank] & 1)) + if (!(eBattleFlagsArr.arr[bank] & 1)) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gProtectStructs[gBattlerAttacker].notFirstStrike) gBattlescriptCurrInstr = BattleScript_FlashFireBoost; else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - eFlashFireArr.arr[bank] |= 1; + eBattleFlagsArr.arr[bank] |= 1; effect = 2; } else diff --git a/src/berry_blender.c b/src/berry_blender.c index 7955c1458..b8897f964 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2479,7 +2479,7 @@ static void sub_8050E30(void) case 11: if (++gBerryBlenderData->framesToWait > 30) { - sub_800832C(); + SetCloseLinkCallback(); gBerryBlenderData->field_6F++; } break; diff --git a/src/cable_club.c b/src/cable_club.c index aeae50f50..961ab739f 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -1,7 +1,9 @@ #include "global.h" +#include "cable_club.h" #include "battle.h" #include "battle_records.h" -#include "cable_club.h" +#include "constants/songs.h" +#include "contest_util.h" #include "event_data.h" #include "field_message_box.h" #include "field_specials.h" @@ -11,12 +13,10 @@ #include "m4a.h" #include "main.h" #include "menu.h" +#include "overworld.h" #include "palette.h" #include "record_mixing.h" -#include "overworld.h" #include "script.h" -#include "script_pokemon_80C4.h" -#include "constants/songs.h" #include "sound.h" #include "start_menu.h" #include "string_util.h" @@ -431,7 +431,7 @@ static void sub_80831F8(u8 taskId) return; if (gSpecialVar_Result == 3) { - sub_800832C(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = sub_80833C4; } @@ -452,7 +452,7 @@ static void sub_8083288(u8 taskId) if (gSpecialVar_Result == 3) { - sub_800832C(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = sub_80833C4; } @@ -511,7 +511,7 @@ static void sub_8083314(u8 taskId) return; } - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80833C4; } @@ -757,7 +757,7 @@ static void sub_808382C(u8 taskId) task->data[0]++; break; case 3: - sub_800832C(); + SetCloseLinkCallback(); task->data[0]++; break; case 4: @@ -890,7 +890,7 @@ static void sub_8083AAC(u8 taskId) gUnknown_020297D8.field0 = 0; gUnknown_020297D8.field1 = 0; m4aMPlayAllStop(); - sub_800832C(); + SetCloseLinkCallback(); task->data[0]++; break; case 3: @@ -1009,7 +1009,7 @@ static void sub_8083CA4(u8 taskId) void unref_sub_8083CC8(u8 taskId) { - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_8083CA4; } diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c index 760887834..c15b94d8f 100644 --- a/src/calculate_base_damage.c +++ b/src/calculate_base_damage.c @@ -330,7 +330,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de } // flash fire triggered - if ((eFlashFireArr.arr[bankAtk] & 1) && type == TYPE_FIRE) + if ((eBattleFlagsArr.arr[bankAtk] & 1) && type == TYPE_FIRE) damage = (15 * damage) / 10; } diff --git a/src/choose_party.c b/src/choose_party.c index f1252f965..5ed637910 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -23,7 +23,7 @@ extern u8 gPlayerPartyCount; extern u8 gLastFieldPokeMenuOpened; extern u8 gUnknown_020384F0; -extern struct UnknownPokemonStruct2 gMultiPartnerParty[3]; +extern struct MultiBattlePokemonTx gMultiPartnerParty[3]; extern u8 gUnknown_0202E8F6; extern const u16 gBattleTowerBannedSpecies[]; diff --git a/src/contest.c b/src/contest.c index 50824c867..150c6dbbd 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1,15 +1,16 @@ #include "global.h" -#include "constants/items.h" +#include "contest.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" #include "constants/event_objects.h" +#include "constants/items.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" -#include "battle.h" -#include "battle_anim.h" -#include "blend_palette.h" -#include "contest.h" +#include "contest_ai.h" #include "contest_effect.h" -#include "contest_link_80C857C.h" +#include "contest_link.h" #include "data2.h" #include "decompress.h" #include "ewram.h" @@ -23,6 +24,7 @@ #include "palette.h" #include "random.h" #include "rom_8077ABC.h" +#include "scanline_effect.h" #include "script.h" #include "sound.h" #include "sprite.h" @@ -30,17 +32,16 @@ #include "task.h" #include "text.h" #include "tv.h" -#include "scanline_effect.h" #include "util.h" -#include "contest_ai.h" + +#include "contest_internal.h" extern u8 gUnknown_020297ED; extern void sub_80C8A38(u8); -extern void sub_80C8AD0(u8); -extern void sub_80C8C80(u8); +extern void Task_LinkContest_CommunicateFinalStandings(u8); +extern void Task_LinkContest_CommunicateAppealsState(u8); -extern struct MusicPlayerInfo gMPlayInfo_SE1; extern u8 gBattleMonForms[]; extern u8 gDisplayedStringBattle[]; extern u16 gBattleTypeFlags; @@ -48,45 +49,20 @@ extern u8 gBattlerAttacker; extern u8 gBattlerTarget; extern u8 gBattlerPositions[]; extern u8 gBattlerSpriteIds[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; u32 gContestRngValue; -extern struct SpriteTemplate gUnknown_02024E8C; -extern const struct ContestPokemon gContestOpponents[60]; -extern const u8 gUnknown_083CA308[][2]; -extern const u8 gUnknown_083CA310[][2]; -extern const u8 gUnknown_083CA318[][2]; -extern const u8 gUnknown_083CA330[][2]; -extern const u8 gUnknown_083CA338[]; -extern const u8 gUnknown_083CA33C[]; extern const u8 gUnknown_083CA340[][4]; -extern const struct SpriteSheet gUnknown_083CA350; -extern const struct SpriteTemplate gSpriteTemplate_83CA3AC; -extern const struct CompressedSpriteSheet gUnknown_083CA3C4[]; -extern const struct SpritePalette gUnknown_083CA3E4; -extern const struct SpriteTemplate gSpriteTemplate_83CA3F4[]; -extern const struct SubspriteTable gSubspriteTables_83CA464[]; -extern const struct CompressedSpriteSheet gUnknown_083CA46C; -extern const struct SpritePalette gUnknown_083CA474; -extern const struct SpriteTemplate gSpriteTemplate_83CA484; -extern const struct SpriteTemplate gSpriteTemplate_83CA4A4; -extern const struct CompressedSpriteSheet gUnknown_083CA4BC; -extern const struct CompressedSpriteSheet gUnknown_083CA4C4; -extern const struct CompressedSpritePalette gUnknown_083CA4CC; -extern const struct SpriteTemplate gUnknown_083CA4D4; -extern const struct CompressedSpriteSheet gUnknown_083CC3AC; -extern const struct CompressedSpritePalette gUnknown_083CC3B4[]; -extern const struct SpriteTemplate gSpriteTemplate_83CC454[]; extern const u8 gText_Contest_WhichMoveWillBePlayed[]; extern const u8 gText_Contest_ButItCantParticipate[]; -extern const u8 gUnknown_083CAFD7[]; -extern const u8 gUnknown_083CB00D[]; +extern const u8 gText_MonAppealedWithMove[]; +extern const u8 gText_MonWasWatchingOthers[]; extern const u8 ContestString_JudgeExpectantly2[]; extern const u8 ContestString_WentOverWell[]; extern const u8 ContestString_WentOverVeryWell[]; extern const u8 ContestString_AppealComboExcellently[]; -extern const u8 gUnknown_083CBF60[]; -extern const u8 gUnknown_083CB02C[]; +extern const u8 ContestString_TooNervous[]; +extern const u8 gText_AllOutOfAppealTime[]; extern const u8 *const gContestStandOutStrings[]; extern const u8 ContestString_DissapointedRepeat[]; extern const u8 ContestString_WentOverGreat[]; @@ -95,192 +71,27 @@ extern const u8 ContestString_GotCrowdGoing[]; extern const u8 ContestString_CantAppealNextTurn[]; extern const u8 ContestString_CrowdWatches[]; extern const u8 ContestString_Ignored2[]; -extern const u8 *const gUnknown_083CC188[]; -extern const u8 gText_Contest_Shyness[]; -extern const u8 gText_Contest_Anxiety[]; -extern const u8 gText_Contest_Laziness[]; -extern const u8 gText_Contest_Hesitancy[]; -extern const u8 gText_Contest_Fear[]; extern const u8 *const gContestCategoryStrings[]; -extern const u8 gUnknown_083CC2EC[]; -extern const u8 *const gUnknown_083CC330[]; +extern const u8 *const sInvalidContestMoveNames[]; extern const u8 gUnknownText_UnknownFormatting2[]; extern const u8 gUnknownText_UnknownFormatting3[]; -extern const u8 gUnknown_083CC59C[]; -extern const u8 gUnknown_083CC5A2[]; -extern const u16 gUnknown_083CC5A4[]; -extern const struct ContestWinner gUnknown_083CC5D0[]; -extern const u8 gUnknownText_MissedTurn[]; -extern const u8 gUnknownText_LinkStandbyAndWinner[]; -extern void (*const gContestEffectFuncs[])(void); -extern const s8 gContestExcitementTable[][5]; - -void sub_80AB350(void); -void sub_80AB5D4(u8); -void sub_80AB604(u8); -void sub_80AB678(u8); -void sub_80AB694(u8); -void sub_80AB6B4(u8); -u8 sub_80AB70C(u8 *); -void sub_80AB960(u8); -void sub_80AB9A0(u8); -void ContestMainCallback2(void); -void ContestVBlankCallback(void); -void sub_80ABB70(u8); -void sub_80ABC3C(u8); -void sub_80ABC70(u8); -void sub_80ABCDC(u8); -void sub_80ABEA0(u8); -void sub_80AC0AC(s8); -void nullsub_17(s8); -void sub_80AC0C8(u8); -void sub_80AC15C(u8); -void sub_80AC188(u8); -void sub_80AC204(u8); -void sub_80AC250(u8); -void sub_80AC284(u8); -void sub_80AC2CC(u8); -void sub_80AD8DC(u8); -void sub_80AD8FC(struct Sprite *); -void sub_80AD92C(struct Sprite *); -void sub_80AD960(u8); -void sub_80ADA1C(u8); -void sub_80ADA4C(u8); -void sub_80ADAD8(u8); -void sub_80ADB04(u8); -void sub_80ADB48(u8); -void sub_80ADB88(u8); -void sub_80ADC10(u8); -void sub_80ADC4C(u8); -void sub_80ADC84(u8); -void sub_80ADCB4(u8); -void sub_80ADD04(u8); -void sub_80ADD74(u8); -void sub_80ADDA4(u8); -void sub_80ADE54(u8); -void sub_80ADEAC(u8); -void sub_80ADEEC(u8); -void sub_80ADF4C(u8); -void sub_80ADF98(u8); -void sub_80ADFD8(u8); -void sub_80AE010(void); -void InsertStringDigit(u8 *, s32); -bool8 sub_80AE074(void); -void sub_80AEB4C(void *); -void sub_80AE5BC(u8); -void sub_80AE5D4(u8, u8); -void sub_80AE6CC(u8); -void sub_80AE6E4(u8, u8); -u8 CreateJudgeSprite(void); -u8 sub_80AE8B4(void); -u8 sub_80AE9FC(u16, u32, u32); -void sub_80AEB30(void); -void sub_80AEBEC(u16); -void sub_80AED58(void); -bool8 sub_80AEE54(u8, u8); -bool8 sub_80AF038(u8); -void sub_80AF120(void); -void sub_80AF138(void); -u16 GetChosenMove(u8); -void sub_80AF1B8(void); -void sub_80AF2A0(u8); -void sub_80AF2FC(void); -void sub_80AF3C0(void); -s16 sub_80AF688(u8); -void DetermineFinalStandings(void); -bool8 sub_80AF828(s32, s32, struct UnknownContestStruct6 *); -void sub_80AF860(void); -void sub_80AF94C(u8); -void sub_80AFA5C(void); -u16 sub_80AFB40(u8); -s8 sub_80AFB74(s16); -u8 sub_80AFBA0(s16, s16, u8); -void sub_80AFC74(u8); -void sub_80AFE30(void); -void sub_80AFF10(void); -bool8 sub_80AFF28(void); -void sub_80AFF60(struct Sprite *); -void sub_80AFFE0(bool8); -void sub_80B0034(void); -void CreateApplauseMeterSprite(void); -void nullsub_18(s8); -void sub_80B0238(struct Sprite *); -void sub_80B0280(struct Sprite *); -void sub_80B02A8(struct Sprite *); -void sub_80B02F4(struct Sprite *); -void sub_80B0324(void); -void sub_80B03A8(u8); -void sub_80B03D8(u8); -void sub_80B0458(u8); -void sub_80B0518(void); -void sub_80B0548(u8); -void sub_80B05A4(u8); -void nullsub_19(int); -void sub_80B05FC(u8); -void sub_80B0748(u8); -void sub_80B09B0(u8); -u8 sub_80B09E4(u8); -void sub_80B0BC4(u8, bool8); -void sub_80B0C5C(struct Sprite *); -void sub_80B0CB0(struct Sprite *); -void sub_80B0CDC(u8, int); -void unref_sub_80B0CF4(void); -void sub_80B0D7C(void); -void sub_80B1118(void); -void sub_80B114C(u8); -void sub_80B146C(u8, u8); -void sub_80B159C(void); -void sub_80B1710(u8); -void sub_80B1928(void); -u8 sub_80B1A2C(void); -void c3_08130B10(u8); -void sub_80B1B14(void); -void sub_80B1B68(u8); -void sub_80B1BDC(void); -void sub_80B1C34(u8); -void sub_80B1CBC(s8); -void sub_80B1CFC(u8); -void sub_80B1DDC(void); -void sub_80B1DFC(u8); -void sub_80B1EA8(s8, s8); -void sub_80B1F4C(u8); -void sub_80B1FD0(bool8); -const u8 *GetTurnOrderNumberGfx(u8); -void sub_80B20C4(void); -void sub_80B2184(void); -void sub_80B2280(void); -void sub_80B237C(u8); -void sub_80B23BC(u8); -void sub_80B2400(u8); -void sub_80B253C(u8); -void sub_80B25A4(u8); -void sub_80B25E4(u8); -void sub_80B26C8(u8); -u16 SanitizeMove(u16); -u16 SanitizeSpecies(u16); -void sub_80B2790(u8); -void sub_80B28CC(int); -void sub_80B28F0(u8); -void sub_80B292C(void); -void sub_80B2968(void); -void SelectContestMoveBankTarget(u16); EWRAM_DATA u8 gUnknown_0203856C = 0; EWRAM_DATA struct ContestPokemon gContestMons[4] = {0}; -EWRAM_DATA s16 gContestMonConditions[4] = {0}; -EWRAM_DATA s16 gUnknown_02038678[4] = {0}; -EWRAM_DATA s16 gUnknown_02038680[4] = {0}; -EWRAM_DATA s16 gUnknown_02038688[4] = {0}; +EWRAM_DATA s16 gContestMonRound1Points[4] = {0}; +EWRAM_DATA s16 gContestMonTotalPoints[4] = {0}; +EWRAM_DATA s16 gContestMonAppealPointTotals[4] = {0}; +EWRAM_DATA s16 gContestMonRound2Points[4] = {0}; EWRAM_DATA u8 gContestFinalStandings[4] = {0}; // What "place" each participant came in. EWRAM_DATA u8 gContestMonPartyIndex = 0; EWRAM_DATA u8 gContestPlayerMonIndex = 0; -EWRAM_DATA u8 gUnknown_02038696[4] = {0}; +EWRAM_DATA u8 gContestantTurnOrder[4] = {0}; EWRAM_DATA u8 gIsLinkContest = 0; -EWRAM_DATA u8 gUnknown_0203869B = 0; +EWRAM_DATA u8 gContestLinkLeaderIndex = 0; EWRAM_DATA u16 gSpecialVar_ContestCategory = 0; EWRAM_DATA u16 gSpecialVar_ContestRank = 0; -void nullsub_89(u8 taskId) +void TaskDummy1(u8 taskId) { } @@ -323,31 +134,32 @@ void ResetContestGpuRegs(void) gBattle_WIN1H = 0; gBattle_WIN1V = 0; } + void LoadContestBgAfterMoveAnim(void) { s32 i; LZDecompressVram(gContestMiscGfx, (void *)VRAM); LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000)); - LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000)); - LoadCompressedPalette(gUnknown_08D17144, 0, 0x200); - sub_80AB350(); + LZDecompressVram(gContestGfx, (void *)(VRAM + 0xD000)); + LoadCompressedPalette(gContestPalette, 0, 0x200); + InitContestResources(); for (i = 0; i < 4; i++) { u32 var = 5 + i; - LoadPalette(shared18000.unk18004[var], 16 * (5 + gUnknown_02038696[i]), 16 * sizeof(u16)); + LoadPalette(eContestTempSave.cachedWindowPalettes[var], 16 * (5 + gContestantTurnOrder[i]), 16 * sizeof(u16)); } } void SetUpContestWindow(void) { Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6FD8); Text_InitWindowWithTemplate(&gMenuWindow, &gWindowTemplate_81E6FF4); } -void sub_80AB350(void) +void InitContestResources(void) { u8 i; @@ -370,23 +182,23 @@ void ClearContestVars(void) memset(&sContestantStatus[i], 0, sizeof(sContestantStatus[i])); for (i = 0; i < 4; i++) { - sContestantStatus[i].unkB_0 = 0; + sContestantStatus[i].ranking = 0; sContestantStatus[i].effectStringId = CONTEST_STRING_NONE; sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; } - memset(&shared192D0, 0, sizeof(shared192D0)); + memset(&eContestAppealResults, 0, sizeof(eContestAppealResults)); memset(eContestAI, 0, sizeof(struct ContestAIInfo)); - memset(&shared19328, 0, sizeof(shared19328)); - memset(shared19338, 0, 4 * sizeof(*shared19338)); + memset(&eContestExcitement, 0, sizeof(eContestExcitement)); + memset(eContestGfxState, 0, 4 * sizeof(*eContestGfxState)); if (!(gIsLinkContest & 1)) - sub_80B0F28(0); + SortContestants(0); for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = 0xFF; - sContest.unk19218[i] = gUnknown_02038696[i]; + sContest.prevTurnOrder[i] = gContestantTurnOrder[i]; } - sub_80B159C(); + ApplyNextTurnOrder(); } void CB2_StartContest(void) @@ -405,83 +217,83 @@ void CB2_StartContest(void) ResetTasks(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 4; - //shared18000.unk18000 = 0; - gSharedMem[0x18000] = 0; + //eContestTempSave.unk18000 = 0; + eEnableContestDebugging = 0; ClearBattleMonForms(); ClearContestVars(); gMain.state++; break; case 1: - sub_80AB350(); + InitContestResources(); gMain.state++; break; case 2: - if (sub_80AB70C(&sContest.unk1925D) == 0) + if (SetupContestGraphics(&sContest.contestSetupState) == 0) break; - sContest.unk1925D = 0; + sContest.contestSetupState = 0; gMain.state++; break; case 3: - sub_80B2184(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; BeginFastPaletteFade(2); gPaletteFade.bufferTransferDisabled = FALSE; SetVBlankCallback(ContestVBlankCallback); - sContest.mainTaskId = CreateTask(sub_80AB5D4, 10); + sContest.mainTaskId = CreateTask(Task_StartContestWaitFade, 10); SetMainCallback2(ContestMainCallback2); break; } } -void sub_80AB5D4(u8 taskId) +void Task_StartContestWaitFade(u8 taskId) { if (!gPaletteFade.active) - gTasks[taskId].func = sub_80AB604; + gTasks[taskId].func = Task_TryStartLinkContest; } -void sub_80AB604(u8 taskId) +void Task_TryStartLinkContest(u8 taskId) { if (gIsLinkContest & 1) { if (!gPaletteFade.active) { gPaletteFade.bufferTransferDisabled = FALSE; - sub_80AF860(); - CreateTask(sub_80AB678, 0); - gTasks[taskId].func = nullsub_89; + ContestPrintLinkStandby(); + CreateTask(Task_CommunicateMonIdxs, 0); + gTasks[taskId].func = TaskDummy1; } } else { - gTasks[taskId].func = sub_80AB960; + gTasks[taskId].func = Task_WaitToRaiseCurtainAtStart; } } -void sub_80AB678(u8 taskId) +void Task_CommunicateMonIdxs(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80AB694); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_EndCommunicateMonIdxs); } -void sub_80AB694(u8 taskId) +void Task_EndCommunicateMonIdxs(u8 taskId) { u16 one = 1; gTasks[taskId].data[0] = one; - gTasks[taskId].func = sub_80AB6B4; + gTasks[taskId].func = Task_ReadyStartLinkContest; } -void sub_80AB6B4(u8 taskId) +void Task_ReadyStartLinkContest(u8 taskId) { if (--gTasks[taskId].data[0] > 0) return; GetMultiplayerId(); // unused return value DestroyTask(taskId); - gTasks[sContest.mainTaskId].func = sub_80AB960; + gTasks[sContest.mainTaskId].func = Task_WaitToRaiseCurtainAtStart; gRngValue = gContestRngValue; } -u8 sub_80AB70C(u8 *a) +u8 SetupContestGraphics(u8 *a) { u16 sp0[16]; u16 sp20[16]; @@ -497,34 +309,34 @@ u8 sub_80AB70C(u8 *a) break; case 2: LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000)); - DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000); + DmaCopyLarge32(3, (void *)(VRAM + 0x2000), eUnzippedContestAudience_Gfx, 0x2000, 0x1000); break; case 3: - LZDecompressVram(gUnknown_08D1725C, (void *)(VRAM + 0xD000)); + LZDecompressVram(gContestGfx, (void *)(VRAM + 0xD000)); break; case 4: - LZDecompressVram(gUnknown_08D17424, (void *)(VRAM + 0xE000)); - DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), shared18000.unk18A04, 0x800); + LZDecompressVram(gContestBgmap, (void *)(VRAM + 0xE000)); + DmaCopy32Defvars(3, (void *)(VRAM + 0xE000), eContestTempSave.savedJunk, 0x800); break; case 5: - LoadCompressedPalette(gUnknown_08D17144, 0, 0x200); + LoadCompressedPalette(gContestPalette, 0, 0x200); CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16)); CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16)); CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16)); CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16)); - DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200); - sub_80AB350(); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedWindowPalettes, 0x200); + InitContestResources(); break; case 6: - sub_80B1118(); - sub_80AFA5C(); - sub_80AEB30(); - sContest.unk19216 = sub_80AE8B4(); - sub_80AFE30(); - sub_80B0034(); + DrawContestantWindows(); + FillContestantWindowBgs(); + SwapMoveDescAndContestTilemaps(); + sContest.judgeSpeechBubbleSpriteId = CreateJudgeSpeechBubbleSprite(); + CreateSliderHeartSprites(); + CreateNextTurnSprites(); CreateApplauseMeterSprite(); - sub_80B0324(); - sub_80B0518(); + CreateJudgeAttentionEyeTask(); + CreateUnusedBlendTask(); gBattlerPositions[0] = 0; gBattlerPositions[1] = 1; gBattlerPositions[2] = 3; @@ -533,7 +345,7 @@ u8 sub_80AB70C(u8 *a) gBattlerAttacker = 2; gBattlerTarget = 3; gBattlerSpriteIds[gBattlerAttacker] = CreateJudgeSprite(); - sub_80B292C(); + CreateInvisibleBattleTargetSprite(); break; default: *a = 0; @@ -544,18 +356,18 @@ u8 sub_80AB70C(u8 *a) return 0; } -void sub_80AB960(u8 taskId) +void Task_WaitToRaiseCurtainAtStart(u8 taskId) { gPaletteFade.bufferTransferDisabled = FALSE; if (!gPaletteFade.active) { gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80AB9A0; + gTasks[taskId].func = Task_RaiseCurtainAtStart; } } -void sub_80AB9A0(u8 taskId) +void Task_RaiseCurtainAtStart(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -572,22 +384,22 @@ void sub_80AB9A0(u8 taskId) gTasks[taskId].data[0]++; break; case 2: - sub_80B2280(); + UpdateContestantBoxOrder(); gTasks[taskId].data[0]++; break; case 3: REG_BG0CNT_BITFIELD.priority = 0; REG_BG2CNT_BITFIELD.priority = 0; - sub_80B1B14(); + SlideApplauseMeterIn(); gTasks[taskId].data[0]++; break; case 4: default: - if (sContest.unk1920A_6) + if (sContest.applauseMeterIsMoving) break; gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80ABB70; + gTasks[taskId].func = Task_DisplayAppealNumberText; break; } } @@ -595,8 +407,8 @@ void sub_80AB9A0(u8 taskId) void ContestMainCallback2(void) { #if DEBUG - if (gUnknown_020297ED == 1 && gMain.newKeys == 4) - unref_sub_80B0CF4(); + if (gUnknown_020297ED == 1 && gMain.newKeys == SELECT_BUTTON) + ContestDebugTogglePointTotal(); #endif AnimateSprites(); RunTasks(); @@ -624,48 +436,48 @@ void ContestVBlankCallback(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void sub_80ABB70(u8 taskId) +void Task_DisplayAppealNumberText(u8 taskId) { gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80B0D7C(); - DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400); + ContestDebugDoPrint(); + DmaCopy32Defvars(3, gPlttBufferUnfaded, eContestTempSave.cachedPlttBufferUnfaded, 0x400); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed); else StringCopy(gDisplayedStringBattle, gText_Contest_ButItCantParticipate); - InsertStringDigit(gDisplayedStringBattle, sContest.turnNumber + 1); - sub_80AF138(); + InsertStringDigit(gDisplayedStringBattle, sContest.appealNumber + 1); + ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].func = sub_80ABC3C; } void sub_80ABC3C(u8 taskId) { - if (Text_UpdateWindowInContest(&gMenuWindow) == 1) - gTasks[taskId].func = sub_80ABC70; + if (Contest_RunTextPrinter(&gMenuWindow) == 1) + gTasks[taskId].func = Task_TryShowMoveSelectScreen; } -void sub_80ABC70(u8 taskId) +void Task_TryShowMoveSelectScreen(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON)) { PlaySE(SE_SELECT); if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex)) { - sub_80AFFE0(TRUE); - gTasks[taskId].func = sub_80ABCDC; + SetBottomSliderHeartsInvisibility(TRUE); + gTasks[taskId].func = Task_ShowMoveSelectScreen; } else { - gTasks[taskId].func = sub_80AC0C8; + gTasks[taskId].func = Task_SelectedMove; } } } // Print the move list -void sub_80ABCDC(u8 taskId) +void Task_ShowMoveSelectScreen(u8 taskId) { u8 i; u8 sp8[32]; @@ -673,7 +485,7 @@ void sub_80ABCDC(u8 taskId) gBattle_BG0_Y = 0xA0; gBattle_BG2_Y = 0xA0; Text_FillWindowRectDefPalette( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, 0, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1], @@ -686,7 +498,8 @@ void sub_80ABCDC(u8 taskId) u8 *r5 = sp8; if (sContestantStatus[gContestPlayerMonIndex].prevMove != MOVE_NONE - && sub_80B214C(gContestPlayerMonIndex) + && + IsContestantAllowedToCombo(gContestPlayerMonIndex) && AreMovesContestCombo(sContestantStatus[gContestPlayerMonIndex].prevMove, move) != 0 && sContestantStatus[gContestPlayerMonIndex].hasJudgesAttention) { @@ -702,25 +515,25 @@ void sub_80ABCDC(u8 taskId) r5 = StringCopy(r5, gMoveNames[move]); Text_InitWindow8002E4C( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, sp8, 776 + i * 20, gUnknown_083CA340[i][0] * 8 + 4, gUnknown_083CA340[i][1] * 8, 1); - Text_PrintWindow8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gWindowTemplate_Contest_MoveDescription); } MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 72); - sub_80AC0AC(sContest.playerMoveChoice); - sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); - gTasks[taskId].func = sub_80ABEA0; + DrawMoveSelectArrow(sContest.playerMoveChoice); + PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); + gTasks[taskId].func = Task_HandleMoveSelectInput; } void debug_sub_80B9EBC(u8); // Handle move selection input -void sub_80ABEA0(u8 taskId) +void Task_HandleMoveSelectInput(u8 taskId) { u8 numMoves = 0; s32 i; @@ -735,7 +548,7 @@ void sub_80ABEA0(u8 taskId) { DestroyMenuCursor(); PlaySE(SE_SELECT); - gTasks[taskId].func = sub_80AC0C8; + gTasks[taskId].func = Task_SelectedMove; } else { @@ -744,9 +557,9 @@ void sub_80ABEA0(u8 taskId) case B_BUTTON: sub_814A904(); PlaySE(SE_SELECT); - sub_80AFFE0(FALSE); + SetBottomSliderHeartsInvisibility(FALSE); Text_FillWindowRectDefPalette( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, 0, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1], @@ -756,38 +569,38 @@ void sub_80ABEA0(u8 taskId) StringCopy(gDisplayedStringBattle, gText_Contest_WhichMoveWillBePlayed); else StringCopy(gDisplayedStringBattle, gText_Contest_ButItCantParticipate); - InsertStringDigit(gDisplayedStringBattle, sContest.turnNumber + 1); - sub_80AF138(); + InsertStringDigit(gDisplayedStringBattle, sContest.appealNumber + 1); + ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle); Text_InitWindowAndPrintText(&gMenuWindow, gStringVar4, 776, 1, 15); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - gTasks[taskId].func = sub_80ABC70; + gTasks[taskId].func = Task_TryShowMoveSelectScreen; break; case DPAD_LEFT: case DPAD_RIGHT: break; case DPAD_UP: - nullsub_17(sContest.playerMoveChoice); + EraseMoveSelectArrow(sContest.playerMoveChoice); if (sContest.playerMoveChoice == 0) sContest.playerMoveChoice = numMoves - 1; else sContest.playerMoveChoice--; - sub_80AC0AC(sContest.playerMoveChoice); - sub_80AED58(); - sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); + DrawMoveSelectArrow(sContest.playerMoveChoice); + Contest_ClearMoveDescriptionBox(); + PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); if (numMoves > 1) PlaySE(SE_SELECT); break; case DPAD_DOWN: - nullsub_17(sContest.playerMoveChoice); + EraseMoveSelectArrow(sContest.playerMoveChoice); if (sContest.playerMoveChoice == numMoves - 1) sContest.playerMoveChoice = 0; else sContest.playerMoveChoice++; - sub_80AC0AC(sContest.playerMoveChoice); - sub_80AED58(); - sub_80AEBEC(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); + DrawMoveSelectArrow(sContest.playerMoveChoice); + Contest_ClearMoveDescriptionBox(); + PrintContestMoveDescription(gContestMons[gContestPlayerMonIndex].moves[sContest.playerMoveChoice]); if (numMoves > 1) PlaySE(SE_SELECT); break; @@ -817,27 +630,27 @@ void debug_sub_80B9EBC(u8 taskId) { case 0: Text_FillWindowRectDefPalette( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, 0, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1], gUnknown_083CA340[0][2], gUnknown_083CA340[0][3]); Text_InitWindowAndPrintText( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, gMoveNames[gTasks[taskId].data[1]], 776, gUnknown_083CA340[0][0], gUnknown_083CA340[0][1]); ConvertIntToDecimalStringN(text, gTasks[taskId].data[1], 2, 3); Text_InitWindowAndPrintText( - &gUnknown_03004210, + &gWindowTemplate_Contest_MoveDescription, text, 796, gUnknown_083CA340[1][0], gUnknown_083CA340[1][1]); - sub_80AED58(); - sub_80AEBEC(gTasks[taskId].data[1]); + Contest_ClearMoveDescriptionBox(); + PrintContestMoveDescription(gTasks[taskId].data[1]); gTasks[taskId].data[0]++; break; case 1: @@ -871,7 +684,7 @@ void debug_sub_80B9EBC(u8 taskId) case 8: gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80B1BDC(); + SlideApplauseMeterOut(); gTasks[taskId].data[0] = 0; gTasks[taskId].func = debug_sub_80BA054; break; @@ -883,7 +696,7 @@ void debug_sub_80B9EBC(u8 taskId) gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3] = 0; - gTasks[taskId].func = sub_80ABCDC; + gTasks[taskId].func = Task_ShowMoveSelectScreen; break; } break; @@ -900,27 +713,27 @@ void debug_sub_80BA054(u8 taskId) case 0: for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; - memset(&shared19348, 0, sizeof(shared19348)); - sub_80B28F0(gContestPlayerMonIndex); - r6 = sub_80AE9FC( + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + SetMoveAnimAttackerData(gContestPlayerMonIndex); + r6 = CreateContestantSprite( gContestMons[gContestPlayerMonIndex].species, gContestMons[gContestPlayerMonIndex].otId, gContestMons[gContestPlayerMonIndex].personality); gSprites[r6].pos2.x = 120; - gSprites[r6].callback = sub_80AD8FC; + gSprites[r6].callback = SpriteCB_MonSlideIn; gTasks[taskId].data[2] = r6; gBattlerSpriteIds[gBattlerAttacker] = r6; gTasks[taskId].data[3] = 0; gTasks[taskId].data[0]++; - sContest.unk1925E = 0; + sContest.moveAnimTurnCount = 0; break; case 1: r6 = gTasks[taskId].data[2]; if (gSprites[r6].callback == SpriteCallbackDummy) { sContestantStatus[gContestPlayerMonIndex].currMove = gTasks[taskId].data[1]; - sub_80B2790(gContestPlayerMonIndex); - sub_80B28F0(gContestPlayerMonIndex); + SetMoveSpecificAnimData(gContestPlayerMonIndex); + SetMoveAnimAttackerData(gContestPlayerMonIndex); SelectContestMoveBankTarget(gTasks[taskId].data[1]); DoMoveAnim(gTasks[taskId].data[1]); gTasks[taskId].data[3] = 0; @@ -931,8 +744,8 @@ void debug_sub_80BA054(u8 taskId) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_80B28CC(gContestPlayerMonIndex); - if (sContest.unk1925E != 0) + ClearMoveAnimData(gContestPlayerMonIndex); + if (sContest.moveAnimTurnCount != 0) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 20; @@ -948,8 +761,8 @@ void debug_sub_80BA054(u8 taskId) if (gTasks[taskId].data[3] == 21) { r6 = gTasks[taskId].data[2]; - gSprites[r6].callback = sub_80AD92C; - sub_80B1B14(); + gSprites[r6].callback = SpriteCB_MonSlideOut; + SlideApplauseMeterIn(); gTasks[taskId].data[3] = 0; gTasks[taskId].data[0]++; } @@ -978,16 +791,16 @@ void debug_sub_80BA054(u8 taskId) #endif -void sub_80AC0AC(s8 a) +void DrawMoveSelectArrow(s8 a) { MenuCursor_SetPos814A880(4, 88 + a * 16); } -void nullsub_17(s8 a) +void EraseMoveSelectArrow(s8 a) { } -void sub_80AC0C8(u8 taskId) +void Task_SelectedMove(u8 taskId) { if (gIsLinkContest & 1) { @@ -996,115 +809,116 @@ void sub_80AC0C8(u8 taskId) sContestantStatus[gContestPlayerMonIndex].currMove = var; taskId2 = CreateTask(sub_80C8A38, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8A38, sub_80AC15C); - gTasks[taskId].func = nullsub_89; - sub_80AF860(); - sub_80AFFE0(FALSE); + SetTaskFuncWithFollowupFunc(taskId2, sub_80C8A38, Task_EndCommunicateMoveSelections); + gTasks[taskId].func = TaskDummy1; + ContestPrintLinkStandby(); + SetBottomSliderHeartsInvisibility(FALSE); } else { - sub_80AF1B8(); - gTasks[taskId].func = sub_80AC188; + GetAllChosenMoves(); + gTasks[taskId].func = Task_HideMoveSelectScreen; } } -void sub_80AC15C(u8 taskId) +void Task_EndCommunicateMoveSelections(u8 taskId) { DestroyTask(taskId); - gTasks[sContest.mainTaskId].func = sub_80AC188; + gTasks[sContest.mainTaskId].func = Task_HideMoveSelectScreen; } -void sub_80AC188(u8 taskId) +void Task_HideMoveSelectScreen(u8 taskId) { - sub_80AF138(); + ContestClearGeneralTextWindow(); gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; - sub_80AFFE0(FALSE); - DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400); - LoadPalette(shared18000.unk18204, 0, 0x400); + SetBottomSliderHeartsInvisibility(FALSE); + DmaCopy32Defvars(3, gPlttBufferFaded, eContestTempSave.cachedPlttBufferFaded, 0x400); + LoadPalette(eContestTempSave.cachedPlttBufferUnfaded, 0, 0x400); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80AC204; + gTasks[taskId].func = Task_HideApplauseMeterForAppealStart; } -void sub_80AC204(u8 taskId) +void Task_HideApplauseMeterForAppealStart(u8 taskId) { if (++gTasks[taskId].data[0] > 2) { gTasks[taskId].data[0] = 0; if (++gTasks[taskId].data[1] == 2) { - sub_80B1BDC(); - sub_80B25E4(1); - gTasks[taskId].func = sub_80AC250; + SlideApplauseMeterOut(); + AnimateSliderHearts(1); + gTasks[taskId].func = Task_WaitHideApplauseMeterForAppealStart; } } } -void sub_80AC250(u8 taskId) +void Task_WaitHideApplauseMeterForAppealStart(u8 taskId) { - if (!sContest.unk1920A_6 && !sContest.unk1920B_1) - gTasks[taskId].func = sub_80AC284; + if (!sContest.applauseMeterIsMoving && !sContest.sliderHeartsAnimating) + gTasks[taskId].func = Task_AppealSetup; } -void sub_80AC284(u8 taskId) +void Task_AppealSetup(u8 taskId) { if (++gTasks[taskId].data[0] > 19) { - sContest.unk19214 = 0; - sContest.unk1921C = gRngValue; + sContest.turnNumber = 0; + sContest.unusedRng = gRngValue; gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80AC2CC; + gTasks[taskId].func = Task_DoAppeals; } } -void sub_80AC2CC(u8 taskId) +void Task_DoAppeals(u8 taskId) { u8 spriteId; s32 i; - u8 r7 = sContest.unk19215; + u8 contestant = sContest.currentContestant; s8 r4; switch (gTasks[taskId].data[0]) { case 0: - sub_80B0D7C(); - for (i = 0; sContest.unk19214 != shared192D0.turnOrder[i]; i++) + ContestDebugDoPrint(); + for (i = 0; sContest.turnNumber != eContestAppealResults.turnOrder[i]; i++) ; - sContest.unk19215 = i; - r7 = sContest.unk19215; + sContest.currentContestant = i; + contestant = sContest.currentContestant; if (gIsLinkContest & 1) { u8 taskId2; - sContest.unk1920B_2 = 1; - if (sub_80AE074()) - sub_80B114C(sContest.unk19215); - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); - sub_80AF860(); + sContest.waitForLink = 1; + if (IsPlayerLinkLeader()) + CalculateAppealMoveImpact(sContest.currentContestant); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); + ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } else { - sub_80B114C(sContest.unk19215); + CalculateAppealMoveImpact(sContest.currentContestant); gTasks[taskId].data[0] = 2; } return; case 1: - if (!sContest.unk1920B_2) + if (!sContest.waitForLink) gTasks[taskId].data[0] = 2; return; case 2: - if (sContestantStatus[r7].numTurnsSkipped != 0 - || sContestantStatus[r7].noMoreTurns) + if (sContestantStatus[contestant].numTurnsSkipped != 0 + || sContestantStatus[contestant].noMoreTurns) { gTasks[taskId].data[0] = 31; } else { - sub_80AF138(); - sub_80B0CDC(r7, 0); + ContestClearGeneralTextWindow(); + Unused_EndBlinkingState(contestant, 0); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 3; } @@ -1112,58 +926,59 @@ void sub_80AC2CC(u8 taskId) case 3: for (i = 0; i < 4; i++) gBattleMonForms[i] = 0; - memset(&shared19348, 0, sizeof(shared19348)); - sub_80B28F0(sContest.unk19215); - spriteId = sub_80AE9FC( - gContestMons[sContest.unk19215].species, - gContestMons[sContest.unk19215].otId, - gContestMons[sContest.unk19215].personality); + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + SetMoveAnimAttackerData(sContest.currentContestant); + spriteId = CreateContestantSprite( + gContestMons[sContest.currentContestant].species, + gContestMons[sContest.currentContestant].otId, + gContestMons[sContest.currentContestant].personality); gSprites[spriteId].pos2.x = 120; - gSprites[spriteId].callback = sub_80AD8FC; + gSprites[spriteId].callback = SpriteCB_MonSlideIn; gTasks[taskId].data[2] = spriteId; gBattlerSpriteIds[gBattlerAttacker] = spriteId; - sub_80B0BC4(sub_80B09E4(sContest.unk19215), FALSE); + BlinkContestantBox(CreateContestantBoxBlinkSprites(sContest.currentContestant), FALSE); gTasks[taskId].data[0] = 4; return; case 4: spriteId = gTasks[taskId].data[2]; if (gSprites[spriteId].callback == SpriteCallbackDummy) { - if (!shared19338[r7].unk2_1) + if (!eContestGfxState[contestant].boxBlinking) gTasks[taskId].data[0] = 5; } return; case 5: - if (sContestantStatus[r7].nervous) + if (sContestantStatus[contestant].nervous) { gTasks[taskId].data[0] = 33; } else { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); - if (sContestantStatus[r7].currMove < NUM_MOVES) - StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + if (sContestantStatus[contestant].currMove < NUM_MOVES) + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); else - StringCopy(gStringVar2, gUnknown_083CC330[sContestantStatus[r7].moveCategory]); - StringExpandPlaceholders(gStringVar4, gUnknown_083CAFD7); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + StringCopy(gStringVar2, + sInvalidContestMoveNames[sContestantStatus[contestant].moveCategory]); + StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 6; } return; case 6: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sContest.unk1925E = 0; + sContest.moveAnimTurnCount = 0; gTasks[taskId].data[0] = 7; } return; case 7: { - u16 move = SanitizeMove(sContestantStatus[sContest.unk19215].currMove); + u16 move = SanitizeMove(sContestantStatus[sContest.currentContestant].currMove); - sub_80B2790(sContest.unk19215); - sub_80B28F0(sContest.unk19215); + SetMoveSpecificAnimData(sContest.currentContestant); + SetMoveAnimAttackerData(sContest.currentContestant); SelectContestMoveBankTarget(move); DoMoveAnim(move); gTasks[taskId].data[0] = 8; @@ -1173,17 +988,17 @@ void sub_80AC2CC(u8 taskId) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_80B28CC(r7); - if (sContest.unk1925E != 0) + ClearMoveAnimData(contestant); + if (sContest.moveAnimTurnCount != 0) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 9; } else { - if (!sContestantStatus[r7].hasJudgesAttention) - sub_80B03A8(r7); - sub_80B20C4(); + if (!sContestantStatus[contestant].hasJudgesAttention) + sub_80B03A8(contestant); + DrawUnnervedSymbols(); gTasks[taskId].data[0] = 23; } } @@ -1197,25 +1012,26 @@ void sub_80AC2CC(u8 taskId) return; case 23: gTasks[taskId].data[1] = 0; - if (sContestantStatus[r7].effectStringId != CONTEST_STRING_NONE) + if (sContestantStatus[contestant].effectStringId != CONTEST_STRING_NONE) { - sub_80B146C(r7, sContestantStatus[r7].effectStringId); - sContestantStatus[r7].effectStringId = CONTEST_STRING_NONE; + PrintAppealMoveResultText(contestant, sContestantStatus[contestant].effectStringId); + sContestantStatus[contestant].effectStringId = CONTEST_STRING_NONE; gTasks[taskId].data[0] = 24; } else { - if (sContestantStatus[r7].effectStringId2 != CONTEST_STRING_NONE) + if (sContestantStatus[contestant].effectStringId2 != CONTEST_STRING_NONE) { for (i = 0; i < 4; i++) { - if (i != r7 && sContestantStatus[i].effectStringId != CONTEST_STRING_NONE) + if (i != contestant && sContestantStatus[i].effectStringId != CONTEST_STRING_NONE) break; } if (i == 4) { - sub_80B146C(r7, sContestantStatus[r7].effectStringId2); - sContestantStatus[r7].effectStringId2 = CONTEST_STRING_NONE; + PrintAppealMoveResultText( + contestant, sContestantStatus[contestant].effectStringId2); + sContestantStatus[contestant].effectStringId2 = CONTEST_STRING_NONE; gTasks[taskId].data[0] = 24; } else @@ -1230,21 +1046,21 @@ void sub_80AC2CC(u8 taskId) } return; case 24: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 23; return; case 48: - if (sContestantStatus[r7].turnOrderModAction == 1) + if (sContestantStatus[contestant].turnOrderModAction == 1) { - sub_80B1710(5); + DoJudgeSpeechBubble(5); } - else if (sContestantStatus[r7].turnOrderModAction == 2) + else if (sContestantStatus[contestant].turnOrderModAction == 2) { - sub_80B1710(6); + DoJudgeSpeechBubble(6); } - else if (sContestantStatus[r7].turnOrderModAction == 3) + else if (sContestantStatus[contestant].turnOrderModAction == 3) { - sub_80B1710(7); + DoJudgeSpeechBubble(7); } else { @@ -1254,32 +1070,32 @@ void sub_80AC2CC(u8 taskId) gTasks[taskId].data[0] = 49; return; case 49: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) gTasks[taskId].data[0] = 47; return; case 47: - sub_80B1FD0(TRUE); + ShowHideNextTurnGfx(TRUE); gTasks[taskId].data[0] = 12; return; case 12: - sub_80AFBA0(0, sContestantStatus[r7].appeal2, r7); + UpdateAppealHearts(0, sContestantStatus[contestant].appeal, contestant); gTasks[taskId].data[0] = 13; return; case 13: - if (!shared19338[sContest.unk19215].unk2_2) + if (!eContestGfxState[sContest.currentContestant].updatingAppealHearts) gTasks[taskId].data[0] = 35; return; case 35: - if (sContestantStatus[r7].conditionMod == 1) - sub_80B1710(8); + if (sContestantStatus[contestant].conditionMod == 1) + DoJudgeSpeechBubble(8); gTasks[taskId].data[0] = 36; return; case 36: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) gTasks[taskId].data[0] = 37; return; case 37: - if (sub_80AEE54(r7, 1)) + if (UpdateConditionStars(contestant, 1)) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 38; @@ -1297,7 +1113,7 @@ void sub_80AC2CC(u8 taskId) } return; case 50: - if (sub_80AF038(r7)) + if (DrawStatusSymbol(contestant)) PlaySE(SE_CONTEST_ICON_CHANGE); gTasks[taskId].data[0] = 25; return; @@ -1315,7 +1131,7 @@ void sub_80AC2CC(u8 taskId) r4 = 0; for (r2 = 0; r2 < 4; r2++) { - if (r2 != r7 && gUnknown_02038696[r2] == i + if (r2 != contestant && gContestantTurnOrder[r2] == i && sContestantStatus[r2].effectStringId != CONTEST_STRING_NONE) { r4 = 1; @@ -1327,8 +1143,8 @@ void sub_80AC2CC(u8 taskId) } if (r4) { - gTasks[taskId].data[1] = gUnknown_02038696[r2]; - sub_80B146C(r2, sContestantStatus[r2].effectStringId); + gTasks[taskId].data[1] = gContestantTurnOrder[r2]; + PrintAppealMoveResultText(r2, sContestantStatus[r2].effectStringId); sContestantStatus[r2].effectStringId = CONTEST_STRING_NONE; gTasks[taskId].data[0] = 27; } @@ -1337,30 +1153,31 @@ void sub_80AC2CC(u8 taskId) gTasks[taskId].data[1] = 0; gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 51; - sub_80AF120(); + DrawStatusSymbols(); } } return; case 27: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 28; return; case 28: - for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++) + for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - sub_80AFBA0(sContestantStatus[i].appeal2 + sContestantStatus[i].jam, -sContestantStatus[i].jam, i); + UpdateAppealHearts( + sContestantStatus[i].appeal + sContestantStatus[i].jam, -sContestantStatus[i].jam, i); gTasks[taskId].data[0] = 29; return; case 29: - for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++) + for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (!shared19338[i].unk2_2) + if (!eContestGfxState[i].updatingAppealHearts) gTasks[taskId].data[0] = 39; return; case 39: - for (i = 0; gTasks[taskId].data[1] != gUnknown_02038696[i]; i++) + for (i = 0; gTasks[taskId].data[1] != gContestantTurnOrder[i]; i++) ; - if (sub_80AEE54(i, 1)) + if (UpdateConditionStars(i, 1)) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 40; @@ -1380,10 +1197,10 @@ void sub_80AC2CC(u8 taskId) case 30: for (i = 0; i < 4; i++) { - if (gUnknown_02038696[i] == gTasks[taskId].data[1]) + if (gContestantTurnOrder[i] == gTasks[taskId].data[1]) break; } - if (sub_80AF038(i)) + if (DrawStatusSymbol(i)) PlaySE(SE_CONTEST_ICON_CHANGE); else PlaySE(SE_CONTEST_ICON_CLEAR); @@ -1399,92 +1216,92 @@ void sub_80AC2CC(u8 taskId) if (gTasks[taskId].data[10]++ > 9) { gTasks[taskId].data[10] = 0; - if (sContestantStatus[r7].numTurnsSkipped != 0 - || sContestantStatus[r7].turnSkipped) + if (sContestantStatus[contestant].numTurnsSkipped != 0 + || sContestantStatus[contestant].turnSkipped) { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, ContestString_CantAppealNextTurn); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); } gTasks[taskId].data[0] = 52; } return; case 52: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - if (!sContestantStatus[r7].unk15_6) + if (!sContestantStatus[contestant].usedComboMove) gTasks[taskId].data[0] = 17; else gTasks[taskId].data[0] = 14; } return; case 14: - r4 = sContestantStatus[r7].unk16; - if (sContestantStatus[r7].unk16 != 0) + r4 = sContestantStatus[contestant].completedCombo; + if (sContestantStatus[contestant].completedCombo != 0) { - sub_80AF138(); + ContestClearGeneralTextWindow(); if (r4 == 1) - Text_InitWindow8002EB0(&gMenuWindow, ContestString_WentOverWell, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, ContestString_WentOverWell, 776, 1, 15); else if (r4 == 2) - Text_InitWindow8002EB0(&gMenuWindow, ContestString_WentOverVeryWell, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, ContestString_WentOverVeryWell, 776, 1, 15); else - Text_InitWindow8002EB0(&gMenuWindow, ContestString_AppealComboExcellently, 776, 1, 15); - sub_80B1710(3); + Contest_StartTextPrinter( + &gMenuWindow, ContestString_AppealComboExcellently, 776, 1, 15); + DoJudgeSpeechBubble(3); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 45; } else { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, ContestString_JudgeExpectantly2); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); - sub_80B1710(2); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); + DoJudgeSpeechBubble(2); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 45; } return; case 45: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) { - sub_80B09B0(sContest.unk19215); + StartStopFlashJudgeAttentionEye(sContest.currentContestant); gTasks[taskId].data[0] = 15; } return; case 15: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { if (++gTasks[taskId].data[10] > 50) { - if (!sContestantStatus[r7].hasJudgesAttention) + if (!sContestantStatus[contestant].hasJudgesAttention) { - sub_80AFBA0( - sContestantStatus[r7].appeal2, - sContestantStatus[r7].unk17, - r7); - sContestantStatus[r7].appeal2 += sContestantStatus[r7].unk17; + UpdateAppealHearts( + sContestantStatus[contestant].appeal, sContestantStatus[contestant].comboAppealBonus, + contestant); + sContestantStatus[contestant].appeal += sContestantStatus[contestant].comboAppealBonus; } gTasks[taskId].data[0] = 16; } } return; case 16: - if (!shared19338[r7].unk2_2) + if (!eContestGfxState[contestant].updatingAppealHearts) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 17; } return; case 17: - if (sContestantStatus[r7].disappointedRepeat) + if (sContestantStatus[contestant].repeatedMove) { - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); StringExpandPlaceholders(gStringVar4, ContestString_DissapointedRepeat); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[10] = 0; - sub_80B1710(0); + DoJudgeSpeechBubble(0); gTasks[taskId].data[0] = 46; } else @@ -1493,50 +1310,52 @@ void sub_80AC2CC(u8 taskId) } return; case 46: - if (!sContest.unk1920A_4) + if (!sContest.waitForJudgeSpeechBubble) gTasks[taskId].data[0] = 19; return; case 19: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80AFBA0(sContestantStatus[r7].appeal2, -sContestantStatus[r7].unk18, r7); - sContestantStatus[r7].appeal2 -= sContestantStatus[r7].unk18; + UpdateAppealHearts(sContestantStatus[contestant].appeal, -sContestantStatus[contestant].repeatJam, + contestant); + sContestantStatus[contestant].appeal -= sContestantStatus[contestant].repeatJam; gTasks[taskId].data[0] = 18; } return; case 18: - sub_80B0D7C(); - if (!shared19338[r7].unk2_2) + ContestDebugDoPrint(); + if (!eContestGfxState[contestant].updatingAppealHearts) { gTasks[taskId].data[10] = 0; - sub_80AF138(); + ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 41; } return; case 41: - if (shared19328.excitementFrozen && r7 != shared19328.excitementFreezer) + if (eContestExcitement.excitementFrozen && + contestant != eContestExcitement.excitementFreezer) { gTasks[taskId].data[0] = 57; } else { - r4 = shared19328.bits_0; - if (sContestantStatus[r7].overrideCategoryExcitementMod) + r4 = eContestExcitement.moveExcitement; + if (sContestantStatus[contestant].overrideCategoryExcitementMod) { r4 = 1; - StringCopy(gStringVar3, gMoveNames[sContestantStatus[r7].currMove]); + StringCopy(gStringVar3, gMoveNames[sContestantStatus[contestant].currMove]); } else { - StringCopy(gStringVar3, gContestCategoryStrings[gContestMoves[sContestantStatus[r7].currMove].contestCategory]); + StringCopy(gStringVar3, gContestCategoryStrings[gContestMoves[sContestantStatus[contestant].currMove].contestCategory]); } if (r4 > 0) { - if (sContestantStatus[r7].disappointedRepeat) + if (sContestantStatus[contestant].repeatedMove) r4 = 0; } - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); sContest.applauseLevel += r4; if (sContest.applauseLevel < 0) sContest.applauseLevel = 0; @@ -1552,7 +1371,7 @@ void sub_80AC2CC(u8 taskId) StringExpandPlaceholders(gStringVar4, ContestString_WentOverGreat); else StringExpandPlaceholders(gStringVar4, ContestString_GotCrowdGoing); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[10] = 0; gTasks[taskId].data[11] = 0; if (r4 < 0) @@ -1566,24 +1385,24 @@ void sub_80AC2CC(u8 taskId) switch (gTasks[taskId].data[10]) { case 0: - sub_80B1EA8(-1, 1); + BlendAudienceBackground(-1, 1); PlayFanfare(MUS_TOO_BAD); gTasks[taskId].data[10]++; break; case 1: - if (!sContest.unk1920B_0 && Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (!sContest.waitForAudienceBlend && Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80B1CBC(-1); + ShowAndUpdateApplauseMeter(-1); gTasks[taskId].data[10]++; } break; case 2: - if (!sContest.unk1920A_5) + if (!sContest.isShowingApplauseMeter) { if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80B1EA8(-1, -1); + BlendAudienceBackground(-1, -1); gTasks[taskId].data[10]++; } } @@ -1602,39 +1421,41 @@ void sub_80AC2CC(u8 taskId) switch (gTasks[taskId].data[10]) { case 0: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80B1EA8(1, 1); + BlendAudienceBackground(1, 1); gTasks[taskId].data[10]++; } break; case 1: - if (!sContest.unk1920B_0) + if (!sContest.waitForAudienceBlend) { - sub_80B1DDC(); + AnimateAudience(); PlaySE(SE_M_ENCORE2); - sub_80B1CBC(1); + ShowAndUpdateApplauseMeter(1); gTasks[taskId].data[10]++; } break; case 2: - if (!sContest.unk1920A_5) + if (!sContest.isShowingApplauseMeter) { if (gTasks[taskId].data[11]++ > 29) { gTasks[taskId].data[11] = 0; - sub_80AFBA0(sContestantStatus[r7].appeal2, shared19328.unk2, r7); - sContestantStatus[r7].appeal2 += shared19328.unk2; + UpdateAppealHearts( + sContestantStatus[contestant].appeal, eContestExcitement.excitementAppealBonus, + contestant); + sContestantStatus[contestant].appeal += eContestExcitement.excitementAppealBonus; gTasks[taskId].data[10]++; } } break; case 3: - if (!shared19338[r7].unk2_2) + if (!eContestGfxState[contestant].updatingAppealHearts) { - if (!sContest.unk1920A_7) + if (!sContest.animatingAudience) { - sub_80B1EA8(1, -1); + BlendAudienceBackground(1, -1); gTasks[taskId].data[10]++; } } @@ -1650,69 +1471,69 @@ void sub_80AC2CC(u8 taskId) } return; case 43: - if (!shared19338[r7].unk2_2) + if (!eContestGfxState[contestant].updatingAppealHearts) { - sub_80AF138(); + ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 55; } return; case 57: - sub_80AF138(); - StringCopy(gStringVar3, gContestMons[shared19328.excitementFreezer].nickname); - StringCopy(gStringVar1, gContestMons[r7].nickname); - StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar3, gContestMons[eContestExcitement.excitementFreezer].nickname); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); StringExpandPlaceholders(gStringVar4, ContestString_CrowdWatches); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 58; return; case 58: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80AF138(); + ContestClearGeneralTextWindow(); StringExpandPlaceholders(gStringVar4, ContestString_Ignored2); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 59; } return; case 59: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) { - sub_80AF138(); + ContestClearGeneralTextWindow(); gTasks[taskId].data[0] = 55; } return; case 33: - if (sContestantStatus[r7].hasJudgesAttention) - sContestantStatus[r7].hasJudgesAttention = 0; - sub_80B09B0(r7); - StringCopy(gStringVar1, gContestMons[r7].nickname); - StringCopy(gStringVar2, gMoveNames[sContestantStatus[r7].currMove]); - StringExpandPlaceholders(gStringVar4, gUnknown_083CBF60); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + if (sContestantStatus[contestant].hasJudgesAttention) + sContestantStatus[contestant].hasJudgesAttention = 0; + StartStopFlashJudgeAttentionEye(contestant); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); + StringExpandPlaceholders(gStringVar4, ContestString_TooNervous); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 34; return; case 34: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 55; return; case 55: - sub_80B1BDC(); + SlideApplauseMeterOut(); gTasks[taskId].data[0] = 56; return; case 56: - if (!sContest.unk1920A_6) + if (!sContest.applauseMeterIsMoving) { if (sContest.applauseLevel > 4) { sContest.applauseLevel = 0; - sub_80B1928(); + UpdateApplauseMeter(); } gTasks[taskId].data[0] = 10; } return; case 10: spriteId = gTasks[taskId].data[2]; - gSprites[spriteId].callback = sub_80AD92C; + gSprites[spriteId].callback = SpriteCB_MonSlideOut; gTasks[taskId].data[0] = 11; return; case 11: @@ -1726,19 +1547,19 @@ void sub_80AC2CC(u8 taskId) return; case 20: for (i = 0; i < 4; i++) - sub_80B0CDC(i, 1); + Unused_EndBlinkingState(i, 1); gTasks[taskId].data[10] = 0; gTasks[taskId].data[0] = 21; return; case 31: - sub_80AF138(); - StringCopy(gStringVar1, gContestMons[r7].nickname); - StringExpandPlaceholders(gStringVar4, gUnknown_083CB00D); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + ContestClearGeneralTextWindow(); + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[0] = 32; return; case 32: - if (Text_UpdateWindowInContest(&gMenuWindow) != 0) + if (Contest_RunTextPrinter(&gMenuWindow) != 0) gTasks[taskId].data[0] = 21; return; case 21: @@ -1749,12 +1570,12 @@ void sub_80AC2CC(u8 taskId) } return; case 22: - if (++sContest.unk19214 == 4) + if (++sContest.turnNumber == 4) { gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80AD960; + gTasks[taskId].func = Task_FinishRoundOfAppeals; } else { @@ -1765,13 +1586,13 @@ void sub_80AC2CC(u8 taskId) } } -void sub_80AD8DC(u8 taskId) +void Task_EndWaitForLink(u8 taskId) { - sContest.unk1920B_2 = 0; + sContest.waitForLink = 0; DestroyTask(taskId); } -void sub_80AD8FC(struct Sprite *sprite) +void SpriteCB_MonSlideIn(struct Sprite *sprite) { if (sprite->pos2.x != 0) { @@ -1787,7 +1608,7 @@ void sub_80AD8FC(struct Sprite *sprite) } } -void sub_80AD92C(struct Sprite *sprite) +void SpriteCB_MonSlideOut(struct Sprite *sprite) { sprite->pos2.x -= 6; if (sprite->pos1.x + sprite->pos2.x < -32) @@ -1797,7 +1618,7 @@ void sub_80AD92C(struct Sprite *sprite) } } -void sub_80AD960(u8 taskId) +void Task_FinishRoundOfAppeals(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1806,57 +1627,58 @@ void sub_80AD960(u8 taskId) { u8 taskId2; - sContest.unk1920B_2 = 1; - if (sub_80AE074()) + sContest.waitForLink = 1; + if (IsPlayerLinkLeader()) { - sub_80AF2FC(); - sub_80AF3C0(); + RankContestants(); + SetAttentionLevels(); } - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); - sub_80AF860(); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); + ContestPrintLinkStandby(); gTasks[taskId].data[0] = 1; } else { - sub_80AF2FC(); - sub_80AF3C0(); + RankContestants(); + SetAttentionLevels(); gTasks[taskId].data[0] = 2; } break; case 1: - if (!sContest.unk1920B_2) + if (!sContest.waitForLink) gTasks[taskId].data[0] = 2; break; case 2: gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADA1C; + gTasks[taskId].func = Task_ReadyUpdateHeartSliders; break; } } -void sub_80ADA1C(u8 taskId) +void Task_ReadyUpdateHeartSliders(u8 taskId) { - sub_80B1FD0(FALSE); + ShowHideNextTurnGfx(FALSE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80ADA4C; + gTasks[taskId].func = Task_UpdateHeartSliders; } -void sub_80ADA4C(u8 taskId) +void Task_UpdateHeartSliders(u8 taskId) { switch (gTasks[taskId].data[0]) { case 0: if (++gTasks[taskId].data[1] > 20) { - sub_80B25E4(2); + AnimateSliderHearts(2); gTasks[taskId].data[1] = 0; gTasks[taskId].data[0]++; } break; case 1: - if (!sContest.unk1920B_1) + if (!sContest.sliderHeartsAnimating) { if (++gTasks[taskId].data[1] > 20) { @@ -1866,198 +1688,199 @@ void sub_80ADA4C(u8 taskId) } break; case 2: - sub_80AFF10(); + UpdateHeartSliders(); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_80ADAD8; + gTasks[taskId].func = Task_WaitForHeartSliders; break; } } -void sub_80ADAD8(u8 taskId) +void Task_WaitForHeartSliders(u8 taskId) { - if (sub_80AFF28()) + if (SlidersDoneUpdating()) gTasks[taskId].func = sub_80ADB04; } void sub_80ADB04(u8 taskId) { - DmaCopy32Defvars(3, shared18000.unk18204, gPlttBufferUnfaded, 0x400); + DmaCopy32Defvars(3, eContestTempSave.cachedPlttBufferUnfaded, gPlttBufferUnfaded, 0x400); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 2; - gTasks[taskId].func = sub_80ADB48; + gTasks[taskId].func = Task_WaitBeforePrintRoundResult; } -void sub_80ADB48(u8 taskId) +void Task_WaitBeforePrintRoundResult(u8 taskId) { if (++gTasks[taskId].data[0] > 2) { gTasks[taskId].data[0] = 0; if (--gTasks[taskId].data[1] == 0) - gTasks[taskId].func = sub_80ADB88; + gTasks[taskId].func = Task_PrintRoundResultText; } } -void sub_80ADB88(u8 taskId) +void Task_PrintRoundResultText(u8 taskId) { u8 r4 = sContestantStatus[gContestPlayerMonIndex].attentionLevel; - sub_80AF138(); + ContestClearGeneralTextWindow(); StringCopy(gStringVar1, gContestMons[gContestPlayerMonIndex].nickname); StringExpandPlaceholders(gStringVar4, gContestStandOutStrings[r4]); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); - gTasks[taskId].func = sub_80ADC10; + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); + gTasks[taskId].func = Task_WaitPrintRoundResultText; } -void sub_80ADC10(u8 taskId) +void Task_WaitPrintRoundResultText(u8 taskId) { - if (Text_UpdateWindowInContest(&gMenuWindow) == 1) + if (Contest_RunTextPrinter(&gMenuWindow) == 1) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADC4C; - sub_80B0D7C(); + gTasks[taskId].func = Task_ReUpdateHeartSliders; + ContestDebugDoPrint(); } } -void sub_80ADC4C(u8 taskId) +void Task_ReUpdateHeartSliders(u8 taskId) { if (gTasks[taskId].data[0]++ > 29) { gTasks[taskId].data[0] = 0; - sub_80AFF10(); - gTasks[taskId].func = sub_80ADC84; + UpdateHeartSliders(); + gTasks[taskId].func = Task_WaitForHeartSlidersAgain; } } -void sub_80ADC84(u8 taskId) +void Task_WaitForHeartSlidersAgain(u8 taskId) { - if (sub_80AFF28()) + if (SlidersDoneUpdating()) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADCB4; + gTasks[taskId].func = Task_DropCurtainAtRoundEnd; } } -void sub_80ADCB4(u8 taskId) +void Task_DropCurtainAtRoundEnd(u8 taskId) { - sub_80B2184(); - gTasks[taskId].func = sub_80B237C; + SetBgForCurtainDrop(); + gTasks[taskId].func = Task_StartDropCurtainAtRoundEnd; } -void sub_80ADCDC(u8 taskId) +void Task_UpdateContestantBoxOrder(u8 taskId) { - sub_80B2280(); - gTasks[taskId].func = sub_80ADD04; + UpdateContestantBoxOrder(); + gTasks[taskId].func = Task_TryStartNextRoundOfAppeals; } -void sub_80ADD04(u8 taskId) +void Task_TryStartNextRoundOfAppeals(u8 taskId) { REG_BG0CNT_BITFIELD.priority = 0; REG_BG2CNT_BITFIELD.priority = 0; - if (++sContest.turnNumber == 5) + if (++sContest.appealNumber == 5) { - gTasks[taskId].func = sub_80ADDA4; + gTasks[taskId].func = Task_EndAppeals; } else { - sub_80B1B14(); - gTasks[taskId].func = sub_80ADD74; + SlideApplauseMeterIn(); + gTasks[taskId].func = Task_StartNewRoundOfAppeals; } } -void sub_80ADD74(u8 taskId) +void Task_StartNewRoundOfAppeals(u8 taskId) { - if (!sContest.unk1920A_6) - gTasks[taskId].func = sub_80ABB70; + if (!sContest.applauseMeterIsMoving) + gTasks[taskId].func = Task_DisplayAppealNumberText; } -void sub_80ADDA4(u8 taskId) +void Task_EndAppeals(u8 taskId) { s32 i; gBattle_BG0_Y = 0; gBattle_BG2_Y = 0; for (i = 0; i < 4; i++) - gUnknown_02038680[i] = sContestantStatus[i].unk4; - sub_80AF668(); - sub_80AF138(); + gContestMonAppealPointTotals[i] = sContestantStatus[i].pointTotal; + CalculateFinalScores(); + ContestClearGeneralTextWindow(); sub_80BE23C(sContestantStatus[gContestPlayerMonIndex].prevMove); gContestRngValue = gRngValue; - StringExpandPlaceholders(gStringVar4, gUnknown_083CB02C); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); + StringExpandPlaceholders(gStringVar4, gText_AllOutOfAppealTime); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80ADE54; + gTasks[taskId].func = Task_WaitForOutOfTimeMsg; } -void sub_80ADE54(u8 taskId) +void Task_WaitForOutOfTimeMsg(u8 taskId) { - if (Text_UpdateWindowInContest(&gMenuWindow) == 1) + if (Contest_RunTextPrinter(&gMenuWindow) == 1) { - sub_80B2184(); + SetBgForCurtainDrop(); gBattle_BG1_X = 0; gBattle_BG1_Y = 160; PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80ADEAC; + gTasks[taskId].func = Task_DropCurtainAtAppealsEnd; } } -void sub_80ADEAC(u8 taskId) +void Task_DropCurtainAtAppealsEnd(u8 taskId) { if ((s16)(gBattle_BG1_Y -= 7) < 0) gBattle_BG1_Y = 0; if (gBattle_BG1_Y == 0) // Why cast? { - gTasks[taskId].func = sub_80ADEEC; + gTasks[taskId].func = Task_TryCommunicateFinalStandings; gTasks[taskId].data[0] = 0; } } -void sub_80ADEEC(u8 taskId) +void Task_TryCommunicateFinalStandings(u8 taskId) { if (gTasks[taskId].data[0]++ >= 50) { gTasks[taskId].data[0] = 0; if (gIsLinkContest & 1) { - gTasks[taskId].func = sub_80ADF4C; + gTasks[taskId].func = Task_CommunicateFinalStandings; } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_80ADFD8; + gTasks[taskId].func = Task_ContestReturnToField; } } } -void sub_80ADF4C(u8 taskId) +void Task_CommunicateFinalStandings(u8 taskId) { - u8 taskId2 = CreateTask(sub_80C8AD0, 0); + u8 taskId2 = CreateTask(Task_LinkContest_CommunicateFinalStandings, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8AD0, sub_80ADF98); - gTasks[taskId].func = nullsub_89; - sub_80AF860(); - sub_80AFFE0(FALSE); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateFinalStandings, Task_EndCommunicateFinalStandings); + gTasks[taskId].func = TaskDummy1; + ContestPrintLinkStandby(); + SetBottomSliderHeartsInvisibility(FALSE); } -void sub_80ADF98(u8 taskId) +void Task_EndCommunicateFinalStandings(u8 taskId) { DestroyTask(taskId); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[sContest.mainTaskId].func = sub_80ADFD8; + gTasks[sContest.mainTaskId].func = Task_ContestReturnToField; } -void sub_80ADFD8(u8 taskId) +void Task_ContestReturnToField(u8 taskId) { if (!gPaletteFade.active) { DestroyTask(taskId); - gFieldCallback = sub_80AE010; + gFieldCallback = FieldCB_ContestReturnToField; SetMainCallback2(CB2_ReturnToField); } } -void sub_80AE010(void) +void FieldCB_ContestReturnToField(void) { // Why disable and re-enable again? ScriptContext2_Disable(); @@ -2085,3444 +1908,4 @@ void InsertStringDigit(u8 *str, s32 n) } } -void sub_80AE054(void) -{ - if (!(gIsLinkContest & 1)) - gContestPlayerMonIndex = 3; -} - -bool8 sub_80AE074(void) -{ - if (gContestPlayerMonIndex == gUnknown_0203869B) - return TRUE; - else - return FALSE; -} - -void Contest_CreatePlayerMon(u8 partyIndex) -{ - u8 name[20]; - u16 heldItem; - s16 cool; - s16 beauty; - s16 cute; - s16 smart; - s16 tough; - - StringCopy(name, gSaveBlock2.playerName); - Text_StripExtCtrlCodes(name); - if (gIsLinkContest & 1) - { - u8 temp = name[5]; - - name[5] = EOS; - name[7] = temp; - } - memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); - if (gSaveBlock2.playerGender == MALE) - gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; - else - gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; - gContestMons[gContestPlayerMonIndex].flags = 0; - gContestMons[gContestPlayerMonIndex].unk2C[0] = 0; - gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); - GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); - StringGetEnd10(name); - if (gIsLinkContest & 1) - { - Text_StripExtCtrlCodes(name); - if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE) - { - name[5] = EOS; - name[10] = EXT_CTRL_CODE_BEGIN; - } - else - { - u8 temp = name[5]; - - name[5] = EOS; - name[10] = temp; - } - } - memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11); - gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL); - gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY); - gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE); - gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART); - gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH); - gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN); - gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1); - gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2); - gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3); - gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4); - gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY); - gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID); - - heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM); - cool = gContestMons[gContestPlayerMonIndex].cool; - beauty = gContestMons[gContestPlayerMonIndex].beauty; - cute = gContestMons[gContestPlayerMonIndex].cute; - smart = gContestMons[gContestPlayerMonIndex].smart; - tough = gContestMons[gContestPlayerMonIndex].tough; - if (heldItem == ITEM_RED_SCARF) - cool += 20; - else if (heldItem == ITEM_BLUE_SCARF) - beauty += 20; - else if (heldItem == ITEM_PINK_SCARF) - cute += 20; - else if (heldItem == ITEM_GREEN_SCARF) - smart += 20; - else if (heldItem == ITEM_YELLOW_SCARF) - tough += 20; - if (cool > 255) - cool = 255; - if (beauty > 255) - beauty = 255; - if (cute > 255) - cute = 255; - if (smart > 255) - smart = 255; - if (tough > 255) - tough = 255; - gContestMons[gContestPlayerMonIndex].cool = cool; - gContestMons[gContestPlayerMonIndex].beauty = beauty; - gContestMons[gContestPlayerMonIndex].cute = cute; - gContestMons[gContestPlayerMonIndex].smart = smart; - gContestMons[gContestPlayerMonIndex].tough = tough; -} - -void Contest_InitAllPokemon(u8 contestType, u8 rank) -{ - s32 i; - u8 opponentsCount = 0; - u8 opponents[64]; - - sub_80AE054(); - - // Find all suitable opponents - for (i = 0; i < 60; i++) - { - if (rank == gContestOpponents[i].whichRank) - { - if (contestType == 0 && gContestOpponents[i].aiPool_Cool) - opponents[opponentsCount++] = i; - else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty) - opponents[opponentsCount++] = i; - else if (contestType == 2 && gContestOpponents[i].aiPool_Cute) - opponents[opponentsCount++] = i; - else if (contestType == 3 && gContestOpponents[i].aiPool_Smart) - opponents[opponentsCount++] = i; - else if (contestType == 4 && gContestOpponents[i].aiPool_Tough) - opponents[opponentsCount++] = i; - } - } - opponents[opponentsCount] = 0xFF; - - // Choose three random opponents from the list - for (i = 0; i < 3; i++) - { - u16 rnd = Random() % opponentsCount; - s32 j; - - gContestMons[i] = gContestOpponents[opponents[rnd]]; - for (j = rnd; opponents[j] != 0xFF; j++) - opponents[j] = opponents[j + 1]; - opponentsCount--; - } - -#ifndef NONMATCHING - // Compiler, please put i in r5. Thanks. - asm(""::"r"(i)); - asm(""::"r"(i)); - asm(""::"r"(i)); - asm(""::"r"(i)); - asm(""::"r"(i)); -#endif - - Contest_CreatePlayerMon(gContestMonPartyIndex); -} - -// GetContestAvailability? -u8 CanMonParticipateInContest(struct Pokemon *pkmn) -{ - u8 ribbon; - u8 retVal; - - if (GetMonData(pkmn, MON_DATA_IS_EGG)) - return 3; - if (GetMonData(pkmn, MON_DATA_HP) == 0) - return 4; - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON); - break; - case CONTEST_CATEGORY_BEAUTY: - ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON); - break; - case CONTEST_CATEGORY_CUTE: - ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON); - break; - case CONTEST_CATEGORY_SMART: - ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON); - break; - case CONTEST_CATEGORY_TOUGH: - ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON); - break; - default: - return 0; - } - - // Couldn't get this to match any other way. - // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below - // the current contest rank. - if (ribbon > gSpecialVar_ContestRank) - retVal = 2; - else if (ribbon >= gSpecialVar_ContestRank) - retVal = 1; - else - retVal = 0; - return retVal; -} - -void sub_80AE514(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA308[gUnknown_02038696[i]][0], - gUnknown_083CA308[gUnknown_02038696[i]][1], - gUnknown_083CA310[gUnknown_02038696[i]][0] + 5, - gUnknown_083CA310[gUnknown_02038696[i]][1] + 1); - sub_80AE5BC(i); - sub_80AE6CC(i); - } -} - -u8 *sub_80AE598(u8 *dest, const u8 *b, u8 c) -{ - dest = StringCopy(dest, gUnknown_083CC59C); - *dest++ = c; - dest = StringCopy(dest, b); - return dest; -} - -void sub_80AE5BC(u8 a) -{ - sub_80AE5D4(a, a + 10); -} - -void sub_80AE5D4(u8 p, u8 b) -{ - u8 *str = gDisplayedStringBattle; - - str = sub_80AE598(str, gEmptyString_81E72B0, b); - str[0] = EXT_CTRL_CODE_BEGIN; - str[1] = 6; - str[2] = 4; - str += 3; - - *str++ = CHAR_SLASH; - - if ((gIsLinkContest & 1) && gLinkPlayers[p].language == LANGUAGE_JAPANESE) - { - StringCopy(str, gLinkPlayers[p].name); - Text_InitWindow8004D04( - &gUnknown_03004210, - gDisplayedStringBattle, - 592 + gUnknown_02038696[p] * 22, - 251 + gUnknown_083CA310[gUnknown_02038696[p]][0] * 8, - gUnknown_083CA310[gUnknown_02038696[p]][1] * 8, - 1); - } - else - { - StringCopy(str, gContestMons[p].trainerName); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - gDisplayedStringBattle, - 592 + gUnknown_02038696[p] * 22, - gUnknown_083CA310[gUnknown_02038696[p]][0], - gUnknown_083CA310[gUnknown_02038696[p]][1]); - } -} - -void sub_80AE6CC(u8 a) -{ - sub_80AE6E4(a, a + 10); -} - -void sub_80AE6E4(u8 a, u8 b) -{ - u8 *str = gDisplayedStringBattle; - - str[0] = EXT_CTRL_CODE_BEGIN; - str[1] = 6; - str[2] = 4; - str += 3; - - str = sub_80AE598(str, gContestMons[a].nickname, b); - *str = EOS; - - Text_InitWindow8004D04( - &gUnknown_03004210, - gDisplayedStringBattle, - 512 + gUnknown_02038696[a] * 20, - 253 + gUnknown_083CA308[gUnknown_02038696[a]][0] * 8, - gUnknown_083CA308[gUnknown_02038696[a]][1] * 8, - 1); -} - -u16 InitContestMonConditionI(u8 a, u8 b) -{ - u8 r5; - u8 r4; - u8 r3; - - switch (b) - { - case CONTEST_CATEGORY_COOL: - r5 = gContestMons[a].cool; - r4 = gContestMons[a].tough; - r3 = gContestMons[a].beauty; - break; - case CONTEST_CATEGORY_BEAUTY: - r5 = gContestMons[a].beauty; - r4 = gContestMons[a].cool; - r3 = gContestMons[a].cute; - break; - case CONTEST_CATEGORY_CUTE: - r5 = gContestMons[a].cute; - r4 = gContestMons[a].beauty; - r3 = gContestMons[a].smart; - break; - case CONTEST_CATEGORY_SMART: - r5 = gContestMons[a].smart; - r4 = gContestMons[a].cute; - r3 = gContestMons[a].tough; - break; - case CONTEST_CATEGORY_TOUGH: - default: - r5 = gContestMons[a].tough; - r4 = gContestMons[a].smart; - r3 = gContestMons[a].cool; - break; - } - return r5 + (r4 + r3 + gContestMons[a].sheen) / 2; -} - -void InitContestMonConditions(u8 a) -{ - u8 i; - - for (i = 0; i < 4; i++) - gContestMonConditions[i] = InitContestMonConditionI(i, a); -} - -u8 CreateJudgeSprite(void) -{ - u8 spriteId; - - LoadCompressedObjectPic(&gUnknown_083CA4BC); - LoadCompressedPalette(gContest2Pal, 0x110, 32); - spriteId = CreateSprite(&gSpriteTemplate_83CA4A4, 112, 36, 30); - gSprites[spriteId].oam.paletteNum = 1; - gSprites[spriteId].callback = SpriteCallbackDummy; - return spriteId; -} - -u8 sub_80AE8B4(void) -{ - u8 spriteId; - - LoadCompressedObjectPic(&gUnknown_083CA4C4); - LoadCompressedObjectPalette(&gUnknown_083CA4CC); - spriteId = CreateSprite(&gUnknown_083CA4D4, 96, 10, 29); - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum; - return spriteId; -} - -u8 unref_sub_80AE908(void) -{ - u16 species = gContestMons[gContestPlayerMonIndex].species; - u8 spriteId; - - DecompressPicFromTable_2( - &gMonFrontPicTable[species], - gMonFrontPicCoords[species].coords, - gMonFrontPicCoords[species].y_offset, - (void *)EWRAM, - gUnknown_081FAF4C[1], - species); - LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32); - GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1); - spriteId = CreateSprite( - &gUnknown_02024E8C, - 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4, - 30); - gSprites[spriteId].oam.paletteNum = 1; - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18; - StartSpriteAffineAnim(&gSprites[spriteId], 0); - return spriteId; -} - -u8 sub_80AE9FC(u16 species, u32 otId, u32 personality) -{ - const u8 *lzPaletteData; - u8 spriteId; - - species = SanitizeSpecies(species); - HandleLoadSpecialPokePic( - &gMonBackPicTable[species], - gMonBackPicCoords[species].coords, - gMonBackPicCoords[species].y_offset, - EWRAM, - gUnknown_081FAF4C[0], - species, - personality); - lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality); - LoadCompressedPalette(lzPaletteData, 0x120, 32); - GetMonSpriteTemplate_803C56C(species, 0); - spriteId = CreateSprite(&gUnknown_02024E8C, 112, sub_8077E44(2, species, 0), 30); - gSprites[spriteId].oam.paletteNum = 2; - gSprites[spriteId].oam.priority = 2; - gSprites[spriteId].subpriority = GetBattlerSubpriority(2); - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum; - gSprites[spriteId].data[2] = species; - if (IsSpeciesNotUnown(species)) - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7C18; - else - gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E7BEC; - StartSpriteAffineAnim(&gSprites[spriteId], 0); - return spriteId; -} - -bool8 IsSpeciesNotUnown(u16 species) -{ - if (species == SPECIES_UNOWN) - return FALSE; - else - return TRUE; -} - -void sub_80AEB30(void) -{ - sub_80AEB4C((void *)(VRAM + 0xC000)); - sub_80AEB4C((void *)(VRAM + 0xE000)); -} - -void sub_80AEB4C(void *a) -{ - DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280); -} - -u16 sub_80AEB68(u16 move, u8 b) -{ - u16 var; - - switch (gContestEffects[gContestMoves[move].effect].effectType) - { - case 0: - case 1: - case 8: - var = 0x9082; - break; - case 2: - case 3: - var = 0x9088; - break; - default: - var = 0x9086; - break; - } - var += 0x9000 + (b << 12); - return var; -} - -void sub_80AEBEC(u16 a) -{ - u8 category; - u16 categoryTile; - s32 i; - u8 numHearts; - - Text_FillWindowRectDefPalette(&gUnknown_03004210, 0, 11, 31, 16, 34); - - category = gContestMoves[a].contestCategory; - if (category == CONTEST_CATEGORY_COOL) - categoryTile = 0x4040; - else if (category == CONTEST_CATEGORY_BEAUTY) - categoryTile = 0x4045; - else if (category == CONTEST_CATEGORY_CUTE) - categoryTile = 0x404A; - else if (category == CONTEST_CATEGORY_SMART) - categoryTile = 0x406A; - else - categoryTile = 0x408A; - - for (i = 0; i < 5; i++) - { - *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile; - *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16; - categoryTile++; - } - - if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF) - numHearts = 0; - else - numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; - if (numHearts > 8) - numHearts = 8; - for (i = 0; i < 8; i++) - { - if (i < numHearts) - *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012; - else - *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035; - } - - if (gContestEffects[gContestMoves[a].effect].jam == 0xFF) - numHearts = 0; - else - numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; - if (numHearts > 8) - numHearts = 8; - for (i = 0; i < 8; i++) - { - if (i < numHearts) - *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014; - else - *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036; - } - - Text_InitWindowAndPrintText(&gUnknown_03004210, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35); - Text_InitWindowAndPrintText(&gUnknown_03004210, gUnknown_083CC5A2, 866, 16, 31); -} - -void sub_80AED58(void) -{ - Text_FillWindowRectDefPalette(&gUnknown_03004210, 0, 11, 35, 28, 40); -} - -// unused -void sub_80AED7C(u16 move, u8 b) -{ - u8 r5 = gUnknown_02038696[b] * 5 + 2; - - if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE) - { - u16 tile = sub_80AEB68(move, b); - - *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile; - *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1; - - *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16; - *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17; - - } - else - { - *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0; - *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0; - - *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0; - *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0; - } -} - -void unref_sub_80AEE20(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AED7C(sContestantStatus[i].currMove, i); -} - -u16 sub_80AEE4C(u8 unused) -{ - return 0x2034; -} - -bool8 sub_80AEE54(u8 a, u8 b) -{ - u8 r9; - u16 r8; - s32 r4; - - if (sContestantStatus[a].conditionMod == 0) - return FALSE; - r9 = gUnknown_02038696[a] * 5 + 2; - if (sContestantStatus[a].conditionMod == 1) - { - r8 = sub_80AEE4C(a); - r4 = 0; - while (sContestantStatus[a].condition / 10 > r4) - { - *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8; - r4++; - } - if (b != 0) - { - PlaySE(SE_EXP_MAX); - sContestantStatus[a].conditionMod = 0; - } - } - else - { - r8 = 0; - r4 = 3; - while (sContestantStatus[a].condition / 10 < r4) - { - *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8; - r4--; - } - if (b != 0) - { - PlaySE(SE_CONTEST_CONDITION_LOSE); - sContestantStatus[a].conditionMod = 0; - } - } - return TRUE; -} - -void sub_80AEF50(void) -{ - s32 i; - s32 r4; - - for (i = 0; i < 4; i++) - { - u8 r8 = gUnknown_02038696[i] * 5 + 2; - u16 r6 = sub_80AEE4C(i); - - r4 = 0; - while (r4 < sContestantStatus[i].condition / 10) - { - *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; - r4++; - } - r6 = 0; - while (r4 < 3) - { - *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; - r4++; - } - } -} - -u16 sub_80AEFE8(u8 unused, u8 b) -{ - u16 var = 0; - - switch (b) - { - case 0: - var = 0x80; - break; - case 1: - var = 0x84; - break; - case 2: - var = 0x86; - break; - case 3: - var = 0x88; - break; - case 4: - var = 0x82; - break; - } - var += 0x9000; - return var; -} - -bool8 sub_80AF038(u8 a) -{ - bool8 r5 = TRUE; - u16 r4 = 0; - u8 r6 = gUnknown_02038696[a] * 5 + 2; - - if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0) - r4 = sub_80AEFE8(a, 0); - else if (sContestantStatus[a].nervous) - r4 = sub_80AEFE8(a, 1); - else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) - r4 = sub_80AEFE8(a, 2); - else - r5 = FALSE; - if (r5) - { - *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4; - *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1; - *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16; - *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17; - } - else - { - *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0; - *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0; - *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0; - *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0; - } - return r5; -} - -void sub_80AF120(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - sub_80AF038(i); -} - -void sub_80AF138(void) -{ - Text_FillWindowRectDefPalette(&gUnknown_03004210, 0, 1, 15, 17, 18); -} - -u16 GetChosenMove(u8 a) -{ - if (Contest_IsMonsTurnDisabled(a)) - return 0; - if (a == gContestPlayerMonIndex) - { - return gContestMons[a].moves[sContest.playerMoveChoice]; - } - else - { - u8 moveChoice; - - ContestAI_ResetAI(a); - moveChoice = ContestAI_GetActionToUse(); - return gContestMons[a].moves[moveChoice]; - } -} - -void sub_80AF1B8(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sContestantStatus[i].currMove = GetChosenMove(i); -} - -void sub_80AF1E4(u8 a, u8 b) -{ - u8 r3; - - if (b == 0) - r3 = a + 10; - else - r3 = 14; - if (sContestantStatus[a].currMove == MOVE_NONE) - sub_80AE598(gDisplayedStringBattle, gUnknownText_MissedTurn, r3); - else - sub_80AE598(gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3); - sub_80AF2A0(a); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - gDisplayedStringBattle, - 696 + a * 20, - gUnknown_083CA318[a][0], - gUnknown_083CA318[a][1]); -} - -void unref_sub_80AF280(u8 a) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AF1E4(i, a); -} - -void sub_80AF2A0(u8 a) -{ - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA318[a][0], - gUnknown_083CA318[a][1], - gUnknown_083CA318[a][0] + 7, - gUnknown_083CA318[a][1] + 1); -} - -void unref_sub_80AF2E0(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AF2A0(i); -} - -void sub_80AF2FC(void) -{ - u8 i; - u8 j; - s16 arr[4]; - - for (i = 0; i < 4; i++) - { - sContestantStatus[i].unk4 += sContestantStatus[i].appeal2; - arr[i] = sContestantStatus[i].unk4; - } - for (i = 0; i < 3; i++) - { - for (j = 3; j > i; j--) - { - if (arr[j - 1] < arr[j]) - { - u16 temp = arr[j]; - - arr[j] = arr[j - 1]; - arr[j - 1] = temp; - } - } - } - for (i = 0; i < 4; i++) - { - for (j = 0; j < 4; j++) - { - if (sContestantStatus[i].unk4 == arr[j]) - { - sContestantStatus[i].unkB_0 = j; - break; - } - } - } - sub_80B0F28(1); - sub_80B159C(); -} - -void sub_80AF3C0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - u8 attentionLevel; - - if (sContestantStatus[i].currMove == MOVE_NONE) - attentionLevel = 5; - else if (sContestantStatus[i].appeal2 <= 0) - attentionLevel = 0; - else if (sContestantStatus[i].appeal2 < 30) - attentionLevel = 1; - else if (sContestantStatus[i].appeal2 < 60) - attentionLevel = 2; - else if (sContestantStatus[i].appeal2 < 80) - attentionLevel = 3; - else - attentionLevel = 4; - - sContestantStatus[i].attentionLevel = attentionLevel; - } -} - -bool8 sub_80AF404(u8 a) -{ - if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) - return FALSE; - else - return TRUE; -} - -void sub_80AF438(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - // This is bitfield hell... - sContestantStatus[i].appeal2 = 0; - sContestantStatus[i].appeal1 = 0; - sContestantStatus[i].jamSafetyCount = 0; - if (sContestantStatus[i].numTurnsSkipped > 0) - sContestantStatus[i].numTurnsSkipped--; - sContestantStatus[i].jam = 0; - sContestantStatus[i].resistant = 0; - sContestantStatus[i].jamReduction = 0; - sContestantStatus[i].immune = 0; - sContestantStatus[i].moreEasilyStartled = 0; - sContestantStatus[i].usedRepeatableMove = 0; - sContestantStatus[i].nervous = 0; - sContestantStatus[i].effectStringId = CONTEST_STRING_NONE; - sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; - sContestantStatus[i].conditionMod = 0; - sContestantStatus[i].unk15_2 = sContestantStatus[i].disappointedRepeat; - sContestantStatus[i].disappointedRepeat = FALSE; - sContestantStatus[i].turnOrderModAction = 0; - sContestantStatus[i].appealTripleCondition = 0; - if (sContestantStatus[i].turnSkipped) - { - sContestantStatus[i].numTurnsSkipped = 1; - sContestantStatus[i].turnSkipped = 0; - } - if (sContestantStatus[i].exploded) - { - sContestantStatus[i].noMoreTurns = 1; - sContestantStatus[i].exploded = 0; - } - sContestantStatus[i].overrideCategoryExcitementMod = 0; - } - for (i = 0; i < 4; i++) - { - sContestantStatus[i].prevMove = sContestantStatus[i].currMove; - sContest.unk19220[sContest.turnNumber][i] = sContestantStatus[i].prevMove; - sContest.unk19248[sContest.turnNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove); - sContestantStatus[i].currMove = MOVE_NONE; - } - shared19328.excitementFrozen = 0; -} - -bool8 Contest_IsMonsTurnDisabled(u8 a) -{ - if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) - return TRUE; - else - return FALSE; -} - -bool8 unref_sub_80AF5D0(u8 a, u8 b) -{ - u8 i; - - if (a != gContestPlayerMonIndex) - return TRUE; - for (i = 0; i < 4; i++) - { - if (b == 3) - { - sContest.unk1920A_0 = 1; - return TRUE; - } - if (b == 4) - { - sContest.unk1920A_1 = 1; - return TRUE; - } - if (sContest.unk19206[i] == b) - return TRUE; - if (sContest.unk19206[i] == 0xFF) - { - sContest.unk19206[i] = b; - return TRUE; - } - } - return FALSE; -} - -void sub_80AF630(u8 a) -{ - gUnknown_02038688[a] = sub_80AF688(a); - gUnknown_02038678[a] = gContestMonConditions[a] + gUnknown_02038688[a]; -} - -void sub_80AF668(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80AF630(i); - DetermineFinalStandings(); -} - -s16 sub_80AF688(u8 a) -{ - return gUnknown_02038680[a] * 2; -} - -// Determines standing order? -void DetermineFinalStandings(void) -{ - u16 sp0[4] = {0}; - struct UnknownContestStruct6 sp8[4]; - s32 i; - s32 j; - - for (i = 0; i < 4; i++) - { - s32 r2; - - sp0[i] = Random(); - for (r2 = 0; r2 < i; r2++) - { - if (sp0[i] == sp0[r2]) - { - i--; - break; - } - } - } - - for (i = 0; i < 4; i++) - { - sp8[i].unk0 = gUnknown_02038678[i]; - sp8[i].unk4 = gContestMonConditions[i]; - sp8[i].unk8 = sp0[i]; - sp8[i].unkC = i; - } - - for (i = 0; i < 3; i++) - { - for (j = 3; j > i; j--) - { - if (sub_80AF828(j - 1, j, sp8)) - { - struct UnknownContestStruct6 temp; - - temp.unk0 = sp8[j - 1].unk0; - temp.unk4 = sp8[j - 1].unk4; - temp.unk8 = sp8[j - 1].unk8; - temp.unkC = sp8[j - 1].unkC; - - sp8[j - 1].unk0 = sp8[j].unk0; - sp8[j - 1].unk4 = sp8[j].unk4; - sp8[j - 1].unk8 = sp8[j].unk8; - sp8[j - 1].unkC = sp8[j].unkC; - - sp8[j].unk0 = temp.unk0; - sp8[j].unk4 = temp.unk4; - sp8[j].unk8 = temp.unk8; - sp8[j].unkC = temp.unkC; - } - } - } - - for (i = 0; i < 4; i++) - gContestFinalStandings[sp8[i].unkC] = i; -} - -bool8 sub_80AF828(s32 a, s32 b, struct UnknownContestStruct6 *c) -{ - bool8 retVal; - - if (c[a].unk0 < c[b].unk0) - retVal = TRUE; - else if (c[a].unk0 > c[b].unk0) - retVal = FALSE; - else if (c[a].unk4 < c[b].unk4) - retVal = TRUE; - else if (c[a].unk4 > c[b].unk4) - retVal = FALSE; - else if (c[a].unk8 < c[b].unk8) - retVal = TRUE; - else - retVal = FALSE; - return retVal; -} - -void sub_80AF860(void) -{ - gBattle_BG0_Y = 0; - gBattle_BG2_Y = 0; - sub_80AF138(); - Text_InitWindowAndPrintText(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15); -} - -u8 unref_sub_80AF89C(s16 a, s16 b, u8 c, u8 d) -{ - u8 taskId; - u8 r5; - s8 r4; - u16 r0; - - shared19338[d].unk2_2 = 1; - taskId = CreateTask(sub_80AF94C, 20); - r5 = sub_80AFB74(a); - r4 = sub_80AFB74(a + b) - r5; - r0 = sub_80AFB40(d); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = r0 + c; - gTasks[taskId].data[3] = d; - if (b < 0) - nullsub_19(d); - return taskId; -} - -void sub_80AF94C(u8 taskId) -{ - u8 r5 = gTasks[taskId].data[3]; - - if (gTasks[taskId].data[1] == 0) - { - nullsub_19(r5); - DestroyTask(taskId); - shared19338[r5].unk2_2 = 0; - } - else if (++gTasks[taskId].data[10] > 29) - { - u8 r6; - - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[1] < 0) - { - r6 = gTasks[taskId].data[0]--; - gTasks[taskId].data[1]++; - PlaySE(SE_BOO); - } - else - { - r6 = ++gTasks[taskId].data[0]; - gTasks[taskId].data[1]--; - PlaySE(SE_PIN); - } - if ((u16)gTasks[taskId].data[2] != 0xFFFF) - { - RequestSpriteCopy( - &gTasks[taskId].data[2], - (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2), - 2); - } - else - { - u8 i; - - for (i = 0; i < 3; i++) - { - if (gTasks[taskId].data[i + 4] < 0) - { - RequestSpriteCopy( - &gTasks[taskId].data[i + 7], - (void *)(VRAM + 0xC000 + (147 + r6 + r5 * 160) * 2), - 2); - gTasks[taskId].data[i + 4]++; - break; - } - } - } - } -} - -void sub_80AFA5C(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16); - DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16); - } -} - -void unref_sub_80AFAB8(s16 a, u8 b) -{ - u8 r5 = sub_80AFB74(a); - u16 r2; - u8 i; - u16 arr[9]; - - if (b == 0) - r2 = 0x50A2; - else if (b == 1) - r2 = 0x60A2; - else if (b == 2) - r2 = 0x70A2; - else - r2 = 0x80A2; - - for (i = 0; i < 9; i++) - { - if (i < r5) - arr[i] = r2; - else - arr[i] = 0; - } - - DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr)); -} - -u16 sub_80AFB40(u8 a) -{ - u16 var; - - if (a == 0) - var = 0x5011; - else if (a == 1) - var = 0x6011; - else if (a == 2) - var = 0x7011; - else - var = 0x8011; - return var + 1; -} - -s8 sub_80AFB74(s16 a) -{ - s8 retVal = a / 10; - - if (retVal > 16) - retVal = 16; - else if (retVal < -16) - retVal = -16; - return retVal; -} - -u8 sub_80AFBA0(s16 a, s16 b, u8 c) -{ - u8 taskId; - s8 r4; - s8 r5; - - shared19338[c].unk2_2 = 1; - taskId = CreateTask(sub_80AFC74, 20); - r4 = sub_80AFB74(a); - r5 = sub_80AFB74(a + b) - r4; - sub_80AFB40(c); // unused return value - gTasks[taskId].data[0] = abs(r4); - gTasks[taskId].data[1] = r5; - if (r4 > 0 || (r4 == 0 && r5 > 0)) - gTasks[taskId].data[2] = 1; - else - gTasks[taskId].data[2] = -1; - gTasks[taskId].data[3] = c; - if (b < 0) - nullsub_19(c); - return taskId; -} - -void sub_80AFC74(u8 taskId) -{ - u8 r7 = gTasks[taskId].data[3]; - s16 r3 = gTasks[taskId].data[0]; - s16 r1 = gTasks[taskId].data[1]; - - if (++gTasks[taskId].data[10] > 14) - { - u16 r6; - u8 r5; - u8 r10; - - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[1] == 0) - { - nullsub_19(r7); - DestroyTask(taskId); - shared19338[r7].unk2_2 = 0; - return; - } - else if (r3 == 0) - { - if (r1 < 0) - { - r6 = sub_80AFB40(r7) + 2; - gTasks[taskId].data[1]++; - } - else - { - r6 = sub_80AFB40(r7); - gTasks[taskId].data[1]--; - } - r5 = gTasks[taskId].data[0]++; - } - else - { - if (gTasks[taskId].data[2] < 0) - { - if (r1 < 0) - { - r5 = gTasks[taskId].data[0]++; - gTasks[taskId].data[1]++; - r6 = sub_80AFB40(r7) + 2; - } - else - { - r5 = --gTasks[taskId].data[0]; - r6 = 0; - gTasks[taskId].data[1]--; - } - } - else - { - if (r1 < 0) - { - r5 = --gTasks[taskId].data[0]; - r6 = 0; - gTasks[taskId].data[1]++; - } - else - { - r5 = gTasks[taskId].data[0]++; - gTasks[taskId].data[1]--; - r6 = sub_80AFB40(r7); - } - } - } - r10 = r5; - if (r5 > 7) - r5 += 24; - // Seriously, a 2-byte CpuFill? Why? - CpuFill16(r6, (void *)(VRAM + 0xC000 + (0x56 + r5 + gUnknown_02038696[r7] * 160) * 2), 2); - if (r1 > 0) - { - PlaySE(SE_CONTEST_HEART); - m4aMPlayImmInit(&gMPlayInfo_SE1); - m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, r10 * 256); - } - else - { - PlaySE(SE_BOO); - } - if (r5 == 0 && r6 == 0) - gTasks[taskId].data[2] = -gTasks[taskId].data[2]; - } -} - -void sub_80AFE30(void) -{ - s32 i; - - LoadSpriteSheet(&gUnknown_083CA350); - for (i = 0; i < 4; i++) - { - u8 y = gUnknown_083CA338[gUnknown_02038696[i]]; - - shared19338[i].unk0 = CreateSprite(&gSpriteTemplate_83CA3AC, 180, y, 1); - } -} - -void sub_80AFE78(u8 a) -{ - u8 spriteId; - s16 r5; - - shared19338[a].unk2_0 = 1; - spriteId = shared19338[a].unk0; - r5 = sContestantStatus[a].unk4 / 10 * 2; - if (r5 > 56) - r5 = 56; - else if (r5 < 0) - r5 = 0; - gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].data[0] = a; - gSprites[spriteId].data[1] = r5; - if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x) - gSprites[spriteId].data[2] = 1; - else - gSprites[spriteId].data[2] = -1; - gSprites[spriteId].callback = sub_80AFF60; -} - -void sub_80AFF10(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - sub_80AFE78(i); -} - -bool8 sub_80AFF28(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (shared19338[i].unk2_0) - break; - } - if (i == 4) - return TRUE; - else - return FALSE; -} - -void sub_80AFF60(struct Sprite *sprite) -{ - if (sprite->pos2.x == sprite->data[1]) - { - shared19338[sprite->data[0]].unk2_0 = 0; - sprite->callback = SpriteCallbackDummy; - } - else - { - sprite->pos2.x += sprite->data[2]; - } -} - -void sub_80AFFA0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - gSprites[shared19338[i].unk0].pos1.y = gUnknown_083CA338[gUnknown_02038696[i]]; -} - -void sub_80AFFE0(bool8 a) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (gUnknown_02038696[i] > 1) - { - if (!a) - gSprites[shared19338[i].unk0].pos1.x = 180; - else - gSprites[shared19338[i].unk0].pos1.x = 256; - } - } -} - -void sub_80B0034(void) -{ - s32 i; - - LoadSpritePalette(&gUnknown_083CA3E4); - for (i = 0; i < 4; i++) - { - LoadCompressedObjectPic(&gUnknown_083CA3C4[i]); - shared19338[i].unk1 = CreateSprite( - &gSpriteTemplate_83CA3F4[i], - 204, gUnknown_083CA33C[gUnknown_02038696[i]], - 0); - SetSubspriteTables(&gSprites[shared19338[i].unk1], gSubspriteTables_83CA464); - gSprites[shared19338[i].unk1].invisible = TRUE; - } -} - -void CreateApplauseMeterSprite(void) -{ - u8 spriteId; - - LoadCompressedObjectPic(&gUnknown_083CA46C); - LoadSpritePalette(&gUnknown_083CA474); - spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1); - gSprites[spriteId].invisible = TRUE; - sContest.applauseMeterSpriteId = spriteId; -} - -void nullsub_18(s8 unused) -{ -} - -void unref_sub_80B011C(void) -{ - u8 i; - - LoadCompressedObjectPic(&gUnknown_083CC3AC); - for (i = 0; i < 4; i++) - LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]); - for (i = 0; i < 4; i++) - { - u8 spriteId = CreateSprite( - &gSpriteTemplate_83CC454[i], - gUnknown_083CA330[i][0], gUnknown_083CA330[i][1], - 5); - - gSprites[spriteId].invisible = TRUE; - gSprites[spriteId].data[0] = i; - sContest.unk1920D[i] = spriteId; - } -} - -void unref_sub_80B01B0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - gSprites[sContest.unk1920D[i]].callback = sub_80B0238; -} - -bool8 unref_sub_80B01E0(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy) - break; - } - if (i == 4) - return TRUE; - else - return FALSE; -} - -void sub_80B0238(struct Sprite *sprite) -{ - sprite->oam.affineMode = 1; - InitSpriteAffineAnim(sprite); - if (sprite->invisible) - { - sprite->callback = sub_80B02A8; - } - else - { - StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80B0280; - } -} - -void sub_80B0280(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - sprite->invisible = TRUE; - sprite->callback = sub_80B02A8; - } -} - -void sub_80B02A8(struct Sprite *sprite) -{ - sprite->invisible = FALSE; - StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].unkB_0); - StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_80B02F4; - PlaySE(SE_CONTEST_PLACE); -} - -void sub_80B02F4(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - FreeSpriteOamMatrix(sprite); - sprite->oam.affineMode = 0; - sprite->callback = SpriteCallbackDummy; - } -} - -void sub_80B0324(void) -{ - u8 i; - u8 taskId = CreateTask(sub_80B0458, 30); - - sContest.unk19211 = taskId; - for (i = 0; i < 4; i++) - gTasks[taskId].data[i * 4] = 0xFF; -} - -void sub_80B0368(u8 a) -{ - gTasks[sContest.unk19211].data[a * 4 + 0] = 0; - gTasks[sContest.unk19211].data[a * 4 + 1] = 0; -} - -void sub_80B03A8(u8 a) -{ - u8 taskId = CreateTask(sub_80B03D8, 31); - - gTasks[taskId].data[0] = a; -} - -void sub_80B03D8(u8 taskId) -{ - u8 r4 = gTasks[taskId].data[0]; - - if (gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0 - || gTasks[sContest.unk19211].data[r4 * 4 + 0] == 0xFF) - { - gTasks[sContest.unk19211].data[r4 * 4 + 0] = 0xFF; - gTasks[sContest.unk19211].data[r4 * 4 + 1] = 0; - BlendPalette((sContest.unk19218[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); - DestroyTask(taskId); - } -} - -void sub_80B0458(u8 taskId) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - u8 r3 = i * 4; - - if (gTasks[taskId].data[r3 + 0] != 0xFF) - { - if (gTasks[taskId].data[r3 + 1] == 0) - gTasks[taskId].data[r3 + 0]++; - else - gTasks[taskId].data[r3 + 0]--; - - if (gTasks[taskId].data[r3 + 0] == 16 - || gTasks[taskId].data[r3 + 0] == 0) - gTasks[taskId].data[r3 + 1] ^= 1; - - BlendPalette( - (sContest.unk19218[i] + 5) * 16 + 6, - 2, - gTasks[taskId].data[r3 + 0], - RGB(31, 31, 18)); - } - } -} - -void sub_80B0518(void) -{ - u8 i; - - sContest.unk19212 = CreateTask(sub_80B05FC, 30); - for (i = 0; i < 4; i++) - sub_80B0548(i); -} - -void sub_80B0548(u8 a) -{ - gTasks[sContest.unk19212].data[a * 4 + 0] = 0xFF; - gTasks[sContest.unk19212].data[a * 4 + 1] = 0; -} - -void sub_80B0588(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - sub_80B05A4(i); -} - -void sub_80B05A4(u8 a) -{ - sub_80B0548(a); - - // 2-byte DMA copy? Why? - - DmaCopy16Defvars( - 3, - &gPlttBufferUnfaded[16 * (5 + a) + 10], - &gPlttBufferFaded[16 * (5 + a) + 10], - 2); - - DmaCopy16Defvars( - 3, - &gPlttBufferUnfaded[16 * (5 + a) + 12 + a], - &gPlttBufferFaded[16 * (5 + a) + 12 + a], - 2); -} - -void nullsub_19(int unused) -{ -} - -void sub_80B05FC(u8 taskId) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - u8 r3 = i * 4; - - if (gTasks[taskId].data[r3 + 0] != 0xFF) - { - if (++gTasks[taskId].data[r3 + 2] > 2) - { - gTasks[taskId].data[r3 + 2] = 0; - - if (gTasks[taskId].data[r3 + 1] == 0) - gTasks[taskId].data[r3 + 0]++; - else - gTasks[taskId].data[r3 + 0]--; - - if (gTasks[taskId].data[r3 + 0] == 16 - || gTasks[taskId].data[r3 + 0] == 0) - gTasks[taskId].data[r3 + 1] ^= 1; - - BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); - BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); - } - } - } -} - -u8 unref_sub_80B06E0(u8 *a) -{ - u8 i; - u8 taskId = CreateTask(sub_80B0748, 10); - - for (i = 0; i < 4; i++) - { - u8 r0 = i * 4; - - gTasks[taskId].data[r0] = a[i]; - if (a[i] != 0) - shared19338[i].unk2_1 = 1; - } - return taskId; -} - -#ifdef NONMATCHING -void sub_80B0748(u8 taskId) -{ - u8 i; - u8 r4; - u8 r4_2; - u8 r1; - u8 r7; - - for (i = 0; i < 4; i++) - { - //#define r4 r4_2 - r4 = gUnknown_02038696[i]; - r1 = r4 * 4; - r7 = gTasks[taskId].data[r1 + 0]; - - if (r7 != 0) - { - //_080B079C - u8 r8 = gTasks[taskId].data[r1 + 1]; - u8 r5 = gTasks[taskId].data[r1 + 2]; - u8 r6 = gTasks[taskId].data[r1 + 3]; - - if (r7 == 1) - { - r6++; - if (r6 == 1) - { - //_080B07D2 - r6 = 0; - BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(31, 31, 31)); - if (r5 == 0 && r8 == 4) - { - gTasks[taskId].data[r1 + 0] = 0; - //asm(""); - } - //_080B0800 - else - { - r5 += 2; - if (r5 > 13) - { - r5 = 0; - r8++; - } - } - } - //to _080B08EA - } - //_080B0818 - else if (r7 == 2 || r7 == 4) - { - r6++; - if (r6 == 3) - { - r6 = 0; - BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]); - if (r5 == 0 && r8 == 2) - { - gTasks[taskId].data[r1 + 0] = 0; - } - //_080B0858 - else - { - r5 += 1; - if (r5 == 14) - { - r5 = 0; - r8++; - if (r7 == 4 && r8 == 1) - { - BlendPalette((r4 + 9) * 16 + 2, 1, 4, RGB(0, 0, 0)); - BlendPalette((r4 + 9) * 16 + 5, 1, 4, RGB(0, 0, 0)); - } - } - } - } - //to _080B08EA - } - //_080B0896 - else if (r7 == 3) - { - r6++; - if (r6 == 12) - { - r6 = 0; - BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(0, 0, 0)); - r5 += 1; - if (r5 == 5) - { - // What the hell? These aren't pointers. - // This code would crash if run. - DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1], - (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6); - gTasks[taskId].data[r1 + 0] = 0; - } - } - } - //_080B08EA - gTasks[taskId].data[r1 + 1] = r8; - gTasks[taskId].data[r1 + 2] = r5; - gTasks[taskId].data[r1 + 3] = r6; - } - //_080B0910 - } - //_080B0920 - - #define i r4_2 - for (i = 0; i < 4; i++) // r4 is i - { - if (gTasks[taskId].data[i * 4 + 0] != 0) - break; - } - //_080B0958 - if (i == 4) - { - for (i = 0; i < 4; i++) - shared19338[i].unk2_2 = 0; - DestroyTask(taskId); - } - #undef i -} -#else -NAKED -void sub_80B0748(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp]\n\ - movs r0, 0\n\ - str r0, [sp, 0x4]\n\ - ldr r2, _080B07F4 @ =gTasks\n\ - movs r1, 0x8\n\ - adds r1, r2\n\ - mov r10, r1\n\ - ldr r3, [sp]\n\ - lsls r3, 2\n\ - str r3, [sp, 0x1C]\n\ - ldr r1, [sp]\n\ - adds r0, r3, r1\n\ - lsls r0, 3\n\ - str r0, [sp, 0xC]\n\ -_080B0774:\n\ - ldr r0, _080B07F8 @ =gUnknown_02038696\n\ - ldr r3, [sp, 0x4]\n\ - adds r0, r3, r0\n\ - ldrb r4, [r0]\n\ - lsls r0, r4, 26\n\ - lsrs r1, r0, 24\n\ - lsls r0, r1, 1\n\ - str r0, [sp, 0x8]\n\ - ldr r3, [sp]\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r6, r0, 3\n\ - ldr r3, [sp, 0x8]\n\ - adds r0, r3, r6\n\ - add r0, r10\n\ - mov r9, r0\n\ - ldrb r7, [r0]\n\ - cmp r7, 0\n\ - bne _080B079C\n\ - b _080B0910\n\ -_080B079C:\n\ - adds r3, r1, 0x1\n\ - lsls r0, r3, 1\n\ - adds r0, r6\n\ - add r0, r10\n\ - ldrb r0, [r0]\n\ - mov r8, r0\n\ - adds r2, r1, 0x2\n\ - lsls r0, r2, 1\n\ - adds r0, r6\n\ - add r0, r10\n\ - ldrb r5, [r0]\n\ - adds r1, 0x3\n\ - lsls r0, r1, 1\n\ - adds r0, r6\n\ - add r0, r10\n\ - ldrb r6, [r0]\n\ - str r3, [sp, 0x10]\n\ - str r2, [sp, 0x14]\n\ - str r1, [sp, 0x18]\n\ - cmp r7, 0x1\n\ - bne _080B0818\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0x1\n\ - beq _080B07D2\n\ - b _080B08EA\n\ -_080B07D2:\n\ - movs r6, 0\n\ - adds r0, r4, 0x5\n\ - lsls r0, 4\n\ - adds r0, 0x1\n\ - movs r1, 0x3\n\ - adds r2, r5, 0\n\ - ldr r3, _080B07FC @ =0x00007fff\n\ - bl BlendPalette\n\ - cmp r5, 0\n\ - bne _080B0800\n\ - mov r0, r8\n\ - cmp r0, 0x4\n\ - bne _080B0800\n\ - mov r1, r9\n\ - strh r6, [r1]\n\ - b _080B08EA\n\ - .align 2, 0\n\ -_080B07F4: .4byte gTasks\n\ -_080B07F8: .4byte gUnknown_02038696\n\ -_080B07FC: .4byte 0x00007fff\n\ -_080B0800:\n\ - adds r0, r5, 0x2\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0xD\n\ - bls _080B08EA\n\ - movs r5, 0\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - b _080B08EA\n\ -_080B0818:\n\ - cmp r7, 0x2\n\ - beq _080B0820\n\ - cmp r7, 0x4\n\ - bne _080B0896\n\ -_080B0820:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0x3\n\ - bne _080B08EA\n\ - movs r6, 0\n\ - adds r0, r4, 0x5\n\ - lsls r0, 4\n\ - adds r0, 0x1\n\ - ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\ - lsls r1, r4, 1\n\ - adds r1, r2\n\ - ldrh r3, [r1]\n\ - movs r1, 0x3\n\ - adds r2, r5, 0\n\ - bl BlendPalette\n\ - cmp r5, 0\n\ - bne _080B0858\n\ - mov r2, r8\n\ - cmp r2, 0x2\n\ - bne _080B0858\n\ - mov r3, r9\n\ - strh r6, [r3]\n\ - b _080B08EA\n\ - .align 2, 0\n\ -_080B0854: .4byte gUnknown_083CC5A4\n\ -_080B0858:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0xE\n\ - bne _080B08EA\n\ - movs r5, 0\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - cmp r7, 0x4\n\ - bne _080B08EA\n\ - cmp r0, 0x1\n\ - bne _080B08EA\n\ - adds r4, 0x9\n\ - lsls r4, 4\n\ - adds r0, r4, 0x2\n\ - movs r1, 0x1\n\ - movs r2, 0x4\n\ - movs r3, 0\n\ - bl BlendPalette\n\ - adds r4, 0x5\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - movs r2, 0x4\n\ - movs r3, 0\n\ - bl BlendPalette\n\ - b _080B08EA\n\ -_080B0896:\n\ - cmp r7, 0x3\n\ - bne _080B08EA\n\ - adds r0, r6, 0x1\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0xC\n\ - bne _080B08EA\n\ - movs r6, 0\n\ - adds r0, r4, 0x5\n\ - lsls r0, 4\n\ - adds r4, r0, 0x1\n\ - adds r0, r4, 0\n\ - movs r1, 0x3\n\ - adds r2, r5, 0\n\ - movs r3, 0\n\ - bl BlendPalette\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x5\n\ - bne _080B08EA\n\ - ldr r0, _080B0930 @ =gPlttBufferFaded\n\ - lsls r1, r4, 1\n\ - adds r0, r1, r0\n\ - ldrh r2, [r0]\n\ - ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - ldr r1, _080B0938 @ =0x040000d4\n\ - str r2, [r1]\n\ - str r0, [r1, 0x4]\n\ - movs r0, 0x80\n\ - lsls r0, 24\n\ - orrs r7, r0\n\ - str r7, [r1, 0x8]\n\ - ldr r0, [r1, 0x8]\n\ - ldr r1, [sp, 0x8]\n\ - ldr r2, [sp, 0xC]\n\ - adds r0, r1, r2\n\ - add r0, r10\n\ - strh r6, [r0]\n\ -_080B08EA:\n\ - ldr r3, [sp, 0x10]\n\ - lsls r0, r3, 1\n\ - ldr r1, [sp, 0xC]\n\ - adds r0, r1\n\ - add r0, r10\n\ - mov r2, r8\n\ - strh r2, [r0]\n\ - ldr r3, [sp, 0x14]\n\ - lsls r0, r3, 1\n\ - adds r0, r1\n\ - add r0, r10\n\ - strh r5, [r0]\n\ - ldr r1, [sp, 0x18]\n\ - lsls r0, r1, 1\n\ - ldr r2, [sp, 0xC]\n\ - adds r0, r2\n\ - add r0, r10\n\ - strh r6, [r0]\n\ - ldr r2, _080B093C @ =gTasks\n\ -_080B0910:\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - cmp r0, 0x3\n\ - bhi _080B0920\n\ - b _080B0774\n\ -_080B0920:\n\ - movs r4, 0\n\ - ldr r3, [sp, 0x1C]\n\ - ldr r1, [sp]\n\ - adds r0, r3, r1\n\ - lsls r1, r0, 3\n\ - adds r2, 0x8\n\ - adds r0, r1, r2\n\ - b _080B0950\n\ - .align 2, 0\n\ -_080B0930: .4byte gPlttBufferFaded\n\ -_080B0934: .4byte gPlttBufferUnfaded\n\ -_080B0938: .4byte 0x040000d4\n\ -_080B093C: .4byte gTasks\n\ -_080B0940:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x3\n\ - bhi _080B0958\n\ - lsls r0, r4, 3\n\ - adds r0, r1\n\ - adds r0, r2\n\ -_080B0950:\n\ - movs r3, 0\n\ - ldrsh r0, [r0, r3]\n\ - cmp r0, 0\n\ - beq _080B0940\n\ -_080B0958:\n\ - cmp r4, 0x4\n\ - bne _080B0980\n\ - movs r4, 0\n\ - ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\ - movs r5, 0x3\n\ - negs r5, r5\n\ -_080B0964:\n\ - lsls r1, r4, 2\n\ - adds r1, r3\n\ - ldrb r2, [r1, 0x2]\n\ - adds r0, r5, 0\n\ - ands r0, r2\n\ - strb r0, [r1, 0x2]\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x3\n\ - bls _080B0964\n\ - ldr r0, [sp]\n\ - bl DestroyTask\n\ -_080B0980:\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080B0990: .4byte gSharedMem + 0x19338\n\ - .syntax divided\n"); -} -#endif - -void unref_sub_80B0994(u8 a) -{ - if (a != 0) - sContest.unk1920A_2 = 1; -} - -void sub_80B09B0(u8 a) -{ - if (sContestantStatus[a].hasJudgesAttention) - sub_80B0368(a); - else - sub_80B03A8(a); -} - -extern const struct CompressedSpriteSheet gUnknown_083CC4B4[]; -extern const struct SpritePalette gUnknown_083CC4D4[]; -extern const struct SpriteTemplate gSpriteTemplate_83CC53C[]; - -u8 sub_80B09E4(u8 a) -{ - u8 r5 = gUnknown_02038696[a] * 40 + 32; - u8 r8; - u8 r6; - volatile u8 zero; - - LoadCompressedObjectPic(&gUnknown_083CC4B4[a]); - LoadSpritePalette(&gUnknown_083CC4D4[a]); - r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29); - r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29); - gSprites[r6].oam.tileNum += 64; - - CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32)); - CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gUnknown_02038696[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32)); - - DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300); - - // What is this? - zero = 0; - zero = 0; - - DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300); - - gSprites[r8].data[0] = r6; - gSprites[r6].data[0] = r8; - gSprites[r8].data[1] = a; - gSprites[r6].data[1] = a; - return r8; -} - -void sub_80B0B5C(u8 spriteId) -{ - u8 spriteId2 = gSprites[spriteId].data[0]; - - FreeSpriteOamMatrix(&gSprites[spriteId2]); - DestroySprite(&gSprites[spriteId2]); - DestroySpriteAndFreeResources(&gSprites[spriteId]); -} - -void sub_80B0B98(void) -{ - REG_BLDCNT = 0x3F40; - REG_BLDALPHA = 0x0907; -} - -void sub_80B0BB4(void) -{ - REG_BLDCNT = 0; - REG_BLDALPHA = 0; -} - -void sub_80B0BC4(u8 a, bool8 b) -{ - u8 r5; - - sub_80B0B98(); - shared19338[gSprites[a].data[1]].unk2_1 = 1; - r5 = gSprites[a].data[0]; - StartSpriteAffineAnim(&gSprites[a], 1); - StartSpriteAffineAnim(&gSprites[r5], 1); - gSprites[a].callback = sub_80B0C5C; - gSprites[r5].callback = SpriteCallbackDummy; - if (b == FALSE) - PlaySE(SE_CONTEST_MONS_TURN); - else - PlaySE(SE_PC_LOGIN); -} - -void sub_80B0C5C(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - { - u8 r1 = sprite->data[0]; - - if (gSprites[r1].affineAnimEnded) - { - sprite->invisible = TRUE; - gSprites[r1].invisible = TRUE; - sprite->callback = sub_80B0CB0; - } - } -} - -void sub_80B0CB0(struct Sprite *sprite) -{ - shared19338[sprite->data[1]].unk2_1 = 0; - sub_80B0B5C(sprite->data[0]); - sub_80B0BB4(); -} - -void sub_80B0CDC(u8 a, int unused) -{ - shared19338[a].unk2_1 = 0; -} - -void unref_sub_80B0CF4(void) -{ - //shared18000.unk18000 ^= 1; - gSharedMem[0x18000] ^= 1; - //if (shared18000.unk18000 == 0) - if (gSharedMem[0x18000] == 0) - { - u8 i; - - for (i = 0; i < 4; i++) - { - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA308[i][0], - gUnknown_083CA308[i][1], - gUnknown_083CA310[i][0] + 5, - gUnknown_083CA310[i][1] + 1); - } - sub_80AE514(); - sub_80AEB30(); - } - else - { - sub_80B0D7C(); - } -} - -void sub_80B0D7C(void) -{ - u8 r5 = 0; - u8 sp8[8]; - - if (gSharedMem[0x18000] != 0) - { - u8 i; - s16 r2; - - for (i = 0; i < 4; i++) - { - Text_FillWindowRectDefPalette( - &gUnknown_03004210, - 0, - gUnknown_083CA308[i][0], - gUnknown_083CA308[i][1], - gUnknown_083CA310[i][0] + 5, - gUnknown_083CA310[i][1] + 1); - } - for (i = 0; i < 4; i++) - { - r2 = sContestantStatus[i].unk4; - if (r2 < 0) - { - r2 = -r2; - sp8[0] = CHAR_HYPHEN; - r5++; - } - ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - sp8, - 592 + gUnknown_02038696[i] * 22, - gUnknown_083CA310[gUnknown_02038696[i]][0], - gUnknown_083CA310[gUnknown_02038696[i]][1]); - r5 = 0; - } - for (i = 0; i < 4; i++) - { - r2 = sContestantStatus[i].appeal2; - if (r2 < 0) - { - r2 = -r2; - sp8[0] = CHAR_HYPHEN; - r5++; - } - ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); - Text_InitWindowAndPrintText( - &gUnknown_03004210, - sp8, - 512 + gUnknown_02038696[i] * 20, - gUnknown_083CA308[gUnknown_02038696[i]][0], - gUnknown_083CA308[gUnknown_02038696[i]][1]); - r5 = 0; - } - sub_80AEB30(); - } -} - -void unref_sub_80B0EE8(s32 *a, s32 b) -{ - s32 i; - s32 j; - - for (i = 0; i < b - 1; i++) - { - for (j = b - 1; j > i; j--) - { - if (a[j - 1] > a[j]) - { - s32 temp = a[j]; - - a[j] = a[j - 1]; - a[j - 1] = temp; - } - } - } -} - -// something to do with contest NPC opponents, I think. -void sub_80B0F28(u8 a) -{ - u8 sp0[4]; - u16 sp4[4] = {0}; - s32 i; - s32 r2; - s32 r4; - - for (i = 0; i < 4; i++) - { - sp4[i] = Random(); - for (r2 = 0; r2 < i; r2++) - { - if (sp4[i] == sp4[r2]) - { - i--; - break; - } - } - } - - if (a == 0) - { - for (i = 0; i < 4; i++) - { - gUnknown_02038696[i] = i; - for (r4 = 0; r4 < i; r4++) - { - if (gContestMonConditions[gUnknown_02038696[r4]] < gContestMonConditions[i] - || (gContestMonConditions[gUnknown_02038696[r4]] == gContestMonConditions[i] && sp4[gUnknown_02038696[r4]] < sp4[i])) - { - for (r2 = i; r2 > r4; r2--) - gUnknown_02038696[r2] = gUnknown_02038696[r2 - 1]; - gUnknown_02038696[r4] = i; - break; - } - } - if (r4 == i) - gUnknown_02038696[i] = i; - } - memcpy(sp0, gUnknown_02038696, sizeof(sp0)); - for (i = 0; i < 4; i++) - gUnknown_02038696[sp0[i]] = i; - } - else - { - memset(sp0, 0xFF, sizeof(sp0)); - for (i = 0; i < 4; i++) - { - u8 r2 = sContestantStatus[i].unkB_0; - - while (1) - { - u8 *ptr = &sp0[r2]; - if (*ptr == 0xFF) - { - *ptr = i; - gUnknown_02038696[i] = r2; - break; - } - r2++; - } - } - for (i = 0; i < 3; i++) - { - for (r4 = 3; r4 > i; r4--) - { - if (sContestantStatus[r4 - 1].unkB_0 == sContestantStatus[r4].unkB_0 - && gUnknown_02038696[r4 - 1] < gUnknown_02038696[r4] - && sp4[r4 - 1] < sp4[r4]) - { - u8 temp = gUnknown_02038696[r4]; - - gUnknown_02038696[r4] = gUnknown_02038696[r4 - 1]; - gUnknown_02038696[r4 - 1] = temp; - } - } - } - } -} - -void sub_80B1118(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - //LoadPalette(shared18000.unk18004[5 + i], (gUnknown_02038696[i] + 5) * 16, 32); - LoadPalette(shared18004 + (i + 5) * 16, (gUnknown_02038696[i] + 5) * 16, 32); - } - sub_80AE514(); -} - -void sub_80B114C(u8 contestant) -{ - bool8 r8; - s32 i; - - sContestantStatus[contestant].appeal2 = 0; - sContestantStatus[contestant].appeal1 = 0; - r8 = sub_80AF404(contestant); - if (r8) - { - u16 move = sContestantStatus[contestant].currMove; - u8 effect = gContestMoves[move].effect; - u8 rnd; - - sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory; - if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE) - { - sContestantStatus[contestant].disappointedRepeat = TRUE; - sContestantStatus[contestant].moveRepeatCount++; - } - else - { - sContestantStatus[contestant].moveRepeatCount = 0; - } - sContestantStatus[contestant].appeal1 = gContestEffects[effect].appeal; - sContestantStatus[contestant].appeal2 = gContestEffects[effect].appeal; - shared192D0.jam = gContestEffects[effect].jam; - shared192D0.jam2 = gContestEffects[effect].jam; - shared192D0.contestant = contestant; - for (i = 0; i < 4; i++) - { - sContestantStatus[i].jam = 0; - shared192D0.unnervedPokes[i] = 0; - } - if (sContestantStatus[contestant].hasJudgesAttention && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0) - sContestantStatus[contestant].hasJudgesAttention = 0; - gContestEffectFuncs[effect](); - if (sContestantStatus[contestant].conditionMod == 1) - sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition - 10; - else if (sContestantStatus[contestant].appealTripleCondition) - sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition * 3; - else - sContestantStatus[contestant].appeal2 += sContestantStatus[contestant].condition; - sContestantStatus[contestant].unk16 = 0; - sContestantStatus[contestant].unk15_6 = 0; - if (sub_80B214C(contestant)) - { - u8 r2 = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove); - - if (r2 != 0 && sContestantStatus[contestant].hasJudgesAttention) - { - sContestantStatus[contestant].unk16 = r2; - sContestantStatus[contestant].unk15_6 = 1; - sContestantStatus[contestant].hasJudgesAttention = 0; - sContestantStatus[contestant].unk17 = sContestantStatus[contestant].appeal1 * sContestantStatus[contestant].unk16; - sContestantStatus[contestant].unk15_3 = 1; - } - else - { - if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0) - { - sContestantStatus[contestant].hasJudgesAttention = 1; - sContestantStatus[contestant].unk15_6 = 1; - } - else - { - sContestantStatus[contestant].hasJudgesAttention = 0; - } - } - } - if (sContestantStatus[contestant].disappointedRepeat) - sContestantStatus[contestant].unk18 = (sContestantStatus[contestant].moveRepeatCount + 1) * 10; - if (sContestantStatus[contestant].nervous) - { - sContestantStatus[contestant].hasJudgesAttention = 0; - sContestantStatus[contestant].appeal2 = 0; - sContestantStatus[contestant].appeal1 = 0; - } - shared19328.bits_0 = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove); - if (sContestantStatus[contestant].overrideCategoryExcitementMod) - shared19328.bits_0 = 1; - if (shared19328.bits_0 > 0) - { - if (sContest.applauseLevel + shared19328.bits_0 > 4) - shared19328.unk2 = 60; - else - shared19328.unk2 = 10; - } - else - { - shared19328.unk2 = 0; - } - - rnd = Random() % 3; - for (i = 0; i < 4; i++) - { - if (i != contestant) - { - if (rnd == 0) - break; - rnd--; - } - } - sContestantStatus[contestant].unk1B = i; - } -} - -void SetContestantEffectStringID(u8 a, u8 b) -{ - sContestantStatus[a].effectStringId = b; -} - -void SetContestantEffectStringID2(u8 a, u8 b) -{ - sContestantStatus[a].effectStringId2 = b; -} - -void SetStartledString(u8 contestant, u8 jam) -{ - if (jam >= 60) - SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER); - else if (jam >= 40) - SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP); - else if (jam >= 30) - SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY); - else if (jam >= 20) - SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK); - else if (jam >= 10) - SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN); -} - -void sub_80B146C(u8 contestant, u8 stringId) -{ - StringCopy(gStringVar1, gContestMons[contestant].nickname); - StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); - if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL) - StringCopy(gStringVar3, gText_Contest_Shyness); - else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY) - StringCopy(gStringVar3, gText_Contest_Anxiety); - else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE) - StringCopy(gStringVar3, gText_Contest_Laziness); - else if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART) - StringCopy(gStringVar3, gText_Contest_Hesitancy); - else - StringCopy(gStringVar3, gText_Contest_Fear); - StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[stringId]); - sub_80AF138(); - Text_InitWindow8002EB0(&gMenuWindow, gStringVar4, 776, 1, 15); -} - -void MakeContestantNervous(u8 p) -{ - sContestantStatus[p].nervous = 1; - sContestantStatus[p].currMove = MOVE_NONE; -} - -// Determines turn order? -void sub_80B159C(void) -{ - u8 r12 = 0; - s32 i; - s32 j; - u8 sp0[4]; - u8 sp4[4]; - - for (i = 0; i < 4; i++) - { - sp0[i] = gUnknown_02038696[i]; - sp4[i] = 0; - } - - for (i = 0; i < 4; i++) - { - for (j = 0; j < 4; j++) - { - if (sContestantStatus[j].nextTurnOrder == i) - { - sp0[j] = i; - sp4[j] = 1; - break; - } - } - if (j == 4) - { - for (j = 0; j < 4; j++) - { - if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF) - { - r12 = j; - j++; - break; - } - } - for (; j < 4; j++) - { - if (sp4[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF - && gUnknown_02038696[r12] > gUnknown_02038696[j]) - r12 = j; - } - sp0[r12] = i; - sp4[r12] = 1; - } - } - - for (i = 0; i < 4; i++) - { - shared192D0.turnOrder[i] = sp0[i]; - sContestantStatus[i].nextTurnOrder = 0xFF; - sContestantStatus[i].turnOrderMod = 0; - gUnknown_02038696[i] = sp0[i]; - } -} - -void sub_80B16D0(struct Sprite *sprite) -{ - if (sprite->data[1]++ > 84) - { - sprite->data[1] = 0; - sprite->invisible = TRUE; - sprite->callback = SpriteCallbackDummy; - sContest.unk1920A_4 = 0; - } -} - -void sub_80B1710(u8 a) -{ - u8 spriteId = sContest.unk19216; - - switch (a) - { - case 0: - case 1: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0]; - PlaySE(SE_FAILURE); - break; - case 2: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4; - PlaySE(SE_SUCCESS); - break; - case 3: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8; - PlaySE(SE_SUCCESS); - break; - case 4: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; - PlaySE(SE_WARP_IN); - break; - case 5: // exactly the same as case 4 - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; - PlaySE(SE_WARP_IN); - break; - case 6: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16; - PlaySE(SE_WARP_IN); - break; - case 8: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24; - PlaySE(SE_M_HEAL_BELL); - break; - case 7: - default: - gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20; - PlaySE(SE_WARP_IN); - break; - } - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].callback = sub_80B16D0; - sContest.unk1920A_4 = 1; -} - -void sub_80B1928(void) -{ - s32 i; - - for (i = 0; i < 5; i++) - { - const u8 *src; - - if (i < sContest.applauseLevel) - src = gContestApplauseMeterGfx + 64; - else - src = gContestApplauseMeterGfx; - CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); - CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); - if (sContest.applauseLevel > 4) - sub_80B1A2C(); - } -} - -void unref_sub_80B19D0(void) -{ - u8 str[20]; - StringCopy(str, gUnknown_083CC2EC); - Text_InitWindowAndPrintText(&gUnknown_03004210, str, 680, 0, 0); -} - -s8 Contest_GetMoveExcitement(u16 move) -{ - return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; -} - -// Launches crowd movement task, maybe -u8 sub_80B1A2C(void) -{ - u8 taskId = CreateTask(c3_08130B10, 10); - - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2); - return taskId; -} - -void c3_08130B10(u8 taskId) -{ - if (++gTasks[taskId].data[0] == 1) - { - gTasks[taskId].data[0] = 0; - if (gTasks[taskId].data[3] == 0) - gTasks[taskId].data[4]++; - else - gTasks[taskId].data[4]--; - BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31)); - if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16) - { - gTasks[taskId].data[3] ^= 1; - if (sContest.applauseLevel < 5) - { - BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0)); - DestroyTask(taskId); - } - } - } -} - -void sub_80B1B14(void) -{ - CreateTask(sub_80B1B68, 10); - gSprites[sContest.applauseMeterSpriteId].pos2.x = -70; - gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; - sContest.unk1920A_6 = 1; -} - -void sub_80B1B68(u8 taskId) -{ - struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; - - gTasks[taskId].data[10] += 1664; - sprite->pos2.x += gTasks[taskId].data[10] >> 8; - gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; - if (sprite->pos2.x > 0) - sprite->pos2.x = 0; - if (sprite->pos2.x == 0) - { - sContest.unk1920A_6 = 0; - DestroyTask(taskId); - } -} - -void sub_80B1BDC(void) -{ - if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE) - { - sContest.unk1920A_6 = 0; - } - else - { - CreateTask(sub_80B1C34, 10); - gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; - sContest.unk1920A_6 = 1; - } -} - -void sub_80B1C34(u8 taskId) -{ - struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; - - gTasks[taskId].data[10] += 1664; - sprite->pos2.x -= gTasks[taskId].data[10] >> 8; - gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; - if (sprite->pos2.x < -70) - sprite->pos2.x = -70; - if (sprite->pos2.x == -70) - { - sprite->invisible = TRUE; - sContest.unk1920A_6 = 0; - DestroyTask(taskId); - } -} - -void sub_80B1CBC(s8 a) -{ - u8 taskId = CreateTask(sub_80B1CFC, 5); - - gTasks[taskId].data[0] = a; - sContest.unk1920A_5 = 1; -} - -void sub_80B1CFC(u8 taskId) -{ - switch (gTasks[taskId].data[10]) - { - case 0: - sub_80B1B14(); - gTasks[taskId].data[10]++; - break; - case 1: - if (!sContest.unk1920A_6) - { - nullsub_18(gTasks[taskId].data[0]); - gTasks[taskId].data[10]++; - } - break; - case 2: - if (gTasks[taskId].data[11]++ > 20) - { - gTasks[taskId].data[11] = 0; - sub_80B1928(); - sContest.unk1920A_5 = 0; - DestroyTask(taskId); - } - break; - } -} - -void unref_sub_80B1D84(void) -{ - gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; - gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; -} - -void unref_sub_80B1DB8(void) -{ - gSprites[sContest.applauseMeterSpriteId].invisible = TRUE; -} - -void sub_80B1DDC(void) -{ - CreateTask(sub_80B1DFC, 15); - sContest.unk1920A_7 = 1; -} - -void sub_80B1DFC(u8 taskId) -{ - if (gTasks[taskId].data[10]++ > 6) - { - register struct Task *task asm("r0"); - register u32 r4 asm("r4") = taskId * 4; - - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[11] == 0) - { - DmaCopy32Defvars(3, shared16800, (void *)(VRAM + 0x2000), 0x1000); - } - else - { - DmaCopy32Defvars(3, shared15800, (void *)(VRAM + 0x2000), 0x1000); - gTasks[taskId].data[12]++; - } - - // Why won't this match the normal way? - asm("add %0, %1, #0\n\t" - "add %0, %3\n\t" - "lsl %0, #3\n\t" - "add %0, %2\n\t" - : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId)); - - //gTasks[taskId].data[11] ^= 1; - task->data[11] ^= 1; - - //if (gTasks[taskId].data[12] == 9) - if (task->data[12] == 9) - { - sContest.unk1920A_7 = 0; - DestroyTask(taskId); - } - } -} - -#define tBlendColor data[0] -#define tBlendCoeff data[1] - -void sub_80B1EA8(s8 a, s8 b) -{ - u8 taskId = CreateTask(sub_80B1F4C, 10); - u16 blendColor; - u8 blendCoeff; - u8 r3; - - if (a > 0) - { - blendColor = RGB(30, 27, 8); - if (b > 0) - { - blendCoeff = 0; - r3 = sContest.applauseLevel * 3; - } - else - { - blendCoeff = sContest.applauseLevel * 3; - r3 = 0; - } - } - else - { - blendColor = 0; - if (b > 0) - { - blendCoeff = 0; - r3 = 12; - } - else - { - blendCoeff = 12; - r3 = 0; - } - } - gTasks[taskId].tBlendColor = blendColor; - gTasks[taskId].tBlendCoeff = blendCoeff; - gTasks[taskId].data[2] = b; - gTasks[taskId].data[3] = r3; - sContest.unk1920B_0 = 0; -} - -void sub_80B1F4C(u8 taskId) -{ - if (gTasks[taskId].data[10]++ >= 0) - { - gTasks[taskId].data[10] = 0; - if (gTasks[taskId].data[2] > 0) - gTasks[taskId].tBlendCoeff++; - else - gTasks[taskId].tBlendCoeff--; - BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); - BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); - if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) - { - DestroyTask(taskId); - sContest.unk1920B_0 = 0; - } - } -} - -#undef tBlendColor -#undef tBlendCoeff - -void sub_80B1FD0(bool8 a) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (sContestantStatus[i].turnOrderMod != 0 && a) - { - CpuCopy32( - GetTurnOrderNumberGfx(i), - (void *)(VRAM + 0x10000 + (gSprites[shared19338[i].unk1].oam.tileNum + 5) * 32), - 64); - gSprites[shared19338[i].unk1].pos1.y = gUnknown_083CA33C[gUnknown_02038696[i]]; - gSprites[shared19338[i].unk1].invisible = FALSE; - } - else - { - gSprites[shared19338[i].unk1].invisible = TRUE; - } - } -} - -const u8 *GetTurnOrderNumberGfx(u8 contestant) -{ - if (sContestantStatus[contestant].turnOrderMod != 1) - return gContestNextTurnRandomGfx; - else - return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64; -} - -void sub_80B20C4(void) -{ - s32 i; - - for (i = 0; i < 4; i++) - { - if (shared192D0.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) - { - u8 r4 = gUnknown_02038696[i] * 5 + 2; - u16 r0 = sub_80AEFE8(i, 3); - - *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0; - *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1; - *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16; - *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17; - PlaySE(SE_CONTEST_ICON_CHANGE); - } - } -} - -bool8 sub_80B214C(u8 a) -{ - if (sContestantStatus[a].disappointedRepeat || sContestantStatus[a].nervous) - return FALSE; - else - return TRUE; -} - -void sub_80B2184(void) -{ - s32 i; - - ((vBgCnt *)®_BG1CNT)->priority = 0; - ((vBgCnt *)®_BG1CNT)->screenSize = 1; - ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; - - gBattle_BG1_X = DISPLAY_WIDTH; - gBattle_BG1_Y = DISPLAY_HEIGHT; - REG_BG1HOFS = DISPLAY_WIDTH; - REG_BG1VOFS = DISPLAY_HEIGHT; - - DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); - LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000)); - - ((vBgCnt *)®_BG1CNT)->charBaseBlock = 0; - - for (i = 0; i < 4; i++) - { - gSprites[shared19338[i].unk0].oam.priority = 1; - gSprites[shared19338[i].unk1].oam.priority = 1; - } - - ((vBgCnt *)®_BG2CNT)->priority = 1; - ((vBgCnt *)®_BG0CNT)->priority = 1; - ((vBgCnt *)®_BG1CNT)->screenSize = 2; -} - -void sub_80B2280(void) -{ - s32 i; - - DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000); - DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); - - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - - ((vBgCnt *)®_BG1CNT)->priority = 1; - ((vBgCnt *)®_BG1CNT)->screenSize = 0; - ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; - ((vBgCnt *)®_BG1CNT)->charBaseBlock = 2; - - for (i = 0; i < 4; i++) - { - gSprites[shared19338[i].unk0].oam.priority = 0; - gSprites[shared19338[i].unk1].oam.priority = 0; - } -} - -void sub_80B237C(u8 taskId) -{ - gBattle_BG1_X = 0; - gBattle_BG1_Y = DISPLAY_HEIGHT; - PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); - gTasks[taskId].func = sub_80B23BC; -} - -void sub_80B23BC(u8 taskId) -{ - if ((s16)(gBattle_BG1_Y -= 7) < 0) - gBattle_BG1_Y = 0; - if (gBattle_BG1_Y == 0) // Why cast? - { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80B2400; - } -} - -void sub_80B2400(u8 taskId) -{ - s32 i; - - switch (gTasks[taskId].data[0]) - { - case 0: - for (i = 0; i < 4; i++) - sContest.unk19218[i] = gUnknown_02038696[i]; - sub_80AFA5C(); - sub_80B0588(); - sub_80AEF50(); - sub_80B1118(); - sub_80B1FD0(TRUE); - sub_80AFFA0(); - gTasks[taskId].data[0] = 1; - break; - case 1: - if (gIsLinkContest & 1) - { - u8 taskId2; - - sContest.unk1920B_2 = 1; - if (sub_80AE074()) - sub_80AF438(); - taskId2 = CreateTask(sub_80C8C80, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); - sub_80AF860(); - gTasks[taskId].data[0] = 2; - } - else - { - sub_80AF438(); - gTasks[taskId].data[0] = 3; - } - break; - case 2: - if (!sContest.unk1920B_2) - gTasks[taskId].data[0] = 3; - break; - case 3: - sub_80AF120(); - sub_80AEB30(); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80B253C; - break; - } -} - -void sub_80B2508(u8 taskId) -{ - if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) - gTasks[taskId].func = sub_80ADCDC; -} - -void sub_80B253C(u8 taskId) -{ - if (gTasks[taskId].data[2] < 10) - { - gTasks[taskId].data[2]++; - } - else - { - if (gTasks[taskId].data[1] == 0) - { - if (gTasks[taskId].data[0] == 16) - gTasks[taskId].data[1]++; - else - gTasks[taskId].data[0]++; - } - else - { - if (gTasks[taskId].data[0] == 0) - { - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_80B25A4; - } - else - { - gTasks[taskId].data[0]--; - } - } - } -} - -void sub_80B25A4(u8 taskId) -{ - if (gTasks[taskId].data[2] < 10) - { - gTasks[taskId].data[2]++; - } - else - { - gTasks[taskId].data[2] = 0; - PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0); - gTasks[taskId].func = sub_80B2508; - } -} - -void sub_80B25E4(u8 a) -{ - s32 i; - u8 taskId; - - for (i = 0; i < 4; i++) - { - gSprites[shared19338[i].unk0].oam.matrixNum = AllocOamMatrix(); - gSprites[shared19338[i].unk0].oam.affineMode = 1; - StartSpriteAffineAnim(&gSprites[shared19338[i].unk0], a); - if (a == 2) - { - AnimateSprite(&gSprites[shared19338[i].unk0]); - gSprites[shared19338[i].unk0].invisible = FALSE; - } - } - taskId = CreateTask(sub_80B26C8, 5); - gTasks[taskId].data[0] = a; - sContest.unk1920B_1 = 1; -} - -void sub_80B26C8(u8 taskId) -{ - s32 i; - - if (gSprites[shared19338[0].unk0].affineAnimEnded) - { - if ((u8)gTasks[taskId].data[0] == 1) - { - for (i = 0; i < 4; i++) - gSprites[shared19338[i].unk0].invisible = TRUE; - } - for (i = 0; i < 4; i++) - FreeSpriteOamMatrix(&gSprites[shared19338[i].unk0]); - sContest.unk1920B_1 = 0; - DestroyTask(taskId); - } -} - -u16 SanitizeMove(u16 move) -{ - if (move >= NUM_MOVES) - move = MOVE_POUND; - return move; -} - -u16 SanitizeSpecies(u16 species) -{ - if (species >= NUM_SPECIES) - species = SPECIES_NONE; - return species; -} - -void sub_80B2790(u8 a) -{ - s32 i; - u16 move = SanitizeMove(sContestantStatus[a].currMove); - u16 species = SanitizeSpecies(gContestMons[a].species); - u8 r5_2; - - memset(&shared19348, 0, sizeof(shared19348)); - ClearBattleAnimationVars(); - for (i = 0; i < 4; i++) - gBattleMonForms[i] = 0; - switch (move) - { - case MOVE_CURSE: - if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST) - gAnimMoveTurn = 0; - else - gAnimMoveTurn = 1; - break; - case MOVE_TRANSFORM: - case MOVE_ROLE_PLAY: - r5_2 = sContestantStatus[a].unk1B; - shared19348.unk2 = SanitizeSpecies(gContestMons[r5_2].species); - shared19348.unk10 = gContestMons[r5_2].personality; - shared19348.unk4_0 = 1; - break; - case MOVE_RETURN: - gAnimFriendship = 0xFF; - break; - case MOVE_FRUSTRATION: - gAnimFriendship = 0; - break; - case MOVE_SOLAR_BEAM: - case MOVE_RAZOR_WIND: - case MOVE_SKULL_BASH: - case MOVE_SKY_ATTACK: - if (sContest.unk1925E == 0) - { - sContest.unk1925E = 2; - gAnimMoveTurn = 0; - } - else - { - gAnimMoveTurn = 1; - } - break; - } - sub_80B2968(); -} - -void sub_80B28CC(int unused) -{ - memset(&shared19348, 0, sizeof(shared19348)); - if (sContest.unk1925E != 0) - sContest.unk1925E--; -} - -void sub_80B28F0(u8 a) -{ - shared19348.unk5 = a; - shared19348.unk0 = SanitizeSpecies(gContestMons[a].species); - shared19348.unk8 = gContestMons[a].personality; - shared19348.unkC = gContestMons[a].otId; -} - -void sub_80B292C(void) -{ - gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]); - sub_80B2968(); -} - -void sub_80B2968(void) -{ - struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]]; - - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->pos1.x = GetBattlerSpriteCoord(3, 0); - sprite->pos1.y = GetBattlerSpriteCoord(3, 1); - sprite->invisible = TRUE; -} - -void SelectContestMoveBankTarget(u16 move) -{ - switch (gBattleMoves[move].target) - { - case TARGET_UNK2: - case TARGET_USER: - gBattlerTarget = 2; - break; - case TARGET_SELECTED_POKEMON: - case TARGET_RANDOM: - case TARGET_BOTH_ENEMIES: - case TARGET_ALL_EXCEPT_USER: - default: - gBattlerTarget = 3; - break; - } -} - -bool8 Contest_SaveWinner(u8 a) -{ - s32 i; - u8 r7 = Random() % 3; - - for (i = 0; i < 3; i++) - { - if (gContestFinalStandings[i] == 0) - break; - } - if (a == 0xFF && i != gContestPlayerMonIndex) - return FALSE; - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - r7 += 0; - break; - case CONTEST_CATEGORY_BEAUTY: - r7 += 3; - break; - case CONTEST_CATEGORY_CUTE: - r7 += 6; - break; - case CONTEST_CATEGORY_SMART: - r7 += 9; - break; - case CONTEST_CATEGORY_TOUGH: - r7 += 12; - break; - } - if (a != 0xFE) - { - u8 r4 = sub_80B2C4C(a, 1); - - gSaveBlock1.contestWinners[r4].personality = gContestMons[i].personality; - gSaveBlock1.contestWinners[r4].species = gContestMons[i].species; - gSaveBlock1.contestWinners[r4].otId = gContestMons[i].otId; - StringCopy(gSaveBlock1.contestWinners[r4].nickname, gContestMons[i].nickname); - StringCopy(gSaveBlock1.contestWinners[r4].trainerName, gContestMons[i].trainerName); - if (a != 0xFF) - gSaveBlock1.contestWinners[r4].contestCategory = gSpecialVar_ContestCategory; - else - gSaveBlock1.contestWinners[r4].contestCategory = r7; - } - else - { - shared15DE0.personality = gContestMons[i].personality; - shared15DE0.otId = gContestMons[i].otId; - shared15DE0.species = gContestMons[i].species; - StringCopy(shared15DE0.nickname, gContestMons[i].nickname); - if (gIsLinkContest & 1) - StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name); - else - StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName); - shared15DE0.contestCategory = r7; - } - return TRUE; -} - -u8 sub_80B2C4C(u8 a, u8 b) -{ - s32 i; - - switch (a) - { - case 0: - case 1: - return a; - case 2: - if (b != 0) - { - for (i = 4; i >= 3; i--) - memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); - } - return 2; - case 3: - if (b != 0) - { - for (i = 7; i >= 6; i--) - memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); - } - return 5; - default: - switch (gSpecialVar_ContestCategory) - { - case CONTEST_CATEGORY_COOL: - return 8; - case CONTEST_CATEGORY_BEAUTY: - return 9; - case CONTEST_CATEGORY_CUTE: - return 10; - case CONTEST_CATEGORY_SMART: - return 11; - case CONTEST_CATEGORY_TOUGH: - default: - return 12; - } - } -} - -void Contest_ResetWinners(void) -{ - s32 i; - - for (i = 0; i < 8; i++) - gSaveBlock1.contestWinners[i] = gUnknown_083CC5D0[i]; -} +// File boundary diff --git a/src/contest_2.c b/src/contest_2.c new file mode 100644 index 000000000..58da38acf --- /dev/null +++ b/src/contest_2.c @@ -0,0 +1,4186 @@ +#include "global.h" +#include "contest.h" +#include "battle.h" +#include "battle_anim.h" +#include "blend_palette.h" +#include "constants/event_objects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest_ai.h" +#include "contest_effect.h" +#include "data2.h" +#include "decompress.h" +#include "ewram.h" +#include "graphics.h" +#include "link.h" +#include "m4a.h" +#include "menu.h" +#include "palette.h" +#include "random.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" + +#include "contest_internal.h" + +extern void Task_LinkContest_CommunicateAppealsState(u8 taskId); +extern void Task_UpdateContestantBoxOrder(u8 taskId); + +extern struct MusicPlayerInfo gMPlayInfo_SE1; +extern u8 gBattleMonForms[]; +extern u8 gDisplayedStringBattle[]; +extern u8 gBattlerTarget; +extern u8 gBattlerSpriteIds[]; +extern struct Window gWindowTemplate_Contest_MoveDescription; +extern struct SpriteTemplate gCreatingSpriteTemplate; +extern void (*const gContestEffectFuncs[])(void); + +#include "data/contest_opponents.h" + +const u8 gUnknown_083CA308[][2] = { + {19, 0}, + {19, 5}, + {19, 10}, + {19, 15}, +}; + +const u8 gUnknown_083CA310[][2] = { + {25, 0}, + {25, 5}, + {25, 10}, + {25, 15}, +}; + +const u8 gUnknown_083CA318[][2] = { + { 20, 2 }, + { 20, 7 }, + { 20, 12 }, + { 20, 17 }, + { 24, 2 }, + { 24, 7 }, + { 24, 12 }, + { 24, 17 }, + { 220, 24 }, + { 220, 64 }, + { 220, 104 }, + { 220, 144 }, +}; + +const u8 gUnknown_083CA330[][2] = { + { 224, 24 }, + { 224, 64 }, + { 224, 104 }, + { 224, 144 }, +}; + +const u8 sSliderHeartYPositions[] = { 36, 76, 116, 156 }; +const u8 gUnknown_083CA33C[] = { 36, 76, 116, 156 }; + +const u8 gUnknown_083CA340[][4] = { + { 0, 31, 9, 39 }, + { 0, 33, 9, 39 }, + { 0, 35, 9, 39 }, + { 0, 37, 9, 39 }, +}; + +const struct SpriteSheet sSpriteSheet_SliderHeart = { + .data = gTiles_8D1975C, + .size = 0x20, + .tag = 20004 +}; + +const struct OamData gOamData_83CA358 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +// Idle +const union AffineAnimCmd gSpriteAffineAnim_83CA360[] = { + AFFINEANIMCMD_FRAME(Q_8_8(1.0), Q_8_8(1.0), 0, 0), + AFFINEANIMCMD_END +}; + +// Shrink +const union AffineAnimCmd gSpriteAffineAnim_83CA370[] = { + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(-10, -10, -20, 20), + AFFINEANIMCMD_END +}; + +// Grow +const union AffineAnimCmd gSpriteAffineAnim_83CA388[] = { + AFFINEANIMCMD_FRAME(56, 56, 0, 0), + AFFINEANIMCMD_FRAME(10, 10, 20, 20), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83CA3A0[] = { + gSpriteAffineAnim_83CA360, + gSpriteAffineAnim_83CA370, + gSpriteAffineAnim_83CA388, +}; + +const struct SpriteTemplate sSpriteTemplate_SliderHeart = { + .tileTag = 20004, + .paletteTag = 44000, + .oam = &gOamData_83CA358, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CA3A0, + .callback = SpriteCallbackDummy +}; + +// One graphic for each contestant. +// Yes, it's loaded four times. +const struct CompressedSpriteSheet gUnknown_083CA3C4[] = { + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20006 }, + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20007 }, + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20008 }, + { .data = gContestNextTurnGfx, .size = 0x100, .tag = 20009 }, +}; + +const struct SpritePalette gUnknown_083CA3E4 = { + .data = gContestPal, .tag = 20006 +}; + +const struct OamData gOamData_83CA3EC = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_83CA3F4[] = { + { .tileTag = 20006, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + { .tileTag = 20007, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + { .tileTag = 20008, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, + { .tileTag = 20009, .paletteTag = 20006, .oam = &gOamData_83CA3EC, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }, +}; + +const struct Subsprite gSubspriteTable_83CA454[] = { + { .x = -26, .y = -4, .shape = ST_OAM_H_RECTANGLE, .size = 1, .tileOffset = 0, .priority = 0 }, + { .x = 6, .y = -4, .shape = ST_OAM_H_RECTANGLE, .size = 1, .tileOffset = 4, .priority = 0 }, +}; + +const struct SubspriteTable gSubspriteTables_83CA464[] = { + { 2, gSubspriteTable_83CA454 }, +}; + +const struct CompressedSpriteSheet gUnknown_083CA46C = { + .data = gContestApplauseGfx, + .size = 0x400, + .tag = 44002 +}; + +const struct SpritePalette gUnknown_083CA474 = { + .data = gContestPal, + .tag = 44002 +}; + +const struct OamData gOamData_83CA47C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_83CA484 = { + .tileTag = 44002, + .paletteTag = 44002, + .oam = &gOamData_83CA47C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gOamData_83CA49C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 3, + .paletteNum = 2 +}; + +const struct SpriteTemplate sSpriteTemplate_Judge = { + .tileTag = 20005, + .paletteTag = 20005, + .oam = &gOamData_83CA49C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct CompressedSpriteSheet sSpriteSheet_Judge = { + .data = gContestJudgeGfx, + .size = 0x800, + .tag = 20005 +}; + +const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = { + .data = gContestJudgeSymbolsGfx, + .size = 0x380, + .tag = 44000 +}; + +const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = { + .data = gContest3Pal, + .tag = 44000 +}; + +const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = { + .tileTag = 44000, + .paletteTag = 44000, + .oam = &gOamData_837DF2C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +#if defined(ENGLISH) +#include "data/text/contest_en.h" +#elif defined(GERMAN) +#include "data/text/contest_de.h" +#endif //ENGLISH + +UNUSED +const u8 ALIGNED(2) _unk_83CC3BE[] = __("ピラ"); +const u8 gUnknownText_UnknownFormatting2[] = _("{COLOR GREEN}{SHADOW RED}"); +const u8 gUnknownText_UnknownFormatting3[] = _("{COLOR LIGHT_GREY}"); + +const struct CompressedSpriteSheet gUnknown_083CC3AC = { + .data = gContestNumbers_UnusedGfx, + .size = 0x200, + .tag = 20000 +}; + +const struct CompressedSpritePalette gUnknown_083CC3B4[] = { + { .data = gContestNumbers_UnusedPal, .tag = 20000 }, + { .data = gContestNumbers_UnusedPal, .tag = 20001 }, + { .data = gContestNumbers_UnusedPal, .tag = 20002 }, + { .data = gContestNumbers_UnusedPal, .tag = 20003 }, +}; + +const union AnimCmd gSpriteAnim_83CC3D4[] = { + ANIMCMD_FRAME( 0, 1), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83CC3DC[] = { + ANIMCMD_FRAME( 4, 1), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83CC3E4[] = { + ANIMCMD_FRAME( 8, 1), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83CC3EC[] = { + ANIMCMD_FRAME(12, 1), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83CC3F4[] = { + gSpriteAnim_83CC3D4, + gSpriteAnim_83CC3DC, + gSpriteAnim_83CC3E4, + gSpriteAnim_83CC3EC, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC404[] = { + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC414[] = { + AFFINEANIMCMD_FRAME(-15, -15, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC424[] = { + AFFINEANIMCMD_FRAME(31, 31, 0, 0), + AFFINEANIMCMD_FRAME(15, 15, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83CC43C[] = { + gSpriteAffineAnim_83CC404, + gSpriteAffineAnim_83CC414, + gSpriteAffineAnim_83CC424, + NULL, +}; + +const struct OamData gOamData_83CC44C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_83CC454[] = { + { + .tileTag = 20000, + .paletteTag = 20000, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 20000, + .paletteTag = 20001, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 20000, + .paletteTag = 20002, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 20000, + .paletteTag = 20003, + .oam = &gOamData_83CC44C, + .anims = gSpriteAnimTable_83CC3F4, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC43C, + .callback = SpriteCallbackDummy, + }, +}; + +const struct CompressedSpriteSheet gUnknown_083CC4B4[] = { + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33000 }, + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33001 }, + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33002 }, + { .data = gBlankGfxCompressed, .size = 0x1000, .tag = 33003 }, +}; + +const struct SpritePalette gUnknown_083CC4D4[] = { + { .data = eContestTempSave.cachedWindowPalettes[5], .tag = 33000 }, + { .data = eContestTempSave.cachedWindowPalettes[6], .tag = 33001 }, + { .data = eContestTempSave.cachedWindowPalettes[7], .tag = 33002 }, + { .data = eContestTempSave.cachedWindowPalettes[8], .tag = 33003 }, +}; + +const struct OamData gOamData_83CC4F4 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, + .paletteNum = 0 +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC4FC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83CC50C[] = { + AFFINEANIMCMD_FRAME( 3, 3, 0, 15), + AFFINEANIMCMD_FRAME(-3, -3, 0, 15), + AFFINEANIMCMD_FRAME( 3, 3, 0, 15), + AFFINEANIMCMD_FRAME(-3, -3, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83CC534[] = { + gSpriteAffineAnim_83CC4FC, + gSpriteAffineAnim_83CC50C, +}; + +const struct SpriteTemplate gSpriteTemplate_83CC53C[] = { + { + .tileTag = 33000, + .paletteTag = 33000, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 33001, + .paletteTag = 33001, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 33002, + .paletteTag = 33002, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 33003, + .paletteTag = 33003, + .oam = &gOamData_83CC4F4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83CC534, + .callback = SpriteCallbackDummy, + }, +}; + +const u8 gUnknown_083CC59C[] = _("{HIGHLIGHT TRANSPARENT}{COLOR}"); +const u8 gText_Slash[] = _("/"); + +const u16 gUnknown_083CC5A4[] = { + RGB(19, 3, 0), + RGB(6, 15, 6), + RGB(19, 18, 0), + RGB(4, 6, 19), + RGB(31, 0, 0), + RGB(0, 31, 0), + RGB(31, 31, 0), + RGB(0, 0, 31), +}; + +const u8 gContestExcitementTable[][5] = +{ + [CONTEST_CATEGORY_COOL] = { + [CONTEST_CATEGORY_COOL] = +1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_TOUGH] = 0 + }, + [CONTEST_CATEGORY_BEAUTY] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = +1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_TOUGH] = -1 + }, + [CONTEST_CATEGORY_CUTE] = { + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = +1, + [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = -1 + }, + [CONTEST_CATEGORY_SMART] = { + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = +1, + [CONTEST_CATEGORY_TOUGH] = 0 + }, + [CONTEST_CATEGORY_TOUGH] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = +1 + } +}; + +#if defined(ENGLISH) +#define CONTEST_WINNER_1_NICKNAME "TAILTA" +#define CONTEST_WINNER_1_OTNAME "WYATT" +#define CONTEST_WINNER_2_NICKNAME "BRELO" +#define CONTEST_WINNER_2_OTNAME "LIANA" +#define CONTEST_WINNER_3_NICKNAME "PELEP" +#define CONTEST_WINNER_3_OTNAME "TIERA" +#define CONTEST_WINNER_4_NICKNAME "PELEP" +#define CONTEST_WINNER_4_OTNAME "TIERA" +#define CONTEST_WINNER_5_NICKNAME "PELEP" +#define CONTEST_WINNER_5_OTNAME "TIERA" +#define CONTEST_WINNER_6_NICKNAME "KITSY" +#define CONTEST_WINNER_6_OTNAME "OMAR" +#define CONTEST_WINNER_7_NICKNAME "GULPS" +#define CONTEST_WINNER_7_OTNAME "MACIE" +#define CONTEST_WINNER_8_NICKNAME "LOUDED" +#define CONTEST_WINNER_8_OTNAME "BRYANT" +#elif defined(GERMAN) +#define CONTEST_WINNER_1_NICKNAME "SCHWALBI" +#define CONTEST_WINNER_1_OTNAME "ROSEL" +#define CONTEST_WINNER_2_NICKNAME "TUFUNG" +#define CONTEST_WINNER_2_OTNAME "WITOLD" +#define CONTEST_WINNER_3_NICKNAME "LIPPER" +#define CONTEST_WINNER_3_OTNAME "RUFUS" +#define CONTEST_WINNER_4_NICKNAME "LIPPER" +#define CONTEST_WINNER_4_OTNAME "ELLEN" +#define CONTEST_WINNER_5_NICKNAME "LIPPER" +#define CONTEST_WINNER_5_OTNAME "AVIA" +#define CONTEST_WINNER_6_NICKNAME "CONEC" +#define CONTEST_WINNER_6_OTNAME "HAUBERT" +#define CONTEST_WINNER_7_NICKNAME "SCHLUCKI" +#define CONTEST_WINNER_7_OTNAME "HEILWIG" +#define CONTEST_WINNER_8_NICKNAME "KEELO" +#define CONTEST_WINNER_8_OTNAME "ISEGRIM" +#endif + +const struct ContestWinner gDefaultContestWinners[] = { + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_TAILLOW, + .contestCategory = CONTEST_CATEGORY_SMART, + .nickname = _(CONTEST_WINNER_1_NICKNAME), + .trainerName = _(CONTEST_WINNER_1_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_BRELOOM, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .nickname = _(CONTEST_WINNER_2_NICKNAME), + .trainerName = _(CONTEST_WINNER_2_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_PELIPPER, + .contestCategory = CONTEST_CATEGORY_COOL, + .nickname = _(CONTEST_WINNER_3_NICKNAME), + .trainerName = _(CONTEST_WINNER_3_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_PELIPPER, + .contestCategory = CONTEST_CATEGORY_COOL, + .nickname = _(CONTEST_WINNER_4_NICKNAME), + .trainerName = _(CONTEST_WINNER_4_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_PELIPPER, + .contestCategory = CONTEST_CATEGORY_COOL, + .nickname = _(CONTEST_WINNER_5_NICKNAME), + .trainerName = _(CONTEST_WINNER_5_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_DELCATTY, + .contestCategory = CONTEST_CATEGORY_SMART, + .nickname = _(CONTEST_WINNER_6_NICKNAME), + .trainerName = _(CONTEST_WINNER_6_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_GULPIN, + .contestCategory = CONTEST_CATEGORY_CUTE, + .nickname = _(CONTEST_WINNER_7_NICKNAME), + .trainerName = _(CONTEST_WINNER_7_OTNAME), + }, + { + .personality = 0, + .otId = 0xFFFF, + .species = SPECIES_LOUDRED, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .nickname = _(CONTEST_WINNER_8_NICKNAME), + .trainerName = _(CONTEST_WINNER_8_OTNAME), + }, +}; + +void TryPutPlayerLast(void) +{ + if (!(gIsLinkContest & 1)) + gContestPlayerMonIndex = 3; +} + +bool8 IsPlayerLinkLeader(void) +{ + if (gContestPlayerMonIndex == gContestLinkLeaderIndex) + return TRUE; + else + return FALSE; +} + +void Contest_CreatePlayerMon(u8 partyIndex) +{ + u8 name[20]; + u16 heldItem; + s16 cool; + s16 beauty; + s16 cute; + s16 smart; + s16 tough; + + StringCopy(name, gSaveBlock2.playerName); + Text_StripExtCtrlCodes(name); + if (gIsLinkContest & 1) + { + u8 temp = name[5]; + + name[5] = EOS; + name[7] = temp; + } + memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8); + if (gSaveBlock2.playerGender == MALE) + gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; + else + gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; + gContestMons[gContestPlayerMonIndex].flags = 0; + gContestMons[gContestPlayerMonIndex].unk2C[0] = 0; + gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); + GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); + StringGetEnd10(name); + if (gIsLinkContest & 1) + { + Text_StripExtCtrlCodes(name); + if (GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE) + { + name[5] = EOS; + name[10] = EXT_CTRL_CODE_BEGIN; + } + else + { + u8 temp = name[5]; + + name[5] = EOS; + name[10] = temp; + } + } + memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, 11); + gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL); + gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY); + gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE); + gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART); + gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH); + gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN); + gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1); + gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2); + gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3); + gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4); + gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY); + gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID); + + heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM); + cool = gContestMons[gContestPlayerMonIndex].cool; + beauty = gContestMons[gContestPlayerMonIndex].beauty; + cute = gContestMons[gContestPlayerMonIndex].cute; + smart = gContestMons[gContestPlayerMonIndex].smart; + tough = gContestMons[gContestPlayerMonIndex].tough; + if (heldItem == ITEM_RED_SCARF) + cool += 20; + else if (heldItem == ITEM_BLUE_SCARF) + beauty += 20; + else if (heldItem == ITEM_PINK_SCARF) + cute += 20; + else if (heldItem == ITEM_GREEN_SCARF) + smart += 20; + else if (heldItem == ITEM_YELLOW_SCARF) + tough += 20; + if (cool > 255) + cool = 255; + if (beauty > 255) + beauty = 255; + if (cute > 255) + cute = 255; + if (smart > 255) + smart = 255; + if (tough > 255) + tough = 255; + gContestMons[gContestPlayerMonIndex].cool = cool; + gContestMons[gContestPlayerMonIndex].beauty = beauty; + gContestMons[gContestPlayerMonIndex].cute = cute; + gContestMons[gContestPlayerMonIndex].smart = smart; + gContestMons[gContestPlayerMonIndex].tough = tough; +} + +void Contest_InitAllPokemon(u8 contestType, u8 rank) +{ + s32 i; + u8 opponentsCount = 0; + u8 opponents[ARRAY_COUNT(gContestOpponents) + 1]; + + TryPutPlayerLast(); + + // Find all suitable opponents + for (i = 0; i < (s32)ARRAY_COUNT(gContestOpponents); i++) + { + if (rank == gContestOpponents[i].whichRank) + { + if (contestType == 0 && gContestOpponents[i].aiPool_Cool) + opponents[opponentsCount++] = i; + else if (contestType == 1 && gContestOpponents[i].aiPool_Beauty) + opponents[opponentsCount++] = i; + else if (contestType == 2 && gContestOpponents[i].aiPool_Cute) + opponents[opponentsCount++] = i; + else if (contestType == 3 && gContestOpponents[i].aiPool_Smart) + opponents[opponentsCount++] = i; + else if (contestType == 4 && gContestOpponents[i].aiPool_Tough) + opponents[opponentsCount++] = i; + } + } + opponents[opponentsCount] = 0xFF; + + // Choose three random opponents from the list + for (i = 0; i < 3; i++) + { + u16 rnd = Random() % opponentsCount; + s32 j; + + gContestMons[i] = gContestOpponents[opponents[rnd]]; + for (j = rnd; opponents[j] != 0xFF; j++) + opponents[j] = opponents[j + 1]; + opponentsCount--; + } + +#ifndef NONMATCHING + // Compiler, please put i in r5. Thanks. + asm(""::"r"(i)); + asm(""::"r"(i)); + asm(""::"r"(i)); + asm(""::"r"(i)); + asm(""::"r"(i)); +#endif + + Contest_CreatePlayerMon(gContestMonPartyIndex); +} + +// GetContestAvailability? +u8 CanMonParticipateInContest(struct Pokemon *pkmn) +{ + u8 ribbon; + u8 retVal; + + if (GetMonData(pkmn, MON_DATA_IS_EGG)) + return 3; + if (GetMonData(pkmn, MON_DATA_HP) == 0) + return 4; + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON); + break; + case CONTEST_CATEGORY_BEAUTY: + ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON); + break; + case CONTEST_CATEGORY_CUTE: + ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON); + break; + case CONTEST_CATEGORY_SMART: + ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON); + break; + case CONTEST_CATEGORY_TOUGH: + ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON); + break; + default: + return 0; + } + + // Couldn't get this to match any other way. + // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below + // the current contest rank. + if (ribbon > gSpecialVar_ContestRank) + retVal = 2; + else if (ribbon >= gSpecialVar_ContestRank) + retVal = 1; + else + retVal = 0; + return retVal; +} + +void DrawContestantWindowText(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA308[gContestantTurnOrder[i]][0], + gUnknown_083CA308[gContestantTurnOrder[i]][1], + gUnknown_083CA310[gContestantTurnOrder[i]][0] + 5, + gUnknown_083CA310[gContestantTurnOrder[i]][1] + 1); + PrintContestantTrainerName(i); + PrintContestantMonName(i); + } +} + +u8 *Contest_CopyStringWithColor(u8 *dest, const u8 *src, u8 color) +{ + dest = StringCopy(dest, gUnknown_083CC59C); // {HIGHLIGHT TRANSPARENT}{COLOR}$ + *dest++ = color; + dest = StringCopy(dest, src); + return dest; +} + +void PrintContestantTrainerName(u8 contestant) +{ + PrintContestantTrainerNameWithColor(contestant, contestant + 10); +} + +void PrintContestantTrainerNameWithColor(u8 contestant, u8 color) +{ + u8 *str = gDisplayedStringBattle; + + str = Contest_CopyStringWithColor(str, gEmptyString_81E72B0, color); + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_SIZE; + str[2] = 4; + str += 3; + + *str++ = CHAR_SLASH; + + if ((gIsLinkContest & 1) && gLinkPlayers[contestant].language == LANGUAGE_JAPANESE) + { + StringCopy(str, gLinkPlayers[contestant].name); + Text_InitWindow8004D04( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 592 + gContestantTurnOrder[contestant] * 22, + 251 + gUnknown_083CA310[gContestantTurnOrder[contestant]][0] * 8, + gUnknown_083CA310[gContestantTurnOrder[contestant]][1] * 8, + 1); + } + else + { + StringCopy(str, gContestMons[contestant].trainerName); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 592 + gContestantTurnOrder[contestant] * 22, + gUnknown_083CA310[gContestantTurnOrder[contestant]][0], + gUnknown_083CA310[gContestantTurnOrder[contestant]][1]); + } +} + +void PrintContestantMonName(u8 contestant) +{ + PrintContestantMonNameWithColor(contestant, contestant + 10); +} + +void PrintContestantMonNameWithColor(u8 contestant, u8 color) +{ + u8 *str = gDisplayedStringBattle; + + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_SIZE; + str[2] = 4; + str += 3; + + str = Contest_CopyStringWithColor(str, gContestMons[contestant].nickname, color); + *str = EOS; + + Text_InitWindow8004D04( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 512 + gContestantTurnOrder[contestant] * 20, + 253 + gUnknown_083CA308[gContestantTurnOrder[contestant]][0] * 8, + gUnknown_083CA308[gContestantTurnOrder[contestant]][1] * 8, + 1); +} + +u16 CalculateContestantRound1Points(u8 who, u8 contestCategory) +{ + u8 statMain; + u8 statSub1; + u8 statSub2; + + switch (contestCategory) + { + case CONTEST_CATEGORY_COOL: + statMain = gContestMons[who].cool; + statSub1 = gContestMons[who].tough; + statSub2 = gContestMons[who].beauty; + break; + case CONTEST_CATEGORY_BEAUTY: + statMain = gContestMons[who].beauty; + statSub1 = gContestMons[who].cool; + statSub2 = gContestMons[who].cute; + break; + case CONTEST_CATEGORY_CUTE: + statMain = gContestMons[who].cute; + statSub1 = gContestMons[who].beauty; + statSub2 = gContestMons[who].smart; + break; + case CONTEST_CATEGORY_SMART: + statMain = gContestMons[who].smart; + statSub1 = gContestMons[who].cute; + statSub2 = gContestMons[who].tough; + break; + case CONTEST_CATEGORY_TOUGH: + default: + statMain = gContestMons[who].tough; + statSub1 = gContestMons[who].smart; + statSub2 = gContestMons[who].cool; + break; + } + return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2; +} + +void CalculateRound1Points(u8 contestCategory) +{ + u8 i; + + for (i = 0; i < 4; i++) + gContestMonRound1Points[i] = CalculateContestantRound1Points(i, contestCategory); +} + +u8 CreateJudgeSprite(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&sSpriteSheet_Judge); + LoadCompressedPalette(gContest2Pal, 0x110, 32); + spriteId = CreateSprite(&sSpriteTemplate_Judge, 112, 36, 30); + gSprites[spriteId].oam.paletteNum = 1; + gSprites[spriteId].callback = SpriteCallbackDummy; + return spriteId; +} + +u8 CreateJudgeSpeechBubbleSprite(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&sSpriteSheet_JudgeSymbols); + LoadCompressedObjectPalette(&sSpritePalette_JudgeSymbols); + spriteId = CreateSprite(&sSpriteTemplate_JudgeSpeechBubble, 96, 10, 29); + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum; + return spriteId; +} + +UNUSED +u8 unref_sub_80AE908(void) +{ + u16 species = gContestMons[gContestPlayerMonIndex].species; + u8 spriteId; + + DecompressPicFromTable_2( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[1], + species); + LoadCompressedPalette(gMonPaletteTable[species].data, 0x110, 32); + GetMonSpriteTemplate_803C56C(gContestMons[gContestPlayerMonIndex].species, 1); + spriteId = CreateSprite( + &gCreatingSpriteTemplate, + 112, 80 + (8 - gMonFrontPicCoords[gContestMons[gContestPlayerMonIndex].species].coords) * 4, + 30); + gSprites[spriteId].oam.paletteNum = 1; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest; + StartSpriteAffineAnim(&gSprites[spriteId], 0); + return spriteId; +} + +u8 CreateContestantSprite(u16 species, u32 otId, u32 personality) +{ + const u8 *lzPaletteData; + u8 spriteId; + + species = SanitizeSpecies(species); + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[0], + species, + personality); + lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personality); + LoadCompressedPalette(lzPaletteData, 0x120, 32); + GetMonSpriteTemplate_803C56C(species, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, 112, GetBattlerSpriteFinal_Y(2, species, 0), 30); + gSprites[spriteId].oam.paletteNum = 2; + gSprites[spriteId].oam.priority = 2; + gSprites[spriteId].subpriority = GetBattlerSubpriority(2); + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum; + gSprites[spriteId].data[2] = species; + if (IsSpeciesNotUnown(species)) + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteContest; + else + gSprites[spriteId].affineAnims = gAffineAnims_BattleSpriteOpponentSide; + StartSpriteAffineAnim(&gSprites[spriteId], 0); + return spriteId; +} + +bool8 IsSpeciesNotUnown(u16 species) +{ + if (species == SPECIES_UNOWN) + return FALSE; + else + return TRUE; +} + +// The contestant info windows and general-purpose text box are drawn on one half, while +// the moves and move description windows are drawn on another screen. Only the first 32 * 20 +// tiles are actually drawn on screen. +void SwapMoveDescAndContestTilemaps(void) +{ + __copy_tilemap((void *)(VRAM + 0xC000)); + __copy_tilemap((void *)(VRAM + 0xE000)); +} + +void __copy_tilemap(void *a) +{ + DmaCopy16Defvars(3, a, (u8 *)a + 0x500, 0x280); +} + +u16 GetMoveEffectSymbolTileOffset(u16 move, u8 b) +{ + u16 var; + + switch (gContestEffects[gContestMoves[move].effect].effectType) + { + case 0: + case 1: + case 8: + var = 0x9082; + break; + case 2: + case 3: + var = 0x9088; + break; + default: + var = 0x9086; + break; + } + var += 0x9000 + (b << 12); + return var; +} + +void PrintContestMoveDescription(u16 a) +{ + u8 category; + u16 categoryTile; + s32 i; + u8 numHearts; + + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 31, 16, 34); + + category = gContestMoves[a].contestCategory; + if (category == CONTEST_CATEGORY_COOL) + categoryTile = 0x4040; + else if (category == CONTEST_CATEGORY_BEAUTY) + categoryTile = 0x4045; + else if (category == CONTEST_CATEGORY_CUTE) + categoryTile = 0x404A; + else if (category == CONTEST_CATEGORY_SMART) + categoryTile = 0x406A; + else + categoryTile = 0x408A; + + for (i = 0; i < 5; i++) + { + *(u16 *)(VRAM + 0xC7D6 + i * 2) = categoryTile; + *(u16 *)(VRAM + 0xC816 + i * 2) = categoryTile + 16; + categoryTile++; + } + + if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF) + numHearts = 0; + else + numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; + if (numHearts > 8) + numHearts = 8; + for (i = 0; i < 8; i++) + { + if (i < numHearts) // Empty hearts + *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5012; + else // Filled-in hearts + *(u16 *)(VRAM + 0xC7EA + i * 2) = 0x5035; + } + + if (gContestEffects[gContestMoves[a].effect].jam == 0xFF) + numHearts = 0; + else + numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; + if (numHearts > 8) + numHearts = 8; + for (i = 0; i < 8; i++) + { + if (i < numHearts) // Empty hearts + *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5014; + else // Filled-in hearts + *(u16 *)(VRAM + 0xC82A + i * 2) = 0x5036; + } + + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gContestEffectStrings[gContestMoves[a].effect], 868, 11, 35); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, gText_Slash, 866, 16, 31); +} + +void Contest_ClearMoveDescriptionBox(void) +{ + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 11, 35, 28, 40); +} + +UNUSED +void DrawMoveEffectSymbol(u16 move, u8 b) +{ + u8 r5 = gContestantTurnOrder[b] * 5 + 2; + + if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE) + { + u16 tile = GetMoveEffectSymbolTileOffset(move, b); + + *(u16 *)(VRAM + 0xC028 + r5 * 64) = tile; + *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = tile + 1; + + *(u16 *)(VRAM + 0xC068 + r5 * 64) = tile + 16; + *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = tile + 17; + + } + else + { + *(u16 *)(VRAM + 0xC028 + r5 * 64) = 0; + *(u16 *)(VRAM + 0xC028 + r5 * 64 + 2) = 0; + + *(u16 *)(VRAM + 0xC068 + r5 * 64) = 0; + *(u16 *)(VRAM + 0xC068 + r5 * 64 + 2) = 0; + } +} + +UNUSED +void DrawMoveEffectSymbols(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + DrawMoveEffectSymbol(sContestantStatus[i].currMove, i); +} + +u16 GetStarTileOffset(u8 unused) +{ + return 0x2034; +} + +bool8 UpdateConditionStars(u8 a, u8 b) +{ + u8 r9; + u16 r8; + s32 r4; + + if (sContestantStatus[a].conditionMod == 0) + return FALSE; + r9 = gContestantTurnOrder[a] * 5 + 2; + if (sContestantStatus[a].conditionMod == 1) + { + r8 = GetStarTileOffset(a); + r4 = 0; + while (sContestantStatus[a].condition / 10 > r4) + { + *(u16 *)(VRAM + 0xC026 + (r9 + r4) * 64) = r8; + r4++; + } + if (b != 0) + { + PlaySE(SE_EXP_MAX); + sContestantStatus[a].conditionMod = 0; + } + } + else // CONDITION_LOSE + { + r8 = 0; + r4 = 3; + while (sContestantStatus[a].condition / 10 < r4) + { + *(u16 *)(VRAM + 0xBFE6 + (r9 + r4) * 64) = r8; + r4--; + } + if (b != 0) + { + PlaySE(SE_CONTEST_CONDITION_LOSE); + sContestantStatus[a].conditionMod = 0; + } + } + return TRUE; +} + +void DrawConditionStars(void) +{ + s32 i; + s32 r4; + + for (i = 0; i < 4; i++) + { + u8 r8 = gContestantTurnOrder[i] * 5 + 2; + u16 r6 = GetStarTileOffset(i); + + r4 = 0; + while (r4 < sContestantStatus[i].condition / 10) + { + *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; + r4++; + } + r6 = 0; + while (r4 < 3) + { + *(u16 *)(VRAM + 0xC026 + (r8 + r4) * 64) = r6; + r4++; + } + } +} + +u16 GetStatusSymbolTileOffset(u8 unused, u8 b) +{ + u16 var = 0; + + switch (b) + { + case 0: // For resistant + var = 0x80; + break; + case 1: // For nervous + var = 0x84; + break; + case 2: // For turn skipped + var = 0x86; + break; + case 3: // For jammed/unnerved + var = 0x88; + break; + case 4: // Never used + var = 0x82; + break; + } + var += 0x9000; + return var; +} + +bool8 DrawStatusSymbol(u8 a) +{ + bool8 r5 = TRUE; + u16 r4 = 0; + u8 r6 = gContestantTurnOrder[a] * 5 + 2; + + if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0) + r4 = GetStatusSymbolTileOffset(a, 0); + else if (sContestantStatus[a].nervous) + r4 = GetStatusSymbolTileOffset(a, 1); + else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) + r4 = GetStatusSymbolTileOffset(a, 2); + else + r5 = FALSE; + if (r5) + { + *(u16 *)(VRAM + 0xC028 + r6 * 64) = r4; + *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = r4 + 1; + *(u16 *)(VRAM + 0xC068 + r6 * 64) = r4 + 16; + *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = r4 + 17; + } + else + { + *(u16 *)(VRAM + 0xC028 + r6 * 64) = 0; + *(u16 *)(VRAM + 0xC028 + r6 * 64 + 2) = 0; + *(u16 *)(VRAM + 0xC068 + r6 * 64) = 0; + *(u16 *)(VRAM + 0xC068 + r6 * 64 + 2) = 0; + } + return r5; +} + +void DrawStatusSymbols(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + DrawStatusSymbol(i); +} + +void ContestClearGeneralTextWindow(void) +{ + Text_FillWindowRectDefPalette(&gWindowTemplate_Contest_MoveDescription, 0, 1, 15, 17, 18); +} + +u16 GetChosenMove(u8 a) +{ + if (Contest_IsMonsTurnDisabled(a)) + return 0; + if (a == gContestPlayerMonIndex) + { + return gContestMons[a].moves[sContest.playerMoveChoice]; + } + else + { + u8 moveChoice; + + ContestAI_ResetAI(a); + moveChoice = ContestAI_GetActionToUse(); + return gContestMons[a].moves[moveChoice]; + } +} + +void GetAllChosenMoves(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + sContestantStatus[i].currMove = GetChosenMove(i); +} + +UNUSED +void sub_80AF1E4(u8 a, u8 b) +{ + u8 r3; + + if (b == 0) + r3 = a + 10; + else + r3 = 14; + if (sContestantStatus[a].currMove == MOVE_NONE) + Contest_CopyStringWithColor(gDisplayedStringBattle, gUnknownText_MissedTurn, r3); + else + Contest_CopyStringWithColor( + gDisplayedStringBattle, gMoveNames[sContestantStatus[a].currMove], r3); + sub_80AF2A0(a); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 696 + a * 20, + gUnknown_083CA318[a][0], + gUnknown_083CA318[a][1]); +} + +UNUSED +void unref_sub_80AF280(u8 a) +{ + u8 i; + + for (i = 0; i < 4; i++) + sub_80AF1E4(i, a); +} + +UNUSED +void sub_80AF2A0(u8 a) +{ + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA318[a][0], + gUnknown_083CA318[a][1], + gUnknown_083CA318[a][0] + 7, + gUnknown_083CA318[a][1] + 1); +} + +UNUSED +void unref_sub_80AF2E0(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + sub_80AF2A0(i); +} + +void RankContestants(void) +{ + u8 i; + u8 j; + s16 arr[4]; + + for (i = 0; i < 4; i++) + { + sContestantStatus[i].pointTotal += sContestantStatus[i].appeal; + arr[i] = sContestantStatus[i].pointTotal; + } + + // Sort the point totals using bubble-sort. + for (i = 0; i < 3; i++) + { + for (j = 3; j > i; j--) + { + if (arr[j - 1] < arr[j]) + { + u16 temp = arr[j]; + + arr[j] = arr[j - 1]; + arr[j - 1] = temp; + } + } + } + + // For each contestant, find the best rank with their point total. + // Normally, each point total is different, and this will output the + // rankings as expected. However, if two pokemon are tied, then they + // both get the best rank for that point total. + // + // For example if the point totals are [100, 80, 80, 50], the ranks will + // be [1, 2, 2, 4]. The pokemon with a point total of 80 stop looking + // when they see the first 80 in the array, so they both share the '2' + // rank. + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + if (sContestantStatus[i].pointTotal == arr[j]) + { + sContestantStatus[i].ranking = j; + break; + } + } + } + SortContestants(1); + ApplyNextTurnOrder(); +} + +void SetAttentionLevels(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + u8 attentionLevel; + + if (sContestantStatus[i].currMove == MOVE_NONE) + attentionLevel = 5; + else if (sContestantStatus[i].appeal <= 0) + attentionLevel = 0; + else if (sContestantStatus[i].appeal < 30) + attentionLevel = 1; + else if (sContestantStatus[i].appeal < 60) + attentionLevel = 2; + else if (sContestantStatus[i].appeal < 80) + attentionLevel = 3; + else + attentionLevel = 4; + + sContestantStatus[i].attentionLevel = attentionLevel; + } +} + +bool8 ContestantCanUseTurn(u8 a) +{ + if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) + return FALSE; + else + return TRUE; +} + +void SetContestantStatusesForNextRound(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + // This is bitfield hell... + sContestantStatus[i].appeal = 0; + sContestantStatus[i].baseAppeal = 0; + sContestantStatus[i].jamSafetyCount = 0; + if (sContestantStatus[i].numTurnsSkipped > 0) + sContestantStatus[i].numTurnsSkipped--; + sContestantStatus[i].jam = 0; + sContestantStatus[i].resistant = 0; + sContestantStatus[i].jamReduction = 0; + sContestantStatus[i].immune = 0; + sContestantStatus[i].moreEasilyStartled = 0; + sContestantStatus[i].usedRepeatableMove = 0; + sContestantStatus[i].nervous = 0; + sContestantStatus[i].effectStringId = CONTEST_STRING_NONE; + sContestantStatus[i].effectStringId2 = CONTEST_STRING_NONE; + sContestantStatus[i].conditionMod = 0; + sContestantStatus[i].repeatedPrevMove = sContestantStatus[i].repeatedMove; + sContestantStatus[i].repeatedMove = FALSE; + sContestantStatus[i].turnOrderModAction = 0; + sContestantStatus[i].appealTripleCondition = 0; + if (sContestantStatus[i].turnSkipped) + { + sContestantStatus[i].numTurnsSkipped = 1; + sContestantStatus[i].turnSkipped = 0; + } + if (sContestantStatus[i].exploded) + { + sContestantStatus[i].noMoreTurns = 1; + sContestantStatus[i].exploded = 0; + } + sContestantStatus[i].overrideCategoryExcitementMod = 0; + } + for (i = 0; i < 4; i++) + { + sContestantStatus[i].prevMove = sContestantStatus[i].currMove; + sContest.moveHistory[sContest.appealNumber][i] = sContestantStatus[i].prevMove; + sContest.excitementHistory[sContest.appealNumber][i] = Contest_GetMoveExcitement(sContestantStatus[i].currMove); + sContestantStatus[i].currMove = MOVE_NONE; + } + eContestExcitement.excitementFrozen = 0; +} + +bool8 Contest_IsMonsTurnDisabled(u8 a) +{ + if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns) + return TRUE; + else + return FALSE; +} + +UNUSED +bool8 unref_sub_80AF5D0(u8 a, u8 b) +{ + u8 i; + + if (a != gContestPlayerMonIndex) + return TRUE; + for (i = 0; i < 4; i++) + { + if (b == 3) + { + sContest.unk1920A_0 = 1; + return TRUE; + } + if (b == 4) + { + sContest.unk1920A_1 = 1; + return TRUE; + } + if (sContest.unk19206[i] == b) + return TRUE; + if (sContest.unk19206[i] == 0xFF) + { + sContest.unk19206[i] = b; + return TRUE; + } + } + return FALSE; +} + +void CalculateTotalPointsForContestant(u8 a) +{ + gContestMonRound2Points[a] = GetContestantRound2Points(a); + gContestMonTotalPoints[a] = gContestMonRound1Points[a] + gContestMonRound2Points[a]; +} + +void CalculateFinalScores(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + CalculateTotalPointsForContestant(i); + DetermineFinalStandings(); +} + +s16 GetContestantRound2Points(u8 a) +{ + return gContestMonAppealPointTotals[a] * 2; +} + +void DetermineFinalStandings(void) +{ + u16 randomOrdering[4] = {0}; + struct ContestFinalStandings standings[4]; + s32 i; + + // Seed random order in case of ties + for (i = 0; i < 4; i++) + { + s32 j; + randomOrdering[i] = Random(); + for (j = 0; j < i; j++) + { + if (randomOrdering[i] == randomOrdering[j]) + { + i--; + break; + } + } + } + + for (i = 0; i < 4; i++) + { + standings[i].totalPoints = gContestMonTotalPoints[i]; + standings[i].round1Points = gContestMonRound1Points[i]; + standings[i].random = randomOrdering[i]; + standings[i].contestant = i; + } + + // Rank contestants + for (i = 0; i < 3; i++) + { + s32 j; + for (j = 3; j > i; j--) + { + if (DidContestantPlaceHigher(j - 1, j, standings)) + { + // Swap contestants in array + struct ContestFinalStandings temp; + + temp.totalPoints = standings[j - 1].totalPoints; + temp.round1Points = standings[j - 1].round1Points; + temp.random = standings[j - 1].random; + temp.contestant = standings[j - 1].contestant; + + standings[j - 1].totalPoints = standings[j].totalPoints; + standings[j - 1].round1Points = standings[j].round1Points; + standings[j - 1].random = standings[j].random; + standings[j - 1].contestant = standings[j].contestant; + + standings[j].totalPoints = temp.totalPoints; + standings[j].round1Points = temp.round1Points; + standings[j].random = temp.random; + standings[j].contestant = temp.contestant; + } + } + } + + // Assign placements. i is the placing (0 is 1st, 1 is 2nd...) + for (i = 0; i < 4; i++) + gContestFinalStandings[standings[i].contestant] = i; +} + +bool8 DidContestantPlaceHigher(s32 a, s32 b, struct ContestFinalStandings *c) +{ + bool8 retVal; + + if (c[a].totalPoints < c[b].totalPoints) + retVal = TRUE; + else if (c[a].totalPoints > c[b].totalPoints) + retVal = FALSE; + else if (c[a].round1Points < c[b].round1Points) + retVal = TRUE; + else if (c[a].round1Points > c[b].round1Points) + retVal = FALSE; + else if (c[a].random < c[b].random) + retVal = TRUE; + else + retVal = FALSE; + return retVal; +} + +void ContestPrintLinkStandby(void) +{ + gBattle_BG0_Y = 0; + gBattle_BG2_Y = 0; + ContestClearGeneralTextWindow(); + Text_InitWindowAndPrintText(&gMenuWindow, gUnknownText_LinkStandbyAndWinner, 776, 1, 15); +} + +UNUSED +u8 unref_sub_80AF89C(s16 appealStart, s16 appealDelta, u8 tileOffs, u8 contestant) +{ + u8 taskId; + u8 heartsStart; + s8 heartsDelta; + u16 baseBlock; + + eContestGfxState[contestant].updatingAppealHearts = 1; + taskId = CreateTask(Task_unused_80AF94C, 20); + heartsStart = GetNumHeartsFromAppealPoints(appealStart); + heartsDelta = GetNumHeartsFromAppealPoints(appealStart + appealDelta) - heartsStart; + baseBlock = GetAppealHeartTileOffset(contestant); + gTasks[taskId].data[0] = heartsStart; + gTasks[taskId].data[1] = heartsDelta; + gTasks[taskId].data[2] = baseBlock + tileOffs; + gTasks[taskId].data[3] = contestant; + if (appealDelta < 0) + nullsub_19(contestant); + return taskId; +} + +UNUSED +void Task_unused_80AF94C(u8 taskId) +{ + u8 contestant = gTasks[taskId].data[3]; + + if (gTasks[taskId].data[1] == 0) + { + nullsub_19(contestant); + DestroyTask(taskId); + eContestGfxState[contestant].updatingAppealHearts = 0; + } + else if (++gTasks[taskId].data[10] > 29) + { + u8 numHearts; + + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[1] < 0) + { + numHearts = gTasks[taskId].data[0]--; + gTasks[taskId].data[1]++; + PlaySE(SE_BOO); + } + else + { + numHearts = ++gTasks[taskId].data[0]; + gTasks[taskId].data[1]--; + PlaySE(SE_PIN); + } + if ((u16)gTasks[taskId].data[2] != 0xFFFF) + { + RequestSpriteCopy( + &gTasks[taskId].data[2], + (void *)(VRAM + 0xC000 + (147 + numHearts + contestant * 160) * 2), + 2); + } + else + { + u8 i; + + for (i = 0; i < 3; i++) + { + if (gTasks[taskId].data[i + 4] < 0) + { + RequestSpriteCopy( + &gTasks[taskId].data[i + 7], + (void *)(VRAM + 0xC000 + (147 + numHearts + contestant * 160) * 2), + 2); + gTasks[taskId].data[i + 4]++; + break; + } + } + } + } +} + +void FillContestantWindowBgs(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + DmaClear16(3, (void *)(VRAM + 0xC000 + (86 + i * 160) * 2), 16); + DmaClear16(3, (void *)(VRAM + 0xC000 + (118 + i * 160) * 2), 16); + } +} + +UNUSED +void unref_sub_80AFAB8(s16 a, u8 b) +{ + u8 r5 = GetNumHeartsFromAppealPoints(a); + u16 r2; + u8 i; + u16 arr[9]; + + if (b == 0) + r2 = 0x50A2; + else if (b == 1) + r2 = 0x60A2; + else if (b == 2) + r2 = 0x70A2; + else + r2 = 0x80A2; + + for (i = 0; i < 9; i++) + { + if (i < r5) + arr[i] = r2; + else + arr[i] = 0; + } + + DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xC000 + (148 + b * 160) * 2), sizeof(arr)); +} + +u16 GetAppealHeartTileOffset(u8 a) +{ + u16 var; + + if (a == 0) + var = 0x5011; + else if (a == 1) + var = 0x6011; + else if (a == 2) + var = 0x7011; + else + var = 0x8011; + return var + 1; +} + +s8 GetNumHeartsFromAppealPoints(s16 a) +{ + s8 retVal = a / 10; + + if (retVal > 16) + retVal = 16; + else if (retVal < -16) + retVal = -16; + return retVal; +} + +u8 UpdateAppealHearts(s16 startAppeal, s16 appealDelta, u8 contestant) +{ + u8 taskId; + s8 startHearts; + s8 heartsDelta; + + eContestGfxState[contestant].updatingAppealHearts = 1; + taskId = CreateTask(Task_UpdateAppealHearts, 20); + startHearts = GetNumHeartsFromAppealPoints(startAppeal); + heartsDelta = GetNumHeartsFromAppealPoints(startAppeal + appealDelta) - startHearts; + GetAppealHeartTileOffset(contestant); // unused return value + gTasks[taskId].data[0] = abs(startHearts); + gTasks[taskId].data[1] = heartsDelta; + if (startHearts > 0 || (startHearts == 0 && heartsDelta > 0)) + gTasks[taskId].data[2] = 1; + else + gTasks[taskId].data[2] = -1; + gTasks[taskId].data[3] = contestant; + if (appealDelta < 0) + nullsub_19(contestant); + return taskId; +} + +void Task_UpdateAppealHearts(u8 taskId) +{ + u8 contestant = gTasks[taskId].data[3]; + s16 startHearts = gTasks[taskId].data[0]; + s16 heartsDelta = gTasks[taskId].data[1]; + + if (++gTasks[taskId].data[10] > 14) + { + u16 heartOffset; + u8 newNumHearts; + u8 pitchMod; + + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[1] == 0) + { + nullsub_19(contestant); + DestroyTask(taskId); + eContestGfxState[contestant].updatingAppealHearts = 0; + return; + } + else if (startHearts == 0) + { + if (heartsDelta < 0) + { + heartOffset = GetAppealHeartTileOffset(contestant) + 2; + gTasks[taskId].data[1]++; + } + else + { + heartOffset = GetAppealHeartTileOffset(contestant); + gTasks[taskId].data[1]--; + } + newNumHearts = gTasks[taskId].data[0]++; + } + else + { + if (gTasks[taskId].data[2] < 0) + { + if (heartsDelta < 0) + { + newNumHearts = gTasks[taskId].data[0]++; + gTasks[taskId].data[1]++; + heartOffset = GetAppealHeartTileOffset(contestant) + 2; + } + else + { + newNumHearts = --gTasks[taskId].data[0]; + heartOffset = 0; + gTasks[taskId].data[1]--; + } + } + else + { + if (heartsDelta < 0) + { + newNumHearts = --gTasks[taskId].data[0]; + heartOffset = 0; + gTasks[taskId].data[1]++; + } + else + { + newNumHearts = gTasks[taskId].data[0]++; + gTasks[taskId].data[1]--; + heartOffset = GetAppealHeartTileOffset(contestant); + } + } + } + pitchMod = newNumHearts; + if (newNumHearts >= 8) + newNumHearts += 32 - 8; // jump to second line + // Seriously, a 2-byte CpuFill? Why? + CpuFill16(heartOffset, (void *)(VRAM + 0xC000 + (0x56 + newNumHearts + gContestantTurnOrder[contestant] * 160) * 2), 2); + if (heartsDelta > 0) // Appeal + { + PlaySE(SE_CONTEST_HEART); + m4aMPlayImmInit(&gMPlayInfo_SE1); + m4aMPlayPitchControl(&gMPlayInfo_SE1, 0xFFFF, pitchMod * 256); + } + else // Jam + { + PlaySE(SE_BOO); + } + if (newNumHearts == 0 && heartOffset == 0) + gTasks[taskId].data[2] = -gTasks[taskId].data[2]; + } +} + +void CreateSliderHeartSprites(void) +{ + s32 i; + + LoadSpriteSheet(&sSpriteSheet_SliderHeart); + for (i = 0; i < 4; i++) + { + u8 y = sSliderHeartYPositions[gContestantTurnOrder[i]]; + + eContestGfxState[i].sliderHeartSpriteId = CreateSprite(&sSpriteTemplate_SliderHeart, 180, y, 1); + } +} + +void sub_80AFE78(u8 a) +{ + u8 spriteId; + s16 r5; + + eContestGfxState[a].sliderUpdating = 1; + spriteId = eContestGfxState[a].sliderHeartSpriteId; + r5 = sContestantStatus[a].pointTotal / 10 * 2; + if (r5 > 56) + r5 = 56; + else if (r5 < 0) + r5 = 0; + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = r5; + if (gSprites[spriteId].data[1] > gSprites[spriteId].pos2.x) + gSprites[spriteId].data[2] = 1; + else + gSprites[spriteId].data[2] = -1; + gSprites[spriteId].callback = sub_80AFF60; +} + +void UpdateHeartSliders(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + sub_80AFE78(i); +} + +bool8 SlidersDoneUpdating(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (eContestGfxState[i].sliderUpdating) + break; + } + if (i == 4) + return TRUE; + else + return FALSE; +} + +void sub_80AFF60(struct Sprite *sprite) +{ + if (sprite->pos2.x == sprite->data[1]) + { + eContestGfxState[sprite->data[0]].sliderUpdating = 0; + sprite->callback = SpriteCallbackDummy; + } + else + { + sprite->pos2.x += sprite->data[2]; + } +} + +void UpdateSliderHeartSpriteYPositions(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.y = sSliderHeartYPositions[gContestantTurnOrder[i]]; +} + +void SetBottomSliderHeartsInvisibility(bool8 a) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (gContestantTurnOrder[i] > 1) + { + if (!a) + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 180; + else + gSprites[eContestGfxState[i].sliderHeartSpriteId].pos1.x = 256; + } + } +} + +void CreateNextTurnSprites(void) +{ + s32 i; + + LoadSpritePalette(&gUnknown_083CA3E4); + for (i = 0; i < 4; i++) + { + LoadCompressedObjectPic(&gUnknown_083CA3C4[i]); + eContestGfxState[i].nextTurnSpriteId = CreateSprite( + &gSpriteTemplate_83CA3F4[i], + 204, gUnknown_083CA33C[gContestantTurnOrder[i]], + 0); + SetSubspriteTables(&gSprites[eContestGfxState[i].nextTurnSpriteId], gSubspriteTables_83CA464); + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE; + } +} + +void CreateApplauseMeterSprite(void) +{ + u8 spriteId; + + LoadCompressedObjectPic(&gUnknown_083CA46C); + LoadSpritePalette(&gUnknown_083CA474); + spriteId = CreateSprite(&gSpriteTemplate_83CA484, 30, 44, 1); + gSprites[spriteId].invisible = TRUE; + sContest.applauseMeterSpriteId = spriteId; +} + +void nullsub_18(s8 unused) +{ +} + +void unref_sub_80B011C(void) +{ + u8 i; + + LoadCompressedObjectPic(&gUnknown_083CC3AC); + for (i = 0; i < 4; i++) + LoadCompressedObjectPalette(&gUnknown_083CC3B4[i]); + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite( + &gSpriteTemplate_83CC454[i], + gUnknown_083CA330[i][0], gUnknown_083CA330[i][1], + 5); + + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data[0] = i; + sContest.unk1920D[i] = spriteId; + } +} + +void unref_sub_80B01B0(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + gSprites[sContest.unk1920D[i]].callback = sub_80B0238; +} + +bool8 unref_sub_80B01E0(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (gSprites[sContest.unk1920D[i]].callback != SpriteCallbackDummy) + break; + } + if (i == 4) + return TRUE; + else + return FALSE; +} + +void sub_80B0238(struct Sprite *sprite) +{ + sprite->oam.affineMode = 1; + InitSpriteAffineAnim(sprite); + if (sprite->invisible) + { + sprite->callback = sub_80B02A8; + } + else + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_80B0280; + } +} + +void sub_80B0280(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + sprite->invisible = TRUE; + sprite->callback = sub_80B02A8; + } +} + +void sub_80B02A8(struct Sprite *sprite) +{ + sprite->invisible = FALSE; + StartSpriteAnim(sprite, sContestantStatus[sprite->data[0]].ranking); + StartSpriteAffineAnim(sprite, 2); + sprite->callback = sub_80B02F4; + PlaySE(SE_CONTEST_PLACE); +} + +void sub_80B02F4(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + FreeSpriteOamMatrix(sprite); + sprite->oam.affineMode = 0; + sprite->callback = SpriteCallbackDummy; + } +} + +void CreateJudgeAttentionEyeTask(void) +{ + u8 i; + u8 taskId = CreateTask(sub_80B0458, 30); + + sContest.judgeAttentionTaskId = taskId; + for (i = 0; i < 4; i++) + gTasks[taskId].data[i * 4] = 0xFF; +} + +void sub_80B0368(u8 a) +{ + gTasks[sContest.judgeAttentionTaskId].data[a * 4 + 0] = 0; + gTasks[sContest.judgeAttentionTaskId].data[a * 4 + 1] = 0; +} + +void sub_80B03A8(u8 a) +{ + u8 taskId = CreateTask(sub_80B03D8, 31); + + gTasks[taskId].data[0] = a; +} + +void sub_80B03D8(u8 taskId) +{ + u8 r4 = gTasks[taskId].data[0]; + + if (gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 0] == 0 + || gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 0] == 0xFF) + { + gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 0] = 0xFF; + gTasks[sContest.judgeAttentionTaskId].data[r4 * 4 + 1] = 0; + BlendPalette((sContest.prevTurnOrder[r4] + 5) * 16 + 6, 2, 0, RGB(31, 31, 18)); + DestroyTask(taskId); + } +} + +void sub_80B0458(u8 taskId) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + u8 r3 = i * 4; + + if (gTasks[taskId].data[r3 + 0] != 0xFF) + { + if (gTasks[taskId].data[r3 + 1] == 0) + gTasks[taskId].data[r3 + 0]++; + else + gTasks[taskId].data[r3 + 0]--; + + if (gTasks[taskId].data[r3 + 0] == 16 + || gTasks[taskId].data[r3 + 0] == 0) + gTasks[taskId].data[r3 + 1] ^= 1; + + BlendPalette( + (sContest.prevTurnOrder[i] + 5) * 16 + 6, + 2, + gTasks[taskId].data[r3 + 0], + RGB(31, 31, 18)); + } + } +} + +void CreateUnusedBlendTask(void) +{ + u8 i; + + sContest.blendTaskId = CreateTask(Task_UnusedBlend, 30); + for (i = 0; i < 4; i++) + InitUnusedBlendTaskData(i); +} + +void InitUnusedBlendTaskData(u8 contestant) +{ + gTasks[sContest.blendTaskId].data[contestant * 4 + 0] = 0xFF; + gTasks[sContest.blendTaskId].data[contestant * 4 + 1] = 0; +} + +void UpdateBlendTaskContestantsData(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + UpdateBlendTaskContestantData(i); +} + +void UpdateBlendTaskContestantData(u8 contestant) +{ + InitUnusedBlendTaskData(contestant); + + // 2-byte DMA copy? Why? + + DmaCopy16Defvars( + 3, + &gPlttBufferUnfaded[16 * (5 + contestant) + 10], + &gPlttBufferFaded[16 * (5 + contestant) + 10], + 2); + + DmaCopy16Defvars( + 3, + &gPlttBufferUnfaded[16 * (5 + contestant) + 12 + contestant], + &gPlttBufferFaded[16 * (5 + contestant) + 12 + contestant], + 2); +} + +void nullsub_19(int unused) +{ +} + +void Task_UnusedBlend(u8 taskId) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + u8 r3 = i * 4; + + if (gTasks[taskId].data[r3 + 0] != 0xFF) + { + if (++gTasks[taskId].data[r3 + 2] > 2) + { + gTasks[taskId].data[r3 + 2] = 0; + + if (gTasks[taskId].data[r3 + 1] == 0) + gTasks[taskId].data[r3 + 0]++; + else + gTasks[taskId].data[r3 + 0]--; + + if (gTasks[taskId].data[r3 + 0] == 16 + || gTasks[taskId].data[r3 + 0] == 0) + gTasks[taskId].data[r3 + 1] ^= 1; + + BlendPalette((i + 5) * 16 + 10, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); + BlendPalette((i + 5) * 16 + 12 + i, 1, gTasks[taskId].data[r3 + 0], RGB(31, 31, 18)); + } + } + } +} + +// This task is never used +u8 CreateUnusedBrokenBlendTask(u8 *a) +{ + u8 i; + u8 taskId = CreateTask(Task_UnusedBrokenBlend, 10); + + for (i = 0; i < 4; i++) + { + u8 r0 = i * 4; + + gTasks[taskId].data[r0] = a[i]; + if (a[i] != 0) + eContestGfxState[i].boxBlinking = TRUE; + } + return taskId; +} + +#ifdef NONMATCHING +void Task_UnusedBrokenBlend(u8 taskId) +{ + u8 i; + u8 r4; + u8 r4_2; + u8 r1; + u8 r7; + + for (i = 0; i < 4; i++) + { + //#define r4 r4_2 + r4 = gContestantTurnOrder[i]; + r1 = r4 * 4; + r7 = gTasks[taskId].data[r1 + 0]; + + if (r7 != 0) + { + //_080B079C + u8 r8 = gTasks[taskId].data[r1 + 1]; + u8 r5 = gTasks[taskId].data[r1 + 2]; + u8 r6 = gTasks[taskId].data[r1 + 3]; + + if (r7 == 1) + { + r6++; + if (r6 == 1) + { + //_080B07D2 + r6 = 0; + BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(31, 31, 31)); + if (r5 == 0 && r8 == 4) + { + gTasks[taskId].data[r1 + 0] = 0; + //asm(""); + } + //_080B0800 + else + { + r5 += 2; + if (r5 > 13) + { + r5 = 0; + r8++; + } + } + } + //to _080B08EA + } + //_080B0818 + else if (r7 == 2 || r7 == 4) + { + r6++; + if (r6 == 3) + { + r6 = 0; + BlendPalette((r4 + 5) * 16 + 1, 3, r5, gUnknown_083CC5A4[r4]); + if (r5 == 0 && r8 == 2) + { + gTasks[taskId].data[r1 + 0] = 0; + } + //_080B0858 + else + { + r5 += 1; + if (r5 == 14) + { + r5 = 0; + r8++; + if (r7 == 4 && r8 == 1) + { + BlendPalette((r4 + 9) * 16 + 2, 1, 4, RGB(0, 0, 0)); + BlendPalette((r4 + 9) * 16 + 5, 1, 4, RGB(0, 0, 0)); + } + } + } + } + //to _080B08EA + } + //_080B0896 + else if (r7 == 3) + { + r6++; + if (r6 == 12) + { + r6 = 0; + BlendPalette((r4 + 5) * 16 + 1, 3, r5, RGB(0, 0, 0)); + r5 += 1; + if (r5 == 5) + { + // What the hell? These aren't pointers. + // This code would crash if run. + DmaCopy16Defvars(3, (void *)(u32)gPlttBufferFaded[(r4 + 5) * 16 + 1], + (void *)(u32)gPlttBufferUnfaded[(r4 + 5) * 16 + 1], 6); + gTasks[taskId].data[r1 + 0] = 0; + } + } + } + //_080B08EA + gTasks[taskId].data[r1 + 1] = r8; + gTasks[taskId].data[r1 + 2] = r5; + gTasks[taskId].data[r1 + 3] = r6; + } + //_080B0910 + } + //_080B0920 + + #define i r4_2 + for (i = 0; i < 4; i++) // r4 is i + { + if (gTasks[taskId].data[i * 4 + 0] != 0) + break; + } + //_080B0958 + if (i == 4) + { + for (i = 0; i < 4; i++) + eContestGfxState[i].boxBlinking = FALSE; + DestroyTask(taskId); + } + #undef i +} +#else +NAKED +void Task_UnusedBrokenBlend(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + ldr r2, _080B07F4 @ =gTasks\n\ + movs r1, 0x8\n\ + adds r1, r2\n\ + mov r10, r1\n\ + ldr r3, [sp]\n\ + lsls r3, 2\n\ + str r3, [sp, 0x1C]\n\ + ldr r1, [sp]\n\ + adds r0, r3, r1\n\ + lsls r0, 3\n\ + str r0, [sp, 0xC]\n\ +_080B0774:\n\ + ldr r0, _080B07F8 @ =gContestantTurnOrder\n\ + ldr r3, [sp, 0x4]\n\ + adds r0, r3, r0\n\ + ldrb r4, [r0]\n\ + lsls r0, r4, 26\n\ + lsrs r1, r0, 24\n\ + lsls r0, r1, 1\n\ + str r0, [sp, 0x8]\n\ + ldr r3, [sp]\n\ + lsls r0, r3, 2\n\ + adds r0, r3\n\ + lsls r6, r0, 3\n\ + ldr r3, [sp, 0x8]\n\ + adds r0, r3, r6\n\ + add r0, r10\n\ + mov r9, r0\n\ + ldrb r7, [r0]\n\ + cmp r7, 0\n\ + bne _080B079C\n\ + b _080B0910\n\ +_080B079C:\n\ + adds r3, r1, 0x1\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + add r0, r10\n\ + ldrb r0, [r0]\n\ + mov r8, r0\n\ + adds r2, r1, 0x2\n\ + lsls r0, r2, 1\n\ + adds r0, r6\n\ + add r0, r10\n\ + ldrb r5, [r0]\n\ + adds r1, 0x3\n\ + lsls r0, r1, 1\n\ + adds r0, r6\n\ + add r0, r10\n\ + ldrb r6, [r0]\n\ + str r3, [sp, 0x10]\n\ + str r2, [sp, 0x14]\n\ + str r1, [sp, 0x18]\n\ + cmp r7, 0x1\n\ + bne _080B0818\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x1\n\ + beq _080B07D2\n\ + b _080B08EA\n\ +_080B07D2:\n\ + movs r6, 0\n\ + adds r0, r4, 0x5\n\ + lsls r0, 4\n\ + adds r0, 0x1\n\ + movs r1, 0x3\n\ + adds r2, r5, 0\n\ + ldr r3, _080B07FC @ =0x00007fff\n\ + bl BlendPalette\n\ + cmp r5, 0\n\ + bne _080B0800\n\ + mov r0, r8\n\ + cmp r0, 0x4\n\ + bne _080B0800\n\ + mov r1, r9\n\ + strh r6, [r1]\n\ + b _080B08EA\n\ + .align 2, 0\n\ +_080B07F4: .4byte gTasks\n\ +_080B07F8: .4byte gContestantTurnOrder\n\ +_080B07FC: .4byte 0x00007fff\n\ +_080B0800:\n\ + adds r0, r5, 0x2\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0xD\n\ + bls _080B08EA\n\ + movs r5, 0\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + b _080B08EA\n\ +_080B0818:\n\ + cmp r7, 0x2\n\ + beq _080B0820\n\ + cmp r7, 0x4\n\ + bne _080B0896\n\ +_080B0820:\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0x3\n\ + bne _080B08EA\n\ + movs r6, 0\n\ + adds r0, r4, 0x5\n\ + lsls r0, 4\n\ + adds r0, 0x1\n\ + ldr r2, _080B0854 @ =gUnknown_083CC5A4\n\ + lsls r1, r4, 1\n\ + adds r1, r2\n\ + ldrh r3, [r1]\n\ + movs r1, 0x3\n\ + adds r2, r5, 0\n\ + bl BlendPalette\n\ + cmp r5, 0\n\ + bne _080B0858\n\ + mov r2, r8\n\ + cmp r2, 0x2\n\ + bne _080B0858\n\ + mov r3, r9\n\ + strh r6, [r3]\n\ + b _080B08EA\n\ + .align 2, 0\n\ +_080B0854: .4byte gUnknown_083CC5A4\n\ +_080B0858:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0xE\n\ + bne _080B08EA\n\ + movs r5, 0\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + cmp r7, 0x4\n\ + bne _080B08EA\n\ + cmp r0, 0x1\n\ + bne _080B08EA\n\ + adds r4, 0x9\n\ + lsls r4, 4\n\ + adds r0, r4, 0x2\n\ + movs r1, 0x1\n\ + movs r2, 0x4\n\ + movs r3, 0\n\ + bl BlendPalette\n\ + adds r4, 0x5\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + movs r2, 0x4\n\ + movs r3, 0\n\ + bl BlendPalette\n\ + b _080B08EA\n\ +_080B0896:\n\ + cmp r7, 0x3\n\ + bne _080B08EA\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0xC\n\ + bne _080B08EA\n\ + movs r6, 0\n\ + adds r0, r4, 0x5\n\ + lsls r0, 4\n\ + adds r4, r0, 0x1\n\ + adds r0, r4, 0\n\ + movs r1, 0x3\n\ + adds r2, r5, 0\n\ + movs r3, 0\n\ + bl BlendPalette\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x5\n\ + bne _080B08EA\n\ + ldr r0, _080B0930 @ =gPlttBufferFaded\n\ + lsls r1, r4, 1\n\ + adds r0, r1, r0\n\ + ldrh r2, [r0]\n\ + ldr r0, _080B0934 @ =gPlttBufferUnfaded\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + ldr r1, _080B0938 @ =0x040000d4\n\ + str r2, [r1]\n\ + str r0, [r1, 0x4]\n\ + movs r0, 0x80\n\ + lsls r0, 24\n\ + orrs r7, r0\n\ + str r7, [r1, 0x8]\n\ + ldr r0, [r1, 0x8]\n\ + ldr r1, [sp, 0x8]\n\ + ldr r2, [sp, 0xC]\n\ + adds r0, r1, r2\n\ + add r0, r10\n\ + strh r6, [r0]\n\ +_080B08EA:\n\ + ldr r3, [sp, 0x10]\n\ + lsls r0, r3, 1\n\ + ldr r1, [sp, 0xC]\n\ + adds r0, r1\n\ + add r0, r10\n\ + mov r2, r8\n\ + strh r2, [r0]\n\ + ldr r3, [sp, 0x14]\n\ + lsls r0, r3, 1\n\ + adds r0, r1\n\ + add r0, r10\n\ + strh r5, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + lsls r0, r1, 1\n\ + ldr r2, [sp, 0xC]\n\ + adds r0, r2\n\ + add r0, r10\n\ + strh r6, [r0]\n\ + ldr r2, _080B093C @ =gTasks\n\ +_080B0910:\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x4]\n\ + cmp r0, 0x3\n\ + bhi _080B0920\n\ + b _080B0774\n\ +_080B0920:\n\ + movs r4, 0\n\ + ldr r3, [sp, 0x1C]\n\ + ldr r1, [sp]\n\ + adds r0, r3, r1\n\ + lsls r1, r0, 3\n\ + adds r2, 0x8\n\ + adds r0, r1, r2\n\ + b _080B0950\n\ + .align 2, 0\n\ +_080B0930: .4byte gPlttBufferFaded\n\ +_080B0934: .4byte gPlttBufferUnfaded\n\ +_080B0938: .4byte 0x040000d4\n\ +_080B093C: .4byte gTasks\n\ +_080B0940:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x3\n\ + bhi _080B0958\n\ + lsls r0, r4, 3\n\ + adds r0, r1\n\ + adds r0, r2\n\ +_080B0950:\n\ + movs r3, 0\n\ + ldrsh r0, [r0, r3]\n\ + cmp r0, 0\n\ + beq _080B0940\n\ +_080B0958:\n\ + cmp r4, 0x4\n\ + bne _080B0980\n\ + movs r4, 0\n\ + ldr r3, _080B0990 @ =gSharedMem + 0x19338\n\ + movs r5, 0x3\n\ + negs r5, r5\n\ +_080B0964:\n\ + lsls r1, r4, 2\n\ + adds r1, r3\n\ + ldrb r2, [r1, 0x2]\n\ + adds r0, r5, 0\n\ + ands r0, r2\n\ + strb r0, [r1, 0x2]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x3\n\ + bls _080B0964\n\ + ldr r0, [sp]\n\ + bl DestroyTask\n\ +_080B0980:\n\ + add sp, 0x20\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080B0990: .4byte gSharedMem + 0x19338\n\ + .syntax divided\n"); +} +#endif + +void unref_sub_80B0994(u8 a) +{ + if (a != 0) + sContest.unk1920A_2 = 1; +} + +void StartStopFlashJudgeAttentionEye(u8 a) +{ + if (sContestantStatus[a].hasJudgesAttention) + sub_80B0368(a); + else + sub_80B03A8(a); +} + +extern const struct CompressedSpriteSheet gUnknown_083CC4B4[]; +extern const struct SpritePalette gUnknown_083CC4D4[]; +extern const struct SpriteTemplate gSpriteTemplate_83CC53C[]; + +u8 CreateContestantBoxBlinkSprites(u8 a) +{ + u8 r5 = gContestantTurnOrder[a] * 40 + 32; + u8 r8; + u8 r6; + volatile u8 zero; + + LoadCompressedObjectPic(&gUnknown_083CC4B4[a]); + LoadSpritePalette(&gUnknown_083CC4D4[a]); + r8 = CreateSprite(&gSpriteTemplate_83CC53C[a], 184, r5, 29); + r6 = CreateSprite(&gSpriteTemplate_83CC53C[a], 248, r5, 29); + gSprites[r6].oam.tileNum += 64; + + CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x26), (u8 *)(VRAM + 0x10000 + gSprites[r8].oam.tileNum * 32)); + CopySpriteTiles(0, 3, (void *)VRAM, (u16 *)(VRAM + 0xE000 + gContestantTurnOrder[a] * 5 * 64 + 0x36), (u8 *)(VRAM + 0x10000 + gSprites[r6].oam.tileNum * 32)); + + DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r8].oam.tileNum) * 32), 0x300); + + // What is this? + zero = 0; + zero = 0; + + DmaFill32Defvars(3, 0, (void *)(VRAM + 0x10000 + (0x28 + gSprites[r6].oam.tileNum) * 32), 0x300); + + gSprites[r8].data[0] = r6; + gSprites[r6].data[0] = r8; + gSprites[r8].data[1] = a; + gSprites[r6].data[1] = a; + return r8; +} + +void DestroyContestantBoxBlinkSprites(u8 spriteId) +{ + u8 spriteId2 = gSprites[spriteId].data[0]; + + FreeSpriteOamMatrix(&gSprites[spriteId2]); + DestroySprite(&gSprites[spriteId2]); + DestroySpriteAndFreeResources(&gSprites[spriteId]); +} + +void SetBlendForContestantBoxBlink(void) +{ + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x0907; +} + +void ResetBlendForContestantBoxBlink(void) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; +} + +void BlinkContestantBox(u8 a, bool8 b) +{ + u8 r5; + + SetBlendForContestantBoxBlink(); + eContestGfxState[gSprites[a].data[1]].boxBlinking = 1; + r5 = gSprites[a].data[0]; + StartSpriteAffineAnim(&gSprites[a], 1); + StartSpriteAffineAnim(&gSprites[r5], 1); + gSprites[a].callback = SpriteCB_BlinkContestantBox; + gSprites[r5].callback = SpriteCallbackDummy; + if (b == FALSE) + PlaySE(SE_CONTEST_MONS_TURN); + else + PlaySE(SE_PC_LOGIN); +} + +void SpriteCB_BlinkContestantBox(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + u8 r1 = sprite->data[0]; + + if (gSprites[r1].affineAnimEnded) + { + sprite->invisible = TRUE; + gSprites[r1].invisible = TRUE; + sprite->callback = SpriteCB_EndBlinkContestantBox; + } + } +} + +void SpriteCB_EndBlinkContestantBox(struct Sprite *sprite) +{ + eContestGfxState[sprite->data[1]].boxBlinking = 0; + DestroyContestantBoxBlinkSprites(sprite->data[0]); + ResetBlendForContestantBoxBlink(); +} + +void Unused_EndBlinkingState(u8 a, int unused) +{ + eContestGfxState[a].boxBlinking = 0; +} + +void ContestDebugTogglePointTotal(void) +{ + eEnableContestDebugging ^= 1; + if (eEnableContestDebugging == 0) + { + u8 i; + + for (i = 0; i < 4; i++) + { + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA308[i][0], + gUnknown_083CA308[i][1], + gUnknown_083CA310[i][0] + 5, + gUnknown_083CA310[i][1] + 1); + } + DrawContestantWindowText(); + SwapMoveDescAndContestTilemaps(); + } + else + { + ContestDebugDoPrint(); + } +} + +void ContestDebugDoPrint(void) +{ + u8 r5 = 0; + u8 sp8[8]; + + if (eEnableContestDebugging != 0) + { + u8 i; + s16 r2; + + for (i = 0; i < 4; i++) + { + Text_FillWindowRectDefPalette( + &gWindowTemplate_Contest_MoveDescription, + 0, + gUnknown_083CA308[i][0], + gUnknown_083CA308[i][1], + gUnknown_083CA310[i][0] + 5, + gUnknown_083CA310[i][1] + 1); + } + for (i = 0; i < 4; i++) + { + r2 = sContestantStatus[i].pointTotal; + if (r2 < 0) + { + r2 = -r2; + sp8[0] = CHAR_HYPHEN; + r5++; + } + ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + sp8, + 592 + gContestantTurnOrder[i] * 22, + gUnknown_083CA310[gContestantTurnOrder[i]][0], + gUnknown_083CA310[gContestantTurnOrder[i]][1]); + r5 = 0; + } + for (i = 0; i < 4; i++) + { + r2 = sContestantStatus[i].appeal; + if (r2 < 0) + { + r2 = -r2; + sp8[0] = CHAR_HYPHEN; + r5++; + } + ConvertIntToDecimalStringN(sp8 + r5, r2, 0, 4); + Text_InitWindowAndPrintText( + &gWindowTemplate_Contest_MoveDescription, + sp8, + 512 + gContestantTurnOrder[i] * 20, + gUnknown_083CA308[gContestantTurnOrder[i]][0], + gUnknown_083CA308[gContestantTurnOrder[i]][1]); + r5 = 0; + } + SwapMoveDescAndContestTilemaps(); + } +} + +void unref_sub_80B0EE8(s32 *a, s32 b) +{ + s32 i; + s32 j; + + for (i = 0; i < b - 1; i++) + { + for (j = b - 1; j > i; j--) + { + if (a[j - 1] > a[j]) + { + s32 temp = a[j]; + + a[j] = a[j - 1]; + a[j - 1] = temp; + } + } + } +} + +// something to do with contest NPC opponents, I think. +void SortContestants(u8 a) +{ + u8 sp0[4]; + u16 sp4[4] = {0}; + s32 i; + s32 r2; + s32 r4; + + // Generate a unique random number for each contestant. + for (i = 0; i < 4; i++) + { + sp4[i] = Random(); + + // Loop through all the numbers generated so far. + for (r2 = 0; r2 < i; r2++) + { + if (sp4[i] == sp4[r2]) + { + // This number isn't unique; try generating again. + i--; + break; + } + } + } + + if (a == 0) + { + // Order based on the results of the Conditions round using Insertion Sort. + // Use the randomOrdering to break ties. + for (i = 0; i < 4; i++) + { + // Append this contestant to the list. + gContestantTurnOrder[i] = i; + + // Determine where the contestant should be ordered. + for (r4 = 0; r4 < i; r4++) + { + if (gContestMonRound1Points[gContestantTurnOrder[r4]] < gContestMonRound1Points[i] + || (gContestMonRound1Points[gContestantTurnOrder[r4]] == gContestMonRound1Points[i] && sp4[gContestantTurnOrder[r4]] < sp4[i])) + { + // Shift everything larger up to make room. + for (r2 = i; r2 > r4; r2--) + gContestantTurnOrder[r2] = gContestantTurnOrder[r2 - 1]; + + // Insert into the new spot. + gContestantTurnOrder[r4] = i; + break; + } + } + + // This is redundant. + // Perhaps GF switched from true insertion sort to in-place insertion sort, and forgot to + // remove this check? + if (r4 == i) + gContestantTurnOrder[i] = i; + } + + // Invert gContestantTurnOrder; above, it was a list of contestant IDs. Now it's a list of turn orderings. + // + // For example, if contestant 3 had the first turn, then `gContestantTurnOrder[1] = 3`. The turn is the index, + // the contestant is the data. After inverting the list, `gContestantTurnOrder[3] = 1`. The contestant is the index, + // and the turn is the data. + memcpy(sp0, gContestantTurnOrder, sizeof(sp0)); + for (i = 0; i < 4; i++) + gContestantTurnOrder[sp0[i]] = i; + } + else + { + // Order contestants based on their ranking. + // If contestants have tied ranking, fill in the next available slot. + // + // Note that ranking is calculated so that shared places still take up a ranking + // space. A ranking like [1, 2, 2, 3] is not possible; it would be [1, 2, 2, 4] + // instead. + memset(sp0, 0xFF, sizeof(sp0)); + for (i = 0; i < 4; i++) + { + u8 r2_2 = sContestantStatus[i].ranking; + + while (1) + { + u8 *ptr = &sp0[r2_2]; + if (*ptr == 0xFF) + { + *ptr = i; + gContestantTurnOrder[i] = r2_2; + break; + } + r2_2++; + } + } + + // Randomize the order of contestants with tied rankings using Selection Sort. + // + // Look through the array for tied ranks, and use randomOrdering to break the tie. + // This ensures that contestants with the same rank will be randomly ordered. This + // uses an in-place slection sort, which involves a lot of extra swapping. + for (i = 0; i < 3; i++) + { + for (r4 = 3; r4 > i; r4--) + { + if (sContestantStatus[r4 - 1].ranking == sContestantStatus[r4].ranking && gContestantTurnOrder[r4 - 1] < gContestantTurnOrder[r4] + && sp4[r4 - 1] < sp4[r4]) + { + u8 temp = gContestantTurnOrder[r4]; + + gContestantTurnOrder[r4] = gContestantTurnOrder[r4 - 1]; + gContestantTurnOrder[r4 - 1] = temp; + } + } + } + } +} + +void DrawContestantWindows(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + s32 windowId = i + 5; + LoadPalette( + eContestTempSave.cachedWindowPalettes[windowId], (gContestantTurnOrder[i] + 5) * 16, 32); + } + DrawContestantWindowText(); +} + +void CalculateAppealMoveImpact(u8 contestant) +{ + bool8 r8; + s32 i; + + sContestantStatus[contestant].appeal = 0; + sContestantStatus[contestant].baseAppeal = 0; + r8 = ContestantCanUseTurn(contestant); + if (r8) + { + u16 move = sContestantStatus[contestant].currMove; + u8 effect = gContestMoves[move].effect; + u8 rnd; + + sContestantStatus[contestant].moveCategory = gContestMoves[sContestantStatus[contestant].currMove].contestCategory; + if (sContestantStatus[contestant].currMove == sContestantStatus[contestant].prevMove && sContestantStatus[contestant].currMove != MOVE_NONE) + { + sContestantStatus[contestant].repeatedMove = TRUE; + sContestantStatus[contestant].moveRepeatCount++; + } + else + { + sContestantStatus[contestant].moveRepeatCount = 0; + } + sContestantStatus[contestant].baseAppeal = gContestEffects[effect].appeal; + sContestantStatus[contestant].appeal = gContestEffects[effect].appeal; + eContestAppealResults.jam = gContestEffects[effect].jam; + eContestAppealResults.jam2 = gContestEffects[effect].jam; + eContestAppealResults.contestant = contestant; + for (i = 0; i < 4; i++) + { + sContestantStatus[i].jam = 0; + eContestAppealResults.unnervedPokes[i] = 0; + } + if (sContestantStatus[contestant].hasJudgesAttention && AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove) == 0) + sContestantStatus[contestant].hasJudgesAttention = 0; + gContestEffectFuncs[effect](); + if (sContestantStatus[contestant].conditionMod == 1) + sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition - 10; + else if (sContestantStatus[contestant].appealTripleCondition) + sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition * 3; + else + sContestantStatus[contestant].appeal += sContestantStatus[contestant].condition; + sContestantStatus[contestant].completedCombo = 0; + sContestantStatus[contestant].usedComboMove = 0; + if (IsContestantAllowedToCombo(contestant)) + { + u8 completedCombo = AreMovesContestCombo(sContestantStatus[contestant].prevMove, sContestantStatus[contestant].currMove); + + if (completedCombo != 0 && sContestantStatus[contestant].hasJudgesAttention) + { + sContestantStatus[contestant].completedCombo = completedCombo; + sContestantStatus[contestant].usedComboMove = 1; + sContestantStatus[contestant].hasJudgesAttention = 0; + sContestantStatus[contestant].comboAppealBonus = sContestantStatus[contestant].baseAppeal * sContestantStatus[contestant].completedCombo; + sContestantStatus[contestant].completedComboFlag = 1; + } + else + { + if (gContestMoves[sContestantStatus[contestant].currMove].comboStarterId != 0) + { + sContestantStatus[contestant].hasJudgesAttention = 1; + sContestantStatus[contestant].usedComboMove = 1; + } + else + { + sContestantStatus[contestant].hasJudgesAttention = 0; + } + } + } + if (sContestantStatus[contestant].repeatedMove) + sContestantStatus[contestant].repeatJam = (sContestantStatus[contestant].moveRepeatCount + 1) * 10; + if (sContestantStatus[contestant].nervous) + { + sContestantStatus[contestant].hasJudgesAttention = 0; + sContestantStatus[contestant].appeal = 0; + sContestantStatus[contestant].baseAppeal = 0; + } + eContestExcitement.moveExcitement = Contest_GetMoveExcitement(sContestantStatus[contestant].currMove); + if (sContestantStatus[contestant].overrideCategoryExcitementMod) + eContestExcitement.moveExcitement = 1; + if (eContestExcitement.moveExcitement > 0) + { + if (sContest.applauseLevel + eContestExcitement.moveExcitement > 4) + eContestExcitement.excitementAppealBonus = 60; + else + eContestExcitement.excitementAppealBonus = 10; + } + else + { + eContestExcitement.excitementAppealBonus = 0; + } + + rnd = Random() % 3; + for (i = 0; i < 4; i++) + { + if (i != contestant) + { + if (rnd == 0) + break; + rnd--; + } + } + sContestantStatus[contestant].contestantAnimTarget = i; + } +} + +void SetContestantEffectStringID(u8 a, u8 b) +{ + sContestantStatus[a].effectStringId = b; +} + +void SetContestantEffectStringID2(u8 a, u8 b) +{ + sContestantStatus[a].effectStringId2 = b; +} + +void SetStartledString(u8 contestant, u8 jam) +{ + if (jam >= 60) + SetContestantEffectStringID(contestant, CONTEST_STRING_TRIPPED_OVER); + else if (jam >= 40) + SetContestantEffectStringID(contestant, CONTEST_STRING_LEAPT_UP); + else if (jam >= 30) + SetContestantEffectStringID(contestant, CONTEST_STRING_UTTER_CRY); + else if (jam >= 20) + SetContestantEffectStringID(contestant, CONTEST_STRING_TURNED_BACK); + else if (jam >= 10) + SetContestantEffectStringID(contestant, CONTEST_STRING_LOOKED_DOWN); +} + +void PrintAppealMoveResultText(u8 contestant, u8 stringId) +{ + StringCopy(gStringVar1, gContestMons[contestant].nickname); + StringCopy(gStringVar2, gMoveNames[sContestantStatus[contestant].currMove]); + if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_COOL) + StringCopy(gStringVar3, gText_Contest_Shyness); + else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_BEAUTY) + StringCopy(gStringVar3, gText_Contest_Anxiety); + else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_CUTE) + StringCopy(gStringVar3, gText_Contest_Laziness); + else if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory == CONTEST_CATEGORY_SMART) + StringCopy(gStringVar3, gText_Contest_Hesitancy); + else + StringCopy(gStringVar3, gText_Contest_Fear); + StringExpandPlaceholders(gStringVar4, gUnknown_083CC188[stringId]); + ContestClearGeneralTextWindow(); + Contest_StartTextPrinter(&gMenuWindow, gStringVar4, 776, 1, 15); +} + +void MakeContestantNervous(u8 p) +{ + sContestantStatus[p].nervous = 1; + sContestantStatus[p].currMove = MOVE_NONE; +} + +// This function calculates the new turn order for the next round. The +// algorithm first checks for explicit turn assignments in the +// ContestantStatus::nextTurnOrder field of each contestant. The remaining +// turns are assigned such that the turn order will reverse. +// +// For example, if no pokemon have a defined nextTurnOrder, then the 4th +// will become 1st, the 3rd will become 2nd, etc. +// +// Note: This function assumes that multiple pokemon cannot have the same +// nextTurnOrder value. +void ApplyNextTurnOrder(void) +{ + u8 nextContestant = 0; + s32 i; + s32 j; + u8 newTurnOrder[4]; + bool8 isContestantOrdered[4]; + + for (i = 0; i < 4; i++) + { + newTurnOrder[i] = gContestantTurnOrder[i]; + isContestantOrdered[i] = FALSE; + } + + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + if (sContestantStatus[j].nextTurnOrder == i) + { + newTurnOrder[j] = i; + isContestantOrdered[j] = TRUE; + break; + } + } + if (j == 4) + { + for (j = 0; j < 4; j++) + { + if (isContestantOrdered[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF) + { + nextContestant = j; + j++; + break; + } + } + for (; j < 4; j++) + { + if (isContestantOrdered[j] == 0 && sContestantStatus[j].nextTurnOrder == 0xFF + && gContestantTurnOrder[nextContestant] > gContestantTurnOrder[j]) + nextContestant = j; + } + newTurnOrder[nextContestant] = i; + isContestantOrdered[nextContestant] = 1; + } + } + + for (i = 0; i < 4; i++) + { + eContestAppealResults.turnOrder[i] = newTurnOrder[i]; + sContestantStatus[i].nextTurnOrder = 0xFF; + sContestantStatus[i].turnOrderMod = 0; + gContestantTurnOrder[i] = newTurnOrder[i]; + } +} + +void SpriteCB_JudgeSpeechBubble(struct Sprite *sprite) +{ + if (sprite->data[1]++ > 84) + { + sprite->data[1] = 0; + sprite->invisible = TRUE; + sprite->callback = SpriteCallbackDummy; + sContest.waitForJudgeSpeechBubble = 0; + } +} + +void DoJudgeSpeechBubble(u8 a) +{ + u8 spriteId = sContest.judgeSpeechBubbleSpriteId; + + switch (a) + { + case 0: + case 1: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0]; + PlaySE(SE_FAILURE); + break; + case 2: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 4; + PlaySE(SE_SUCCESS); + break; + case 3: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 8; + PlaySE(SE_SUCCESS); + break; + case 4: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; + PlaySE(SE_WARP_IN); + break; + case 5: // exactly the same as case 4 + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 12; + PlaySE(SE_WARP_IN); + break; + case 6: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 16; + PlaySE(SE_WARP_IN); + break; + case 8: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 24; + PlaySE(SE_M_HEAL_BELL); + break; + case 7: + default: + gSprites[spriteId].oam.tileNum = gSprites[spriteId].data[0] + 20; + PlaySE(SE_WARP_IN); + break; + } + gSprites[spriteId].data[1] = 0; + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].callback = SpriteCB_JudgeSpeechBubble; + sContest.waitForJudgeSpeechBubble = 1; +} + +void UpdateApplauseMeter(void) +{ + s32 i; + + for (i = 0; i < 5; i++) + { + const u8 *src; + + if (i < sContest.applauseLevel) + src = gContestApplauseMeterGfx + 64; + else + src = gContestApplauseMeterGfx; + CpuCopy32(src, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 17 + i) * 32), 32); + CpuCopy32(src + 32, (void *)(VRAM + 0x10000 + (gSprites[sContest.applauseMeterSpriteId].oam.tileNum + 25 + i) * 32), 32); + if (sContest.applauseLevel > 4) + StartApplauseOverflowAnimation(); + } +} + +UNUSED +void unref_sub_80B19D0(void) +{ + u8 str[20]; + StringCopy(str, gUnknown_083CC2EC); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, str, 680, 0, 0); +} + +s8 Contest_GetMoveExcitement(u16 move) +{ + return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; +} + +// Launches crowd movement task, maybe +u8 StartApplauseOverflowAnimation(void) +{ + u8 taskId = CreateTask(Task_ApplauseOverflowAnimation, 10); + + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(0x0ABE2); + return taskId; +} + +void Task_ApplauseOverflowAnimation(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 1) + { + gTasks[taskId].data[0] = 0; + if (gTasks[taskId].data[3] == 0) + gTasks[taskId].data[4]++; + else + gTasks[taskId].data[4]--; + BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, gTasks[taskId].data[4], RGB(31, 31, 31)); + if (gTasks[taskId].data[4] == 0 || gTasks[taskId].data[4] == 16) + { + gTasks[taskId].data[3] ^= 1; + if (sContest.applauseLevel < 5) + { + BlendPalette(264 + gTasks[taskId].data[2] * 16, 1, 0, RGB(31, 0, 0)); + DestroyTask(taskId); + } + } + } +} + +void SlideApplauseMeterIn(void) +{ + CreateTask(Task_SlideApplauseMeterIn, 10); + gSprites[sContest.applauseMeterSpriteId].pos2.x = -70; + gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; + sContest.applauseMeterIsMoving = 1; +} + +void Task_SlideApplauseMeterIn(u8 taskId) +{ + struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; + + gTasks[taskId].data[10] += 1664; + sprite->pos2.x += gTasks[taskId].data[10] >> 8; + gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; + if (sprite->pos2.x > 0) + sprite->pos2.x = 0; + if (sprite->pos2.x == 0) + { + sContest.applauseMeterIsMoving = 0; + DestroyTask(taskId); + } +} + +void SlideApplauseMeterOut(void) +{ + if (gSprites[sContest.applauseMeterSpriteId].invisible == TRUE) + { + sContest.applauseMeterIsMoving = 0; + } + else + { + CreateTask(Task_SlideApplauseMeterOut, 10); + gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; + sContest.applauseMeterIsMoving = 1; + } +} + +void Task_SlideApplauseMeterOut(u8 taskId) +{ + struct Sprite *sprite = &gSprites[sContest.applauseMeterSpriteId]; + + gTasks[taskId].data[10] += 1664; + sprite->pos2.x -= gTasks[taskId].data[10] >> 8; + gTasks[taskId].data[10] = gTasks[taskId].data[10] & 0xFF; + if (sprite->pos2.x < -70) + sprite->pos2.x = -70; + if (sprite->pos2.x == -70) + { + sprite->invisible = TRUE; + sContest.applauseMeterIsMoving = 0; + DestroyTask(taskId); + } +} + +void ShowAndUpdateApplauseMeter(s8 a) +{ + u8 taskId = CreateTask(Task_ShowAndUpdateApplauseMeter, 5); + + gTasks[taskId].data[0] = a; + sContest.isShowingApplauseMeter = 1; +} + +void Task_ShowAndUpdateApplauseMeter(u8 taskId) +{ + switch (gTasks[taskId].data[10]) + { + case 0: + SlideApplauseMeterIn(); + gTasks[taskId].data[10]++; + break; + case 1: + if (!sContest.applauseMeterIsMoving) + { + nullsub_18(gTasks[taskId].data[0]); + gTasks[taskId].data[10]++; + } + break; + case 2: + if (gTasks[taskId].data[11]++ > 20) + { + gTasks[taskId].data[11] = 0; + UpdateApplauseMeter(); + sContest.isShowingApplauseMeter = 0; + DestroyTask(taskId); + } + break; + } +} + +UNUSED +void HideApplauseMeterNoAnim(void) +{ + gSprites[sContest.applauseMeterSpriteId].pos2.x = 0; + gSprites[sContest.applauseMeterSpriteId].invisible = FALSE; +} + +UNUSED +void ShowApplauseMeterNoAnim(void) +{ + gSprites[sContest.applauseMeterSpriteId].invisible = TRUE; +} + +void AnimateAudience(void) +{ + CreateTask(Task_AnimateAudience, 15); + sContest.animatingAudience = 1; +} + +void Task_AnimateAudience(u8 taskId) +{ + if (gTasks[taskId].data[10]++ > 6) + { +#ifndef NONMATCHING + register struct Task *task asm("r0"); + register u32 r4 asm("r4") = taskId * 4; +#endif + + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[11] == 0) + { + DmaCopy32Defvars(3, ewram16800, (void *)(VRAM + 0x2000), 0x1000); + } + else + { + DmaCopy32Defvars(3, eUnzippedContestAudience_Gfx, (void *)(VRAM + 0x2000), 0x1000); + gTasks[taskId].data[12]++; + } + +#ifdef NONMATCHING + gTasks[taskId].data[11] ^= 1; + if (gTasks[taskId].data[12] == 9) +#else + // Why won't this match the normal way? + asm("add %0, %1, #0\n\t" + "add %0, %3\n\t" + "lsl %0, #3\n\t" + "add %0, %2\n\t" + : "=r"(task):"r"(r4),"r"(gTasks),"r"(taskId)); + + task->data[11] ^= 1; + if (task->data[12] == 9) +#endif + { + sContest.animatingAudience = 0; + DestroyTask(taskId); + } + } +} + +#define tBlendColor data[0] +#define tBlendCoeff data[1] + +void BlendAudienceBackground(s8 excitementDir, s8 blendDir) +{ + u8 taskId = CreateTask(Task_BlendAudienceBackground, 10); + u16 blendColor; + u8 blendCoeff; + u8 targetBlendCoeff; + + if (excitementDir > 0) + { + blendColor = RGB(30, 27, 8); + if (blendDir > 0) + { + blendCoeff = 0; + targetBlendCoeff = sContest.applauseLevel * 3; + } + else + { + blendCoeff = sContest.applauseLevel * 3; + targetBlendCoeff = 0; + } + } + else + { + blendColor = 0; + if (blendDir > 0) + { + blendCoeff = 0; + targetBlendCoeff = 12; + } + else + { + blendCoeff = 12; + targetBlendCoeff = 0; + } + } + gTasks[taskId].tBlendColor = blendColor; + gTasks[taskId].tBlendCoeff = blendCoeff; + gTasks[taskId].data[2] = blendDir; + gTasks[taskId].data[3] = targetBlendCoeff; + // Because this isn't set to TRUE here, the main task doesn't wait for the color blend + // Unclear if this was intentional or not (perhaps waiting added too much delay). In any case it does nothing now + sContest.waitForAudienceBlend = 0; +} + +void Task_BlendAudienceBackground(u8 taskId) +{ + if (gTasks[taskId].data[10]++ >= 0) + { + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[2] > 0) + gTasks[taskId].tBlendCoeff++; + else + gTasks[taskId].tBlendCoeff--; + BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) + { + DestroyTask(taskId); + sContest.waitForAudienceBlend = 0; + } + } +} + +#undef tBlendColor +#undef tBlendCoeff + +void ShowHideNextTurnGfx(bool8 a) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (sContestantStatus[i].turnOrderMod != 0 && a) + { + CpuCopy32( + GetTurnOrderNumberGfx(i), + (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 5) * 32), + 64); + gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = gUnknown_083CA33C[gContestantTurnOrder[i]]; + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE; + } + else + { + gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = TRUE; + } + } +} + +const u8 *GetTurnOrderNumberGfx(u8 contestant) +{ + if (sContestantStatus[contestant].turnOrderMod != 1) + return gContestNextTurnRandomGfx; + else + return gContestNextTurnNumbersGfx + sContestantStatus[contestant].nextTurnOrder * 64; +} + +void DrawUnnervedSymbols(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (eContestAppealResults.unnervedPokes[i] != 0 && !Contest_IsMonsTurnDisabled(i)) + { + u8 r4 = gContestantTurnOrder[i] * 5 + 2; + u16 r0 = GetStatusSymbolTileOffset(i, 3); + + *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0; + *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1; + *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16; + *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17; + PlaySE(SE_CONTEST_ICON_CHANGE); + } + } +} + +bool8 IsContestantAllowedToCombo(u8 contestant) +{ + if (sContestantStatus[contestant].repeatedMove || sContestantStatus[contestant].nervous) + return FALSE; + else + return TRUE; +} + +void SetBgForCurtainDrop(void) +{ + s32 i; + + ((vBgCnt *)®_BG1CNT)->priority = 0; + ((vBgCnt *)®_BG1CNT)->screenSize = 1; + ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; + + gBattle_BG1_X = DISPLAY_WIDTH; + gBattle_BG1_Y = DISPLAY_HEIGHT; + REG_BG1HOFS = DISPLAY_WIDTH; + REG_BG1VOFS = DISPLAY_HEIGHT; + + DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); + LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000)); + + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 0; + + for (i = 0; i < 4; i++) + { + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 1; + gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 1; + } + + ((vBgCnt *)®_BG2CNT)->priority = 1; + ((vBgCnt *)®_BG0CNT)->priority = 1; + ((vBgCnt *)®_BG1CNT)->screenSize = 2; +} + +void UpdateContestantBoxOrder(void) +{ + s32 i; + + DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000); + DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + + ((vBgCnt *)®_BG1CNT)->priority = 1; + ((vBgCnt *)®_BG1CNT)->screenSize = 0; + ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 2; + + for (i = 0; i < 4; i++) + { + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.priority = 0; + gSprites[eContestGfxState[i].nextTurnSpriteId].oam.priority = 0; + } +} + +void Task_StartDropCurtainAtRoundEnd(u8 taskId) +{ + gBattle_BG1_X = 0; + gBattle_BG1_Y = DISPLAY_HEIGHT; + PlaySE12WithPanning(SE_CONTEST_CURTAIN_FALL, 0); + gTasks[taskId].func = Task_UpdateCurtainDropAtRoundEnd; +} + +void Task_UpdateCurtainDropAtRoundEnd(u8 taskId) +{ + if ((s16)(gBattle_BG1_Y -= 7) < 0) + gBattle_BG1_Y = 0; + if (gBattle_BG1_Y == 0) // Why cast? + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = Task_ResetForNextRound; + } +} + +void Task_ResetForNextRound(u8 taskId) +{ + s32 i; + + switch (gTasks[taskId].data[0]) + { + case 0: + for (i = 0; i < 4; i++) + sContest.prevTurnOrder[i] = gContestantTurnOrder[i]; + FillContestantWindowBgs(); + UpdateBlendTaskContestantsData(); + DrawConditionStars(); + DrawContestantWindows(); + ShowHideNextTurnGfx(TRUE); + UpdateSliderHeartSpriteYPositions(); + gTasks[taskId].data[0] = 1; + break; + case 1: + if (gIsLinkContest & 1) + { + u8 taskId2; + + sContest.waitForLink = 1; + if (IsPlayerLinkLeader()) + SetContestantStatusesForNextRound(); + taskId2 = CreateTask(Task_LinkContest_CommunicateAppealsState, 0); + SetTaskFuncWithFollowupFunc( + taskId2, Task_LinkContest_CommunicateAppealsState, Task_EndWaitForLink); + ContestPrintLinkStandby(); + gTasks[taskId].data[0] = 2; + } + else + { + SetContestantStatusesForNextRound(); + gTasks[taskId].data[0] = 3; + } + break; + case 2: + if (!sContest.waitForLink) + gTasks[taskId].data[0] = 3; + break; + case 3: + DrawStatusSymbols(); + SwapMoveDescAndContestTilemaps(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_WaitRaiseCurtainAtRoundEnd; + break; + } +} + +void Task_UpdateRaiseCurtainAtRoundEnd(u8 taskId) +{ + if ((s16)(gBattle_BG1_Y += 7) > DISPLAY_HEIGHT) + gTasks[taskId].func = Task_UpdateContestantBoxOrder; +} + +void Task_WaitRaiseCurtainAtRoundEnd(u8 taskId) +{ + if (gTasks[taskId].data[2] < 10) + { + gTasks[taskId].data[2]++; + } + else + { + if (gTasks[taskId].data[1] == 0) + { + if (gTasks[taskId].data[0] == 16) + gTasks[taskId].data[1]++; + else + gTasks[taskId].data[0]++; + } + else + { + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = Task_StartRaiseCurtainAtRoundEnd; + } + else + { + gTasks[taskId].data[0]--; + } + } + } +} + +void Task_StartRaiseCurtainAtRoundEnd(u8 taskId) +{ + if (gTasks[taskId].data[2] < 10) + { + gTasks[taskId].data[2]++; + } + else + { + gTasks[taskId].data[2] = 0; + PlaySE12WithPanning(SE_CONTEST_CURTAIN_RISE, 0); + gTasks[taskId].func = Task_UpdateRaiseCurtainAtRoundEnd; + } +} + +void AnimateSliderHearts(u8 animId) +{ + s32 i; + u8 taskId; + + for (i = 0; i < 4; i++) + { + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.matrixNum = AllocOamMatrix(); + gSprites[eContestGfxState[i].sliderHeartSpriteId].oam.affineMode = 1; + StartSpriteAffineAnim(&gSprites[eContestGfxState[i].sliderHeartSpriteId], animId); + if (animId == 2) + { + AnimateSprite(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = FALSE; + } + } + taskId = CreateTask(Task_WaitForSliderHeartAnim, 5); + gTasks[taskId].data[0] = animId; + sContest.sliderHeartsAnimating = 1; +} + +void Task_WaitForSliderHeartAnim(u8 taskId) +{ + s32 i; + + if (gSprites[eContestGfxState[0].sliderHeartSpriteId].affineAnimEnded) + { + if ((u8)gTasks[taskId].data[0] == 1) + { + for (i = 0; i < 4; i++) + gSprites[eContestGfxState[i].sliderHeartSpriteId].invisible = TRUE; + } + for (i = 0; i < 4; i++) + FreeSpriteOamMatrix(&gSprites[eContestGfxState[i].sliderHeartSpriteId]); + sContest.sliderHeartsAnimating = 0; + DestroyTask(taskId); + } +} + +u16 SanitizeMove(u16 move) +{ + if (move >= NUM_MOVES) + move = MOVE_POUND; + return move; +} + +u16 SanitizeSpecies(u16 species) +{ + if (species >= NUM_SPECIES) + species = SPECIES_NONE; + return species; +} + +void SetMoveSpecificAnimData(u8 contestant) +{ + s32 i; + u16 move = SanitizeMove(sContestantStatus[contestant].currMove); + u16 species = SanitizeSpecies(gContestMons[contestant].species); + u8 r5_2; + + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + ClearBattleAnimationVars(); + for (i = 0; i < 4; i++) + gBattleMonForms[i] = 0; + switch (move) + { + case MOVE_CURSE: + if (gBaseStats[species].type1 == TYPE_GHOST || gBaseStats[species].type2 == TYPE_GHOST) + gAnimMoveTurn = 0; + else + gAnimMoveTurn = 1; + break; + case MOVE_TRANSFORM: + case MOVE_ROLE_PLAY: + r5_2 = sContestantStatus[contestant].contestantAnimTarget; + gContestResources__moveAnim.targetSpecies = SanitizeSpecies(gContestMons[r5_2].species); + gContestResources__moveAnim.unk10 = gContestMons[r5_2].personality; + gContestResources__moveAnim.hasTargetAnim = 1; + break; + case MOVE_RETURN: + gAnimFriendship = 0xFF; + break; + case MOVE_FRUSTRATION: + gAnimFriendship = 0; + break; + case MOVE_SOLAR_BEAM: + case MOVE_RAZOR_WIND: + case MOVE_SKULL_BASH: + case MOVE_SKY_ATTACK: + if (sContest.moveAnimTurnCount == 0) + { + sContest.moveAnimTurnCount = 2; + gAnimMoveTurn = 0; + } + else + { + gAnimMoveTurn = 1; + } + break; + } + SetBattleTargetSpritePosition(); +} + +void ClearMoveAnimData(UNUSED u8 contestant) +{ + memset(&gContestResources__moveAnim, 0, sizeof(gContestResources__moveAnim)); + if (sContest.moveAnimTurnCount != 0) + sContest.moveAnimTurnCount--; +} + +void SetMoveAnimAttackerData(u8 contestant) +{ + gContestResources__moveAnim.contestant = contestant; + gContestResources__moveAnim.species = SanitizeSpecies(gContestMons[contestant].species); + gContestResources__moveAnim.personality = gContestMons[contestant].personality; + gContestResources__moveAnim.otId = gContestMons[contestant].otId; +} + +void CreateInvisibleBattleTargetSprite(void) +{ + gBattlerSpriteIds[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + InitSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]]); + SetBattleTargetSpritePosition(); +} + +void SetBattleTargetSpritePosition(void) +{ + struct Sprite *sprite = &gSprites[gBattlerSpriteIds[3]]; + + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->pos1.x = GetBattlerSpriteCoord(3, 0); + sprite->pos1.y = GetBattlerSpriteCoord(3, 1); + sprite->invisible = TRUE; +} + +void SelectContestMoveBankTarget(u16 move) +{ + switch (gBattleMoves[move].target) + { + case TARGET_UNK2: + case TARGET_USER: + gBattlerTarget = 2; + break; + case TARGET_SELECTED_POKEMON: + case TARGET_RANDOM: + case TARGET_BOTH_ENEMIES: + case TARGET_ALL_EXCEPT_USER: + default: + gBattlerTarget = 3; + break; + } +} + +bool8 Contest_SaveWinner(u8 rank) +{ + s32 i; + u8 captionId = Random() % 3; + + // Get the index of the winner among the contestants + for (i = 0; i < 3; i++) + { + if (gContestFinalStandings[i] == 0) + break; + } + + // Exit if attempting to save a Pokémon other than the player's to the museum + if (rank == CONTEST_SAVE_FOR_MUSEUM && i != gContestPlayerMonIndex) + return FALSE; + + // Adjust the random painting caption depending on the category + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + captionId += 0; + break; + case CONTEST_CATEGORY_BEAUTY: + captionId += 3; + break; + case CONTEST_CATEGORY_CUTE: + captionId += 6; + break; + case CONTEST_CATEGORY_SMART: + captionId += 9; + break; + case CONTEST_CATEGORY_TOUGH: + captionId += 12; + break; + } + if (rank != CONTEST_SAVE_FOR_ARTIST) + { + // Save winner in the saveblock + // Used to save any winner for the Contest Hall or the Museum + // but excludes the temporary save used by the artist + u8 saveIdx = GetContestWinnerSaveIdx(rank, TRUE); + + gSaveBlock1.contestWinners[saveIdx].personality = gContestMons[i].personality; + gSaveBlock1.contestWinners[saveIdx].species = gContestMons[i].species; + gSaveBlock1.contestWinners[saveIdx].otId = gContestMons[i].otId; + StringCopy(gSaveBlock1.contestWinners[saveIdx].nickname, gContestMons[i].nickname); + StringCopy(gSaveBlock1.contestWinners[saveIdx].trainerName, gContestMons[i].trainerName); + if (rank != CONTEST_SAVE_FOR_MUSEUM) + gSaveBlock1.contestWinners[saveIdx].contestCategory = gSpecialVar_ContestCategory; + else + gSaveBlock1.contestWinners[saveIdx].contestCategory = captionId; + } + else + { + eCurContestWinner.personality = gContestMons[i].personality; + eCurContestWinner.otId = gContestMons[i].otId; + eCurContestWinner.species = gContestMons[i].species; + StringCopy(eCurContestWinner.nickname, gContestMons[i].nickname); + if (gIsLinkContest & 1) + StringCopy(eCurContestWinner.trainerName, gLinkPlayers[i].name); + else + StringCopy(eCurContestWinner.trainerName, gContestMons[i].trainerName); + eCurContestWinner.contestCategory = captionId; + } + return TRUE; +} + +// Rank is either a regular contest rank (for saving winners to show in the Contest Hall) +// Or one of two special IDs listed below (for saving winners to show in Museum, or from the artist) +// If just retrieving the index where the winner *would* go, shift is FALSE +// If actually preparing to insert the winner into the saveblock, shift is TRUE +u8 GetContestWinnerSaveIdx(u8 rank, u8 shift) +{ + s32 i; + + switch (rank) + { + case CONTEST_RANK_NORMAL: + case CONTEST_RANK_SUPER: + return rank; + case CONTEST_RANK_HYPER: + if (shift) + { + for (i = CONTEST_WINNER_HYPER_3 - 1; i > CONTEST_WINNER_HYPER_1 - 1; i--) + memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); + } + return CONTEST_WINNER_HYPER_1 - 1; + case CONTEST_RANK_MASTER: + if (shift) + { + for (i = CONTEST_WINNER_MASTER_3 - 1; i > CONTEST_WINNER_MASTER_1 - 1; i--) + memcpy(&gSaveBlock1.contestWinners[i], &gSaveBlock1.contestWinners[i - 1], sizeof(struct ContestWinner)); + } + return CONTEST_WINNER_MASTER_1 - 1; + default: +// case CONTEST_SAVE_FOR_MUSEUM: +// case CONTEST_SAVE_FOR_ARTIST: + switch (gSpecialVar_ContestCategory) + { + case CONTEST_CATEGORY_COOL: + return CONTEST_WINNER_MUSEUM_COOL - 1; + case CONTEST_CATEGORY_BEAUTY: + return CONTEST_WINNER_MUSEUM_BEAUTY - 1; + case CONTEST_CATEGORY_CUTE: + return CONTEST_WINNER_MUSEUM_CUTE - 1; + case CONTEST_CATEGORY_SMART: + return CONTEST_WINNER_MUSEUM_SMART - 1; + case CONTEST_CATEGORY_TOUGH: + default: + return CONTEST_WINNER_MUSEUM_TOUGH - 1; + } + } +} + +void Contest_ResetWinners(void) +{ + s32 i; + + for (i = 0; i < 8; i++) + gSaveBlock1.contestWinners[i] = gDefaultContestWinners[i]; +} + diff --git a/src/contest_ai.c b/src/contest_ai.c index 06d4c11ca..9e62fcd70 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -380,7 +380,7 @@ static u8 sub_8128A7C(u8 var) int i; for(i = 0; i < 4; i++) - if(shared192D0.turnOrder[i] == var) + if(eContestAppealResults.turnOrder[i] == var) break; return i; @@ -402,7 +402,7 @@ static void ContestAICmd_unk_00(void) static void ContestAICmd_get_turn(void) { - eContestAI->scriptResult = sContest.turnNumber; + eContestAI->scriptResult = sContest.appealNumber; gAIScriptPtr += 1; } @@ -494,7 +494,7 @@ static void ContestAICmd_unk_0A(void) static void ContestAICmd_get_user_order(void) { - eContestAI->scriptResult = shared192D0.turnOrder[eContestAI->unk41]; + eContestAI->scriptResult = eContestAppealResults.turnOrder[eContestAI->unk41]; gAIScriptPtr += 1; } @@ -586,7 +586,7 @@ static void ContestAICmd_unk_14(void) static void ContestAICmd_unk_15(void) { - eContestAI->scriptResult = sContestantStatus[eContestAI->unk41].unk4; + eContestAI->scriptResult = sContestantStatus[eContestAI->unk41].pointTotal; gAIScriptPtr += 1; } @@ -632,7 +632,7 @@ static void ContestAICmd_unk_19(void) static void ContestAICmd_unk_1A(void) { - eContestAI->scriptResult = gContestMonConditions[eContestAI->unk41]; + eContestAI->scriptResult = gContestMonRound1Points[eContestAI->unk41]; gAIScriptPtr += 1; } @@ -1196,7 +1196,7 @@ static void ContestAICmd_get_used_combo_starter(void) u16 result = 0; u8 var = sub_8128A7C(gAIScriptPtr[1]); - if(sub_80B214C(var)) + if(IsContestantAllowedToCombo(var)) result = gContestMoves[sContestantStatus[var].prevMove].comboStarterId ? 1 : 0; eContestAI->scriptResult = result; @@ -1277,7 +1277,7 @@ static void ContestAICmd_get_val_812A188(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = sContestantStatus[var].unk15_3; + eContestAI->scriptResult = sContestantStatus[var].completedComboFlag; gAIScriptPtr += 2; } @@ -1305,7 +1305,7 @@ static void ContestAICmd_unk_59(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = sContestantStatus[var].unk4 - sContestantStatus[eContestAI->unk41].unk4; + eContestAI->scriptResult = sContestantStatus[var].pointTotal - sContestantStatus[eContestAI->unk41].pointTotal; gAIScriptPtr += 2; } @@ -1353,7 +1353,8 @@ static void ContestAICmd_unk_5E(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); - eContestAI->scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI->unk41]; + eContestAI->scriptResult = + gContestMonRound1Points[var] - gContestMonRound1Points[eContestAI->unk41]; gAIScriptPtr += 2; } @@ -1401,7 +1402,7 @@ static void ContestAICmd_unk_63(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); u8 var2 = gAIScriptPtr[2]; - u16 move = sContest.unk19220[var2][var]; + u16 move = sContest.moveHistory[var2][var]; eContestAI->scriptResult = gContestMoves[move].effect; gAIScriptPtr += 3; @@ -1451,7 +1452,7 @@ static void ContestAICmd_unk_68(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); u8 var2 = gAIScriptPtr[2]; - s8 result = sContest.unk19248[var2][var]; + s8 result = sContest.excitementHistory[var2][var]; eContestAI->scriptResult = result; gAIScriptPtr += 3; @@ -1501,7 +1502,7 @@ static void ContestAICmd_unk_6D(void) { u8 var = sub_8128A7C(gAIScriptPtr[1]); u8 var2 = gAIScriptPtr[2]; - u16 move = sContest.unk19220[var2][var]; + u16 move = sContest.moveHistory[var2][var]; eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].effectType; gAIScriptPtr += 3; diff --git a/src/contest_effect.c b/src/contest_effect.c index 2cd1e5828..417f5512c 100644 --- a/src/contest_effect.c +++ b/src/contest_effect.c @@ -81,93 +81,93 @@ static void ContestEffect_HighlyAppealing(void) // After this move, the user is more easily startled. static void ContestEffect_UserMoreEasilyStartled(void) { - sContestantStatus[shared192D0.contestant].moreEasilyStartled = TRUE; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MORE_CONSCIOUS); + sContestantStatus[eContestAppealResults.contestant].moreEasilyStartled = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MORE_CONSCIOUS); } // Makes a great appeal, but allows no more to the end. static void ContestEffect_GreatAppealButNoMoreMoves(void) { - sContestantStatus[shared192D0.contestant].exploded = TRUE; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NO_APPEAL); + sContestantStatus[eContestAppealResults.contestant].exploded = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_APPEAL); } // Can be used repeatedly without boring the JUDGE. static void ContestEffect_RepetitionNotBoring(void) { - sContestantStatus[shared192D0.contestant].usedRepeatableMove = TRUE; - sContestantStatus[shared192D0.contestant].disappointedRepeat = FALSE; - sContestantStatus[shared192D0.contestant].moveRepeatCount = 0; + sContestantStatus[eContestAppealResults.contestant].usedRepeatableMove = TRUE; + sContestantStatus[eContestAppealResults.contestant].repeatedMove = FALSE; + sContestantStatus[eContestAppealResults.contestant].moveRepeatCount = 0; } // Can avoid being startled by others once. static void ContestEffect_AvoidStartleOnce(void) { - sContestantStatus[shared192D0.contestant].jamSafetyCount = 1; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SETTLE_DOWN); + sContestantStatus[eContestAppealResults.contestant].jamSafetyCount = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SETTLE_DOWN); } // Can avoid being startled by others. static void ContestEffect_AvoidStartle(void) { - sContestantStatus[shared192D0.contestant].immune = TRUE; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS); + sContestantStatus[eContestAppealResults.contestant].immune = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_OBLIVIOUS_TO_OTHERS); } // Can avoid being startled by others a little. static void ContestEffect_AvoidStartleSlightly(void) { - sContestantStatus[shared192D0.contestant].jamReduction = 20; - SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_LESS_AWARE); + sContestantStatus[eContestAppealResults.contestant].jamReduction = 20; + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_LESS_AWARE); } // After this move, the user is less likely to be startled. static void ContestEffect_UserLessEasilyStartled(void) { - sContestantStatus[shared192D0.contestant].resistant = TRUE; - SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_STOPPED_CARING); + sContestantStatus[eContestAppealResults.contestant].resistant = TRUE; + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_STOPPED_CARING); } // Slightly startles the POKéMON in front. static void ContestEffect_StartleFrontMon(void) { u8 idx = 0; - u8 a = shared192D0.contestant; + u8 a = eContestAppealResults.contestant; - if (shared192D0.turnOrder[a] != 0) { + if (eContestAppealResults.turnOrder[a] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[a] - 1 == shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[a] - 1 == eContestAppealResults.turnOrder[i]) break; } - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Slightly startles those that have made appeals. static void ContestEffect_StartlePrevMons(void) { u8 idx = 0; - u8 a = shared192D0.contestant; + u8 a = eContestAppealResults.contestant; - if (shared192D0.turnOrder[a] != 0) { + if (eContestAppealResults.turnOrder[a] != 0) { int i, j; for (i = 0, j = 0; i < 4; i++) - if (shared192D0.turnOrder[a] > shared192D0.turnOrder[i]) - shared192D0.jamQueue[j++] = i; - shared192D0.jamQueue[j] = 0xFF; + if (eContestAppealResults.turnOrder[a] > eContestAppealResults.turnOrder[i]) + eContestAppealResults.jamQueue[j++] = i; + eContestAppealResults.jamQueue[j] = 0xFF; idx = WasAtLeastOneOpponentJammed(); } if (idx == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Startles the POKéMON that appealed before the user. @@ -182,7 +182,7 @@ static void ContestEffect_StartlePrevMon2(void) jam = 40; else jam = 60; - shared192D0.jam = jam; + eContestAppealResults.jam = jam; ContestEffect_StartleFrontMon(); } @@ -190,18 +190,18 @@ static void ContestEffect_StartlePrevMon2(void) static void ContestEffect_StartlePrevMons2(void) { u8 numStartled = 0; - u8 contestant = shared192D0.contestant; + u8 contestant = eContestAppealResults.contestant; - if (shared192D0.turnOrder[contestant] != 0) + if (eContestAppealResults.turnOrder[contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) { - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; { u8 rval = Random() % 10; int jam; @@ -218,31 +218,31 @@ static void ContestEffect_StartlePrevMons2(void) jam = 40; else jam = 60; - shared192D0.jam = jam; + eContestAppealResults.jam = jam; } if (WasAtLeastOneOpponentJammed()) numStartled++; } } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); if (numStartled == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Shifts the JUDGE's attention from others. static void ContestEffect_ShiftJudgeAttention(void) { bool32 hitAny = FALSE; - u8 contestant = shared192D0.contestant; + u8 contestant = eContestAppealResults.contestant; - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i] && sContestantStatus[i].hasJudgesAttention && CanUnnerveContestant(i)) { @@ -253,10 +253,10 @@ static void ContestEffect_ShiftJudgeAttention(void) } } } - SetContestantEffectStringID(shared192D0.contestant,CONTEST_STRING_DAZZLE_ATTEMPT); + SetContestantEffectStringID(eContestAppealResults.contestant,CONTEST_STRING_DAZZLE_ATTEMPT); if (!hitAny) { - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } } @@ -264,81 +264,81 @@ static void ContestEffect_ShiftJudgeAttention(void) static void ContestEffect_StartleMonWithJudgesAttention(void) { u8 numStartled = 0; - u8 contestant = shared192D0.contestant; + u8 contestant = eContestAppealResults.contestant; - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[contestant] > eContestAppealResults.turnOrder[i]) { if (sContestantStatus[i].hasJudgesAttention) - shared192D0.jam = 50; + eContestAppealResults.jam = 50; else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numStartled++; } } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); if (numStartled == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Jams the others, and misses one turn of appeals. static void ContestEffect_JamsOthersButMissOneTurn(void) { - sContestantStatus[shared192D0.contestant].turnSkipped = TRUE; + sContestantStatus[eContestAppealResults.contestant].turnSkipped = TRUE; ContestEffect_StartlePrevMons(); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Startles POKéMON that made a same-type appeal. static void ContestEffect_StartleMonsSameTypeAppeal(void) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; JamByMoveCategory(gContestMoves[move].contestCategory); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made COOL appeals. static void ContestEffect_StartleMonsCoolAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_COOL); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made BEAUTY appeals. static void ContestEffect_StartleMonsBeautyAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_BEAUTY); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made CUTE appeals. static void ContestEffect_StartleMonsCuteAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_CUTE); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made SMART appeals. static void ContestEffect_StartleMonsSmartAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_SMART); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Badly startles POKéMON that made TOUGH appeals. static void ContestEffect_StartleMonsToughAppeal(void) { JamByMoveCategory(CONTEST_CATEGORY_TOUGH); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // Makes one POKéMON after the user nervous. @@ -346,13 +346,13 @@ static void ContestEffect_MakeFollowingMonNervous(void) { bool32 hitAny = FALSE; - if (shared192D0.turnOrder[shared192D0.contestant] != 3) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 3) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] + 1 == shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] + 1 == eContestAppealResults.turnOrder[i]) { if (CanUnnerveContestant(i)) { @@ -368,9 +368,9 @@ static void ContestEffect_MakeFollowingMonNervous(void) } } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_UNNERVE_ATTEMPT); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_ATTEMPT); if (!hitAny) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Makes all POKéMON after the user nervous. @@ -387,7 +387,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) memset(contestantIds, 0xFF, ARRAY_COUNT(contestantIds)); for (i = 0, numAfter = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] < shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] < eContestAppealResults.turnOrder[i] && !sContestantStatus[i].nervous && !Contest_IsMonsTurnDisabled(i)) contestantIds[numAfter++] = i; } @@ -414,7 +414,7 @@ static void ContestEffect_MakeFollowingMonsNervous(void) } for (i = 0; i < 4; i++) { - if (sContestantStatus[i].hasJudgesAttention && sub_80B214C(i)) + if (sContestantStatus[i].hasJudgesAttention && IsContestantAllowedToCombo(i)) oddsMod[i] = gComboStarterLookupTable[gContestMoves[sContestantStatus[i].prevMove].comboStarterId] * 10; else oddsMod[i] = 0; @@ -441,12 +441,12 @@ static void ContestEffect_MakeFollowingMonsNervous(void) SetContestantEffectStringID(contestantIds[i], CONTEST_STRING_UNAFFECTED); numUnnerved++; } - shared192D0.unnervedPokes[contestantIds[i]] = 1; + eContestAppealResults.unnervedPokes[contestantIds[i]] = 1; } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_UNNERVE_WAITING); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_UNNERVE_WAITING); if (numUnnerved == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } // Worsens the condition of those that made appeals. @@ -457,7 +457,7 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i] && sContestantStatus[i].condition > 0 && CanUnnerveContestant(i)) { @@ -468,9 +468,9 @@ static void ContestEffect_WorsenConditionOfPrevMons(void) } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_TAUNT_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_TAUNT_WELL); if (numHit == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_IGNORED); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } // Badly startles POKéMON in good condition. @@ -481,42 +481,42 @@ static void ContestEffect_BadlyStartlesMonsInGoodCondition(void) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (sContestantStatus[i].condition > 0) - shared192D0.jam = 40; + eContestAppealResults.jam = 40; else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numHit++; } } - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_JAM_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_JAM_WELL); if (numHit == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_IGNORED); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_IGNORED); } // The appeal works great if performed first. static void ContestEffect_BetterIfFirst(void) { - if (gUnknown_02038696[shared192D0.contestant] == 0) + if (gContestantTurnOrder[eContestAppealResults.contestant] == 0) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; - sContestantStatus[shared192D0.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_HUSTLE_STANDOUT); + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; + sContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HUSTLE_STANDOUT); } } // The appeal works great if performed last. static void ContestEffect_BetterIfLast(void) { - if (gUnknown_02038696[shared192D0.contestant] == 3) + if (gContestantTurnOrder[eContestAppealResults.contestant] == 3) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; - sContestantStatus[shared192D0.contestant].appeal2 += 2 * gContestEffects[gContestMoves[move].effect].appeal; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; + sContestantStatus[eContestAppealResults.contestant].appeal += 2 * gContestEffects[gContestMoves[move].effect].appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_HARD_UNNOTICED); } } @@ -528,19 +528,19 @@ static void ContestEffect_AppealAsGoodAsPrevOnes(void) for (i = 0, appealSum = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) - appealSum += sContestantStatus[i].appeal2; + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) + appealSum += sContestantStatus[i].appeal; } if (appealSum < 0) appealSum = 0; - if (shared192D0.turnOrder[shared192D0.contestant] == 0 || appealSum == 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_WELL); + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appealSum == 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL); else { - sContestantStatus[shared192D0.contestant].appeal2 += appealSum / 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_BEFORE); + sContestantStatus[eContestAppealResults.contestant].appeal += appealSum / 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_BEFORE); } - sContestantStatus[shared192D0.contestant].appeal2 = RoundTowardsZero(sContestantStatus[shared192D0.contestant].appeal2); + sContestantStatus[eContestAppealResults.contestant].appeal = RoundTowardsZero(sContestantStatus[eContestAppealResults.contestant].appeal); } // Makes the appeal as good as the one before it. @@ -548,40 +548,40 @@ static void ContestEffect_AppealAsGoodAsPrevOne(void) { s16 appeal = 0; - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i]) - appeal = sContestantStatus[i].appeal2; + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) + appeal = sContestantStatus[i].appeal; } } - if (shared192D0.turnOrder[shared192D0.contestant] == 0 || appeal <= 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_WELL2); + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] == 0 || appeal <= 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_WELL2); else { - sContestantStatus[shared192D0.contestant].appeal2 += appeal; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_WORK_PRECEDING); + sContestantStatus[eContestAppealResults.contestant].appeal += appeal; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_WORK_PRECEDING); } } // The appeal works better the later it is performed. static void ContestEffect_BetterWhenLater(void) { - u8 whichTurn = shared192D0.turnOrder[shared192D0.contestant]; + u8 whichTurn = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; if (whichTurn == 0) - sContestantStatus[shared192D0.contestant].appeal2 = 10; + sContestantStatus[eContestAppealResults.contestant].appeal = 10; else - sContestantStatus[shared192D0.contestant].appeal2 = 20 * whichTurn; + sContestantStatus[eContestAppealResults.contestant].appeal = 20 * whichTurn; if (whichTurn == 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_SHOWN_WELL); else if (whichTurn == 1) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL); else if (whichTurn == 2) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL); else - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY); } // The appeal's quality varies depending on its timing. @@ -593,31 +593,31 @@ static void ContestEffect_QualityDependsOnTiming(void) if (rval < 3) { appeal = 10; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); } else if (rval < 6) { appeal = 20; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); } else if (rval < 8) { appeal = 40; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); } else if (rval < 9) { appeal = 60; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); } else { appeal = 80; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - sContestantStatus[shared192D0.contestant].appeal2 = appeal; + sContestantStatus[eContestAppealResults.contestant].appeal = appeal; } static void ContestEffect_BetterIfSameType(void) { - s8 turnOrder = shared192D0.turnOrder[shared192D0.contestant]; + s8 turnOrder = eContestAppealResults.turnOrder[eContestAppealResults.contestant]; s8 i = turnOrder - 1, j; u16 move; @@ -628,7 +628,7 @@ static void ContestEffect_BetterIfSameType(void) { for (j = 0; j < 4; j++) { - if (shared192D0.turnOrder[j] == i) + if (eContestAppealResults.turnOrder[j] == i) break; } if (sContestantStatus[j].noMoreTurns || sContestantStatus[j].nervous || sContestantStatus[j].numTurnsSkipped) @@ -642,29 +642,29 @@ static void ContestEffect_BetterIfSameType(void) } } - move = sContestantStatus[shared192D0.contestant].currMove; + move = sContestantStatus[eContestAppealResults.contestant].currMove; if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[j].currMove].contestCategory) { - sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD); + sContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SAME_TYPE_GOOD); } } // Works well if different in type than the one before. static void ContestEffect_BetterIfDiffType(void) { - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { - u16 move = sContestantStatus[shared192D0.contestant].currMove; + u16 move = sContestantStatus[eContestAppealResults.contestant].currMove; int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i] && + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i] && gContestMoves[move].contestCategory != gContestMoves[sContestantStatus[i].currMove].contestCategory) { - sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); + sContestantStatus[eContestAppealResults.contestant].appeal += gContestEffects[gContestMoves[move].effect].appeal * 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_DIFF_TYPE_GOOD); break; } } @@ -674,23 +674,23 @@ static void ContestEffect_BetterIfDiffType(void) // Affected by how well the appeal in front goes. static void ContestEffect_AffectedByPrevAppeal(void) { - if (shared192D0.turnOrder[shared192D0.contestant] != 0) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] != 0) { int i; for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] - 1 == shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] - 1 == eContestAppealResults.turnOrder[i]) { - if (sContestantStatus[shared192D0.contestant].appeal2 > sContestantStatus[i].appeal2) + if (sContestantStatus[eContestAppealResults.contestant].appeal > sContestantStatus[i].appeal) { - sContestantStatus[shared192D0.contestant].appeal2 *= 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); + sContestantStatus[eContestAppealResults.contestant].appeal *= 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_STOOD_OUT_AS_MUCH); } - else if (sContestantStatus[shared192D0.contestant].appeal2 < sContestantStatus[i].appeal2) + else if (sContestantStatus[eContestAppealResults.contestant].appeal < sContestantStatus[i].appeal) { - sContestantStatus[shared192D0.contestant].appeal2 = 0; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NOT_AS_WELL); + sContestantStatus[eContestAppealResults.contestant].appeal = 0; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NOT_AS_WELL); } } } @@ -700,24 +700,24 @@ static void ContestEffect_AffectedByPrevAppeal(void) // Ups the user's condition. Helps prevent nervousness. static void ContestEffect_ImproveConditionPreventNervousness(void) { - if (sContestantStatus[shared192D0.contestant].condition < 30) + if (sContestantStatus[eContestAppealResults.contestant].condition < 30) { - sContestantStatus[shared192D0.contestant].condition += 10; - sContestantStatus[shared192D0.contestant].conditionMod = 1; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_CONDITION_ROSE); + sContestantStatus[eContestAppealResults.contestant].condition += 10; + sContestantStatus[eContestAppealResults.contestant].conditionMod = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_CONDITION_ROSE); } else - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_NO_CONDITION_IMPROVE); } // The appeal works well if the user's condition is good. static void ContestEffect_BetterWithGoodCondition(void) { - sContestantStatus[shared192D0.contestant].appealTripleCondition = TRUE; - if (sContestantStatus[shared192D0.contestant].condition != 0) - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_HOT_STATUS); + sContestantStatus[eContestAppealResults.contestant].appealTripleCondition = TRUE; + if (sContestantStatus[eContestAppealResults.contestant].condition != 0) + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_HOT_STATUS); else - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL); } // The next appeal can be made earlier next turn. @@ -727,18 +727,18 @@ static void ContestEffect_NextAppealEarlier(void) s8 j; u8 turnOrder[4]; - if (sContest.turnNumber != 4) + if (sContest.appealNumber != 4) { for (i = 0; i < 4; i++) turnOrder[i] = sContestantStatus[i].nextTurnOrder; - turnOrder[shared192D0.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = 0xFF; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { - if (j != shared192D0.contestant && + if (j != eContestAppealResults.contestant && i == turnOrder[j] && turnOrder[j] == sContestantStatus[j].nextTurnOrder) { @@ -750,15 +750,15 @@ static void ContestEffect_NextAppealEarlier(void) break; } - turnOrder[shared192D0.contestant] = 0; - sContestantStatus[shared192D0.contestant].turnOrderMod = 1; + turnOrder[eContestAppealResults.contestant] = 0; + sContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1; for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = turnOrder[i]; } - sContestantStatus[shared192D0.contestant].turnOrderModAction = 1; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MOVE_UP_LINE); + sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 1; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_UP_LINE); } } @@ -769,18 +769,18 @@ static void ContestEffect_NextAppealLater(void) s8 j; u8 turnOrder[4]; - if (sContest.turnNumber != 4) + if (sContest.appealNumber != 4) { for (i = 0; i < 4; i++) turnOrder[i] = sContestantStatus[i].nextTurnOrder; - turnOrder[shared192D0.contestant] = 0xFF; + turnOrder[eContestAppealResults.contestant] = 0xFF; for (i = 3; i > -1; i--) { for (j = 0; j < 4; j++) { - if (j != shared192D0.contestant && + if (j != eContestAppealResults.contestant && i == turnOrder[j] && turnOrder[j] == sContestantStatus[j].nextTurnOrder) { @@ -792,15 +792,15 @@ static void ContestEffect_NextAppealLater(void) break; } - turnOrder[shared192D0.contestant] = 3; - sContestantStatus[shared192D0.contestant].turnOrderMod = 1; + turnOrder[eContestAppealResults.contestant] = 3; + sContestantStatus[eContestAppealResults.contestant].turnOrderMod = 1; for (i = 0; i < 4; i++) { sContestantStatus[i].nextTurnOrder = turnOrder[i]; } - sContestantStatus[shared192D0.contestant].turnOrderModAction = 2; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_MOVE_BACK_LINE); + sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 2; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_MOVE_BACK_LINE); } } @@ -818,7 +818,7 @@ static void ContestEffect_ScrambleNextTurnOrder(void) u8 turnOrder[4]; u8 unselectedContestants[4]; - if (sContest.turnNumber != 4) + if (sContest.appealNumber != 4) { for (i = 0; i < 4; i++) { @@ -851,17 +851,17 @@ static void ContestEffect_ScrambleNextTurnOrder(void) sContestantStatus[i].nextTurnOrder = turnOrder[i]; sContestantStatus[i].turnOrderMod = 2; } - sContestantStatus[shared192D0.contestant].turnOrderModAction = 3; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SCRAMBLE_ORDER); + sContestantStatus[eContestAppealResults.contestant].turnOrderModAction = 3; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_SCRAMBLE_ORDER); } } // An appeal that excites the audience in any CONTEST. static void ContestEffect_ExciteAudienceInAnyContest(void) { - if (gContestMoves[sContestantStatus[shared192D0.contestant].currMove].contestCategory != gSpecialVar_ContestCategory) + if (gContestMoves[sContestantStatus[eContestAppealResults.contestant].currMove].contestCategory != gSpecialVar_ContestCategory) { - sContestantStatus[shared192D0.contestant].overrideCategoryExcitementMod = TRUE; + sContestantStatus[eContestAppealResults.contestant].overrideCategoryExcitementMod = TRUE; } } @@ -873,24 +873,24 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { - if (sContestantStatus[i].appeal2 > 0) + if (sContestantStatus[i].appeal > 0) { - shared192D0.jam = sContestantStatus[i].appeal2 / 2; - shared192D0.jam = RoundUp(shared192D0.jam); + eContestAppealResults.jam = sContestantStatus[i].appeal / 2; + eContestAppealResults.jam = RoundUp(eContestAppealResults.jam); } else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numJammed++; } } if (numJammed == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTEMPT_STARTLE); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTEMPT_STARTLE); } // The appeal works best the more the crowd is excited. @@ -901,39 +901,39 @@ static void ContestEffect_BetterWhenAudienceExcited(void) if (sContest.applauseLevel == 0) { appeal = 10; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL); } else if (sContest.applauseLevel == 1) { appeal = 20; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2); } else if (sContest.applauseLevel == 2) { appeal = 30; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2); } else if (sContest.applauseLevel == 3) { appeal = 50; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_VERY_WELL); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL); } else { appeal = 60; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_EXCELLENTLY2); } - sContestantStatus[shared192D0.contestant].appeal2 = appeal; + sContestantStatus[eContestAppealResults.contestant].appeal = appeal; } // Temporarily stops the crowd from growing excited. static void ContestEffect_DontExciteAudience(void) { - if (!shared19328.excitementFrozen) + if (!eContestExcitement.excitementFrozen) { - shared19328.excitementFrozen = TRUE; - shared19328.excitementFreezer = shared192D0.contestant; - SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_ATTRACTED_ATTENTION); + eContestExcitement.excitementFrozen = TRUE; + eContestExcitement.excitementFreezer = eContestAppealResults.contestant; + SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_ATTRACTED_ATTENTION); } } @@ -944,26 +944,26 @@ static void JamByMoveCategory(u8 category) for (i = 0; i < 4; i++) { - if (shared192D0.turnOrder[shared192D0.contestant] > shared192D0.turnOrder[i]) + if (eContestAppealResults.turnOrder[eContestAppealResults.contestant] > eContestAppealResults.turnOrder[i]) { if (category == gContestMoves[sContestantStatus[i].currMove].contestCategory) - shared192D0.jam = 40; + eContestAppealResults.jam = 40; else - shared192D0.jam = 10; - shared192D0.jamQueue[0] = i; - shared192D0.jamQueue[1] = 0xFF; + eContestAppealResults.jam = 10; + eContestAppealResults.jamQueue[0] = i; + eContestAppealResults.jamQueue[1] = 0xFF; if (WasAtLeastOneOpponentJammed()) numJammed++; } } if (numJammed == 0) - SetContestantEffectStringID2(shared192D0.contestant, CONTEST_STRING_MESSED_UP2); + SetContestantEffectStringID2(eContestAppealResults.contestant, CONTEST_STRING_MESSED_UP2); } static bool8 CanUnnerveContestant(u8 i) { - shared192D0.unnervedPokes[i] = 1; + eContestAppealResults.unnervedPokes[i] = 1; if (sContestantStatus[i].immune) { SetContestantEffectStringID(i, CONTEST_STRING_AVOID_SEEING); @@ -988,32 +988,32 @@ static bool8 WasAtLeastOneOpponentJammed(void) s16 jamBuffer[4] = {0}; int i; - for (i = 0; shared192D0.jamQueue[i] != 0xFF; i++) + for (i = 0; eContestAppealResults.jamQueue[i] != 0xFF; i++) { - u8 contestant = shared192D0.jamQueue[i]; + u8 contestant = eContestAppealResults.jamQueue[i]; if (CanUnnerveContestant(contestant)) { - shared192D0.jam2 = shared192D0.jam; + eContestAppealResults.jam2 = eContestAppealResults.jam; if (sContestantStatus[contestant].moreEasilyStartled) - shared192D0.jam2 *= 2; + eContestAppealResults.jam2 *= 2; if (sContestantStatus[contestant].resistant) { - shared192D0.jam2 = 10; + eContestAppealResults.jam2 = 10; SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED); } else { - shared192D0.jam2 -= sContestantStatus[contestant].jamReduction; - if (shared192D0.jam2 <= 0) + eContestAppealResults.jam2 -= sContestantStatus[contestant].jamReduction; + if (eContestAppealResults.jam2 <= 0) { - shared192D0.jam2 = 0; + eContestAppealResults.jam2 = 0; SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED); } else { - JamContestant(contestant, shared192D0.jam2); - SetStartledString(contestant, shared192D0.jam2); - jamBuffer[contestant] = shared192D0.jam2; + JamContestant(contestant, eContestAppealResults.jam2); + SetStartledString(contestant, eContestAppealResults.jam2); + jamBuffer[contestant] = eContestAppealResults.jam2; } } } @@ -1029,7 +1029,7 @@ static bool8 WasAtLeastOneOpponentJammed(void) static void JamContestant(u8 i, u8 jam) { - sContestantStatus[i].appeal2 -= jam; + sContestantStatus[i].appeal -= jam; sContestantStatus[i].jam += jam; } diff --git a/src/contest_link_80C857C.c b/src/contest_link.c index a694380df..2ba7a3e39 100644 --- a/src/contest_link_80C857C.c +++ b/src/contest_link.c @@ -42,7 +42,7 @@ static bool8 HaveAllPlayersReceivedBlock(void) return TRUE; } -void sub_80C8604(u8 taskId) +void Task_LinkContest_Init(u8 taskId) { #if ENGLISH u8 i; @@ -295,7 +295,7 @@ void sub_80C8734(u8 taskId) } } -void sub_80C88AC(u8 taskId) +void Task_LinkContest_CommunicateRng(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -328,7 +328,7 @@ void sub_80C88AC(u8 taskId) } } -void sub_80C8938(u8 taskId) +void Task_LinkContest_CommunicateCategory(u8 taskId) { int i; @@ -395,7 +395,7 @@ void sub_80C8938(u8 taskId) } } -void sub_80C89DC(u8 taskId) +void Task_LinkContest_CommunicateMonIdxs(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -449,21 +449,21 @@ void sub_80C8A38(u8 taskId) } } -void sub_80C8AD0(u8 taskId) +void Task_LinkContest_CommunicateFinalStandings(u8 taskId) { switch (gTasks[taskId].data[0]) { case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038678, sizeof gUnknown_02038678); + SendBlockToAllOpponents(gContestMonTotalPoints, sizeof gContestMonTotalPoints); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038678, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038678); + memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonTotalPoints); gTasks[taskId].data[0]++; } break; @@ -480,28 +480,29 @@ void sub_80C8AD0(u8 taskId) case 3: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038680, sizeof gUnknown_02038680); + SendBlockToAllOpponents( + gContestMonAppealPointTotals, sizeof gContestMonAppealPointTotals); gTasks[taskId].data[0]++; } break; case 4: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038680, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038680); + memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonAppealPointTotals); gTasks[taskId].data[0]++; } break; case 6: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038688, sizeof gUnknown_02038688); + SendBlockToAllOpponents(gContestMonRound2Points, sizeof gContestMonRound2Points); gTasks[taskId].data[0]++; } break; case 7: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038688, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038688); + memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonRound2Points); gTasks[taskId].data[0]++; } break; @@ -515,7 +516,7 @@ void sub_80C8AD0(u8 taskId) case 10: if (HaveAllPlayersReceivedBlock()) { - memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestFinalStandings); + memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestFinalStandings); gTasks[taskId].data[0]++; } break; @@ -526,7 +527,7 @@ void sub_80C8AD0(u8 taskId) } } -void sub_80C8C80(u8 taskId) +void Task_LinkContest_CommunicateAppealsState(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -540,7 +541,7 @@ void sub_80C8C80(u8 taskId) case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(sContestantStatus, gBlockRecvBuffer[gUnknown_0203869B], 4 * sizeof(struct ContestantStatus)); + memcpy(sContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], 4 * sizeof(struct ContestantStatus)); gTasks[taskId].data[0]++; } break; @@ -557,42 +558,42 @@ void sub_80C8C80(u8 taskId) case 3: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(&shared192D0, sizeof shared192D0); + SendBlockToAllOpponents(&eContestAppealResults, sizeof eContestAppealResults); gTasks[taskId].data[0]++; } break; case 4: if (HaveAllPlayersReceivedBlock()) { - memcpy(&shared192D0, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared192D0); + memcpy(&eContestAppealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof eContestAppealResults); gTasks[taskId].data[0]++; } break; case 6: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(&shared19328, sizeof shared19328); + SendBlockToAllOpponents(&eContestExcitement, sizeof eContestExcitement); gTasks[taskId].data[0]++; } break; case 7: if (HaveAllPlayersReceivedBlock()) { - memcpy(&shared19328, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared19328); + memcpy(&eContestExcitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof eContestExcitement); gTasks[taskId].data[0]++; } break; case 9: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696); + SendBlockToAllOpponents(gContestantTurnOrder, sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; case 10: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); + memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; @@ -603,7 +604,7 @@ void sub_80C8C80(u8 taskId) } } -void sub_80C8E1C(u8 taskId) +void Task_LinkContest_CommunicateLeaderIds(u8 taskId) { int i; @@ -670,7 +671,7 @@ void sub_80C8E1C(u8 taskId) } } -void sub_80C8EBC(u8 taskId) +void Task_LinkContest_CommunicateRound1Points(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -681,21 +682,21 @@ void sub_80C8EBC(u8 taskId) case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gContestMonConditions, sizeof gContestMonConditions); + SendBlockToAllOpponents(gContestMonRound1Points, sizeof gContestMonRound1Points); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestMonConditions); + memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestMonRound1Points); gTasks[taskId].data[0]++; } break; } } -void sub_80C8F34(u8 taskId) +void Task_LinkContest_CommunicateTurnOrder(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -706,14 +707,14 @@ void sub_80C8F34(u8 taskId) case 0: if (IsLinkTaskFinished()) { - SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696); + SendBlockToAllOpponents(gContestantTurnOrder, sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; case 1: if (HaveAllPlayersReceivedBlock()) { - memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); + memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof gContestantTurnOrder); gTasks[taskId].data[0]++; } break; diff --git a/src/contest_link_80C2020.c b/src/contest_link_util.c index e14880ee0..6f39e5fdb 100644 --- a/src/contest_link_80C2020.c +++ b/src/contest_link_util.c @@ -1,35 +1,35 @@ #include "global.h" -#include "data2.h" -#include "util.h" -#include "random.h" -#include "overworld.h" +#include "contest_link_util.h" +#include "battle.h" +#include "blend_palette.h" #include "constants/songs.h" -#include "ewram.h" -#include "main.h" -#include "scanline_effect.h" +#include "contest.h" +#include "contest_link.h" +#include "data2.h" #include "decompress.h" -#include "palette.h" -#include "blend_palette.h" +#include "event_data.h" +#include "ewram.h" +#include "field_effect.h" +#include "field_specials.h" #include "graphics.h" -#include "strings2.h" -#include "text.h" -#include "string_util.h" +#include "link.h" +#include "main.h" #include "menu.h" -#include "sound.h" +#include "overworld.h" +#include "palette.h" #include "pokedex.h" #include "pokemon_icon.h" -#include "tv.h" -#include "battle.h" -#include "contest.h" -#include "link.h" -#include "field_effect.h" -#include "field_specials.h" -#include "contest_link_80C857C.h" -#include "contest_link_80C2020.h" #include "pokemon_storage_system.h" -#include "event_data.h" +#include "random.h" +#include "scanline_effect.h" #include "script.h" +#include "sound.h" +#include "string_util.h" +#include "strings2.h" +#include "text.h" #include "trig.h" +#include "tv.h" +#include "util.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) @@ -117,15 +117,15 @@ void sub_80C3EA4(u8 taskId); void sub_80C3F00(void); void sub_80C40D4(u8 a0, u8 a1); void sub_80C42C0(u8 taskId); -void sub_80C49C4(u8 taskId); -void sub_80C49F0(u8 taskId); -void sub_80C4A0C(u8 taskId); -void sub_80C4A28(u8 taskId); -void sub_80C4A44(u8 taskId); -void sub_80C4B0C(u8 taskId); -void sub_80C4B5C(u8 taskId); -void sub_80C4BA4(u8 taskId); -void sub_80C4BCC(u8 taskId); +void Task_StartCommunication(u8 taskId); +void Task_StartCommunicateRng(u8 taskId); +void Task_StartCommunicateLeaderIds(u8 taskId); +void Task_StartCommunicateCategory(u8 taskId); +void Task_LinkContest_SetUpContest(u8 taskId); +void Task_LinkContest_CalculateTurnOrder(u8 taskId); +void Task_LinkContest_FinalizeConnection(u8 taskId); +void Task_LinkContest_Disconnect(u8 taskId); +void Task_LinkContest_WaitDisconnect(u8 taskId); const u16 gUnknown_083D1624[] = INCBIN_U16("graphics/unknown/unknown_3D1624/0.4bpp"); const u16 gUnknown_083D1644[] = INCBIN_U16("graphics/unknown/unknown_3D1624/1.4bpp"); @@ -388,7 +388,7 @@ static void sub_80C255C(u8 taskId) static void sub_80C25A4(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, sub_80C25C0); } static void sub_80C25C0(u8 taskId) @@ -610,12 +610,12 @@ static void sub_80C2A8C(u8 taskId) species = gContestMons[i].species; personality = gContestMons[i].personality; otId = gContestMons[i].otId; - HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (intptr_t)gSharedMem, gUnknown_081FAF4C[1], species, personality); + HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)gSharedMem, gMonSpriteGfx_Sprite_ptr[1], species, personality); monPal = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); LoadCompressedObjectPalette(monPal); GetMonSpriteTemplate_803C56C(species, 1); - gUnknown_02024E8C.paletteTag = monPal->tag; - spriteId = CreateSprite(&gUnknown_02024E8C, 0x110, 0x50, 10); + gCreatingSpriteTemplate.paletteTag = monPal->tag; + spriteId = CreateSprite(&gCreatingSpriteTemplate, 0x110, 0x50, 10); gSprites[spriteId].data[1] = species; gSprites[spriteId].oam.priority = 0; gSprites[spriteId].callback = sub_80C3C44; @@ -702,7 +702,7 @@ static void sub_80C2D80(u8 taskId) if (gIsLinkContest & 1) { sub_80C3698(gOtherText_LinkStandby); - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80C2DD8; } else @@ -727,8 +727,8 @@ static void sub_80C2E14(u8 taskId) sub_810FB10(2); Contest_SaveWinner(gSpecialVar_ContestRank); Contest_SaveWinner(0xFE); - ewram15DDF = 1; - ewram15DDE = sub_80B2C4C(0xfe, 0); + eCurContestWinnerIsForArtist = TRUE; + eCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(0xfe, 0); BeginHardwarePaletteFade(0xff, 0, 0, 16, 0); gTasks[taskId].func = sub_80C2EA0; } @@ -1788,7 +1788,7 @@ u8 sub_80C3990(u8 monIndex, u8 arg1) u32 var0; u32 var1; - var0 = gContestMonConditions[monIndex] << 16; + var0 = gContestMonRound1Points[monIndex] << 16; var1 = var0 / 0x3F; if (var1 & 0xFFFF) var1 += 0x10000; @@ -1810,7 +1810,7 @@ s8 sub_80C39E4(u8 arg0, u8 arg1) s16 val; s8 ret; - val = gUnknown_02038688[arg0]; + val = gContestMonRound2Points[arg0]; if (val < 0) r4 = -val << 16; else @@ -1826,7 +1826,7 @@ s8 sub_80C39E4(u8 arg0, u8 arg1) if (arg1 != 0 && r2 > 10) r2 = 10; - if (gUnknown_02038688[arg0] < 0) + if (gContestMonRound2Points[arg0] < 0) ret = -r2; else ret = r2; @@ -2093,41 +2093,41 @@ void sub_80C3EA4(u8 taskId) void sub_80C3F00(void) { s32 i; - s16 r2 = gUnknown_02038678[0]; + s16 r2 = gContestMonTotalPoints[0]; s32 r4; u32 r5; s8 r0; for (i = 1; i < 4; i++) { - if (r2 < gUnknown_02038678[i]) - r2 = gUnknown_02038678[i]; + if (r2 < gContestMonTotalPoints[i]) + r2 = gContestMonTotalPoints[i]; } if (r2 < 0) { - r2 = gUnknown_02038678[0]; + r2 = gContestMonTotalPoints[0]; for (i = 1; i < 4; i++) { - if (r2 > gUnknown_02038678[i]) - r2 = gUnknown_02038678[i]; + if (r2 > gContestMonTotalPoints[i]) + r2 = gContestMonTotalPoints[i]; } } for (i = 0; i < 4; i++) { - r4 = 1000 * gContestMonConditions[i] / ABS(r2); + r4 = 1000 * gContestMonRound1Points[i] / ABS(r2); if ((r4 % 10) >= 5) r4 += 10; eContestLink80C2020Struct2018018[i].unk_00 = r4 / 10; - r4 = 1000 * ABS(gUnknown_02038688[i]) / ABS(r2); + r4 = 1000 * ABS(gContestMonRound2Points[i]) / ABS(r2); if ((r4 % 10) >= 5) r4 += 10; eContestLink80C2020Struct2018018[i].unk_04 = r4 / 10; - if (gUnknown_02038688[i] < 0) + if (gContestMonRound2Points[i] < 0) eContestLink80C2020Struct2018018[i].unk_10 = 1; r5 = 22528 * eContestLink80C2020Struct2018018[i].unk_00 / 100; @@ -2568,7 +2568,7 @@ void ScrSpecial_CheckSelectedMonAndInitContest(void) if (result != 0) { Contest_InitAllPokemon(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); - InitContestMonConditions(gSpecialVar_ContestCategory); + CalculateRound1Points(gSpecialVar_ContestCategory); } gSpecialVar_Result = result; } @@ -2700,7 +2700,7 @@ void ScrSpecial_CountContestMonsWithBetterCondition(void) for (i = 0, count = 0; i < 4; i++) { - if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i]) + if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i]) count++; } @@ -2709,7 +2709,7 @@ void ScrSpecial_CountContestMonsWithBetterCondition(void) void ScrSpecial_GetMonCondition(void) { - gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006]; + gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006]; } void ScrSpecial_GetContestWinnerIdx(void) @@ -2770,7 +2770,7 @@ void sub_80C48C8(void) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } -void sub_80C48F4(void) +void Contest_GetSpeciesNameI_StringVar1(void) { gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species; } @@ -2796,37 +2796,40 @@ void ScrSpecial_GetContestPlayerMonIdx(void) gSpecialVar_0x8004 = gContestPlayerMonIndex; } -void sub_80C4980(u8 taskId) +void ContestLinkTransfer(u8 category) { - u8 taskId2; + u8 taskId; ScriptContext2_Enable(); - taskId2 = CreateTask(sub_80C8604, 0); - SetTaskFuncWithFollowupFunc(taskId2, sub_80C8604, sub_80C49C4); - gTasks[taskId2].data[9] = taskId; + taskId = CreateTask(Task_LinkContest_Init, 0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_Init, Task_StartCommunication); + gTasks[taskId].data[9] = category; } -void sub_80C49C4(u8 taskId) +void Task_StartCommunication(u8 taskId) { Contest_CreatePlayerMon(gContestMonPartyIndex); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, sub_80C49F0); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8734, Task_StartCommunicateRng); } -void sub_80C49F0(u8 taskId) +void Task_StartCommunicateRng(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80C4A0C); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateRng, Task_StartCommunicateLeaderIds); } -void sub_80C4A0C(u8 taskId) +void Task_StartCommunicateLeaderIds(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80C4A28); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateLeaderIds, Task_StartCommunicateCategory); } -void sub_80C4A28(u8 taskId) +void Task_StartCommunicateCategory(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8938, sub_80C4A44); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateCategory, Task_LinkContest_SetUpContest); } -void sub_80C4A44(u8 taskId) +void Task_LinkContest_SetUpContest(u8 taskId) { u8 i; u8 sp0[4]; @@ -2849,18 +2852,20 @@ void sub_80C4A44(u8 taskId) for (i = 0; i < 4; i++) sp4[i] = gTasks[taskId].data[i + 5]; - gUnknown_0203869B = sub_80C4B34(sp4); - InitContestMonConditions(gSpecialVar_ContestCategory); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80C4B0C); + gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(sp4); + CalculateRound1Points(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrder); } -void sub_80C4B0C(u8 taskId) +void Task_LinkContest_CalculateTurnOrder(u8 taskId) { - sub_80B0F28(0); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80C4B5C); + SortContestants(0); + SetTaskFuncWithFollowupFunc( + taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection); } -u8 sub_80C4B34(u8 * a0) +u8 LinkContest_GetLeaderIndex(u8 * a0) { s32 i; u8 result = 0; @@ -2874,12 +2879,12 @@ u8 sub_80C4B34(u8 * a0) return result; } -void sub_80C4B5C(u8 taskId) +void Task_LinkContest_FinalizeConnection(u8 taskId) { if (gSpecialVar_0x8004 == 1) { if (IsLinkTaskFinished()) - gTasks[taskId].func = sub_80C4BA4; + gTasks[taskId].func = Task_LinkContest_Disconnect; } else { @@ -2889,13 +2894,13 @@ void sub_80C4B5C(u8 taskId) } } -void sub_80C4BA4(u8 taskId) +void Task_LinkContest_Disconnect(u8 taskId) { - sub_800832C(); - gTasks[taskId].func = sub_80C4BCC; + SetCloseLinkCallback(); + gTasks[taskId].func = Task_LinkContest_WaitDisconnect; } -void sub_80C4BCC(u8 taskId) +void Task_LinkContest_WaitDisconnect(u8 taskId) { if (!gReceivedRemoteLinkPlayers) { diff --git a/src/contest_painting.c b/src/contest_painting.c index ae683d267..1f127f760 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -1,29 +1,29 @@ #include "global.h" #include "contest_painting.h" -#include "contest_painting_effects.h" #include "data2.h" #include "decompress.h" +#include "ewram.h" +#include "image_processing_effects.h" #include "main.h" #include "menu.h" #include "palette.h" #include "random.h" +#include "scanline_effect.h" #include "sprite.h" #include "string_util.h" #include "strings.h" #include "text.h" -#include "scanline_effect.h" -#include "ewram.h" -static u8 gUnknown_03000750; -static u16 gUnknown_03000752; -static u16 gUnknown_03000754; -static u8 gUnknown_03000756; +static u8 sHoldState; +static u16 sMosaicVal; +static u16 sFrameCounter; +static u8 sVarsInitialized; -u16 (*gUnknown_03005E10)[][32]; -struct Unk03005E20 gUnknown_03005E20; -u8 gUnknown_03005E40[0x4C]; -struct ContestEntry *gUnknown_03005E8C; -u16 *gUnknown_03005E90; +u16 (*gContestMonPixels)[][32]; +struct ImageProcessingContext gImageProcessingContext; +u8 sCaptionBuffer[76]; +struct ContestWinner *gContestPaintingWinner; +u16 *gContestPaintingMonPalette; static const u16 gPictureFramePalettes[][16] = { @@ -49,7 +49,8 @@ const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl"); const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl"); const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl"); -const u8 *const gUnknown_083F60AC[] = + +const u8 *const sContestRankNames[] = { OtherText_Cool, OtherText_Beauty2, @@ -57,62 +58,70 @@ const u8 *const gUnknown_083F60AC[] = OtherText_Smart, OtherText_Tough, }; -const struct LabelPair gUnknown_083F60C0[] = + +const struct LabelPair sMuseumCaptions[] = { + // COOL {OtherText_NonstopSuperCool, OtherText_Terminator6}, {OtherText_GoodLookingPoke, OtherText_Terminator7}, {OtherText_MarvelousGreat, OtherText_Terminator8}, + // BEAUTY {OtherText_CenturyLastVenus, OtherText_Terminator9}, {OtherText_Terminator10, OtherText_DazzlingSmile}, {OtherText_PokeCenterIdol, OtherText_Terminator11}, + // CUTE {OtherText_LovelyAndSweet, OtherText_Terminator12}, {OtherText_ThePretty, OtherText_WinningPortrait}, {OtherText_GiveUsWink, OtherText_Terminator13}, + // SMART {OtherText_SmartnessMaestro, OtherText_Terminator15}, {OtherText_ChosenPokeAmong, OtherText_Terminator15}, {OtherText_TheExcellent, OtherText_ItsMomentOfElegance}, + // TOUGH {OtherText_PowerfullyMuscular, OtherText_Terminator16}, {OtherText_StrongErEst, OtherText_Terminator17}, {OtherText_MightyTough, OtherText_Exclamation}, }; -const struct OamData gOamData_83F6138 = + +const struct OamData sContestPaintingMonOamData = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 1, - .bpp = 1, - .shape = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = TRUE, + .bpp = ST_OAM_8BPP, + .shape = SPRITE_SHAPE(64x64), .x = 0, .matrixNum = 0, - .size = 3, + .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 0, .paletteNum = 0, .affineParam = 0, }; -const u16 gUnknown_083F6140[] = {0, 0}; + +const u16 sBgPalette[] = {RGB_BLACK, RGB_BLACK}; static void ShowContestPainting(); static void CB2_HoldContestPainting(void); static void HoldContestPainting(void); -static void ContestPaintingInitWindow(u8 arg0); -static void ContestPaintingPrintCaption(u8 arg0, u8 arg1); -static void ContestPaintingInitBG(void); -static void ContestPaintingInitVars(u8 arg0); +static void InitContestPaintingWindow(bool8 isForArtist); +static void PrintContestPaintingCaption(u8 contestType, bool8 isForArtist); +static void InitContestPaintingBg(void); +static void InitContestPaintingVars(bool8 reset); static void VBlankCB_ContestPainting(void); -static void sub_8106B90(u8 *a, u16 *b, u16 *c); -static void sub_8107090(u8 arg0, u8 arg1); +static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 *destPixels); +static void CreateContestPaintingPicture(u8 contestWinnerId, bool8 isForArtist); -void sub_8106630(u32 contestWinnerId) +void SetContestWinnerForPainting(u32 contestWinnerId) { // probably fakematching - struct ContestWinner *ptr1 = (struct ContestWinner*)&ewram15DE0; // TODO: resolve messy struct duplicates - u8 *ptr2 = (u8*)&ewram15DDE; - u8 *ptr3 = (u8*)&ewram15DDF; - *ptr1 = gSaveBlock1.contestWinners[contestWinnerId - 1]; - *ptr2 = contestWinnerId - 1; - *ptr3 = 0; + struct ContestWinner *curWinner = &eCurContestWinner; + u8 *saveIdx = (u8*)&eCurContestWinnerSaveIdx; + u8 *isForArtist = (u8*)&eCurContestWinnerIsForArtist; + *curWinner = gSaveBlock1.contestWinners[contestWinnerId - 1]; + *saveIdx = contestWinnerId - 1; + *isForArtist = FALSE; } void CB2_ContestPainting(void) @@ -127,9 +136,9 @@ static void ShowContestPainting(void) case 0: ScanlineEffect_Stop(); SetVBlankCallback(NULL); - gUnknown_03005E8C = &ewram15DE0; - ContestPaintingInitVars(TRUE); - ContestPaintingInitBG(); + gContestPaintingWinner = &eCurContestWinner; + InitContestPaintingVars(TRUE); + InitContestPaintingBg(); gMain.state++; break; case 1: @@ -143,20 +152,20 @@ static void ShowContestPainting(void) case 2: SeedRng(gMain.vblankCounter1); InitKeys(); - ContestPaintingInitWindow(ewram15DDF); + InitContestPaintingWindow(eCurContestWinnerIsForArtist); gMain.state++; break; case 3: - sub_8107090(ewram15DDE, ewram15DDF); + CreateContestPaintingPicture(eCurContestWinnerSaveIdx, eCurContestWinnerIsForArtist); gMain.state++; break; case 4: - ContestPaintingPrintCaption(ewram15DDE, ewram15DDF); - LoadPalette(gUnknown_083F6140, 0, 1 * 2); + PrintContestPaintingCaption(eCurContestWinnerSaveIdx, eCurContestWinnerIsForArtist); + LoadPalette(sBgPalette, 0, 1 * 2); DmaClear32(3, PLTT, 0x400); BeginFastPaletteFade(2); SetVBlankCallback(VBlankCB_ContestPainting); - gUnknown_03000750 = 0; + sHoldState = 0; REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON; SetMainCallback2(CB2_HoldContestPainting); break; @@ -176,70 +185,68 @@ static void CB2_QuitContestPainting(void) static void HoldContestPainting(void) { - switch (gUnknown_03000750) + switch (sHoldState) { case 0: if (!gPaletteFade.active) - gUnknown_03000750 = 1; - if (gUnknown_03000756 != 0 && gUnknown_03000754 != 0) - gUnknown_03000754--; + sHoldState = 1; + if (sVarsInitialized&& sFrameCounter != 0) + sFrameCounter--; break; case 1: - if ((gMain.newKeys & 1) || (gMain.newKeys & 2)) + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { - u8 two = 2; //needed to make the asm match - - gUnknown_03000750 = two; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); + sHoldState++; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } - if (gUnknown_03000756 != 0) - gUnknown_03000754 = 0; + if (sVarsInitialized != 0) + sFrameCounter = 0; break; case 2: if (!gPaletteFade.active) SetMainCallback2(CB2_QuitContestPainting); - if (gUnknown_03000756 != 0 && gUnknown_03000754 <= 0x1D) - gUnknown_03000754++; + if (sVarsInitialized && sFrameCounter < 30) + sFrameCounter++; break; } } -static void ContestPaintingInitWindow(u8 arg0) +static void InitContestPaintingWindow(u8 isForArtist) { - InitMenuWindow(&gWindowTemplate_81E7160); - Text_LoadWindowTemplate(&gWindowTemplate_81E7160); + InitMenuWindow(&gWindowTemplate_ContestPainting); + Text_LoadWindowTemplate(&gWindowTemplate_ContestPainting); } -static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) +static void PrintContestPaintingCaption(u8 contestType, u8 isForArtist) { u8 xPos, yPos; u8 *ptr; u8 type; - if (arg1 == TRUE) + if (isForArtist == TRUE) return; - ptr = gUnknown_03005E40; - type = gUnknown_03005E8C->contestType; + ptr = sCaptionBuffer; + type = gContestPaintingWinner->contestCategory; if (contestType < 8) { - ptr = StringCopy(ptr, gUnknown_083F60AC[type]); + ptr = StringCopy(ptr, sContestRankNames[type]); ptr = StringCopy(ptr, gContestText_ContestWinner); #if ENGLISH - ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); + ptr = StringCopy(ptr, gContestPaintingWinner->trainerName); #elif GERMAN - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + ptr = StringCopy10(ptr, gContestPaintingWinner->nickname); #endif // {LATIN} - ptr[0] = 0xFC; + ptr[0] = EXT_CTRL_CODE_BEGIN; ptr[1] = 0x16; ptr += 2; ptr = StringCopy(ptr, gOtherText_Unknown1); #if ENGLISH - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); + ptr = StringCopy10(ptr, gContestPaintingWinner->nickname); #elif GERMAN - ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name); + ptr = StringCopy(ptr, gContestPaintingWinner->trainerName); #endif xPos = 6; @@ -247,17 +254,17 @@ static void ContestPaintingPrintCaption(u8 contestType, u8 arg1) } else { - ptr = StringCopy(ptr, gUnknown_083F60C0[type].prefix); - ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name); - ptr = StringCopy(ptr, gUnknown_083F60C0[type].suffix); + ptr = StringCopy(ptr, sMuseumCaptions[type].prefix); + ptr = StringCopy10(ptr, gContestPaintingWinner->nickname); + ptr = StringCopy(ptr, sMuseumCaptions[type].suffix); xPos = 3; yPos = 14; } - Menu_PrintTextPixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1); + Menu_PrintTextPixelCoords(sCaptionBuffer, xPos * 8 + 1, yPos * 8, 1); } -static void ContestPaintingInitBG(void) +static void InitContestPaintingBg(void) { REG_DISPCNT = 0; REG_IE |= INTR_FLAG_VBLANK; @@ -268,34 +275,34 @@ static void ContestPaintingInitBG(void) REG_BLDY = 0; } -static void ContestPaintingInitVars(bool8 arg0) +static void InitContestPaintingVars(bool8 reset) { - if (arg0 == FALSE) + if (reset == FALSE) { - gUnknown_03000756 = FALSE; - gUnknown_03000752 = 0; - gUnknown_03000754 = 0; + sVarsInitialized = FALSE; + sMosaicVal = 0; + sFrameCounter = 0; } else { - gUnknown_03000756 = TRUE; - gUnknown_03000752 = 15; - gUnknown_03000754 = 30; + sVarsInitialized = TRUE; + sMosaicVal = 15; + sFrameCounter = 30; } } static void ContestPaintingMosaic(void) { - if (gUnknown_03000756 == FALSE) + if (sVarsInitialized == FALSE) { REG_MOSAIC = 0; return; } REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256; - gUnknown_03000752 = gUnknown_03000754 / 2; + sMosaicVal = sFrameCounter / 2; - REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0); + REG_MOSAIC = (sMosaicVal << 12) | (sMosaicVal << 8) | (sMosaicVal << 4) | (sMosaicVal << 0); } static void VBlankCB_ContestPainting(void) @@ -306,12 +313,12 @@ static void VBlankCB_ContestPainting(void) TransferPlttBuffer(); } -static void sub_8106AC4(u16 species, u8 arg1) +static void InitContestMonPixels(u16 species, u8 arg1) { const void *pal; - pal = GetMonSpritePalFromOtIdPersonality(species, gUnknown_03005E8C->otId, gUnknown_03005E8C->personality); - LZDecompressVram(pal, gUnknown_03005E90); + pal = GetMonSpritePalFromOtIdPersonality(species, gContestPaintingWinner->otId, gContestPaintingWinner->personality); + LZDecompressVram(pal, gContestPaintingMonPalette); if (arg1 == 0) { @@ -319,12 +326,12 @@ static void sub_8106AC4(u16 species, u8 arg1) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - EWRAM, - gUnknown_081FAF4C[1], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[1], species, - (u32)gUnknown_03005E8C->personality + (u32)gContestPaintingWinner->personality ); - sub_8106B90((u8*)gUnknown_081FAF4C[1], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10); + _InitContestMonPixels((u8*)gMonSpriteGfx_Sprite_ptr[1], (u16*)gContestPaintingMonPalette, (u16*)gContestMonPixels); } else { @@ -332,18 +339,18 @@ static void sub_8106AC4(u16 species, u8 arg1) &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - EWRAM, - gUnknown_081FAF4C[0], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[0], species, - (u32)gUnknown_03005E8C->personality + (u32)gContestPaintingWinner->personality ); - sub_8106B90((u8*)gUnknown_081FAF4C[0], (u16*)gUnknown_03005E90, (u16*)gUnknown_03005E10); + _InitContestMonPixels((u8*)gMonSpriteGfx_Sprite_ptr[0], (u16*)gContestPaintingMonPalette, (u16*)gContestMonPixels); } } -static void sub_8106B90(u8 *a, u16 *b, u16 *c) +static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 *destPixels) { - u16 i, j, k, l; + u16 tileY, tileX, pixelY, pixelX; /* Raw arithmetics are required to match this function. @@ -353,70 +360,71 @@ static void sub_8106B90(u8 *a, u16 *b, u16 *c) calculate dimensions manually (as seen in other functions), tell that it may have been this way in the original code. */ - for (i = 0; i < 8; i++) + for (tileY = 0; tileY < 8; tileY++) { - for (j = 0; j < 8; j++) + for (tileX = 0; tileX < 8; tileX++) { - for (k = 0; k < 8; k++) + for (pixelY = 0; pixelY < 8; pixelY++) { - for (l = 0; l < 8; l++) + for (pixelX = 0; pixelX < 8; pixelX++) { - u8 temp = a[(((i * 8) + j) * 32) + (k << 2) + (l >> 1)]; + u8 colorIndex = spriteGfx[(((tileY * 8) + tileX) * 32) + (pixelY << 2) + (pixelX >> 1)]; /* The shifts have to be there to match r0 and r2's order in one instruction: add r5, r2, r0 This also makes agbcc's expression order parsing even more super sensitive and obscene when it comes to parentheses affecting regalloc regardless if - unnecessary, requiring j must be placed in the front to match, or else + unnecessary, requiring tileX must be placed in the front to match, or else regalloc breaks again and does this a few instructions above: add r0, r3, r7 <- regswap */ - if (l & 1) - temp /= 16; + if (pixelX & 1) + colorIndex /= 16; else - temp %= 16; + colorIndex %= 16; // Same order as above needs to be written here, or else this happens: // add r0, r7, r1 <- regswap - if (temp == 0) - *(u16 *)(c + (((i * 8) + k) << 6) + ((j * 8) + l)) = 0x8000; + if (colorIndex == 0) + *(u16 *)(destPixels + (((tileY * 8) + pixelY) << 6) + ((tileX * 8) + pixelX)) = 0x8000; else - *(u16 *)(c + (((i * 8) + k) << 6) + ((j * 8) + l)) = b[temp]; + *(u16 *)(destPixels + (((tileY * 8) + pixelY) << 6) + ((tileX * 8) + pixelX)) = + palette[colorIndex]; } } } } } -static void sub_8106C40(u8 arg0, u8 arg1) +static void LoadContestPaintingFrame(u8 contestWinnerId, u8 isForArtist) { u8 x, y; LoadPalette(gPictureFramePalettes, 0, sizeof(gPictureFramePalettes)); - if (arg1 == 1) + if (isForArtist == TRUE) { - switch (gUnknown_03005E8C->contestType / 3) + switch (gContestPaintingWinner->contestCategory / 3) { case CONTEST_COOL: RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_0, gContestMonPixels); break; case CONTEST_BEAUTY: RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_1, gContestMonPixels); break; case CONTEST_CUTE: RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_2, gContestMonPixels); break; case CONTEST_SMART: RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_3, gContestMonPixels); break; case CONTEST_TOUGH: RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM); - RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10); + RLUnCompWram(gPictureFrameTilemap_4, gContestMonPixels); break; } @@ -433,23 +441,23 @@ static void sub_8106C40(u8 arg0, u8 arg1) for (y = 0; y < 10; y++) { for (x = 0; x < 18; x++) - VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03005E10)[y + 2][x + 6]; + VRAM_PICTURE_DATA(x + 6, y + 2) = (*gContestMonPixels)[y + 2][x + 6]; } // Re-set the entire top row to the first top frame part for (x = 0; x < 16; x++) - VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03005E10)[2][7]; + VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7]; #undef VRAM_PICTURE_DATA } - else if (arg0 < 8) + else if (contestWinnerId < 8) { RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM); RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000)); } else { - switch (gUnknown_03005E8C->contestType / 3) + switch (gContestPaintingWinner->contestCategory / 3) { case CONTEST_COOL: RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM); @@ -475,32 +483,31 @@ static void sub_8106C40(u8 arg0, u8 arg1) } } -static void sub_8106E98(u8 arg0) +static void InitPaintingMonOamData(u8 contestWinnerId) { - //Some hacks just to get the asm to match -#ifndef NONMATCHING - asm(""::"r"(arg0)); -#endif - - gMain.oamBuffer[0] = gOamData_83F6138; + gMain.oamBuffer[0] = sContestPaintingMonOamData; gMain.oamBuffer[0].tileNum = 0; -#ifndef NONMATCHING - if (arg0) arg0 = gMain.oamBuffer[0].tileNum; -#endif - - gMain.oamBuffer[0].x = 88; - gMain.oamBuffer[0].y = 24; + if (contestWinnerId > 1) + { + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; + } + else // duplicated code branch + { + gMain.oamBuffer[0].x = 88; + gMain.oamBuffer[0].y = 24; + } } -static u8 sub_8106EE0(u8 arg0) +static u8 GetImageEffectForContestWinner(u8 contestWinnerId) { u8 contestType; - if (arg0 < 8) - contestType = gUnknown_03005E8C->contestType; + if (contestWinnerId < 8) + contestType = gContestPaintingWinner->contestCategory; else - contestType = gUnknown_03005E8C->contestType / 3; + contestType = gContestPaintingWinner->contestCategory / 3; switch (contestType) { @@ -519,55 +526,55 @@ static u8 sub_8106EE0(u8 arg0) return contestType; } -static void sub_8106F4C(void) +static void AllocPaintingResources(void) { - gUnknown_03005E90 = ewram15E00.unk2017e00; - gUnknown_03005E10 = &ewram15E00.unk2015e00; + gContestPaintingMonPalette = eContestPaintingBuffers.palette; + gContestMonPixels = (void *)eContestPaintingBuffers.pixels; } -static void sub_8106F6C(u8 arg0) +static void DoContestPaintingImageProcessing(u8 imageEffect) { - gUnknown_03005E20.var_4 = gUnknown_03005E10; - gUnknown_03005E20.var_8 = gUnknown_03005E90; - gUnknown_03005E20.var_18 = 0; - gUnknown_03005E20.var_1F = gUnknown_03005E8C->personality % 256; - gUnknown_03005E20.var_19 = 0; - gUnknown_03005E20.var_1A = 0; - gUnknown_03005E20.var_1B = 64; - gUnknown_03005E20.var_1C = 64; - gUnknown_03005E20.var_1D = 64; - gUnknown_03005E20.var_1E = 64; - - switch (arg0) + gImageProcessingContext.canvasPixels = gContestMonPixels; + gImageProcessingContext.canvasPalette = gContestPaintingMonPalette; + gImageProcessingContext.paletteStart = 0; + gImageProcessingContext.personality = gContestPaintingWinner->personality % 256; + gImageProcessingContext.columnStart = 0; + gImageProcessingContext.rowStart = 0; + gImageProcessingContext.columnEnd = 64; + gImageProcessingContext.rowEnd = 64; + gImageProcessingContext.canvasWidth = 64; + gImageProcessingContext.canvasHeight = 64; + + switch (imageEffect) { case CONTESTRESULT_SMART: case CONTESTRESULT_TOUGH: - gUnknown_03005E20.var_14 = 3; + gImageProcessingContext.quantizeEffect = QUANTIZE_EFFECT_GRAYSCALE; break; case CONTESTRESULT_COOL: case CONTESTRESULT_BEAUTY: case CONTESTRESULT_CUTE: default: - gUnknown_03005E20.var_14 = 1; + gImageProcessingContext.quantizeEffect = QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS; break; } - gUnknown_03005E20.var_16 = 2; - gUnknown_03005E20.var_0 = arg0; - gUnknown_03005E20.var_10 = OBJ_VRAM0; + gImageProcessingContext.bgType = 2; + gImageProcessingContext.effect = imageEffect; + gImageProcessingContext.dest = OBJ_VRAM0; - sub_80FC7A0(&gUnknown_03005E20); - sub_80FDA18(&gUnknown_03005E20); - sub_80FD8CC(&gUnknown_03005E20); + ApplyImageProcessingEffects(&gImageProcessingContext); + ApplyImageProcessingQuantization(&gImageProcessingContext); + ConvertImageProcessingToGBA(&gImageProcessingContext); - LoadPalette(gUnknown_03005E90, 256, 256 * 2); + LoadPalette(gContestPaintingMonPalette, 256, 256 * 2); } -static void sub_8107090(u8 arg0, u8 arg1) +static void CreateContestPaintingPicture(u8 contestWinnerId, u8 isForArtist) { - sub_8106F4C(); - sub_8106AC4(gUnknown_03005E8C->species, 0); - sub_8106F6C(sub_8106EE0(arg0)); - sub_8106E98(arg0); - sub_8106C40(arg0, arg1); + AllocPaintingResources(); + InitContestMonPixels(gContestPaintingWinner->species, 0); + DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId)); + InitPaintingMonOamData(contestWinnerId); + LoadContestPaintingFrame(contestWinnerId, isForArtist); } diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c deleted file mode 100644 index ade91a0ec..000000000 --- a/src/contest_painting_effects.c +++ /dev/null @@ -1,1535 +0,0 @@ -#include "global.h" -#include "contest_painting_effects.h" -#include "contest_painting.h" - -extern const u8 gUnknown_083E7A50[][3]; - -u16 (*gUnknown_03005DEC)[][32]; -u8 gUnknown_03005DE8; -u8 gUnknown_03005DF0; -u8 gUnknown_03005DFC; -u8 gUnknown_03005DF8; -u8 gUnknown_03005DF4; -u8 gUnknown_03005E00; -u8 gUnknown_03005E04; -u16 * gUnknown_03005E08; -u16 gUnknown_03005E0C; - -// this file's functions -void sub_80FCAA4(void); -void sub_80FCB5C(void); -void sub_80FCD54(void); -void sub_80FCEA4(void); -void sub_80FCCBC(void); -void sub_80FD06C(void); -void sub_80FD114(void); -void sub_80FCF3C(void); -void sub_80FCAC4(void); -void sub_80FCC18(u8); -void sub_80FC92C(u8); -void sub_80FC9E4(u8); -void sub_80FD1C8(u16); -u16 ConvertColorToGrayscale(u16*); -u16 sub_80FD68C(u16*, u16*, u16*); -u16 ConvertCoolColor(u16*, u8); -u16 ConvertToBlackOrWhite(u16*); -u16 sub_80FD50C(u16*, u16*); -u16 InvertColor(u16*); -u16 sub_80FD7AC(u16*, u16*, u16*); -u16 sub_80FD568(u16*, u16*); -u16 GetCoolColorFromPersonality(u8); -void sub_80FDC18(bool8); -void sub_80FDAE4(void); -void sub_80FDF88(void); -void sub_80FDBE4(void); -void sub_80FDED8(void); -void sub_80FDBA8(void); -void sub_80FDE28(void); -void sub_80FDB8C(void); -void sub_80FDD70(void); -u16 sub_80FE038(u16 *); -u16 sub_80FE17C(u16 *); -u16 sub_80FE1B0(u16 *); -u16 sub_80FE0AC(u16 *); - -void sub_80FC7A0(struct Unk03005E20* info) -{ - gUnknown_03005DEC = info->var_4; - gUnknown_03005E00 = info->var_1F; - gUnknown_03005DE8 = info->var_19; - gUnknown_03005DFC = info->var_1A; - gUnknown_03005DF8 = info->var_1B; - gUnknown_03005DF0 = info->var_1C; - gUnknown_03005E04 = info->var_1D; - gUnknown_03005DF4 = info->var_1E; - switch (info->var_0) - { - case 2: - sub_80FCAA4(); - break; - case 8: - sub_80FCB5C(); - break; - case 9: - sub_80FCD54(); - sub_80FCC18(gUnknown_03005E00); - break; - case 10: - sub_80FCD54(); - sub_80FCEA4(); - sub_80FCCBC(); - case 31: - sub_80FCEA4(); - break; - case 11: - sub_80FCD54(); - sub_80FD06C(); - sub_80FD06C(); - sub_80FD114(); - sub_80FCCBC(); - break; - case 13: - sub_80FCF3C(); - break; - case 30: - sub_80FCD54(); - break; - case 32: - sub_80FD06C(); - break; - case 33: - sub_80FD114(); - break; - case 6: - sub_80FCAC4(); - sub_80FC92C(3); - break; - case 36: - sub_80FCD54(); - sub_80FD06C(); - sub_80FD114(); - sub_80FCCBC(); - sub_80FCB5C(); - sub_80FCB5C(); - sub_80FC92C(2); - sub_80FC9E4(4); - break; - } -} - -#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) - -void sub_80FC92C(u8 a0) // it changes palette someway somehow... .__. -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (!(0x8000 & *pal)) - { - u8 val = (31 & *pal); - val += a0; - if (val > 31) - val = 31; - - *pal = RGB2(val, val, val); - } - } - } -} - -void sub_80FC9E4(u8 a0) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (!(0x8000 & *pal)) - { - u8 val = (31 & *pal); - if (val > 31 - a0) - val = 31 - (a0 >> 1); - - *pal = RGB2(val, val, val); - } - } - } -} - -void sub_80FCAA4(void) -{ - u32 i; - for (i = 0; i < 3200; i++) - sub_80FD1C8(i); -} - -void sub_80FCAC4(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = ConvertColorToGrayscale(color); - } - } - } -} - -void sub_80FCB5C(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF8; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; - u16* palette = &var0[gUnknown_03005DE8 + i]; - u16 color = *palette; - j = 1; - palette += gUnknown_03005E04; - while (j < gUnknown_03005DF0 - 1) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD68C(&color, palette, palette + gUnknown_03005E04); - color = *palette; - } - - j++; - palette += gUnknown_03005E04; - } - } -} - -void sub_80FCC18(u8 arg0) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var0[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = ConvertCoolColor(color, arg0); - } - } - } -} - -void sub_80FCCBC(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var0[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = ConvertToBlackOrWhite(color); - } - } - } -} - -void sub_80FCD54(void) -{ - u8 i, j; - u16 *palette; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - palette = &var0[gUnknown_03005DE8]; - *palette = sub_80FD50C(palette, palette + 1); - for (j = 1, palette = palette + 1; j < gUnknown_03005DF8 - 1; j++, palette++) - { - *palette = sub_80FD50C(palette, palette + 1); - *palette = sub_80FD50C(palette, palette - 1); - } - - *palette = sub_80FD50C(palette, palette - 1); - } - - for (j = 0; j < gUnknown_03005DF8; j++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; - palette = &var0[gUnknown_03005DE8 + j]; - *palette = sub_80FD50C(palette, palette + gUnknown_03005E04); - for (i = 1, palette = palette + gUnknown_03005E04; i < gUnknown_03005DF0 - 1; i++, palette += gUnknown_03005E04) - { - *palette = sub_80FD50C(palette, palette + gUnknown_03005E04); - *palette = sub_80FD50C(palette, palette - gUnknown_03005E04); - } - - *palette = sub_80FD50C(palette, palette - gUnknown_03005E04); - } -} - -void sub_80FCEA4(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* color = &var0[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, color++) - { - if (!(0x8000 & *color)) - { - *color = InvertColor(color); - } - } - } -} - -void sub_80FCF3C(void) -{ - u8 i, j; - u16 *palette; - u16 color; - - palette = (*gUnknown_03005DEC)[0]; - for (i = 0; i < 64; i++) - { - for (j = 0; j < 64; j++, palette++) - { - if (!(0x8000 & *palette)) - { - *palette = InvertColor(palette); - } - } - } - - for (j = 0; j < 64; j++) - { - palette = &(*gUnknown_03005DEC)[0][j]; - color = *palette; - *palette = 0x8000; - for (i = 1, palette += 64; i < 63; i++, palette += 64) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD7AC(&color, palette, palette + 64); - color = *palette; - } - } - - *palette = 0x8000; - palette = &(*gUnknown_03005DEC)[0][j]; - color = *palette; - *palette = 0x8000; - for (i = 1, palette += 64; i < 63; i++, palette += 64) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD7AC(&color, palette, palette + 64); - color = *palette; - } - } - - *palette = 0x8000; - } - - palette = (*gUnknown_03005DEC)[0]; - for (i = 0; i < 64; i++) - { - for (j = 0; j < 64; j++, palette++) - { - if (!(0x8000 & *palette)) - { - *palette = InvertColor(palette); - } - } - } -} - -void sub_80FD06C(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* palette = &var0[gUnknown_03005DE8]; - u16 color = *palette; - for (j = 1, palette++; j < gUnknown_03005DF8 - 1; j++, palette++) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD568(&color, palette); - color = *palette; - } - } - } -} - -void sub_80FD114(void) -{ - u8 i, j; - for (i = 0; i < gUnknown_03005DF8; i++) - { - u16* var0 = &(*gUnknown_03005DEC)[0][gUnknown_03005DFC * gUnknown_03005E04]; - u16* palette = &var0[gUnknown_03005DE8 + i]; - u16 color = *palette; - for (j = 1, palette += gUnknown_03005E04; j < gUnknown_03005DF0 - 1; j++, palette += gUnknown_03005E04) - { - if (!(0x8000 & *palette)) - { - *palette = sub_80FD568(&color, palette); - color = *palette; - } - } - } -} - -NAKED -void sub_80FD1C8(u16 arg0) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x20\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r10, r0\n\ - mov r2, sp\n\ - ldr r3, _080FD234 @ =gUnknown_083E7A50\n\ - lsls r1, r0, 1\n\ - add r1, r10\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - adds r0, r3, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - strb r0, [r2, 0x1]\n\ - mov r5, sp\n\ - adds r0, r3, 0x2\n\ - adds r1, r0\n\ - ldrb r4, [r1]\n\ - lsls r2, r4, 24\n\ - lsrs r1, r2, 27\n\ - movs r0, 0x7\n\ - ands r1, r0\n\ - strh r1, [r5, 0x2]\n\ - lsrs r2, 25\n\ - mov r9, r2\n\ - movs r0, 0x3\n\ - ands r2, r0\n\ - mov r9, r2\n\ - movs r5, 0x1\n\ - ands r5, r4\n\ - movs r4, 0x1\n\ - mov r8, r4\n\ - cmp r8, r1\n\ - bcs _080FD27A\n\ - mov r3, sp\n\ -_080FD21A:\n\ - cmp r5, 0\n\ - bne _080FD238\n\ - mov r0, r8\n\ - lsls r2, r0, 2\n\ - mov r4, sp\n\ - adds r1, r4, r2\n\ - ldrb r0, [r3]\n\ - mov r4, r8\n\ - subs r0, r4\n\ - strb r0, [r1]\n\ - ldrb r0, [r3, 0x1]\n\ - add r0, r8\n\ - b _080FD24A\n\ - .align 2, 0\n\ -_080FD234: .4byte gUnknown_083E7A50\n\ -_080FD238:\n\ - mov r0, r8\n\ - lsls r2, r0, 2\n\ - mov r4, sp\n\ - adds r1, r4, r2\n\ - ldrb r0, [r3]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - ldrb r0, [r3, 0x1]\n\ - subs r0, 0x1\n\ -_080FD24A:\n\ - strb r0, [r1, 0x1]\n\ - add r2, sp\n\ - ldrb r0, [r2]\n\ - cmp r0, 0x3F\n\ - bhi _080FD25A\n\ - ldrb r0, [r2, 0x1]\n\ - cmp r0, 0x3F\n\ - bls _080FD262\n\ -_080FD25A:\n\ - mov r0, r8\n\ - subs r0, 0x1\n\ - strh r0, [r3, 0x2]\n\ - b _080FD27A\n\ -_080FD262:\n\ - ldrh r0, [r3, 0x2]\n\ - mov r1, r8\n\ - subs r0, r1\n\ - strh r0, [r2, 0x2]\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldrh r0, [r3, 0x2]\n\ - cmp r8, r0\n\ - bcc _080FD21A\n\ -_080FD27A:\n\ - movs r2, 0\n\ - mov r8, r2\n\ - mov r0, sp\n\ - ldrh r0, [r0, 0x2]\n\ - cmp r8, r0\n\ - bcc _080FD288\n\ - b _080FD38A\n\ -_080FD288:\n\ - movs r3, 0x1F\n\ -_080FD28A:\n\ - ldr r1, _080FD2E8 @ =gUnknown_03005DEC\n\ - mov r4, r8\n\ - lsls r0, r4, 2\n\ - mov r2, sp\n\ - adds r6, r2, r0\n\ - ldrb r0, [r6, 0x1]\n\ - lsls r0, 7\n\ - ldr r1, [r1]\n\ - adds r1, r0\n\ - ldrb r0, [r6]\n\ - lsls r0, 1\n\ - adds r2, r1, r0\n\ - ldrh r1, [r2]\n\ - movs r4, 0x80\n\ - lsls r4, 8\n\ - adds r0, r4, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _080FD376\n\ - movs r7, 0x1F\n\ - ands r7, r1\n\ - lsls r0, r1, 16\n\ - lsrs r5, r0, 21\n\ - ands r5, r3\n\ - lsrs r4, r0, 26\n\ - ands r4, r3\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - blt _080FD36C\n\ - cmp r0, 0x1\n\ - ble _080FD2EC\n\ - cmp r0, 0x3\n\ - bgt _080FD36C\n\ - ldrh r0, [r6, 0x2]\n\ - adds r1, r7, r0\n\ - lsls r1, 16\n\ - lsrs r7, r1, 16\n\ - adds r1, r5, r0\n\ - lsls r1, 16\n\ - lsrs r5, r1, 16\n\ - adds r0, r4, r0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r7, 0x1F\n\ - bls _080FD360\n\ - movs r7, 0x1F\n\ - b _080FD360\n\ - .align 2, 0\n\ -_080FD2E8: .4byte gUnknown_03005DEC\n\ -_080FD2EC:\n\ - mov r1, r10\n\ - lsls r0, r1, 1\n\ - add r0, r10\n\ - ldr r1, _080FD320 @ =gUnknown_083E7A50\n\ - adds r1, 0x2\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsrs r0, 3\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - movs r1, 0x3\n\ - str r2, [sp, 0x18]\n\ - str r3, [sp, 0x1C]\n\ - bl __umodsi3\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r2, [sp, 0x18]\n\ - ldr r3, [sp, 0x1C]\n\ - cmp r0, 0x1\n\ - beq _080FD33C\n\ - cmp r0, 0x1\n\ - bgt _080FD324\n\ - cmp r0, 0\n\ - beq _080FD32A\n\ - b _080FD36C\n\ - .align 2, 0\n\ -_080FD320: .4byte gUnknown_083E7A50\n\ -_080FD324:\n\ - cmp r0, 0x2\n\ - beq _080FD34E\n\ - b _080FD36C\n\ -_080FD32A:\n\ - ldrh r0, [r6, 0x2]\n\ - cmp r7, r0\n\ - bcc _080FD338\n\ - subs r0, r7, r0\n\ - lsls r0, 16\n\ - lsrs r7, r0, 16\n\ - b _080FD36C\n\ -_080FD338:\n\ - movs r7, 0\n\ - b _080FD36C\n\ -_080FD33C:\n\ - ldrh r0, [r6, 0x2]\n\ - cmp r5, r0\n\ - bcc _080FD34A\n\ - subs r0, r5, r0\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - b _080FD36C\n\ -_080FD34A:\n\ - movs r5, 0\n\ - b _080FD36C\n\ -_080FD34E:\n\ - ldrh r0, [r6, 0x2]\n\ - cmp r4, r0\n\ - bcc _080FD35C\n\ - subs r0, r4, r0\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - b _080FD36C\n\ -_080FD35C:\n\ - movs r4, 0\n\ - b _080FD36C\n\ -_080FD360:\n\ - cmp r5, 0x1F\n\ - bls _080FD366\n\ - movs r5, 0x1F\n\ -_080FD366:\n\ - cmp r4, 0x1F\n\ - bls _080FD36C\n\ - movs r4, 0x1F\n\ -_080FD36C:\n\ - lsls r0, r4, 10\n\ - lsls r1, r5, 5\n\ - orrs r0, r1\n\ - orrs r7, r0\n\ - strh r7, [r2]\n\ -_080FD376:\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - mov r0, sp\n\ - ldrh r0, [r0, 0x2]\n\ - cmp r8, r0\n\ - bcs _080FD38A\n\ - b _080FD28A\n\ -_080FD38A:\n\ - add sp, 0x20\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} - -u16 ConvertColorToGrayscale(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - u16 average = (red + green + blue) / 3; - return RGB2(average, average, average); -} - -// The dark colors are the colored edges of the Cool painting effect. -// Everything else is white. -u16 ConvertCoolColor(u16 *color, u8 personality) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - if (red < 17 && green < 17 && blue < 17) - return GetCoolColorFromPersonality(personality); - else - return RGB2(31, 31, 31); -} - -// Based on the given value, which comes from the first 8 bits of -// the mon's personality value, return a color. -u16 GetCoolColorFromPersonality(u8 personality) -{ - u16 red = 0; - u16 green = 0; - u16 blue = 0; - u8 strength = (personality / 6) % 3; - u8 colorType = personality % 6; - - switch (colorType) - { - case 0: - // Teal color - green = 21 - strength; - blue = green; - red = 0; - break; - case 1: - // Yellow color - blue = 0; - red = 21 - strength; - green = red; - break; - case 2: - // Purple color - blue = 21 - strength; - green = 0; - red = blue; - break; - case 3: - // Red color - blue = 0; - green = 0; - red = 23 - strength; - break; - case 4: - // Blue color - blue = 23 - strength; - green = 0; - red = 0; - break; - case 5: - // Green color - blue = 0; - green = 23 - strength; - red = 0; - break; - } - - return RGB2(red, green, blue); -} - -u16 ConvertToBlackOrWhite(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - if (red < 17 && green < 17 && blue < 17) - return RGB2(0, 0, 0); - else - return RGB2(31, 31, 31); -} - -u16 sub_80FD50C(u16 *colorA, u16 *colorB) -{ - if (*colorA) - { - if (*colorA & 0x8000) - return 0x8000; - if (*colorB & 0x8000) - return RGB2(0, 0, 0); - - return *colorA; - } - - return RGB2(0, 0, 0); -} - -u16 InvertColor(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - red = 31 - red; - green = 31 - green; - blue = 31 - blue; - - return RGB2(red, green, blue); -} - -u16 sub_80FD568(u16 *a0, u16 *a1) -{ - u16 sp0[2][3]; - u16 spC[3]; - u8 r4; - u16 r2; - u16 r, g, b; - - if (*a0 == *a1) - return *a1; - - sp0[0][0] = (*a0 >> 0) & 0x1F; - sp0[0][1] = (*a0 >> 5) & 0x1F; - sp0[0][2] = (*a0 >> 10) & 0x1F; - sp0[1][0] = (*a1 >> 0) & 0x1F; - sp0[1][1] = (*a1 >> 5) & 0x1F; - sp0[1][2] = (*a1 >> 10) & 0x1F; - - if (sp0[0][0] > 25 && sp0[0][1] > 25 && sp0[0][2] > 25) - return *a1; - if (sp0[1][0] > 25 && sp0[1][1] > 25 && sp0[1][2] > 25) - return *a1; - - for (r4 = 0; r4 < 3; r4++) - { - if (sp0[0][r4] > sp0[1][r4]) - spC[r4] = sp0[0][r4] - sp0[1][r4]; - else - spC[r4] = sp0[1][r4] - sp0[0][r4]; - } - - if (spC[0] >= spC[1]) - { - if (spC[0] >= spC[2]) - r2 = spC[0]; - else if (spC[1] >= spC[2]) - r2 = spC[1]; - else - r2 = spC[2]; - } - else - { - if (spC[1] >= spC[2]) - r2 = spC[1]; - else if (spC[2] >= spC[0]) - r2 = spC[2]; - else - r2 = spC[0]; - } - - r = (sp0[1][0] * (31 - r2 / 2)) / 31; - g = (sp0[1][1] * (31 - r2 / 2)) / 31; - b = (sp0[1][2] * (31 - r2 / 2)) / 31; - return RGB2(r, g, b); -} - -u16 sub_80FD68C(u16 * a0, u16 * a1, u16 * a2) -{ - u16 red, green, blue; - u16 avg0, avg1, avg2; - u16 diff1, diff2; - u32 minimum; - u16 factor; - - if (*a0 == *a1 && *a2 == *a1) - return *a1; - - red = (*a1 >> 0) & 0x1F; - green = (*a1 >> 5) & 0x1F; - blue = (*a1 >> 10) & 0x1F; - - avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3; - avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3; - avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3; - - if (avg0 == avg1 && avg2 == avg1) - return *a1; - - if (avg0 > avg1) - diff1 = avg0 - avg1; - else - diff1 = avg1 - avg0; - - if (avg2 > avg1) - diff2 = avg2 - avg1; - else - diff2 = avg1 - avg2; - - if (diff1 >= diff2) - minimum = diff1; - else - minimum = diff2; - - factor = 31 - minimum / 2; - red = red * factor / 31; - green = green * factor / 31; - blue = blue * factor / 31; - return RGB2(red, green, blue); -} - -u16 sub_80FD7AC(u16 *a0, u16 *a1, u16 *a2) -{ - u16 red, green, blue; - u16 avg0, avg1, avg2; - u16 diff1, diff2; - u32 minimum; - u16 factor; - - if (*a0 == *a1 && *a2 == *a1) - return *a1; - - red = (*a1 >> 0) & 0x1F; - green = (*a1 >> 5) & 0x1F; - blue = (*a1 >> 10) & 0x1F; - - avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3; - avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3; - avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3; - - if (avg0 == avg1 && avg2 == avg1) - return *a1; - - if (avg0 > avg1) - diff1 = avg0 - avg1; - else - diff1 = avg1 - avg0; - - if (avg2 > avg1) - diff2 = avg2 - avg1; - else - diff2 = avg1 - avg2; - - if (diff1 >= diff2) - minimum = diff1; - else - minimum = diff2; - - factor = 31 - minimum; - red = red * factor / 31; - green = green * factor / 31; - blue = blue * factor / 31; - return RGB2(red, green, blue); -} - -/* -void sub_80FD8CC(struct Unk03005E20 * a0) -{ - u16 i, j, k; - u8 r5 = a0->var_1D >> 3; - u8 sp08 = a0->var_1E >> 3; - u16 * sp00 = (u16 *)a0->var_4; - u16 * sp04 = (u16 *)a0->var_10; - if (a0->var_16 == 2) - { - for (i = 0; i < sp08; i++) - { - for (j = 0; j < r5; j++) - { - for (k = 0; k < 8; k++) - { - u16 * r3 = &sp04[i * r5 * 32 + 4 * k]; - u16 * r2 = &sp00[j * 8 + (i * 8 + k) * 8 * r5]; - r3[0] = r2[0] | (r2[1] << 8); - r3[1] = r2[2] | (r2[3] << 8); - r3[2] = r2[4] | (r2[5] << 8); - r3[3] = r2[6] | (r2[7] << 8); - } - } - } - } - else - { - for (i = 0; i < sp08; i++) - { - for (j = 0; j < r5; j++) - { - for (k = 0; k < 8; k++) - { - u16 * r3 = &sp04[i * r5 * 16 + 2 * k]; - u16 * r2 = &sp00[j * 8 + (i * 8 + k) * 8 * r5]; - r3[0] = r2[0] | (r2[1] << 4) | (r2[2] << 8) | (r2[3] << 12); - r3[1] = r2[4] | (r2[5] << 4) | (r2[6] << 8) | (r2[7] << 12); - } - } - } - } -} -*/ - -NAKED -void sub_80FD8CC(struct Unk03005E20 * a0) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0xC\n" - "\tldrb r1, [r0, 0x1D]\n" - "\tlsrs r5, r1, 3\n" - "\tldrb r1, [r0, 0x1E]\n" - "\tlsrs r1, 3\n" - "\tstr r1, [sp, 0x8]\n" - "\tldr r1, [r0, 0x4]\n" - "\tstr r1, [sp]\n" - "\tldr r2, [r0, 0x10]\n" - "\tstr r2, [sp, 0x4]\n" - "\tldrh r0, [r0, 0x16]\n" - "\tcmp r0, 0x2\n" - "\tbne _080FD97C\n" - "\tmovs r1, 0\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r1, r0\n" - "\tbcc _080FD8FA\n" - "\tb _080FDA08\n" - "_080FD8FA:\n" - "\tmovs r0, 0\n" - "\tadds r2, r1, 0x1\n" - "\tmov r10, r2\n" - "\tcmp r0, r5\n" - "\tbcs _080FD96E\n" - "\tadds r2, r1, 0\n" - "\tmuls r2, r5\n" - "\tmov r9, r2\n" - "\tlsls r1, 3\n" - "\tmov r8, r1\n" - "_080FD90E:\n" - "\tmovs r4, 0\n" - "\tlsls r6, r0, 4\n" - "\tadds r7, r0, 0x1\n" - "\tadd r0, r9\n" - "\tlsls r0, 6\n" - "\tldr r1, [sp, 0x4]\n" - "\tadds r1, r0\n" - "\tmov r12, r1\n" - "_080FD91E:\n" - "\tlsls r0, r4, 3\n" - "\tmov r2, r12\n" - "\tadds r3, r2, r0\n" - "\tmov r1, r8\n" - "\tadds r0, r1, r4\n" - "\tlsls r0, 3\n" - "\tmuls r0, r5\n" - "\tlsls r0, 1\n" - "\tldr r2, [sp]\n" - "\tadds r0, r2, r0\n" - "\tadds r2, r0, r6\n" - "\tldrh r0, [r2, 0x2]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3]\n" - "\tldrh r0, [r2, 0x6]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2, 0x4]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3, 0x2]\n" - "\tldrh r0, [r2, 0xA]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2, 0x8]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3, 0x4]\n" - "\tldrh r0, [r2, 0xE]\n" - "\tlsls r0, 8\n" - "\tldrh r1, [r2, 0xC]\n" - "\torrs r0, r1\n" - "\tstrh r0, [r3, 0x6]\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tcmp r4, 0x7\n" - "\tbls _080FD91E\n" - "\tlsls r0, r7, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, r5\n" - "\tbcc _080FD90E\n" - "_080FD96E:\n" - "\tmov r1, r10\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r1, r0, 16\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r1, r2\n" - "\tbcc _080FD8FA\n" - "\tb _080FDA08\n" - "_080FD97C:\n" - "\tmovs r1, 0\n" - "\tldr r0, [sp, 0x8]\n" - "\tcmp r1, r0\n" - "\tbcs _080FDA08\n" - "_080FD984:\n" - "\tmovs r0, 0\n" - "\tadds r2, r1, 0x1\n" - "\tmov r10, r2\n" - "\tcmp r0, r5\n" - "\tbcs _080FD9FC\n" - "\tadds r2, r1, 0\n" - "\tmuls r2, r5\n" - "\tmov r9, r2\n" - "\tlsls r1, 3\n" - "\tmov r8, r1\n" - "_080FD998:\n" - "\tmovs r4, 0\n" - "\tlsls r6, r0, 4\n" - "\tadds r7, r0, 0x1\n" - "\tadd r0, r9\n" - "\tlsls r0, 5\n" - "\tldr r1, [sp, 0x4]\n" - "\tadds r1, r0\n" - "\tmov r12, r1\n" - "_080FD9A8:\n" - "\tlsls r0, r4, 2\n" - "\tmov r2, r12\n" - "\tadds r3, r2, r0\n" - "\tmov r1, r8\n" - "\tadds r0, r1, r4\n" - "\tlsls r0, 3\n" - "\tmuls r0, r5\n" - "\tlsls r0, 1\n" - "\tldr r2, [sp]\n" - "\tadds r0, r2, r0\n" - "\tadds r2, r0, r6\n" - "\tldrh r1, [r2, 0x2]\n" - "\tlsls r1, 4\n" - "\tldrh r0, [r2]\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0x4]\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0x6]\n" - "\tlsls r0, 12\n" - "\torrs r1, r0\n" - "\tstrh r1, [r3]\n" - "\tldrh r1, [r2, 0xA]\n" - "\tlsls r1, 4\n" - "\tldrh r0, [r2, 0x8]\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0xC]\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tldrh r0, [r2, 0xE]\n" - "\tlsls r0, 12\n" - "\torrs r1, r0\n" - "\tstrh r1, [r3, 0x2]\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tcmp r4, 0x7\n" - "\tbls _080FD9A8\n" - "\tlsls r0, r7, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, r5\n" - "\tbcc _080FD998\n" - "_080FD9FC:\n" - "\tmov r1, r10\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r1, r0, 16\n" - "\tldr r2, [sp, 0x8]\n" - "\tcmp r1, r2\n" - "\tbcc _080FD984\n" - "_080FDA08:\n" - "\tadd sp, 0xC\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -} - -void sub_80FDA18(struct Unk03005E20 *arg0) -{ - gUnknown_03005E0C = arg0->var_18 * 16; - gUnknown_03005E08 = &arg0->var_8[gUnknown_03005E0C]; - gUnknown_03005DEC = arg0->var_4; - gUnknown_03005DE8 = arg0->var_19; - gUnknown_03005DFC = arg0->var_1A; - gUnknown_03005DF8 = arg0->var_1B; - gUnknown_03005DF0 = arg0->var_1C; - gUnknown_03005E04 = arg0->var_1D; - gUnknown_03005DF4 = arg0->var_1E; - - switch (arg0->var_14) - { - case 0: - sub_80FDC18(FALSE); - break; - case 1: - sub_80FDC18(TRUE); - break; - case 2: - sub_80FDAE4(); - sub_80FDF88(); - break; - case 3: - sub_80FDBE4(); - sub_80FDED8(); - break; - case 4: - sub_80FDBA8(); - sub_80FDE28(); - break; - case 5: - sub_80FDB8C(); - sub_80FDD70(); - break; - } -} - -void sub_80FDAE4(void) -{ - gUnknown_03005E08[0] = RGB2(0, 0, 0); - gUnknown_03005E08[1] = RGB2(6, 6, 6); - gUnknown_03005E08[2] = RGB2(29, 29, 29); - gUnknown_03005E08[3] = RGB2(11, 11, 11); - gUnknown_03005E08[4] = RGB2(29, 6, 6); - gUnknown_03005E08[5] = RGB2(6, 29, 6); - gUnknown_03005E08[6] = RGB2(6, 6, 29); - gUnknown_03005E08[7] = RGB2(29, 29, 6); - gUnknown_03005E08[8] = RGB2(29, 6, 29); - gUnknown_03005E08[9] = RGB2(6, 29, 29); - gUnknown_03005E08[10] = RGB2(29, 11, 6); - gUnknown_03005E08[11] = RGB2(11, 29, 6); - gUnknown_03005E08[12] = RGB2(6, 11, 29); - gUnknown_03005E08[13] = RGB2(29, 6, 11); - gUnknown_03005E08[14] = RGB2(6, 29, 11); - gUnknown_03005E08[15] = RGB2(11, 6, 29); -} - -void sub_80FDB8C(void) -{ - gUnknown_03005E08[0] = RGB2(0, 0, 0); - gUnknown_03005E08[1] = RGB2(0, 0, 0); - gUnknown_03005E08[2] = RGB2(31, 31, 31); -} - -void sub_80FDBA8(void) -{ - u8 i; - - gUnknown_03005E08[0] = RGB2(0, 0, 0); - gUnknown_03005E08[1] = RGB2(0, 0, 0); - for (i = 0; i < 14; i++) - gUnknown_03005E08[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); -} - -void sub_80FDBE4(void) -{ - u8 i; - - gUnknown_03005E08[0] = RGB2(0, 0, 0); - for (i = 0; i < 32; i++) - gUnknown_03005E08[i + 1] = RGB2(i, i, i); -} - -void sub_80FDC18(bool8 arg0) -{ - u8 i, j; - u16 maxIndex; - - maxIndex = 0xDF; - if (!arg0) - maxIndex = 0xFF; - - for (j = 0; j < maxIndex; j++) - gUnknown_03005E08[j] = 0; - - gUnknown_03005E08[maxIndex] = RGB2(15, 15, 15); - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - { - *pal = gUnknown_03005E0C; - } - else - { - u16 color = sub_80FE038(pal); - u8 curIndex = 1; - if (curIndex < maxIndex) - { - if (gUnknown_03005E08[curIndex] == RGB_BLACK) - { - gUnknown_03005E08[curIndex] = color; - *pal = gUnknown_03005E0C + curIndex; - } - else - { - while (curIndex < maxIndex) - { - if (gUnknown_03005E08[curIndex] == RGB_BLACK) - { - gUnknown_03005E08[curIndex] = color; - *pal = gUnknown_03005E0C + curIndex; - break; - } - - if (gUnknown_03005E08[curIndex] == color) - { - *pal = gUnknown_03005E0C + curIndex; - break; - } - - curIndex++; - } - } - } - - if (curIndex == maxIndex) - { - curIndex = maxIndex; - *pal = curIndex; - } - } - } - } -} - -void sub_80FDD70(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - { - *pal = gUnknown_03005E0C; - } - else - { - if (ConvertToBlackOrWhite(pal) == RGB_BLACK) - *pal = gUnknown_03005E0C + 1; - else - *pal = gUnknown_03005E0C + 2; - } - } - } -} - -void sub_80FDE28(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - *pal = gUnknown_03005E0C; - else - *pal = sub_80FE17C(pal) + gUnknown_03005E0C; - } - } -} - -void sub_80FDED8(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - *pal = gUnknown_03005E0C; - else - *pal = sub_80FE1B0(pal) + gUnknown_03005E0C; - } - } -} - -void sub_80FDF88(void) -{ - u8 i, j; - - for (i = 0; i < gUnknown_03005DF0; i++) - { - u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04]; - u16* pal = &var2[gUnknown_03005DE8]; - for (j = 0; j < gUnknown_03005DF8; j++, pal++) - { - if (*pal & 0x8000) - *pal = gUnknown_03005E0C; - else - *pal = sub_80FE0AC(pal) + gUnknown_03005E0C; - } - } -} - -u16 sub_80FE038(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - - if (red & 3) - red = (red & 0x1C) + 4; - if (green & 3) - green = (green & 0x1C) + 4; - if (blue & 3) - blue = (blue & 0x1C) + 4; - - if (red < 6) - red = 6; - if (red > 30) - red = 30; - - if (green < 6) - green = 6; - if (green > 30) - green = 30; - - if (blue < 6) - blue = 6; - if (blue > 30) - blue = 30; - - return RGB2(red, green, blue); -} - -u16 sub_80FE0AC(u16* color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - - if (red < 12 && green < 11 && blue < 11) - return 1; - - if (red > 19 && green > 19 && blue > 19) - return 2; - - if (red > 19) - { - if (green > 19) - { - if (blue > 14) - return 2; - else - return 7; - } - else if (blue > 19) - { - if (green > 14) - return 2; - else - return 8; - } - } - - if (green > 19 && blue > 19) - { - if (red > 14) - return 2; - else - return 9; - } - - if (red > 19) - { - if (green > 11) - { - if (blue > 11) - { - if (green < blue) - return 8; - else - return 7; - } - else - { - return 10; - } - } - else if (blue > 11) - { - return 13; - } - else - { - return 4; - } - } - - if (green > 19) - { - if (red > 11) - { - if (blue > 11) - { - if (red < blue) - return 9; - else - return 7; - } - else - { - return 11; - } - } - else - { - if (blue > 11) - return 14; - else - return 5; - } - } - - if (blue > 19) - { - if (red > 11) - { - if (green > 11) - { - if (red < green) - return 9; - else - return 8; - } - } - else if (green > 11) - { - return 12; - } - - if (blue > 11) - return 15; - else - return 6; - } - - return 3; -} - -u16 sub_80FE17C(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - u16 average = ((red + green + blue) / 3) & 0x1E; - if (average == 0) - return 1; - else - return average / 2; -} - -u16 sub_80FE1B0(u16 *color) -{ - u16 red = *color & 0x1F; - u16 green = (*color >> 5) & 0x1F; - u16 blue = (*color >> 10) & 0x1F; - u16 average = (red + green + blue) / 3; - return average + 1; -} diff --git a/src/script_pokemon_util_80C4BF0.c b/src/contest_util.c index c405d9cb4..34db5a975 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/contest_util.c @@ -1,33 +1,33 @@ #include "global.h" +#include "contest_util.h" #include "battle.h" #include "berry.h" #include "choose_party.h" +#include "constants/items.h" +#include "constants/species.h" #include "contest.h" -#include "contest_link_80C2020.h" +#include "contest_link_util.h" #include "contest_painting.h" #include "data2.h" #include "daycare.h" #include "debug.h" #include "decompress.h" #include "event_data.h" -#include "constants/items.h" +#include "ewram.h" #include "link.h" #include "load_save.h" #include "main.h" #include "menu.h" +#include "overworld.h" #include "pokedex.h" #include "pokemon.h" #include "random.h" -#include "overworld.h" -#include "script_pokemon_80C4.h" -#include "constants/species.h" #include "task.h" -#include "ewram.h" #define CONTEST_ENTRY_PIC_LEFT 10 #define CONTEST_ENTRY_PIC_TOP 3 -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u8 gSelectedOrderFromParty[]; @@ -44,89 +44,87 @@ void SetContestTrainerGfxIds(void) gSaveBlock1.vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId; } -void sub_80C4C28(void) +void GetNpcContestantLocalId(void) { - u16 var; + u16 localId; u8 specialVar = gSpecialVar_0x8005; switch(specialVar) { case 0: - var = 3; + localId = 3; break; case 1: - var = 4; + localId = 4; break; case 2: - var = 5; + localId = 5; break; default: - var = 100; + localId = 100; break; } - gSpecialVar_0x8004 = var; + gSpecialVar_0x8004 = localId; } -void sub_80C4C64(void) +void BufferContestTrainerAndMonNames(void) { Contest_GetTrainerNameI_StringVar1(); Contest_GetNicknameI_StringVar1(); - sub_80C48F4(); + Contest_GetSpeciesNameI_StringVar1(); } -void sub_80C4C78(void) +void DoesContestCategoryHaveMuseumPainting(void) { - u16 var; - u16 returnVar; + u16 contestWinner; switch(gSpecialVar_ContestCategory) { case CONTEST_CATEGORY_COOL: - var = 8; + contestWinner = CONTEST_WINNER_MUSEUM_COOL - 1; break; case CONTEST_CATEGORY_BEAUTY: - var = 9; + contestWinner = CONTEST_WINNER_MUSEUM_BEAUTY - 1; break; case CONTEST_CATEGORY_CUTE: - var = 10; + contestWinner = CONTEST_WINNER_MUSEUM_CUTE - 1; break; case CONTEST_CATEGORY_SMART: - var = 11; + contestWinner = CONTEST_WINNER_MUSEUM_SMART - 1; break; case CONTEST_CATEGORY_TOUGH: default: - var = 12; + contestWinner = CONTEST_WINNER_MUSEUM_TOUGH - 1; break; } - returnVar = gSaveBlock1.contestWinners[var].species; - - if(returnVar == 0) - gSpecialVar_0x8004 = returnVar; + if (gSaveBlock1.contestWinners[contestWinner].species == SPECIES_NONE) + gSpecialVar_0x8004 = FALSE; else - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; } -void sub_80C4CEC(void) +void SaveMuseumContestPainting(void) { - Contest_SaveWinner(0xFF); + Contest_SaveWinner(CONTEST_SAVE_FOR_MUSEUM); } -void sub_80C4CF8(void) +void ShouldReadyContestArtist(void) { if(!gContestFinalStandings[gContestPlayerMonIndex] - && gSpecialVar_ContestRank == 3 - && gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gSpecialVar_ContestRank == CONTEST_RANK_MASTER + && + gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) { - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; } else { - gSpecialVar_0x8004 = 0; + gSpecialVar_0x8004 = FALSE; } } -u8 sub_80C4D50(void) +u8 CountPlayerMuseumPaintings(void) { u8 retVar = 0; int i; @@ -138,67 +136,72 @@ u8 sub_80C4D50(void) return retVar; } -void sub_80C4D80(void) +void GetContestantNamesAtRank(void) { - s16 sp0[4]; + s16 conditions[4]; s32 i; s32 j; - s16 r4; - u8 r2; - u8 r7; - s8 r10; - u8 r4_; + s16 condition; + u8 contestantOffset; + u8 tieRank; + s8 numAtCondition; + u8 rank; + // Get round 1 points for (i = 0; i < 4; i++) - sp0[i] = gContestMonConditions[i]; + conditions[i] = gContestMonRound1Points[i]; + // Sort round 1 points for (i = 0; i < 3; i++) { for (j = 3; j > i; j--) { - if (sp0[j - 1] < sp0[j]) + if (conditions[j - 1] < conditions[j]) { - s32 temp = sp0[j]; - - sp0[j] = sp0[j - 1]; - sp0[j - 1] = temp; + int temp; + SWAP(conditions[j], conditions[j - 1], temp) } } } - r4 = sp0[gSpecialVar_0x8006]; - r10 = 0; - r7 = 0; + // Get round1 points at specified rank + condition = conditions[gSpecialVar_0x8006]; + + // Count number of contestants with the same number of points + numAtCondition = 0; + tieRank = 0; for (i = 0; i < 4; i++) { - if (sp0[i] == r4) + if (conditions[i] == condition) { - r10++; + numAtCondition++; if (i == gSpecialVar_0x8006) - r7 = r10; + tieRank = numAtCondition; } } + // Get rank of first contestant with the same number of points for (i = 0; i < 4; i++) { - if (sp0[i] == r4) + if (conditions[i] == condition) break; } + rank = i; - r4_ = i; - r2 = r7; - + // Get contestant id of player at rank (taking ties into account) + contestantOffset = tieRank; for (i = 0; i < 4; i++) { - if (r4 == gContestMonConditions[i]) + if (condition == gContestMonRound1Points[i]) { - if (r2 == 1) + if (contestantOffset == 1) break; - r2--; + contestantOffset--; } } + // Use contestant id to get names Contest_CopyAndConvertNicknameI_Intl(gStringVar1, i); if (gIsLinkContest & 1) @@ -206,10 +209,13 @@ void sub_80C4D80(void) else Contest_CopyAndConvertTrainerName_Intl(gStringVar2, gContestMons[i].trainerName); - if (r10 == 1 || r7 == r10) - gSpecialVar_0x8006 = r4_; + // Return adjusted rank + if (numAtCondition == 1) + gSpecialVar_0x8006 = rank; + else if (tieRank == numAtCondition) + gSpecialVar_0x8006 = rank; else - gSpecialVar_0x8006 = r4_ + 4; + gSpecialVar_0x8006 = rank + 4; } void ShowContestWinnerCleanup(void) @@ -217,13 +223,15 @@ void ShowContestWinnerCleanup(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } +// File boundary? + void ShowContestWinner(void) { if(gUnknown_0203856C) { sub_80AAF30(); - gBattleStruct->unk15DDF = 1; - gBattleStruct->unk15DDE = sub_80B2C4C(254, 0); + eCurContestWinnerIsForArtist = TRUE; + eCurContestWinnerSaveIdx = GetContestWinnerSaveIdx(CONTEST_SAVE_FOR_ARTIST, 0); Contest_SaveWinner(3); gUnknown_0203856C = 0; } @@ -246,7 +254,7 @@ bool8 GiveMonArtistRibbon(void) if(ribbon == FALSE && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3 - && gUnknown_02038678[gContestPlayerMonIndex] >= 800) + && gContestMonTotalPoints[gContestPlayerMonIndex] >= 800) { ribbon = TRUE; SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &ribbon); @@ -287,15 +295,15 @@ void ShowContestEntryMonPic(void) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - (u32)gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[0], + gMonSpriteGfx_Sprite_ptr[1], species, var1); palette = GetMonSpritePalStructFromOtIdPersonality(species, var2, var1); LoadCompressedObjectPalette(palette); GetMonSpriteTemplate_803C56C(species, 1); - gUnknown_02024E8C.paletteTag = palette->tag; - spriteId = CreateSprite(&gUnknown_02024E8C, 0x78, 0x40, 0); + gCreatingSpriteTemplate.paletteTag = palette->tag; + spriteId = CreateSprite(&gCreatingSpriteTemplate, 0x78, 0x40, 0); gTasks[taskId].data[2] = spriteId; gTasks[taskId].data[3] = left; gTasks[taskId].data[4] = top; diff --git a/src/credits.c b/src/credits.c index 28a4994be..3f1335cd8 100644 --- a/src/credits.c +++ b/src/credits.c @@ -166,7 +166,7 @@ struct CreditsEntry extern u8 unk_201e800[0x800]; extern u8 unk_201f000[0x800]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u16 gUnknown_02039358; extern s16 gUnknown_0203935A; @@ -174,7 +174,7 @@ extern s16 gUnknown_0203935C; static EWRAM_DATA s16 gUnknown_02039320 = 0; static EWRAM_DATA u16 gUnknown_02039322 = 0; // TASK A -EWRAM_DATA u8 gUnknown_02039324 = 0; +EWRAM_DATA u8 gHasHallOfFameRecords = 0; static EWRAM_DATA u8 gUnknown_02039325 = 0; extern u8 gReservedSpritePaletteCount; @@ -433,7 +433,7 @@ static void sub_814395C(void) UpdatePaletteFade(); if ((gMain.heldKeys & B_BUTTON) - && gUnknown_02039324 != 0 + && gHasHallOfFameRecords != 0 && gTasks[gUnknown_02039322].func == task_a_8143B68) { vblank_8143948(); @@ -1561,7 +1561,7 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - EWRAM, + (void *)EWRAM, gUnknown_0840B5A0[position], species, personality, @@ -1572,7 +1572,7 @@ static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position) LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20); sub_8143648(position, position); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].oam.paletteNum = position; gSprites[spriteId].oam.priority = 1; gSprites[spriteId].data[1] = position + 1; diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h new file mode 100644 index 000000000..a1584cf0d --- /dev/null +++ b/src/data/contest_opponents.h @@ -0,0 +1,1668 @@ +#include "constants/species.h" +#include "constants/moves.h" +#include "constants/contest.h" + +#define CONTEST_OPPONENT_JIMMY 0 +#define CONTEST_OPPONENT_EDITH 1 +#define CONTEST_OPPONENT_EVAN 2 +#define CONTEST_OPPONENT_KELSEY 3 +#define CONTEST_OPPONENT_MADISON 4 +#define CONTEST_OPPONENT_RAYMOND 5 +#define CONTEST_OPPONENT_GRANT 6 +#define CONTEST_OPPONENT_PAIGE 7 +#define CONTEST_OPPONENT_ALEC 8 +#define CONTEST_OPPONENT_SYDNEY 9 +#define CONTEST_OPPONENT_MORRIS 10 +#define CONTEST_OPPONENT_MARIAH 11 +#define CONTEST_OPPONENT_RUSSELL 12 +#define CONTEST_OPPONENT_MELANIE 13 +#define CONTEST_OPPONENT_CHANCE 14 +#define CONTEST_OPPONENT_KARINA 15 +#define CONTEST_OPPONENT_BOBBY 16 +#define CONTEST_OPPONENT_CLAIRE 17 +#define CONTEST_OPPONENT_WILLIE 18 +#define CONTEST_OPPONENT_CASSIDY 19 +#define CONTEST_OPPONENT_MORGAN 20 +#define CONTEST_OPPONENT_SUMMER 21 +#define CONTEST_OPPONENT_MILES 22 +#define CONTEST_OPPONENT_AUDREY 23 +#define CONTEST_OPPONENT_AVERY 24 +#define CONTEST_OPPONENT_ARIANA 25 +#define CONTEST_OPPONENT_ASHTON 26 +#define CONTEST_OPPONENT_SANDRA 27 +#define CONTEST_OPPONENT_CARSON 28 +#define CONTEST_OPPONENT_KATRINA 29 +#define CONTEST_OPPONENT_RONNIE 30 +#define CONTEST_OPPONENT_CLAUDIA 31 +#define CONTEST_OPPONENT_ELIAS 32 +#define CONTEST_OPPONENT_JADE 33 +#define CONTEST_OPPONENT_FRANCIS 34 +#define CONTEST_OPPONENT_ALISHA 35 +#define CONTEST_OPPONENT_SAUL 36 +#define CONTEST_OPPONENT_FELICIA 37 +#define CONTEST_OPPONENT_EMILIO 38 +#define CONTEST_OPPONENT_KARLA 39 +#define CONTEST_OPPONENT_DARRYL 40 +#define CONTEST_OPPONENT_SELENA 41 +#define CONTEST_OPPONENT_NOEL 42 +#define CONTEST_OPPONENT_LACEY 43 +#define CONTEST_OPPONENT_CORBIN 44 +#define CONTEST_OPPONENT_JUSTINA 45 +#define CONTEST_OPPONENT_RALPH 46 +#define CONTEST_OPPONENT_ROSA 47 +#define CONTEST_OPPONENT_KEATON 48 +#define CONTEST_OPPONENT_MAYRA 49 +#define CONTEST_OPPONENT_LAMAR 50 +#define CONTEST_OPPONENT_AUBREY 51 +#define CONTEST_OPPONENT_NIGEL 52 +#define CONTEST_OPPONENT_CAMILLE 53 +#define CONTEST_OPPONENT_DEON 54 +#define CONTEST_OPPONENT_JANELLE 55 +#define CONTEST_OPPONENT_HEATH 56 +#define CONTEST_OPPONENT_SASHA 57 +#define CONTEST_OPPONENT_FRANKIE 58 +#define CONTEST_OPPONENT_HELEN 59 + +// All contest opponents have a common set of AI flags (which contains all of the actually +// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags. +// Seems that like the battle AI they had more plans for this than what ended up in the final game +#define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_3 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_4 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_5 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_6 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_7 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_8 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_9 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_24) +#define CONTEST_AI_SET_A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_11 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_22 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_24) +#define CONTEST_AI_SET_F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_10 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_23) +#define CONTEST_AI_SET_11 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_12 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_13 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_14 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_15 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_22) +#define CONTEST_AI_SET_16 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_17 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_23 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_18 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_19 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_1C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_21) +#define CONTEST_AI_SET_1D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_1F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25) +#define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25) + +#if defined(ENGLISH) +#define CONTEST_OPPONENT_NICKNAME_JIMMY "POOCHY" +#define CONTEST_OPPONENT_OTNAME_JIMMY "JIMMY" +#define CONTEST_OPPONENT_NICKNAME_EDITH "ZIGOON" +#define CONTEST_OPPONENT_OTNAME_EDITH "EDITH" +#define CONTEST_OPPONENT_NICKNAME_EVAN "DUSTER" +#define CONTEST_OPPONENT_OTNAME_EVAN "EVAN" +#define CONTEST_OPPONENT_NICKNAME_KELSEY "DOTS" +#define CONTEST_OPPONENT_OTNAME_KELSEY "KELSEY" +#define CONTEST_OPPONENT_NICKNAME_MADISON "TATAY" +#define CONTEST_OPPONENT_OTNAME_MADISON "MADISON" +#define CONTEST_OPPONENT_NICKNAME_RAYMOND "NINDA" +#define CONTEST_OPPONENT_OTNAME_RAYMOND "RAYMOND" +#define CONTEST_OPPONENT_NICKNAME_GRANT "SMISH" +#define CONTEST_OPPONENT_OTNAME_GRANT "GRANT" +#define CONTEST_OPPONENT_NICKNAME_PAIGE "GULWEE" +#define CONTEST_OPPONENT_OTNAME_PAIGE "PAIGE" +#define CONTEST_OPPONENT_NICKNAME_ALEC "SLOKTH" +#define CONTEST_OPPONENT_OTNAME_ALEC "ALEC" +#define CONTEST_OPPONENT_NICKNAME_SYDNEY "WHIRIS" +#define CONTEST_OPPONENT_OTNAME_SYDNEY "SYDNEY" +#define CONTEST_OPPONENT_NICKNAME_MORRIS "MAHITA" +#define CONTEST_OPPONENT_OTNAME_MORRIS "MORRIS" +#define CONTEST_OPPONENT_NICKNAME_MARIAH "RONAR" +#define CONTEST_OPPONENT_OTNAME_MARIAH "MARIAH" +#define CONTEST_OPPONENT_NICKNAME_RUSSELL "ZUTZU" +#define CONTEST_OPPONENT_OTNAME_RUSSELL "RUSSELL" +#define CONTEST_OPPONENT_NICKNAME_MELANIE "GULIN" +#define CONTEST_OPPONENT_OTNAME_MELANIE "MELANIE" +#define CONTEST_OPPONENT_NICKNAME_CHANCE "RIKELEC" +#define CONTEST_OPPONENT_OTNAME_CHANCE "CHANCE" +#define CONTEST_OPPONENT_NICKNAME_KARINA "RELIA" +#define CONTEST_OPPONENT_OTNAME_KARINA "KARINA" +#define CONTEST_OPPONENT_NICKNAME_BOBBY "DUODO" +#define CONTEST_OPPONENT_OTNAME_BOBBY "BOBBY" +#define CONTEST_OPPONENT_NICKNAME_CLAIRE "PINCHIN" +#define CONTEST_OPPONENT_OTNAME_CLAIRE "CLAIRE" +#define CONTEST_OPPONENT_NICKNAME_WILLIE "NACAC" +#define CONTEST_OPPONENT_OTNAME_WILLIE "WILLIE" +#define CONTEST_OPPONENT_NICKNAME_CASSIDY "SHRAND" +#define CONTEST_OPPONENT_OTNAME_CASSIDY "CASSIDY" +#define CONTEST_OPPONENT_NICKNAME_MORGAN "TOYBAL" +#define CONTEST_OPPONENT_OTNAME_MORGAN "MORGAN" +#define CONTEST_OPPONENT_NICKNAME_SUMMER "LENUM" +#define CONTEST_OPPONENT_OTNAME_SUMMER "SUMMER" +#define CONTEST_OPPONENT_NICKNAME_MILES "SPININ" +#define CONTEST_OPPONENT_OTNAME_MILES "MILES" +#define CONTEST_OPPONENT_NICKNAME_AUDREY "SWABY" +#define CONTEST_OPPONENT_OTNAME_AUDREY "AUDREY" +#define CONTEST_OPPONENT_NICKNAME_AVERY "NOONE" +#define CONTEST_OPPONENT_OTNAME_AVERY "AVERY" +#define CONTEST_OPPONENT_NICKNAME_ARIANA "KECON" +#define CONTEST_OPPONENT_OTNAME_ARIANA "ARIANA" +#define CONTEST_OPPONENT_NICKNAME_ASHTON "GOLDEN" +#define CONTEST_OPPONENT_OTNAME_ASHTON "ASHTON" +#define CONTEST_OPPONENT_NICKNAME_SANDRA "BOBOACH" +#define CONTEST_OPPONENT_OTNAME_SANDRA "SANDRA" +#define CONTEST_OPPONENT_NICKNAME_CARSON "CORPY" +#define CONTEST_OPPONENT_OTNAME_CARSON "CARSON" +#define CONTEST_OPPONENT_NICKNAME_KATRINA "TADO" +#define CONTEST_OPPONENT_OTNAME_KATRINA "KATRINA" +#define CONTEST_OPPONENT_NICKNAME_RONNIE "LAIRN" +#define CONTEST_OPPONENT_OTNAME_RONNIE "RONNIE" +#define CONTEST_OPPONENT_NICKNAME_CLAUDIA "NUZLE" +#define CONTEST_OPPONENT_OTNAME_CLAUDIA "CLAUDIA" +#define CONTEST_OPPONENT_NICKNAME_ELIAS "NINAS" +#define CONTEST_OPPONENT_OTNAME_ELIAS "ELIAS" +#define CONTEST_OPPONENT_NICKNAME_JADE "WELOW" +#define CONTEST_OPPONENT_OTNAME_JADE "JADE" +#define CONTEST_OPPONENT_NICKNAME_FRANCIS "YENA" +#define CONTEST_OPPONENT_OTNAME_FRANCIS "FRANCIS" +#define CONTEST_OPPONENT_NICKNAME_ALISHA "TIFLY" +#define CONTEST_OPPONENT_OTNAME_ALISHA "ALISHA" +#define CONTEST_OPPONENT_NICKNAME_SAUL "KINGSEA" +#define CONTEST_OPPONENT_OTNAME_SAUL "SAUL" +#define CONTEST_OPPONENT_NICKNAME_FELICIA "ERUPAM" +#define CONTEST_OPPONENT_OTNAME_FELICIA "FELICIA" +#define CONTEST_OPPONENT_NICKNAME_EMILIO "CHOPAM" +#define CONTEST_OPPONENT_OTNAME_EMILIO "EMILIO" +#define CONTEST_OPPONENT_NICKNAME_KARLA "LOMBE" +#define CONTEST_OPPONENT_OTNAME_KARLA "KARLA" +#define CONTEST_OPPONENT_NICKNAME_DARRYL "VIPES" +#define CONTEST_OPPONENT_OTNAME_DARRYL "DARRYL" +#define CONTEST_OPPONENT_NICKNAME_SELENA "MERAIL" +#define CONTEST_OPPONENT_OTNAME_SELENA "SELENA" +#define CONTEST_OPPONENT_NICKNAME_NOEL "KARPAG" +#define CONTEST_OPPONENT_OTNAME_NOEL "NOEL" +#define CONTEST_OPPONENT_NICKNAME_LACEY "LUNONE" +#define CONTEST_OPPONENT_OTNAME_LACEY "LACEY" +#define CONTEST_OPPONENT_NICKNAME_CORBIN "PELIPE" +#define CONTEST_OPPONENT_OTNAME_CORBIN "CORBIN" +#define CONTEST_OPPONENT_NICKNAME_JUSTINA "RADOS" +#define CONTEST_OPPONENT_OTNAME_JUSTINA "JUSTINA" +#define CONTEST_OPPONENT_NICKNAME_RALPH "LOUDERD" +#define CONTEST_OPPONENT_OTNAME_RALPH "RALPH" +#define CONTEST_OPPONENT_NICKNAME_ROSA "CATTED" +#define CONTEST_OPPONENT_OTNAME_ROSA "ROSA" +#define CONTEST_OPPONENT_NICKNAME_KEATON "SLING" +#define CONTEST_OPPONENT_OTNAME_KEATON "KEATON" +#define CONTEST_OPPONENT_NICKNAME_MAYRA "TARIA" +#define CONTEST_OPPONENT_OTNAME_MAYRA "MAYRA" +#define CONTEST_OPPONENT_NICKNAME_LAMAR "SHEDJA" +#define CONTEST_OPPONENT_OTNAME_LAMAR "LAMAR" +#define CONTEST_OPPONENT_NICKNAME_AUBREY "PLUMILE" +#define CONTEST_OPPONENT_OTNAME_AUBREY "AUBREY" +#define CONTEST_OPPONENT_NICKNAME_NIGEL "KULLUSK" +#define CONTEST_OPPONENT_OTNAME_NIGEL "NIGEL" +#define CONTEST_OPPONENT_NICKNAME_CAMILLE "UTAN" +#define CONTEST_OPPONENT_OTNAME_CAMILLE "CAMILLE" +#define CONTEST_OPPONENT_NICKNAME_DEON "PEDOS" +#define CONTEST_OPPONENT_OTNAME_DEON "DEON" +#define CONTEST_OPPONENT_NICKNAME_JANELLE "LUVIS" +#define CONTEST_OPPONENT_OTNAME_JANELLE "JANELLE" +#define CONTEST_OPPONENT_NICKNAME_HEATH "HEROSS" +#define CONTEST_OPPONENT_OTNAME_HEATH "HEATH" +#define CONTEST_OPPONENT_NICKNAME_SASHA "RODLECT" +#define CONTEST_OPPONENT_OTNAME_SASHA "SASHA" +#define CONTEST_OPPONENT_NICKNAME_FRANKIE "CHUPY" +#define CONTEST_OPPONENT_OTNAME_FRANKIE "FRANKIE" +#define CONTEST_OPPONENT_NICKNAME_HELEN "WOBET" +#define CONTEST_OPPONENT_OTNAME_HELEN "HELEN" +#elif defined(GERMAN) +#define CONTEST_OPPONENT_NICKNAME_JIMMY "FIFFI" +#define CONTEST_OPPONENT_OTNAME_JIMMY "JIMMY" +#define CONTEST_OPPONENT_NICKNAME_EDITH "ZIGGY" +#define CONTEST_OPPONENT_OTNAME_EDITH "KLARA" +#define CONTEST_OPPONENT_NICKNAME_EVAN "DOXU" +#define CONTEST_OPPONENT_OTNAME_EVAN "KARLO" +#define CONTEST_OPPONENT_NICKNAME_KELSEY "SAMINI" +#define CONTEST_OPPONENT_OTNAME_KELSEY "TRUDI" +#define CONTEST_OPPONENT_NICKNAME_MADISON "SCHWALBI" +#define CONTEST_OPPONENT_OTNAME_MADISON "HELENA" +#define CONTEST_OPPONENT_NICKNAME_RAYMOND "CADINJA" +#define CONTEST_OPPONENT_OTNAME_RAYMOND "WILLI" +#define CONTEST_OPPONENT_NICKNAME_GRANT "KNILZLI" +#define CONTEST_OPPONENT_OTNAME_GRANT "HARTMUT" +#define CONTEST_OPPONENT_NICKNAME_PAIGE "WINGI" +#define CONTEST_OPPONENT_OTNAME_PAIGE "CLAUDIA" +#define CONTEST_OPPONENT_NICKNAME_ALEC "BLUMPI" +#define CONTEST_OPPONENT_OTNAME_ALEC "ALEC" +#define CONTEST_OPPONENT_NICKNAME_SYDNEY "FLURMI" +#define CONTEST_OPPONENT_OTNAME_SYDNEY "SILKE" +#define CONTEST_OPPONENT_NICKNAME_MORRIS "MAHITA" +#define CONTEST_OPPONENT_OTNAME_MORRIS "PEER" +#define CONTEST_OPPONENT_NICKNAME_MARIAH "STOLLI" +#define CONTEST_OPPONENT_OTNAME_MARIAH "MARIA" +#define CONTEST_OPPONENT_NICKNAME_RUSSELL "BLUTBAT" +#define CONTEST_OPPONENT_OTNAME_RUSSELL "RUDOLF" +#define CONTEST_OPPONENT_NICKNAME_MELANIE "SCHLUPPI" +#define CONTEST_OPPONENT_OTNAME_MELANIE "MELANIE" +#define CONTEST_OPPONENT_NICKNAME_CHANCE "FRIZZZEL" +#define CONTEST_OPPONENT_OTNAME_CHANCE "BERTRAM" +#define CONTEST_OPPONENT_NICKNAME_KARINA "ROSALI" +#define CONTEST_OPPONENT_OTNAME_KARINA "KARINA" +#define CONTEST_OPPONENT_NICKNAME_BOBBY "DOLDI" +#define CONTEST_OPPONENT_OTNAME_BOBBY "BOBBY" +#define CONTEST_OPPONENT_NICKNAME_CLAIRE "KNACKI" +#define CONTEST_OPPONENT_OTNAME_CLAIRE "JUDITH" +#define CONTEST_OPPONENT_NICKNAME_WILLIE "KOTUS" +#define CONTEST_OPPONENT_OTNAME_WILLIE "HELMUT" +#define CONTEST_OPPONENT_NICKNAME_CASSIDY "SADAN" +#define CONTEST_OPPONENT_OTNAME_CASSIDY "BRITTA" +#define CONTEST_OPPONENT_NICKNAME_MORGAN "PUPPIBAL" +#define CONTEST_OPPONENT_OTNAME_MORGAN "TORBEN" +#define CONTEST_OPPONENT_NICKNAME_SUMMER "CLAMAUK" +#define CONTEST_OPPONENT_OTNAME_SUMMER "BIANKA" +#define CONTEST_OPPONENT_NICKNAME_MILES "SPIRRWIRR" +#define CONTEST_OPPONENT_OTNAME_MILES "ALEX" +#define CONTEST_OPPONENT_NICKNAME_AUDREY "BLUPPF" +#define CONTEST_OPPONENT_OTNAME_AUDREY "SABINE" +#define CONTEST_OPPONENT_NICKNAME_AVERY "DAKSIRAD" +#define CONTEST_OPPONENT_OTNAME_AVERY "AUGUST" +#define CONTEST_OPPONENT_NICKNAME_ARIANA "KECLI" +#define CONTEST_OPPONENT_OTNAME_ARIANA "ARIANA" +#define CONTEST_OPPONENT_NICKNAME_ASHTON "GOLDINCHEN" +#define CONTEST_OPPONENT_OTNAME_ASHTON "TONI" +#define CONTEST_OPPONENT_NICKNAME_SANDRA "SCHMERBSE" +#define CONTEST_OPPONENT_OTNAME_SANDRA "SUSI" +#define CONTEST_OPPONENT_NICKNAME_CARSON "KREBSILI" +#define CONTEST_OPPONENT_OTNAME_CARSON "CLEMENS" +#define CONTEST_OPPONENT_NICKNAME_KATRINA "URLOTZO" +#define CONTEST_OPPONENT_OTNAME_KATRINA "KATRIN" +#define CONTEST_OPPONENT_NICKNAME_RONNIE "STROLLAK" +#define CONTEST_OPPONENT_OTNAME_RONNIE "ACHIM" +#define CONTEST_OPPONENT_NICKNAME_CLAUDIA "BLASNI" +#define CONTEST_OPPONENT_OTNAME_CLAUDIA "GABI" +#define CONTEST_OPPONENT_NICKNAME_ELIAS "ASKINJA" +#define CONTEST_OPPONENT_OTNAME_ELIAS "ROLF" +#define CONTEST_OPPONENT_NICKNAME_JADE "SCHWALLO" +#define CONTEST_OPPONENT_OTNAME_JADE "ELSE" +#define CONTEST_OPPONENT_NICKNAME_FRANCIS "JÄNAGI" +#define CONTEST_OPPONENT_OTNAME_FRANCIS "FRANK" +#define CONTEST_OPPONENT_NICKNAME_ALISHA "PAPINILLI" +#define CONTEST_OPPONENT_OTNAME_ALISHA "ANNA" +#define CONTEST_OPPONENT_NICKNAME_SAUL "KINGOLA" +#define CONTEST_OPPONENT_OTNAME_SAUL "KONRAD" +#define CONTEST_OPPONENT_NICKNAME_FELICIA "ERUPTAM" +#define CONTEST_OPPONENT_OTNAME_FELICIA "LUISE" +#define CONTEST_OPPONENT_NICKNAME_EMILIO "OLLOMA" +#define CONTEST_OPPONENT_OTNAME_EMILIO "MICHAEL" +#define CONTEST_OPPONENT_NICKNAME_KARLA "OMBRE" +#define CONTEST_OPPONENT_OTNAME_KARLA "ANIKA" +#define CONTEST_OPPONENT_NICKNAME_DARRYL "PITISVI" +#define CONTEST_OPPONENT_OTNAME_DARRYL "DETLEF" +#define CONTEST_OPPONENT_NICKNAME_SELENA "WAILA" +#define CONTEST_OPPONENT_OTNAME_SELENA "XENIA" +#define CONTEST_OPPONENT_NICKNAME_NOEL "KARDORPA" +#define CONTEST_OPPONENT_OTNAME_NOEL "FLORIAN" +#define CONTEST_OPPONENT_NICKNAME_LACEY "LUNA" +#define CONTEST_OPPONENT_OTNAME_LACEY "DIANA" +#define CONTEST_OPPONENT_NICKNAME_CORBIN "PEPE" +#define CONTEST_OPPONENT_OTNAME_CORBIN "LUTZ" +#define CONTEST_OPPONENT_NICKNAME_JUSTINA "GARADI" +#define CONTEST_OPPONENT_OTNAME_JUSTINA "JASMIN" +#define CONTEST_OPPONENT_NICKNAME_RALPH "KRAKEEL" +#define CONTEST_OPPONENT_OTNAME_RALPH "GERT" +#define CONTEST_OPPONENT_NICKNAME_ROSA "ENEKOTO" +#define CONTEST_OPPONENT_OTNAME_ROSA "ROSA" +#define CONTEST_OPPONENT_NICKNAME_KEATON "ASSIMAX" +#define CONTEST_OPPONENT_OTNAME_KEATON "KURT" +#define CONTEST_OPPONENT_NICKNAME_MAYRA "RIA" +#define CONTEST_OPPONENT_OTNAME_MAYRA "SONJA" +#define CONTEST_OPPONENT_NICKNAME_LAMAR "EXUVINJA" +#define CONTEST_OPPONENT_OTNAME_LAMAR "SÖNKE" +#define CONTEST_OPPONENT_NICKNAME_AUBREY "BLUMIEFT" +#define CONTEST_OPPONENT_OTNAME_AUBREY "MAGDA" +#define CONTEST_OPPONENT_NICKNAME_NIGEL "WANDELBOLD" +#define CONTEST_OPPONENT_OTNAME_NIGEL "SASCHA" +#define CONTEST_OPPONENT_NICKNAME_CAMILLE "TUMANI" +#define CONTEST_OPPONENT_OTNAME_CAMILLE "MILA" +#define CONTEST_OPPONENT_NICKNAME_DEON "HAITODO" +#define CONTEST_OPPONENT_OTNAME_DEON "KNUT" +#define CONTEST_OPPONENT_NICKNAME_JANELLE "KUSSLIEB" +#define CONTEST_OPPONENT_OTNAME_JANELLE "INCA" +#define CONTEST_OPPONENT_NICKNAME_HEATH "SKARAB" +#define CONTEST_OPPONENT_OTNAME_HEATH "FELIX" +#define CONTEST_OPPONENT_NICKNAME_SASHA "LEKBAL" +#define CONTEST_OPPONENT_OTNAME_SASHA "DEBORA" +#define CONTEST_OPPONENT_NICKNAME_FRANKIE "DEIBEL" +#define CONTEST_OPPONENT_OTNAME_FRANKIE "BORIS" +#define CONTEST_OPPONENT_NICKNAME_HELEN "WOHINGENAU" +#define CONTEST_OPPONENT_OTNAME_HELEN "DELIA" +#endif //ENGLISH + +const struct ContestPokemon gContestOpponents[] = { + [CONTEST_OPPONENT_JIMMY] = { + .species = SPECIES_POOCHYENA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JIMMY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JIMMY), + .trainerGfxId = OBJ_EVENT_GFX_BOY_1, + .flags = CONTEST_AI_SET_1, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_ROAR, MOVE_BITE, MOVE_TAKE_DOWN, MOVE_HOWL }, + .cool = 10, + .beauty = 4, + .cute = 10, + .smart = 3, + .tough = 4, + .sheen = 50, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_EDITH] = { + .species = SPECIES_ZIGZAGOON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_EDITH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_EDITH), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_REST, MOVE_TAIL_WHIP, MOVE_TACKLE, MOVE_COVET }, + .cool = 10, + .beauty = 10, + .cute = 6, + .smart = 1, + .tough = 2, + .sheen = 60, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_EVAN] = { + .species = SPECIES_DUSTOX, + .nickname = _(CONTEST_OPPONENT_NICKNAME_EVAN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_EVAN), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_3, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SILVER_WIND, MOVE_MOONLIGHT, MOVE_LIGHT_SCREEN, MOVE_GUST }, + .cool = 2, + .beauty = 10, + .cute = 10, + .smart = 12, + .tough = 4, + .sheen = 70, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KELSEY] = { + .species = SPECIES_SEEDOT, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KELSEY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KELSEY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_4, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_BIDE, MOVE_SYNTHESIS, MOVE_BULLET_SEED, MOVE_GROWTH }, + .cool = 3, + .beauty = 3, + .cute = 5, + .smart = 2, + .tough = 7, + .sheen = 80, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MADISON] = { + .species = SPECIES_TAILLOW, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MADISON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MADISON), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_5, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_WING_ATTACK, MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_GROWL }, + .cool = 1, + .beauty = 3, + .cute = 3, + .smart = 5, + .tough = 4, + .sheen = 90, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RAYMOND] = { + .species = SPECIES_NINCADA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RAYMOND), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RAYMOND), + .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, + .flags = CONTEST_AI_SET_6, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_LEECH_LIFE, MOVE_FALSE_SWIPE, MOVE_FURY_SWIPES, MOVE_MIND_READER }, + .cool = 5, + .beauty = 2, + .cute = 10, + .smart = 7, + .tough = 8, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_GRANT] = { + .species = SPECIES_SHROOMISH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_GRANT), + .trainerName = _(CONTEST_OPPONENT_OTNAME_GRANT), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_7, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_ATTRACT }, + .cool = 3, + .beauty = 3, + .cute = 10, + .smart = 2, + .tough = 2, + .sheen = 50, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_PAIGE] = { + .species = SPECIES_WINGULL, + .nickname = _(CONTEST_OPPONENT_NICKNAME_PAIGE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_PAIGE), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_8, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MIST, MOVE_WATER_GUN, MOVE_GROWL, MOVE_PURSUIT }, + .cool = 3, + .beauty = 5, + .cute = 1, + .smart = 10, + .tough = 10, + .sheen = 60, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ALEC] = { + .species = SPECIES_SLAKOTH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ALEC), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ALEC), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_9, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_STRENGTH, MOVE_COUNTER, MOVE_YAWN, MOVE_ENCORE }, + .cool = 10, + .beauty = 4, + .cute = 4, + .smart = 5, + .tough = 18, + .sheen = 70, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SYDNEY] = { + .species = SPECIES_WHISMUR, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SYDNEY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SYDNEY), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_HYPER_VOICE }, + .cool = 2, + .beauty = 2, + .cute = 7, + .smart = 2, + .tough = 7, + .sheen = 80, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MORRIS] = { + .species = SPECIES_MAKUHITA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MORRIS), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MORRIS), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_B, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SEISMIC_TOSS, MOVE_VITAL_THROW, MOVE_TACKLE, MOVE_REVERSAL }, + .cool = 9, + .beauty = 1, + .cute = 1, + .smart = 8, + .tough = 1, + .sheen = 90, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MARIAH] = { + .species = SPECIES_ARON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MARIAH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MARIAH), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_C, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_HEADBUTT, MOVE_TAKE_DOWN }, + .cool = 5, + .beauty = 10, + .cute = 2, + .smart = 10, + .tough = 2, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RUSSELL] = { + .species = SPECIES_ZUBAT, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RUSSELL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RUSSELL), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_D, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_HAZE, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_LEECH_LIFE }, + .cool = 4, + .beauty = 2, + .cute = 2, + .smart = 2, + .tough = 10, + .sheen = 50, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MELANIE] = { + .species = SPECIES_GULPIN, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MELANIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MELANIE), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_GIRL_1, + .flags = CONTEST_AI_SET_E, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SLUDGE, MOVE_AMNESIA, MOVE_TOXIC, MOVE_YAWN }, + .cool = 1, + .beauty = 10, + .cute = 1, + .smart = 10, + .tough = 5, + .sheen = 60, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CHANCE] = { + .species = SPECIES_ELECTRIKE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CHANCE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CHANCE), + .trainerGfxId = OBJ_EVENT_GFX_BOY_4, + .flags = CONTEST_AI_SET_F, + .whichRank = CONTEST_RANK_NORMAL, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_ROAR }, + .cool = 20, + .beauty = 10, + .cute = 1, + .smart = 1, + .tough = 1, + .sheen = 70, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KARINA] = { + .species = SPECIES_ROSELIA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KARINA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KARINA), + .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, + .flags = CONTEST_AI_SET_10, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_PETAL_DANCE, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_INGRAIN }, + .cool = 50, + .beauty = 15, + .cute = 75, + .smart = 10, + .tough = 20, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_BOBBY] = { + .species = SPECIES_DODUO, + .nickname = _(CONTEST_OPPONENT_NICKNAME_BOBBY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_BOBBY), + .trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_PECK, MOVE_FURY_ATTACK, MOVE_RETURN, MOVE_GROWL }, + .cool = 15, + .beauty = 21, + .cute = 15, + .smart = 85, + .tough = 35, + .sheen = 110, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CLAIRE] = { + .species = SPECIES_TRAPINCH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CLAIRE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CLAIRE), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_11, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_BITE, MOVE_SAND_ATTACK, MOVE_DIG, MOVE_FAINT_ATTACK }, + .cool = 75, + .beauty = 25, + .cute = 25, + .smart = 10, + .tough = 25, + .sheen = 120, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_WILLIE] = { + .species = SPECIES_CACNEA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_WILLIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_WILLIE), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_12, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SPIKES, MOVE_LEER, MOVE_POISON_STING, MOVE_SAND_ATTACK }, + .cool = 10, + .beauty = 30, + .cute = 25, + .smart = 65, + .tough = 25, + .sheen = 130, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CASSIDY] = { + .species = SPECIES_SANDSHREW, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CASSIDY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CASSIDY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_13, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SLASH, MOVE_DEFENSE_CURL, MOVE_SWIFT, MOVE_FURY_SWIPES }, + .cool = 30, + .beauty = 90, + .cute = 30, + .smart = 10, + .tough = 100, + .sheen = 140, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MORGAN] = { + .species = SPECIES_BALTOY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MORGAN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MORGAN), + .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, + .flags = CONTEST_AI_SET_14, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SELF_DESTRUCT, MOVE_ROCK_TOMB, MOVE_PSYBEAM, MOVE_CONFUSION }, + .cool = 50, + .beauty = 40, + .cute = 10, + .smart = 35, + .tough = 35, + .sheen = 150, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SUMMER] = { + .species = SPECIES_NUMEL, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SUMMER), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SUMMER), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_15, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_MAGNITUDE, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY, MOVE_FLAMETHROWER }, + .cool = 40, + .beauty = 5, + .cute = 40, + .smart = 40, + .tough = 40, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MILES] = { + .species = SPECIES_SPINDA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MILES), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MILES), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_16, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_TEETER_DANCE, MOVE_PSYCH_UP, MOVE_HYPNOSIS, MOVE_UPROAR }, + .cool = 25, + .beauty = 75, + .cute = 25, + .smart = 10, + .tough = 25, + .sheen = 110, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_AUDREY] = { + .species = SPECIES_SWABLU, + .nickname = _(CONTEST_OPPONENT_NICKNAME_AUDREY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_AUDREY), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_17, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MIRROR_MOVE, MOVE_PERISH_SONG, MOVE_SAFEGUARD, MOVE_MIST }, + .cool = 30, + .beauty = 30, + .cute = 40, + .smart = 30, + .tough = 25, + .sheen = 120, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_AVERY] = { + .species = SPECIES_LINOONE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_AVERY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_AVERY), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_GROWL, MOVE_COVET, MOVE_SAND_ATTACK, MOVE_REST }, + .cool = 40, + .beauty = 40, + .cute = 30, + .smart = 10, + .tough = 30, + .sheen = 130, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ARIANA] = { + .species = SPECIES_KECLEON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ARIANA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ARIANA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_18, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_THIEF, MOVE_SCREECH, MOVE_ANCIENT_POWER, MOVE_BIND }, + .cool = 10, + .beauty = 10, + .cute = 40, + .smart = 75, + .tough = 35, + .sheen = 140, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ASHTON] = { + .species = SPECIES_GOLDEEN, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ASHTON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ASHTON), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_19, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_HORN_ATTACK, MOVE_FURY_ATTACK, MOVE_HORN_DRILL, MOVE_TAIL_WHIP }, + .cool = 70, + .beauty = 30, + .cute = 5, + .smart = 30, + .tough = 25, + .sheen = 150, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SANDRA] = { + .species = SPECIES_BARBOACH, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SANDRA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SANDRA), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_GIRL_1, + .flags = CONTEST_AI_SET_1A, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_EARTHQUAKE, MOVE_FUTURE_SIGHT }, + .cool = 45, + .beauty = 45, + .cute = 60, + .smart = 25, + .tough = 15, + .sheen = 100, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CARSON] = { + .species = SPECIES_SKARMORY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CARSON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CARSON), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_1B, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SWIFT, MOVE_DOUBLE_TEAM, MOVE_AGILITY, MOVE_CUT }, + .cool = 40, + .beauty = 30, + .cute = 25, + .smart = 60, + .tough = 20, + .sheen = 110, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KATRINA] = { + .species = SPECIES_LOTAD, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KATRINA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KATRINA), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_1C, + .whichRank = CONTEST_RANK_SUPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ASTONISH, MOVE_GROWL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE }, + .cool = 15, + .beauty = 15, + .cute = 30, + .smart = 15, + .tough = 75, + .sheen = 120, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RONNIE] = { + .species = SPECIES_LAIRON, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RONNIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RONNIE), + .trainerGfxId = OBJ_EVENT_GFX_HIKER, + .flags = CONTEST_AI_SET_1D, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_METAL_SOUND, MOVE_METAL_CLAW, MOVE_HARDEN, MOVE_TAKE_DOWN }, + .cool = 30, + .beauty = 50, + .cute = 35, + .smart = 100, + .tough = 90, + .sheen = 200, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CLAUDIA] = { + .species = SPECIES_NUZLEAF, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CLAUDIA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CLAUDIA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_GROWTH, MOVE_RAZOR_WIND, MOVE_EXPLOSION, MOVE_EXTRASENSORY }, + .cool = 75, + .beauty = 75, + .cute = 65, + .smart = 35, + .tough = 70, + .sheen = 210, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ELIAS] = { + .species = SPECIES_NINJASK, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ELIAS), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ELIAS), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_11, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SCREECH, MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS }, + .cool = 30, + .beauty = 50, + .cute = 95, + .smart = 70, + .tough = 70, + .sheen = 220, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_JADE] = { + .species = SPECIES_SWELLOW, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JADE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JADE), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_12, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_AGILITY, MOVE_AERIAL_ACE, MOVE_WING_ATTACK, MOVE_FLY }, + .cool = 65, + .beauty = 85, + .cute = 35, + .smart = 75, + .tough = 40, + .sheen = 230, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_FRANCIS] = { + .species = SPECIES_MIGHTYENA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_FRANCIS), + .trainerName = _(CONTEST_OPPONENT_OTNAME_FRANCIS), + .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, + .flags = CONTEST_AI_SET_5, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_TAUNT, MOVE_THIEF, MOVE_ODOR_SLEUTH, MOVE_TAKE_DOWN }, + .cool = 40, + .beauty = 80, + .cute = 35, + .smart = 70, + .tough = 70, + .sheen = 240, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ALISHA] = { + .species = SPECIES_BEAUTIFLY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ALISHA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ALISHA), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_1E, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MORNING_SUN, MOVE_SILVER_WIND, MOVE_STUN_SPORE, MOVE_SECRET_POWER }, + .cool = 40, + .beauty = 70, + .cute = 25, + .smart = 80, + .tough = 100, + .sheen = 250, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SAUL] = { + .species = SPECIES_SEAKING, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SAUL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SAUL), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_1F, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_FLAIL, MOVE_SUPERSONIC, MOVE_HORN_ATTACK, MOVE_FURY_ATTACK }, + .cool = 80, + .beauty = 60, + .cute = 30, + .smart = 70, + .tough = 90, + .sheen = 200, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_FELICIA] = { + .species = SPECIES_CAMERUPT, + .nickname = _(CONTEST_OPPONENT_NICKNAME_FELICIA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_FELICIA), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_16, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_EARTHQUAKE, MOVE_FISSURE, MOVE_OVERHEAT, MOVE_HYPER_BEAM }, + .cool = 100, + .beauty = 80, + .cute = 20, + .smart = 50, + .tough = 65, + .sheen = 210, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_EMILIO] = { + .species = SPECIES_MACHOP, + .nickname = _(CONTEST_OPPONENT_NICKNAME_EMILIO), + .trainerName = _(CONTEST_OPPONENT_OTNAME_EMILIO), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_20, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SEISMIC_TOSS, MOVE_FOCUS_ENERGY, MOVE_KARATE_CHOP, MOVE_SCARY_FACE }, + .cool = 70, + .beauty = 85, + .cute = 25, + .smart = 60, + .tough = 50, + .sheen = 220, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KARLA] = { + .species = SPECIES_LOMBRE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KARLA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KARLA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ATTRACT, MOVE_FLASH, MOVE_UPROAR, MOVE_GROWL }, + .cool = 40, + .beauty = 60, + .cute = 90, + .smart = 45, + .tough = 70, + .sheen = 230, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_DARRYL] = { + .species = SPECIES_SEVIPER, + .nickname = _(CONTEST_OPPONENT_NICKNAME_DARRYL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_DARRYL), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_18, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP, MOVE_SCREECH }, + .cool = 35, + .beauty = 50, + .cute = 90, + .smart = 40, + .tough = 100, + .sheen = 240, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SELENA] = { + .species = SPECIES_WAILMER, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SELENA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SELENA), + .trainerGfxId = OBJ_EVENT_GFX_OLD_WOMAN_1, + .flags = CONTEST_AI_SET_19, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_WATER_PULSE, MOVE_REST, MOVE_WATER_SPOUT, MOVE_SPLASH }, + .cool = 30, + .beauty = 100, + .cute = 100, + .smart = 50, + .tough = 30, + .sheen = 250, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_NOEL] = { + .species = SPECIES_MAGIKARP, + .nickname = _(CONTEST_OPPONENT_NICKNAME_NOEL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_NOEL), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_1A, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_TACKLE, MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE }, + .cool = 30, + .beauty = 30, + .cute = 160, + .smart = 50, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_LACEY] = { + .species = SPECIES_LUNATONE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_LACEY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_LACEY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_21, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_EXPLOSION, MOVE_FUTURE_SIGHT, MOVE_PSYCHIC, MOVE_CONFUSION }, + .cool = 50, + .beauty = 70, + .cute = 60, + .smart = 70, + .tough = 50, + .sheen = 210, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CORBIN] = { + .species = SPECIES_PELIPPER, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CORBIN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CORBIN), + .trainerGfxId = OBJ_EVENT_GFX_MANIAC, + .flags = CONTEST_AI_SET_F, + .whichRank = CONTEST_RANK_HYPER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_MIST, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_WING_ATTACK }, + .cool = 95, + .beauty = 80, + .cute = 85, + .smart = 35, + .tough = 35, + .sheen = 220, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_JUSTINA] = { + .species = SPECIES_GYARADOS, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JUSTINA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JUSTINA), + .trainerGfxId = OBJ_EVENT_GFX_PICNICKER, + .flags = CONTEST_AI_SET_1D, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_HYPER_BEAM, MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE }, + .cool = 160, + .beauty = 200, + .cute = 20, + .smart = 40, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_RALPH] = { + .species = SPECIES_LOUDRED, + .nickname = _(CONTEST_OPPONENT_NICKNAME_RALPH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_RALPH), + .trainerGfxId = OBJ_EVENT_GFX_OLD_MAN_1, + .flags = CONTEST_AI_SET_2, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_HYPER_VOICE, MOVE_STOMP, MOVE_ROAR, MOVE_HOWL }, + .cool = 170, + .beauty = 50, + .cute = 55, + .smart = 150, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_ROSA] = { + .species = SPECIES_DELCATTY, + .nickname = _(CONTEST_OPPONENT_NICKNAME_ROSA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_ROSA), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_1, + .flags = CONTEST_AI_SET_11, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_ATTRACT, MOVE_ASSIST, MOVE_FAINT_ATTACK, MOVE_TAIL_WHIP }, + .cool = 40, + .beauty = 200, + .cute = 150, + .smart = 185, + .tough = 60, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_KEATON] = { + .species = SPECIES_SLAKING, + .nickname = _(CONTEST_OPPONENT_NICKNAME_KEATON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_KEATON), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY_2, + .flags = CONTEST_AI_SET_12, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_COVET, MOVE_COUNTER, MOVE_ENCORE, MOVE_SLACK_OFF }, + .cool = 85, + .beauty = 85, + .cute = 170, + .smart = 110, + .tough = 150, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_MAYRA] = { + .species = SPECIES_ALTARIA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_MAYRA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_MAYRA), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, + .flags = CONTEST_AI_SET_5, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_PERISH_SONG, MOVE_SAFEGUARD }, + .cool = 170, + .beauty = 150, + .cute = 30, + .smart = 30, + .tough = 90, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_LAMAR] = { + .species = SPECIES_KIRLIA, + .nickname = _(CONTEST_OPPONENT_NICKNAME_LAMAR), + .trainerName = _(CONTEST_OPPONENT_OTNAME_LAMAR), + .trainerGfxId = OBJ_EVENT_GFX_BOY_4, + .flags = CONTEST_AI_SET_1E, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SHOCK_WAVE, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, MOVE_RETURN }, + .cool = 230, + .beauty = 60, + .cute = 60, + .smart = 230, + .tough = 80, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_AUBREY] = { + .species = SPECIES_VILEPLUME, + .nickname = _(CONTEST_OPPONENT_NICKNAME_AUBREY), + .trainerName = _(CONTEST_OPPONENT_OTNAME_AUBREY), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, + .flags = CONTEST_AI_SET_1F, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_PETAL_DANCE, MOVE_SWEET_SCENT, MOVE_STUN_SPORE, MOVE_FLASH }, + .cool = 35, + .beauty = 200, + .cute = 150, + .smart = 130, + .tough = 40, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_NIGEL] = { + .species = SPECIES_DUSKULL, + .nickname = _(CONTEST_OPPONENT_NICKNAME_NIGEL), + .trainerName = _(CONTEST_OPPONENT_OTNAME_NIGEL), + .trainerGfxId = OBJ_EVENT_GFX_CAMPER, + .flags = CONTEST_AI_SET_16, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_DISABLE, MOVE_FUTURE_SIGHT, MOVE_NIGHT_SHADE, MOVE_PURSUIT }, + .cool = 25, + .beauty = 35, + .cute = 230, + .smart = 150, + .tough = 160, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_CAMILLE] = { + .species = SPECIES_XATU, + .nickname = _(CONTEST_OPPONENT_NICKNAME_CAMILLE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_CAMILLE), + .trainerGfxId = OBJ_EVENT_GFX_LASS, + .flags = CONTEST_AI_SET_20, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_PSYCHIC }, + .cool = 35, + .beauty = 35, + .cute = 150, + .smart = 130, + .tough = 170, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_DEON] = { + .species = SPECIES_SHARPEDO, + .nickname = _(CONTEST_OPPONENT_NICKNAME_DEON), + .trainerName = _(CONTEST_OPPONENT_OTNAME_DEON), + .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, + .flags = CONTEST_AI_SET_A, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_AGILITY, MOVE_SWAGGER, MOVE_TAUNT, MOVE_TAKE_DOWN }, + .cool = 140, + .beauty = 70, + .cute = 140, + .smart = 75, + .tough = 100, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_JANELLE] = { + .species = SPECIES_LUVDISC, + .nickname = _(CONTEST_OPPONENT_NICKNAME_JANELLE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_JANELLE), + .trainerGfxId = OBJ_EVENT_GFX_GIRL_2, + .flags = CONTEST_AI_SET_18, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_TAKE_DOWN, MOVE_CHARM }, + .cool = 50, + .beauty = 100, + .cute = 220, + .smart = 40, + .tough = 190, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_HEATH] = { + .species = SPECIES_HERACROSS, + .nickname = _(CONTEST_OPPONENT_NICKNAME_HEATH), + .trainerName = _(CONTEST_OPPONENT_OTNAME_HEATH), + .trainerGfxId = OBJ_EVENT_GFX_MAN_4, + .flags = CONTEST_AI_SET_19, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = { MOVE_STRENGTH, MOVE_ENDURE, MOVE_REVERSAL, MOVE_ROCK_TOMB }, + .cool = 170, + .beauty = 70, + .cute = 110, + .smart = 240, + .tough = 140, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_SASHA] = { + .species = SPECIES_ELECTRODE, + .nickname = _(CONTEST_OPPONENT_NICKNAME_SASHA), + .trainerName = _(CONTEST_OPPONENT_OTNAME_SASHA), + .trainerGfxId = OBJ_EVENT_GFX_LITTLE_GIRL_1, + .flags = CONTEST_AI_SET_1A, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = { MOVE_EXPLOSION, MOVE_LIGHT_SCREEN, MOVE_SWIFT, MOVE_FLASH }, + .cool = 200, + .beauty = 200, + .cute = 30, + .smart = 35, + .tough = 50, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_FRANKIE] = { + .species = SPECIES_PICHU, + .nickname = _(CONTEST_OPPONENT_NICKNAME_FRANKIE), + .trainerName = _(CONTEST_OPPONENT_OTNAME_FRANKIE), + .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, + .flags = CONTEST_AI_SET_21, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = { MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_REST, MOVE_TAIL_WHIP }, + .cool = 25, + .beauty = 150, + .cute = 180, + .smart = 115, + .tough = 120, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, + [CONTEST_OPPONENT_HELEN] = { + .species = SPECIES_WOBBUFFET, + .nickname = _(CONTEST_OPPONENT_NICKNAME_HELEN), + .trainerName = _(CONTEST_OPPONENT_OTNAME_HELEN), + .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, + .flags = CONTEST_AI_SET_F, + .whichRank = CONTEST_RANK_MASTER, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = { MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND }, + .cool = 60, + .beauty = 230, + .cute = 50, + .smart = 220, + .tough = 210, + .sheen = 255, + .personality = 0, + .otId = 0xFFFF + }, +}; diff --git a/src/data/graphics.c b/src/data/graphics.c index 0e98195cd..8c98739a2 100644 --- a/src/data/graphics.c +++ b/src/data/graphics.c @@ -355,11 +355,11 @@ const u8 gContestNumbers_UnusedGfx[] = INCBIN_U8("graphics/unused/numbers.4bpp.l const u8 gContestNumbers_UnusedPal[] = INCBIN_U8("graphics/unused/numbers.gbapal.lz"); const u8 unused_old_contest_2_4bpp[] = INCBIN_U8("graphics/unused/old_contest_2.4bpp.lz"); // the tilemap and palette for unused contest assets are used. however, these two files aren't old -const u8 gUnknown_08D17144[] = INCBIN_U8("graphics/unused/old_contest_2.gbapal.lz"); +const u8 gContestPalette[] = INCBIN_U8("graphics/unused/old_contest_2.gbapal.lz"); -const u8 gUnknown_08D1725C[] = INCBIN_U8("graphics/unused/old_contest_2.bin.lz"); +const u8 gContestGfx[] = INCBIN_U8("graphics/unused/old_contest_2.bin.lz"); -const u8 gUnknown_08D17424[] = INCBIN_U8("graphics/unknown/unknown_D17424.bin.lz"); +const u8 gContestBgmap[] = INCBIN_U8("graphics/unknown/unknown_D17424.bin.lz"); const u8 unused_unknown_D176CC[] = INCBIN_U8("graphics/unknown/unknown_D176CC.bin.lz"); const u8 unused_unknown_D177D8[] = INCBIN_U8("graphics/unknown/unknown_D177D8.bin.lz"); @@ -1183,12 +1183,12 @@ const u16 gMonIconPalettes[][16] = }; const u8 gUnknown_08E96738[] = INCBIN_U8("graphics/unknown/unknown_E96738.bin.lz"); -const u8 gUnknown_08E96888[] = INCBIN_U8("graphics/pokedex/pokedex_list_menu.bin.lz"); -const u8 gUnknown_08E96994[] = INCBIN_U8("graphics/pokedex/pokedex_listing_menu.bin.lz"); -const u8 gUnknown_08E96ACC[] = INCBIN_U8("graphics/pokedex/pokedex_navbar.bin.lz"); -const u8 gUnknown_08E96B58[] = INCBIN_U8("graphics/pokedex/pokedex_navbar_3.bin.lz"); +const u8 gPokedexStartMenuMain_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_list_menu.bin.lz"); +const u8 gPokedexStartMenuSearchResults_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_listing_menu.bin.lz"); +const u8 gPokedexScreenSelectBarMain_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_navbar.bin.lz"); +const u8 gPokedexScreenSelectBarSubmenu_Tilemap[] = INCBIN_U8("graphics/pokedex/pokedex_navbar_3.bin.lz"); const u8 gUnknown_08E96BD4[] = INCBIN_U8("graphics/pokedex/pokedex_detail_layout.bin.lz"); -const u8 gUnknown_08E96D2C[] = INCBIN_U8("graphics/unknown/unknown_E96D2C.bin.lz"); +const u8 gPokedexMenuSearch_Tilemap[] = INCBIN_U8("graphics/unknown/unknown_E96D2C.bin.lz"); const u8 gBagScreenLabels_Tilemap[] = INCBIN_U8("graphics/interface/bag_screen_labels.bin"); @@ -1422,7 +1422,7 @@ const u16 gTilesetPalettes_Shop[][16] = }; const u8 gTilesetTiles_Shop[] = INCBIN_U8("data/tilesets/secondary/shop/tiles.4bpp.lz"); -const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); -const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); -const u8 gUnknown_083FAE7C[] = INCBIN_U8("graphics/pokedex/cry_meter_map.bin"); +const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +const u8 sCryMeter_Tilemap[] = INCBIN_U8("graphics/pokedex/cry_meter_map.bin"); #endif // GERMAN diff --git a/src/data/pointillism_points.h b/src/data/pointillism_points.h new file mode 100644 index 000000000..708f5c02e --- /dev/null +++ b/src/data/pointillism_points.h @@ -0,0 +1,3210 @@ +#define GET_POINT_OFFSET_DL(bits) (((bits) >> 0) & 1) +#define GET_POINT_COLOR_TYPE(bits) (((bits) >> 1) & 3) +#define GET_POINT_DELTA(bits) (((bits) >> 3) & 7) + +#define PT(x, y, delta, colorType, offsetDownLeft) x, y, (delta << 3) | (colorType << 1) | offsetDownLeft + +static const u8 sPointillismPoints[][3] = { + PT( 0, 29, 3, 2, FALSE), + PT(14, 30, 3, 1, TRUE), + PT( 0, 1, 6, 1, FALSE), + PT(46, 30, 6, 3, TRUE), + PT(10, 34, 3, 3, TRUE), + PT( 5, 38, 5, 3, FALSE), + PT(18, 23, 3, 3, FALSE), + PT(26, 3, 2, 0, TRUE), + PT( 5, 17, 3, 0, FALSE), + PT( 5, 39, 5, 3, TRUE), + PT(26, 63, 2, 1, FALSE), + PT(34, 63, 2, 3, FALSE), + PT(43, 47, 5, 3, FALSE), + PT(17, 2, 5, 2, TRUE), + PT(35, 13, 5, 0, FALSE), + PT(23, 12, 3, 0, TRUE), + PT(47, 14, 2, 1, TRUE), + PT(48, 24, 4, 0, FALSE), + PT(45, 40, 4, 1, FALSE), + PT( 1, 3, 3, 0, TRUE), + PT(14, 42, 5, 1, TRUE), + PT(34, 21, 4, 2, TRUE), + PT(34, 10, 4, 3, FALSE), + PT(57, 6, 4, 1, TRUE), + PT(22, 7, 5, 3, TRUE), + PT(34, 58, 3, 1, TRUE), + PT(59, 54, 6, 2, TRUE), + PT(10, 43, 4, 2, FALSE), + PT(54, 9, 2, 1, FALSE), + PT(28, 47, 4, 1, TRUE), + PT(46, 56, 5, 2, FALSE), + PT( 5, 42, 4, 0, FALSE), + PT( 7, 20, 6, 1, FALSE), + PT(49, 8, 2, 3, TRUE), + PT(26, 36, 5, 2, TRUE), + PT(34, 10, 2, 3, FALSE), + PT(27, 38, 5, 1, TRUE), + PT(41, 22, 2, 0, TRUE), + PT(53, 8, 2, 2, FALSE), + PT(30, 8, 2, 2, FALSE), + PT( 5, 49, 2, 2, FALSE), + PT(56, 49, 2, 3, TRUE), + PT(52, 51, 2, 1, FALSE), + PT(17, 9, 3, 3, TRUE), + PT(40, 61, 6, 1, FALSE), + PT(53, 3, 3, 3, FALSE), + PT(60, 43, 5, 3, FALSE), + PT(16, 1, 2, 3, TRUE), + PT( 3, 62, 4, 1, FALSE), + PT(23, 24, 6, 2, FALSE), + PT( 8, 41, 3, 0, TRUE), + PT( 3, 36, 5, 0, FALSE), + PT(61, 51, 5, 3, TRUE), + PT(49, 36, 3, 0, TRUE), + PT(27, 24, 4, 3, FALSE), + PT( 7, 13, 4, 2, TRUE), + PT(45, 63, 2, 1, FALSE), + PT(47, 21, 4, 2, TRUE), + PT(41, 15, 2, 1, FALSE), + PT( 7, 44, 2, 1, FALSE), + PT(44, 11, 4, 3, FALSE), + PT(18, 26, 2, 3, FALSE), + PT( 0, 11, 5, 3, TRUE), + PT(22, 53, 4, 2, FALSE), + PT(31, 28, 4, 1, FALSE), + PT(41, 51, 4, 3, TRUE), + PT(59, 48, 2, 3, TRUE), + PT(17, 6, 6, 2, TRUE), + PT(62, 49, 5, 3, TRUE), + PT(17, 58, 4, 2, TRUE), + PT(42, 2, 3, 0, TRUE), + PT(51, 24, 6, 2, TRUE), + PT(42, 32, 4, 0, TRUE), + PT(46, 50, 3, 1, TRUE), + PT(59, 31, 4, 1, TRUE), + PT(57, 41, 5, 1, FALSE), + PT(46, 49, 5, 0, TRUE), + PT(42, 14, 5, 2, TRUE), + PT(45, 0, 3, 3, TRUE), + PT(56, 40, 3, 1, TRUE), + PT(20, 59, 5, 1, TRUE), + PT(46, 4, 4, 3, FALSE), + PT(54, 48, 2, 0, TRUE), + PT(59, 33, 5, 2, TRUE), + PT(43, 63, 3, 1, TRUE), + PT(32, 19, 6, 0, TRUE), + PT(51, 12, 6, 0, FALSE), + PT(34, 43, 5, 1, TRUE), + PT(22, 2, 3, 3, FALSE), + PT(28, 18, 3, 2, FALSE), + PT(15, 60, 6, 3, FALSE), + PT(56, 16, 5, 2, TRUE), + PT(24, 47, 5, 2, TRUE), + PT(53, 59, 2, 0, TRUE), + PT(55, 49, 2, 1, TRUE), + PT(19, 61, 5, 3, TRUE), + PT(30, 44, 6, 1, TRUE), + PT(46, 55, 2, 1, FALSE), + PT(60, 31, 6, 1, TRUE), + PT(50, 42, 4, 3, TRUE), + PT(13, 59, 3, 2, FALSE), + PT(53, 42, 4, 3, TRUE), + PT( 9, 61, 4, 3, TRUE), + PT(18, 11, 3, 0, FALSE), + PT(12, 21, 3, 2, TRUE), + PT(32, 1, 3, 2, FALSE), + PT( 8, 59, 3, 2, FALSE), + PT(18, 55, 6, 1, TRUE), + PT(21, 3, 5, 2, FALSE), + PT(42, 59, 6, 0, TRUE), + PT(15, 4, 6, 2, TRUE), + PT( 8, 23, 6, 1, TRUE), + PT(56, 61, 5, 1, FALSE), + PT(47, 53, 2, 3, FALSE), + PT(16, 53, 2, 3, FALSE), + PT(35, 19, 5, 2, FALSE), + PT(47, 6, 4, 0, FALSE), + PT(39, 58, 4, 2, FALSE), + PT( 0, 28, 5, 1, FALSE), + PT( 3, 57, 3, 2, TRUE), + PT(40, 7, 3, 1, FALSE), + PT(32, 10, 6, 3, TRUE), + PT( 7, 53, 5, 2, TRUE), + PT(21, 47, 5, 2, FALSE), + PT(16, 44, 4, 1, TRUE), + PT(63, 41, 2, 2, FALSE), + PT(42, 33, 6, 3, FALSE), + PT(52, 26, 5, 2, FALSE), + PT(28, 61, 6, 1, TRUE), + PT(56, 43, 4, 1, FALSE), + PT(53, 40, 3, 3, TRUE), + PT(61, 15, 3, 2, FALSE), + PT(30, 62, 3, 1, TRUE), + PT(12, 62, 3, 3, TRUE), + PT(43, 49, 5, 2, FALSE), + PT(50, 57, 2, 0, TRUE), + PT( 5, 9, 2, 0, TRUE), + PT( 4, 56, 5, 1, FALSE), + PT(50, 0, 2, 3, FALSE), + PT(19, 11, 6, 0, TRUE), + PT(52, 42, 2, 1, TRUE), + PT(44, 34, 4, 0, TRUE), + PT(57, 47, 2, 2, TRUE), + PT(55, 40, 3, 3, FALSE), + PT( 7, 59, 5, 2, TRUE), + PT(17, 3, 5, 0, FALSE), + PT(45, 48, 3, 3, FALSE), + PT(49, 17, 2, 0, TRUE), + PT(35, 1, 3, 3, FALSE), + PT(61, 49, 6, 2, FALSE), + PT(28, 2, 6, 2, FALSE), + PT(33, 14, 4, 2, TRUE), + PT(61, 7, 2, 3, TRUE), + PT(51, 21, 2, 0, FALSE), + PT(41, 50, 6, 1, FALSE), + PT(24, 31, 6, 0, FALSE), + PT(45, 59, 6, 0, FALSE), + PT(39, 62, 2, 3, FALSE), + PT(49, 21, 2, 1, FALSE), + PT(48, 37, 2, 3, TRUE), + PT(51, 6, 6, 2, FALSE), + PT( 0, 41, 3, 0, FALSE), + PT(60, 3, 2, 1, FALSE), + PT(44, 12, 2, 0, TRUE), + PT( 9, 48, 6, 0, FALSE), + PT(16, 14, 2, 0, TRUE), + PT(39, 22, 3, 1, TRUE), + PT(12, 59, 5, 3, FALSE), + PT(43, 51, 3, 3, FALSE), + PT(19, 45, 5, 2, TRUE), + PT(17, 36, 5, 0, TRUE), + PT(52, 62, 5, 1, TRUE), + PT(36, 30, 4, 0, TRUE), + PT(39, 26, 5, 2, TRUE), + PT( 4, 57, 2, 3, FALSE), + PT(62, 51, 4, 3, FALSE), + PT(27, 46, 4, 2, TRUE), + PT(12, 6, 3, 0, TRUE), + PT(37, 25, 3, 0, FALSE), + PT(29, 51, 6, 1, TRUE), + PT(29, 40, 5, 2, TRUE), + PT(28, 16, 5, 1, FALSE), + PT(31, 53, 3, 3, FALSE), + PT(52, 2, 2, 0, FALSE), + PT(43, 58, 2, 2, FALSE), + PT(13, 11, 2, 2, TRUE), + PT(12, 44, 2, 0, FALSE), + PT(55, 58, 3, 0, TRUE), + PT( 6, 19, 2, 3, TRUE), + PT(36, 16, 4, 2, TRUE), + PT(36, 4, 3, 3, FALSE), + PT( 0, 53, 6, 2, FALSE), + PT(58, 0, 6, 3, TRUE), + PT(60, 7, 3, 1, FALSE), + PT(43, 40, 6, 3, FALSE), + PT(52, 57, 5, 3, TRUE), + PT(40, 9, 3, 3, TRUE), + PT(56, 49, 6, 0, FALSE), + PT(22, 37, 6, 0, TRUE), + PT(24, 40, 6, 0, TRUE), + PT(24, 12, 4, 1, FALSE), + PT( 6, 57, 5, 2, TRUE), + PT(61, 32, 4, 2, FALSE), + PT(46, 39, 4, 0, TRUE), + PT(62, 24, 3, 0, FALSE), + PT(21, 60, 4, 2, FALSE), + PT( 6, 27, 4, 3, FALSE), + PT(21, 14, 4, 1, FALSE), + PT(10, 13, 3, 3, TRUE), + PT(24, 22, 6, 2, FALSE), + PT(16, 40, 4, 0, TRUE), + PT(32, 17, 2, 0, TRUE), + PT(54, 50, 2, 2, TRUE), + PT(59, 46, 4, 2, FALSE), + PT(31, 45, 2, 1, FALSE), + PT(54, 46, 4, 0, FALSE), + PT(11, 23, 6, 1, TRUE), + PT(38, 3, 3, 3, TRUE), + PT( 8, 25, 6, 0, TRUE), + PT(42, 24, 4, 2, TRUE), + PT(53, 45, 5, 2, TRUE), + PT(48, 56, 3, 0, FALSE), + PT(28, 37, 2, 2, FALSE), + PT(28, 34, 5, 0, FALSE), + PT( 8, 35, 4, 0, TRUE), + PT(38, 30, 6, 0, FALSE), + PT(25, 15, 2, 2, TRUE), + PT(16, 47, 4, 1, FALSE), + PT(18, 2, 4, 2, TRUE), + PT(60, 1, 3, 2, TRUE), + PT(14, 20, 3, 0, FALSE), + PT(13, 24, 2, 3, TRUE), + PT(34, 11, 6, 0, TRUE), + PT(19, 52, 4, 0, TRUE), + PT(15, 45, 6, 3, FALSE), + PT(57, 31, 4, 2, TRUE), + PT(24, 16, 3, 3, TRUE), + PT(45, 32, 4, 0, FALSE), + PT(25, 11, 6, 0, TRUE), + PT(51, 19, 2, 2, FALSE), + PT(46, 17, 4, 0, TRUE), + PT(45, 10, 6, 3, TRUE), + PT( 7, 21, 3, 1, TRUE), + PT(50, 4, 6, 1, FALSE), + PT( 6, 24, 3, 1, TRUE), + PT(19, 36, 2, 1, FALSE), + PT(54, 34, 2, 3, FALSE), + PT(29, 41, 3, 2, FALSE), + PT(53, 23, 4, 0, TRUE), + PT(54, 23, 5, 1, TRUE), + PT(53, 50, 3, 0, TRUE), + PT(42, 15, 5, 3, FALSE), + PT(16, 0, 6, 2, FALSE), + PT( 2, 14, 5, 0, FALSE), + PT(49, 50, 6, 1, FALSE), + PT(59, 5, 4, 0, FALSE), + PT(54, 38, 2, 1, FALSE), + PT(52, 6, 6, 2, FALSE), + PT(30, 49, 6, 1, FALSE), + PT(53, 5, 6, 2, FALSE), + PT(30, 19, 2, 2, TRUE), + PT(21, 20, 5, 2, FALSE), + PT(41, 28, 3, 0, FALSE), + PT(36, 36, 2, 1, FALSE), + PT(34, 41, 3, 0, FALSE), + PT(52, 54, 6, 0, FALSE), + PT(30, 1, 4, 1, TRUE), + PT(12, 60, 4, 2, FALSE), + PT(10, 61, 2, 3, FALSE), + PT(39, 30, 4, 1, TRUE), + PT(21, 2, 2, 1, FALSE), + PT(17, 25, 5, 1, FALSE), + PT(29, 49, 2, 2, TRUE), + PT( 3, 59, 5, 1, FALSE), + PT(33, 25, 5, 2, FALSE), + PT(10, 35, 2, 0, TRUE), + PT(37, 17, 3, 1, FALSE), + PT(26, 10, 6, 2, FALSE), + PT(59, 11, 6, 1, TRUE), + PT(33, 11, 6, 3, TRUE), + PT( 1, 49, 5, 0, FALSE), + PT(53, 29, 4, 3, TRUE), + PT(44, 48, 6, 0, TRUE), + PT(46, 57, 5, 2, TRUE), + PT(48, 5, 5, 2, FALSE), + PT(18, 42, 5, 1, TRUE), + PT(57, 34, 4, 0, FALSE), + PT(21, 52, 3, 2, FALSE), + PT(28, 1, 2, 2, TRUE), + PT(32, 22, 4, 1, FALSE), + PT(19, 4, 3, 0, FALSE), + PT(30, 19, 2, 0, FALSE), + PT(37, 51, 2, 2, TRUE), + PT(57, 3, 6, 0, TRUE), + PT(63, 54, 3, 0, FALSE), + PT(20, 35, 2, 0, FALSE), + PT(47, 30, 3, 3, TRUE), + PT(31, 23, 5, 2, FALSE), + PT( 2, 22, 6, 0, TRUE), + PT(32, 24, 6, 0, FALSE), + PT(46, 24, 6, 3, TRUE), + PT(59, 14, 6, 0, FALSE), + PT(16, 57, 4, 2, FALSE), + PT(38, 57, 3, 3, FALSE), + PT(48, 38, 5, 3, FALSE), + PT(18, 1, 2, 2, FALSE), + PT(55, 42, 5, 3, FALSE), + PT(33, 6, 3, 2, TRUE), + PT(42, 22, 6, 1, FALSE), + PT( 9, 56, 3, 2, FALSE), + PT( 7, 34, 2, 3, TRUE), + PT(59, 45, 2, 2, TRUE), + PT( 7, 30, 5, 3, FALSE), + PT(27, 46, 3, 2, TRUE), + PT( 4, 9, 6, 0, FALSE), + PT(48, 45, 6, 3, TRUE), + PT(45, 52, 4, 2, FALSE), + PT(24, 36, 4, 2, TRUE), + PT(14, 45, 4, 3, FALSE), + PT(35, 10, 2, 3, FALSE), + PT(18, 45, 2, 0, TRUE), + PT(33, 40, 5, 3, FALSE), + PT(15, 1, 4, 0, TRUE), + PT( 1, 49, 2, 1, FALSE), + PT(63, 27, 3, 3, FALSE), + PT(33, 37, 5, 1, TRUE), + PT(38, 24, 2, 1, TRUE), + PT(21, 45, 6, 2, FALSE), + PT(35, 33, 6, 3, FALSE), + PT(14, 46, 3, 2, FALSE), + PT(20, 34, 3, 2, FALSE), + PT(44, 11, 5, 0, FALSE), + PT(26, 24, 4, 0, TRUE), + PT(33, 7, 3, 1, FALSE), + PT(36, 38, 5, 0, TRUE), + PT(43, 10, 6, 2, FALSE), + PT(62, 39, 6, 1, TRUE), + PT(18, 52, 3, 1, TRUE), + PT(31, 1, 5, 1, FALSE), + PT(46, 6, 4, 1, TRUE), + PT(47, 31, 2, 2, FALSE), + PT(24, 6, 4, 3, FALSE), + PT(49, 31, 5, 1, TRUE), + PT(34, 38, 5, 3, FALSE), + PT(30, 21, 2, 3, FALSE), + PT(32, 34, 5, 0, FALSE), + PT(21, 55, 2, 1, FALSE), + PT(37, 4, 5, 2, FALSE), + PT(31, 4, 5, 3, FALSE), + PT(12, 19, 3, 0, FALSE), + PT( 7, 11, 6, 3, FALSE), + PT(29, 28, 5, 1, FALSE), + PT(48, 34, 3, 2, FALSE), + PT(46, 18, 5, 3, TRUE), + PT(43, 33, 3, 3, FALSE), + PT(22, 56, 6, 0, FALSE), + PT( 4, 2, 2, 3, FALSE), + PT( 5, 20, 4, 0, FALSE), + PT(56, 60, 6, 1, TRUE), + PT(33, 27, 5, 3, TRUE), + PT(20, 42, 4, 3, TRUE), + PT(56, 20, 3, 1, TRUE), + PT(43, 31, 5, 1, TRUE), + PT(41, 43, 4, 2, TRUE), + PT(39, 54, 4, 0, TRUE), + PT(17, 34, 3, 1, TRUE), + PT(41, 3, 3, 1, TRUE), + PT(24, 36, 5, 0, FALSE), + PT(33, 45, 6, 3, FALSE), + PT(60, 44, 4, 2, FALSE), + PT(51, 23, 3, 3, TRUE), + PT(42, 58, 4, 0, TRUE), + PT(10, 35, 6, 3, TRUE), + PT( 0, 11, 4, 0, TRUE), + PT(17, 56, 3, 0, TRUE), + PT(15, 14, 3, 2, FALSE), + PT(31, 15, 6, 3, TRUE), + PT(60, 16, 6, 3, TRUE), + PT(56, 49, 6, 2, TRUE), + PT( 7, 21, 5, 0, FALSE), + PT(30, 46, 3, 0, TRUE), + PT(38, 16, 6, 1, TRUE), + PT(61, 53, 5, 3, TRUE), + PT(58, 4, 6, 2, FALSE), + PT(13, 24, 3, 1, FALSE), + PT( 1, 45, 2, 2, TRUE), + PT(61, 26, 2, 3, TRUE), + PT(23, 63, 6, 1, FALSE), + PT(11, 33, 2, 0, TRUE), + PT(30, 38, 5, 1, TRUE), + PT(13, 25, 4, 2, FALSE), + PT(46, 4, 3, 1, TRUE), + PT(27, 51, 4, 0, FALSE), + PT(21, 33, 3, 2, TRUE), + PT(31, 4, 4, 0, TRUE), + PT(15, 18, 3, 3, TRUE), + PT(45, 42, 6, 1, FALSE), + PT( 3, 55, 3, 3, TRUE), + PT(53, 7, 4, 3, TRUE), + PT(36, 31, 6, 0, TRUE), + PT(47, 48, 2, 2, TRUE), + PT( 6, 0, 4, 2, FALSE), + PT(11, 34, 3, 1, FALSE), + PT(12, 59, 5, 0, TRUE), + PT(20, 26, 2, 3, TRUE), + PT(55, 32, 4, 2, TRUE), + PT(63, 38, 6, 3, TRUE), + PT(58, 62, 2, 0, FALSE), + PT(34, 4, 2, 0, TRUE), + PT(40, 18, 3, 2, FALSE), + PT( 3, 46, 5, 3, FALSE), + PT(14, 56, 5, 0, FALSE), + PT( 1, 41, 4, 1, FALSE), + PT(30, 51, 3, 0, TRUE), + PT( 6, 33, 4, 3, TRUE), + PT(51, 25, 3, 1, FALSE), + PT( 2, 5, 2, 3, TRUE), + PT(17, 17, 5, 2, FALSE), + PT(31, 38, 3, 3, FALSE), + PT(57, 31, 5, 0, FALSE), + PT(46, 47, 2, 1, FALSE), + PT(34, 52, 2, 1, TRUE), + PT(59, 38, 5, 3, TRUE), + PT(52, 0, 2, 2, FALSE), + PT(16, 49, 2, 0, TRUE), + PT(29, 45, 5, 1, FALSE), + PT( 8, 8, 6, 3, TRUE), + PT(21, 24, 6, 2, FALSE), + PT( 4, 43, 4, 2, FALSE), + PT(47, 30, 4, 3, TRUE), + PT(34, 42, 4, 2, FALSE), + PT( 7, 20, 4, 2, TRUE), + PT( 1, 39, 3, 0, TRUE), + PT(41, 10, 5, 0, TRUE), + PT(61, 28, 5, 3, TRUE), + PT(13, 31, 3, 2, FALSE), + PT(36, 61, 6, 1, FALSE), + PT(54, 29, 4, 2, FALSE), + PT(20, 33, 2, 3, FALSE), + PT(26, 13, 5, 0, TRUE), + PT(63, 43, 5, 1, FALSE), + PT(26, 62, 6, 2, TRUE), + PT(17, 40, 3, 0, FALSE), + PT(50, 5, 2, 2, TRUE), + PT(33, 46, 6, 2, FALSE), + PT(45, 20, 5, 1, FALSE), + PT(60, 8, 6, 3, TRUE), + PT(63, 52, 3, 3, FALSE), + PT(39, 36, 3, 2, FALSE), + PT(22, 22, 6, 1, TRUE), + PT(41, 59, 3, 0, TRUE), + PT(54, 47, 3, 2, FALSE), + PT( 3, 37, 5, 2, FALSE), + PT(11, 22, 6, 3, FALSE), + PT(28, 29, 3, 1, TRUE), + PT(44, 39, 3, 1, TRUE), + PT(11, 31, 5, 1, TRUE), + PT( 8, 16, 4, 3, TRUE), + PT(63, 37, 5, 3, TRUE), + PT(51, 19, 3, 3, TRUE), + PT( 4, 49, 6, 3, TRUE), + PT(14, 47, 2, 1, FALSE), + PT( 8, 35, 4, 0, FALSE), + PT(58, 26, 3, 3, FALSE), + PT(47, 11, 3, 3, TRUE), + PT(30, 32, 3, 0, TRUE), + PT(35, 59, 2, 2, FALSE), + PT(37, 0, 4, 3, TRUE), + PT(20, 4, 4, 2, TRUE), + PT(54, 26, 5, 1, TRUE), + PT(39, 33, 2, 2, TRUE), + PT(40, 19, 5, 2, FALSE), + PT(14, 60, 6, 2, TRUE), + PT(12, 45, 5, 1, TRUE), + PT(55, 22, 2, 2, TRUE), + PT(41, 21, 3, 2, TRUE), + PT(23, 52, 6, 3, FALSE), + PT( 9, 10, 6, 0, TRUE), + PT(55, 34, 5, 0, FALSE), + PT(23, 43, 6, 2, TRUE), + PT(20, 43, 2, 1, FALSE), + PT( 8, 19, 3, 3, TRUE), + PT(49, 19, 5, 0, FALSE), + PT( 6, 7, 6, 2, TRUE), + PT(35, 58, 5, 0, TRUE), + PT(15, 36, 5, 3, FALSE), + PT( 7, 53, 4, 3, FALSE), + PT(14, 18, 2, 2, TRUE), + PT(35, 51, 5, 2, FALSE), + PT(14, 33, 4, 3, FALSE), + PT(28, 18, 4, 2, TRUE), + PT(35, 29, 5, 3, TRUE), + PT( 4, 53, 6, 1, TRUE), + PT(22, 1, 4, 2, FALSE), + PT(61, 44, 5, 3, FALSE), + PT(53, 10, 4, 2, TRUE), + PT(17, 19, 4, 2, TRUE), + PT(27, 27, 2, 2, TRUE), + PT(21, 57, 2, 0, FALSE), + PT(11, 53, 4, 2, FALSE), + PT(58, 39, 6, 0, FALSE), + PT(46, 47, 2, 2, TRUE), + PT(16, 31, 6, 2, TRUE), + PT(27, 40, 6, 2, TRUE), + PT(38, 48, 6, 3, TRUE), + PT(52, 55, 5, 1, TRUE), + PT(15, 48, 5, 0, TRUE), + PT(46, 63, 5, 1, TRUE), + PT(56, 52, 5, 1, TRUE), + PT(43, 47, 4, 2, TRUE), + PT(13, 40, 5, 1, FALSE), + PT(51, 24, 2, 0, FALSE), + PT(33, 18, 2, 0, TRUE), + PT(31, 34, 6, 2, FALSE), + PT(17, 37, 4, 1, TRUE), + PT(33, 63, 2, 0, TRUE), + PT(38, 39, 4, 2, TRUE), + PT(40, 54, 2, 1, FALSE), + PT(21, 38, 6, 1, FALSE), + PT(17, 24, 4, 2, FALSE), + PT(50, 37, 6, 3, TRUE), + PT(39, 58, 6, 1, TRUE), + PT(53, 7, 3, 2, FALSE), + PT(26, 14, 5, 1, FALSE), + PT(30, 47, 3, 3, TRUE), + PT( 0, 46, 4, 0, TRUE), + PT(27, 60, 2, 2, FALSE), + PT(47, 58, 5, 3, TRUE), + PT(62, 56, 2, 2, TRUE), + PT(26, 19, 5, 3, TRUE), + PT(41, 13, 5, 3, TRUE), + PT(55, 23, 3, 0, FALSE), + PT(48, 28, 6, 2, TRUE), + PT(21, 52, 2, 2, FALSE), + PT(40, 17, 5, 2, FALSE), + PT(44, 37, 5, 1, FALSE), + PT(32, 63, 5, 0, FALSE), + PT(12, 52, 3, 1, TRUE), + PT(48, 46, 4, 2, TRUE), + PT(55, 28, 4, 2, FALSE), + PT(31, 37, 4, 3, FALSE), + PT(12, 25, 6, 2, FALSE), + PT(24, 16, 6, 2, TRUE), + PT(10, 19, 2, 0, TRUE), + PT(37, 19, 4, 0, FALSE), + PT(19, 25, 2, 0, TRUE), + PT(32, 40, 3, 2, TRUE), + PT(62, 48, 3, 1, TRUE), + PT(35, 36, 4, 0, TRUE), + PT(13, 35, 4, 1, TRUE), + PT(29, 40, 5, 3, FALSE), + PT(45, 18, 3, 3, TRUE), + PT(14, 46, 5, 1, TRUE), + PT(11, 49, 6, 1, FALSE), + PT(36, 60, 5, 2, FALSE), + PT(19, 60, 2, 1, FALSE), + PT(40, 22, 5, 1, FALSE), + PT( 5, 12, 6, 1, FALSE), + PT(57, 11, 6, 1, FALSE), + PT(33, 4, 2, 2, FALSE), + PT(16, 49, 6, 1, FALSE), + PT(18, 31, 4, 1, TRUE), + PT(57, 46, 5, 3, FALSE), + PT(34, 61, 4, 3, TRUE), + PT(12, 30, 3, 0, FALSE), + PT(37, 0, 2, 3, TRUE), + PT( 6, 49, 2, 2, FALSE), + PT(19, 33, 3, 1, FALSE), + PT(20, 32, 6, 2, TRUE), + PT(10, 59, 4, 2, TRUE), + PT(51, 8, 5, 0, FALSE), + PT(61, 2, 6, 1, TRUE), + PT(35, 0, 2, 1, TRUE), + PT(34, 33, 5, 0, FALSE), + PT(48, 20, 5, 3, FALSE), + PT(20, 50, 6, 3, FALSE), + PT(57, 35, 3, 3, FALSE), + PT(28, 17, 6, 0, FALSE), + PT(55, 22, 6, 0, FALSE), + PT(21, 49, 3, 3, TRUE), + PT(52, 40, 5, 2, FALSE), + PT(53, 5, 5, 0, TRUE), + PT(55, 51, 5, 1, FALSE), + PT(28, 23, 5, 3, FALSE), + PT(16, 6, 2, 3, FALSE), + PT(50, 31, 5, 3, TRUE), + PT( 0, 41, 3, 3, FALSE), + PT( 4, 1, 2, 3, FALSE), + PT(59, 35, 3, 3, FALSE), + PT(27, 52, 5, 1, FALSE), + PT(48, 17, 5, 1, TRUE), + PT( 3, 0, 3, 3, TRUE), + PT(29, 55, 3, 1, FALSE), + PT(58, 24, 4, 2, TRUE), + PT(28, 22, 5, 2, FALSE), + PT( 4, 63, 6, 1, TRUE), + PT(38, 35, 5, 2, TRUE), + PT(21, 44, 4, 3, TRUE), + PT( 2, 53, 4, 3, TRUE), + PT( 7, 53, 6, 1, TRUE), + PT(26, 12, 2, 0, FALSE), + PT(40, 38, 5, 2, FALSE), + PT(47, 54, 2, 3, FALSE), + PT(55, 11, 4, 3, TRUE), + PT(27, 61, 3, 0, FALSE), + PT(39, 31, 4, 0, FALSE), + PT(43, 42, 6, 1, TRUE), + PT(11, 15, 4, 0, FALSE), + PT(53, 60, 5, 3, TRUE), + PT(51, 33, 2, 2, TRUE), + PT(45, 38, 6, 2, FALSE), + PT(31, 26, 4, 0, TRUE), + PT(47, 44, 5, 1, FALSE), + PT(26, 50, 3, 1, FALSE), + PT(59, 63, 4, 0, TRUE), + PT(19, 63, 2, 1, TRUE), + PT(15, 36, 4, 1, FALSE), + PT(20, 27, 2, 0, FALSE), + PT(33, 6, 5, 0, FALSE), + PT(37, 52, 2, 0, FALSE), + PT(46, 14, 2, 2, FALSE), + PT(60, 62, 4, 2, TRUE), + PT(22, 6, 6, 0, FALSE), + PT(11, 4, 3, 3, TRUE), + PT(62, 2, 4, 2, FALSE), + PT(12, 23, 4, 2, TRUE), + PT(43, 60, 5, 2, TRUE), + PT(21, 54, 6, 1, TRUE), + PT(24, 35, 5, 1, FALSE), + PT(29, 16, 5, 1, FALSE), + PT(53, 23, 5, 0, FALSE), + PT( 0, 55, 4, 2, FALSE), + PT(10, 59, 2, 2, TRUE), + PT(29, 11, 3, 3, TRUE), + PT(60, 49, 4, 2, TRUE), + PT(29, 15, 3, 2, TRUE), + PT(32, 19, 6, 2, FALSE), + PT(17, 43, 5, 3, FALSE), + PT(35, 12, 5, 3, FALSE), + PT(36, 2, 2, 2, FALSE), + PT(49, 22, 3, 0, TRUE), + PT(14, 35, 6, 2, TRUE), + PT(26, 16, 2, 3, FALSE), + PT(20, 4, 3, 0, TRUE), + PT(45, 39, 6, 3, TRUE), + PT(51, 2, 6, 0, TRUE), + PT( 2, 4, 2, 3, FALSE), + PT(13, 34, 4, 2, TRUE), + PT(37, 0, 2, 3, FALSE), + PT(42, 63, 4, 3, FALSE), + PT(32, 12, 2, 1, FALSE), + PT(47, 46, 6, 2, TRUE), + PT(27, 13, 4, 1, FALSE), + PT(30, 1, 6, 2, FALSE), + PT( 5, 34, 4, 0, TRUE), + PT(52, 42, 6, 1, FALSE), + PT(11, 9, 3, 2, TRUE), + PT(63, 50, 5, 3, TRUE), + PT(61, 24, 5, 2, TRUE), + PT(11, 56, 6, 3, FALSE), + PT(57, 23, 5, 0, FALSE), + PT(52, 4, 4, 2, FALSE), + PT(54, 14, 5, 1, FALSE), + PT(56, 1, 2, 2, FALSE), + PT(60, 36, 4, 1, FALSE), + PT(33, 3, 3, 0, FALSE), + PT(50, 47, 2, 1, FALSE), + PT(41, 36, 6, 0, TRUE), + PT(10, 59, 2, 1, FALSE), + PT(26, 28, 4, 0, FALSE), + PT(48, 49, 3, 1, TRUE), + PT(26, 33, 2, 0, FALSE), + PT( 5, 41, 2, 0, FALSE), + PT(38, 45, 2, 1, TRUE), + PT(22, 12, 3, 2, TRUE), + PT(43, 6, 3, 1, TRUE), + PT( 6, 18, 2, 2, FALSE), + PT(56, 15, 6, 2, TRUE), + PT(35, 58, 5, 2, FALSE), + PT( 0, 25, 6, 1, TRUE), + PT(41, 20, 5, 2, TRUE), + PT(42, 33, 5, 0, TRUE), + PT(20, 49, 2, 2, FALSE), + PT(26, 6, 3, 3, FALSE), + PT(24, 27, 5, 0, FALSE), + PT(59, 22, 5, 0, TRUE), + PT(21, 30, 2, 1, FALSE), + PT(52, 10, 2, 2, FALSE), + PT(27, 5, 4, 3, TRUE), + PT(11, 1, 4, 3, FALSE), + PT(42, 34, 6, 2, TRUE), + PT(33, 32, 3, 0, FALSE), + PT(32, 55, 2, 3, TRUE), + PT(20, 31, 2, 0, TRUE), + PT(29, 17, 4, 2, TRUE), + PT(36, 43, 5, 3, TRUE), + PT( 7, 63, 3, 3, TRUE), + PT(44, 37, 4, 2, TRUE), + PT(42, 41, 3, 0, FALSE), + PT(17, 36, 5, 0, FALSE), + PT(49, 44, 5, 1, FALSE), + PT(57, 11, 4, 3, FALSE), + PT(40, 16, 4, 3, FALSE), + PT(34, 6, 2, 3, FALSE), + PT( 9, 44, 2, 1, TRUE), + PT(52, 25, 2, 2, TRUE), + PT(58, 18, 4, 0, TRUE), + PT(29, 56, 4, 1, TRUE), + PT(18, 37, 4, 2, FALSE), + PT(33, 48, 2, 1, FALSE), + PT(55, 26, 2, 1, FALSE), + PT(36, 59, 4, 2, TRUE), + PT(50, 21, 4, 1, TRUE), + PT(13, 26, 2, 0, FALSE), + PT(22, 46, 4, 3, FALSE), + PT(29, 20, 2, 3, FALSE), + PT(62, 46, 3, 3, TRUE), + PT(10, 22, 2, 0, FALSE), + PT(29, 48, 5, 1, TRUE), + PT( 4, 58, 3, 0, TRUE), + PT( 8, 45, 5, 3, FALSE), + PT(40, 30, 6, 1, TRUE), + PT(10, 18, 5, 3, FALSE), + PT(13, 3, 5, 3, TRUE), + PT(38, 58, 3, 3, FALSE), + PT(53, 59, 5, 1, FALSE), + PT( 3, 26, 3, 0, FALSE), + PT(63, 11, 4, 3, TRUE), + PT( 4, 5, 6, 2, FALSE), + PT(54, 11, 4, 3, TRUE), + PT(59, 23, 2, 0, TRUE), + PT(13, 39, 4, 3, FALSE), + PT(44, 31, 4, 0, FALSE), + PT(38, 16, 4, 0, FALSE), + PT(37, 35, 5, 2, TRUE), + PT(55, 9, 2, 1, TRUE), + PT(20, 23, 5, 2, TRUE), + PT(46, 61, 4, 1, TRUE), + PT(29, 26, 3, 3, TRUE), + PT(33, 51, 5, 3, FALSE), + PT(40, 23, 2, 1, TRUE), + PT(38, 60, 6, 3, FALSE), + PT(20, 26, 6, 1, TRUE), + PT(50, 32, 5, 1, TRUE), + PT(25, 62, 4, 0, FALSE), + PT(12, 2, 5, 2, TRUE), + PT(60, 60, 5, 1, FALSE), + PT(48, 48, 5, 0, FALSE), + PT(37, 63, 3, 3, FALSE), + PT( 3, 23, 3, 3, FALSE), + PT(53, 17, 3, 2, FALSE), + PT(27, 20, 5, 1, FALSE), + PT(40, 58, 4, 1, TRUE), + PT(14, 31, 2, 1, FALSE), + PT(54, 33, 4, 0, FALSE), + PT( 7, 59, 2, 0, FALSE), + PT(35, 25, 6, 2, FALSE), + PT(13, 46, 3, 0, FALSE), + PT(63, 32, 4, 2, TRUE), + PT(62, 59, 2, 2, TRUE), + PT(11, 46, 2, 1, FALSE), + PT(55, 11, 4, 1, TRUE), + PT(61, 50, 3, 3, TRUE), + PT(22, 3, 4, 3, TRUE), + PT(20, 12, 4, 0, TRUE), + PT(24, 3, 6, 0, FALSE), + PT(62, 33, 2, 1, TRUE), + PT(15, 0, 6, 1, FALSE), + PT(63, 35, 2, 3, FALSE), + PT(14, 49, 3, 2, TRUE), + PT(24, 28, 3, 2, TRUE), + PT(48, 14, 3, 3, FALSE), + PT(33, 32, 4, 1, TRUE), + PT(63, 12, 3, 3, FALSE), + PT(20, 51, 4, 1, FALSE), + PT(34, 33, 2, 2, TRUE), + PT(54, 5, 3, 3, FALSE), + PT(29, 49, 2, 2, FALSE), + PT(32, 17, 6, 3, TRUE), + PT(13, 51, 3, 0, TRUE), + PT(37, 5, 6, 3, FALSE), + PT(30, 49, 4, 0, FALSE), + PT(53, 58, 5, 3, TRUE), + PT(50, 47, 6, 0, FALSE), + PT(20, 35, 5, 2, TRUE), + PT(53, 30, 5, 0, TRUE), + PT( 5, 5, 3, 1, TRUE), + PT( 9, 31, 4, 3, FALSE), + PT(47, 11, 2, 2, TRUE), + PT(21, 17, 2, 1, TRUE), + PT(41, 27, 3, 0, FALSE), + PT(28, 19, 6, 2, TRUE), + PT(52, 49, 4, 1, TRUE), + PT(39, 63, 5, 3, TRUE), + PT( 9, 48, 3, 0, TRUE), + PT(35, 18, 6, 2, FALSE), + PT( 2, 42, 4, 0, TRUE), + PT( 9, 60, 3, 2, TRUE), + PT(12, 2, 2, 0, FALSE), + PT(34, 5, 2, 3, TRUE), + PT(34, 8, 3, 1, TRUE), + PT(10, 15, 2, 2, TRUE), + PT( 2, 17, 2, 1, TRUE), + PT( 1, 33, 4, 1, FALSE), + PT(22, 57, 6, 1, TRUE), + PT(36, 56, 6, 2, FALSE), + PT(15, 30, 5, 1, TRUE), + PT(43, 21, 2, 2, TRUE), + PT(32, 34, 5, 3, FALSE), + PT(58, 63, 6, 0, TRUE), + PT(26, 39, 5, 1, TRUE), + PT(41, 52, 2, 2, FALSE), + PT(22, 57, 5, 3, TRUE), + PT(19, 62, 2, 3, FALSE), + PT(54, 33, 6, 0, FALSE), + PT( 0, 36, 5, 1, TRUE), + PT(36, 33, 6, 0, FALSE), + PT(21, 49, 2, 1, TRUE), + PT(16, 55, 4, 2, FALSE), + PT( 8, 7, 4, 1, TRUE), + PT(33, 9, 4, 2, TRUE), + PT( 5, 60, 6, 1, FALSE), + PT(25, 3, 4, 2, TRUE), + PT(15, 41, 5, 1, TRUE), + PT(22, 7, 2, 1, TRUE), + PT(62, 61, 4, 2, TRUE), + PT(54, 11, 5, 0, FALSE), + PT(46, 43, 2, 3, FALSE), + PT(12, 49, 2, 0, TRUE), + PT(48, 19, 5, 2, TRUE), + PT(38, 62, 6, 3, TRUE), + PT(41, 47, 5, 3, FALSE), + PT(21, 61, 2, 3, TRUE), + PT(28, 46, 4, 0, TRUE), + PT(51, 47, 2, 0, FALSE), + PT(13, 5, 3, 2, TRUE), + PT(28, 26, 2, 1, FALSE), + PT(14, 24, 6, 3, TRUE), + PT(27, 17, 2, 2, FALSE), + PT( 6, 20, 4, 0, TRUE), + PT(49, 14, 4, 3, TRUE), + PT(26, 3, 2, 0, FALSE), + PT( 0, 52, 6, 0, TRUE), + PT(63, 11, 3, 2, TRUE), + PT(15, 18, 3, 3, TRUE), + PT(26, 21, 2, 0, FALSE), + PT(15, 0, 4, 2, FALSE), + PT(62, 10, 5, 1, FALSE), + PT(48, 43, 4, 2, FALSE), + PT(38, 49, 2, 0, FALSE), + PT(45, 47, 5, 3, TRUE), + PT(63, 12, 2, 1, TRUE), + PT(18, 11, 2, 3, FALSE), + PT(21, 7, 3, 3, TRUE), + PT(40, 16, 6, 1, FALSE), + PT(15, 23, 2, 2, TRUE), + PT(11, 39, 6, 1, TRUE), + PT(52, 29, 2, 0, FALSE), + PT(28, 58, 2, 1, FALSE), + PT(44, 39, 6, 3, TRUE), + PT(10, 26, 6, 1, FALSE), + PT( 5, 31, 4, 0, TRUE), + PT(36, 13, 3, 3, TRUE), + PT(28, 23, 4, 2, FALSE), + PT(47, 59, 6, 1, FALSE), + PT(59, 37, 2, 0, FALSE), + PT( 3, 47, 4, 0, TRUE), + PT(12, 16, 4, 1, TRUE), + PT(14, 58, 5, 2, FALSE), + PT(51, 3, 5, 2, FALSE), + PT(18, 6, 3, 2, FALSE), + PT(42, 55, 6, 0, FALSE), + PT(63, 1, 3, 3, FALSE), + PT(53, 22, 6, 3, TRUE), + PT(44, 50, 6, 2, TRUE), + PT( 5, 17, 4, 1, FALSE), + PT(41, 9, 4, 0, FALSE), + PT(43, 13, 3, 3, TRUE), + PT(24, 13, 4, 0, FALSE), + PT(35, 57, 2, 3, FALSE), + PT(15, 58, 3, 0, FALSE), + PT(33, 53, 5, 1, TRUE), + PT(54, 38, 5, 1, TRUE), + PT(35, 5, 5, 3, TRUE), + PT(27, 8, 2, 3, TRUE), + PT(62, 9, 2, 3, FALSE), + PT(45, 58, 6, 3, TRUE), + PT(21, 53, 6, 2, TRUE), + PT(41, 10, 2, 1, FALSE), + PT( 2, 57, 3, 3, TRUE), + PT(20, 52, 6, 1, TRUE), + PT(23, 29, 3, 0, FALSE), + PT(22, 29, 3, 1, FALSE), + PT( 1, 57, 4, 1, FALSE), + PT(30, 39, 6, 3, FALSE), + PT(50, 20, 4, 3, FALSE), + PT(10, 57, 6, 3, FALSE), + PT(31, 13, 3, 3, FALSE), + PT(11, 10, 3, 0, TRUE), + PT(53, 29, 6, 2, FALSE), + PT( 3, 18, 2, 3, FALSE), + PT(12, 19, 5, 3, FALSE), + PT(12, 52, 3, 3, FALSE), + PT(16, 20, 3, 3, FALSE), + PT(35, 50, 4, 3, TRUE), + PT( 2, 16, 5, 0, TRUE), + PT(53, 24, 6, 1, TRUE), + PT(51, 29, 3, 1, FALSE), + PT(60, 21, 4, 1, TRUE), + PT(62, 63, 4, 1, FALSE), + PT(42, 2, 5, 2, FALSE), + PT(40, 10, 5, 3, TRUE), + PT(26, 6, 6, 2, TRUE), + PT(60, 23, 5, 1, TRUE), + PT( 3, 18, 2, 3, TRUE), + PT(47, 10, 4, 3, FALSE), + PT(18, 56, 2, 0, TRUE), + PT(54, 27, 4, 1, TRUE), + PT( 1, 57, 6, 2, TRUE), + PT(25, 25, 2, 3, TRUE), + PT( 9, 40, 4, 1, FALSE), + PT(30, 39, 5, 2, FALSE), + PT(53, 51, 5, 2, FALSE), + PT(39, 37, 6, 0, TRUE), + PT( 6, 49, 5, 2, TRUE), + PT(26, 57, 5, 0, FALSE), + PT(45, 4, 3, 3, FALSE), + PT(36, 62, 3, 2, FALSE), + PT(60, 48, 3, 1, TRUE), + PT(63, 62, 6, 3, TRUE), + PT(34, 54, 2, 0, TRUE), + PT( 0, 1, 3, 2, FALSE), + PT(18, 26, 2, 0, FALSE), + PT(18, 30, 5, 2, FALSE), + PT(31, 18, 5, 1, FALSE), + PT(47, 6, 3, 0, TRUE), + PT(53, 26, 3, 0, FALSE), + PT(59, 9, 6, 3, FALSE), + PT(52, 29, 2, 1, TRUE), + PT( 2, 7, 2, 0, FALSE), + PT(32, 47, 3, 2, TRUE), + PT(11, 3, 6, 1, TRUE), + PT(28, 22, 6, 0, TRUE), + PT( 5, 19, 3, 1, TRUE), + PT(41, 6, 2, 1, TRUE), + PT(48, 45, 6, 3, FALSE), + PT(42, 45, 5, 2, FALSE), + PT(25, 52, 3, 2, FALSE), + PT(15, 21, 2, 1, FALSE), + PT(54, 21, 5, 2, FALSE), + PT(58, 6, 3, 2, FALSE), + PT(18, 29, 4, 3, FALSE), + PT( 3, 56, 3, 2, TRUE), + PT( 1, 1, 5, 2, TRUE), + PT(23, 46, 2, 0, FALSE), + PT(20, 23, 3, 2, FALSE), + PT(52, 15, 5, 0, FALSE), + PT( 9, 55, 3, 1, TRUE), + PT(40, 29, 4, 3, FALSE), + PT(41, 45, 6, 3, FALSE), + PT(30, 23, 5, 0, FALSE), + PT(21, 15, 3, 2, FALSE), + PT(32, 45, 2, 0, FALSE), + PT(39, 22, 5, 3, FALSE), + PT(20, 9, 2, 1, FALSE), + PT(59, 61, 4, 0, TRUE), + PT(37, 26, 5, 2, FALSE), + PT( 0, 34, 6, 3, FALSE), + PT(13, 48, 2, 0, FALSE), + PT(23, 25, 3, 1, TRUE), + PT( 0, 59, 4, 0, TRUE), + PT(42, 40, 6, 2, FALSE), + PT(45, 15, 2, 3, FALSE), + PT(10, 48, 5, 0, FALSE), + PT( 6, 0, 4, 2, TRUE), + PT(49, 46, 5, 1, FALSE), + PT(20, 51, 5, 0, FALSE), + PT(54, 16, 5, 3, FALSE), + PT( 5, 46, 3, 0, TRUE), + PT(25, 26, 2, 2, TRUE), + PT(44, 20, 2, 3, TRUE), + PT(55, 15, 2, 1, TRUE), + PT(50, 23, 3, 1, TRUE), + PT(57, 24, 6, 1, FALSE), + PT(46, 50, 3, 3, FALSE), + PT(36, 29, 6, 0, TRUE), + PT(18, 29, 5, 1, TRUE), + PT(20, 12, 4, 3, TRUE), + PT(54, 46, 6, 1, FALSE), + PT( 6, 10, 3, 1, FALSE), + PT(40, 40, 4, 0, FALSE), + PT(58, 58, 2, 3, TRUE), + PT( 8, 39, 6, 3, FALSE), + PT(24, 26, 2, 0, FALSE), + PT(30, 38, 3, 1, TRUE), + PT(31, 51, 3, 3, TRUE), + PT(33, 23, 5, 3, TRUE), + PT( 1, 8, 4, 0, FALSE), + PT(53, 3, 3, 0, TRUE), + PT(59, 2, 4, 0, FALSE), + PT( 2, 45, 4, 1, TRUE), + PT(14, 23, 6, 1, FALSE), + PT(49, 41, 2, 0, TRUE), + PT(34, 23, 4, 1, FALSE), + PT(58, 44, 4, 1, TRUE), + PT(52, 32, 3, 0, FALSE), + PT( 0, 58, 4, 1, FALSE), + PT(37, 51, 4, 0, TRUE), + PT(51, 4, 4, 3, TRUE), + PT( 4, 24, 6, 1, FALSE), + PT(44, 12, 5, 3, TRUE), + PT(40, 20, 5, 2, FALSE), + PT(63, 48, 5, 1, TRUE), + PT(48, 33, 3, 2, TRUE), + PT( 1, 37, 6, 1, FALSE), + PT( 5, 35, 6, 2, FALSE), + PT(36, 16, 6, 0, FALSE), + PT(61, 20, 3, 1, TRUE), + PT(63, 56, 5, 3, TRUE), + PT(34, 27, 6, 1, FALSE), + PT(37, 7, 6, 3, TRUE), + PT(10, 12, 3, 2, TRUE), + PT( 3, 30, 3, 1, FALSE), + PT(15, 60, 2, 1, FALSE), + PT(17, 24, 3, 2, TRUE), + PT( 0, 53, 5, 3, TRUE), + PT(50, 24, 2, 2, FALSE), + PT(35, 48, 3, 1, TRUE), + PT(17, 61, 2, 1, FALSE), + PT(26, 22, 6, 2, TRUE), + PT(40, 5, 4, 2, FALSE), + PT(23, 61, 6, 3, TRUE), + PT(46, 9, 5, 3, FALSE), + PT(24, 29, 2, 3, TRUE), + PT(32, 31, 3, 0, FALSE), + PT(35, 44, 5, 3, TRUE), + PT(32, 63, 2, 3, FALSE), + PT(63, 41, 5, 3, FALSE), + PT(35, 59, 5, 0, TRUE), + PT(24, 57, 2, 1, TRUE), + PT(30, 50, 6, 2, TRUE), + PT(20, 29, 5, 1, FALSE), + PT(53, 1, 3, 2, TRUE), + PT(62, 59, 3, 3, FALSE), + PT(34, 30, 2, 3, FALSE), + PT(24, 34, 2, 1, FALSE), + PT(62, 41, 6, 1, TRUE), + PT(47, 20, 3, 0, TRUE), + PT(59, 7, 2, 2, TRUE), + PT( 6, 61, 5, 0, TRUE), + PT(53, 55, 4, 1, TRUE), + PT(52, 29, 5, 2, TRUE), + PT(24, 18, 3, 1, TRUE), + PT(11, 19, 4, 2, FALSE), + PT(19, 56, 3, 2, FALSE), + PT(31, 11, 3, 1, TRUE), + PT(19, 33, 3, 2, FALSE), + PT( 6, 57, 6, 1, FALSE), + PT(55, 61, 4, 3, FALSE), + PT(41, 38, 2, 2, TRUE), + PT(60, 51, 4, 3, TRUE), + PT( 0, 1, 5, 3, FALSE), + PT(21, 24, 6, 0, TRUE), + PT(13, 44, 2, 1, TRUE), + PT(39, 59, 4, 0, FALSE), + PT(45, 1, 4, 3, FALSE), + PT(35, 21, 6, 0, FALSE), + PT(36, 0, 2, 3, TRUE), + PT(55, 63, 6, 1, TRUE), + PT(37, 36, 6, 0, TRUE), + PT( 6, 59, 6, 3, TRUE), + PT( 3, 24, 3, 1, FALSE), + PT(44, 52, 2, 2, FALSE), + PT(29, 54, 3, 0, FALSE), + PT(58, 4, 4, 1, TRUE), + PT(18, 38, 2, 2, TRUE), + PT(43, 25, 3, 1, FALSE), + PT(41, 44, 6, 3, FALSE), + PT( 1, 25, 3, 2, TRUE), + PT(47, 6, 5, 1, TRUE), + PT(12, 18, 4, 3, FALSE), + PT(54, 50, 3, 2, TRUE), + PT(13, 18, 5, 0, FALSE), + PT( 3, 40, 2, 1, TRUE), + PT(41, 6, 2, 3, TRUE), + PT( 3, 56, 4, 0, TRUE), + PT(48, 44, 2, 0, FALSE), + PT(34, 0, 5, 0, FALSE), + PT(36, 59, 3, 2, FALSE), + PT(32, 62, 2, 1, TRUE), + PT( 2, 12, 3, 0, TRUE), + PT(41, 44, 3, 1, FALSE), + PT(57, 48, 4, 1, FALSE), + PT(42, 31, 4, 1, FALSE), + PT(20, 52, 5, 2, FALSE), + PT(20, 37, 3, 1, TRUE), + PT( 6, 59, 2, 2, TRUE), + PT( 6, 28, 2, 1, TRUE), + PT(21, 3, 3, 0, FALSE), + PT(30, 42, 3, 1, TRUE), + PT(23, 37, 5, 3, TRUE), + PT(28, 41, 5, 3, FALSE), + PT( 2, 50, 3, 3, FALSE), + PT(29, 40, 6, 2, TRUE), + PT(54, 3, 6, 2, FALSE), + PT(22, 61, 5, 1, FALSE), + PT(18, 13, 2, 1, TRUE), + PT(29, 45, 4, 0, TRUE), + PT(50, 23, 5, 3, FALSE), + PT(26, 21, 4, 3, FALSE), + PT(34, 47, 2, 2, TRUE), + PT(60, 14, 4, 0, FALSE), + PT(47, 39, 2, 1, TRUE), + PT( 4, 9, 6, 1, FALSE), + PT(30, 1, 6, 2, FALSE), + PT( 6, 22, 3, 3, FALSE), + PT(46, 27, 3, 2, FALSE), + PT(40, 19, 5, 1, FALSE), + PT(48, 52, 2, 1, FALSE), + PT(18, 50, 3, 0, FALSE), + PT(29, 29, 6, 2, TRUE), + PT( 7, 28, 2, 3, FALSE), + PT(45, 61, 6, 2, TRUE), + PT(28, 27, 4, 2, FALSE), + PT(33, 45, 3, 3, FALSE), + PT(16, 9, 2, 2, FALSE), + PT(61, 17, 2, 1, FALSE), + PT(37, 2, 4, 3, FALSE), + PT(35, 2, 3, 0, TRUE), + PT(25, 5, 2, 2, FALSE), + PT(11, 33, 3, 1, FALSE), + PT( 9, 2, 5, 2, FALSE), + PT(24, 40, 5, 2, TRUE), + PT(30, 16, 2, 1, FALSE), + PT(46, 24, 5, 3, FALSE), + PT(31, 2, 5, 2, FALSE), + PT(20, 23, 4, 2, FALSE), + PT(57, 8, 6, 1, FALSE), + PT(22, 20, 4, 1, FALSE), + PT(22, 40, 4, 0, TRUE), + PT(17, 16, 5, 2, FALSE), + PT(35, 54, 5, 1, TRUE), + PT(57, 33, 4, 3, FALSE), + PT(14, 6, 5, 2, TRUE), + PT(60, 62, 4, 3, FALSE), + PT(42, 27, 3, 3, TRUE), + PT( 0, 60, 6, 1, TRUE), + PT(53, 63, 2, 2, FALSE), + PT( 0, 11, 2, 0, FALSE), + PT(52, 60, 2, 3, TRUE), + PT(45, 7, 3, 3, TRUE), + PT(36, 57, 4, 3, TRUE), + PT(22, 0, 3, 2, TRUE), + PT(51, 43, 3, 3, FALSE), + PT(15, 8, 6, 0, TRUE), + PT(58, 9, 2, 1, TRUE), + PT(12, 33, 3, 2, FALSE), + PT(42, 23, 6, 2, FALSE), + PT(41, 39, 2, 0, FALSE), + PT(55, 27, 3, 0, FALSE), + PT(21, 8, 5, 3, TRUE), + PT(31, 22, 2, 1, FALSE), + PT(31, 40, 6, 2, FALSE), + PT(28, 32, 4, 1, FALSE), + PT(18, 1, 2, 1, FALSE), + PT(33, 49, 2, 0, FALSE), + PT(34, 38, 3, 3, FALSE), + PT( 1, 61, 2, 0, TRUE), + PT(30, 39, 4, 2, TRUE), + PT(61, 48, 4, 2, FALSE), + PT(29, 17, 4, 1, FALSE), + PT(54, 48, 2, 3, FALSE), + PT(31, 62, 5, 1, FALSE), + PT(60, 39, 3, 1, TRUE), + PT(31, 41, 2, 0, FALSE), + PT(30, 5, 5, 1, FALSE), + PT(10, 16, 2, 2, FALSE), + PT(31, 0, 5, 3, FALSE), + PT(11, 59, 3, 0, FALSE), + PT(10, 57, 6, 0, FALSE), + PT(55, 11, 3, 3, TRUE), + PT(29, 10, 5, 0, TRUE), + PT(62, 28, 6, 1, TRUE), + PT(19, 46, 5, 0, FALSE), + PT(39, 27, 3, 3, FALSE), + PT(29, 2, 3, 2, FALSE), + PT( 1, 37, 2, 2, FALSE), + PT(58, 16, 3, 2, FALSE), + PT(18, 5, 5, 1, FALSE), + PT(48, 32, 4, 3, FALSE), + PT(47, 46, 5, 3, FALSE), + PT( 3, 7, 4, 2, FALSE), + PT(54, 4, 5, 1, TRUE), + PT(17, 37, 5, 2, TRUE), + PT(40, 14, 5, 3, FALSE), + PT(15, 29, 2, 2, TRUE), + PT(28, 40, 6, 0, FALSE), + PT(31, 35, 4, 3, FALSE), + PT(54, 18, 6, 3, TRUE), + PT(58, 49, 2, 0, FALSE), + PT(44, 44, 5, 3, TRUE), + PT(26, 13, 2, 2, TRUE), + PT(63, 60, 6, 1, FALSE), + PT(53, 28, 2, 3, FALSE), + PT(51, 22, 5, 0, FALSE), + PT(29, 63, 4, 0, TRUE), + PT(44, 62, 5, 1, TRUE), + PT(36, 35, 5, 3, TRUE), + PT(50, 21, 5, 1, FALSE), + PT(27, 16, 6, 2, TRUE), + PT(24, 55, 2, 0, FALSE), + PT(59, 30, 2, 0, TRUE), + PT(43, 22, 4, 2, FALSE), + PT(29, 22, 4, 3, FALSE), + PT(60, 45, 2, 0, TRUE), + PT(21, 40, 5, 0, FALSE), + PT(39, 39, 4, 3, TRUE), + PT(59, 58, 2, 3, FALSE), + PT(26, 12, 3, 1, FALSE), + PT(21, 8, 4, 2, TRUE), + PT(11, 16, 4, 1, FALSE), + PT(26, 62, 2, 3, TRUE), + PT(40, 31, 3, 3, FALSE), + PT( 1, 30, 3, 3, FALSE), + PT(28, 47, 2, 0, FALSE), + PT(37, 11, 6, 2, FALSE), + PT(62, 12, 3, 1, FALSE), + PT(27, 16, 5, 1, FALSE), + PT(15, 20, 2, 3, TRUE), + PT(15, 63, 2, 3, TRUE), + PT( 3, 21, 3, 3, TRUE), + PT( 2, 54, 2, 3, TRUE), + PT(21, 29, 3, 0, FALSE), + PT( 8, 54, 2, 0, FALSE), + PT(20, 13, 5, 1, TRUE), + PT(10, 5, 3, 2, TRUE), + PT(38, 18, 3, 3, FALSE), + PT(62, 24, 3, 0, TRUE), + PT(54, 24, 6, 3, TRUE), + PT(23, 57, 5, 3, FALSE), + PT(13, 4, 3, 0, TRUE), + PT(22, 34, 2, 2, TRUE), + PT(62, 38, 3, 3, TRUE), + PT( 0, 6, 2, 3, TRUE), + PT(51, 34, 3, 2, TRUE), + PT(43, 57, 5, 1, TRUE), + PT(62, 49, 3, 2, FALSE), + PT(34, 63, 2, 1, TRUE), + PT(48, 28, 6, 0, TRUE), + PT( 7, 43, 2, 2, FALSE), + PT(50, 53, 3, 3, FALSE), + PT( 2, 7, 4, 0, FALSE), + PT(15, 59, 2, 0, TRUE), + PT(32, 7, 2, 1, FALSE), + PT(42, 48, 3, 2, TRUE), + PT(40, 56, 6, 3, FALSE), + PT(32, 1, 2, 3, TRUE), + PT(21, 32, 4, 0, TRUE), + PT(58, 27, 3, 3, FALSE), + PT(56, 18, 4, 2, FALSE), + PT( 3, 62, 3, 3, TRUE), + PT(41, 29, 2, 1, TRUE), + PT(32, 39, 3, 0, TRUE), + PT(18, 37, 4, 0, FALSE), + PT(50, 51, 5, 1, TRUE), + PT(63, 5, 6, 0, TRUE), + PT(53, 60, 5, 2, TRUE), + PT(45, 2, 5, 3, FALSE), + PT(16, 42, 2, 3, FALSE), + PT(23, 8, 6, 0, TRUE), + PT(23, 46, 5, 1, TRUE), + PT(48, 30, 2, 2, TRUE), + PT(49, 21, 4, 3, FALSE), + PT( 8, 16, 6, 1, TRUE), + PT(21, 1, 4, 3, TRUE), + PT(18, 7, 5, 3, TRUE), + PT(41, 39, 6, 2, FALSE), + PT(63, 8, 6, 0, TRUE), + PT(28, 32, 3, 1, FALSE), + PT(51, 12, 2, 1, TRUE), + PT(24, 49, 4, 2, FALSE), + PT(55, 45, 5, 3, FALSE), + PT(33, 24, 4, 2, FALSE), + PT(58, 39, 6, 0, TRUE), + PT(53, 62, 6, 0, FALSE), + PT(58, 20, 6, 1, TRUE), + PT(15, 26, 5, 2, TRUE), + PT(48, 46, 2, 0, TRUE), + PT(26, 49, 3, 2, TRUE), + PT(23, 60, 3, 0, FALSE), + PT(51, 49, 4, 1, TRUE), + PT(29, 57, 5, 2, TRUE), + PT(16, 29, 5, 3, TRUE), + PT(36, 21, 3, 2, FALSE), + PT(37, 1, 5, 1, TRUE), + PT(34, 22, 5, 3, FALSE), + PT(27, 37, 6, 2, TRUE), + PT(55, 16, 4, 3, FALSE), + PT(57, 1, 6, 3, FALSE), + PT(23, 43, 2, 2, FALSE), + PT( 9, 22, 2, 3, TRUE), + PT(32, 40, 4, 1, TRUE), + PT(38, 58, 4, 3, FALSE), + PT(39, 42, 4, 2, FALSE), + PT(54, 2, 5, 2, FALSE), + PT(41, 48, 6, 2, TRUE), + PT(54, 1, 3, 3, TRUE), + PT(40, 59, 3, 2, TRUE), + PT(35, 30, 5, 2, TRUE), + PT(17, 30, 5, 2, FALSE), + PT(47, 50, 3, 0, TRUE), + PT(63, 38, 6, 0, TRUE), + PT(56, 30, 2, 3, TRUE), + PT( 5, 24, 5, 3, FALSE), + PT( 0, 46, 2, 1, FALSE), + PT(52, 63, 6, 2, FALSE), + PT(22, 16, 5, 0, TRUE), + PT(32, 61, 6, 3, FALSE), + PT(47, 22, 4, 2, TRUE), + PT(18, 23, 2, 0, FALSE), + PT(33, 55, 6, 2, TRUE), + PT(37, 55, 5, 2, TRUE), + PT( 1, 8, 4, 3, TRUE), + PT( 3, 31, 5, 0, TRUE), + PT(13, 42, 2, 3, FALSE), + PT(58, 63, 6, 1, TRUE), + PT(43, 25, 3, 2, TRUE), + PT(42, 31, 5, 0, TRUE), + PT(40, 44, 2, 0, FALSE), + PT(40, 48, 2, 0, FALSE), + PT(57, 20, 3, 1, TRUE), + PT( 0, 24, 4, 0, TRUE), + PT(40, 12, 6, 3, TRUE), + PT(17, 16, 2, 0, TRUE), + PT(60, 51, 6, 1, FALSE), + PT(51, 54, 3, 1, FALSE), + PT(54, 0, 3, 2, FALSE), + PT(49, 27, 3, 2, TRUE), + PT(56, 29, 2, 0, FALSE), + PT(60, 57, 4, 3, TRUE), + PT(58, 63, 2, 2, FALSE), + PT(25, 18, 2, 2, FALSE), + PT(13, 31, 3, 0, FALSE), + PT( 0, 37, 3, 0, FALSE), + PT(40, 28, 6, 1, FALSE), + PT(39, 3, 3, 1, FALSE), + PT(38, 45, 5, 1, FALSE), + PT(41, 40, 4, 3, TRUE), + PT(10, 42, 3, 0, FALSE), + PT(10, 26, 6, 0, FALSE), + PT(32, 26, 5, 3, FALSE), + PT( 6, 11, 3, 2, TRUE), + PT(15, 12, 3, 2, FALSE), + PT(53, 40, 3, 2, FALSE), + PT(61, 22, 4, 1, TRUE), + PT(33, 28, 6, 0, TRUE), + PT(20, 28, 5, 3, FALSE), + PT(34, 50, 6, 2, TRUE), + PT( 9, 41, 6, 0, FALSE), + PT(32, 26, 2, 0, FALSE), + PT(49, 63, 5, 2, FALSE), + PT(10, 61, 6, 3, TRUE), + PT(11, 46, 5, 2, TRUE), + PT(31, 34, 6, 0, TRUE), + PT( 6, 7, 5, 0, TRUE), + PT(34, 23, 5, 2, TRUE), + PT(48, 17, 3, 0, FALSE), + PT(12, 25, 2, 2, TRUE), + PT( 7, 10, 6, 2, FALSE), + PT(24, 41, 4, 3, TRUE), + PT(51, 12, 6, 0, FALSE), + PT( 3, 26, 6, 3, TRUE), + PT( 6, 1, 5, 2, TRUE), + PT(15, 59, 5, 1, TRUE), + PT(17, 31, 6, 3, TRUE), + PT(43, 33, 6, 3, FALSE), + PT(63, 35, 2, 3, TRUE), + PT(23, 7, 5, 1, TRUE), + PT(43, 14, 6, 0, FALSE), + PT(17, 57, 3, 2, TRUE), + PT(41, 3, 6, 1, TRUE), + PT(48, 3, 5, 3, TRUE), + PT(60, 32, 4, 3, FALSE), + PT( 3, 34, 2, 2, FALSE), + PT(58, 40, 6, 2, TRUE), + PT( 1, 40, 5, 1, TRUE), + PT(62, 21, 3, 0, FALSE), + PT(48, 7, 2, 3, TRUE), + PT(59, 44, 6, 0, FALSE), + PT(21, 7, 5, 2, FALSE), + PT(23, 39, 3, 2, TRUE), + PT(63, 30, 6, 1, TRUE), + PT(13, 23, 2, 0, FALSE), + PT(21, 14, 6, 0, FALSE), + PT( 9, 5, 6, 0, FALSE), + PT(45, 32, 2, 2, TRUE), + PT(60, 61, 6, 0, FALSE), + PT(12, 23, 3, 2, FALSE), + PT(26, 13, 4, 2, TRUE), + PT(43, 43, 5, 1, FALSE), + PT( 2, 22, 5, 2, TRUE), + PT(23, 49, 2, 3, TRUE), + PT( 0, 8, 2, 1, TRUE), + PT(55, 53, 4, 0, TRUE), + PT(30, 28, 3, 3, TRUE), + PT(43, 50, 3, 2, FALSE), + PT(16, 42, 2, 3, FALSE), + PT(58, 51, 6, 0, TRUE), + PT(23, 43, 5, 1, FALSE), + PT(12, 61, 2, 0, TRUE), + PT(40, 10, 6, 0, FALSE), + PT(35, 10, 4, 3, FALSE), + PT(10, 20, 4, 2, FALSE), + PT(11, 15, 6, 0, FALSE), + PT(27, 30, 5, 0, TRUE), + PT( 2, 53, 5, 0, FALSE), + PT(59, 2, 2, 2, FALSE), + PT( 0, 15, 6, 2, TRUE), + PT(28, 60, 5, 3, FALSE), + PT(40, 56, 3, 0, TRUE), + PT(27, 17, 2, 1, FALSE), + PT( 9, 22, 2, 0, FALSE), + PT(46, 13, 4, 0, FALSE), + PT(61, 4, 6, 1, FALSE), + PT(22, 44, 4, 2, TRUE), + PT( 2, 61, 3, 0, FALSE), + PT(11, 19, 3, 2, FALSE), + PT(34, 42, 3, 2, FALSE), + PT(32, 39, 4, 1, FALSE), + PT( 5, 38, 4, 1, FALSE), + PT(18, 29, 5, 2, FALSE), + PT( 8, 5, 5, 3, FALSE), + PT(63, 28, 2, 3, TRUE), + PT(36, 13, 6, 1, TRUE), + PT(54, 8, 4, 2, FALSE), + PT(16, 34, 5, 0, TRUE), + PT(28, 10, 2, 0, TRUE), + PT(37, 15, 2, 0, FALSE), + PT(36, 56, 5, 3, TRUE), + PT(37, 50, 3, 3, FALSE), + PT( 6, 42, 5, 0, TRUE), + PT(62, 58, 5, 0, FALSE), + PT(52, 23, 6, 1, TRUE), + PT(24, 51, 2, 3, TRUE), + PT( 7, 20, 3, 3, TRUE), + PT(17, 23, 4, 0, FALSE), + PT(19, 14, 2, 2, FALSE), + PT(59, 28, 2, 1, FALSE), + PT(42, 19, 6, 3, TRUE), + PT(42, 53, 6, 1, FALSE), + PT(48, 2, 4, 2, TRUE), + PT( 0, 7, 3, 3, TRUE), + PT(12, 4, 5, 2, FALSE), + PT(55, 55, 6, 0, FALSE), + PT(37, 18, 4, 2, TRUE), + PT(18, 34, 4, 0, TRUE), + PT(34, 53, 6, 1, TRUE), + PT( 7, 32, 5, 2, TRUE), + PT(39, 14, 6, 0, FALSE), + PT(52, 25, 3, 1, FALSE), + PT(10, 60, 4, 2, TRUE), + PT( 7, 29, 5, 1, TRUE), + PT(49, 58, 2, 1, FALSE), + PT(26, 61, 6, 3, TRUE), + PT(22, 21, 2, 3, FALSE), + PT(57, 19, 2, 2, TRUE), + PT(45, 3, 5, 3, FALSE), + PT( 6, 57, 5, 2, FALSE), + PT(22, 0, 2, 1, TRUE), + PT(53, 42, 6, 2, TRUE), + PT(36, 1, 3, 0, FALSE), + PT(36, 55, 5, 0, FALSE), + PT(37, 27, 6, 2, FALSE), + PT(37, 25, 2, 3, TRUE), + PT(39, 47, 3, 1, TRUE), + PT(39, 13, 2, 0, FALSE), + PT(54, 60, 6, 0, FALSE), + PT(60, 51, 4, 1, TRUE), + PT(62, 39, 3, 3, FALSE), + PT(37, 45, 5, 0, TRUE), + PT(31, 18, 4, 0, TRUE), + PT(55, 50, 3, 3, TRUE), + PT(17, 33, 6, 2, TRUE), + PT(48, 12, 3, 0, TRUE), + PT(37, 61, 4, 3, FALSE), + PT(23, 2, 3, 2, TRUE), + PT(20, 46, 2, 0, TRUE), + PT(56, 19, 6, 0, FALSE), + PT(10, 43, 4, 0, FALSE), + PT(30, 16, 2, 2, TRUE), + PT(55, 48, 5, 3, FALSE), + PT(30, 4, 5, 2, FALSE), + PT(20, 52, 3, 0, TRUE), + PT( 8, 20, 3, 0, FALSE), + PT(14, 28, 6, 0, FALSE), + PT(26, 46, 3, 1, TRUE), + PT(31, 57, 6, 0, TRUE), + PT(12, 28, 5, 0, FALSE), + PT(62, 51, 4, 1, TRUE), + PT(15, 19, 2, 3, FALSE), + PT(37, 57, 5, 3, TRUE), + PT(20, 27, 3, 1, FALSE), + PT(40, 62, 4, 0, TRUE), + PT(45, 25, 2, 0, TRUE), + PT(12, 52, 6, 1, FALSE), + PT(57, 49, 3, 0, TRUE), + PT(26, 8, 6, 2, FALSE), + PT( 9, 47, 2, 0, TRUE), + PT(48, 4, 3, 2, FALSE), + PT( 2, 59, 3, 1, TRUE), + PT(51, 33, 6, 1, TRUE), + PT(56, 2, 3, 1, FALSE), + PT(49, 56, 6, 1, FALSE), + PT(31, 29, 2, 3, FALSE), + PT(23, 16, 3, 1, TRUE), + PT(50, 32, 2, 3, TRUE), + PT( 0, 51, 2, 1, FALSE), + PT(33, 15, 4, 3, TRUE), + PT(20, 25, 4, 3, TRUE), + PT(36, 44, 6, 3, TRUE), + PT(37, 5, 5, 3, TRUE), + PT(61, 37, 2, 0, TRUE), + PT(18, 48, 3, 1, FALSE), + PT(22, 3, 3, 1, FALSE), + PT(20, 9, 2, 1, TRUE), + PT( 2, 35, 4, 1, FALSE), + PT( 1, 60, 2, 0, FALSE), + PT(63, 45, 4, 1, TRUE), + PT(49, 63, 4, 1, TRUE), + PT(23, 0, 6, 1, TRUE), + PT(63, 15, 5, 3, TRUE), + PT(38, 7, 2, 2, TRUE), + PT(33, 43, 5, 1, FALSE), + PT(56, 57, 3, 3, FALSE), + PT( 9, 37, 5, 1, TRUE), + PT(59, 48, 4, 2, TRUE), + PT(18, 45, 2, 1, TRUE), + PT(50, 25, 5, 0, FALSE), + PT(36, 28, 5, 2, TRUE), + PT(53, 50, 4, 3, FALSE), + PT(13, 35, 3, 3, FALSE), + PT(29, 7, 4, 0, TRUE), + PT(11, 52, 2, 3, TRUE), + PT(45, 50, 6, 1, FALSE), + PT(58, 60, 6, 2, TRUE), + PT(26, 16, 6, 1, TRUE), + PT(26, 7, 4, 1, FALSE), + PT(59, 27, 5, 1, FALSE), + PT(51, 31, 4, 3, FALSE), + PT(14, 53, 3, 1, FALSE), + PT(59, 10, 3, 2, FALSE), + PT(17, 7, 2, 0, TRUE), + PT(13, 60, 5, 2, TRUE), + PT(30, 55, 5, 0, TRUE), + PT(17, 5, 2, 1, FALSE), + PT(21, 47, 3, 2, FALSE), + PT(36, 49, 2, 3, FALSE), + PT(43, 33, 3, 1, TRUE), + PT(35, 16, 6, 0, TRUE), + PT( 2, 20, 5, 0, TRUE), + PT(38, 32, 2, 3, FALSE), + PT(16, 23, 2, 0, FALSE), + PT(11, 15, 6, 1, TRUE), + PT( 1, 46, 2, 2, FALSE), + PT(33, 14, 6, 3, TRUE), + PT(26, 29, 5, 3, TRUE), + PT(30, 48, 4, 2, FALSE), + PT( 4, 20, 5, 2, TRUE), + PT(17, 0, 6, 0, FALSE), + PT( 8, 42, 3, 2, TRUE), + PT(29, 34, 4, 0, TRUE), + PT(36, 44, 6, 3, TRUE), + PT(36, 17, 2, 1, FALSE), + PT( 4, 46, 5, 0, FALSE), + PT(29, 24, 4, 1, TRUE), + PT(60, 22, 2, 3, FALSE), + PT(16, 23, 6, 0, TRUE), + PT(32, 33, 2, 1, FALSE), + PT(51, 62, 6, 2, FALSE), + PT( 6, 19, 2, 1, TRUE), + PT(23, 56, 5, 1, TRUE), + PT(20, 13, 2, 2, TRUE), + PT(36, 59, 5, 1, TRUE), + PT(52, 59, 3, 3, FALSE), + PT(24, 7, 6, 2, FALSE), + PT(55, 29, 3, 3, TRUE), + PT(11, 41, 4, 0, FALSE), + PT(18, 30, 3, 2, TRUE), + PT(26, 36, 4, 2, FALSE), + PT(61, 40, 4, 2, FALSE), + PT(11, 18, 6, 1, TRUE), + PT(27, 58, 4, 1, FALSE), + PT(20, 19, 5, 1, FALSE), + PT(49, 56, 2, 2, TRUE), + PT(55, 43, 5, 3, FALSE), + PT(25, 30, 5, 2, FALSE), + PT(63, 27, 5, 1, FALSE), + PT(51, 31, 6, 1, TRUE), + PT(63, 21, 5, 0, TRUE), + PT( 1, 30, 3, 0, FALSE), + PT(31, 34, 3, 0, TRUE), + PT(51, 60, 6, 2, FALSE), + PT(30, 18, 4, 1, FALSE), + PT(13, 55, 5, 2, FALSE), + PT(15, 8, 6, 0, TRUE), + PT(46, 9, 6, 3, FALSE), + PT( 1, 5, 3, 3, FALSE), + PT(28, 4, 3, 3, FALSE), + PT(12, 1, 3, 2, FALSE), + PT(41, 40, 5, 3, TRUE), + PT(57, 45, 2, 2, FALSE), + PT( 9, 34, 6, 3, FALSE), + PT( 4, 55, 6, 3, TRUE), + PT(45, 47, 6, 2, TRUE), + PT(36, 35, 3, 1, TRUE), + PT( 8, 32, 6, 1, FALSE), + PT(32, 31, 6, 2, FALSE), + PT( 2, 49, 3, 0, TRUE), + PT(24, 19, 6, 3, FALSE), + PT( 6, 43, 3, 3, FALSE), + PT(14, 27, 2, 0, FALSE), + PT(47, 14, 3, 2, FALSE), + PT(17, 56, 2, 1, TRUE), + PT( 1, 55, 3, 0, TRUE), + PT(20, 17, 4, 3, FALSE), + PT(49, 61, 6, 1, TRUE), + PT(29, 27, 6, 2, FALSE), + PT(37, 49, 5, 3, TRUE), + PT(17, 10, 5, 3, TRUE), + PT(57, 23, 3, 1, TRUE), + PT( 5, 14, 2, 1, TRUE), + PT(41, 37, 4, 1, FALSE), + PT(21, 13, 4, 0, FALSE), + PT(43, 39, 4, 0, TRUE), + PT(62, 36, 4, 3, TRUE), + PT(42, 43, 2, 3, FALSE), + PT(36, 61, 2, 2, TRUE), + PT(21, 48, 6, 0, TRUE), + PT(15, 51, 4, 2, FALSE), + PT( 6, 22, 2, 1, TRUE), + PT( 6, 49, 2, 0, FALSE), + PT(46, 63, 2, 0, FALSE), + PT( 5, 13, 5, 3, TRUE), + PT(60, 31, 3, 0, TRUE), + PT(18, 19, 4, 2, FALSE), + PT(15, 51, 6, 3, FALSE), + PT(21, 59, 6, 1, TRUE), + PT( 3, 15, 5, 1, FALSE), + PT(59, 60, 5, 2, FALSE), + PT(54, 9, 5, 0, TRUE), + PT(17, 59, 4, 3, TRUE), + PT(40, 43, 6, 0, TRUE), + PT(26, 14, 5, 3, TRUE), + PT(57, 44, 6, 0, TRUE), + PT(14, 60, 6, 2, TRUE), + PT(44, 36, 6, 1, TRUE), + PT(61, 17, 5, 1, TRUE), + PT( 7, 60, 6, 3, TRUE), + PT(20, 24, 2, 1, TRUE), + PT(29, 63, 5, 3, FALSE), + PT(48, 18, 4, 2, TRUE), + PT(38, 29, 2, 0, TRUE), + PT( 7, 17, 3, 3, FALSE), + PT(52, 1, 2, 0, TRUE), + PT(11, 57, 4, 0, TRUE), + PT(41, 2, 5, 0, TRUE), + PT(21, 16, 3, 1, FALSE), + PT(48, 31, 6, 2, TRUE), + PT(60, 43, 5, 1, FALSE), + PT(48, 59, 6, 3, FALSE), + PT(32, 26, 4, 1, TRUE), + PT(50, 36, 5, 1, TRUE), + PT(21, 32, 3, 2, FALSE), + PT(37, 61, 6, 3, FALSE), + PT(45, 20, 6, 0, TRUE), + PT(24, 35, 2, 3, TRUE), + PT(24, 5, 2, 1, TRUE), + PT(52, 48, 6, 3, TRUE), + PT(14, 57, 4, 1, TRUE), + PT(29, 31, 2, 3, TRUE), + PT( 1, 21, 5, 3, TRUE), + PT(11, 62, 3, 1, TRUE), + PT(13, 25, 5, 3, FALSE), + PT(49, 56, 3, 2, FALSE), + PT(21, 52, 2, 2, TRUE), + PT(19, 25, 5, 0, TRUE), + PT(25, 20, 4, 3, TRUE), + PT(21, 24, 4, 1, TRUE), + PT(41, 12, 4, 3, TRUE), + PT(45, 14, 2, 3, TRUE), + PT(52, 24, 2, 0, FALSE), + PT(59, 30, 5, 0, TRUE), + PT(52, 44, 4, 1, FALSE), + PT(49, 8, 2, 1, TRUE), + PT(29, 24, 3, 1, FALSE), + PT(28, 11, 5, 1, FALSE), + PT(25, 30, 3, 1, FALSE), + PT(35, 39, 2, 3, TRUE), + PT(59, 14, 6, 3, TRUE), + PT(25, 43, 2, 3, FALSE), + PT(47, 8, 4, 0, TRUE), + PT(55, 2, 4, 0, FALSE), + PT(11, 50, 6, 0, FALSE), + PT(22, 5, 6, 0, FALSE), + PT(19, 5, 3, 1, FALSE), + PT( 7, 57, 3, 0, TRUE), + PT(12, 59, 5, 1, FALSE), + PT(21, 5, 6, 0, FALSE), + PT(48, 5, 3, 0, TRUE), + PT(19, 0, 2, 1, FALSE), + PT(39, 22, 5, 1, FALSE), + PT(15, 40, 4, 3, TRUE), + PT(12, 35, 5, 3, TRUE), + PT(57, 40, 5, 1, FALSE), + PT(36, 37, 3, 3, TRUE), + PT(24, 41, 2, 2, FALSE), + PT(22, 5, 3, 1, FALSE), + PT(53, 47, 4, 3, FALSE), + PT(10, 58, 5, 0, TRUE), + PT(52, 44, 6, 3, FALSE), + PT(46, 58, 2, 2, TRUE), + PT(26, 10, 5, 2, TRUE), + PT(22, 20, 5, 3, FALSE), + PT(53, 40, 5, 1, FALSE), + PT(53, 15, 2, 0, TRUE), + PT(17, 50, 3, 0, TRUE), + PT(32, 26, 5, 0, FALSE), + PT(23, 26, 5, 0, FALSE), + PT(22, 51, 4, 2, TRUE), + PT(19, 44, 5, 0, TRUE), + PT( 9, 22, 6, 1, TRUE), + PT(29, 39, 4, 3, FALSE), + PT(21, 12, 5, 3, TRUE), + PT(34, 28, 3, 0, TRUE), + PT(41, 51, 2, 0, FALSE), + PT(45, 17, 3, 1, TRUE), + PT(22, 25, 5, 3, FALSE), + PT(13, 12, 5, 0, FALSE), + PT(55, 58, 6, 2, FALSE), + PT(42, 29, 6, 3, TRUE), + PT(48, 10, 6, 3, FALSE), + PT(36, 57, 3, 1, TRUE), + PT(57, 10, 6, 1, FALSE), + PT(17, 3, 5, 2, TRUE), + PT(50, 29, 6, 0, FALSE), + PT(56, 30, 4, 3, TRUE), + PT(46, 23, 3, 0, FALSE), + PT(22, 23, 5, 1, FALSE), + PT(54, 59, 6, 0, TRUE), + PT(23, 4, 3, 0, TRUE), + PT(58, 37, 5, 2, TRUE), + PT( 0, 54, 4, 3, TRUE), + PT(37, 18, 6, 1, TRUE), + PT( 6, 10, 2, 2, FALSE), + PT(17, 5, 5, 3, TRUE), + PT( 3, 53, 5, 3, TRUE), + PT(11, 52, 5, 0, TRUE), + PT( 0, 49, 2, 1, TRUE), + PT(39, 15, 3, 2, FALSE), + PT(29, 6, 5, 2, TRUE), + PT(28, 48, 4, 3, TRUE), + PT(47, 42, 4, 3, TRUE), + PT(22, 32, 6, 0, TRUE), + PT(51, 43, 5, 1, TRUE), + PT( 5, 48, 6, 3, FALSE), + PT(41, 35, 6, 2, TRUE), + PT(16, 22, 5, 3, TRUE), + PT(45, 32, 5, 0, TRUE), + PT(55, 19, 4, 2, FALSE), + PT(45, 14, 4, 2, TRUE), + PT( 8, 10, 3, 0, FALSE), + PT(15, 3, 3, 1, TRUE), + PT(49, 12, 6, 3, TRUE), + PT(30, 52, 6, 0, TRUE), + PT(27, 14, 4, 2, TRUE), + PT(26, 7, 6, 2, FALSE), + PT(13, 60, 6, 1, TRUE), + PT( 0, 58, 6, 3, FALSE), + PT( 4, 39, 2, 1, FALSE), + PT(35, 24, 4, 2, FALSE), + PT(13, 11, 3, 0, FALSE), + PT(49, 50, 6, 3, TRUE), + PT( 0, 13, 4, 0, TRUE), + PT(50, 16, 2, 1, FALSE), + PT(38, 13, 3, 0, TRUE), + PT(41, 36, 5, 1, TRUE), + PT(61, 33, 3, 3, TRUE), + PT(30, 27, 5, 0, FALSE), + PT(13, 18, 5, 0, FALSE), + PT(53, 30, 4, 1, TRUE), + PT(10, 46, 4, 1, FALSE), + PT(39, 39, 6, 2, TRUE), + PT( 1, 14, 4, 0, FALSE), + PT(49, 57, 5, 0, TRUE), + PT(59, 36, 6, 3, FALSE), + PT(20, 16, 6, 1, TRUE), + PT(24, 44, 4, 3, FALSE), + PT( 4, 45, 2, 2, TRUE), + PT(26, 17, 6, 3, TRUE), + PT(15, 11, 2, 2, FALSE), + PT(14, 44, 5, 2, FALSE), + PT(33, 23, 5, 2, FALSE), + PT(22, 33, 6, 2, TRUE), + PT(62, 16, 2, 0, FALSE), + PT(10, 5, 3, 3, FALSE), + PT(59, 9, 2, 1, TRUE), + PT(38, 24, 3, 3, FALSE), + PT(35, 12, 3, 1, FALSE), + PT(51, 55, 3, 3, TRUE), + PT( 9, 18, 6, 2, TRUE), + PT(61, 13, 2, 2, TRUE), + PT(54, 6, 4, 2, FALSE), + PT(51, 48, 5, 0, TRUE), + PT(59, 15, 5, 0, FALSE), + PT(52, 42, 5, 2, FALSE), + PT( 2, 18, 6, 2, TRUE), + PT( 9, 34, 6, 0, TRUE), + PT(59, 49, 3, 2, FALSE), + PT(51, 34, 4, 3, TRUE), + PT(61, 52, 2, 2, TRUE), + PT(20, 34, 5, 0, FALSE), + PT(40, 16, 3, 3, FALSE), + PT(33, 49, 2, 0, FALSE), + PT(45, 22, 4, 0, TRUE), + PT(30, 5, 6, 1, TRUE), + PT(15, 48, 6, 0, TRUE), + PT(14, 26, 6, 2, TRUE), + PT(56, 46, 5, 0, FALSE), + PT(38, 55, 3, 3, FALSE), + PT(43, 19, 6, 1, TRUE), + PT(31, 30, 6, 3, TRUE), + PT(10, 40, 4, 2, FALSE), + PT(50, 28, 3, 1, FALSE), + PT(31, 63, 3, 0, TRUE), + PT(57, 57, 5, 0, TRUE), + PT(44, 27, 2, 2, FALSE), + PT(21, 42, 2, 3, TRUE), + PT(50, 15, 4, 0, TRUE), + PT(48, 33, 3, 0, FALSE), + PT(35, 42, 4, 3, TRUE), + PT(61, 7, 2, 0, FALSE), + PT(11, 63, 5, 3, TRUE), + PT(49, 2, 5, 3, FALSE), + PT( 8, 57, 5, 3, TRUE), + PT(63, 32, 3, 0, FALSE), + PT(45, 52, 2, 0, TRUE), + PT(46, 52, 2, 0, FALSE), + PT(38, 18, 4, 1, TRUE), + PT(37, 10, 6, 3, TRUE), + PT(52, 9, 4, 2, TRUE), + PT(10, 62, 2, 3, FALSE), + PT(26, 23, 2, 0, TRUE), + PT(56, 28, 4, 0, FALSE), + PT(17, 33, 4, 3, FALSE), + PT( 5, 15, 3, 0, FALSE), + PT(38, 43, 6, 1, FALSE), + PT(10, 12, 2, 3, FALSE), + PT( 3, 41, 3, 2, TRUE), + PT(41, 59, 4, 1, TRUE), + PT(22, 27, 5, 0, TRUE), + PT( 7, 9, 2, 3, TRUE), + PT(23, 44, 3, 2, FALSE), + PT(53, 51, 6, 0, FALSE), + PT(23, 18, 3, 3, FALSE), + PT(61, 26, 5, 1, TRUE), + PT(33, 29, 2, 0, FALSE), + PT(10, 8, 2, 3, TRUE), + PT(20, 60, 6, 3, FALSE), + PT(40, 54, 6, 3, FALSE), + PT(59, 32, 3, 1, TRUE), + PT(19, 34, 3, 2, TRUE), + PT(19, 58, 2, 2, TRUE), + PT( 2, 35, 5, 2, FALSE), + PT(62, 25, 2, 2, FALSE), + PT(57, 60, 3, 1, FALSE), + PT(16, 8, 3, 3, FALSE), + PT(10, 19, 5, 0, TRUE), + PT(63, 56, 5, 2, FALSE), + PT( 7, 35, 3, 3, TRUE), + PT(25, 42, 4, 2, FALSE), + PT(20, 60, 3, 3, TRUE), + PT(13, 4, 6, 3, TRUE), + PT(26, 47, 5, 0, FALSE), + PT(42, 29, 3, 3, FALSE), + PT(17, 55, 5, 0, TRUE), + PT(40, 39, 2, 1, FALSE), + PT(13, 0, 4, 3, FALSE), + PT(10, 60, 4, 3, FALSE), + PT(31, 28, 6, 1, TRUE), + PT( 4, 58, 5, 2, FALSE), + PT(36, 61, 5, 1, TRUE), + PT(38, 49, 5, 3, TRUE), + PT(19, 28, 4, 0, TRUE), + PT(62, 18, 4, 1, TRUE), + PT(54, 10, 3, 1, FALSE), + PT(45, 30, 3, 0, TRUE), + PT( 5, 31, 3, 1, TRUE), + PT(30, 10, 3, 3, TRUE), + PT(32, 8, 4, 2, FALSE), + PT(44, 12, 6, 1, TRUE), + PT(29, 31, 2, 0, TRUE), + PT(14, 18, 2, 0, FALSE), + PT(39, 18, 3, 0, TRUE), + PT(42, 19, 6, 0, TRUE), + PT(28, 4, 6, 0, FALSE), + PT(26, 56, 3, 3, TRUE), + PT(44, 53, 4, 2, TRUE), + PT( 7, 11, 6, 1, TRUE), + PT(45, 2, 3, 1, FALSE), + PT(42, 53, 6, 2, TRUE), + PT(22, 47, 2, 2, FALSE), + PT(17, 49, 6, 1, TRUE), + PT(44, 49, 3, 3, FALSE), + PT(60, 58, 4, 3, TRUE), + PT(60, 43, 2, 1, FALSE), + PT(39, 29, 2, 1, FALSE), + PT(54, 44, 5, 1, TRUE), + PT(37, 59, 6, 2, TRUE), + PT(18, 61, 4, 3, TRUE), + PT(19, 35, 3, 0, TRUE), + PT(51, 44, 4, 3, FALSE), + PT( 9, 60, 2, 1, FALSE), + PT(21, 26, 4, 1, TRUE), + PT(33, 7, 3, 1, FALSE), + PT(34, 37, 4, 0, FALSE), + PT(25, 27, 5, 2, FALSE), + PT(58, 25, 6, 2, TRUE), + PT( 5, 38, 3, 2, TRUE), + PT(35, 34, 4, 2, TRUE), + PT(14, 30, 2, 0, TRUE), + PT(19, 48, 2, 1, FALSE), + PT(44, 34, 4, 2, TRUE), + PT(10, 29, 3, 0, FALSE), + PT(35, 62, 3, 2, TRUE), + PT( 2, 40, 4, 2, TRUE), + PT(33, 14, 4, 0, FALSE), + PT(33, 34, 6, 3, TRUE), + PT(24, 51, 4, 3, TRUE), + PT(35, 35, 6, 0, TRUE), + PT(36, 26, 3, 1, FALSE), + PT(62, 37, 4, 2, FALSE), + PT(36, 1, 3, 0, FALSE), + PT(52, 16, 4, 1, FALSE), + PT( 7, 0, 6, 3, TRUE), + PT( 6, 32, 4, 0, FALSE), + PT(58, 2, 5, 1, TRUE), + PT( 7, 44, 5, 2, FALSE), + PT( 9, 47, 5, 1, FALSE), + PT( 1, 50, 5, 2, FALSE), + PT( 0, 53, 2, 1, TRUE), + PT(43, 60, 3, 3, TRUE), + PT(54, 55, 3, 3, FALSE), + PT(32, 53, 3, 2, TRUE), + PT(12, 7, 6, 1, TRUE), + PT(22, 8, 2, 1, FALSE), + PT(63, 54, 2, 0, TRUE), + PT(11, 31, 5, 2, TRUE), + PT(33, 32, 6, 1, TRUE), + PT(23, 26, 5, 3, FALSE), + PT(22, 1, 5, 3, TRUE), + PT(47, 28, 6, 2, FALSE), + PT(41, 49, 5, 3, FALSE), + PT(59, 56, 6, 0, TRUE), + PT(13, 22, 2, 1, FALSE), + PT( 7, 41, 4, 2, FALSE), + PT(51, 60, 6, 2, FALSE), + PT(62, 30, 3, 0, FALSE), + PT(48, 2, 6, 2, FALSE), + PT(42, 52, 3, 1, TRUE), + PT(46, 35, 3, 0, FALSE), + PT(52, 0, 3, 3, TRUE), + PT(32, 14, 5, 0, FALSE), + PT(21, 51, 6, 3, TRUE), + PT(39, 53, 4, 1, TRUE), + PT(55, 62, 2, 0, TRUE), + PT(50, 46, 6, 3, FALSE), + PT(58, 2, 5, 1, TRUE), + PT( 0, 54, 3, 2, TRUE), + PT(19, 41, 2, 3, FALSE), + PT( 8, 43, 6, 3, TRUE), + PT( 8, 2, 4, 3, TRUE), + PT(50, 45, 6, 2, FALSE), + PT(48, 54, 5, 0, TRUE), + PT(46, 16, 2, 1, FALSE), + PT(60, 46, 5, 1, FALSE), + PT( 4, 51, 6, 0, FALSE), + PT(63, 1, 4, 1, FALSE), + PT(55, 20, 3, 2, TRUE), + PT(39, 0, 5, 3, TRUE), + PT(12, 57, 4, 3, FALSE), + PT(39, 4, 4, 0, TRUE), + PT(25, 8, 3, 2, TRUE), + PT( 1, 4, 3, 3, FALSE), + PT(39, 27, 5, 1, TRUE), + PT(49, 23, 3, 3, TRUE), + PT( 7, 1, 5, 2, TRUE), + PT(46, 59, 3, 3, TRUE), + PT(52, 36, 6, 0, TRUE), + PT(50, 43, 4, 2, FALSE), + PT(14, 7, 3, 3, FALSE), + PT(15, 51, 2, 0, FALSE), + PT(22, 33, 6, 1, FALSE), + PT(57, 2, 3, 1, FALSE), + PT(51, 61, 4, 1, FALSE), + PT(12, 37, 3, 1, FALSE), + PT(41, 41, 5, 0, FALSE), + PT(58, 50, 4, 3, FALSE), + PT(11, 19, 4, 1, FALSE), + PT(31, 15, 3, 2, FALSE), + PT( 4, 44, 4, 0, FALSE), + PT(57, 26, 3, 1, TRUE), + PT(26, 42, 3, 3, TRUE), + PT(36, 19, 3, 1, FALSE), + PT(49, 59, 6, 1, TRUE), + PT(57, 35, 5, 0, FALSE), + PT(49, 7, 6, 0, TRUE), + PT(31, 16, 4, 0, FALSE), + PT(41, 23, 6, 1, FALSE), + PT(38, 59, 5, 2, TRUE), + PT( 2, 60, 3, 2, FALSE), + PT(14, 0, 4, 0, FALSE), + PT(20, 62, 6, 3, TRUE), + PT( 1, 15, 5, 2, TRUE), + PT( 6, 18, 4, 3, TRUE), + PT(48, 19, 3, 0, TRUE), + PT( 0, 51, 5, 1, FALSE), + PT(12, 7, 4, 3, TRUE), + PT(17, 58, 3, 2, FALSE), + PT(21, 10, 2, 1, TRUE), + PT(31, 13, 5, 1, FALSE), + PT(55, 7, 5, 1, FALSE), + PT(52, 53, 6, 2, FALSE), + PT(40, 22, 4, 3, TRUE), + PT( 6, 2, 6, 3, FALSE), + PT( 9, 35, 6, 0, FALSE), + PT(20, 2, 5, 0, FALSE), + PT(57, 50, 6, 2, FALSE), + PT(36, 53, 2, 1, FALSE), + PT(18, 34, 4, 3, FALSE), + PT( 9, 7, 6, 1, TRUE), + PT(15, 62, 3, 3, FALSE), + PT( 0, 60, 6, 1, TRUE), + PT(16, 55, 2, 2, FALSE), + PT(58, 3, 4, 2, TRUE), + PT(45, 30, 4, 2, FALSE), + PT(54, 54, 4, 3, FALSE), + PT(31, 60, 3, 1, FALSE), + PT(55, 51, 4, 2, TRUE), + PT(35, 19, 3, 3, TRUE), + PT(51, 13, 2, 1, TRUE), + PT(37, 48, 3, 3, FALSE), + PT(23, 3, 3, 0, FALSE), + PT(24, 24, 2, 2, FALSE), + PT(48, 7, 4, 1, FALSE), + PT(62, 51, 4, 0, TRUE), + PT(20, 55, 2, 3, FALSE), + PT(22, 0, 2, 1, FALSE), + PT(44, 18, 5, 3, TRUE), + PT(37, 63, 3, 3, FALSE), + PT(36, 25, 2, 3, FALSE), + PT(22, 15, 6, 2, TRUE), + PT(45, 16, 2, 0, TRUE), + PT(36, 42, 5, 0, FALSE), + PT(25, 37, 5, 3, FALSE), + PT(12, 22, 3, 3, TRUE), + PT(56, 33, 6, 3, FALSE), + PT(61, 26, 5, 3, TRUE), + PT(59, 50, 2, 1, FALSE), + PT(54, 19, 5, 0, TRUE), + PT(14, 48, 6, 0, TRUE), + PT(25, 7, 5, 3, TRUE), + PT(37, 35, 5, 0, FALSE), + PT(32, 8, 5, 0, TRUE), + PT(42, 0, 6, 0, FALSE), + PT(48, 56, 4, 1, TRUE), + PT(30, 15, 3, 3, TRUE), + PT(59, 27, 6, 0, FALSE), + PT(58, 55, 5, 3, TRUE), + PT(57, 55, 6, 2, TRUE), + PT(57, 45, 5, 3, TRUE), + PT(31, 46, 3, 3, FALSE), + PT(26, 43, 3, 3, FALSE), + PT(20, 23, 4, 0, FALSE), + PT(47, 3, 2, 0, TRUE), + PT(29, 0, 6, 0, FALSE), + PT(23, 43, 3, 2, TRUE), + PT(53, 40, 4, 2, TRUE), + PT(59, 15, 2, 0, TRUE), + PT( 9, 4, 5, 3, FALSE), + PT(35, 17, 3, 3, FALSE), + PT(19, 55, 3, 3, FALSE), + PT(55, 55, 3, 3, FALSE), + PT( 7, 1, 6, 1, FALSE), + PT(20, 6, 6, 1, FALSE), + PT(17, 12, 5, 3, FALSE), + PT(54, 46, 4, 2, FALSE), + PT(21, 42, 3, 2, FALSE), + PT(34, 21, 6, 2, FALSE), + PT(44, 30, 6, 2, TRUE), + PT(34, 39, 6, 1, TRUE), + PT(25, 63, 5, 2, TRUE), + PT(33, 51, 2, 2, TRUE), + PT(38, 26, 2, 0, TRUE), + PT(22, 62, 2, 1, FALSE), + PT(43, 36, 2, 2, TRUE), + PT(60, 15, 5, 2, TRUE), + PT(49, 21, 6, 3, FALSE), + PT(63, 36, 3, 2, TRUE), + PT(37, 1, 6, 3, TRUE), + PT(51, 22, 3, 1, FALSE), + PT(31, 14, 2, 0, FALSE), + PT(47, 11, 2, 1, FALSE), + PT(42, 26, 4, 2, TRUE), + PT(23, 10, 6, 2, TRUE), + PT( 9, 40, 6, 2, TRUE), + PT( 2, 19, 6, 3, FALSE), + PT(52, 47, 2, 3, TRUE), + PT( 3, 4, 6, 0, TRUE), + PT(62, 38, 2, 0, TRUE), + PT(53, 51, 6, 0, TRUE), + PT(34, 23, 4, 1, TRUE), + PT(29, 5, 5, 1, TRUE), + PT(46, 39, 4, 0, FALSE), + PT( 3, 43, 3, 2, TRUE), + PT( 1, 25, 3, 3, FALSE), + PT(14, 5, 3, 0, FALSE), + PT(22, 37, 2, 3, TRUE), + PT( 2, 40, 3, 0, FALSE), + PT(25, 11, 4, 2, FALSE), + PT(62, 53, 2, 3, FALSE), + PT(46, 41, 4, 2, TRUE), + PT(62, 56, 3, 3, FALSE), + PT(58, 47, 2, 1, FALSE), + PT(20, 23, 5, 2, TRUE), + PT(17, 18, 6, 0, FALSE), + PT(21, 49, 3, 0, FALSE), + PT( 8, 11, 5, 0, TRUE), + PT(45, 0, 6, 1, TRUE), + PT(44, 6, 3, 1, FALSE), + PT(20, 28, 5, 3, FALSE), + PT( 4, 8, 2, 1, FALSE), + PT(27, 43, 5, 2, TRUE), + PT(42, 55, 6, 1, TRUE), + PT(16, 39, 5, 2, FALSE), + PT(29, 14, 6, 2, FALSE), + PT(32, 2, 2, 1, FALSE), + PT(30, 26, 5, 3, FALSE), + PT( 7, 11, 2, 0, FALSE), + PT(54, 30, 6, 1, TRUE), + PT(43, 40, 3, 1, TRUE), + PT(49, 37, 3, 3, TRUE), + PT(56, 58, 5, 3, TRUE), + PT(57, 48, 5, 3, TRUE), + PT(18, 9, 2, 2, FALSE), + PT(14, 8, 3, 0, TRUE), + PT( 0, 13, 5, 2, FALSE), + PT(27, 14, 6, 2, FALSE), + PT(17, 37, 2, 2, TRUE), + PT(12, 45, 4, 3, FALSE), + PT(54, 44, 2, 3, FALSE), + PT(49, 49, 5, 2, FALSE), + PT( 3, 26, 2, 3, FALSE), + PT(28, 50, 2, 2, FALSE), + PT(10, 62, 6, 3, FALSE), + PT(51, 27, 4, 3, TRUE), + PT(31, 50, 3, 0, FALSE), + PT(51, 38, 6, 1, TRUE), + PT(26, 19, 3, 1, FALSE), + PT(15, 52, 3, 2, FALSE), + PT(53, 44, 5, 3, TRUE), + PT(56, 3, 3, 0, FALSE), + PT(21, 15, 4, 3, TRUE), + PT(49, 41, 4, 0, FALSE), + PT(40, 14, 5, 0, FALSE), + PT(49, 44, 5, 3, FALSE), + PT(21, 25, 3, 1, TRUE), + PT(16, 3, 5, 3, TRUE), + PT(46, 42, 6, 1, FALSE), + PT(42, 39, 3, 1, TRUE), + PT(54, 4, 3, 3, FALSE), + PT(59, 4, 4, 0, TRUE), + PT( 7, 47, 3, 0, TRUE), + PT(39, 29, 3, 2, TRUE), + PT(60, 61, 5, 3, FALSE), + PT(37, 8, 6, 1, FALSE), + PT(59, 52, 5, 1, FALSE), + PT(12, 16, 2, 1, TRUE), + PT(37, 53, 3, 1, FALSE), + PT(47, 25, 5, 0, FALSE), + PT(23, 0, 5, 1, TRUE), + PT(10, 28, 2, 3, TRUE), + PT(10, 17, 3, 1, TRUE), + PT(53, 19, 6, 3, TRUE), + PT(41, 28, 5, 0, FALSE), + PT(12, 49, 6, 2, TRUE), + PT(60, 16, 3, 1, FALSE), + PT(27, 58, 5, 2, TRUE), + PT(58, 28, 3, 0, FALSE), + PT(34, 16, 5, 2, TRUE), + PT(28, 60, 2, 1, FALSE), + PT(23, 24, 5, 1, FALSE), + PT(11, 43, 5, 3, TRUE), + PT(45, 4, 5, 3, FALSE), + PT(60, 19, 4, 1, TRUE), + PT( 1, 28, 5, 3, FALSE), + PT(20, 22, 4, 1, FALSE), + PT(12, 36, 2, 1, TRUE), + PT(53, 55, 6, 2, FALSE), + PT(27, 48, 3, 3, FALSE), + PT(58, 28, 4, 0, FALSE), + PT( 6, 6, 6, 3, FALSE), + PT( 9, 21, 3, 1, FALSE), + PT(27, 26, 4, 3, TRUE), + PT(15, 51, 6, 2, TRUE), + PT(55, 6, 4, 1, TRUE), + PT(58, 18, 3, 2, TRUE), + PT( 0, 22, 5, 0, TRUE), + PT(14, 29, 6, 2, TRUE), + PT(63, 56, 2, 3, FALSE), + PT(42, 60, 6, 2, FALSE), + PT(19, 50, 2, 0, FALSE), + PT(23, 44, 6, 3, TRUE), + PT(41, 42, 3, 3, FALSE), + PT(53, 47, 5, 2, TRUE), + PT(60, 42, 2, 0, TRUE), + PT(40, 19, 4, 0, TRUE), + PT(25, 30, 6, 2, FALSE), + PT(12, 6, 5, 2, TRUE), + PT( 9, 4, 3, 2, FALSE), + PT(29, 47, 4, 3, FALSE), + PT(57, 7, 2, 3, FALSE), + PT(20, 4, 5, 2, TRUE), + PT(58, 47, 5, 3, FALSE), + PT(41, 21, 6, 2, TRUE), + PT(36, 2, 6, 3, FALSE), + PT(63, 2, 3, 1, FALSE), + PT(15, 24, 4, 2, FALSE), + PT(22, 29, 3, 0, TRUE), + PT(20, 22, 2, 0, FALSE), + PT(41, 27, 2, 1, TRUE), + PT(21, 14, 3, 0, TRUE), + PT(58, 46, 5, 1, TRUE), + PT( 8, 48, 2, 2, TRUE), + PT(53, 22, 6, 0, FALSE), + PT(46, 24, 6, 2, TRUE), + PT(59, 11, 3, 2, FALSE), + PT(58, 24, 2, 1, TRUE), + PT(41, 19, 3, 3, FALSE), + PT(32, 19, 4, 3, TRUE), + PT( 4, 29, 6, 2, FALSE), + PT( 0, 56, 3, 0, TRUE), + PT( 8, 57, 6, 1, FALSE), + PT(32, 16, 4, 3, FALSE), + PT( 8, 2, 5, 0, FALSE), + PT(63, 15, 2, 3, FALSE), + PT(48, 31, 3, 0, TRUE), + PT(32, 45, 2, 0, FALSE), + PT(56, 23, 3, 2, FALSE), + PT(24, 49, 4, 3, TRUE), + PT(51, 56, 6, 0, FALSE), + PT(22, 51, 4, 1, TRUE), + PT( 0, 1, 6, 3, FALSE), + PT(13, 2, 4, 1, TRUE), + PT(57, 4, 3, 3, TRUE), + PT(14, 48, 4, 2, FALSE), + PT( 6, 1, 5, 2, FALSE), + PT(52, 51, 6, 2, TRUE), + PT(22, 52, 5, 3, FALSE), + PT(50, 22, 4, 2, FALSE), + PT(38, 57, 6, 2, FALSE), + PT(31, 60, 3, 2, TRUE), + PT(40, 29, 6, 3, TRUE), + PT(23, 21, 5, 1, TRUE), + PT(39, 57, 6, 0, FALSE), + PT(11, 27, 3, 0, FALSE), + PT(53, 32, 5, 2, TRUE), + PT(11, 53, 3, 2, FALSE), + PT( 3, 14, 4, 0, TRUE), + PT( 6, 12, 4, 0, FALSE), + PT( 2, 24, 6, 2, FALSE), + PT(30, 54, 5, 2, TRUE), + PT(22, 12, 3, 0, TRUE), + PT(37, 9, 5, 2, FALSE), + PT(55, 5, 5, 3, FALSE), + PT(46, 43, 5, 2, FALSE), + PT(36, 26, 2, 2, FALSE), + PT(39, 4, 2, 0, FALSE), + PT(50, 56, 6, 1, TRUE), + PT(55, 21, 6, 2, TRUE), + PT(17, 63, 3, 2, TRUE), + PT(35, 35, 3, 3, TRUE), + PT(41, 63, 3, 2, TRUE), + PT(26, 60, 5, 1, TRUE), + PT(27, 44, 5, 2, FALSE), + PT(56, 59, 6, 3, FALSE), + PT( 4, 19, 6, 1, TRUE), + PT(44, 20, 2, 1, FALSE), + PT(26, 9, 3, 1, TRUE), + PT(54, 17, 4, 2, FALSE), + PT(58, 63, 2, 0, TRUE), + PT( 1, 14, 5, 1, TRUE), + PT(59, 3, 5, 1, FALSE), + PT( 8, 13, 5, 1, TRUE), + PT(43, 19, 4, 3, TRUE), + PT(58, 60, 3, 2, FALSE), + PT(58, 21, 5, 1, FALSE), + PT(36, 0, 2, 3, TRUE), + PT(62, 10, 2, 2, TRUE), + PT(12, 41, 5, 2, TRUE), + PT(31, 21, 6, 0, FALSE), + PT(53, 24, 3, 0, TRUE), + PT(61, 55, 6, 3, TRUE), + PT(18, 56, 3, 1, TRUE), + PT(59, 2, 4, 0, FALSE), + PT( 8, 33, 3, 0, TRUE), + PT(46, 54, 3, 2, TRUE), + PT(21, 61, 4, 2, FALSE), + PT(34, 12, 4, 3, TRUE), + PT(54, 63, 6, 1, TRUE), + PT(51, 18, 2, 0, TRUE), + PT(26, 25, 3, 3, TRUE), + PT(43, 36, 2, 1, FALSE), + PT(17, 42, 3, 0, FALSE), + PT(37, 50, 5, 1, FALSE), + PT(44, 26, 2, 1, FALSE), + PT(38, 6, 2, 0, FALSE), + PT(17, 41, 6, 1, TRUE), + PT(44, 9, 2, 2, FALSE), + PT(43, 18, 5, 1, TRUE), + PT(29, 3, 4, 2, FALSE), + PT( 0, 18, 2, 2, TRUE), + PT(34, 61, 4, 3, FALSE), + PT(21, 55, 3, 1, FALSE), + PT(15, 18, 6, 3, TRUE), + PT(36, 1, 3, 0, FALSE), + PT(42, 23, 2, 1, TRUE), + PT(20, 59, 5, 0, TRUE), + PT(42, 25, 6, 1, FALSE), + PT(45, 23, 2, 3, TRUE), + PT(11, 44, 6, 1, TRUE), + PT( 7, 45, 6, 2, FALSE), + PT( 7, 56, 3, 2, TRUE), + PT(31, 54, 4, 1, FALSE), + PT(17, 10, 2, 3, TRUE), + PT(20, 17, 2, 1, TRUE), + PT(42, 23, 4, 2, TRUE), + PT( 1, 58, 3, 2, FALSE), + PT(38, 39, 6, 0, FALSE), + PT(45, 59, 6, 2, TRUE), + PT(58, 48, 6, 2, FALSE), + PT( 6, 58, 3, 2, FALSE), + PT(45, 5, 2, 1, TRUE), + PT(33, 50, 2, 1, FALSE), + PT(62, 30, 5, 2, FALSE), + PT(58, 63, 5, 2, TRUE), + PT(32, 42, 6, 2, FALSE), + PT(38, 3, 3, 1, FALSE), + PT(25, 39, 5, 3, FALSE), + PT(49, 4, 4, 3, FALSE), + PT(42, 63, 6, 0, FALSE), + PT(37, 35, 5, 1, FALSE), + PT( 8, 8, 6, 2, TRUE), + PT(44, 48, 3, 3, FALSE), + PT( 8, 5, 3, 0, FALSE), + PT( 6, 9, 5, 2, TRUE), + PT(25, 0, 4, 3, TRUE), + PT(13, 16, 3, 0, TRUE), + PT(28, 0, 2, 1, TRUE), + PT(61, 11, 4, 2, FALSE), + PT(46, 31, 2, 3, FALSE), + PT(61, 24, 6, 2, FALSE), + PT(18, 30, 2, 2, TRUE), + PT(21, 57, 4, 2, TRUE), + PT(51, 15, 2, 3, TRUE), + PT(26, 28, 3, 1, TRUE), + PT(55, 41, 3, 1, TRUE), + PT(59, 56, 2, 1, FALSE), + PT(29, 34, 6, 2, FALSE), + PT(38, 10, 6, 0, TRUE), + PT(22, 45, 2, 1, TRUE), + PT(13, 32, 4, 3, TRUE), + PT(36, 29, 2, 3, FALSE), + PT(46, 43, 3, 0, FALSE), + PT(22, 42, 3, 1, TRUE), + PT(36, 23, 6, 3, FALSE), + PT( 2, 5, 5, 1, TRUE), + PT(55, 26, 2, 3, TRUE), + PT(17, 61, 5, 2, FALSE), + PT(30, 47, 4, 1, FALSE), + PT(44, 41, 3, 1, FALSE), + PT(47, 4, 4, 2, TRUE), + PT(54, 12, 6, 2, TRUE), + PT(48, 62, 2, 1, FALSE), + PT(17, 48, 6, 3, TRUE), + PT(18, 33, 5, 3, FALSE), + PT(33, 48, 2, 3, TRUE), + PT(44, 61, 4, 2, FALSE), + PT(17, 35, 2, 2, FALSE), + PT(26, 50, 2, 3, TRUE), + PT(57, 39, 3, 0, FALSE), + PT(15, 36, 3, 0, TRUE), + PT( 0, 61, 6, 3, TRUE), + PT(44, 60, 3, 2, FALSE), + PT(11, 57, 4, 1, TRUE), + PT(14, 4, 3, 3, TRUE), + PT(28, 49, 2, 2, FALSE), + PT( 0, 4, 2, 2, TRUE), + PT(38, 42, 5, 1, FALSE), + PT(32, 37, 5, 1, FALSE), + PT(11, 60, 6, 1, TRUE), + PT(17, 11, 5, 3, FALSE), + PT(55, 34, 5, 3, FALSE), + PT(14, 34, 4, 3, FALSE), + PT(24, 45, 4, 3, TRUE), + PT( 6, 12, 3, 2, FALSE), + PT(38, 24, 5, 3, TRUE), + PT(58, 1, 5, 1, FALSE), + PT(47, 49, 6, 2, FALSE), + PT(31, 52, 3, 1, FALSE), + PT(49, 5, 2, 0, FALSE), + PT(46, 23, 6, 2, FALSE), + PT(24, 34, 4, 1, TRUE), + PT(35, 33, 6, 1, FALSE), + PT( 7, 8, 4, 1, FALSE), + PT(38, 28, 4, 1, FALSE), + PT(49, 18, 5, 3, TRUE), + PT( 8, 31, 2, 0, FALSE), + PT(39, 21, 5, 1, FALSE), + PT(31, 11, 4, 3, FALSE), + PT(47, 20, 6, 2, TRUE), + PT(36, 31, 4, 3, FALSE), + PT(59, 35, 6, 1, TRUE), + PT(32, 62, 5, 2, TRUE), + PT(23, 12, 2, 2, TRUE), + PT(19, 57, 3, 1, FALSE), + PT(48, 20, 4, 2, TRUE), + PT( 9, 7, 2, 3, TRUE), + PT(56, 56, 3, 3, TRUE), + PT(41, 36, 4, 3, TRUE), + PT(23, 39, 5, 0, FALSE), + PT(27, 18, 5, 1, FALSE), + PT(43, 61, 5, 2, TRUE), + PT(25, 52, 3, 2, FALSE), + PT( 1, 29, 2, 0, FALSE), + PT( 8, 57, 2, 0, TRUE), + PT(14, 54, 3, 1, TRUE), + PT(38, 19, 2, 0, FALSE), + PT(22, 40, 3, 3, FALSE), + PT(60, 40, 2, 3, TRUE), + PT(62, 57, 6, 2, FALSE), + PT(10, 3, 5, 3, FALSE), + PT(55, 26, 2, 1, TRUE), + PT(43, 51, 4, 3, FALSE), + PT(19, 44, 4, 0, TRUE), + PT(37, 20, 2, 0, FALSE), + PT(22, 11, 6, 2, TRUE), + PT(29, 53, 6, 1, TRUE), + PT(33, 8, 6, 1, TRUE), + PT(40, 33, 3, 1, FALSE), + PT(18, 12, 3, 1, TRUE), + PT(54, 42, 3, 0, TRUE), + PT(44, 43, 4, 1, TRUE), + PT( 1, 15, 4, 3, FALSE), + PT(23, 12, 3, 0, FALSE), + PT( 9, 15, 2, 0, TRUE), + PT(43, 36, 3, 2, FALSE), + PT( 9, 9, 2, 2, TRUE), + PT(54, 8, 2, 1, TRUE), + PT(32, 57, 4, 0, TRUE), + PT( 0, 58, 3, 3, TRUE), + PT(43, 54, 6, 0, TRUE), + PT( 2, 55, 2, 1, TRUE), + PT( 4, 52, 6, 2, TRUE), + PT(55, 61, 3, 1, FALSE), + PT(23, 61, 2, 1, TRUE), + PT(43, 54, 5, 3, TRUE), + PT(19, 30, 2, 1, TRUE), + PT(62, 17, 6, 1, TRUE), + PT(39, 58, 5, 2, TRUE), + PT(30, 49, 3, 1, FALSE), + PT( 3, 3, 5, 2, TRUE), + PT(37, 55, 3, 3, TRUE), + PT(17, 1, 4, 1, FALSE), + PT(28, 18, 2, 3, TRUE), + PT(48, 58, 6, 0, FALSE), + PT(23, 29, 5, 0, TRUE), + PT(14, 19, 4, 3, TRUE), + PT(26, 46, 4, 2, FALSE), + PT(45, 0, 3, 2, FALSE), + PT(23, 40, 3, 2, TRUE), + PT( 9, 31, 5, 3, FALSE), + PT(26, 45, 4, 3, FALSE), + PT(10, 19, 6, 1, FALSE), + PT(62, 0, 4, 3, TRUE), + PT(11, 59, 6, 0, FALSE), + PT( 8, 58, 5, 2, TRUE), + PT(34, 18, 3, 3, FALSE), + PT(52, 29, 5, 1, TRUE), + PT(38, 34, 6, 2, TRUE), + PT(23, 44, 2, 3, TRUE), + PT(41, 19, 5, 2, TRUE), + PT(45, 16, 2, 0, FALSE), + PT(32, 49, 4, 1, TRUE), + PT(30, 51, 3, 0, FALSE), + PT(51, 6, 5, 2, TRUE), + PT(38, 20, 4, 3, TRUE), + PT(34, 29, 5, 1, FALSE), + PT(45, 6, 3, 0, FALSE), + PT( 7, 9, 5, 3, FALSE), + PT(33, 21, 5, 3, FALSE), + PT(33, 56, 4, 1, TRUE), + PT(53, 11, 6, 2, FALSE), + PT(36, 11, 4, 1, FALSE), + PT(30, 1, 2, 3, TRUE), + PT(11, 36, 2, 0, TRUE), + PT(23, 7, 4, 0, FALSE), + PT(20, 37, 6, 1, FALSE), + PT(26, 14, 5, 3, TRUE), + PT(53, 23, 3, 3, TRUE), + PT(12, 8, 4, 0, TRUE), + PT(48, 53, 3, 3, TRUE), + PT(12, 11, 4, 0, FALSE), + PT( 4, 16, 2, 0, TRUE), + PT(53, 17, 3, 3, FALSE), + PT(51, 61, 2, 3, FALSE), + PT(30, 43, 3, 2, TRUE), + PT(26, 25, 2, 0, FALSE), + PT( 4, 6, 4, 1, FALSE), + PT( 3, 61, 4, 2, FALSE), + PT(42, 14, 6, 2, TRUE), + PT( 3, 62, 2, 3, TRUE), + PT(11, 24, 6, 3, FALSE), + PT(61, 13, 4, 3, FALSE), + PT(53, 18, 4, 0, FALSE), + PT(31, 13, 2, 3, FALSE), + PT(35, 50, 3, 1, FALSE), + PT( 0, 61, 4, 3, FALSE), + PT(48, 25, 6, 3, FALSE), + PT(18, 14, 4, 1, TRUE), + PT( 1, 35, 5, 0, FALSE), + PT(59, 49, 2, 0, TRUE), + PT(45, 28, 6, 3, FALSE), + PT(42, 5, 2, 3, FALSE), + PT(20, 14, 6, 0, FALSE), + PT(58, 55, 3, 0, TRUE), + PT(31, 48, 4, 2, TRUE), + PT(16, 38, 5, 3, TRUE), + PT(34, 17, 3, 3, TRUE), + PT(46, 43, 3, 3, FALSE), + PT(22, 22, 4, 0, TRUE), + PT(50, 24, 6, 2, TRUE), + PT(35, 50, 3, 1, FALSE), + PT(61, 13, 3, 0, TRUE), + PT(57, 9, 4, 1, TRUE), + PT(48, 46, 4, 2, FALSE), + PT(30, 15, 4, 2, FALSE), + PT( 9, 33, 6, 0, TRUE), + PT( 5, 3, 2, 0, TRUE), + PT( 5, 34, 5, 1, FALSE), + PT( 3, 7, 6, 3, TRUE), + PT( 4, 8, 2, 1, TRUE), + PT( 5, 16, 6, 2, FALSE), + PT(55, 20, 5, 0, TRUE), + PT(10, 36, 6, 1, FALSE), + PT(52, 30, 3, 1, TRUE), + PT(18, 23, 5, 3, FALSE), + PT( 1, 2, 2, 1, TRUE), + PT(10, 12, 2, 0, TRUE), + PT( 2, 20, 2, 1, TRUE), + PT(13, 37, 4, 1, TRUE), + PT( 0, 7, 3, 1, FALSE), + PT(28, 40, 6, 2, TRUE), + PT( 8, 14, 5, 2, FALSE), + PT(27, 60, 2, 2, TRUE), + PT(28, 25, 3, 2, TRUE), + PT(50, 19, 3, 1, FALSE), + PT(28, 0, 6, 3, TRUE), + PT(34, 27, 6, 2, TRUE), + PT(57, 62, 2, 2, FALSE), + PT(50, 6, 6, 0, TRUE), + PT(23, 5, 5, 1, TRUE), + PT( 1, 15, 4, 0, FALSE), + PT(30, 15, 6, 2, FALSE), + PT(24, 3, 3, 3, TRUE), + PT(43, 0, 2, 2, FALSE), + PT(21, 58, 6, 0, FALSE), + PT(37, 48, 4, 0, TRUE), + PT(11, 0, 6, 3, TRUE), + PT(36, 55, 3, 2, TRUE), + PT(41, 33, 2, 3, FALSE), + PT(36, 15, 5, 2, FALSE), + PT(62, 21, 6, 3, FALSE), + PT(60, 45, 4, 1, TRUE), + PT(61, 60, 2, 3, TRUE), + PT(26, 28, 2, 1, TRUE), + PT(10, 41, 4, 1, FALSE), + PT(37, 63, 4, 3, FALSE), + PT(59, 57, 5, 3, TRUE), + PT(29, 8, 2, 3, FALSE), + PT(11, 25, 2, 2, FALSE), + PT(18, 1, 5, 2, FALSE), + PT(53, 17, 5, 1, FALSE), + PT( 2, 0, 2, 1, TRUE), + PT(57, 42, 6, 2, TRUE), + PT( 7, 26, 2, 0, TRUE), + PT(36, 14, 3, 3, FALSE), + PT(14, 44, 2, 2, TRUE), + PT( 8, 49, 3, 1, TRUE), + PT(33, 29, 4, 3, FALSE), + PT(29, 28, 5, 1, FALSE), + PT(29, 36, 2, 1, TRUE), + PT( 1, 0, 3, 0, FALSE), + PT(40, 42, 6, 3, TRUE), + PT(21, 15, 2, 1, TRUE), + PT(16, 50, 6, 3, FALSE), + PT(34, 19, 6, 0, TRUE), + PT(19, 5, 3, 3, FALSE), + PT(23, 53, 6, 2, TRUE), + PT(59, 14, 4, 2, FALSE), + PT(53, 58, 3, 2, TRUE), + PT(27, 54, 3, 1, TRUE), + PT( 3, 29, 4, 2, FALSE), + PT(15, 22, 6, 0, FALSE), + PT(45, 9, 4, 2, TRUE), + PT( 5, 33, 2, 1, TRUE), + PT(10, 39, 6, 3, FALSE), + PT( 4, 13, 3, 2, FALSE), + PT( 6, 62, 4, 0, TRUE), + PT(42, 39, 6, 1, TRUE), + PT(40, 14, 2, 2, TRUE), + PT(11, 23, 3, 2, TRUE), + PT(29, 50, 5, 2, TRUE), + PT( 8, 61, 5, 0, TRUE), + PT(33, 50, 2, 3, TRUE), + PT(51, 49, 4, 1, FALSE), + PT(14, 3, 4, 0, TRUE), + PT(13, 11, 2, 3, FALSE), + PT(62, 42, 5, 3, FALSE), + PT(25, 54, 5, 1, FALSE), + PT(13, 0, 2, 2, FALSE), + PT(34, 7, 6, 3, FALSE), + PT(10, 9, 2, 2, TRUE), + PT(20, 16, 4, 1, FALSE), + PT( 7, 22, 5, 2, FALSE), + PT(54, 19, 2, 2, TRUE), + PT( 9, 47, 3, 1, TRUE), + PT(32, 59, 5, 3, FALSE), + PT(58, 58, 2, 3, FALSE), + PT(13, 21, 5, 1, FALSE), + PT(57, 19, 5, 1, TRUE), + PT(11, 1, 5, 1, FALSE), + PT(19, 23, 3, 3, FALSE), + PT( 8, 23, 3, 3, FALSE), + PT(12, 15, 6, 2, FALSE), + PT(31, 49, 2, 1, FALSE), + PT( 7, 58, 3, 2, TRUE), + PT(53, 30, 2, 1, FALSE), + PT(36, 44, 2, 2, TRUE), + PT(14, 33, 3, 0, TRUE), + PT(52, 59, 6, 1, TRUE), + PT(25, 15, 5, 0, FALSE), + PT(16, 47, 5, 3, FALSE), + PT(35, 39, 6, 0, TRUE), + PT(57, 46, 3, 0, FALSE), + PT(60, 63, 4, 2, FALSE), + PT( 7, 35, 6, 0, FALSE), + PT(40, 19, 6, 2, TRUE), + PT(19, 10, 2, 0, FALSE), + PT(53, 25, 6, 1, TRUE), + PT(35, 40, 5, 0, TRUE), + PT(19, 47, 3, 1, FALSE), + PT(58, 25, 2, 2, FALSE), + PT(55, 54, 4, 3, FALSE), + PT(32, 59, 2, 2, TRUE), + PT(55, 57, 2, 0, FALSE), + PT(60, 33, 6, 2, FALSE), + PT(28, 56, 6, 0, FALSE), + PT(21, 7, 4, 3, FALSE), + PT(39, 33, 3, 0, TRUE), + PT(24, 17, 4, 1, TRUE), + PT(48, 40, 6, 3, TRUE), + PT(50, 45, 3, 3, TRUE), + PT(44, 63, 6, 0, FALSE), + PT(29, 47, 4, 3, FALSE), + PT( 1, 17, 3, 2, FALSE), + PT(59, 15, 2, 1, FALSE), + PT(42, 23, 4, 3, TRUE), + PT( 5, 0, 3, 1, TRUE), + PT(37, 28, 6, 1, FALSE), + PT( 4, 34, 5, 2, TRUE), + PT(16, 15, 4, 2, TRUE), + PT(13, 57, 6, 0, FALSE), + PT(11, 46, 4, 3, TRUE), + PT(45, 52, 2, 2, TRUE), + PT(62, 48, 6, 3, FALSE), + PT(22, 38, 5, 1, FALSE), + PT( 5, 63, 5, 1, TRUE), + PT(32, 59, 5, 3, FALSE), + PT(59, 28, 5, 3, TRUE), + PT( 1, 24, 2, 3, FALSE), + PT(22, 61, 2, 0, FALSE), + PT(10, 31, 3, 0, FALSE), + PT(23, 15, 4, 1, FALSE), + PT( 6, 19, 2, 0, TRUE), + PT(56, 33, 2, 3, TRUE), + PT(23, 10, 6, 3, TRUE), + PT(28, 25, 6, 0, FALSE), + PT(22, 56, 6, 0, TRUE), + PT(48, 16, 6, 3, FALSE), + PT(49, 47, 4, 3, FALSE), + PT(60, 27, 4, 1, TRUE), + PT(51, 47, 3, 0, TRUE), + PT(22, 53, 4, 2, TRUE), + PT(58, 24, 3, 3, TRUE), + PT(55, 1, 3, 3, FALSE), + PT(13, 24, 2, 1, FALSE), + PT(31, 28, 3, 1, TRUE), + PT( 7, 52, 5, 2, TRUE), + PT(11, 63, 6, 1, TRUE), + PT(30, 52, 3, 2, TRUE), + PT(44, 19, 5, 2, FALSE), + PT(32, 32, 2, 1, TRUE), + PT(32, 15, 6, 0, TRUE), + PT( 8, 15, 4, 2, FALSE), + PT(24, 61, 3, 2, FALSE), + PT(54, 52, 4, 3, TRUE), + PT(51, 42, 4, 2, TRUE), + PT(45, 48, 4, 3, FALSE), + PT(61, 55, 4, 3, FALSE), + PT(37, 17, 2, 0, TRUE), + PT( 3, 5, 3, 0, FALSE), + PT(16, 4, 5, 0, TRUE), + PT( 7, 46, 6, 3, FALSE), + PT(42, 41, 2, 2, TRUE), + PT(58, 14, 6, 1, TRUE), + PT(42, 6, 5, 0, TRUE), + PT(61, 1, 5, 0, TRUE), + PT(39, 14, 2, 3, FALSE), + PT(29, 40, 3, 1, TRUE), + PT(16, 51, 5, 1, TRUE), + PT(12, 20, 3, 2, TRUE), + PT(21, 63, 4, 2, TRUE), + PT(55, 35, 3, 3, FALSE), + PT( 4, 44, 3, 2, FALSE), + PT(21, 52, 5, 1, FALSE), + PT( 9, 47, 2, 2, TRUE), + PT( 2, 63, 2, 2, FALSE), + PT(25, 44, 6, 1, TRUE), + PT(57, 50, 4, 0, FALSE), + PT(42, 24, 6, 1, FALSE), + PT(23, 35, 4, 0, TRUE), + PT(11, 45, 4, 2, TRUE), + PT(36, 58, 5, 2, TRUE), + PT(49, 63, 6, 2, FALSE), + PT(24, 25, 4, 2, FALSE), + PT(30, 21, 3, 1, FALSE), + PT(23, 51, 5, 1, TRUE), + PT(35, 9, 4, 3, FALSE), + PT(27, 13, 2, 2, TRUE), + PT(54, 38, 5, 0, FALSE), + PT(58, 28, 2, 2, FALSE), + PT(12, 62, 2, 0, FALSE), + PT(24, 6, 6, 2, TRUE), + PT(55, 38, 6, 3, FALSE), + PT(33, 38, 2, 3, TRUE), + PT(61, 28, 5, 2, FALSE), + PT(22, 37, 3, 2, TRUE), + PT(30, 11, 3, 3, FALSE), + PT(29, 13, 6, 1, FALSE), + PT( 8, 31, 3, 1, TRUE), + PT(18, 28, 2, 1, FALSE), + PT(32, 42, 5, 0, FALSE), + PT( 6, 59, 6, 2, TRUE), + PT(57, 14, 3, 3, FALSE), + PT(49, 48, 5, 0, FALSE), + PT( 2, 33, 2, 2, FALSE), + PT( 6, 30, 5, 0, TRUE), + PT(22, 9, 3, 2, FALSE), + PT(39, 50, 5, 2, TRUE), + PT(57, 3, 4, 3, TRUE), + PT(41, 9, 3, 3, FALSE), + PT(27, 17, 3, 2, FALSE), + PT(40, 58, 5, 2, FALSE), + PT( 3, 3, 3, 0, FALSE), + PT(35, 9, 5, 3, TRUE), + PT(48, 23, 4, 1, TRUE), + PT(15, 37, 6, 1, TRUE), + PT( 6, 36, 6, 3, TRUE), + PT(34, 9, 6, 1, TRUE), + PT(44, 9, 5, 1, FALSE), + PT(12, 18, 5, 1, FALSE), + PT(40, 32, 2, 0, FALSE), + PT(21, 41, 6, 1, TRUE), + PT(15, 26, 2, 1, TRUE), + PT(19, 24, 6, 3, FALSE), + PT(46, 22, 2, 1, TRUE), + PT(60, 26, 2, 2, TRUE), + PT(58, 17, 6, 1, FALSE), + PT( 2, 10, 5, 2, FALSE), + PT(25, 57, 2, 0, TRUE), + PT(49, 62, 3, 2, TRUE), + PT(50, 20, 6, 1, FALSE), + PT(18, 46, 6, 2, FALSE), + PT(62, 54, 4, 1, TRUE), + PT(55, 62, 2, 2, TRUE), + PT(21, 53, 6, 2, FALSE), + PT( 1, 58, 5, 2, FALSE), + PT(38, 37, 4, 1, FALSE), + PT( 1, 43, 6, 3, TRUE), + PT(28, 61, 6, 1, TRUE), + PT(62, 16, 3, 2, FALSE), + PT(38, 51, 3, 0, TRUE), + PT( 5, 25, 2, 3, TRUE), + PT(18, 56, 3, 2, FALSE), + PT(21, 60, 6, 1, FALSE), + PT(63, 15, 6, 3, TRUE), + PT( 2, 57, 6, 1, FALSE), + PT(19, 0, 3, 2, TRUE), + PT(29, 44, 2, 0, FALSE), + PT(57, 19, 6, 0, TRUE), + PT(15, 55, 3, 0, TRUE), + PT( 9, 13, 5, 1, FALSE), + PT(32, 47, 6, 1, FALSE), + PT(59, 52, 4, 1, FALSE), + PT(38, 20, 2, 0, FALSE), + PT(36, 61, 4, 1, FALSE), + PT(11, 49, 4, 1, TRUE), + PT(47, 45, 5, 1, FALSE), + PT(48, 4, 6, 2, TRUE), + PT(25, 32, 5, 1, FALSE), + PT(22, 54, 6, 3, TRUE), + PT(20, 40, 6, 3, TRUE), + PT(17, 11, 4, 3, TRUE), + PT(29, 6, 5, 0, TRUE), + PT(53, 22, 5, 3, FALSE), + PT(36, 46, 5, 0, TRUE), + PT(54, 20, 5, 1, FALSE), + PT(33, 12, 3, 3, TRUE), + PT(63, 57, 3, 0, TRUE), + PT(39, 16, 5, 1, FALSE), + PT(30, 18, 6, 2, FALSE), + PT(16, 36, 6, 2, FALSE), + PT(29, 19, 3, 2, TRUE), + PT(23, 22, 6, 3, TRUE), + PT(39, 27, 4, 3, TRUE), + PT( 7, 36, 4, 0, TRUE), + PT(55, 33, 2, 0, TRUE), + PT(55, 40, 4, 2, FALSE), + PT(25, 2, 3, 2, FALSE), + PT(20, 18, 3, 2, TRUE), + PT(27, 36, 5, 3, FALSE), + PT(46, 58, 2, 2, TRUE), + PT(55, 52, 4, 0, TRUE), + PT(51, 45, 5, 0, TRUE), + PT(47, 30, 6, 2, FALSE), + PT(41, 60, 2, 1, FALSE), + PT( 5, 21, 4, 0, FALSE), + PT( 5, 62, 3, 0, TRUE), + PT(24, 11, 6, 0, FALSE), + PT(47, 2, 4, 3, TRUE), + PT(20, 28, 6, 2, FALSE), + PT(18, 32, 6, 0, FALSE), + PT(43, 34, 3, 1, TRUE), + PT( 6, 49, 5, 0, FALSE), + PT(21, 45, 2, 1, FALSE), + PT( 1, 14, 2, 1, TRUE), + PT(19, 12, 5, 0, FALSE), + PT( 7, 42, 2, 2, FALSE), + PT(29, 54, 2, 2, FALSE), + PT(21, 43, 4, 3, FALSE), + PT( 3, 37, 2, 2, TRUE), + PT(62, 59, 4, 0, FALSE), + PT(53, 12, 4, 2, TRUE), + PT(43, 22, 6, 2, TRUE), + PT(30, 49, 5, 2, FALSE), + PT( 6, 3, 5, 0, TRUE), + PT(36, 7, 3, 3, TRUE), + PT(50, 47, 3, 0, TRUE), + PT(37, 33, 6, 0, TRUE), + PT(34, 38, 3, 2, TRUE), + PT( 0, 27, 3, 0, FALSE), + PT(42, 36, 6, 0, TRUE), + PT(32, 6, 5, 3, TRUE), + PT(30, 50, 4, 3, FALSE), + PT(50, 57, 2, 1, FALSE), + PT(32, 1, 3, 0, TRUE), + PT(15, 21, 2, 2, TRUE), + PT(39, 16, 5, 3, FALSE), + PT( 9, 37, 3, 0, TRUE), + PT(41, 55, 6, 0, FALSE), + PT(19, 28, 3, 2, TRUE), + PT(41, 45, 4, 3, FALSE), + PT( 2, 26, 2, 3, FALSE), + PT(29, 43, 3, 2, FALSE), + PT(24, 4, 6, 2, FALSE), + PT(40, 42, 4, 0, TRUE), + PT(21, 27, 5, 3, FALSE), + PT(22, 1, 2, 0, FALSE), + PT( 5, 9, 2, 2, FALSE), + PT(34, 3, 4, 1, FALSE), + PT( 2, 27, 6, 2, FALSE), + PT(41, 42, 4, 1, TRUE), + PT(38, 54, 2, 1, TRUE), + PT(35, 61, 3, 1, FALSE), + PT(29, 16, 4, 2, FALSE), + PT(37, 43, 6, 3, TRUE), + PT(25, 36, 4, 3, FALSE), + PT(40, 19, 2, 3, FALSE), + PT(23, 20, 3, 0, TRUE), + PT(11, 47, 4, 2, TRUE), + PT(55, 52, 6, 3, TRUE), + PT(57, 33, 3, 1, TRUE), + PT(15, 61, 5, 2, TRUE), + PT(13, 16, 4, 0, FALSE), + PT( 5, 11, 5, 2, TRUE), + PT( 1, 18, 4, 2, FALSE), + PT(24, 61, 6, 1, FALSE), + PT( 9, 33, 4, 3, FALSE), + PT(26, 14, 3, 3, TRUE), + PT(48, 6, 3, 3, TRUE), + PT(11, 60, 5, 0, TRUE), + PT( 7, 62, 4, 3, TRUE), + PT(19, 30, 3, 1, FALSE), + PT(19, 7, 4, 1, TRUE), + PT(16, 52, 3, 3, FALSE), + PT(50, 23, 4, 1, TRUE), + PT(53, 22, 6, 0, TRUE), + PT(50, 46, 3, 1, TRUE), + PT(40, 14, 4, 1, FALSE), + PT(20, 58, 4, 1, TRUE), + PT(34, 3, 5, 0, TRUE), + PT(42, 16, 4, 0, FALSE), + PT(62, 60, 4, 3, TRUE), + PT(22, 32, 2, 1, FALSE), + PT(63, 36, 6, 0, TRUE), + PT(13, 46, 6, 1, FALSE), + PT(47, 23, 5, 2, TRUE), + PT(54, 59, 2, 3, TRUE), + PT(36, 35, 3, 0, FALSE), + PT(55, 29, 2, 1, TRUE), + PT(23, 58, 3, 1, FALSE), + PT(10, 61, 3, 3, FALSE), + PT( 5, 18, 2, 3, FALSE), + PT(51, 50, 4, 2, TRUE), + PT(29, 31, 5, 0, TRUE), + PT(52, 44, 4, 3, FALSE), + PT(32, 41, 6, 2, TRUE), + PT(14, 50, 2, 3, TRUE), + PT( 1, 57, 5, 2, TRUE), + PT(39, 36, 4, 1, TRUE), + PT(40, 63, 3, 0, FALSE), + PT(57, 56, 4, 2, TRUE), + PT(35, 17, 2, 0, TRUE), + PT(25, 44, 5, 0, TRUE), + PT(48, 8, 5, 0, FALSE), + PT(37, 39, 3, 2, TRUE), + PT(23, 37, 4, 0, TRUE), + PT( 9, 61, 2, 3, FALSE), + PT(27, 15, 5, 2, FALSE), + PT(27, 18, 4, 1, FALSE), + PT(40, 62, 4, 3, FALSE), + PT(52, 16, 3, 1, TRUE), + PT( 2, 52, 2, 2, TRUE), + PT(26, 41, 3, 0, TRUE), + PT(41, 17, 6, 0, TRUE), + PT(18, 39, 2, 3, TRUE), + PT(39, 39, 5, 3, TRUE), + PT(52, 39, 4, 2, FALSE), + PT( 3, 25, 6, 3, FALSE), + PT(23, 29, 6, 1, TRUE), + PT(25, 37, 3, 1, FALSE), + PT(43, 57, 2, 1, TRUE), + PT(59, 51, 3, 2, TRUE), + PT(39, 49, 6, 2, FALSE), + PT(40, 51, 6, 3, TRUE), + PT( 9, 48, 3, 1, TRUE), + PT( 3, 58, 4, 3, TRUE), + PT(25, 17, 3, 3, TRUE), + PT(11, 26, 6, 2, FALSE), + PT(61, 42, 2, 2, TRUE), + PT( 4, 36, 6, 3, FALSE), + PT(48, 35, 6, 0, FALSE), + PT(15, 34, 3, 1, TRUE), + PT(61, 61, 4, 2, FALSE), + PT(41, 29, 2, 1, FALSE), + PT(22, 25, 5, 3, FALSE), + PT( 3, 18, 2, 3, TRUE), + PT(24, 37, 6, 1, TRUE), + PT(47, 35, 3, 1, FALSE), + PT(26, 53, 4, 3, TRUE), + PT(33, 38, 3, 0, TRUE), + PT(27, 48, 3, 0, FALSE), + PT(43, 34, 5, 2, TRUE), + PT(44, 26, 6, 2, FALSE), + PT(62, 18, 3, 0, TRUE), + PT(40, 39, 2, 2, TRUE), + PT(27, 17, 2, 1, FALSE), + PT(23, 21, 2, 0, FALSE), + PT(52, 55, 4, 2, TRUE), + PT(18, 63, 2, 2, TRUE), + PT(49, 13, 6, 3, TRUE), + PT(62, 42, 5, 2, TRUE), + PT(15, 36, 4, 2, FALSE), + PT(60, 63, 3, 3, TRUE), + PT(29, 52, 2, 3, TRUE), + PT(26, 35, 3, 3, TRUE), + PT(55, 15, 2, 0, FALSE), + PT(50, 52, 6, 2, TRUE), + PT(25, 5, 4, 1, FALSE), + PT(51, 22, 6, 2, FALSE), + PT(30, 20, 3, 3, FALSE), + PT( 8, 19, 5, 0, TRUE), + PT(58, 55, 6, 0, FALSE), + PT(29, 54, 2, 2, TRUE), + PT(41, 46, 3, 2, TRUE), + PT(50, 46, 4, 1, TRUE), + PT(53, 23, 3, 2, FALSE), + PT(54, 29, 2, 1, TRUE), + PT(35, 52, 6, 2, FALSE), + PT(36, 26, 6, 3, TRUE), + PT(47, 38, 5, 3, FALSE), + PT(30, 23, 3, 1, FALSE), + PT(31, 21, 3, 3, TRUE), + PT(43, 31, 3, 0, TRUE), + PT(10, 51, 3, 1, FALSE), + PT(53, 49, 4, 2, FALSE), + PT(45, 23, 5, 2, FALSE), + PT(12, 33, 6, 3, FALSE), + PT(44, 53, 6, 2, TRUE), + PT(27, 3, 4, 3, TRUE), + PT( 1, 13, 3, 2, TRUE), + PT(28, 14, 2, 0, TRUE), + PT(17, 43, 2, 0, FALSE), + PT(37, 59, 4, 0, FALSE), + PT(31, 23, 3, 0, TRUE), + PT(32, 8, 6, 3, FALSE), + PT(19, 56, 3, 0, TRUE), + PT(27, 43, 4, 2, FALSE), + PT(11, 31, 5, 0, TRUE), + PT(39, 21, 5, 2, FALSE), + PT(55, 57, 2, 0, FALSE), + PT(58, 21, 5, 3, FALSE), + PT(47, 17, 6, 3, FALSE), + PT(36, 4, 4, 0, FALSE), + PT(59, 42, 6, 2, TRUE), + PT(39, 53, 6, 2, FALSE), + PT(13, 27, 4, 0, FALSE), + PT(16, 34, 6, 3, TRUE), + PT(31, 56, 4, 3, TRUE), + PT(49, 15, 5, 0, FALSE), + PT(40, 37, 2, 2, TRUE), + PT( 0, 29, 4, 2, TRUE), + PT(49, 40, 5, 0, FALSE), + PT(11, 58, 3, 2, TRUE), + PT(45, 19, 3, 1, TRUE), + PT( 3, 55, 5, 3, FALSE), + PT(29, 40, 3, 0, TRUE), + PT( 8, 45, 4, 1, FALSE), + PT(39, 57, 6, 1, FALSE), + PT(63, 47, 3, 2, TRUE), + PT(51, 52, 5, 0, FALSE), + PT(24, 8, 6, 0, TRUE), + PT(35, 31, 2, 1, TRUE), + PT(13, 44, 4, 1, TRUE), + PT(58, 45, 3, 1, FALSE), + PT( 2, 37, 2, 1, TRUE), + PT(32, 54, 6, 2, FALSE), + PT(18, 43, 5, 2, TRUE), + PT(53, 53, 6, 2, FALSE), + PT(35, 32, 4, 0, TRUE), + PT(58, 25, 3, 1, TRUE), + PT(31, 43, 3, 0, TRUE), + PT(53, 14, 3, 0, TRUE), + PT(38, 36, 6, 3, TRUE), + PT(24, 8, 2, 0, FALSE), + PT(12, 22, 5, 2, TRUE), + PT(31, 52, 4, 0, TRUE), + PT( 5, 56, 3, 0, TRUE), + PT(20, 33, 4, 2, FALSE), + PT(17, 49, 2, 2, FALSE), + PT(62, 56, 5, 0, TRUE), + PT(63, 8, 4, 2, TRUE), + PT(42, 31, 4, 2, TRUE), + PT(37, 6, 5, 0, FALSE), + PT(11, 30, 2, 2, FALSE), + PT(26, 56, 4, 1, FALSE), + PT(36, 24, 5, 0, TRUE), + PT(26, 17, 4, 0, FALSE), + PT(59, 58, 3, 3, FALSE), + PT(28, 38, 3, 1, FALSE), + PT( 5, 50, 3, 0, TRUE), + PT(57, 42, 6, 0, TRUE), + PT( 9, 7, 4, 2, TRUE), + PT( 5, 62, 2, 3, FALSE), + PT(52, 38, 2, 2, FALSE), + PT(27, 50, 4, 3, FALSE), + PT( 5, 8, 6, 3, TRUE), + PT(15, 3, 4, 0, FALSE), + PT(42, 57, 6, 0, TRUE), + PT( 8, 1, 3, 3, FALSE), + PT(29, 35, 6, 0, TRUE), + PT(40, 27, 5, 0, FALSE), + PT(30, 55, 2, 2, FALSE), + PT(19, 14, 5, 0, FALSE), + PT(42, 59, 6, 3, TRUE), + PT(47, 28, 5, 0, FALSE), + PT(48, 48, 3, 1, FALSE), + PT(54, 31, 2, 3, FALSE), + PT(62, 13, 2, 2, TRUE), + PT(46, 22, 3, 0, FALSE), + PT(21, 55, 4, 0, FALSE), + PT(42, 51, 6, 0, FALSE), + PT(43, 14, 4, 2, TRUE), + PT(24, 32, 2, 3, FALSE), + PT( 2, 25, 4, 2, TRUE), + PT(10, 46, 6, 0, FALSE), + PT(22, 3, 2, 0, TRUE), + PT( 4, 39, 4, 2, TRUE), + PT(27, 28, 4, 0, TRUE), + PT(41, 4, 4, 3, TRUE), + PT(61, 32, 3, 3, FALSE), + PT(40, 51, 6, 0, TRUE), + PT(30, 57, 2, 0, FALSE), + PT(49, 41, 3, 3, FALSE), + PT( 6, 37, 5, 0, FALSE), + PT(25, 59, 2, 1, FALSE), + PT(11, 27, 3, 2, FALSE), + PT(62, 55, 4, 0, FALSE), + PT(10, 55, 6, 1, TRUE), + PT( 2, 44, 4, 2, TRUE), + PT(21, 24, 2, 2, FALSE), + PT(59, 32, 3, 2, FALSE), + PT(34, 59, 3, 2, FALSE), + PT(36, 52, 6, 2, TRUE), + PT(15, 47, 6, 0, TRUE), + PT(59, 23, 6, 2, TRUE), + PT(48, 57, 6, 3, TRUE), + PT(13, 21, 2, 0, TRUE), + PT(16, 3, 3, 3, FALSE), + PT(26, 57, 6, 1, TRUE), + PT(47, 46, 5, 0, FALSE), + PT(28, 40, 6, 3, FALSE), + PT(40, 24, 3, 3, TRUE), + PT(21, 1, 6, 0, FALSE), + PT(62, 50, 5, 0, FALSE), + PT(52, 47, 4, 1, TRUE), + PT( 7, 12, 6, 3, FALSE), + PT(40, 44, 6, 2, FALSE), + PT(42, 12, 3, 3, TRUE), + PT(63, 32, 2, 1, TRUE), + PT(43, 23, 4, 3, TRUE), + PT(40, 41, 5, 1, FALSE), + PT(60, 19, 6, 3, FALSE), + PT(38, 45, 5, 1, FALSE), + PT(10, 6, 3, 3, FALSE), + PT(32, 4, 3, 1, FALSE), + PT( 2, 7, 6, 2, TRUE), + PT(14, 24, 6, 0, FALSE), + PT( 0, 52, 6, 2, FALSE), + PT(47, 20, 6, 3, TRUE), + PT(33, 48, 3, 3, TRUE), + PT(21, 55, 3, 1, TRUE), + PT(58, 11, 6, 1, FALSE), + PT(34, 34, 4, 0, TRUE), + PT(27, 53, 4, 1, TRUE), + PT(13, 3, 3, 2, FALSE), + PT(35, 59, 2, 1, TRUE), + PT(14, 29, 3, 3, TRUE), + PT(29, 63, 5, 3, FALSE), + PT(57, 39, 5, 3, FALSE), + PT(15, 56, 4, 0, FALSE), + PT(49, 60, 6, 2, TRUE), + PT(11, 15, 5, 3, FALSE), + PT( 6, 6, 5, 0, FALSE), + PT(37, 57, 4, 1, TRUE), + PT(10, 50, 2, 2, TRUE), + PT(15, 29, 4, 2, TRUE), + PT(12, 13, 6, 2, FALSE), + PT(18, 46, 4, 0, TRUE), + PT(54, 24, 3, 3, TRUE), + PT(31, 52, 3, 1, TRUE), + PT( 5, 58, 6, 3, FALSE), + PT(43, 1, 2, 3, TRUE), + PT(14, 22, 5, 1, TRUE), + PT(14, 11, 4, 3, FALSE), + PT(13, 45, 2, 0, FALSE), + PT(33, 17, 4, 3, TRUE), + PT(61, 19, 6, 1, FALSE), + PT(21, 37, 5, 1, FALSE), + PT(27, 45, 6, 2, TRUE), + PT(44, 43, 4, 3, FALSE), + PT(38, 31, 4, 0, FALSE), + PT(34, 43, 2, 1, FALSE), + PT(63, 61, 4, 3, TRUE), + PT(48, 10, 6, 3, FALSE), + PT(53, 31, 2, 3, TRUE), + PT(33, 8, 5, 0, TRUE), + PT(29, 32, 6, 1, TRUE), + PT(52, 17, 2, 3, FALSE), + PT( 5, 56, 5, 2, TRUE), +}; + +#undef PT diff --git a/src/data/text/contest_de.h b/src/data/text/contest_de.h new file mode 100644 index 000000000..11940d943 --- /dev/null +++ b/src/data/text/contest_de.h @@ -0,0 +1,470 @@ +const u8 ContestString_DescHighlyAppealing[] = _("Eine sehr ansprechende\nVorführung."); +const u8 ContestString_DescStartled1[] = _("Einsatz der Attacke macht\nPKMN leichter irritierbar."); +const u8 ContestString_DescGreatLock[] = _("Großartiger Ausdruck, der\nsich nicht steigern lässt."); +const u8 ContestString_DescRepeatable[] = _("Langweilt den JUROR auch\nbei Wiederholung nicht."); +const u8 ContestString_DescStartled2[] = _("Kann Irritation durch\nandere einmal verhindern."); +const u8 ContestString_DescStartled3[] = _("Kann Irritation durch\nandere verhindern."); +const u8 ContestString_DescStartled4[] = _("Kann Irritation durch an-\ndere ein wenig eindämmen."); +const u8 ContestString_DescStartled5[] = _("Einsatz der Attacke dämmt\ndanach Irritation ein."); +const u8 ContestString_DescStartled6[] = _("Irritiert das vordere\nPOKéMON ein wenig."); +const u8 ContestString_DescStartled7[] = _("Irritiert die POKéMON ein\nwenig, die schon auftraten."); +const u8 ContestString_DescStartled8[] = _("Irritiert das POKéMON, das\nvorher aufgetreten ist."); +const u8 ContestString_DescStartled9[] = _("Irritiert alle POKéMON,\ndie bisher auftraten."); +const u8 ContestString_DescStartled10[] = _("Irritiert das vordere\nPOKéMON sehr stark."); +const u8 ContestString_DescStartled11[] = _("Irritiert die POKéMON, die\nschon aufgetreten sind."); +const u8 ContestString_DescStartled12[] = _("Irritiert das POKéMON, das\nvorher aufgetreten ist."); +const u8 ContestString_DescStartled13[] = _("Irritiert alle POKéMON, die\nvorher aufgetreten sind."); +const u8 ContestString_DescAttentionShift[] = _("Lenkt den JUROR von den\nanderen POKéMON ab."); +const u8 ContestString_DescStartled14[] = _("Irritiert PKMN, bes. die,\nauf die der JUROR achtet."); +const u8 ContestString_DescJamOthersMissTurn[] = _("Stört die anderen und An-\nwender setzt 1 Runde aus."); +const u8 ContestString_DescStartled15[] = _("Irritiert PKMN, bes. die, die\nAusdruck gl. Typs zeigten."); +const u8 ContestString_DescStartled16[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs COOL vorführten."); +const u8 ContestString_DescStartled17[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs SCHÖN vorführten."); +const u8 ContestString_DescStartled18[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs ANMUT vorführten."); +const u8 ContestString_DescStartled19[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs KLUG vorführten."); +const u8 ContestString_DescStartled20[] = _("Irritiert PKMN, die Ausdrck.\ndes Typs STARK vorführten."); + +const u8 ContestString_DescNervousOne[] = _("Macht nachfolgendes\nPOKéMON nervös."); + +const u8 ContestString_DescNervousAllAfter[] = _("Macht alle nachfolgenden\nPOKéMON nervös."); + +const u8 ContestString_DescConditionWorseBefore[] = _("Schwächt Kondition der\nPKMN, die bisher auftraten."); + +const u8 ContestString_DescStartled21[] = _("Irritiert POKéMON, die eine\ngute Kondition haben."); +const u8 ContestString_DescGreatWhenFirst[] = _("Ausdruck gelingt sehr gut,\nwenn als Erster vorgeführt."); +const u8 ContestString_DescGreatWhenLast[] = _("Ausdruck gelingt sehr gut,\nwenn zuletzt vorgeführt."); +const u8 ContestString_DescAppealGoodBeforeAll[] = _("Ausdruck gelingt so gut\nwie die der Vorgänger."); +const u8 ContestString_DescAppealGoodBeforeOne[] = _("Ausdruck gelingt so gut\nwie der des Vorgängers."); +const u8 ContestString_DescBetterWhenLater[] = _("Je später der Auftritt,\ndesto besser der Ausdruck."); +const u8 ContestString_DescAffectedByTiming[] = _("Die Qualität des Ausdrucks\nhängt vom Timing ab."); +const u8 ContestString_DescBetterWhenSameType[] = _("Gelingt gut, wenn vom\nselben Typ wie der vorige."); +const u8 ContestString_DescBetterWhenDiffType[] = _("Gelingt gut, wenn vom\nanderen Typ als der vorige."); +const u8 ContestString_DescAffectedByFront[] = _("Hängt von Qualität des Aus-\ndrucks des Vorgängers ab."); +const u8 ContestString_DescConditionUp[] = _("Verbessert die Kondition\nund verhindert Nervosität."); +const u8 ContestString_DescAffectedByCondition[] = _("Ausdruck gelingt gut, wenn\nKondition des PKMN gut ist."); +const u8 ContestString_DescAppealEarlier[] = _("Der nächste Ausdruck kann\nfrüher vorgeführt werden."); +const u8 ContestString_DescAppealLater[] = _("Der nächste Ausdruck kann\nspäter vorgeführt werden."); +const u8 ContestString_DescRandomOrderEasier[] = _("Ändert die Reihenfolge der\nnächst. Auftritte leichter."); +const u8 ContestString_DescRandomOrder[] = _("Ändert die Reihenfolge der\nnächsten Auftritte."); +const u8 ContestString_DescAnyExcitement[] = _("Verzückt das Publikum in \njedem WETTBEWERB."); +const u8 ContestString_DescStartled22[] = _("Irritiert alle POKéMON,\nderen Ausdruck gut war."); +const u8 ContestString_DescScaleWithExcitement[] = _("Gelingt am besten, wenn\ndas Publikum gespannt ist."); +const u8 ContestString_DescStopExcitement[] = _("Bremst zeitweise Begeis-\nterung des Publikums."); + +const u8 *const gContestEffectStrings[] = { + ContestString_DescHighlyAppealing, + ContestString_DescStartled1, + ContestString_DescGreatLock, + ContestString_DescRepeatable, + ContestString_DescStartled2, + ContestString_DescStartled3, + ContestString_DescStartled4, + ContestString_DescStartled5, + ContestString_DescStartled6, + ContestString_DescStartled7, + ContestString_DescStartled8, + ContestString_DescStartled9, + ContestString_DescStartled10, + ContestString_DescStartled11, + ContestString_DescStartled12, + ContestString_DescStartled13, + ContestString_DescAttentionShift, + ContestString_DescStartled14, + ContestString_DescJamOthersMissTurn, + ContestString_DescStartled15, + ContestString_DescStartled16, + ContestString_DescStartled17, + ContestString_DescStartled18, + ContestString_DescStartled19, + ContestString_DescStartled20, + ContestString_DescNervousOne, + ContestString_DescNervousAllAfter, + ContestString_DescConditionWorseBefore, + ContestString_DescStartled21, + ContestString_DescGreatWhenFirst, + ContestString_DescGreatWhenLast, + ContestString_DescAppealGoodBeforeAll, + ContestString_DescAppealGoodBeforeOne, + ContestString_DescBetterWhenLater, + ContestString_DescAffectedByTiming, + ContestString_DescBetterWhenSameType, + ContestString_DescBetterWhenDiffType, + ContestString_DescAffectedByFront, + ContestString_DescConditionUp, + ContestString_DescAffectedByCondition, + ContestString_DescAppealEarlier, + ContestString_DescAppealLater, + ContestString_DescRandomOrderEasier, + ContestString_DescRandomOrder, + ContestString_DescAnyExcitement, + ContestString_DescStartled22, + ContestString_DescScaleWithExcitement, + ContestString_DescStopExcitement, +}; + +const u8 ContestString_MoveRainDance[] = _("REGENTANZ"); +const u8 ContestString_MoveRage[] = _("RASEREI"); +const u8 ContestString_MoveFocusEnergy[] = _("ENERGIEFOKUS"); +const u8 ContestString_MoveHypnosis[] = _("HYPNOSE"); +const u8 ContestString_MoveSoftboiled[] = _("WEICHEI"); +const u8 ContestString_MoveHornAttack[] = _("HORNATTACKE"); +const u8 ContestString_MoveSwordsDance[] = _("SCHWERTTANZ"); +const u8 ContestString_MoveConversion[] = _("UMWANDLUNG"); +const u8 ContestString_MoveSunnyDay[] = _("SONNENTAG"); +const u8 ContestString_MoveRest[] = _("ERHOLUNG"); +const u8 ContestString_MoveVicegrip[] = _("KLAMMER"); +const u8 ContestString_MoveDefenseCurl[] = _("EINIGLER"); +const u8 ContestString_MoveLockOn[] = _("ZIELSCHUSS"); + +const u8 *const gContestStrings_UnreferencedTable1[] = { + ContestString_MoveRainDance, + ContestString_MoveRainDance, + ContestString_MoveRage, + ContestString_MoveFocusEnergy, + ContestString_MoveHypnosis, + ContestString_MoveSoftboiled, + ContestString_MoveHornAttack, + ContestString_MoveSwordsDance, + ContestString_MoveConversion, + ContestString_MoveSunnyDay, + ContestString_MoveRest, + ContestString_MoveVicegrip, + ContestString_MoveDefenseCurl, + ContestString_MoveLockOn, +}; + +const u8 ContestString_Cool[] = _("COOL."); +const u8 ContestString_Beauty[] = _("SCHÖN."); +const u8 ContestString_Cute[] = _("ANMUT"); +const u8 ContestString_Smart[] = _("KLUG."); +const u8 ContestString_Tough[] = _("STÄRKE"); + +const u8 *const gContestCategoryNames[] = { + ContestString_Cool, + ContestString_Beauty, + ContestString_Cute, + ContestString_Smart, + ContestString_Tough, +}; + +const u8 gText_Contest_WhichMoveWillBePlayed[] = _("Ausdruck {NAME_END}! Welche\nAttacke wird gezeigt?"); + +const u8 gText_Contest_ButItCantParticipate[] = _("Ausdruck {NAME_END}! Aber es\nkann nicht teilnehmen!"); + +const u8 gText_MonAppealedWithMove[] = _("{STR_VAR_1} führt\n{STR_VAR_2} vor!"); + +const u8 gText_OtherPokemonMadeMoves[] = _("Die anderen POKéMON\nzeigten ihre Attacken!"); + +const u8 gText_MonWasWatchingOthers[] = _("{STR_VAR_1} beobachtet\ndie anderen.{PAUSE 60}"); + +const u8 gText_AllOutOfAppealTime[] = _("Soweit zur\nAusdruckskraft!{PAUSE 60}"); +const u8 gText_Strvar1sStrvar3Move[] = _("{STR_VAR_3}-\nAtt. {STR_VAR_2}\nvon {STR_VAR_1}!"); +const u8 gText_TRICK[] = _("TRICK"); +const u8 gText_SPECIAL[] = _("SPEZIAL"); + +const u8 ContestString_AppealJammed[] = _("Der Auftritt\nwurde gestört."); +const u8 ContestString_FollowLead[] = _("Es folgte einem\nanderen POKéMON."); +const u8 ContestString_MessedUp[] = _("Es scheiterte."); +const u8 ContestString_BetterUsual[] = _("Das lief besser\nals sonst."); +const u8 ContestString_JudgeLookAway[] = _("Der JUROR war\nirgendwie abgelenkt."); +const u8 ContestString_WorkHard[] = _("Es strengte sich an,\nFehler auszubügeln."); +const u8 ContestString_NoMoreMoves[] = _("Es kann keine Attacken\nmehr ausführen."); +const u8 ContestString_WorkReallyWell[] = _("Das lief unheimlich gut."); +const u8 ContestString_WorkHardStandout[] = _("Es strengte sich genauso\nwie das beste POKéMON an."); +const u8 ContestString_JudgeExpectantly[] = _("Der JUROR schaute es\nbesonders aufmerksam an."); +const u8 ContestString_WorkRatherWell[] = _("Das lief bedeutend\nbesser."); +const u8 ContestString_WorkBetter[] = _("Es lief etwas besser\nals sonst."); + +const u8 *const gContestStrings_UnreferencedTable2[] = { + ContestString_AppealJammed, + ContestString_FollowLead, + ContestString_MessedUp, + ContestString_BetterUsual, + ContestString_BetterUsual, + ContestString_JudgeLookAway, + ContestString_WorkHard, + ContestString_NoMoreMoves, + ContestString_WorkReallyWell, + ContestString_WorkHardStandout, + ContestString_JudgeExpectantly, + ContestString_WorkRatherWell, + ContestString_WorkBetter, +}; + +const u8 ContestString_StandOutNone[] = _("{STR_VAR_1} stach\nüberhaupt nicht hervor...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutNotMuch[] = _("{STR_VAR_1} stach nicht\nbesonders hervor...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLittle[] = _("{STR_VAR_1} erregte ein\nwenig Aufmerksamkeit.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLot[] = _("{STR_VAR_1} erregte eine\nMenge Aufmerksamkeit.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutTotal[] = _("{STR_VAR_1} erhielt die\nvolle Aufmerksamkeit.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutDidnt[] = _("{STR_VAR_1} konnte\nkeinen Ausdruck zeigen.{PAUSE_UNTIL_PRESS}"); + +const u8 *const gContestStandOutStrings[] = { + ContestString_StandOutNone, + ContestString_StandOutNotMuch, + ContestString_StandOutLittle, + ContestString_StandOutLot, + ContestString_StandOutTotal, + ContestString_StandOutDidnt, +}; + +const u8 ContestString_AppealAnticipation3[] = _("Heiß ersehnt: Der Aus-\ndruck von {STR_VAR_1}."); +const u8 ContestString_JudgeSatisfied[] = _("Der JUROR war sehr\nzufrieden."); +const u8 ContestString_Terminator[] = _(""); +const u8 ContestString_JudgeHeldFirm[] = _("Der JUROR behält\n{STR_VAR_1} fest im Blick."); +const u8 ContestString_ChangedPerceptions[] = _("{STR_VAR_3} von {STR_VAR_1}\nändert die Wahrnehmung."); +const u8 ContestString_AppealWoreOff[] = _("Wirkung von {STR_VAR_1}\nlässt nach."); +const u8 ContestString_AppealWoreOff2[] = _("Die besondere Wirkung\nlässt nach."); +const u8 ContestString_AppealLookSame[] = _("Jeder Ausdruck wird sich\nnun gleichen."); +const u8 ContestString_AppealCheapened[] = _("Ausdruck von {STR_VAR_2}\nwurde abgewertet."); +const u8 ContestString_AppealCheapened2[] = _("Es wertete die Ausdrücke\nder anderen PKMN ab."); +const u8 ContestString_AppealAttentionStolen[] = _("Es stahl {STR_VAR_2} die\nAufmerksamkeit."); +const u8 ContestString_AppealCheapened3[] = _("Es wertete Ausdruck\nvon {STR_VAR_2} ab."); +const u8 ContestString_AppealCheapened4[] = _("Es wertete die Ausdrücke\nder anderen stark ab."); +const u8 ContestString_AppealAnticipation[] = _("Alle warten sehnsüchtig\nauf {STR_VAR_1}."); +const u8 ContestString_AppealCheapened5[] = _("Es wertete den Ausdruck\nder PKMN vor ihm ab."); +const u8 ContestString_AppealCheapened6[] = _("Es wertete den Lieblings-\nausdruck des JURORS ab."); +const u8 ContestString_AppealCheapened7[] = _("Der Ausdruckswert der\nanderen wurde halbiert."); +const u8 ContestString_JammedStoodOut[] = _("Es macht sich bereit, die\nanderen zu beeindrucken."); +const u8 ContestString_AppealNoMore[] = _("Es kann an keiner Vor-\nführung mehr teilnehmen."); +const u8 ContestString_AppealTouched[] = _("Der fantastische Aus-\ndruck berührte den JUROR."); +const u8 ContestString_AppealAnticipation2[] = _("Die Erwartung für die fol-\ngenden Ausdrücke steigt."); +const u8 ContestString_AppealStoodOut2[] = _("Es war so beeindruckend\nwie ein Spezialausdruck."); +const u8 ContestString_AppealStoodOut3[] = _("Es war so beeindruckend\nwie {STR_VAR_1}."); +const u8 ContestString_JammedAppealsNotice[] = _("Ein Ausdruck, der gestört\nwurde, ist unauffälliger."); +const u8 ContestString_AppealSame[] = _("Jeder Teilnehmer hat nun\nden gleichen Ausdruck."); +const u8 ContestString_AppealFullWorse[] = _("{STR_VAR_1} ist voll. Der\nAusdruck wird schlechter."); + +const u8 *const gContestString_UnreferencedPtrTable3[] = { + ContestString_JudgeHeldFirm, + ContestString_ChangedPerceptions, + ContestString_Terminator, + ContestString_AppealWoreOff, + ContestString_AppealWoreOff2, + ContestString_AppealLookSame, + ContestString_AppealCheapened, + ContestString_AppealCheapened2, + ContestString_AppealAttentionStolen, + ContestString_AppealCheapened3, + ContestString_AppealCheapened4, + ContestString_AppealAnticipation, + ContestString_AppealCheapened5, + ContestString_AppealCheapened6, + ContestString_AppealCheapened7, + ContestString_JammedStoodOut, + ContestString_AppealNoMore, + ContestString_AppealTouched, + ContestString_AppealAnticipation2, + ContestString_AppealStoodOut2, + ContestString_AppealStoodOut3, + ContestString_Terminator, + ContestString_Terminator, + ContestString_Terminator, + ContestString_JammedAppealsNotice, + ContestString_AppealSame, +}; + +const u8 ContestString_MoreConscious[] = _("Es wird sich der anderen\nPKMN mehr bewusst.{PAUSE 60}"); +const u8 ContestString_NoAppeal[] = _("{STR_VAR_1} kann danach\nkeinen Ausdruck zeigen.{PAUSE 60}"); +const u8 ContestString_SettleDown[] = _("Es kommt ein wenig\nzur Ruhe.{PAUSE 60}"); +const u8 ContestString_ObliviousToOthers[] = _("Die anderen PKMN nehmen\nes überhaupt nicht wahr.{PAUSE 60}"); +const u8 ContestString_LessAware[] = _("Es ist sich der anderen\nPKMN kaum bewusst.{PAUSE 60}"); +const u8 ContestString_StoppedCaring[] = _("Es kümmert sich nicht\nmehr viel um andere PKMN.{PAUSE 60}"); +const u8 ContestString_StartleAttempt[] = _("Es versucht, die anderen\nPKMN zu erschrecken.{PAUSE 60}"); +const u8 ContestString_DazzleAttempt[] = _("Es versucht, die anderen\nPKMN zu blenden.{PAUSE 60}"); +const u8 ContestString_JudgeLookAway2[] = _("Der JUROR schaut\n{STR_VAR_1} nicht mehr an.{PAUSE 60}"); +const u8 ContestString_UnnerveAttempt[] = _("Es versucht, die folgenden\nPKMN zu entnerven.{PAUSE 60}"); +const u8 ContestString_Nervous[] = _("{STR_VAR_1} wird\nnervös.{PAUSE 60}"); +const u8 ContestString_UnnerveWaiting[] = _("Dieser Ausdruck soll die\nanderen PKMN entnerven.{PAUSE 60}"); +const u8 ContestString_TauntWell[] = _("Es verhöhnt die\nbesseren PKMN.{PAUSE 60}"); +const u8 ContestString_RegainedForm[] = _("{STR_VAR_1} findet zu\nseiner Form zurück.{PAUSE 60}"); +const u8 ContestString_JamWell[] = _("Es versucht, die besseren\nPKMN zu beeindrucken.{PAUSE 60}"); +const u8 ContestString_HustleStandout[] = _("{STR_VAR_1} an der Spitze\nengagiert sich noch mehr.{PAUSE 60}"); +const u8 ContestString_WorkHardUnnoticed[] = _("Das bisher unauffällige\n{STR_VAR_1} gibt alles."); +const u8 ContestString_WorkBefore[] = _("Es strengt sich genauso\nan wie die PKMN vor ihm.{PAUSE 60}"); +const u8 ContestString_AppealNotWell[] = _("Ausdruck von {STR_VAR_1}:\nKam nicht gut an.{PAUSE 60}"); +const u8 ContestString_WorkPreceding[] = _("Es strengt sich an wie die\nvorangegangenen PKMN.{PAUSE 60}"); +const u8 ContestString_AppealNotWell2[] = _("Ausdruck von {STR_VAR_1}:\nVerlief nicht so gut.{PAUSE 60}"); +const u8 ContestString_AppealNotShownWell[] = _("Ausdruck v. {STR_VAR_1}: \nWurde gestört.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell[] = _("Ausdruck von {STR_VAR_1}:\nVerlief ganz gut.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell[] = _("Ausdruck von {STR_VAR_1}:\nKam ganz gut an.{PAUSE 60}"); +const u8 ContestString_AppealExcellently[] = _("{STR_VAR_1} führte seinen\nAusdruck exzellent vor.{PAUSE 60}"); +const u8 ContestString_AppealDud[] = _("Ausdruck von {STR_VAR_1}:\nEr war absolut mies.{PAUSE 60}"); +const u8 ContestString_AppealNotVeryWell[] = _("Ausdruck von {STR_VAR_1}:\nEr war nicht so gut.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell2[] = _("Ausdruck von {STR_VAR_1}:\nEr war nicht schlecht.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell2[] = _("Ausdruck von {STR_VAR_1}:\nEr war recht gut.{PAUSE 60}"); +const u8 ContestString_AppealVeryWell[] = _("Ausdruck von {STR_VAR_1}:\nEr war sehr gut.{PAUSE 60}"); +const u8 ContestString_AppealExcellently2[] = _("Ausdruck von {STR_VAR_1}:\nEr war exzellent.{PAUSE 60}"); +const u8 ContestString_SameTypeGood[] = _("Der gleiche Typ wie das\nvorhergehende PKMN - gut!{PAUSE 60}"); +const u8 ContestString_DiffTypeGood[] = _("Nicht der gleiche Typ wie\ndas vorherige PKMN - gut!{PAUSE 60}"); +const u8 ContestString_StoodOutAsMuch[] = _("Es ist viel besser als die\nvorhergehenden PKMN.{PAUSE 60}"); +const u8 ContestString_NotAsWell[] = _("Es war nicht so gut wie\ndas PKMN vor ihm.{PAUSE 60}"); +const u8 ContestString_ConditionRose[] = _("Die Kondition von\n{STR_VAR_1} stieg.{PAUSE 60}"); +const u8 ContestString_HotStatus[] = _("Status von {STR_VAR_1}:\nBewirkt guten Ausdruck!{PAUSE 60}"); +const u8 ContestString_MoveUpLine[] = _("Es steigt in der Reihen-\nfolge auf.{PAUSE 60}"); +const u8 ContestString_MoveBackLine[] = _("Es fällt in der Reihen-\nfolge zurück.{PAUSE 60}"); +const u8 ContestString_ScrambleOrder[] = _("Es bringt die Reihenfolge\ndurcheinander.{PAUSE 60}"); + +const u8 ContestString_JudgeExpectantly2[] = _("Der JUROR betrachtet\n{STR_VAR_1} interessiert.{PAUSE 60}"); + +const u8 ContestString_WentOverWell[] = _("Die Combo der Ausdrücke\nkam gut an.{PAUSE 60}"); + +const u8 ContestString_WentOverVeryWell[] = _("Die Combo der Ausdrücke\nkam sehr gut an.{PAUSE 60}"); + +const u8 ContestString_AppealComboExcellently[] = _("Die Combo der Ausdrücke\nkam exzellent an.{PAUSE 60}"); +const u8 ContestString_AvertGaze[] = _("{STR_VAR_1} gelingt es,\nden Blick abzuwenden.{PAUSE 60}"); +const u8 ContestString_AvoidSeeing[] = _("{STR_VAR_1} wandte den\nBlick erfolgreich ab.{PAUSE 60}"); +const u8 ContestString_NotFazed[] = _("{STR_VAR_1} lässt sich\ndavon nicht ablenken.{PAUSE 60}"); +const u8 ContestString_LittleDistracted[] = _("{STR_VAR_1} wurde etwas\nunruhig.{PAUSE 60}"); +const u8 ContestString_AttemptStartle[] = _("Es versucht, die anderen\nPKMN zu verschrecken.{PAUSE 60}"); +const u8 ContestString_LookedDown[] = _("{STR_VAR_1} blickt\nirritiert zu Boden.{PAUSE 60}"); +const u8 ContestString_TurnedBack[] = _("{STR_VAR_1} dreht sich\nirritiert um.{PAUSE 60}"); +const u8 ContestString_UtterCry[] = _("{STR_VAR_1} kann einen \nLaut nicht unterdrücken.{PAUSE 60}"); +const u8 ContestString_LeaptUp[] = _("{STR_VAR_1} kann nicht\nanders und springt auf.{PAUSE 60}"); +const u8 ContestString_TrippedOver[] = _("{STR_VAR_1} ist so irri-\ntiert, dass es stolpert.{PAUSE 60}"); + +const u8 ContestString_TooNervous[] = _("{STR_VAR_1} ist zu nervös,\num etwas vorzuführen.{PAUSE 60}"); +const u8 ContestString_MessedUp2[] = _("Es hatte keinen Erfolg.{PAUSE 60}"); +const u8 ContestString_FailedTargetNervous[] = _("Es konnte keine\nNervosität erzeugen.{PAUSE 60}"); +const u8 ContestString_FailedAnyoneNervous[] = _("Aber es konnte niemanden\nnervös machen.{PAUSE 60}"); +const u8 ContestString_Ignored[] = _("Es wurde ignoriert...{PAUSE 60}"); +const u8 ContestString_NoConditionImprove[] = _("Es konnte seinen Aus-\ndruck nicht verstärken...{PAUSE 60}"); +const u8 ContestString_BadConditionWeakAppeal[] = _("Schwacher Ausdruck we-\ngen schlechter Konditon.{PAUSE 60}"); +const u8 ContestString_Unaffected[] = _("{STR_VAR_1} blieb\nunbeeindruckt.{PAUSE 60}"); + +const u8 ContestString_DissapointedRepeat[] = _("{STR_VAR_1} enttäuscht\ndurch Wiederholung.{PAUSE 60}"); + +const u8 ContestString_WentOverGreat[] = _("Die {STR_VAR_3} von\n{STR_VAR_1} war sehr gut.{PAUSE 60}"); + +const u8 ContestString_DidntGoWell[] = _("Die {STR_VAR_3} von\n{STR_VAR_1} war nicht gut.{PAUSE 60}"); + +const u8 ContestString_GotCrowdGoing[] = _("{STR_VAR_1} begeistert\nPublikum mit {STR_VAR_3}.{PAUSE 60}"); + +const u8 ContestString_CantAppealNextTurn[] = _("{STR_VAR_1} setzt in der \nfolgenden Runde aus.{PAUSE 60}"); +const u8 ContestString_AttractedAttention[] = _("Die Aufmerksamkeit des\nPublikums liegt auf ihm.{PAUSE 60}"); + +const u8 ContestString_CrowdWatches[] = _("Das Publikum beobachtet\nweiterhin {STR_VAR_3}.{PAUSE 60}"); + +const u8 ContestString_Ignored2[] = _("{STR_VAR_2} von\n{STR_VAR_1} ist ignoriert.{PAUSE 60}"); + +const u8 *const gUnknown_083CC188[] = { + ContestString_MoreConscious, + ContestString_NoAppeal, + ContestString_SettleDown, + ContestString_ObliviousToOthers, + ContestString_LessAware, + ContestString_StoppedCaring, + ContestString_StartleAttempt, + ContestString_DazzleAttempt, + ContestString_JudgeLookAway2, + ContestString_UnnerveAttempt, + ContestString_Nervous, + ContestString_UnnerveWaiting, + ContestString_TauntWell, + ContestString_RegainedForm, + ContestString_JamWell, + ContestString_HustleStandout, + ContestString_WorkHardUnnoticed, + ContestString_WorkBefore, + ContestString_AppealNotWell, + ContestString_WorkPreceding, + ContestString_AppealNotWell2, + ContestString_AppealNotShownWell, + ContestString_AppealSlightlyWell, + ContestString_AppealPrettyWell, + ContestString_AppealExcellently, + ContestString_AppealDud, + ContestString_AppealNotVeryWell, + ContestString_AppealSlightlyWell2, + ContestString_AppealPrettyWell2, + ContestString_AppealVeryWell, + ContestString_AppealExcellently2, + ContestString_SameTypeGood, + ContestString_DiffTypeGood, + ContestString_StoodOutAsMuch, + ContestString_NotAsWell, + ContestString_ConditionRose, + ContestString_HotStatus, + ContestString_MoveUpLine, + ContestString_MoveBackLine, + ContestString_ScrambleOrder, + ContestString_JudgeExpectantly2, + ContestString_WentOverWell, + ContestString_WentOverVeryWell, + ContestString_AppealComboExcellently, + ContestString_AvertGaze, + ContestString_AvoidSeeing, + ContestString_NotFazed, + ContestString_LittleDistracted, + ContestString_AttemptStartle, + ContestString_LookedDown, + ContestString_TurnedBack, + ContestString_UtterCry, + ContestString_LeaptUp, + ContestString_TrippedOver, + ContestString_MessedUp2, + ContestString_FailedTargetNervous, + ContestString_FailedAnyoneNervous, + ContestString_Ignored, + ContestString_NoConditionImprove, + ContestString_BadConditionWeakAppeal, + ContestString_Unaffected, + ContestString_AttractedAttention, +}; + +const u8 gText_Contest_Shyness[] = _("Scheu"); + +const u8 gText_Contest_Anxiety[] = _("Besorgnis"); + +const u8 gText_Contest_Laziness[] = _("Faulheit"); + +const u8 gText_Contest_Hesitancy[] = _("Zögern"); + +const u8 gText_Contest_Fear[] = _("Furcht"); + +const u8 ContestString_Coolness[] = _("Coolness"); +const u8 ContestString_Beauty2[] = _("Schönheit"); +const u8 ContestString_Cuteness[] = _("Anmut"); +const u8 ContestString_Smartness[] = _("Klugheit"); +const u8 ContestString_Toughness[] = _("Stärke"); + +const u8 *const gContestCategoryStrings[] = { + ContestString_Coolness, + ContestString_Beauty2, + ContestString_Cuteness, + ContestString_Smartness, + ContestString_Toughness, +}; + +const u8 gUnknown_083CC2EC[] = _("SPANNUNG:"); + +const u8 ContestString_CoolMove[] = _("COOLE Att."); + +const u8 ContestString_BeautyMove[] = _("SCHÖNE Att."); + +const u8 ContestString_CuteMove[] = _("ANMUT-Att."); + +const u8 ContestString_SmartMove[] = _("KLUGE Att."); + +const u8 ContestString_ToughMove[] = _("STARKE Att."); + +const u8 ContestString_UnknownMoveType[] = _("???"); + +const u8 *const sInvalidContestMoveNames[] = { + ContestString_CoolMove, + ContestString_BeautyMove, + ContestString_CuteMove, + ContestString_SmartMove, + ContestString_ToughMove, + ContestString_UnknownMoveType, +}; + +// unused? +const u8 ContestString_Rank[] = _("KLASSE"); + +const u8 ContestString_HighlightTransparent_ColorMagenta[] = _("{HIGHLIGHT TRANSPARENT}{COLOR MAGENTA} "); + +const u8 gUnknownText_MissedTurn[] = _("Verpasste Chance"); + +const u8 gUnknownText_LinkStandbyAndWinner[] = _("Verbindung..."); +const u8 gUnknownText_ColorWhite2[] = _("{COLOR WHITE2}"); +const u8 gUnknownText_LinkWinner[] = _("Der Sieger ist {STR_VAR_2} von\n{STR_VAR_1}! Herzlichen Glückwunsch!");
\ No newline at end of file diff --git a/src/data/text/contest_en.h b/src/data/text/contest_en.h new file mode 100644 index 000000000..39a4c9cff --- /dev/null +++ b/src/data/text/contest_en.h @@ -0,0 +1,453 @@ +const u8 ContestString_DescHighlyAppealing[] = _("A highly appealing move."); +const u8 ContestString_DescStartled1[] = _("After this move, the user is\nmore easily startled."); +const u8 ContestString_DescGreatLock[] = _("Makes a great appeal, but\nallows no more to the end."); +const u8 ContestString_DescRepeatable[] = _("Can be repeatedly used\nwithout boring the JUDGE."); +const u8 ContestString_DescStartled2[] = _("Can avoid being startled\nby others once."); +const u8 ContestString_DescStartled3[] = _("Can avoid being startled\nby others."); +const u8 ContestString_DescStartled4[] = _("Can avoid being startled\nby others a little."); +const u8 ContestString_DescStartled5[] = _("After this move, the user is\nless likely to be startled."); +const u8 ContestString_DescStartled6[] = _("Slightly startles the\nPOKéMON in front."); +const u8 ContestString_DescStartled7[] = _("Slightly startles those\nthat have made appeals."); +const u8 ContestString_DescStartled8[] = _("Startles the POKéMON that\nappealed before the user."); +const u8 ContestString_DescStartled9[] = _("Startles all POKéMON that\nhave done their appeals."); +const u8 ContestString_DescStartled10[] = _("Badly startles the\nPOKéMON in front."); +const u8 ContestString_DescStartled11[] = _("Badly startles those that\nhave made appeals."); +const u8 ContestString_DescStartled12[] = _("Startles the POKéMON that\nappealed before the user."); +const u8 ContestString_DescStartled13[] = _("Startles all POKéMON that\nappealed before the user."); +const u8 ContestString_DescAttentionShift[] = _("Shifts the JUDGE's\nattention from others."); +const u8 ContestString_DescStartled14[] = _("Startles the POKéMON that\nhas the JUDGE's attention."); +const u8 ContestString_DescJamOthersMissTurn[] = _("Jams the others, and misses\none turn of appeals."); +const u8 ContestString_DescStartled15[] = _("Startles POKéMON that\nmade a same-type appeal."); +const u8 ContestString_DescStartled16[] = _("Badly startles POKéMON\nthat made COOL appeals."); +const u8 ContestString_DescStartled17[] = _("Badly startles POKéMON\nthat made BEAUTY appeals."); +const u8 ContestString_DescStartled18[] = _("Badly startles POKéMON\nthat made CUTE appeals."); +const u8 ContestString_DescStartled19[] = _("Badly startles POKéMON\nthat made SMART appeals."); +const u8 ContestString_DescStartled20[] = _("Badly startles POKéMON\nthat made TOUGH appeals."); +const u8 ContestString_DescNervousOne[] = _("Makes one POKéMON after\nthe user nervous."); +const u8 ContestString_DescNervousAllAfter[] = _("Makes all POKéMON after\nthe user nervous."); +const u8 ContestString_DescConditionWorseBefore[] = _("Worsens the condition of\nthose that made appeals."); +const u8 ContestString_DescStartled21[] = _("Badly startles POKéMON in\ngood condition."); +const u8 ContestString_DescGreatWhenFirst[] = _("The appeal works great if\nperformed first."); +const u8 ContestString_DescGreatWhenLast[] = _("The appeal works great if\nperformed last."); +const u8 ContestString_DescAppealGoodBeforeAll[] = _("Makes the appeal as good\nas those before it."); +const u8 ContestString_DescAppealGoodBeforeOne[] = _("Makes the appeal as good\nas the one before it."); +const u8 ContestString_DescBetterWhenLater[] = _("The appeal works better\nthe later it is performed."); +const u8 ContestString_DescAffectedByTiming[] = _("The appeal's quality varies\ndepending on its timing."); +const u8 ContestString_DescBetterWhenSameType[] = _("Works well if it's the same\ntype as the one before."); +const u8 ContestString_DescBetterWhenDiffType[] = _("Works well if different in\ntype than the one before."); +const u8 ContestString_DescAffectedByFront[] = _("Affected by how well the\nappeal in front goes."); +const u8 ContestString_DescConditionUp[] = _("Ups the user's condition.\nHelps prevent nervousness."); +const u8 ContestString_DescAffectedByCondition[] = _("The appeal works well if the\nuser's condition is good."); +const u8 ContestString_DescAppealEarlier[] = _("The next appeal can be made\nearlier next turn."); +const u8 ContestString_DescAppealLater[] = _("The next appeal can be made\nlater next turn."); +const u8 ContestString_DescRandomOrderEasier[] = _("Makes the next turn's order\nmore easily scrambled."); +const u8 ContestString_DescRandomOrder[] = _("Scrambles the order of\nappeals on the next turn."); +const u8 ContestString_DescAnyExcitement[] = _("An appeal that excites the\naudience in any CONTEST."); +const u8 ContestString_DescStartled22[] = _("Badly startles all POKéMON\nthat made good appeals."); +const u8 ContestString_DescScaleWithExcitement[] = _("The appeal works best the\nmore the crowd is excited."); +const u8 ContestString_DescStopExcitement[] = _("Temporarily stops the\ncrowd from growing excited."); + +const u8 *const gContestEffectStrings[] = { + ContestString_DescHighlyAppealing, + ContestString_DescStartled1, + ContestString_DescGreatLock, + ContestString_DescRepeatable, + ContestString_DescStartled2, + ContestString_DescStartled3, + ContestString_DescStartled4, + ContestString_DescStartled5, + ContestString_DescStartled6, + ContestString_DescStartled7, + ContestString_DescStartled8, + ContestString_DescStartled9, + ContestString_DescStartled10, + ContestString_DescStartled11, + ContestString_DescStartled12, + ContestString_DescStartled13, + ContestString_DescAttentionShift, + ContestString_DescStartled14, + ContestString_DescJamOthersMissTurn, + ContestString_DescStartled15, + ContestString_DescStartled16, + ContestString_DescStartled17, + ContestString_DescStartled18, + ContestString_DescStartled19, + ContestString_DescStartled20, + ContestString_DescNervousOne, + ContestString_DescNervousAllAfter, + ContestString_DescConditionWorseBefore, + ContestString_DescStartled21, + ContestString_DescGreatWhenFirst, + ContestString_DescGreatWhenLast, + ContestString_DescAppealGoodBeforeAll, + ContestString_DescAppealGoodBeforeOne, + ContestString_DescBetterWhenLater, + ContestString_DescAffectedByTiming, + ContestString_DescBetterWhenSameType, + ContestString_DescBetterWhenDiffType, + ContestString_DescAffectedByFront, + ContestString_DescConditionUp, + ContestString_DescAffectedByCondition, + ContestString_DescAppealEarlier, + ContestString_DescAppealLater, + ContestString_DescRandomOrderEasier, + ContestString_DescRandomOrder, + ContestString_DescAnyExcitement, + ContestString_DescStartled22, + ContestString_DescScaleWithExcitement, + ContestString_DescStopExcitement, +}; + +const u8 ContestString_MoveRainDance[] = _("RAIN DANCE"); +const u8 ContestString_MoveRage[] = _("RAGE"); +const u8 ContestString_MoveFocusEnergy[] = _("FOCUS ENERGY"); +const u8 ContestString_MoveHypnosis[] = _("HYPNOSIS"); +const u8 ContestString_MoveSoftboiled[] = _("SOFTBOILED"); +const u8 ContestString_MoveHornAttack[] = _("HORN ATTACK"); +const u8 ContestString_MoveSwordsDance[] = _("SWORDS DANCE"); +const u8 ContestString_MoveConversion[] = _("CONVERSION"); +const u8 ContestString_MoveSunnyDay[] = _("SUNNY DAY"); +const u8 ContestString_MoveRest[] = _("REST"); +const u8 ContestString_MoveVicegrip[] = _("VICEGRIP"); +const u8 ContestString_MoveDefenseCurl[] = _("DEFENSE CURL"); +const u8 ContestString_MoveLockOn[] = _("LOCK-ON"); + +const u8 *const gContestStrings_UnreferencedTable1[] = { + ContestString_MoveRainDance, + ContestString_MoveRainDance, + ContestString_MoveRage, + ContestString_MoveFocusEnergy, + ContestString_MoveHypnosis, + ContestString_MoveSoftboiled, + ContestString_MoveHornAttack, + ContestString_MoveSwordsDance, + ContestString_MoveConversion, + ContestString_MoveSunnyDay, + ContestString_MoveRest, + ContestString_MoveVicegrip, + ContestString_MoveDefenseCurl, + ContestString_MoveLockOn, +}; + +const u8 ContestString_Cool[] = _("COOL"); +const u8 ContestString_Beauty[] = _("BEAUTY"); +const u8 ContestString_Cute[] = _("CUTE"); +const u8 ContestString_Smart[] = _("SMART"); +const u8 ContestString_Tough[] = _("TOUGH"); + +const u8 *const gContestCategoryNames[] = { + ContestString_Cool, + ContestString_Beauty, + ContestString_Cute, + ContestString_Smart, + ContestString_Tough, +}; + +const u8 gText_Contest_WhichMoveWillBePlayed[] = _("Appeal no. {NAME_END}!\nWhich move will be played?"); + +const u8 gText_Contest_ButItCantParticipate[] = _("Appeal no. {NAME_END}!\nBut it can't participate!"); + +const u8 gText_MonAppealedWithMove[] = _("{STR_VAR_1} appealed with\n{STR_VAR_2}!"); + +const u8 gText_OtherPokemonMadeMoves[] = _("The other POKéMON\nmade moves.{PAUSE 60}"); + +const u8 gText_MonWasWatchingOthers[] = _("{STR_VAR_1} was watching\nthe others.{PAUSE 60}"); + +const u8 gText_AllOutOfAppealTime[] = _("We're all out of\nAppeal Time!{PAUSE 60}"); +const u8 gText_Strvar1sStrvar3Move[] = _("{STR_VAR_1}'s {STR_VAR_3}\nmove {STR_VAR_2}!{PAUSE 60}"); +const u8 gText_TRICK[] = _("TRICK"); +const u8 gText_SPECIAL[] = _("SPECIAL"); +const u8 ContestString_AppealJammed[] = _("But the appeal was\njammed."); +const u8 ContestString_FollowLead[] = _("It followed another\nPOKéMON's lead."); +const u8 ContestString_MessedUp[] = _("But it messed up."); +const u8 ContestString_BetterUsual[] = _("It went better than\nusual."); +const u8 ContestString_JudgeLookAway[] = _("The JUDGE looked away\nfor some reason."); +const u8 ContestString_WorkHard[] = _("It worked hard to build on\npast mistakes."); +const u8 ContestString_NoMoreMoves[] = _("It can't make any more\nmoves."); +const u8 ContestString_WorkReallyWell[] = _("It worked frighteningly\nwell."); +const u8 ContestString_WorkHardStandout[] = _("It worked as hard as the\nstandout POKéMON."); +const u8 ContestString_JudgeExpectantly[] = _("The JUDGE looked on\nexpectantly."); +const u8 ContestString_WorkRatherWell[] = _("It worked rather well."); +const u8 ContestString_WorkBetter[] = _("It worked a little better\nthan usual."); + +const u8 *const gContestStrings_UnreferencedTable2[] = { + ContestString_AppealJammed, + ContestString_FollowLead, + ContestString_MessedUp, + ContestString_BetterUsual, + ContestString_BetterUsual, + ContestString_JudgeLookAway, + ContestString_WorkHard, + ContestString_NoMoreMoves, + ContestString_WorkReallyWell, + ContestString_WorkHardStandout, + ContestString_JudgeExpectantly, + ContestString_WorkRatherWell, + ContestString_WorkBetter, +}; + +const u8 ContestString_StandOutNone[] = _("{STR_VAR_1} failed to\nstand out at all...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutNotMuch[] = _("{STR_VAR_1} didn't stand\nout very much...{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLittle[] = _("{STR_VAR_1} caught a\nlittle attention.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutLot[] = _("{STR_VAR_1} attracted a\nlot of attention.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutTotal[] = _("{STR_VAR_1} commanded\ntotal attention.{PAUSE_UNTIL_PRESS}"); +const u8 ContestString_StandOutDidnt[] = _("{STR_VAR_1} hasn't made\nits appeal.{PAUSE_UNTIL_PRESS}"); + +const u8 *const gContestStandOutStrings[] = { + ContestString_StandOutNone, + ContestString_StandOutNotMuch, + ContestString_StandOutLittle, + ContestString_StandOutLot, + ContestString_StandOutTotal, + ContestString_StandOutDidnt, +}; + +const u8 ContestString_AppealAnticipation3[] = _("Anticipation swelled for\n{STR_VAR_1}'s appeal next."); +const u8 ContestString_JudgeSatisfied[] = _("The JUDGE was very\nsatisfied."); +const u8 ContestString_Terminator[] = _(""); +const u8 ContestString_JudgeHeldFirm[] = _("The JUDGE 's views on\n{STR_VAR_1} held firm."); +const u8 ContestString_ChangedPerceptions[] = _("{STR_VAR_1}'s {STR_VAR_3}\nchanged perceptions."); +const u8 ContestString_AppealWoreOff[] = _("{STR_VAR_1}'s appeal\neffect wore off."); +const u8 ContestString_AppealWoreOff2[] = _("The special appeal's\neffect wore off."); +const u8 ContestString_AppealLookSame[] = _("Everyone's appeals were\nmade to look the same."); +const u8 ContestString_AppealCheapened[] = _("{STR_VAR_2}'s appeal was\ncheapened."); +const u8 ContestString_AppealCheapened2[] = _("It cheapened the appeal\nof those ahead."); +const u8 ContestString_AppealAttentionStolen[] = _("It stole attention away\nfrom {STR_VAR_2}."); +const u8 ContestString_AppealCheapened3[] = _("It cheapened\n{STR_VAR_2}'s appeal."); +const u8 ContestString_AppealCheapened4[] = _("It severely cheapened\nother appeals."); +const u8 ContestString_AppealAnticipation[] = _("Anticipation swelled for\n{STR_VAR_1}'s appeal next."); +const u8 ContestString_AppealCheapened5[] = _("It cheapened the appeal\nof those ahead."); +const u8 ContestString_AppealCheapened6[] = _("It cheapened the JUDGE's\nfavorite appeal."); +const u8 ContestString_AppealCheapened7[] = _("The appeals of others\nwere cheapened by half."); +const u8 ContestString_JammedStoodOut[] = _("It stood out to make up\nfor being jammed."); +const u8 ContestString_AppealNoMore[] = _("It can't participate in\nappeals any more."); +const u8 ContestString_AppealTouched[] = _("It touched the JUDGE for\na fantastic appeal."); +const u8 ContestString_AppealAnticipation2[] = _("Anticipation rose for\nupcoming appeals."); +const u8 ContestString_AppealStoodOut2[] = _("It stood out as much as\nspecial appeals."); +const u8 ContestString_AppealStoodOut3[] = _("It stood out as much as\n{STR_VAR_1}."); +const u8 ContestString_JammedAppealsNotice[] = _("Jammed appeals were made\neven less noticeable."); +const u8 ContestString_AppealSame[] = _("Everyone's appeals were\nmade the same."); +const u8 ContestString_AppealFullWorse[] = _("Its {STR_VAR_1} is full.\nIt worsened its appeal."); + +const u8 *const gContestString_UnreferencedPtrTable3[] = { + ContestString_JudgeHeldFirm, + ContestString_ChangedPerceptions, + ContestString_Terminator, + ContestString_AppealWoreOff, + ContestString_AppealWoreOff2, + ContestString_AppealLookSame, + ContestString_AppealCheapened, + ContestString_AppealCheapened2, + ContestString_AppealAttentionStolen, + ContestString_AppealCheapened3, + ContestString_AppealCheapened4, + ContestString_AppealAnticipation, + ContestString_AppealCheapened5, + ContestString_AppealCheapened6, + ContestString_AppealCheapened7, + ContestString_JammedStoodOut, + ContestString_AppealNoMore, + ContestString_AppealTouched, + ContestString_AppealAnticipation2, + ContestString_AppealStoodOut2, + ContestString_AppealStoodOut3, + ContestString_Terminator, + ContestString_Terminator, + ContestString_Terminator, + ContestString_JammedAppealsNotice, + ContestString_AppealSame, +}; + +const u8 ContestString_MoreConscious[] = _("It became more conscious\nof the other POKéMON.{PAUSE 60}"); +const u8 ContestString_NoAppeal[] = _("{STR_VAR_1} can't make an\nappeal after this.{PAUSE 60}"); +const u8 ContestString_SettleDown[] = _("It settled down just a\nlittle bit.{PAUSE 60}"); +const u8 ContestString_ObliviousToOthers[] = _("It became oblivious to\nthe other POKéMON.{PAUSE 60}"); +const u8 ContestString_LessAware[] = _("It became less aware of\nthe other POKéMON.{PAUSE 60}"); +const u8 ContestString_StoppedCaring[] = _("It stopped caring about\nother POKéMON much.{PAUSE 60}"); +const u8 ContestString_StartleAttempt[] = _("It tried to startle the\nother POKéMON.{PAUSE 60}"); +const u8 ContestString_DazzleAttempt[] = _("It tried to dazzle the\nothers.{PAUSE 60}"); +const u8 ContestString_JudgeLookAway2[] = _("The JUDGE looked away\nfrom {STR_VAR_1}.{PAUSE 60}"); +const u8 ContestString_UnnerveAttempt[] = _("It tried to unnerve the\nnext POKéMON.{PAUSE 60}"); +const u8 ContestString_Nervous[] = _("{STR_VAR_1} became\nnervous.{PAUSE 60}"); +const u8 ContestString_UnnerveWaiting[] = _("The appeal tried to\nunnerve waiting POKéMON.{PAUSE 60}"); +const u8 ContestString_TauntWell[] = _("It taunted POKéMON\ndoing well.{PAUSE 60}"); +const u8 ContestString_RegainedForm[] = _("{STR_VAR_1} regained its\nform.{PAUSE 60}"); +const u8 ContestString_JamWell[] = _("It tried to jam POKéMON\ndoing well.{PAUSE 60}"); +const u8 ContestString_HustleStandout[] = _("The standout {STR_VAR_1}\nhustled even more.{PAUSE 60}"); +const u8 ContestString_WorkHardUnnoticed[] = _("The largely unnoticed\n{STR_VAR_1} worked hard.{PAUSE 60}"); +const u8 ContestString_WorkBefore[] = _("It worked as much as\nPOKéMON before it.{PAUSE 60}"); +const u8 ContestString_AppealNotWell[] = _("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 60}"); +const u8 ContestString_WorkPreceding[] = _("It worked as much as the\npreceding POKéMON.{PAUSE 60}"); +const u8 ContestString_AppealNotWell2[] = _("{STR_VAR_1}'s appeal did\nnot go well.{PAUSE 60}"); +const u8 ContestString_AppealNotShownWell[] = _("{STR_VAR_1}'s appeal\ncouldn't be shown well.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell[] = _("{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell[] = _("{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 60}"); +const u8 ContestString_AppealExcellently[] = _("{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 60}"); +const u8 ContestString_AppealDud[] = _("{STR_VAR_1}'s appeal was\na dud.{PAUSE 60}"); +const u8 ContestString_AppealNotVeryWell[] = _("{STR_VAR_1}'s appeal did\nnot work very well.{PAUSE 60}"); +const u8 ContestString_AppealSlightlyWell2[] = _("{STR_VAR_1}'s appeal\nwent slightly well.{PAUSE 60}"); +const u8 ContestString_AppealPrettyWell2[] = _("{STR_VAR_1}'s appeal\nwent pretty well.{PAUSE 60}"); +const u8 ContestString_AppealVeryWell[] = _("{STR_VAR_1}'s appeal\nwent very well.{PAUSE 60}"); +const u8 ContestString_AppealExcellently2[] = _("{STR_VAR_1}'s appeal\nwent excellently.{PAUSE 60}"); +const u8 ContestString_SameTypeGood[] = _("It's the same type as the\nPOKéMON before - good!{PAUSE 60}"); +const u8 ContestString_DiffTypeGood[] = _("It's not the same type as\nthe one before - good!{PAUSE 60}"); +const u8 ContestString_StoodOutAsMuch[] = _("It stood out much more\nthan the POKéMON before.{PAUSE 60}"); +const u8 ContestString_NotAsWell[] = _("It didn't do as well as the\nPOKéMON before.{PAUSE 60}"); +const u8 ContestString_ConditionRose[] = _("{STR_VAR_1}'s condition\nrose above usual.{PAUSE 60}"); +const u8 ContestString_HotStatus[] = _("{STR_VAR_1}'s hot status\nmade it a great appeal!{PAUSE 60}"); +const u8 ContestString_MoveUpLine[] = _("It moved up in line for\nthe next appeal.{PAUSE 60}"); +const u8 ContestString_MoveBackLine[] = _("It moved back in line once\nfor the next appeal.{PAUSE 60}"); +const u8 ContestString_ScrambleOrder[] = _("It scrambled up the\norder for the next turn.{PAUSE 60}"); +const u8 ContestString_JudgeExpectantly2[] = _("The JUDGE looked at\n{STR_VAR_1} expectantly.{PAUSE 60}"); +const u8 ContestString_WentOverWell[] = _("The appeal combo went\nover well.{PAUSE 60}"); +const u8 ContestString_WentOverVeryWell[] = _("The appeal combo went\nover very well.{PAUSE 60}"); +const u8 ContestString_AppealComboExcellently[] = _("The appeal combo went\nover excellently.{PAUSE 60}"); +const u8 ContestString_AvertGaze[] = _("{STR_VAR_1} managed to\navert its gaze.{PAUSE 60}"); +const u8 ContestString_AvoidSeeing[] = _("{STR_VAR_1} managed to\navoid seeing it.{PAUSE 60}"); +const u8 ContestString_NotFazed[] = _("{STR_VAR_1} isn't fazed\nby that sort of thing.{PAUSE 60}"); +const u8 ContestString_LittleDistracted[] = _("{STR_VAR_1} became a\nlittle distracted.{PAUSE 60}"); +const u8 ContestString_AttemptStartle[] = _("It tried to startle the\nother POKéMON.{PAUSE 60}"); +const u8 ContestString_LookedDown[] = _("{STR_VAR_1} looked down\nout of distraction.{PAUSE 60}"); +const u8 ContestString_TurnedBack[] = _("{STR_VAR_1} turned back\nout of distraction.{PAUSE 60}"); +const u8 ContestString_UtterCry[] = _("{STR_VAR_1} couldn't help\nuttering a cry.{PAUSE 60}"); +const u8 ContestString_LeaptUp[] = _("{STR_VAR_1} couldn't help\nleaping up.{PAUSE 60}"); +const u8 ContestString_TrippedOver[] = _("{STR_VAR_1} tripped over\nout of distraction.{PAUSE 60}"); +const u8 ContestString_TooNervous[] = _("{STR_VAR_1} was too\nnervous to move.{PAUSE 60}"); +const u8 ContestString_MessedUp2[] = _("But it messed up.{PAUSE 60}"); +const u8 ContestString_FailedTargetNervous[] = _("But it failed to make\nthe target nervous.{PAUSE 60}"); +const u8 ContestString_FailedAnyoneNervous[] = _("But it failed to make\nanyone nervous.{PAUSE 60}"); +const u8 ContestString_Ignored[] = _("But it was ignored...{PAUSE 60}"); +const u8 ContestString_NoConditionImprove[] = _("But it couldn't improve\nits condition...{PAUSE 60}"); +const u8 ContestString_BadConditionWeakAppeal[] = _("Its bad condition\nresulted in a weak appeal.{PAUSE 60}"); +const u8 ContestString_Unaffected[] = _("{STR_VAR_1} was\nunaffected.{PAUSE 60}"); +const u8 ContestString_DissapointedRepeat[] = _("{STR_VAR_1} disappointed\nby repeating an appeal.{PAUSE 60}"); +const u8 ContestString_WentOverGreat[] = _("{STR_VAR_1}'s {STR_VAR_3}\nwent over great.{PAUSE 60}"); +const u8 ContestString_DidntGoWell[] = _("{STR_VAR_1}'s {STR_VAR_3}\ndidn't go over well here...{PAUSE 60}"); +const u8 ContestString_GotCrowdGoing[] = _("{STR_VAR_1}'s {STR_VAR_3}\ngot the crowd going.{PAUSE 60}"); +const u8 ContestString_CantAppealNextTurn[] = _("{STR_VAR_1} can't appeal\nnext turn...{PAUSE 60}"); +const u8 ContestString_AttractedAttention[] = _("It attracted the crowd's\nattention.{PAUSE 60}"); +const u8 ContestString_CrowdWatches[] = _("The crowd continues to\nwatch {STR_VAR_3}.{PAUSE 60}"); +const u8 ContestString_Ignored2[] = _("{STR_VAR_1}'s\n{STR_VAR_2} is ignored.{PAUSE 60}"); + +const u8 *const gUnknown_083CC188[] = { + ContestString_MoreConscious, + ContestString_NoAppeal, + ContestString_SettleDown, + ContestString_ObliviousToOthers, + ContestString_LessAware, + ContestString_StoppedCaring, + ContestString_StartleAttempt, + ContestString_DazzleAttempt, + ContestString_JudgeLookAway2, + ContestString_UnnerveAttempt, + ContestString_Nervous, + ContestString_UnnerveWaiting, + ContestString_TauntWell, + ContestString_RegainedForm, + ContestString_JamWell, + ContestString_HustleStandout, + ContestString_WorkHardUnnoticed, + ContestString_WorkBefore, + ContestString_AppealNotWell, + ContestString_WorkPreceding, + ContestString_AppealNotWell2, + ContestString_AppealNotShownWell, + ContestString_AppealSlightlyWell, + ContestString_AppealPrettyWell, + ContestString_AppealExcellently, + ContestString_AppealDud, + ContestString_AppealNotVeryWell, + ContestString_AppealSlightlyWell2, + ContestString_AppealPrettyWell2, + ContestString_AppealVeryWell, + ContestString_AppealExcellently2, + ContestString_SameTypeGood, + ContestString_DiffTypeGood, + ContestString_StoodOutAsMuch, + ContestString_NotAsWell, + ContestString_ConditionRose, + ContestString_HotStatus, + ContestString_MoveUpLine, + ContestString_MoveBackLine, + ContestString_ScrambleOrder, + ContestString_JudgeExpectantly2, + ContestString_WentOverWell, + ContestString_WentOverVeryWell, + ContestString_AppealComboExcellently, + ContestString_AvertGaze, + ContestString_AvoidSeeing, + ContestString_NotFazed, + ContestString_LittleDistracted, + ContestString_AttemptStartle, + ContestString_LookedDown, + ContestString_TurnedBack, + ContestString_UtterCry, + ContestString_LeaptUp, + ContestString_TrippedOver, + ContestString_MessedUp2, + ContestString_FailedTargetNervous, + ContestString_FailedAnyoneNervous, + ContestString_Ignored, + ContestString_NoConditionImprove, + ContestString_BadConditionWeakAppeal, + ContestString_Unaffected, + ContestString_AttractedAttention, +}; + +const u8 gText_Contest_Shyness[] = _("shyness"); + +const u8 gText_Contest_Anxiety[] = _("anxiety"); + +const u8 gText_Contest_Laziness[] = _("laziness"); + +const u8 gText_Contest_Hesitancy[] = _("hesitancy"); + +const u8 gText_Contest_Fear[] = _("fear"); + +const u8 ContestString_Coolness[] = _("coolness"); +const u8 ContestString_Beauty2[] = _("beauty"); +const u8 ContestString_Cuteness[] = _("cuteness"); +const u8 ContestString_Smartness[] = _("smartness"); +const u8 ContestString_Toughness[] = _("toughness"); + +const u8 *const gContestCategoryStrings[] = { + ContestString_Coolness, + ContestString_Beauty2, + ContestString_Cuteness, + ContestString_Smartness, + ContestString_Toughness, +}; + +const u8 gUnknown_083CC2EC[] = _("TENSION:"); + +const u8 ContestString_CoolMove[] = _("COOL Move"); + +const u8 ContestString_BeautyMove[] = _("BEAUTY Move"); + +const u8 ContestString_CuteMove[] = _("CUTE Move"); + +const u8 ContestString_SmartMove[] = _("SMART Move"); + +const u8 ContestString_ToughMove[] = _("TOUGH Move"); + +const u8 ContestString_UnknownMoveType[] = _("???"); + +const u8 *const sInvalidContestMoveNames[] = { + ContestString_CoolMove, + ContestString_BeautyMove, + ContestString_CuteMove, + ContestString_SmartMove, + ContestString_ToughMove, + ContestString_UnknownMoveType, +}; + +// unused? +const u8 ContestString_Rank[] = _("RANK"); + +const u8 ContestString_HighlightTransparent_ColorMagenta[] = _("{HIGHLIGHT TRANSPARENT}{COLOR MAGENTA} "); + +const u8 gUnknownText_MissedTurn[] = _("Missed turn"); + +const u8 gUnknownText_LinkStandbyAndWinner[] = _("Link standby..."); +const u8 gUnknownText_ColorWhite2[] = _("{COLOR WHITE2}"); +const u8 gUnknownText_LinkWinner[] = _("The winner is {STR_VAR_1}'s {STR_VAR_2}!\nCongratulations!"); diff --git a/src/debug/crash.c b/src/debug/crash.c index 85058d285..3f9e2d685 100644 --- a/src/debug/crash.c +++ b/src/debug/crash.c @@ -4,7 +4,7 @@ #include "text.h" #include "palette.h" -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; static void CB2_CrashIdle(void); @@ -37,9 +37,9 @@ void Crash(u8 *text) SetMainCallback2(CB2_CrashIdle); DmaFill32Large(3, 0, (void *)VRAM, 0x18000, 0x1000); Text_LoadWindowTemplate(&gWindowTemplate_81E6FD8); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6FD8); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6FD8); LoadFontDefaultPalette(&gWindowTemplate_81E6FD8); - Text_InitWindowAndPrintText(&gUnknown_03004210, text, 1, 9, 7); + Text_InitWindowAndPrintText(&gWindowTemplate_Contest_MoveDescription, text, 1, 9, 7); } static void CB2_CrashIdle(void) diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c index 27d2db66b..c099ecc87 100644 --- a/src/debug/matsuda_debug_menu.c +++ b/src/debug/matsuda_debug_menu.c @@ -2,21 +2,21 @@ #include "matsuda_debug_menu.h" #include "battle.h" #include "contest.h" -#include "contest_link_80C2020.h" -#include "contest_link_80C857C.h" +#include "contest_link.h" +#include "contest_link_util.h" #include "data2.h" +#include "ewram.h" #include "link.h" #include "main.h" #include "menu.h" -#include "palette.h" #include "overworld.h" +#include "palette.h" +#include "scanline_effect.h" #include "sprite.h" #include "start_menu.h" #include "string_util.h" #include "task.h" #include "text.h" -#include "scanline_effect.h" -#include "ewram.h" extern u8 gUnknown_0203856C; extern u8 gContestMonPartyIndex; @@ -109,7 +109,7 @@ static void sub_80A9BE4(u8 taskId) DestroyTask(taskId); if (!(gIsLinkContest & 1)) - sub_80AF668(); + CalculateFinalScores(); sub_80C2358(); } @@ -149,12 +149,12 @@ static void sub_80A9C98(u8 taskId) static void sub_80A9CC0(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C88AC, sub_80A9CDC); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRng, sub_80A9CDC); } static void sub_80A9CDC(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8E1C, sub_80A9D58); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIds, sub_80A9D58); } static void sub_80A9CF8(u8 taskId) @@ -169,7 +169,7 @@ static void sub_80A9CF8(u8 taskId) static void sub_80A9D30(u8 taskId) { - sub_800832C(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_80A9CF8; } @@ -181,15 +181,15 @@ static void sub_80A9D58(u8 taskId) for (i = 0; i < 4; i++) dest[i] = gTasks[taskId].data[5 + i]; - gUnknown_0203869B = sub_80C4B34(dest); - InitContestMonConditions((u8)gSpecialVar_ContestCategory); - sub_80B0F28(0); - SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80A9DBC); + gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(dest); + CalculateRound1Points((u8)gSpecialVar_ContestCategory); + SortContestants(0); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, sub_80A9DBC); } static void sub_80A9DBC(u8 taskId) { - SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80A9DD8); + SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, sub_80A9DD8); } static void sub_80A9DD8(u8 taskId) @@ -607,7 +607,7 @@ void sub_80AA5E8(u8 var) static void sub_80AA614(u8 var1, u8 var2) { - u16 var = InitContestMonConditionI(var1, var2); + u16 var = CalculateContestantRound1Points(var1, var2); ConvertIntToDecimalStringN(gSharedMem, var, STR_CONV_MODE_RIGHT_ALIGN, 3); Text_InitWindowAndPrintText(&gMenuWindow, gSharedMem, 0xE2, 3, 0xC); @@ -859,7 +859,7 @@ void sub_80AACC4(void) { SetDebugMonForContest(); if (!(gIsLinkContest & 1)) - InitContestMonConditions(eMatsudaDebugVar); + CalculateRound1Points(eMatsudaDebugVar); SetMainCallback2(CB2_StartContest); } } @@ -882,7 +882,7 @@ void sub_80AAD44(struct Sprite *sprite, s8 var2) SetDebugMonForContest(); for (i = 0; i < 4; i++) - gContestMonConditions[i] = InitContestMonConditionI(i, gSpecialVar_ContestCategory); + gContestMonRound1Points[i] = CalculateContestantRound1Points(i, gSpecialVar_ContestCategory); SetMainCallback2(c2_exit_to_overworld_1_sub_8080DEC); } } @@ -950,16 +950,16 @@ void sub_80AAF30(void) for (i = 0; i < 3; i++) { - gContestMonConditions[i] = 0; - gUnknown_02038680[i] = 0; - gUnknown_02038678[i] = 0; + gContestMonRound1Points[i] = 0; + gContestMonAppealPointTotals[i] = 0; + gContestMonTotalPoints[i] = 0; gContestMons[i] = gContestMons[3]; } - gContestMonConditions[3] = 0x12C; - gUnknown_02038680[3] = 0x190; - gUnknown_02038678[3] = 0x190; - Contest_SaveWinner(0xFE); + gContestMonRound1Points[3] = 0x12C; + gContestMonAppealPointTotals[3] = 0x190; + gContestMonTotalPoints[3] = 0x190; + Contest_SaveWinner(CONTEST_SAVE_FOR_ARTIST); } u8 MatsudaDebugMenu_SetHighScore(void) @@ -976,9 +976,9 @@ u8 MatsudaDebugMenu_ResetHighScore(void) gUnknown_0203856C = 0; for (i = 0; i < 4; i++) { - gContestMonConditions[i] = 0; - gUnknown_02038680[i] = 0; - gUnknown_02038678[i] = 0; + gContestMonRound1Points[i] = 0; + gContestMonAppealPointTotals[i] = 0; + gContestMonTotalPoints[i] = 0; } CloseMenu(); return 1; diff --git a/src/debug/sound_check_menu.c b/src/debug/sound_check_menu.c index 5b7a26f97..6f6ee58dd 100644 --- a/src/debug/sound_check_menu.c +++ b/src/debug/sound_check_menu.c @@ -56,7 +56,7 @@ static EWRAM_DATA u8 gUnknown_020387D8 = 0; static EWRAM_DATA u8 gUnknown_020387D9 = 0; u16 gSoundTestCryNum; -extern u8 gUnknown_03005E98; +extern u8 gDexCryScreenState; struct MusicPlayerInfo *gUnknown_03005D30; @@ -1208,7 +1208,7 @@ SOUND_LIST_SE void Task_InitCryTest(u8 taskId) { - struct CryRelatedStruct cryStruct, cryStruct2; + struct CryScreenWindow cryStruct, cryStruct2; u8 zero; Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C); @@ -1217,26 +1217,26 @@ void Task_InitCryTest(u8 taskId) ResetSpriteData(); FreeAllSpritePalettes(); - cryStruct.unk0 = 0x2000; - cryStruct.unk2 = 29; + cryStruct.charBase = 0x2000; + cryStruct.screenBase = 29; cryStruct.paletteNo = 12; cryStruct.yPos = 30; cryStruct.xPos = 4; zero = 0; // wtf? - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; - while (sub_8119E3C(&cryStruct, 3) == FALSE) + while (LoadCryWaveformWindow(&cryStruct, 3) == FALSE) ; - cryStruct2.unk0 = 0; - cryStruct2.unk2 = 15; + cryStruct2.charBase = 0; + cryStruct2.screenBase = 15; cryStruct2.paletteNo = 13; cryStruct2.xPos = 12; cryStruct2.yPos = 12; zero = 0; // wtf? - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; while (ShowPokedexCryScreen(&cryStruct2, 2) == FALSE) ; @@ -1255,11 +1255,11 @@ void Task_InitCryTest(u8 taskId) void Task_ProcessCryTestInput(u8 taskId) { - sub_8119F88(3); + UpdateCryWaveformWindow(3); if (gMain.newKeys & A_BUTTON) { - sub_811A050(gSoundTestCryNum); + CryScreenPlayButton(gSoundTestCryNum); } if (gMain.newKeys & R_BUTTON) { diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c index 1501fdd49..acb7a97b1 100644 --- a/src/debug/start_menu_debug.c +++ b/src/debug/start_menu_debug.c @@ -1015,7 +1015,7 @@ u8 DebugMenu_NationalDex(void) GetSetPokedexFlag(i + 1, 2); GetSetPokedexFlag(i + 1, 3); } - gUnknown_03005CE8 = TRUE; + gUnusedPokedexU8 = TRUE; CloseMenu(); return TRUE; } @@ -1030,7 +1030,7 @@ u8 DebugMenu_HoennDex(void) GetSetPokedexFlag(nati, 2); GetSetPokedexFlag(nati, 3); } - gUnknown_03005CE8 = TRUE; + gUnusedPokedexU8 = TRUE; CloseMenu(); return TRUE; } @@ -2589,10 +2589,10 @@ void DebugMenu_8078E68(u8 a0, u8 * a1, u32 a2) } struct GameTimeDebugMenuStruct { - u16 unk0; - u16 unk2; - u8 unk4; - u8 unk5; + u16 totalPoints; + u16 excitementAppealBonus; + u8 round1Points; + u8 contestant; }; const struct GameTimeDebugMenuStruct gUnknown_Debug_839C5F4[] = { @@ -2604,7 +2604,7 @@ const struct GameTimeDebugMenuStruct gUnknown_Debug_839C5F4[] = { void DebugMenu_8078E80(s16 * a0) { Menu_BlankWindowRect(2, 15, 22, 16); - sub_8071F60(0xd0, gUnknown_Debug_839C5F4[*a0].unk4, 15); + sub_8071F60(0xd0, gUnknown_Debug_839C5F4[*a0].round1Points, 15); } void DebugMenu_8078EB0(s16 * a0) @@ -2669,7 +2669,7 @@ void DebugMenu_8078F68(u8 taskId) else { const struct GameTimeDebugMenuStruct *r2 = gUnknown_Debug_839C5F4 + data[0]; - if (DebugMenu_8077DD8(data + r2->unk5, r2->unk0, r2->unk2, gMain.newAndRepeatedKeys) == TRUE) + if (DebugMenu_8077DD8(data + r2->contestant, r2->totalPoints, r2->excitementAppealBonus, gMain.newAndRepeatedKeys) == TRUE) DebugMenu_8078EB0(data); } } diff --git a/src/debug/taya_debug_window.c b/src/debug/taya_debug_window.c index ca66ca01a..9a997a566 100644 --- a/src/debug/taya_debug_window.c +++ b/src/debug/taya_debug_window.c @@ -69,7 +69,7 @@ const u8 gUnknown_Debug_083C4EB0[] = _("Interview(BT)"); const struct { const u8 * text; - u32 unk4; + u32 round1Points; } gUnknown_Debug_083C4EC0[] = { {gUnknown_Debug_083C4E54, 0x0}, {gUnknown_Debug_083C4E5C, 0x1}, @@ -281,7 +281,7 @@ bool8 debug_sub_809089C(void) case -2: return FALSE; default: - gSpecialVar_0x8004 = gUnknown_Debug_083C4EC0[input].unk4; + gSpecialVar_0x8004 = gUnknown_Debug_083C4EC0[input].round1Points; switch (gSpecialVar_0x8004) { case 5: diff --git a/src/debug/tomomichi_debug_menu.c b/src/debug/tomomichi_debug_menu.c index 64da15dc7..94b697954 100644 --- a/src/debug/tomomichi_debug_menu.c +++ b/src/debug/tomomichi_debug_menu.c @@ -4470,47 +4470,47 @@ NAKED void PicTest_Redraw(u8 a0) static void PrepareDebugOverlayBeforeShowingContestPainting(u8 a0) { - struct ContestEntry *contestEntry = &ewram15DE0; + struct ContestWinner *contestEntry = &eCurContestWinner; contestEntry->species = sPicTest_Species; contestEntry->otId = sPicTest_OTID; contestEntry->personality = sPicTest_Personality; switch (a0) { case 0: - ewram15DDF = 0; - ewram15DDE = 0; - contestEntry->contestType = sPicTest_ContestType - 1; - StringCopy(contestEntry->trainer_name, sDummyTrainerName); - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 0; + contestEntry->contestCategory = sPicTest_ContestType - 1; + StringCopy(contestEntry->trainerName, sDummyTrainerName); + StringCopy(contestEntry->nickname, sDummyNickname); break; case 1: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = sPicTest_MuseumArtTitleType - 1; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = sPicTest_MuseumArtTitleType - 1; + StringCopy(contestEntry->nickname, sDummyNickname); break; case 2: - ewram15DDF = 1; - ewram15DDE = 8; - contestEntry->contestType = sPicTest_PreviewType - 1; + eCurContestWinnerIsForArtist = TRUE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = sPicTest_PreviewType - 1; break; case 3: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = 0; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = 0; + StringCopy(contestEntry->nickname, sDummyNickname); break; case 4: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = 3; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = 3; + StringCopy(contestEntry->nickname, sDummyNickname); break; case 5: - ewram15DDF = 0; - ewram15DDE = 8; - contestEntry->contestType = 9; - StringCopy(contestEntry->pokemon_name, sDummyNickname); + eCurContestWinnerIsForArtist = FALSE; + eCurContestWinnerSaveIdx = 8; + contestEntry->contestCategory = 9; + StringCopy(contestEntry->nickname, sDummyNickname); break; } } diff --git a/src/debug/watanabe_debug_menu.c b/src/debug/watanabe_debug_menu.c index 205d4d5e3..fb6f3e7d2 100644 --- a/src/debug/watanabe_debug_menu.c +++ b/src/debug/watanabe_debug_menu.c @@ -33,9 +33,9 @@ #include "field_effect.h" struct WatanabeDebugMenuItemSubstruct { - u32 unk0; - u32 unk4; - u8 unk8; + u32 totalPoints; + u32 round1Points; + u8 random; u8 unk9; }; @@ -54,13 +54,13 @@ struct WatanabeEwram17000 { u8 unk1_0:4; u8 unk1_4:1; u8 unk1_5:3; - u8 unk2; + u8 excitementAppealBonus; u8 unk3; u8 fill4[5]; u8 unk9; u8 unkA; u8 unkB; - u8 unkC; + u8 contestant; }; struct WatanabeEwram18000 { @@ -74,14 +74,14 @@ struct WatanabeEwram18000 { }; struct WatanabeEwram18000_2 { - u16 unk0; - u8 unk2; + u16 totalPoints; + u8 excitementAppealBonus; u8 unk3; - u8 unk4; - u8 unk5; + u8 round1Points; + u8 contestant; u8 unk6; u8 unk7; - u8 unk8; + u8 random; u8 unk9; u8 unkA; struct PlttData unkC; @@ -446,7 +446,7 @@ void debug_80C3A50(u8 taskId) debug_80C3800(species, 18, 17); - spriteId = sub_8091A4C(saveBlock2->playerGender, 0x98, 0x28, 0); + spriteId = CreateSizeScreenTrainerPic(saveBlock2->playerGender, 0x98, 0x28, 0); gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 2; gSprites[spriteId].oam.priority = 0; @@ -458,7 +458,7 @@ void debug_80C3A50(u8 taskId) gTasks[taskId].data[4] = gPokedexEntries[natDexNum].trainerOffset; gTasks[taskId].data[6] = gPokedexEntries[natDexNum].trainerScale; - spriteId2 = sub_80918EC(natDexNum, 0x58, 0x28, 1); + spriteId2 = CreateMonSpriteFromNationalDexNumber(natDexNum, 0x58, 0x28, 1); gSprites[spriteId2].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId2].oam.matrixNum = 1; gSprites[spriteId2].oam.priority = 0; @@ -601,7 +601,7 @@ NAKED void debug_80C3A50(u8 taskId) "\tmov\tr1, #0x98\n" "\tmov\tr2, #0x28\n" "\tmov\tr3, #0x0\n" - "\tbl\tsub_8091A4C\n" + "\tbl\tCreateSizeScreenTrainerPic\n" "\tmov\tr2, sp\n" "\tstrh\tr0, [r2, #0x10]\n" "\tadd\tr3, r0, #0\n" @@ -668,7 +668,7 @@ NAKED void debug_80C3A50(u8 taskId) "\tmov\tr1, #0x58\n" "\tmov\tr2, #0x28\n" "\tmov\tr3, #0x1\n" - "\tbl\tsub_80918EC\n" + "\tbl\tCreateMonSpriteFromNationalDexNumber\n" "\tmov\tr3, sp\n" "\tstrh\tr0, [r3, #0x1c]\n" "\tlsl\tr0, r0, #0x10\n" @@ -1362,12 +1362,12 @@ void debug_80C4AC4(u8 taskId) PlaySE(SE_SELECT); gTrainerBattleOpponent = SECRET_BASE_OPPONENT; eWatanabe17000.unk1_4 = 0; - eWatanabe17000.unk2 = 0xAC; + eWatanabe17000.excitementAppealBonus = 0xAC; eWatanabe17000.unk3 = 0xFF; eWatanabe17000.unk9 = 0; eWatanabe17000.unkA = 0; eWatanabe17000.unkB = 0; - eWatanabe17000.unkC = 0; + eWatanabe17000.contestant = 0; gTasks[taskId].func = debug_80C4F48; } else if (gMain.newAndRepeatedKeys & DPAD_UP) @@ -2362,11 +2362,11 @@ const u32 gUnknown_Debug_083F8768[] = { void debug_80C6544(u8 a0) { u32 r7 = debug_80C5B60(gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]); - u32 r5 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->unk0; - u32 r4 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->unk4; + u32 r5 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->totalPoints; + u32 r4 = gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->round1Points; u32 r3 = gUnknown_Debug_083F8768[gUnknown_Debug_2038A1C->unk16a]; - if (gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->unk8 == 0) + if (gUnknown_Debug_083F8554[gUnknown_Debug_083F8698[gUnknown_Debug_2038A1C->unk168].text[gUnknown_Debug_2038A1C->unk169]].data.type4->random == 0) { switch (a0) { @@ -2568,13 +2568,13 @@ void InitSeePokemonGraphics(void) REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; CreateTask(debug_80C6B00, 0); gUnknown_Debug_2038A20 = &eWatanabe18000_2; - gUnknown_Debug_2038A20->unk0 = 0x115; - gUnknown_Debug_2038A20->unk2 = 0; + gUnknown_Debug_2038A20->totalPoints = 0x115; + gUnknown_Debug_2038A20->excitementAppealBonus = 0; gUnknown_Debug_2038A20->unk3 = 0; - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; gUnknown_Debug_2038A20->unk7 = 0; gUnknown_Debug_2038A20->unkA = 0; - gUnknown_Debug_2038A20->unk8 = 0; + gUnknown_Debug_2038A20->random = 0; spriteId = CreateSprite(&gSpriteTemplate_83F8874, 0x6C, 0x74, 0); gSprites[spriteId].data[0] = 0; StartSpriteAnim(gSprites + spriteId, 0); @@ -2670,33 +2670,33 @@ void debug_80C6B00(u8 taskId) void debug_80C6CB8(u8 taskId) { - DecompressPicFromTable_2(gMonFrontPicTable + gUnknown_Debug_2038A20->unk0, gMonFrontPicCoords[gUnknown_Debug_2038A20->unk0].coords, gMonFrontPicCoords[gUnknown_Debug_2038A20->unk0].y_offset, gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], gUnknown_Debug_2038A20->unk0); - LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->unk0); - GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->unk0, 1); - gUnknown_Debug_2038A20->unk2 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0); - gSprites[gUnknown_Debug_2038A20->unk2].callback = debug_69; - gSprites[gUnknown_Debug_2038A20->unk2].oam.priority = 0; - - DecompressPicFromTable_2(gMonBackPicTable + gUnknown_Debug_2038A20->unk0, gMonBackPicCoords[gUnknown_Debug_2038A20->unk0].coords, gMonBackPicCoords[gUnknown_Debug_2038A20->unk0].y_offset, gUnknown_081FAF4C[0], gUnknown_081FAF4C[2], gUnknown_Debug_2038A20->unk0); - LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->unk0); - GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->unk0, 2); - gUnknown_Debug_2038A20->unk3 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x78, 0); + DecompressPicFromTable_2(gMonFrontPicTable + gUnknown_Debug_2038A20->totalPoints, gMonFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gMonFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], gUnknown_Debug_2038A20->totalPoints); + LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->totalPoints); + GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->totalPoints, 1); + gUnknown_Debug_2038A20->excitementAppealBonus = CreateSprite(&gCreatingSpriteTemplate, 0x28, 0x28, 0); + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].callback = debug_69; + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.priority = 0; + + DecompressPicFromTable_2(gMonBackPicTable + gUnknown_Debug_2038A20->totalPoints, gMonBackPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gMonBackPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[2], gUnknown_Debug_2038A20->totalPoints); + LoadCompressedObjectPalette(gMonPaletteTable + gUnknown_Debug_2038A20->totalPoints); + GetMonSpriteTemplate_803C56C(gUnknown_Debug_2038A20->totalPoints, 2); + gUnknown_Debug_2038A20->unk3 = CreateSprite(&gCreatingSpriteTemplate, 0x28, 0x78, 0); gSprites[gUnknown_Debug_2038A20->unk3].callback = debug_69; gSprites[gUnknown_Debug_2038A20->unk3].oam.priority = 0; - gUnknown_Debug_2038A20->unk4 = CreateMonIcon(gUnknown_Debug_2038A20->unk0, sub_809D62C, 0x68, 0x2C, 0, 0); + gUnknown_Debug_2038A20->round1Points = CreateMonIcon(gUnknown_Debug_2038A20->totalPoints, sub_809D62C, 0x68, 0x2C, 0, 0); - sub_8091738(SpeciesToNationalPokedexNum(gUnknown_Debug_2038A20->unk0), 2, 0x3fc); + PrintFootprint(SpeciesToNationalPokedexNum(gUnknown_Debug_2038A20->totalPoints), 2, 0x3fc); ((u16 *)(VRAM + 0xF858))[0] = 0xF3FC; ((u16 *)(VRAM + 0xF858))[1] = 0xF3FD; ((u16 *)(VRAM + 0xF858))[32] = 0xF3FE; ((u16 *)(VRAM + 0xF858))[33] = 0xF3FF; - debug_80C3800(gUnknown_Debug_2038A20->unk0, 17, 3); - debug_80C376C(gUnknown_Debug_2038A20->unk0, 26, 5); + debug_80C3800(gUnknown_Debug_2038A20->totalPoints, 17, 3); + debug_80C376C(gUnknown_Debug_2038A20->totalPoints, 26, 5); - gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum; + gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum; CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 0x20); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 0x20); @@ -2704,7 +2704,7 @@ void debug_80C6CB8(u8 taskId) gUnknown_Debug_2038A20->unk9 = 0; StopCryAndClearCrySongs(); - PlayCry1(gUnknown_Debug_2038A20->unk0, 0); + PlayCry1(gUnknown_Debug_2038A20->totalPoints, 0); } void debug_80C6EE8(u8 taskId) @@ -2734,17 +2734,17 @@ void debug_80C6FA8(u8 taskId) } else if (gMain.newAndRepeatedKeys & R_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C3878(0, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C3878(0, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C71FC; } else if (gMain.newAndRepeatedKeys & L_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C3878(1, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C3878(1, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C71FC; } else if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 1; + gUnknown_Debug_2038A20->contestant = 1; REG_WIN0H = 0x51EF; REG_WIN0V = 0x4167; gTasks[taskId].func = debug_80C7294; @@ -2767,9 +2767,9 @@ void debug_80C6FA8(u8 taskId) { gUnknown_Debug_2038A20->unk9 ^= 1; if (gUnknown_Debug_2038A20->unk9) - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); else - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 32); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 32); gTasks[taskId].func = debug_80C6EE8; @@ -2779,11 +2779,11 @@ void debug_80C6FA8(u8 taskId) if (gMain.newKeys & SELECT_BUTTON) { StopCryAndClearCrySongs(); - PlayCry1(gUnknown_Debug_2038A20->unk0, 0); + PlayCry1(gUnknown_Debug_2038A20->totalPoints, 0); } - gUnknown_Debug_2038A20->unk8 += 4; - gUnknown_Debug_2038A20->unk8 &= 0x1f; - ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->unk8]; + gUnknown_Debug_2038A20->random += 4; + gUnknown_Debug_2038A20->random &= 0x1f; + ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->random]; } } #else @@ -3088,11 +3088,11 @@ NAKED void debug_80C6FA8(u8 taskId) void debug_80C71FC(u8 taskId) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum)); - DestroySprite(gSprites + gUnknown_Debug_2038A20->unk2); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum)); + DestroySprite(gSprites + gUnknown_Debug_2038A20->excitementAppealBonus); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk3].oam.paletteNum)); DestroySprite(gSprites + gUnknown_Debug_2038A20->unk3); - sub_809D510(gSprites + gUnknown_Debug_2038A20->unk4); + sub_809D510(gSprites + gUnknown_Debug_2038A20->round1Points); gTasks[taskId].func = debug_80C6CB8; } @@ -3100,14 +3100,14 @@ void debug_80C7294(u8 taskId) { if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; gTasks[taskId].func = debug_80C6EE8; } else if (gMain.newKeys & B_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; CpuCopy16(gUnknown_Debug_2038A20->unk10, gPlttBufferUnfaded + 0x80, 32); @@ -3181,7 +3181,7 @@ void debug_80C74E4(u8 taskId) void debug_80C7584(struct Sprite *sprite) { - if (!gUnknown_Debug_2038A20->unk5) + if (!gUnknown_Debug_2038A20->contestant) sprite->invisible = TRUE; else { @@ -3237,13 +3237,13 @@ void InitSeeTrainers(void) REG_DISPCNT = 0x3340; CreateTask(debug_80C777C, 0); gUnknown_Debug_2038A20 = &eWatanabe18000_2; - gUnknown_Debug_2038A20->unk0 = 0; - gUnknown_Debug_2038A20->unk2 = 0; + gUnknown_Debug_2038A20->totalPoints = 0; + gUnknown_Debug_2038A20->excitementAppealBonus = 0; gUnknown_Debug_2038A20->unk3 = 0; - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; gUnknown_Debug_2038A20->unk7 = 0; gUnknown_Debug_2038A20->unkA = 0; - gUnknown_Debug_2038A20->unk8 = 0; + gUnknown_Debug_2038A20->random = 0; spriteId = CreateSprite(&gSpriteTemplate_83F8874, 0x6c, 0x74, 0); gSprites[spriteId].data[0] = 0; StartSpriteAnim(gSprites + spriteId, 0); @@ -3297,16 +3297,16 @@ void debug_80C777C(u8 taskId) void debug_80C7934(u8 taskId) { - DecompressPicFromTable_2(gTrainerFrontPicTable + gUnknown_Debug_2038A20->unk0, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->unk0].coords, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->unk0].y_offset, gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], gUnknown_Debug_2038A20->unk0); - LoadCompressedObjectPalette(gTrainerFrontPicPaletteTable + gUnknown_Debug_2038A20->unk0); - GetMonSpriteTemplate_803C5A0(gUnknown_Debug_2038A20->unk0, 1); - gUnknown_Debug_2038A20->unk2 = CreateSprite(&gUnknown_02024E8C, 0x28, 0x28, 0); - gSprites[gUnknown_Debug_2038A20->unk2].callback = debug_69; - gSprites[gUnknown_Debug_2038A20->unk2].oam.priority = 0; + DecompressPicFromTable_2(gTrainerFrontPicTable + gUnknown_Debug_2038A20->totalPoints, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].coords, gTrainerFrontPicCoords[gUnknown_Debug_2038A20->totalPoints].y_offset, gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], gUnknown_Debug_2038A20->totalPoints); + LoadCompressedObjectPalette(gTrainerFrontPicPaletteTable + gUnknown_Debug_2038A20->totalPoints); + GetMonSpriteTemplate_803C5A0(gUnknown_Debug_2038A20->totalPoints, 1); + gUnknown_Debug_2038A20->excitementAppealBonus = CreateSprite(&gCreatingSpriteTemplate, 0x28, 0x28, 0); + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].callback = debug_69; + gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.priority = 0; - debug_80C376C(gUnknown_Debug_2038A20->unk0, 26, 5); + debug_80C376C(gUnknown_Debug_2038A20->totalPoints, 26, 5); - gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum; + gUnknown_Debug_2038A20->unk6 = gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum; CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 0x20); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 0x20); @@ -3342,17 +3342,17 @@ void debug_80C7B14(u8 taskId) } else if (gMain.newAndRepeatedKeys & R_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C38B4(0, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C38B4(0, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C7D44; } else if (gMain.newAndRepeatedKeys & L_BUTTON) { - gUnknown_Debug_2038A20->unk0 = debug_80C38B4(1, gUnknown_Debug_2038A20->unk0); + gUnknown_Debug_2038A20->totalPoints = debug_80C38B4(1, gUnknown_Debug_2038A20->totalPoints); gTasks[taskId].func = debug_80C7D44; } else if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 1; + gUnknown_Debug_2038A20->contestant = 1; REG_WIN0H = 0x51EF; REG_WIN0V = 0x4167; gTasks[taskId].func = debug_80C7DDC; @@ -3376,11 +3376,11 @@ void debug_80C7B14(u8 taskId) gUnknown_Debug_2038A20->unk9 ^= 1; if (gUnknown_Debug_2038A20->unk9) { - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 0), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); } else { - LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->unk0, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromOtIdPersonality(gUnknown_Debug_2038A20->totalPoints, 0, 9), gUnknown_Debug_2038A20->unk6 * 16 + 0x100, 0x20); } CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferUnfaded + 0x80, 32); CpuCopy16(gPlttBufferUnfaded + gUnknown_Debug_2038A20->unk6 * 16 + 0x100, gPlttBufferFaded + 0x80, 32); @@ -3388,9 +3388,9 @@ void debug_80C7B14(u8 taskId) } else { - gUnknown_Debug_2038A20->unk8 += 4; - gUnknown_Debug_2038A20->unk8 &= 0x1f; - ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->unk8]; + gUnknown_Debug_2038A20->random += 4; + gUnknown_Debug_2038A20->random &= 0x1f; + ((u16 *)PLTT)[0xa1 + gUnknown_Debug_2038A20->unk7] = gUnknown_Debug_083F8790[gUnknown_Debug_2038A20->random]; } } #else @@ -3679,11 +3679,11 @@ NAKED void debug_80C7B14(u8 taskId) void debug_80C7D44(u8 taskId) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk2].oam.paletteNum)); - DestroySprite(gSprites + gUnknown_Debug_2038A20->unk2); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->excitementAppealBonus].oam.paletteNum)); + DestroySprite(gSprites + gUnknown_Debug_2038A20->excitementAppealBonus); FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gUnknown_Debug_2038A20->unk3].oam.paletteNum)); DestroySprite(gSprites + gUnknown_Debug_2038A20->unk3); - sub_809D510(gSprites + gUnknown_Debug_2038A20->unk4); + sub_809D510(gSprites + gUnknown_Debug_2038A20->round1Points); gTasks[taskId].func = debug_80C7934; } @@ -3691,14 +3691,14 @@ void debug_80C7DDC(u8 taskId) { if (gMain.newKeys & A_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; gTasks[taskId].func = debug_80C7A54; } else if (gMain.newKeys & B_BUTTON) { - gUnknown_Debug_2038A20->unk5 = 0; + gUnknown_Debug_2038A20->contestant = 0; REG_WIN0H = 0x51EF; REG_WIN0V = 0x699F; CpuCopy16(gUnknown_Debug_2038A20->unk10, gPlttBufferUnfaded + 0x80, 32); diff --git a/src/decompress.c b/src/decompress.c index c0158ada8..7069facf7 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -67,20 +67,22 @@ void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, u8 coords LZ77UnCompWram(src->data, dest); } -void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 coords, u32 y_offset, u32 d, void *dest, s32 species, u32 pid) +void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 coords, u32 y_offset, + void *decompBuf, void *dest, s32 species, u32 pid) { u32 frontOrBack; - // gUnknown_081FAF4C appears to be a list of pointers to locations to store poke pics for back and front pic here. the first and third pointers are used for back while the others are used for front. - if (dest == gUnknown_081FAF4C[0] || dest == gUnknown_081FAF4C[2]) + // gMonSpriteGfx_Sprite_ptr appears to be a list of pointers to locations to store poke pics for back and front pic here. the first and third pointers are used for back while the others are used for front. + if (dest == gMonSpriteGfx_Sprite_ptr[0] || dest == gMonSpriteGfx_Sprite_ptr[2]) frontOrBack = 0; // backPic else frontOrBack = 1; // frontPic - LoadSpecialPokePic(src, coords, y_offset, d, dest, species, pid, frontOrBack); + LoadSpecialPokePic(src, coords, y_offset, decompBuf, dest, species, pid, frontOrBack); } -void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, u32 d, void *dest, s32 species, u32 pid, u32 frontOrBack) +void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, u32 b, u32 c, + void *decompBuffer, void *dest, s32 species, u32 pid, u32 frontOrBack) { u8 frontOrBack8 = frontOrBack; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index fdc12129e..f0c8f232a 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -24,7 +24,7 @@ #include "trig.h" #include "trade.h" -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; struct EggHatchData { @@ -356,13 +356,13 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) { u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, ewram0_6, gUnknown_081FAF4C[2 * a0 + 1], species, pid); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gSharedMem, gMonSpriteGfx_Sprite_ptr[2 * a0 + 1], species, pid); LoadCompressedObjectPalette(GetMonSpritePalStruct(mon)); } break; case 1: GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(mon)->tag, r5); - spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6); + spriteID = CreateSprite(&gCreatingSpriteTemplate, 120, 70, 6); gSprites[spriteID].invisible = TRUE; gSprites[spriteID].callback = SpriteCallbackDummy; break; @@ -716,9 +716,6 @@ static void SpriteCB_EggShard(struct Sprite* sprite) DestroySprite(sprite); } -// Converts a number to Q8.8 fixed-point format -#define Q_8_8(n) ((s16)((n) * 256)) - static const s16 sEggShardVelocities[][2] = { {Q_8_8(-1.5), Q_8_8(-3.75)}, @@ -764,7 +761,8 @@ static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 static void EggHatchPrintMessage1(u8* src) { - Text_InitWindow8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); + Contest_StartTextPrinter( + &gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); } static void EggHatchPrintMessage2(u8* src) diff --git a/src/event_data.c b/src/event_data.c index e114af901..b71ad77bd 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -62,9 +62,9 @@ void EnableNationalPokedex(void) gSaveBlock2.pokedex.nationalMagic = 0xDA; *nationalDexVar = 0x302; FlagSet(FLAG_SYS_NATIONAL_DEX); - gSaveBlock2.pokedex.unknown1 = 1; + gSaveBlock2.pokedex.mode = 1; gSaveBlock2.pokedex.order = 0; - sub_808C0A0(); + ResetPokedexScrollPositions(); } bool32 IsNationalPokedexEnabled(void) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 47a453693..f97004422 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -64,11 +64,11 @@ void sub_8023AD8(void); void nullsub_6(void); bool32 IsHMMove2(u16 move); -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gBattleTerrain; extern u8 gReservedSpritePaletteCount; extern u16 gMoveToLearn; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern bool8 gAffineAnimsDisabled; extern u8 gDisplayedStringBattle[]; extern u8 gBattleTextBuff2[]; @@ -204,7 +204,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gBattle_BG3_X = 256; gBattle_BG3_Y = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); @@ -228,13 +228,13 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gMonFrontPicCoords[currSpecies].coords, gMonFrontPicCoords[currSpecies].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[1], currSpecies); + gMonSpriteGfx_Sprite_ptr[1], currSpecies); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(currSpecies, TiD, PiD); LoadCompressedPalette(*pokePal, 0x110, 0x20); GetMonSpriteTemplate_803C56C(currSpecies, 1); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 1; @@ -245,13 +245,13 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, gMonFrontPicCoords[speciesToEvolve].coords, gMonFrontPicCoords[speciesToEvolve].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[3], speciesToEvolve); + gMonSpriteGfx_Sprite_ptr[3], speciesToEvolve); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); GetMonSpriteTemplate_803C56C(speciesToEvolve, 3); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; gSprites[ID].invisible = TRUE; @@ -312,7 +312,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) gBattle_BG3_X = 256; gBattle_BG3_Y = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); gBattleTerrain = BATTLE_TERRAIN_PLAIN; sub_800D6D4(); @@ -325,13 +325,13 @@ static void CB2_EvolutionSceneLoadGraphics(void) gMonFrontPicCoords[postEvoSpecies].coords, gMonFrontPicCoords[postEvoSpecies].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[3], postEvoSpecies); + gMonSpriteGfx_Sprite_ptr[3], postEvoSpecies); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -395,7 +395,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) gMonFrontPicCoords[postEvoSpecies].coords, gMonFrontPicCoords[postEvoSpecies].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[3], postEvoSpecies); + gMonSpriteGfx_Sprite_ptr[3], postEvoSpecies); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); gMain.state++; @@ -406,8 +406,8 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) u8 ID; GetMonSpriteTemplate_803C56C(postEvoSpecies, 3); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -445,13 +445,13 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri gMonFrontPicCoords[speciesToEvolve].coords, gMonFrontPicCoords[speciesToEvolve].y_offset, (void*)EWRAM, - gUnknown_081FAF4C[1], speciesToEvolve); + gMonSpriteGfx_Sprite_ptr[1], speciesToEvolve); pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD); LoadCompressedPalette(*pokePal, 0x120, 0x20); GetMonSpriteTemplate_803C56C(speciesToEvolve, 1); - gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable; - sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30); + gCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gCreatingSpriteTemplate, 120, 64, 30); gSprites[ID].callback = nullsub_37; gSprites[ID].oam.paletteNum = 2; @@ -476,7 +476,7 @@ static void CB2_EvolutionSceneUpdate(void) { AnimateSprites(); BuildOamBuffer(); - Text_UpdateWindowInBattle(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gWindowTemplate_Contest_MoveDescription); UpdatePaletteFade(); RunTasks(); } @@ -549,12 +549,13 @@ static void Task_EvolutionScene(u8 taskID) if (!gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, BattleText_StartEvo); - Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gStringVar4, 144, 2, 15); gTasks[taskID].tState++; } break; case 2: // wait for string, play cry - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) { PlayCry1(gTasks[taskID].tPreEvoSpecies, 0); gTasks[taskID].tState++; @@ -637,7 +638,8 @@ static void Task_EvolutionScene(u8 taskID) if (IsCryFinished() && !gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo); - Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gStringVar4, 144, 2, 15); PlayBGM(MUS_EVOLVED); gTasks[taskID].tState++; SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); @@ -649,7 +651,7 @@ static void Task_EvolutionScene(u8 taskID) } break; case 14: // check if it wants to learn a new move - if (gUnknown_03004210.state == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0) { var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove); if (var != 0 && !gTasks[taskID].tEvoWasStopped) @@ -706,59 +708,64 @@ static void Task_EvolutionScene(u8 taskID) if (IsCryFinished()) { StringExpandPlaceholders(gStringVar4, BattleText_StopEvo); - Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gStringVar4, 144, 2, 15); gTasks[taskID].tEvoWasStopped = TRUE; gTasks[taskID].tState = 14; } break; case 19: // pokemon learned a new move, print string and play a fanfare - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { sub_8024CEC(); PlayFanfare(MUS_LEVEL_UP); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[3]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } break; case 20: // wait a bit and check if can learn another move - if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0) gTasks[taskID].tState = 14; break; case 21: // try to learn a new move switch (gTasks[taskID].tLearnMoveState) { case 0: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { sub_8024CEC(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[4]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; } break; case 1: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[5]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; } break; case 2: - if (gUnknown_03004210.state != 0) + if (gWindowTemplate_Contest_MoveDescription.state != 0) break; if (!IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[6]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 5; gTasks[taskID].tdata10 = 9; gTasks[taskID].tLearnMoveState++; } case 3: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { sub_8023A80(); gTasks[taskID].tLearnMoveState++; @@ -785,7 +792,8 @@ static void Task_EvolutionScene(u8 taskID) { sub_8023AD8(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; @@ -800,7 +808,8 @@ static void Task_EvolutionScene(u8 taskID) { sub_8023AD8(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); PlaySE(SE_SELECT); gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; } @@ -826,7 +835,11 @@ static void Task_EvolutionScene(u8 taskID) if (IsHMMove2(move)) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[307]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter(&gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 144, + 2, + 15); gTasks[taskID].tLearnMoveState = 11; } else @@ -839,42 +852,50 @@ static void Task_EvolutionScene(u8 taskID) RemoveMonPPBonus(mon, var); SetMonMoveSlot(mon, gMoveToLearn, var); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[207]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter(&gWindowTemplate_Contest_MoveDescription, + gDisplayedStringBattle, + 144, + 2, + 15); gTasks[taskID].tLearnMoveState++; } } } break; case 7: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[7]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tLearnMoveState++; } break; case 8: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[208]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tState = 19; } break; case 9: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[8]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tData9 = 10; gTasks[taskID].tdata10 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[9]); - Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Contest_StartTextPrinter( + &gWindowTemplate_Contest_MoveDescription, gDisplayedStringBattle, 144, 2, 15); gTasks[taskID].tState = 14; break; case 11: - if (gUnknown_03004210.state == 0 && !IsSEPlaying()) + if (gWindowTemplate_Contest_MoveDescription.state == 0 && !IsSEPlaying()) gTasks[taskID].tLearnMoveState = 5; break; } @@ -891,7 +912,11 @@ static void Task_TradeEvolutionScene(u8 taskID) { case 0: StringExpandPlaceholders(gStringVar4, BattleText_StartEvo); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gStringVar4, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState++; break; case 1: @@ -979,7 +1004,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsCryFinished() && !gPaletteFade.active) { StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gStringVar4, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); PlayFanfare(MUS_EVOLVED); gTasks[taskID].tState++; SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies)); @@ -1013,7 +1042,11 @@ static void Task_TradeEvolutionScene(u8 taskID) else { PlayBGM(MUS_EVOLUTION); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gOtherText_LinkStandby2, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gOtherText_LinkStandby2, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState++; } } @@ -1031,7 +1064,11 @@ static void Task_TradeEvolutionScene(u8 taskID) sub_8024CEC(); PlayFanfare(MUS_LEVEL_UP); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[3]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } @@ -1048,7 +1085,11 @@ static void Task_TradeEvolutionScene(u8 taskID) { sub_8024CEC(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[4]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } break; @@ -1056,7 +1097,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->window.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[5]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } break; @@ -1066,7 +1111,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[6]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tData9 = 5; gTasks[taskID].tdata10 = 9; gTasks[taskID].tLearnMoveState++; @@ -1104,7 +1153,11 @@ static void Task_TradeEvolutionScene(u8 taskID) Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD); DestroyMenuCursor(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); PlaySE(SE_SELECT); if (sEvoCursorPos != 0) gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; @@ -1120,7 +1173,11 @@ static void Task_TradeEvolutionScene(u8 taskID) Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD); DestroyMenuCursor(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[292]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); PlaySE(SE_SELECT); gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10; } @@ -1146,7 +1203,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsHMMove2(move)) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[307]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState = 11; } else @@ -1159,7 +1220,11 @@ static void Task_TradeEvolutionScene(u8 taskID) RemoveMonPPBonus(mon, var); SetMonMoveSlot(mon, gMoveToLearn, var); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[207]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } } @@ -1169,7 +1234,11 @@ static void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->window.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[7]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tLearnMoveState++; } break; @@ -1177,20 +1246,32 @@ static void Task_TradeEvolutionScene(u8 taskID) if (gUnknown_03004828->window.state == 0 && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[208]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState = 15; } break; case 9: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[8]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tData9 = 10; gTasks[taskID].tdata10 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[9]); - Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15); + Contest_StartTextPrinter(&gUnknown_03004828->window, + gDisplayedStringBattle, + gUnknown_03004828->textWindowBaseTileNum, + 2, + 15); gTasks[taskID].tState = 13; break; case 11: @@ -1229,7 +1310,7 @@ void unref_sub_8113B50(u8 *a, u8 *b) for (sp8 = 0; sp8 < 64; sp8++) { sEvoInfo.unk84[sp8] = 0; - sEvoInfo.unk4[sp8] = 0; + sEvoInfo.round1Points[sp8] = 0; sEvoInfo.unk44[sp8] = 0; for (r6 = 0; r6 < 32; r6++) { @@ -1268,14 +1349,14 @@ void unref_sub_8113B50(u8 *a, u8 *b) case 0: if (*r2 & 0xF) { - sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6; + sEvoInfo.unk10C4[sp8][sEvoInfo.round1Points[sp8]] = r6; r3 = 1; } break; case 1: if (*r2 & 0xF0) { - sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6; + sEvoInfo.unk10C4[sp8][sEvoInfo.round1Points[sp8]] = r6; r3 = 1; } break; @@ -1287,16 +1368,16 @@ void unref_sub_8113B50(u8 *a, u8 *b) case 0: if (*r2 & 0xF) { - sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1; - sEvoInfo.unk4[sp8]++; + sEvoInfo.unk18C4[sp8][sEvoInfo.round1Points[sp8]] = r6 - 1; + sEvoInfo.round1Points[sp8]++; r3 = 0; } break; case 1: if (*r2 & 0xF0) { - sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1; - sEvoInfo.unk4[sp8]++; + sEvoInfo.unk18C4[sp8][sEvoInfo.round1Points[sp8]] = r6 - 1; + sEvoInfo.round1Points[sp8]++; r3 = 0; } break; @@ -1310,8 +1391,8 @@ void unref_sub_8113B50(u8 *a, u8 *b) } if (r3) { - sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6; - sEvoInfo.unk4[sp8]++; + sEvoInfo.unk18C4[sp8][sEvoInfo.round1Points[sp8]] = r6; + sEvoInfo.round1Points[sp8]++; } //_08113D26 if (!((sp8 + 1) & 7)) @@ -1392,9 +1473,9 @@ void unref_sub_8113B50(u8 *a, u8 *b) for (sp8 = 0; sp8 < 0x40; sp8++) //_08113E3A { - if (sEvoInfo.unk4[sp8] < sEvoInfo.unk44[sp8]) + if (sEvoInfo.round1Points[sp8] < sEvoInfo.unk44[sp8]) { - for (spC = 0; spC < sEvoInfo.unk4[sp8]; spC++) + for (spC = 0; spC < sEvoInfo.round1Points[sp8]; spC++) { sp14 = 0x100; @@ -1431,19 +1512,19 @@ void unref_sub_8113B50(u8 *a, u8 *b) } } //_08113F9E - if (sEvoInfo.unk4[sp8] == sEvoInfo.unk44[sp8]) + if (sEvoInfo.round1Points[sp8] == sEvoInfo.unk44[sp8]) { - for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + for (r6 = 0; r6 < sEvoInfo.round1Points[sp8]; r6++) sub_81141F0(r6, r6, sp8); } //_08113FCC - if (sEvoInfo.unk4[sp8] > sEvoInfo.unk44[sp8]) + if (sEvoInfo.round1Points[sp8] > sEvoInfo.unk44[sp8]) { for (sp10 = 0; sp10 < sEvoInfo.unk44[sp8]; sp10++) { sp14 = 0x100; - for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + for (r6 = 0; r6 < sEvoInfo.round1Points[sp8]; r6++) { s32 r3; @@ -1472,7 +1553,7 @@ void unref_sub_8113B50(u8 *a, u8 *b) sEvoInfo.unkC4[sp8][spC] = 1; } //_08114104 - for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++) + for (r6 = 0; r6 < sEvoInfo.round1Points[sp8]; r6++) { sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk30C4[sp8][r6]; sEvoInfo.unk28C4[sp8][r6] = sEvoInfo.unk38C4[sp8][r6]; diff --git a/src/field_effect.c b/src/field_effect.c index 280eb20bc..80f3d25d1 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -543,25 +543,25 @@ u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority) u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority) { - DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gUnknown_081FAF4C[3], gUnknown_081FAF4C[3], species); + DecompressPicFromTable_2(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gMonSpriteGfx_Sprite_ptr[3], gMonSpriteGfx_Sprite_ptr[3], species); LoadCompressedObjectPalette(&gMonPaletteTable[species]); GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = gMonPaletteTable[0].tag; + gCreatingSpriteTemplate.paletteTag = gMonPaletteTable[0].tag; PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[0].tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); + return CreateSprite(&gCreatingSpriteTemplate, x, y, subpriority); } u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) { const struct CompressedSpritePalette *spritePalette; - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gUnknown_081FAF4C[3] /* this is actually u8* or something, pointing to ewram */, gUnknown_081FAF4C[3], species, g); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gMonSpriteGfx_Sprite_ptr[3] /* this is actually u8* or something, pointing to ewram */, gMonSpriteGfx_Sprite_ptr[3], species, g); spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); LoadCompressedObjectPalette(spritePalette); GetMonSpriteTemplate_803C56C(species, 3); - gUnknown_02024E8C.paletteTag = spritePalette->tag; + gCreatingSpriteTemplate.paletteTag = spritePalette->tag; PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); - return CreateSprite(&gUnknown_02024E8C, x, y, subpriority); + return CreateSprite(&gCreatingSpriteTemplate, x, y, subpriority); } void FreeResourcesAndDestroySprite(struct Sprite *sprite) diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index fea93f215..5ca114f49 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -490,7 +490,7 @@ void sub_8081050(u8 taskId) case 1: if (!PaletteFadeActive() && BGMusicStopped()) { - sub_800832C(); + SetCloseLinkCallback(); data[0]++; } break; diff --git a/src/field_message_box.c b/src/field_message_box.c index 44fd4ac49..7df3373ce 100644 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -117,13 +117,13 @@ bool8 unref_sub_8064BD0(const u8 *message) static void PrintFieldMessage(const u8 *message) { StringExpandPlaceholders(gStringVar4, message); - Text_InitWindow8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); + Contest_StartTextPrinter(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); CreateFieldMessageBoxTask(); } static void PrintFieldMessageFromStringVar4(void) { - Text_InitWindow8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); + Contest_StartTextPrinter(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15); CreateFieldMessageBoxTask(); } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 2dd3266a3..ca0022b39 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -23,13 +23,13 @@ #include "pc_screen_effect.h" #include "ewram.h" -static EWRAM_DATA u32 sUnknown_0203931C = 0; +static EWRAM_DATA u32 sHofFadePalettes = 0; -extern bool8 gUnknown_02039324; // has hall of fame records +extern bool8 gHasHallOfFameRecords; // has hall of fame records extern void (*gGameContinueCallback)(void); extern struct MusicPlayerInfo gMPlayInfo_BGM; extern u8 gReservedSpritePaletteCount; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern const u8 gContestConfetti_Gfx[]; extern const u8 gContestConfetti_Pal[]; @@ -54,7 +54,7 @@ struct HallofFameMons static void sub_8141FF8(u8 taskID); static void sub_81422E8(u8 taskID); -static void sub_814217C(u8 taskID); +static void Task_Hof_InitTeamSaveData(u8 taskID); static void sub_8142274(u8 taskID); static void sub_81422B8(u8 taskID); static void sub_8142320(u8 taskID); @@ -150,69 +150,69 @@ static const struct OamData sOamData_840B598 = void* const gUnknown_0840B5A0[] = { - ewram8000, - ewramA000, - ewramC000, - ewramE000, - ewram10000, - ewram14000, - ewram18000_2 + eHofGfxPtr + 0x0000, + eHofGfxPtr + 0x2000, + eHofGfxPtr + 0x4000, + eHofGfxPtr + 0x6000, + eHofGfxPtr + 0x8000, + eHofGfxPtr + 0xC000, + eHofGfxPtr + 0x10000 }; static const struct SpriteFrameImage sSpriteImageTable_840B5BC[] = { - {ewram8000, 0x800}, - {ewram8800, 0x800}, - {ewram9000, 0x800}, - {ewram9800, 0x800} + {eHofGfxPtr + 0x0000, 0x800}, + {eHofGfxPtr + 0x800, 0x800}, + {eHofGfxPtr + 0x1000, 0x800}, + {eHofGfxPtr + 0x1800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B5DC[] = { - {ewramA000, 0x800}, - {ewramA800, 0x800}, - {ewramB000, 0x800}, - {ewramB800, 0x800} + {eHofGfxPtr + 0x2000, 0x800}, + {eHofGfxPtr + 0x2800, 0x800}, + {eHofGfxPtr + 0x3000, 0x800}, + {eHofGfxPtr + 0x3800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B5FC[] = { - {ewramC000, 0x800}, - {ewramC800, 0x800}, - {ewramD000, 0x800}, - {ewramD800, 0x800} + {eHofGfxPtr + 0x4000, 0x800}, + {eHofGfxPtr + 0x4800, 0x800}, + {eHofGfxPtr + 0x5000, 0x800}, + {eHofGfxPtr + 0x5800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B61C[] = { - {ewramE000, 0x800}, - {ewramE800, 0x800}, - {ewramF000, 0x800}, - {ewramF800, 0x800} + {eHofGfxPtr + 0x6000, 0x800}, + {eHofGfxPtr + 0x6800, 0x800}, + {eHofGfxPtr + 0x7000, 0x800}, + {eHofGfxPtr + 0x7800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B63C[] = { - {ewram10000, 0x800}, - {ewram10800, 0x800}, - {ewram11000, 0x800}, - {ewram11800, 0x800} + {eHofGfxPtr + 0x8000, 0x800}, + {eHofGfxPtr + 0x8800, 0x800}, + {eHofGfxPtr + 0x9000, 0x800}, + {eHofGfxPtr + 0x9800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B65C[] = { - {ewram14000, 0x800}, - {ewram14800, 0x800}, - {ewram15000, 0x800}, - {ewram15800, 0x800} + {eHofGfxPtr + 0xC000, 0x800}, + {eHofGfxPtr + 0xC800, 0x800}, + {eHofGfxPtr + 0xD000, 0x800}, + {eHofGfxPtr + 0xD800, 0x800} }; static const struct SpriteFrameImage sSpriteImageTable_840B67C[] = { - {ewram18000_2, 0x800}, - {ewram18800, 0x800}, - {ewram19000, 0x800}, - {ewram19800, 0x800} + {eHofGfxPtr + 0x10000, 0x800}, + {eHofGfxPtr + 0x10800, 0x800}, + {eHofGfxPtr + 0x11000, 0x800}, + {eHofGfxPtr + 0x11800, 0x800} }; static const struct SpriteFrameImage* const sUnknown_0840B69C[7] = @@ -480,7 +480,7 @@ static void sub_8141FC4(void) static void sub_8141FF8(u8 taskID) { u16 i, j; - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; gTasks[taskID].tPokesNumber = 0; // valid pokes for (i = 0; i < 6; i++) @@ -508,7 +508,7 @@ static void sub_8141FF8(u8 taskID) fameMons->mons[i].nick[0] = EOS; } } - sUnknown_0203931C = 0; + sHofFadePalettes = 0; gTasks[taskID].tDisplayedPoke = 0; gTasks[taskID].data[4] = 0xFF; for (i = 0; i < 6; i++) @@ -518,19 +518,19 @@ static void sub_8141FF8(u8 taskID) if (gTasks[taskID].data[0]) gTasks[taskID].func = sub_81422E8; else - gTasks[taskID].func = sub_814217C; + gTasks[taskID].func = Task_Hof_InitTeamSaveData; } -static void sub_814217C(u8 taskID) +static void Task_Hof_InitTeamSaveData(u8 taskID) { u16 i; - struct HallofFameMons* fameMons = eHallOfFameMons1; - struct HallofFameMons* lastSavedTeam = eHallOfFameMons2; + struct HallofFameMons* fameMons = eHofMonPtr; + struct HallofFameMons* lastSavedTeam = (struct HallofFameMons *)gDecompressionBuffer; - if (gUnknown_02039324 == FALSE) + if (gHasHallOfFameRecords == FALSE) { for (i = 0; i < 0x2000; i++) - ewram1E000(i) = 0; + gSharedMem[0x1E000 + i] = 0; // gDecompressionBuffer[i] = 0; } else Save_LoadGameData(SAVE_HALL_OF_FAME); @@ -542,12 +542,12 @@ static void sub_814217C(u8 taskID) } if (i >= HALL_OF_FAME_MAX_TEAMS) { - struct HallofFameMons* r5 = eHallOfFameMons2; - struct HallofFameMons* r6 = eHallOfFameMons2; - r5++; - for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++) + struct HallofFameMons *afterTeam = (struct HallofFameMons *)gDecompressionBuffer; + struct HallofFameMons *beforeTeam = (struct HallofFameMons *)gDecompressionBuffer; + afterTeam++; + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, beforeTeam++, afterTeam++) { - *r6 = *r5; + *beforeTeam = *afterTeam; } lastSavedTeam--; } @@ -586,7 +586,7 @@ static void sub_8142320(u8 taskID) u8 spriteID; s16 xPos, yPos, field4, field6; - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -617,7 +617,7 @@ static void sub_8142320(u8 taskID) static void sub_8142404(u8 taskID) { - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -633,7 +633,7 @@ static void sub_8142404(u8 taskID) static void sub_8142484(u8 taskID) { - struct HallofFameMons* fameMons = eHallOfFameMons1; + struct HallofFameMons* fameMons = eHofMonPtr; u16 currPokeID = gTasks[taskID].tDisplayedPoke; struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; @@ -641,11 +641,11 @@ static void sub_8142484(u8 taskID) gTasks[taskID].tFrameCount--; else { - sUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); + sHofFadePalettes |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); if (gTasks[taskID].tDisplayedPoke <= 4 && currMon[1].species != 0) // there is another pokemon to display { gTasks[taskID].tDisplayedPoke++; - BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, RGB(31, 26, 28)); + BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(31, 26, 28)); gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.priority = 1; gTasks[taskID].func = sub_8142320; } @@ -687,7 +687,7 @@ static void sub_8142618(u8 taskID) if (gTasks[taskID].tMonSpriteID(i) != 0xFF) gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1; } - BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, RGB(31, 26, 28)); + BeginNormalPaletteFade(sHofFadePalettes, 0, 12, 12, RGB(31, 26, 28)); Menu_EraseWindowRect(0, 14, 29, 19); gTasks[taskID].tFrameCount = 7; gTasks[taskID].func = sub_81426F8; @@ -836,7 +836,7 @@ static void sub_8142A28(u8 taskID) u16 *vram1, *vram2; u16 i; - struct HallofFameMons* savedTeams = eHallOfFameMons2; + struct HallofFameMons* savedTeams = (struct HallofFameMons *)gDecompressionBuffer; for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) { if (savedTeams->mons[0].species == 0) @@ -861,7 +861,7 @@ static void sub_8142A28(u8 taskID) static void sub_8142B04(u8 taskID) { - struct HallofFameMons* savedTeams = eHallOfFameMons2; + struct HallofFameMons* savedTeams = (struct HallofFameMons *)gDecompressionBuffer; struct HallofFameMon* currMon; u16 i; u8* stringPtr; @@ -870,7 +870,7 @@ static void sub_8142B04(u8 taskID) savedTeams++; currMon = &savedTeams->mons[0]; - sUnknown_0203931C = 0; + sHofFadePalettes = 0; gTasks[taskID].tCurrPokeID = 0; gTasks[taskID].tPokesNo = 0; @@ -926,7 +926,7 @@ static void sub_8142B04(u8 taskID) static void sub_8142CC8(u8 taskID) { - struct HallofFameMons* savedTeams = eHallOfFameMons2; + struct HallofFameMons* savedTeams = (struct HallofFameMons *)gDecompressionBuffer; struct HallofFameMon* currMon; u16 i; u16 currMonID; @@ -943,8 +943,8 @@ static void sub_8142CC8(u8 taskID) currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID); gSprites[currMonID].oam.priority = 0; - sUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; - BlendPalettesUnfaded(sUnknown_0203931C, 12, RGB(31, 26, 28)); + sHofFadePalettes = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; + BlendPalettesUnfaded(sHofFadePalettes, 12, RGB(31, 26, 28)); currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID]; if (currMon->species != SPECIES_EGG) @@ -1224,7 +1224,7 @@ static void sub_81433E0(void) *((u16*)(VRAM + 0x3000) + i) = 2; } - DmaFill16Large(3, 0, ewram0_6, 0x4000, 0x1000); + DmaFill16Large(3, 0, gSharedMem, 0x4000, 0x1000); ResetPaletteFade(); LoadPalette(gHallOfFame_Pal, 0, 0x20); } @@ -1279,18 +1279,18 @@ static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite) void sub_8143648(u16 paletteTag, u8 animID) { - gUnknown_02024E8C = sUnknown_0840B6B8; - gUnknown_02024E8C.paletteTag = paletteTag; - gUnknown_02024E8C.images = sUnknown_0840B69C[animID]; - gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; + gCreatingSpriteTemplate = sUnknown_0840B6B8; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sUnknown_0840B69C[animID]; + gCreatingSpriteTemplate.anims = gSpriteAnimTable_81E7C64; } void sub_8143680(u16 paletteTag, u8 animID) { - gUnknown_02024E8C = sUnknown_0840B6B8; - gUnknown_02024E8C.paletteTag = paletteTag; - gUnknown_02024E8C.images = sUnknown_0840B69C[animID]; - gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; + gCreatingSpriteTemplate = sUnknown_0840B6B8; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sUnknown_0840B69C[animID]; + gCreatingSpriteTemplate.anims = gUnknown_081EC2A4[0]; } static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid) @@ -1298,13 +1298,13 @@ static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID u8 spriteID; const u8* pokePal; - LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, EWRAM, gUnknown_0840B5A0[pokeID], species, pid, 1); + LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)EWRAM, gUnknown_0840B5A0[pokeID], species, pid, 1); pokePal = GetMonSpritePalFromOtIdPersonality(species, tid, pid); LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20); sub_8143648(pokeID, pokeID); - spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 10 - pokeID); + spriteID = CreateSprite(&gCreatingSpriteTemplate, posX, posY, 10 - pokeID); gSprites[spriteID].oam.paletteNum = pokeID; return spriteID; } @@ -1318,7 +1318,7 @@ static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a LoadCompressedPalette(gTrainerFrontPicPaletteTable[trainerPicID].data, 16 * a3 + 256, 0x20); sub_8143680(a3, a3); - spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 1); + spriteID = CreateSprite(&gCreatingSpriteTemplate, posX, posY, 1); gSprites[spriteID].oam.paletteNum = a3; return spriteID; diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c new file mode 100644 index 000000000..fe5fc5dd9 --- /dev/null +++ b/src/image_processing_effects.c @@ -0,0 +1,1204 @@ +#include "global.h" +#include "image_processing_effects.h" +#include "contest_painting.h" + +#define GET_R(color) ((color) & 0x1F) +#define GET_G(color) (((color) >> 5) & 0x1F) +#define GET_B(color) (((color) >> 10) & 0x1F) + +#define RGB_ALPHA (1 << 15) +#define IS_ALPHA(color) ((color) & RGB_ALPHA) + +#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r)) + +u16 *gCanvasPixels; +u8 gCanvasColumnStart; +u8 gCanvasRowEnd; +u8 gCanvasRowStart; +u8 gCanvasColumnEnd; +u8 gCanvasHeight; +u8 gCanvasMonPersonality; +u8 gCanvasWidth; +u16 * gCanvasPalette; +u16 gCanvasPaletteStart; + +// this file's functions +void ApplyImageEffect_Pointillism(void); +void ApplyImageEffect_Blur(void); +void ApplyImageEffect_BlackOutline(void); +void ApplyImageEffect_Invert(void); +void ApplyImageEffect_BlackAndWhite(void); +void ApplyImageEffect_BlurRight(void); +void ApplyImageEffect_BlurDown(void); +void ApplyImageEffect_Shimmer(void); +void ApplyImageEffect_Grayscale(void); +void ApplyImageEffect_PersonalityColor(u8 personality); +void ApplyImageEffect_RedChannelGrayscale(u8); +void ApplyImageEffect_RedChannelGrayscaleHighlight(u8); +void AddPointillismPoints(u16); +u16 ConvertColorToGrayscale(u16*); +u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel); +u16 ConvertCoolColor(u16*, u8); +u16 QuantizePixel_BlackAndWhite(u16*); +u16 QuantizePixel_BlackOutline(u16 *colorA, u16 *colorB); +u16 QuantizePixel_Invert(u16*); +u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel); +u16 QuantizePixel_MotionBlur(u16*, u16*); +u16 GetCoolColorFromPersonality(u8); +void QuantizePalette_Standard(bool8); +void SetPresetPalette_PrimaryColors(void); +void QuantizePalette_PrimaryColors(void); +void SetPresetPalette_Grayscale(void); +void QuantizePalette_Grayscale(void); +void SetPresetPalette_GrayscaleSmall(void); +void QuantizePalette_GrayscaleSmall(void); +void SetPresetPalette_BlackAndWhite(void); +void QuantizePalette_BlackAndWhite(void); +u16 QuantizePixel_Standard(u16 *); +u16 QuantizePixel_GrayscaleSmall(u16 *); +u16 QuantizePixel_Grayscale(u16 *); +u16 QuantizePixel_PrimaryColors(u16 *); + +#define MAX_DIMENSION 64 + +#include "data/pointillism_points.h" + +void ApplyImageProcessingEffects(struct ImageProcessingContext* info) +{ + gCanvasPixels = info->canvasPixels; + gCanvasMonPersonality = info->personality; + gCanvasColumnStart = info->columnStart; + gCanvasRowStart = info->rowStart; + gCanvasColumnEnd = info->columnEnd; + gCanvasRowEnd = info->rowEnd; + gCanvasWidth = info->canvasWidth; + gCanvasHeight = info->canvasHeight; + switch (info->effect) + { + case IMAGE_EFFECT_POINTILLISM: + ApplyImageEffect_Pointillism(); + break; + case IMAGE_EFFECT_BLUR: + ApplyImageEffect_Blur(); + break; + case IMAGE_EFFECT_OUTLINE_COLORED: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_PersonalityColor(gCanvasMonPersonality); + break; + case IMAGE_EFFECT_INVERT_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_Invert(); + ApplyImageEffect_BlackAndWhite(); + case IMAGE_EFFECT_INVERT: + ApplyImageEffect_Invert(); + break; + case IMAGE_EFFECT_THICK_BLACK_WHITE: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + break; + case IMAGE_EFFECT_SHIMMER: + ApplyImageEffect_Shimmer(); + break; + case IMAGE_EFFECT_OUTLINE: + ApplyImageEffect_BlackOutline(); + break; + case IMAGE_EFFECT_BLUR_RIGHT: + ApplyImageEffect_BlurRight(); + break; + case IMAGE_EFFECT_BLUR_DOWN: + ApplyImageEffect_BlurDown(); + break; + case IMAGE_EFFECT_GRAYSCALE_LIGHT: + ApplyImageEffect_Grayscale(); + ApplyImageEffect_RedChannelGrayscale(3); + break; + case IMAGE_EFFECT_CHARCOAL: + ApplyImageEffect_BlackOutline(); + ApplyImageEffect_BlurRight(); + ApplyImageEffect_BlurDown(); + ApplyImageEffect_BlackAndWhite(); + ApplyImageEffect_Blur(); + ApplyImageEffect_Blur(); + ApplyImageEffect_RedChannelGrayscale(2); + ApplyImageEffect_RedChannelGrayscaleHighlight(4); + break; + } +} + +void ApplyImageEffect_RedChannelGrayscale(u8 delta) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (!IS_ALPHA(*pal)) + { + u8 val = (31 & *pal); + val += delta; + if (val > 31) + val = 31; + + *pal = RGB2(val, val, val); + } + } + } +} + +void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (!IS_ALPHA(*pal)) + { + u8 val = (31 & *pal); + if (val > 31 - highlight) + val = 31 - (highlight >> 1); + + *pal = RGB2(val, val, val); + } + } + } +} + +void ApplyImageEffect_Pointillism(void) +{ + u32 i; + for (i = 0; i < 3200; i++) + AddPointillismPoints(i); +} + +void ApplyImageEffect_Grayscale(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* color = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, color++) + { + if (!IS_ALPHA(*color)) + { + *color = ConvertColorToGrayscale(color); + } + } + } +} + +void ApplyImageEffect_Blur(void) +{ + u8 i, j; + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16* var0 = &gCanvasPixels[gCanvasRowStart * gCanvasWidth]; + u16* palette = &var0[gCanvasColumnStart + i]; + u16 color = *palette; + j = 1; + palette += gCanvasWidth; + while (j < gCanvasRowEnd - 1) + { + if (!IS_ALPHA(*palette)) + { + *palette = QuantizePixel_Blur(&color, palette, palette + gCanvasWidth); + color = *palette; + } + + j++; + palette += gCanvasWidth; + } + } +} + +void ApplyImageEffect_PersonalityColor(u8 personality) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = ConvertCoolColor(pixel, personality); + } + } + } +} + +void ApplyImageEffect_BlackAndWhite(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_BlackAndWhite(pixel); + } + } + } +} + +void ApplyImageEffect_BlackOutline(void) +{ + u8 i, j; + u16 *pixel; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + pixel = &pixelRow[gCanvasColumnStart]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + for (j = 1, pixel = pixel + 1; j < gCanvasColumnEnd - 1; j++, pixel++) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1); + } + + for (j = 0; j < gCanvasColumnEnd; j++) + { + u16* var0 = &gCanvasPixels[gCanvasRowStart * gCanvasWidth]; + pixel = &var0[gCanvasColumnStart + j]; + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + for (i = 1, pixel = pixel + gCanvasWidth; i < gCanvasRowEnd - 1; i++, pixel += gCanvasWidth) + { + *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } + + *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth); + } +} + +void ApplyImageEffect_Invert(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_Invert(pixel); + } + } + } +} + +void ApplyImageEffect_Shimmer(void) +{ + u8 i, j; + u16 *pixel; + u16 color; + + pixel = gCanvasPixels; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_Invert(pixel); + } + } + } + + for (j = 0; j < 64; j++) + { + pixel = &gCanvasPixels[j]; + color = *pixel; + *pixel = RGB_ALPHA; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_BlurHard(&color, pixel, pixel + 64); + color = *pixel; + } + } + + *pixel = RGB_ALPHA; + pixel = &gCanvasPixels[j]; + color = *pixel; + *pixel = RGB_ALPHA; + for (i = 1, pixel += 64; i < 63; i++, pixel += 64) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_BlurHard(&color, pixel, pixel + 64); + color = *pixel; + } + } + + *pixel = RGB_ALPHA; + } + + pixel = gCanvasPixels; + for (i = 0; i < 64; i++) + { + for (j = 0; j < 64; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_Invert(pixel); + } + } + } +} + +void ApplyImageEffect_BlurRight(void) +{ + u8 i, j; + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* pixelRow = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart]; + u16 color = *pixel; + for (j = 1, pixel++; j < gCanvasColumnEnd - 1; j++, pixel++) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_MotionBlur(&color, pixel); + color = *pixel; + } + } + } +} + +void ApplyImageEffect_BlurDown(void) +{ + u8 i, j; + for (i = 0; i < gCanvasColumnEnd; i++) + { + u16* pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth]; + u16* pixel = &pixelRow[gCanvasColumnStart + i]; + u16 prevPixel = *pixel; + for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) + { + if (!IS_ALPHA(*pixel)) + { + *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel); + prevPixel = *pixel; + } + } + } +} + +struct PointillismPoint +{ + u8 column; + u8 row; + u16 delta; +}; + +void AddPointillismPoints(u16 point) +{ + u8 i; + bool8 offsetDownLeft; + u8 colorType; + struct PointillismPoint points[6]; + + points[0].column = sPointillismPoints[point][0]; + points[0].row = sPointillismPoints[point][1]; + points[0].delta = GET_POINT_DELTA(sPointillismPoints[point][2]); + + colorType = GET_POINT_COLOR_TYPE(sPointillismPoints[point][2]); + offsetDownLeft = GET_POINT_OFFSET_DL(sPointillismPoints[point][2]); + for (i = 1; i < points[0].delta; i++) + { + if (!offsetDownLeft) + { + points[i].column = points[0].column - i; + points[i].row = points[0].row + i; + } + else + { + points[i].column = points[0].column + 1; + points[i].row = points[0].row - 1; + } + + if (points[i].column >= MAX_DIMENSION || points[i].row >= MAX_DIMENSION) + { + points[0].delta = i - 1; + break; + } + + points[i].delta = points[0].delta - i; + } + + for (i = 0; i < points[0].delta; i++) + { + u16 *pixel = &gCanvasPixels[points[i].row * MAX_DIMENSION] + points[i].column; + + if (!IS_ALPHA(*pixel)) + { + u16 red = GET_R(*pixel); + u16 green = GET_G(*pixel); + u16 blue = GET_B(*pixel); + + switch (colorType) + { + case 0: + case 1: + switch (GET_POINT_DELTA(sPointillismPoints[point][2]) % 3) + { + case 0: + if (red >= points[i].delta) + red -= points[i].delta; + else + red = 0; + break; + case 1: + if (green >= points[i].delta) + green -= points[i].delta; + else + green = 0; + break; + case 2: + if (blue >= points[i].delta) + blue -= points[i].delta; + else + blue = 0; + break; + } + break; + case 2: + case 3: + red += points[i].delta; + green += points[i].delta; + blue += points[i].delta; + if (red > 31) + red = 31; + if (green > 31) + green = 31; + if (blue > 31) + blue = 31; + break; + } + + *pixel = RGB2(red, green, blue); + } + } +} + +u16 ConvertColorToGrayscale(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + u16 average = (red + green + blue) / 3; + return RGB2(average, average, average); +} + +// The dark colors are the colored edges of the Cool painting effect. +// Everything else is white. +u16 ConvertCoolColor(u16 *color, u8 personality) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + if (red < 17 && green < 17 && blue < 17) + return GetCoolColorFromPersonality(personality); + else + return RGB_WHITE; +} + +// Based on the given value, which comes from the first 8 bits of +// the mon's personality value, return a color. +u16 GetCoolColorFromPersonality(u8 personality) +{ + u16 red = 0; + u16 green = 0; + u16 blue = 0; + u8 strength = (personality / 6) % 3; + u8 colorType = personality % 6; + + switch (colorType) + { + case 0: + // Teal color + green = 21 - strength; + blue = green; + red = 0; + break; + case 1: + // Yellow color + blue = 0; + red = 21 - strength; + green = red; + break; + case 2: + // Purple color + blue = 21 - strength; + green = 0; + red = blue; + break; + case 3: + // Red color + blue = 0; + green = 0; + red = 23 - strength; + break; + case 4: + // Blue color + blue = 23 - strength; + green = 0; + red = 0; + break; + case 5: + // Green color + blue = 0; + green = 23 - strength; + red = 0; + break; + } + + return RGB2(red, green, blue); +} + +u16 QuantizePixel_BlackAndWhite(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + if (red < 17 && green < 17 && blue < 17) + return RGB_BLACK; + else + return RGB_WHITE; +} + +u16 QuantizePixel_BlackOutline(u16 *colorA, u16 *colorB) +{ + if (*colorA) + { + if (IS_ALPHA(*colorA)) + return RGB_ALPHA; + if (IS_ALPHA(*colorB)) + return RGB_BLACK; + + return *colorA; + } + + return RGB_BLACK; +} + +u16 QuantizePixel_Invert(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + red = 31 - red; + green = 31 - green; + blue = 31 - blue; + + return RGB2(red, green, blue); +} + +u16 QuantizePixel_MotionBlur(u16 *prevPixel, u16 *curPixel) +{ + u16 pixelChannels[2][3]; + u16 diffs[3]; + u8 i; + u16 largestDiff; + u16 r, g, b; + + if (*prevPixel == *curPixel) + return *curPixel; + + pixelChannels[0][0] = GET_R(*prevPixel); + pixelChannels[0][1] = GET_G(*prevPixel); + pixelChannels[0][2] = GET_B(*prevPixel); + pixelChannels[1][0] = GET_R(*curPixel); + pixelChannels[1][1] = GET_G(*curPixel); + pixelChannels[1][2] = GET_B(*curPixel); + + if (pixelChannels[0][0] > 25 && pixelChannels[0][1] > 25 && pixelChannels[0][2] > 25) + return *curPixel; + if (pixelChannels[1][0] > 25 && pixelChannels[1][1] > 25 && pixelChannels[1][2] > 25) + return *curPixel; + + for (i = 0; i < 3; i++) + { + if (pixelChannels[0][i] > pixelChannels[1][i]) + diffs[i] = pixelChannels[0][i] - pixelChannels[1][i]; + else + diffs[i] = pixelChannels[1][i] - pixelChannels[0][i]; + } + + if (diffs[0] >= diffs[1]) + { + if (diffs[0] >= diffs[2]) + largestDiff = diffs[0]; + else if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else + largestDiff = diffs[2]; + } + else + { + if (diffs[1] >= diffs[2]) + largestDiff = diffs[1]; + else if (diffs[2] >= diffs[0]) + largestDiff = diffs[2]; + else + largestDiff = diffs[0]; + } + + r = (pixelChannels[1][0] * (31 - largestDiff / 2)) / 31; + g = (pixelChannels[1][1] * (31 - largestDiff / 2)) / 31; + b = (pixelChannels[1][2] * (31 - largestDiff / 2)) / 31; + return RGB2(r, g, b); +} + +u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 avg0, avg1, avg2; + u16 diff1, diff2; + u32 minimum; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = GET_R(*curPixel); + green = GET_G(*curPixel); + blue = GET_B(*curPixel); + + avg0 = ((GET_R(*prevPixel)) + (GET_G(*prevPixel)) + (GET_B(*prevPixel))) / 3; + avg1 = ((GET_R(*curPixel)) + (GET_G(*curPixel)) + (GET_B(*curPixel))) / 3; + avg2 = ((GET_R(*nextPixel)) + (GET_G(*nextPixel)) + (GET_B(*nextPixel))) / 3; + + if (avg0 == avg1 && avg2 == avg1) + return *curPixel; + + if (avg0 > avg1) + diff1 = avg0 - avg1; + else + diff1 = avg1 - avg0; + + if (avg2 > avg1) + diff2 = avg2 - avg1; + else + diff2 = avg1 - avg2; + + if (diff1 >= diff2) + minimum = diff1; + else + minimum = diff2; + + factor = 31 - minimum / 2; + red = red * factor / 31; + green = green * factor / 31; + blue = blue * factor / 31; + return RGB2(red, green, blue); +} + +u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel) +{ + u16 red, green, blue; + u16 avg0, avg1, avg2; + u16 diff1, diff2; + u32 minimum; + u16 factor; + + if (*prevPixel == *curPixel && *nextPixel == *curPixel) + return *curPixel; + + red = GET_R(*curPixel); + green = GET_G(*curPixel); + blue = GET_B(*curPixel); + + avg0 = ((GET_R(*prevPixel)) + (GET_G(*prevPixel)) + (GET_B(*prevPixel))) / 3; + avg1 = ((GET_R(*curPixel)) + (GET_G(*curPixel)) + (GET_B(*curPixel))) / 3; + avg2 = ((GET_R(*nextPixel)) + (GET_G(*nextPixel)) + (GET_B(*nextPixel))) / 3; + + if (avg0 == avg1 && avg2 == avg1) + return *curPixel; + + if (avg0 > avg1) + diff1 = avg0 - avg1; + else + diff1 = avg1 - avg0; + + if (avg2 > avg1) + diff2 = avg2 - avg1; + else + diff2 = avg1 - avg2; + + if (diff1 >= diff2) + minimum = diff1; + else + minimum = diff2; + + factor = 31 - minimum; + red = red * factor / 31; + green = green * factor / 31; + blue = blue * factor / 31; + return RGB2(red, green, blue); +} + +void ConvertImageProcessingToGBA(struct ImageProcessingContext *context) +{ + u16 i, j, k; + u16 *src, *dest, *src_, *dest_; + u16 width, height; + + width = context->canvasWidth >> 3; + height = context->canvasHeight >> 3; + src_ = context->canvasPixels; + dest_ = context->dest; + + if (context->bgType == 2) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 5) + (k << 2); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 8); + dest[1] = src[2] | (src[3] << 8); + dest[2] = src[4] | (src[5] << 8); + dest[3] = src[6] | (src[7] << 8); + } + } + } + } + else + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + for (k = 0; k < 8; k++) + { + dest = dest_ + ((i * width + j) << 4) + (k << 1); + src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3); + + dest[0] = src[0] | (src[1] << 4) | (src[2] << 8) | (src[3] << 12); + dest[1] = src[4] | (src[5] << 4) | (src[6] << 8) | (src[7] << 12); + } + } + } + } +} + +void ApplyImageProcessingQuantization(struct ImageProcessingContext *arg0) +{ + gCanvasPaletteStart = arg0->paletteStart * 16; + gCanvasPalette = &arg0->canvasPalette[gCanvasPaletteStart]; + gCanvasPixels = arg0->canvasPixels; + gCanvasColumnStart = arg0->columnStart; + gCanvasRowStart = arg0->rowStart; + gCanvasColumnEnd = arg0->columnEnd; + gCanvasRowEnd = arg0->rowEnd; + gCanvasWidth = arg0->canvasWidth; + gCanvasHeight = arg0->canvasHeight; + + switch (arg0->quantizeEffect) + { + case QUANTIZE_EFFECT_STANDARD: + QuantizePalette_Standard(FALSE); + break; + case QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS: + QuantizePalette_Standard(TRUE); + break; + case QUANTIZE_EFFECT_PRIMARY_COLORS: + SetPresetPalette_PrimaryColors(); + QuantizePalette_PrimaryColors(); + break; + case QUANTIZE_EFFECT_GRAYSCALE: + SetPresetPalette_Grayscale(); + QuantizePalette_Grayscale(); + break; + case QUANTIZE_EFFECT_GRAYSCALE_SMALL: + SetPresetPalette_GrayscaleSmall(); + QuantizePalette_GrayscaleSmall(); + break; + case QUANTIZE_EFFECT_BLACK_WHITE: + SetPresetPalette_BlackAndWhite(); + QuantizePalette_BlackAndWhite(); + break; + } +} + +void SetPresetPalette_PrimaryColors(void) +{ + gCanvasPalette[0] = RGB_BLACK; + gCanvasPalette[1] = RGB2(6, 6, 6); + gCanvasPalette[2] = RGB2(29, 29, 29); + gCanvasPalette[3] = RGB2(11, 11, 11); + gCanvasPalette[4] = RGB2(29, 6, 6); + gCanvasPalette[5] = RGB2(6, 29, 6); + gCanvasPalette[6] = RGB2(6, 6, 29); + gCanvasPalette[7] = RGB2(29, 29, 6); + gCanvasPalette[8] = RGB2(29, 6, 29); + gCanvasPalette[9] = RGB2(6, 29, 29); + gCanvasPalette[10] = RGB2(29, 11, 6); + gCanvasPalette[11] = RGB2(11, 29, 6); + gCanvasPalette[12] = RGB2(6, 11, 29); + gCanvasPalette[13] = RGB2(29, 6, 11); + gCanvasPalette[14] = RGB2(6, 29, 11); + gCanvasPalette[15] = RGB2(11, 6, 29); +} + +void SetPresetPalette_BlackAndWhite(void) +{ + gCanvasPalette[0] = RGB_BLACK; + gCanvasPalette[1] = RGB_BLACK; + gCanvasPalette[2] = RGB_WHITE; +} + +void SetPresetPalette_GrayscaleSmall(void) +{ + u8 i; + + gCanvasPalette[0] = RGB_BLACK; + gCanvasPalette[1] = RGB_BLACK; + for (i = 0; i < 14; i++) + gCanvasPalette[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2)); +} + +void SetPresetPalette_Grayscale(void) +{ + u8 i; + + gCanvasPalette[0] = RGB_BLACK; + for (i = 0; i < 32; i++) + gCanvasPalette[i + 1] = RGB2(i, i, i); +} + +void QuantizePalette_Standard(bool8 arg0) +{ + u8 i, j; + u16 maxIndex; + + maxIndex = 0xDF; + if (!arg0) + maxIndex = 0xFF; + + for (j = 0; j < maxIndex; j++) + gCanvasPalette[j] = 0; + + gCanvasPalette[maxIndex] = RGB2(15, 15, 15); + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + { + *pal = gCanvasPaletteStart; + } + else + { + u16 color = QuantizePixel_Standard(pal); + u8 curIndex = 1; + if (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + gCanvasPalette[curIndex] = color; + *pal = gCanvasPaletteStart + curIndex; + } + else + { + while (curIndex < maxIndex) + { + if (gCanvasPalette[curIndex] == RGB_BLACK) + { + gCanvasPalette[curIndex] = color; + *pal = gCanvasPaletteStart + curIndex; + break; + } + + if (gCanvasPalette[curIndex] == color) + { + *pal = gCanvasPaletteStart + curIndex; + break; + } + + curIndex++; + } + } + } + + if (curIndex == maxIndex) + { + curIndex = maxIndex; + *pal = curIndex; + } + } + } + } +} + +void QuantizePalette_BlackAndWhite(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + { + *pal = gCanvasPaletteStart; + } + else + { + if (QuantizePixel_BlackAndWhite(pal) == RGB_BLACK) + *pal = gCanvasPaletteStart + 1; + else + *pal = gCanvasPaletteStart + 2; + } + } + } +} + +void QuantizePalette_GrayscaleSmall(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + *pal = gCanvasPaletteStart; + else + *pal = QuantizePixel_GrayscaleSmall(pal) + gCanvasPaletteStart; + } + } +} + +void QuantizePalette_Grayscale(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + *pal = gCanvasPaletteStart; + else + *pal = QuantizePixel_Grayscale(pal) + gCanvasPaletteStart; + } + } +} + +void QuantizePalette_PrimaryColors(void) +{ + u8 i, j; + + for (i = 0; i < gCanvasRowEnd; i++) + { + u16* var2 = &gCanvasPixels[(gCanvasRowStart + i) * gCanvasWidth]; + u16* pal = &var2[gCanvasColumnStart]; + for (j = 0; j < gCanvasColumnEnd; j++, pal++) + { + if (IS_ALPHA(*pal)) + *pal = gCanvasPaletteStart; + else + *pal = QuantizePixel_PrimaryColors(pal) + gCanvasPaletteStart; + } + } +} + +u16 QuantizePixel_Standard(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + + if (red & 3) + red = (red & 0x1C) + 4; + if (green & 3) + green = (green & 0x1C) + 4; + if (blue & 3) + blue = (blue & 0x1C) + 4; + + if (red < 6) + red = 6; + if (red > 30) + red = 30; + + if (green < 6) + green = 6; + if (green > 30) + green = 30; + + if (blue < 6) + blue = 6; + if (blue > 30) + blue = 30; + + return RGB2(red, green, blue); +} + +u16 QuantizePixel_PrimaryColors(u16* color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + + if (red < 12 && green < 11 && blue < 11) + return 1; + + if (red > 19 && green > 19 && blue > 19) + return 2; + + if (red > 19) + { + if (green > 19) + { + if (blue > 14) + return 2; + else + return 7; + } + else if (blue > 19) + { + if (green > 14) + return 2; + else + return 8; + } + } + + if (green > 19 && blue > 19) + { + if (red > 14) + return 2; + else + return 9; + } + + if (red > 19) + { + if (green > 11) + { + if (blue > 11) + { + if (green < blue) + return 8; + else + return 7; + } + else + { + return 10; + } + } + else if (blue > 11) + { + return 13; + } + else + { + return 4; + } + } + + if (green > 19) + { + if (red > 11) + { + if (blue > 11) + { + if (red < blue) + return 9; + else + return 7; + } + else + { + return 11; + } + } + else + { + if (blue > 11) + return 14; + else + return 5; + } + } + + if (blue > 19) + { + if (red > 11) + { + if (green > 11) + { + if (red < green) + return 9; + else + return 8; + } + } + else if (green > 11) + { + return 12; + } + + if (blue > 11) + return 15; + else + return 6; + } + + return 3; +} + +u16 QuantizePixel_GrayscaleSmall(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + u16 average = ((red + green + blue) / 3) & 0x1E; + if (average == 0) + return 1; + else + return average / 2; +} + +u16 QuantizePixel_Grayscale(u16 *color) +{ + u16 red = GET_R(*color); + u16 green = GET_G(*color); + u16 blue = GET_B(*color); + u16 average = (red + green + blue) / 3; + return average + 1; +} diff --git a/src/intro.c b/src/intro.c index f1904f86e..f0fda8862 100644 --- a/src/intro.c +++ b/src/intro.c @@ -22,7 +22,7 @@ #include "scanline_effect.h" #include "ewram.h" -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern u16 gUnknown_02039358; extern u16 gUnknown_0203935A; extern u16 gSaveFileStatus; @@ -1601,13 +1601,13 @@ static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) u8 spriteId; if (front) - LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, EWRAM, gUnknown_0840B5A0[d], species, 0, 1); + LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)EWRAM, gUnknown_0840B5A0[d], species, 0, 1); else - LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, EWRAM, gUnknown_0840B5A0[d], species, 0, 0); + LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, (void *)EWRAM, gUnknown_0840B5A0[d], species, 0, 0); lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF); LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20); sub_8143648(d, d); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, (d + 1) * 4); gSprites[spriteId].oam.paletteNum = d; gSprites[spriteId].oam.priority = 1; return spriteId; @@ -1620,8 +1620,8 @@ static u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) DecompressPicFromTable_2(&gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, (void *)EWRAM, gUnknown_0840B5A0[d], a); LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + d * 0x10, 0x20); sub_8143680(d, d); - gUnknown_02024E8C.anims = gUnknown_0840B064; - spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 1); + gCreatingSpriteTemplate.anims = gUnknown_0840B064; + spriteId = CreateSprite(&gCreatingSpriteTemplate, b, c, 1); gSprites[spriteId].oam.paletteNum = d; gSprites[spriteId].oam.priority = 1; return spriteId; diff --git a/src/link.c b/src/link.c index 73652a194..213f9f7e3 100644 --- a/src/link.c +++ b/src/link.c @@ -414,7 +414,7 @@ static void LinkTestProcessKeyInput(void) if (gMain.newKeys & R_BUTTON) Save_WriteData(SAVE_LINK); if (gMain.newKeys & SELECT_BUTTON) - sub_800832C(); + SetCloseLinkCallback(); if (gLinkTestDebugValuesEnabled) { u32 vblankCounter1 = gMain.vblankCounter1; @@ -1145,7 +1145,7 @@ u8 GetDummy2(void) return sDummy2; } -void sub_800832C(void) +void SetCloseLinkCallback(void) { if (!gLinkCallback) { diff --git a/src/main_menu.c b/src/main_menu.c index 3237663a5..fda5db547 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -39,7 +39,7 @@ extern u8 gBirchSpeech_SoItsPlayer[]; extern u8 gBirchSpeech_AhOkayYouArePlayer[]; extern u8 gBirchSpeech_AreYouReady[]; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; //Menu layouts enum @@ -1424,12 +1424,12 @@ u8 CreateAzurillSprite(u8 x, u8 y) &gMonFrontPicTable[SPECIES_AZURILL], gMonFrontPicCoords[SPECIES_AZURILL].coords, gMonFrontPicCoords[SPECIES_AZURILL].y_offset, - gUnknown_081FAF4C[0], - gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[0], + gMonSpriteGfx_Sprite_ptr[1], SPECIES_AZURILL); LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]); GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1); - return CreateSprite(&gUnknown_02024E8C, x, y, 0); + return CreateSprite(&gCreatingSpriteTemplate, x, y, 0); } void AddBirchSpeechObjects(u8 taskId) diff --git a/src/mauville_man.c b/src/mauville_man.c index a71ce5fe8..acd6af5bc 100644 --- a/src/mauville_man.c +++ b/src/mauville_man.c @@ -690,7 +690,7 @@ static void Task_BardSong(u8 taskId) case 0: // Initialize song PrepareSongText(); Text_InitWindowWithTemplate(gMenuWindowPtr, &gMenuTextWindowTemplate); - Text_InitWindow8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15); + Contest_StartTextPrinter(gMenuWindowPtr, gStringVar4, 2, 4, 15); task->data[1] = 0; task->data[2] = 0; task->tCharIndex = 0; diff --git a/src/menu.c b/src/menu.c index 5bb5f96d1..2b454417a 100644 --- a/src/menu.c +++ b/src/menu.c @@ -204,12 +204,12 @@ void Menu_DisplayDialogueFrame(void) void MenuPrintMessage(const u8 *str, u8 left, u8 top) { - Text_InitWindow8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); + Contest_StartTextPrinter(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } void MenuPrintMessageDefaultCoords(const u8 *str) { - Text_InitWindow8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); + Contest_StartTextPrinter(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15); } void Menu_SetText(const u8 *str) @@ -733,12 +733,12 @@ void MenuPrint_RightAligned(const u8 *str, u8 right, u8 top) Text_InitWindow_RightAligned(gMenuWindowPtr, str, gMenuTextTileOffset, right, top); } -void sub_8072B80(const u8 *src, u8 a2, u8 a3, const u8 *text) +void MenuPrint_AlignedToRightOfReferenceString(const u8 *src, u8 left, u8 top, const u8 *widthRefStr) { u8 buffer[64]; - u8 width = GetStringWidth(gMenuWindowPtr, text); + u8 width = GetStringWidth(gMenuWindowPtr, widthRefStr); AlignString(gMenuWindowPtr, buffer, src, width, 1); - Text_InitWindowAndPrintText(gMenuWindowPtr, buffer, gMenuTextTileOffset, a2, a3); + Text_InitWindowAndPrintText(gMenuWindowPtr, buffer, gMenuTextTileOffset, left, top); } void MenuPrint_Centered(const u8 *text, u8 left, u8 top, u16 width) diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index b39804b79..987249f50 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -156,7 +156,7 @@ static void CB2_MysteryEventMenu(void) if (GetLinkPlayerDataExchangeStatusTimed() == 3) { - sub_800832C(); + SetCloseLinkCallback(); Menu_EraseWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); MenuPrintMessageDefaultCoords(gStringVar4); @@ -220,7 +220,7 @@ static void CB2_MysteryEventMenu(void) if (GetLinkPlayerDataExchangeStatusTimed() == 3) { - sub_800832C(); + SetCloseLinkCallback(); Menu_EraseWindowRect(6, 5, 23, 8); GetEventLoadMessage(gStringVar4, 1); MenuPrintMessageDefaultCoords(gStringVar4); @@ -282,7 +282,7 @@ static void CB2_MysteryEventMenu(void) gMain.state++; break; case 10: - sub_800832C(); + SetCloseLinkCallback(); gMain.state++; break; case 11: @@ -461,7 +461,7 @@ void debug_sub_815D1D8(void) gMain.state++; break; case 8: - sub_800832C(); + SetCloseLinkCallback(); gMain.state++; break; case 9: diff --git a/src/new_game.c b/src/new_game.c index 63a13be5e..dede514bb 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -1,11 +1,12 @@ #include "global.h" -#include "constants/maps.h" -#include "constants/species.h" -#include "clock.h" #include "new_game.h" #include "battle_records.h" #include "berry.h" +#include "clock.h" +#include "constants/maps.h" +#include "constants/species.h" #include "contest.h" +#include "contest_util.h" #include "decoration_inventory.h" #include "dewford_trend.h" #include "easy_chat.h" @@ -15,6 +16,7 @@ #include "lottery_corner.h" #include "mail_data.h" #include "mauville_man.h" +#include "overworld.h" #include "play_time.h" #include "player_pc.h" #include "pokeblock.h" @@ -23,8 +25,6 @@ #include "pokemon_storage_system.h" #include "random.h" #include "roamer.h" -#include "script_pokemon_80C4.h" -#include "overworld.h" #include "rtc.h" #include "script.h" #include "secret_base.h" @@ -35,7 +35,7 @@ EWRAM_DATA u8 gDifferentSaveFile = 0; EWRAM_DATA u8 gUnknown_020297ED = 0; extern u8 gPlayerPartyCount; -extern u8 gUnknown_03005CE8; +extern u8 gUnusedPokedexU8; extern u16 gSaveFileStatus; extern u8 EventScript_ResetAllMapFlags[]; @@ -91,7 +91,7 @@ void SetDefaultOptions(void) void ClearPokedexFlags(void) { - gUnknown_03005CE8 = 0; + gUnusedPokedexU8 = 0; memset(&gSaveBlock2.pokedex.owned, 0, sizeof(gSaveBlock2.pokedex.owned)); memset(&gSaveBlock2.pokedex.seen, 0, sizeof(gSaveBlock2.pokedex.seen)); } @@ -152,7 +152,7 @@ void sub_8052E4C(void) #if DEBUG gUnknown_020297ED = 0; #endif - sub_808C0A0(); + ResetPokedexScrollPositions(); ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetBagScrollPositions(); diff --git a/src/overworld.c b/src/overworld.c index a0e7939f5..8bd3825b5 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -4,12 +4,17 @@ #include "berry.h" #include "cable_club.h" #include "clock.h" +#include "constants/map_types.h" +#include "constants/maps.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest_util.h" #include "event_data.h" +#include "event_object_movement.h" #include "field_camera.h" #include "field_control_avatar.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "event_object_movement.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -22,8 +27,8 @@ #include "heal_location.h" #include "link.h" #include "load_save.h" -#include "main.h" #include "m4a.h" +#include "main.h" #include "map_name_popup.h" #include "menu.h" #include "metatile_behavior.h" @@ -34,8 +39,8 @@ #include "roamer.h" #include "rotating_gate.h" #include "safari_zone.h" +#include "scanline_effect.h" #include "script.h" -#include "script_pokemon_80C4.h" #include "secret_base.h" #include "sound.h" #include "start_menu.h" @@ -43,12 +48,7 @@ #include "tileset_anim.h" #include "time_events.h" #include "tv.h" -#include "scanline_effect.h" #include "wild_encounter.h" -#include "constants/map_types.h" -#include "constants/maps.h" -#include "constants/songs.h" -#include "constants/species.h" #ifdef SAPPHIRE #define LEGENDARY_MUSIC MUS_WEATHER_KYOGRE // Heavy Rain diff --git a/src/party_menu.c b/src/party_menu.c index b5b00c947..6154d5db5 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -480,7 +480,7 @@ extern u16 gMoveToLearn; extern u16 gUnknown_08E9A300[]; extern struct Coords8 const gUnknown_08376738[12][6]; extern u8 gUnknown_02039460[]; -extern struct Window gUnknown_03004210; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern const u8 gPartyMenuMisc_Gfx[]; extern const u8 gPartyMenuMisc_Tilemap[]; @@ -678,8 +678,8 @@ bool8 InitPartyMenu(void) gMain.state++; break; case 8: - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C90); - MultistepInitWindowTileData(&gUnknown_03004210, 1); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C90); + MultistepInitWindowTileData(&gWindowTemplate_Contest_MoveDescription, 1); gMain.state++; break; case 9: @@ -2710,7 +2710,7 @@ void sub_806D5B8(u8 monIndex) u8 right = gUnknown_08376948[IsDoubleBattle()][monIndex].right; u8 bottom = gUnknown_08376948[IsDoubleBattle()][monIndex].bottom; - Text_EraseWindowRect(&gUnknown_03004210, left, top, right, bottom); + Text_EraseWindowRect(&gWindowTemplate_Contest_MoveDescription, left, top, right, bottom); var1 = 0; CpuFastSet(&var1, OBJ_VRAM1 + monIndex * 0x400, 0x1000100); @@ -2724,7 +2724,7 @@ void sub_806D668(u8 monIndex) u8 right = gUnknown_08376978[IsDoubleBattle()][monIndex].right; u8 bottom = gUnknown_08376978[IsDoubleBattle()][monIndex].bottom; - Text_EraseWindowRect(&gUnknown_03004210, left, top, right, bottom); + Text_EraseWindowRect(&gWindowTemplate_Contest_MoveDescription, left, top, right, bottom); var1 = 0; CpuFastSet(&var1, OBJ_VRAM1 + 0x300 + monIndex * 0x400, 0x1000040); @@ -2828,7 +2828,7 @@ void unref_sub_806D964(u8 taskId) TryCreatePartyMenuMonIcon(taskId, i, &gPlayerParty[i]); } -void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon) +void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct MultiBattlePokemonTx *pokemon) { u8 x = gUnknown_08376678[menuType][monIndex].x; u8 y = gUnknown_08376678[menuType][monIndex].y; diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index cb3d8789e..b3dafef72 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -616,7 +616,7 @@ static bool8 sub_8147B20(struct Pokemon* mon) case 0: species = GetMonData(mon, MON_DATA_SPECIES2); PiD = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, EWRAM, gUnknown_081FAF4C[1], species, PiD); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (void *)EWRAM, gMonSpriteGfx_Sprite_ptr[1], species, PiD); ewram1FFFF++; break; case 1: @@ -758,7 +758,7 @@ static void Task_PaletteFadeToReturn(u8 taskID) static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2); - u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2); + u8 spriteID = CreateSprite(&gCreatingSpriteTemplate, 48, 80, 2); gPokeblockFeedMonSpecies = species; gPokeblockFeedMonSpriteID = spriteID; diff --git a/src/pokedex.c b/src/pokedex.c index f0be616d0..85d330d5c 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -35,43 +35,42 @@ struct PokedexListItem struct PokedexView { - struct PokedexListItem unk0[NATIONAL_DEX_COUNT]; - struct PokedexListItem monData; + struct PokedexListItem pokedexList[NATIONAL_DEX_COUNT + 1]; u16 pokemonListCount; u16 selectedPokemon; - u16 unk610; + u16 selectedPokemonBackup; u16 dexMode; - u16 unk614; + u16 dexModeBackup; u16 dexOrder; - u16 unk618; - u16 unk61A; - u16 unk61C; - u16 unk61E[4]; + u16 dexOrderBackup; + u16 seenCount; + u16 ownCount; + u16 monSpriteIds[4]; u16 selectedMonSpriteId; - s16 unk628; - s16 unk62A; - u8 unk62C; - u8 unk62D; - u8 unk62E; - u8 unk62F; - s16 unk630; - s16 unk632; - s16 unk634; - s16 unk636; - u16 unk638; - u16 unk63A[8]; - u8 unk64A; - u8 unk64B; - u8 unk64C_1:1; + s16 pokeBallRotationStep; + s16 pokeBallRotationBackup; + u8 pokeBallRotation; + u8 initialVOffset; + u8 scrollTimer; + u8 scrollDirection; + s16 listVOffset; + s16 listMovingVOffset; + s16 scrollMonIncrement; + s16 maxScrollTimer; + u16 scrollSpeed; + u16 unk63A[4]; // Cleared, never read + u8 unk642[8]; + u8 currentPage; + u8 currentPageBackup; + u8 isSearchResults:1; u8 selectedScreen; u8 descriptionPageNum; - u8 unk64F; - u8 menuIsOpen; //menuIsOpen - u8 unk651; - u16 menuCursorPos; //Menu cursor position + u8 screenSwitchState; + u8 menuIsOpen; + u16 menuCursorPos; s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this) - u8 unk656[8]; - u8 unk65E[8]; + u8 unk656[8]; // Cleared, never read + u8 unk65E[8]; // Cleared, never read }; enum @@ -88,71 +87,71 @@ enum SIZE_SCREEN }; -struct UnknownStruct2 +struct SearchOptionText { - const u8 *text1; - const u8 *text2; + const u8 *description; + const u8 *title; }; -struct UnknownStruct1 +struct SearchOption { - const struct UnknownStruct2 *unk0; - u8 unk4; - u8 unk5; - u16 unk6; + const struct SearchOptionText *texts; + u8 taskDataCursorPos; + u8 taskDataScrollOffset; + u16 numOptions; }; -struct UnknownStruct3 +struct SearchMenuTopBarItem { const u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; + u8 highlightX; + u8 highlightY; + u8 highlightWidth; }; -struct UnknownStruct4 +struct SearchMenuItem { const u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; + u8 titleBgX; + u8 titleBgY; + u8 titleBgWidth; + u8 selectionBgX; + u8 selectionBgY; + u8 selectionBgWidth; }; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern u8 gReservedSpritePaletteCount; -extern struct SpriteTemplate gUnknown_02024E8C; -extern u8 gUnknown_03005E98; +extern struct SpriteTemplate gCreatingSpriteTemplate; +extern u8 gDexCryScreenState; extern const u8 gPokedexMenu_Gfx[]; extern const u8 gUnknown_08E96738[]; -extern const u8 gUnknown_08E96888[]; -extern const u8 gUnknown_08E96994[]; +extern const u8 gPokedexStartMenuMain_Tilemap[]; +extern const u8 gPokedexStartMenuSearchResults_Tilemap[]; extern const u8 gUnknown_08E9C6DC[]; extern const u8 gUnknown_08E96BD4[]; -extern const u8 gUnknown_08E96ACC[]; -extern const u8 gUnknown_08E96B58[]; +extern const u8 gPokedexScreenSelectBarMain_Tilemap[]; +extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap[]; extern const u16 gPokedexMenu_Pal[]; extern const u16 gPokedexMenu2_Pal[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct MonCoords gTrainerFrontPicCoords[]; extern const struct PokedexEntry gPokedexEntries[]; extern const u8 gPokedexMenuSearch_Gfx[]; -extern const u8 gUnknown_08E96D2C[]; +extern const u8 gPokedexMenuSearch_Tilemap[]; extern const u16 gPokedexMenuSearch_Pal[]; extern const u8 gTypeNames[][7]; extern const u8 gPokedexMenu2_Gfx[]; static EWRAM_DATA struct PokedexView *gPokedexView = NULL; -static EWRAM_DATA u16 gUnknown_0202FFB8 = 0; -static EWRAM_DATA u8 gUnknown_0202FFBA = 0; -static EWRAM_DATA struct PokedexListItem *gUnknown_0202FFBC = NULL; +static EWRAM_DATA u16 sLastSelectedPokemon = 0; +static EWRAM_DATA u8 sPokeBallRotation = 0; +static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; -u8 gUnknown_03005CE8; -IntrCallback gUnknown_03005CEC; +u8 gUnusedPokedexU8; +IntrCallback gPokedexVBlankCB; -static u8 sub_8091E3C(void); +static u8 LoadSearchMenu(void); static const u16 sPokedexSearchPalette[] = INCBIN_U16("graphics/pokedex/search.gbapal"); static const u16 sNationalPokedexPalette[] = INCBIN_U16("graphics/pokedex/national.gbapal"); @@ -403,7 +402,7 @@ static const union AnimCmd *const gSpriteAnimTable_83A0520[] = { gSpriteAnim_83A04CC, }; -static void sub_808EF38(struct Sprite *); +static void SpriteCB_Scrollbar(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A0524 = { .tileTag = 4096, @@ -412,10 +411,10 @@ static const struct SpriteTemplate gSpriteTemplate_83A0524 = .anims = gSpriteAnimTable_83A04D4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808EF38, + .callback = SpriteCB_Scrollbar, }; -static void sub_808EF8C(struct Sprite *); -static const struct SpriteTemplate gSpriteTemplate_83A053C = +static void SpriteCB_ScrollArrow(struct Sprite *); +static const struct SpriteTemplate sScrollArrowSpriteTemplate = { .tileTag = 4096, .paletteTag = 4096, @@ -423,9 +422,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A053C = .anims = gSpriteAnimTable_83A04D8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808EF8C, + .callback = SpriteCB_ScrollArrow, }; -static void sub_808F08C(struct Sprite *); +static void SpriteCB_DexListInterfaceText(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A0554 = { .tileTag = 4096, @@ -434,9 +433,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A0554 = .anims = gSpriteAnimTable_83A04E0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F08C, + .callback = SpriteCB_DexListInterfaceText, }; -static void sub_808F0B4(struct Sprite *); +static void SpriteCB_RotatingPokeBall(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A056C = { .tileTag = 4096, @@ -445,9 +444,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A056C = .anims = gSpriteAnimTable_83A04DC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F0B4, + .callback = SpriteCB_RotatingPokeBall, }; -static void sub_808ED94(struct Sprite *); +static void SpriteCB_SeenOwnInfo(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A0584 = { .tileTag = 4096, @@ -456,7 +455,7 @@ static const struct SpriteTemplate gSpriteTemplate_83A0584 = .anims = gSpriteAnimTable_83A04F0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808ED94, + .callback = SpriteCB_SeenOwnInfo, }; static const struct SpriteTemplate gSpriteTemplate_83A059C = { @@ -466,9 +465,9 @@ static const struct SpriteTemplate gSpriteTemplate_83A059C = .anims = gSpriteAnimTable_83A04F8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808ED94, + .callback = SpriteCB_SeenOwnInfo, }; -static void sub_808F168(struct Sprite *); +static void SpriteCB_DexListStartMenuCursor(struct Sprite *); static const struct SpriteTemplate gSpriteTemplate_83A05B4 = { .tileTag = 4096, @@ -477,14 +476,14 @@ static const struct SpriteTemplate gSpriteTemplate_83A05B4 = .anims = gSpriteAnimTable_83A0520, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_808F168, + .callback = SpriteCB_DexListStartMenuCursor, }; -static const struct CompressedSpriteSheet gUnknown_083A05CC[] = +static const struct CompressedSpriteSheet sInterfaceSpriteSheet[] = { {gPokedexMenu2_Gfx, 0x1F00, 0x1000}, {NULL, 0, 0}, }; -static const struct SpritePalette gUnknown_083A05DC[] = +static const struct SpritePalette sInterfaceSpritePalette[] = { {gPokedexMenu_Pal, 0x1000}, {NULL, 0}, @@ -498,7 +497,7 @@ static const u8 gUnknown_083A05F8[] = _(""); #elif GERMAN #include "data/pokedex_entries_de.h" #endif -static const u16 gUnknown_083B4EC4[16] = {0}; +static const u16 sSizeScreenSilhouette_Pal[16] = {0}; static const u8 *const sMonFootprintTable[] = { gMonFootprint_Bulbasaur, @@ -915,9 +914,9 @@ static const u8 *const sMonFootprintTable[] = gMonFootprint_Chimecho, gMonFootprint_Bulbasaur, }; -static const u8 gUnknown_083B5558[] = _("{CLEAR_TO 0}"); +static const u8 sText_ClearTo0[] = _("{CLEAR_TO 0}"); const u8 gUnknown_083B555C[] = INCBIN_U8("graphics/unknown/unknown_3B555C.bin"); -static const struct OamData gOamData_83B557C = +static const struct OamData sOamData_MonOrTrainerPic = { .y = 0, .affineMode = 0, @@ -933,108 +932,119 @@ static const struct OamData gOamData_83B557C = .paletteNum = 0, .affineParam = 0, }; -static void *const gUnknown_083B5584[] = + +static void *const sMonOrTrainerPicDecompressDestPtrs[] = { - ePokedexPalAddr1, - ePokedexPalAddr2, - ePokedexPalAddr3, - ePokedexPalAddr4, + ePokedexGraphicsBuffer + 0x0000, + ePokedexGraphicsBuffer + 0x4000, + ePokedexGraphicsBuffer + 0x8000, + ePokedexGraphicsBuffer + 0xC000, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5594[] = -{ - {ewram8000, 0x800}, - {ewram8800, 0x800}, - {ewram9000, 0x800}, - {ewram9800, 0x800}, - {ewramA000, 0x800}, - {ewramA800, 0x800}, - {ewramB000, 0x800}, - {ewramB800, 0x800}, - {ewramC000, 0x800}, - {ewramC800, 0x800}, - {ewramD000, 0x800}, - {ewramD800, 0x800}, - {ewramE000, 0x800}, - {ewramE800, 0x800}, - {ewramF000, 0x800}, - {ewramF800, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_0[] = +{ + {ePokedexGraphicsBuffer + 0x0000, 0x800}, + {ePokedexGraphicsBuffer + 0x0800, 0x800}, + {ePokedexGraphicsBuffer + 0x1000, 0x800}, + {ePokedexGraphicsBuffer + 0x1800, 0x800}, + {ePokedexGraphicsBuffer + 0x2000, 0x800}, + {ePokedexGraphicsBuffer + 0x2800, 0x800}, + {ePokedexGraphicsBuffer + 0x3000, 0x800}, + {ePokedexGraphicsBuffer + 0x3800, 0x800}, + {ePokedexGraphicsBuffer + 0x4000, 0x800}, + {ePokedexGraphicsBuffer + 0x4800, 0x800}, + {ePokedexGraphicsBuffer + 0x5000, 0x800}, + {ePokedexGraphicsBuffer + 0x5800, 0x800}, + {ePokedexGraphicsBuffer + 0x6000, 0x800}, + {ePokedexGraphicsBuffer + 0x6800, 0x800}, + {ePokedexGraphicsBuffer + 0x7000, 0x800}, + {ePokedexGraphicsBuffer + 0x7800, 0x800}, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5614[] = -{ - {ewramC000, 0x800}, - {ewramC800, 0x800}, - {ewramD000, 0x800}, - {ewramD800, 0x800}, - {ewramE000, 0x800}, - {ewramE800, 0x800}, - {ewramF000, 0x800}, - {ewramF800, 0x800}, - {ewram10000, 0x800}, - {ewram10800, 0x800}, - {ewram11000, 0x800}, - {ewram11800, 0x800}, - {ewram12000, 0x800}, - {ewram12800, 0x800}, - {ewram13000, 0x800}, - {ewram13800, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_1[] = +{ + {ePokedexGraphicsBuffer + 0x4000, 0x800}, + {ePokedexGraphicsBuffer + 0x4800, 0x800}, + {ePokedexGraphicsBuffer + 0x5000, 0x800}, + {ePokedexGraphicsBuffer + 0x5800, 0x800}, + {ePokedexGraphicsBuffer + 0x6000, 0x800}, + {ePokedexGraphicsBuffer + 0x6800, 0x800}, + {ePokedexGraphicsBuffer + 0x7000, 0x800}, + {ePokedexGraphicsBuffer + 0x7800, 0x800}, + {ePokedexGraphicsBuffer + 0x8000, 0x800}, + {ePokedexGraphicsBuffer + 0x8800, 0x800}, + {ePokedexGraphicsBuffer + 0x9000, 0x800}, + {ePokedexGraphicsBuffer + 0x9800, 0x800}, + {ePokedexGraphicsBuffer + 0xA000, 0x800}, + {ePokedexGraphicsBuffer + 0xA800, 0x800}, + {ePokedexGraphicsBuffer + 0xB000, 0x800}, + {ePokedexGraphicsBuffer + 0xB800, 0x800}, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5694[] = -{ - {ewram10000, 0x800}, - {ewram10800, 0x800}, - {ewram11000, 0x800}, - {ewram11800, 0x800}, - {ewram12000, 0x800}, - {ewram12800, 0x800}, - {ewram13000, 0x800}, - {ewram13800, 0x800}, - {ewram14000, 0x800}, - {ewram14800, 0x800}, - {ewram15000, 0x800}, - {ewram15800, 0x800}, - {ewram16000_2, 0x800}, - {ewram16800, 0x800}, - {ewram17000, 0x800}, - {ewram17800_2, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_2[] = +{ + {ePokedexGraphicsBuffer + 0x8000, 0x800}, + {ePokedexGraphicsBuffer + 0x8800, 0x800}, + {ePokedexGraphicsBuffer + 0x9000, 0x800}, + {ePokedexGraphicsBuffer + 0x9800, 0x800}, + {ePokedexGraphicsBuffer + 0xA000, 0x800}, + {ePokedexGraphicsBuffer + 0xA800, 0x800}, + {ePokedexGraphicsBuffer + 0xB000, 0x800}, + {ePokedexGraphicsBuffer + 0xB800, 0x800}, + {ePokedexGraphicsBuffer + 0xC000, 0x800}, + {ePokedexGraphicsBuffer + 0xC800, 0x800}, + {ePokedexGraphicsBuffer + 0xD000, 0x800}, + {ePokedexGraphicsBuffer + 0xD800, 0x800}, + {ePokedexGraphicsBuffer + 0xE000, 0x800}, + {ePokedexGraphicsBuffer + 0xE800, 0x800}, + {ePokedexGraphicsBuffer + 0xF000, 0x800}, + {ePokedexGraphicsBuffer + 0xF800, 0x800}, }; -static const struct SpriteFrameImage gSpriteImageTable_83B5714[] = -{ - {ewram14000, 0x800}, - {ewram14800, 0x800}, - {ewram15000, 0x800}, - {ewram15800, 0x800}, - {ewram16000_2, 0x800}, - {ewram16800, 0x800}, - {ewram17000, 0x800}, - {ewram17800_2, 0x800}, - {ewram18000_2, 0x800}, - {ewram18800, 0x800}, - {ewram19000, 0x800}, - {ewram19800, 0x800}, - {ewram1A000, 0x800}, - {ewram1A800, 0x800}, - {ewram1B000_2, 0x800}, - {ewram1B800, 0x800}, + +static const struct SpriteFrameImage sSpriteFrameImages_MonOrTrainerPic_3[] = +{ + {ePokedexGraphicsBuffer + 0xC000, 0x800}, + {ePokedexGraphicsBuffer + 0xC800, 0x800}, + {ePokedexGraphicsBuffer + 0xD000, 0x800}, + {ePokedexGraphicsBuffer + 0xD800, 0x800}, + {ePokedexGraphicsBuffer + 0xE000, 0x800}, + {ePokedexGraphicsBuffer + 0xE800, 0x800}, + {ePokedexGraphicsBuffer + 0xF000, 0x800}, + {ePokedexGraphicsBuffer + 0xF800, 0x800}, + // UB: may overlap ePokedexView1-4 + {ePokedexGraphicsBuffer + 0x10000, 0x800}, + {ePokedexGraphicsBuffer + 0x10800, 0x800}, + {ePokedexGraphicsBuffer + 0x11000, 0x800}, + {ePokedexGraphicsBuffer + 0x11800, 0x800}, + {ePokedexGraphicsBuffer + 0x12000, 0x800}, + {ePokedexGraphicsBuffer + 0x12800, 0x800}, + {ePokedexGraphicsBuffer + 0x13000, 0x800}, + {ePokedexGraphicsBuffer + 0x13800, 0x800}, }; -static const struct SpriteFrameImage *const gUnknown_083B5794[] = + +static const struct SpriteFrameImage *const sSpriteFrameImages_MonOrTrainerPic[] = { - gSpriteImageTable_83B5594, - gSpriteImageTable_83B5614, - gSpriteImageTable_83B5694, - gSpriteImageTable_83B5714, + sSpriteFrameImages_MonOrTrainerPic_0, + sSpriteFrameImages_MonOrTrainerPic_1, + sSpriteFrameImages_MonOrTrainerPic_2, + sSpriteFrameImages_MonOrTrainerPic_3, }; -static void nullsub_59(struct Sprite *); -static const struct SpriteTemplate gUnknown_083B57A4 = + +static void _SpriteCB_Dummy(struct Sprite *); + +static const struct SpriteTemplate sMonOrTrainerPicSpriteTemplate = { .tileTag = 0xFFFF, .paletteTag = 0, - .oam = &gOamData_83B557C, + .oam = &sOamData_MonOrTrainerPic, .anims = NULL, - .images = gSpriteImageTable_83B5594, + .images = sSpriteFrameImages_MonOrTrainerPic_0, .affineAnims = gDummySpriteAffineAnimTable, - .callback = nullsub_59, + .callback = _SpriteCB_Dummy, }; -static const u8 gUnknown_083B57BC[][4] = + +// First character in range followed by number of characters in range for upper and lowercase +static const u8 sLetterSearchRanges[][4] = { {0, 0, 0, 0}, {CHAR_A, 3, CHAR_a, 3}, @@ -1047,13 +1057,13 @@ static const u8 gUnknown_083B57BC[][4] = {CHAR_V, 3, CHAR_v, 3}, {CHAR_Y, 2, CHAR_y, 2}, }; -static const struct UnknownStruct3 gUnknown_083B57E4[] = +static const struct SearchMenuTopBarItem sSearchMenuTopBarItems[] = { {DexText_SearchForPoke, 0, 0, 5}, {DexText_SwitchDex, 6, 0, 5}, {DexText_ReturnToDex, 12, 0, 5}, }; -static const struct UnknownStruct4 gUnknown_083B57FC[] = +static const struct SearchMenuItem sSearchMenuItems[] = { {DexText_ListByABC, 0, 2, 5, 5, 2, 12}, {DexText_ListByColor, 0, 4, 5, 5, 4, 12}, @@ -1063,7 +1073,7 @@ static const struct UnknownStruct4 gUnknown_083B57FC[] = {DexText_SelectDexMode, 0, 10, 5, 5, 10, 12}, {DexText_ExecuteSearchSwitch, 0, 12, 5, 0, 0, 0}, }; -static const u8 gUnknown_083B5850[][4] = +static const u8 sSearchMovementMap_SearchNatDex[][4] = { {0xFF, 0xFF, 0xFF, 1}, {0xFF, 0xFF, 0, 2}, @@ -1073,7 +1083,7 @@ static const u8 gUnknown_083B5850[][4] = {0xFF, 0xFF, 4, 6}, {0xFF, 0xFF, 5, 0xFF}, }; -static const u8 gUnknown_083B586C[][4] = +static const u8 sSearchMovementMap_ShiftNatDex[][4] = { {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, @@ -1083,7 +1093,7 @@ static const u8 gUnknown_083B586C[][4] = {0xFF, 0xFF, 4, 6}, {0xFF, 0xFF, 5, 0xFF}, }; -static const u8 gUnknown_083B5888[][4] = +static const u8 sSearchMovementMap_SearchHoennDex[][4] = { {0xFF, 0xFF, 0xFF, 1}, {0xFF, 0xFF, 0, 2}, @@ -1093,7 +1103,7 @@ static const u8 gUnknown_083B5888[][4] = {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 4, 0xFF}, }; -static const u8 gUnknown_083B58A4[][4] = +static const u8 sSearchMovementMap_ShiftHoennDex[][4] = { {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, @@ -1103,13 +1113,13 @@ static const u8 gUnknown_083B58A4[][4] = {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 4, 0xFF}, }; -static const struct UnknownStruct2 gUnknown_083B58C0[] = +static const struct SearchOptionText sDexModeOptions[] = { {DexText_HoennDex2, DexText_HoennDex}, {DexText_NationalDex2, DexText_NationalDex}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B58D8[] = +static const struct SearchOptionText sDexOrderOptions[] = { {DexText_ListByNumber, DexText_NumericalMode}, {DexText_ListByABC2, DexText_ABCMode}, @@ -1119,7 +1129,7 @@ static const struct UnknownStruct2 gUnknown_083B58D8[] = {DexText_ListBySmallToTallest, DexText_SmallestMode}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B5910[] = +static const struct SearchOptionText sDexSearchNameOptions[] = { {DexText_Terminator5, DexText_DontSpecify}, {DexText_Terminator5, DexText_ABC}, @@ -1133,7 +1143,7 @@ static const struct UnknownStruct2 gUnknown_083B5910[] = {DexText_Terminator5, DexText_YZ}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B5968[] = +static const struct SearchOptionText sDexSearchColorOptions[] = { {DexText_Terminator5, DexText_DontSpecify}, {DexText_Terminator5, DexText_Red}, @@ -1148,7 +1158,7 @@ static const struct UnknownStruct2 gUnknown_083B5968[] = {DexText_Terminator5, DexText_Pink}, {NULL, NULL}, }; -static const struct UnknownStruct2 gUnknown_083B59C8[] = +static const struct SearchOptionText sDexSearchTypeOptions[] = { {DexText_Terminator5, DexText_None}, {DexText_Terminator5, gTypeNames[TYPE_NORMAL]}, @@ -1170,17 +1180,17 @@ static const struct UnknownStruct2 gUnknown_083B59C8[] = {DexText_Terminator5, gTypeNames[TYPE_DARK]}, {NULL, NULL}, }; -static const u8 gUnknown_083B5A60[] = {0, 1}; -static const u8 gUnknown_083B5A62[] = {0, 1, 2, 3, 4, 5}; -static const u8 gUnknown_083B5A68[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17}; -static const struct UnknownStruct1 gUnknown_083B5A7C[] = -{ - {gUnknown_083B5910, 6, 7, 10}, - {gUnknown_083B5968, 8, 9, 11}, - {gUnknown_083B59C8, 10, 11, 18}, - {gUnknown_083B59C8, 12, 13, 18}, - {gUnknown_083B58D8, 4, 5, 6}, - {gUnknown_083B58C0, 2, 3, 2}, +static const u8 sPokedexModes[] = {0, 1}; +static const u8 sOrderOptions[] = {0, 1, 2, 3, 4, 5}; +static const u8 sDexSearchTypeIds[] = {0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17}; +static const struct SearchOption sSearchOptions[] = +{ + { sDexSearchNameOptions, 6, 7, 10}, + { sDexSearchColorOptions, 8, 9, 11}, + { sDexSearchTypeOptions, 10, 11, 18}, + { sDexSearchTypeOptions, 12, 13, 18}, + { sDexOrderOptions, 4, 5, 6}, + { sDexModeOptions, 2, 3, 2}, }; static const u8 gUnknown_083B5AAC[] = _("{STR_VAR_1}{CLEAR_TO 43}"); static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}"); @@ -1188,105 +1198,105 @@ static const u8 gUnknown_083B5AB2[] = _("{STR_VAR_1}{CLEAR_TO 96}"); static void MainCB(void); static void Task_PokedexShowMainScreen(u8 taskId); static void Task_PokedexMainScreen(u8 taskId); -static void sub_808C898(u8 taskId); +static void Task_WaitForScroll(u8 taskId); static void Task_PokedexMainScreenMenu(u8 taskId); -static void sub_808CA64(u8 taskId); -static void sub_808CAE4(u8 taskId); -static void sub_808CB8C(u8 taskId); +static void Task_OpenInfoScreenAfterMonMovement(u8 taskId); +static void Task_WaitForExitInfoScreen(u8 taskId); +static void Task_WaitForExitSearch(u8 taskId); static void Task_ClosePokedex(u8 taskId); -static void sub_808CCC4(u8 taskId); +static void Task_OpenSearchResults(u8 taskId); static void Task_PokedexResultsScreen(u8 taskId); -static void sub_808CEF8(u8 taskId); +static void Task_WaitForSearchResultsScroll(u8 taskId); static void Task_PokedexResultsScreenMenu(u8 taskId); -static void sub_808D118(u8 taskId); -static void sub_808D198(u8 taskId); +static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId); +static void Task_WaitForExitSearchResultsInfoScreen(u8 taskId); static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId); static void Task_PokedexResultsScreenExitPokedex(u8 taskId); -static bool8 sub_808D344(u8 a); -static void sub_808D640(void); +static bool8 LoadPokedexListPage(u8 a); +static void LoadPokedexBgPalette(void); static void SortPokedex(u8 dexMode, u8 sortMode); -static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d); -static void sub_808DF88(u16 a, u8 b, u8 c, u16 d); -static u8 sub_808DFE4(u16 num, u8 b, u8 c); -static void sub_808E090(u8 a, u8 b, u16 c); -static void sub_808E0CC(u16 a, u16 b); -static bool8 sub_808E208(u8 a, u8 b, u8 c); -static u16 sub_808E48C(u16 a, u16 b); -static void sub_808E6BC(void); -static u8 sub_808E71C(void); -static u8 sub_808E82C(void); -static u16 sub_808E888(u16 a1); -static u32 sub_808E8C8(u16 a, s16 b, s16 c); -static void sub_808E978(u8 a); -static void sub_808EDB8(struct Sprite *sprite); -static void sub_808EE28(struct Sprite *sprite); -static u8 sub_808F210(struct PokedexListItem *, u8); -static bool8 sub_808F250(u8 taskId); +static void CreateMonDexNum(u16 entryNum, u8 x, u8 y, u16 screenBase); +static void CreateCaughtBall(u16 owned, u8 x, u8 y, u16 screenBase); +static u8 CreateMonName(u16 num, u8 b, u8 c); +static void ClearMonListEntry(u8 x, u8 y, u16 screenBase); +static void CreateMonSpritesAtPos(u16 selectedMon, u16 b); +static bool8 UpdateDexListScroll(u8 direction, u8 monMoveIncrement, u8 scrollTimerMax); +static u16 TryDoPokedexScroll(u16 a, u16 b); +static void UpdateSelectedMonSpriteId(void); +static u8 TryDoInfoScreenScroll(void); +static u8 ClearMonSprites(void); +static u16 GetPokemonSpriteToDisplay(u16 species); +static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y); +static void CreateInterfaceSprites(u8 a); +static void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite); +static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite); +static u8 LoadInfoScreen(struct PokedexListItem *, u8); +static bool8 IsInfoScreenScrolling(u8 taskId); static u8 sub_808F284(struct PokedexListItem *, u8); static void Task_InitPageScreenMultistep(u8 taskId); static void Task_PageScreenProcessInput(u8 taskId); -static void sub_808F888(u8 taskId); +static void Task_LoadInfoScreenWaitForFade(u8 taskId); static void Task_ClosePageScreen(u8 taskId); static void Task_InitAreaScreenMultistep(u8 taskId); static void Task_AreaScreenProcessInput(u8 taskId); static void sub_808FA00(u8 taskId); static void Task_InitCryScreenMultistep(u8 taskId); static void Task_CryScreenProcessInput(u8 taskId); -static void sub_808FFBC(u8 taskId); -static void sub_8090040(u8 a); +static void Task_SwitchScreensFromCryScreen(u8 taskId); +static void LoadPlayArrowPalette(u8 cryPlaying); static void Task_InitSizeScreenMultistep(u8 taskId); static void Task_SizeScreenProcessInput(u8 taskId); -static void sub_8090498(u8 taskId); -static void sub_80904FC(u16 a); -static void sub_8090540(u16 a); -static void sub_8090584(u8 a, u16 b); +static void Task_SwitchScreensFromSizeScreen(u8 taskId); +static void LoadScreenSelectBarMain(u16 screenBase); +static void LoadScreenSelectBarSubmenu(u16 screenBase); +static void HighlightScreenSelectBarItem(u8 a, u16 b); static void sub_8090644(u8 a, u16 b); static void sub_8090750(u8); static void sub_8090A3C(u8); static void sub_8090B8C(u8); static void sub_8090C28(struct Sprite *); static void sub_8090C68(void); -static void sub_8091060(u16); -static void sub_8091154(u16 order, u8, u8); -static u8 sub_80911C8(u16 num, u8, u8); -static u8 sub_8091260(u16 num, u8, u8, u8); -static void sub_8091304(const u8 *name, u8, u8); +static void ResetOtherVideoRegisters(u16); +static void PrintEntryScreenDexNum(u16 order, u8, u8); +static u8 PrintEntryScreenSpeciesName(u16 num, u8, u8); +static u8 PrintCryScreenSpeciesName(u16 num, u8, u8, u8); +static void UnusedPrintMonName(const u8 *name, u8, u8); static void sub_8091458(u16 height, u8 i, u8 i1); static void sub_8091564(u16 weight, u8 i, u8 i1); -void sub_8091738(u16, u16, u16); -static void sub_80917CC(u16 i, u16 i1); -static u16 sub_8091818(u8, u16, u16, u16); -u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); -static void sub_8091E54(u8); -static void sub_809204C(u8); -static void sub_809207C(u8); -static void sub_809217C(u8); -static void sub_80921B0(u8); -static void sub_80923FC(u8); -static void sub_80924A4(u8); -static void sub_8092508(u8); -static void sub_80925CC(u8); -static void sub_8092644(u8); -static void sub_80927B8(u8); -static void sub_80927F0(u8); -static void sub_8092AB0(u8); -static void sub_8092AD4(u8, u8); -static void sub_8092B68(u8); -static void sub_8092C8C(u8); -static void sub_8092D78(u8); -static u8 sub_8092E10(u8, u8); -static void sub_8092EB0(u8); -static void sub_809308C(u8); +void PrintFootprint(u16 num, u16 b, u16 c); +static void sub_80C0DC0(u16 a, u16 b); +static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max); +u16 CreateMonSpriteFromNationalDexNumber(u16 num, s16 x, s16 y, u16 paletteNum); +static void Task_LoadSearchMenu(u8 taskId); +static void Task_SwitchToSearchMenuTopBar(u8 taskId); +static void Task_HandleSearchTopBarInput(u8 taskId); +static void Task_SwitchToSearchMenu(u8 taskId); +static void Task_HandleSearchMenuInput(u8 taskId); +static void Task_StartPokedexSearch(u8 taskId); +static void Task_WaitAndCompleteSearch(u8 taskId); +static void Task_SearchCompleteWaitForInput(u8 taskId); +static void Task_SelectSearchMenuItem(u8 taskId); +static void Task_HandleSearchParameterInput(u8 taskId); +static void Task_ExitSearch(u8 taskId); +static void Task_ExitSearchWaitForFade(u8 taskId); +static void HighlightSelectedSearchTopBarItem(u8 topBarItem); +static void HighlightSelectedSearchMenuItem(u8 topBarItem, u8 menuItem); +static void PrintSelectedSearchParameters(u8 taskId); +static void DrawOrEraseSearchParameterBox(bool8 erase); +static void PrintSearchParameterText(u8 taskId); +static u8 GetSearchModeSelection(u8 taskId, u8 b); +static void SetDefaultSearchModeAndOrder(u8 taskId); +static void CreateSearchParameterScrollArrows(u8 taskId); void ResetPokedex(void) { u16 i; - gUnknown_0202FFB8 = 0; - gUnknown_0202FFBA = 0x40; - gUnknown_03005CE8 = 0; - gSaveBlock2.pokedex.unknown1 = 0; + sLastSelectedPokemon = 0; + sPokeBallRotation = 0x40; + gUnusedPokedexU8 = 0; + gSaveBlock2.pokedex.mode = 0; gSaveBlock2.pokedex.order = 0; gSaveBlock2.pokedex.nationalMagic = 0; gSaveBlock2.pokedex.unknown2 = 0; @@ -1294,7 +1304,7 @@ void ResetPokedex(void) gSaveBlock2.pokedex.spindaPersonality = 0; gSaveBlock2.pokedex.unknown3 = 0; DisableNationalPokedex(); - for (i = 0; i <= 51; i++) + for (i = 0; i < DEX_FLAGS_NO; i++) { gSaveBlock2.pokedex.owned[i] = 0; gSaveBlock2.pokedex.seen[i] = 0; @@ -1303,13 +1313,13 @@ void ResetPokedex(void) } } -void sub_808C0A0(void) +void ResetPokedexScrollPositions(void) { - gUnknown_0202FFB8 = 0; - gUnknown_0202FFBA = 0x40; + sLastSelectedPokemon = 0; + sPokeBallRotation = 0x40; } -static void sub_808C0B8(void) +static void VBlankCB_Pokedex(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -1322,42 +1332,42 @@ static void ClearPokedexView(struct PokedexView *pokedexView) for (i = 0; i < NATIONAL_DEX_COUNT; i++) { - pokedexView->unk0[i].dexNum |= 0xFFFF; - pokedexView->unk0[i].seen = 0; - pokedexView->unk0[i].owned = 0; + pokedexView->pokedexList[i].dexNum |= 0xFFFF; + pokedexView->pokedexList[i].seen = 0; + pokedexView->pokedexList[i].owned = 0; } - pokedexView->monData.dexNum = 0; - pokedexView->monData.seen = 0; - pokedexView->monData.owned = 0; + pokedexView->pokedexList[NATIONAL_DEX_COUNT].dexNum = 0; + pokedexView->pokedexList[NATIONAL_DEX_COUNT].seen = 0; + pokedexView->pokedexList[NATIONAL_DEX_COUNT].owned = 0; pokedexView->pokemonListCount = 0; pokedexView->selectedPokemon = 0; - pokedexView->unk610 = 0; + pokedexView->selectedPokemonBackup = 0; pokedexView->dexMode = 0; - pokedexView->unk614 = 0; + pokedexView->dexModeBackup = 0; pokedexView->dexOrder = 0; - pokedexView->unk618 = 0; - pokedexView->unk61A = 0; - pokedexView->unk61C = 0; + pokedexView->dexOrderBackup = 0; + pokedexView->seenCount = 0; + pokedexView->ownCount = 0; for (i = 0; i < 4; i++) - pokedexView->unk61E[i] |= 0xFFFF; - pokedexView->unk628 = 0; - pokedexView->unk62A = 0; - pokedexView->unk62C = 0; - pokedexView->unk62D = 0; - pokedexView->unk62E = 0; - pokedexView->unk62F = 0; - pokedexView->unk630 = 0; - pokedexView->unk632 = 0; - pokedexView->unk634 = 0; - pokedexView->unk636 = 0; - pokedexView->unk638 = 0; + pokedexView->monSpriteIds[i] |= 0xFFFF; + pokedexView->pokeBallRotationStep = 0; + pokedexView->pokeBallRotationBackup = 0; + pokedexView->pokeBallRotation = 0; + pokedexView->initialVOffset = 0; + pokedexView->scrollTimer = 0; + pokedexView->scrollDirection = 0; + pokedexView->listVOffset = 0; + pokedexView->listMovingVOffset = 0; + pokedexView->scrollMonIncrement = 0; + pokedexView->maxScrollTimer = 0; + pokedexView->scrollSpeed = 0; for (i = 0; i < 4; i++) pokedexView->unk63A[i] = 0; - pokedexView->unk64A = 0; - pokedexView->unk64B = 0; - pokedexView->unk64C_1 = 0; + pokedexView->currentPage = 0; + pokedexView->currentPageBackup = 0; + pokedexView->isSearchResults = 0; pokedexView->selectedScreen = 0; - pokedexView->unk64F = 0; + pokedexView->screenSwitchState = 0; pokedexView->menuIsOpen = 0; pokedexView->menuCursorPos = 0; pokedexView->menuY = 0; @@ -1374,7 +1384,7 @@ void CB2_InitPokedex(void) case 0: default: SetVBlankCallback(NULL); - sub_8091060(0); + ResetOtherVideoRegisters(0); DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000); DmaClear32(3, OAM, OAM_SIZE); DmaClear16(3, PLTT, PLTT_SIZE); @@ -1410,25 +1420,25 @@ void CB2_InitPokedex(void) } ClearPokedexView(gPokedexView); CreateTask(Task_PokedexShowMainScreen, 0); - gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1; + gPokedexView->dexMode = gSaveBlock2.pokedex.mode; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; gPokedexView->dexOrder = gSaveBlock2.pokedex.order; - gPokedexView->selectedPokemon = gUnknown_0202FFB8; - gPokedexView->unk62C = gUnknown_0202FFBA; + gPokedexView->selectedPokemon = sLastSelectedPokemon; + gPokedexView->pokeBallRotation = sPokeBallRotation; gPokedexView->selectedScreen = PAGE_SCREEN; gPokedexView->descriptionPageNum = 0; if (!IsNationalPokedexEnabled()) { - gPokedexView->unk61A = GetHoennPokedexCount(0); - gPokedexView->unk61C = GetHoennPokedexCount(1); + gPokedexView->seenCount = GetHoennPokedexCount(0); + gPokedexView->ownCount = GetHoennPokedexCount(1); } else { - gPokedexView->unk61A = GetNationalPokedexCount(0); - gPokedexView->unk61C = GetNationalPokedexCount(1); + gPokedexView->seenCount = GetNationalPokedexCount(0); + gPokedexView->ownCount = GetNationalPokedexCount(1); } - gPokedexView->unk62D = 8; + gPokedexView->initialVOffset = 8; gMain.state++; break; case 3: @@ -1437,10 +1447,10 @@ void CB2_InitPokedex(void) savedIme = REG_IME; REG_IME = 0; - REG_IE |= 1; + REG_IE |= INTR_FLAG_VBLANK; REG_IME = savedIme; - REG_DISPSTAT |= 8; - SetVBlankCallback(sub_808C0B8); + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB_Pokedex); SetMainCallback2(MainCB); SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80); @@ -1449,27 +1459,28 @@ void CB2_InitPokedex(void) } } +UNUSED u8 unref_sub_808C540(void (*func)(u8)) { u16 savedIme; u8 taskId; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); ScanlineEffect_Stop(); ResetTasks(); ResetPaletteFade(); savedIme = REG_IME; REG_IME = 0; - REG_IE |= 1; + REG_IE |= INTR_FLAG_VBLANK; REG_IME = savedIme; - REG_DISPSTAT |= 0x8; - SetVBlankCallback(sub_808C0B8); + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(VBlankCB_Pokedex); SetMainCallback2(MainCB); - if (!gPokedexView->unk64B) - taskId = CreateTask(sub_808CAE4, 0); + if (!gPokedexView->currentPageBackup) + taskId = CreateTask(Task_WaitForExitInfoScreen, 0); else - taskId = CreateTask(sub_808D198, 0); + taskId = CreateTask(Task_WaitForExitSearchResultsInfoScreen, 0); gTasks[taskId].data[0] = CreateTask(func, 0); return gTasks[taskId].data[0]; } @@ -1484,8 +1495,8 @@ static void MainCB(void) static void Task_PokedexShowMainScreen(u8 taskId) { - gPokedexView->unk64C_1 = 0; - if (sub_808D344(0)) + gPokedexView->isSearchResults = 0; + if (LoadPokedexListPage(0)) gTasks[taskId].func = Task_PokedexMainScreen; } @@ -1499,14 +1510,14 @@ void Task_PokedexMainScreen(u8 taskId) gPokedexView->menuY -= 8; else { - if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) + if ((gMain.newKeys & A_BUTTON) && gPokedexView->pokedexList[gPokedexView->selectedPokemon].seen) { - sub_808E6BC(); + UpdateSelectedMonSpriteId(); BeginNormalPaletteFade( ~(1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 16, RGB(0, 0, 0)); - gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; - gTasks[taskId].func = sub_808CA64; + gSprites[gPokedexView->selectedMonSpriteId].callback = SpriteCB_MoveMonForInfoScreen; + gTasks[taskId].func = Task_OpenInfoScreenAfterMonMovement; PlaySE(SE_PIN); } else if (gMain.newKeys & START_BUTTON) @@ -1522,13 +1533,13 @@ void Task_PokedexMainScreen(u8 taskId) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].data[0] = sub_8091E3C(); - gPokedexView->unk64F = 0; - gPokedexView->unk62A = gPokedexView->unk62C; - gPokedexView->unk610 = gPokedexView->selectedPokemon; - gPokedexView->unk614 = gPokedexView->dexMode; - gPokedexView->unk618 = gPokedexView->dexOrder; - gTasks[taskId].func = sub_808CB8C; + gTasks[taskId].data[0] = LoadSearchMenu(); + gPokedexView->screenSwitchState = 0; + gPokedexView->pokeBallRotationBackup = gPokedexView->pokeBallRotation; + gPokedexView->selectedPokemonBackup = gPokedexView->selectedPokemon; + gPokedexView->dexModeBackup = gPokedexView->dexMode; + gPokedexView->dexOrderBackup = gPokedexView->dexOrder; + gTasks[taskId].func = Task_WaitForExitSearch; PlaySE(SE_PC_LOGIN); } else if (gMain.newKeys & B_BUTTON) @@ -1540,16 +1551,18 @@ void Task_PokedexMainScreen(u8 taskId) else { //Handle D-pad - gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); - if (gPokedexView->unk62E) - gTasks[taskId].func = sub_808C898; + gPokedexView->selectedPokemon = TryDoPokedexScroll(gPokedexView->selectedPokemon, 0xE); + if (gPokedexView->scrollTimer) + gTasks[taskId].func = Task_WaitForScroll; } } } -static void sub_808C898(u8 taskId) +static void Task_WaitForScroll(u8 taskId) { - if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) + if (UpdateDexListScroll(gPokedexView->scrollDirection, + gPokedexView->scrollMonIncrement, + gPokedexView->maxScrollTimer)) gTasks[taskId].func = Task_PokedexMainScreen; } @@ -1573,16 +1586,16 @@ static void Task_PokedexMainScreenMenu(u8 taskId) break; case 1: //LIST TOP gPokedexView->selectedPokemon = 0; - gPokedexView->unk62C = 0x40; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = 0x40; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; case 2: //LIST BOTTOM gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; - gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = gPokedexView->pokemonListCount * 16 + 0x30; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; case 3: //CLOSE POKEDEX @@ -1613,52 +1626,52 @@ static void Task_PokedexMainScreenMenu(u8 taskId) } } -static void sub_808CA64(u8 taskId) +static void Task_OpenInfoScreenAfterMonMovement(u8 taskId) { if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) { - gPokedexView->unk64B = gPokedexView->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); - gTasks[taskId].func = sub_808CAE4; + gPokedexView->currentPageBackup = gPokedexView->currentPage; + gTasks[taskId].data[0] = LoadInfoScreen(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); + gTasks[taskId].func = Task_WaitForExitInfoScreen; } } -static void sub_808CAE4(u8 taskId) +static void Task_WaitForExitInfoScreen(u8 taskId) { if (gTasks[gTasks[taskId].data[0]].isActive) { - if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) - sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); + if (gPokedexView->currentPage == 1 && !IsInfoScreenScrolling(gTasks[taskId].data[0]) && TryDoInfoScreenScroll()) + sub_808F284(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); } else { - gUnknown_0202FFB8 = gPokedexView->selectedPokemon; - gUnknown_0202FFBA = gPokedexView->unk62C; + sLastSelectedPokemon = gPokedexView->selectedPokemon; + sPokeBallRotation = gPokedexView->pokeBallRotation; gTasks[taskId].func = Task_PokedexShowMainScreen; } } -static void sub_808CB8C(u8 taskId) +static void Task_WaitForExitSearch(u8 taskId) { bool8 isActive = gTasks[gTasks[taskId].data[0]].isActive; if (!isActive) { - if (gPokedexView->unk64F != 0) + if (gPokedexView->screenSwitchState != 0) { gPokedexView->selectedPokemon = isActive; - gPokedexView->unk62C = 0x40; - gTasks[taskId].func = sub_808CCC4; + gPokedexView->pokeBallRotation = 0x40; + gTasks[taskId].func = Task_OpenSearchResults; } else { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; + gPokedexView->pokeBallRotation = gPokedexView->pokeBallRotationBackup; + gPokedexView->selectedPokemon = gPokedexView->selectedPokemonBackup; + gPokedexView->dexMode = gPokedexView->dexModeBackup; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; + gPokedexView->dexOrder = gPokedexView->dexOrderBackup; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -1668,9 +1681,9 @@ static void Task_ClosePokedex(u8 taskId) { if (!gPaletteFade.active) { - gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode; + gSaveBlock2.pokedex.mode = gPokedexView->dexMode; if (!IsNationalPokedexEnabled()) - gSaveBlock2.pokedex.unknown1 = 0; + gSaveBlock2.pokedex.mode = 0; gSaveBlock2.pokedex.order = gPokedexView->dexOrder; DestroyTask(taskId); SetMainCallback2(c2_exit_to_overworld_1_sub_8080DEC); @@ -1678,10 +1691,10 @@ static void Task_ClosePokedex(u8 taskId) } } -static void sub_808CCC4(u8 taskId) +static void Task_OpenSearchResults(u8 taskId) { - gPokedexView->unk64C_1 = 1; - if (sub_808D344(3)) + gPokedexView->isSearchResults = 1; + if (LoadPokedexListPage(3)) gTasks[taskId].func = Task_PokedexResultsScreen; } @@ -1695,15 +1708,15 @@ static void Task_PokedexResultsScreen(u8 taskId) } else { - if ((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) + if ((gMain.newKeys & A_BUTTON) && gPokedexView->pokedexList[gPokedexView->selectedPokemon].seen) { u32 excludedPalettes; - sub_808E6BC(); + UpdateSelectedMonSpriteId(); excludedPalettes = (1 << (gSprites[gPokedexView->selectedMonSpriteId].oam.paletteNum + 16)); - gSprites[gPokedexView->selectedMonSpriteId].callback = sub_808EDB8; + gSprites[gPokedexView->selectedMonSpriteId].callback = SpriteCB_MoveMonForInfoScreen; BeginNormalPaletteFade(~excludedPalettes, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_808D118; + gTasks[taskId].func = Task_OpenSearchResultsInfoScreenAfterMonMovement; PlaySE(SE_PIN); } else if (gMain.newKeys & START_BUTTON) @@ -1717,9 +1730,9 @@ static void Task_PokedexResultsScreen(u8 taskId) else if (gMain.newKeys & SELECT_BUTTON) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].data[0] = sub_8091E3C(); - gPokedexView->unk64F = 0; - gTasks[taskId].func = sub_808CB8C; + gTasks[taskId].data[0] = LoadSearchMenu(); + gPokedexView->screenSwitchState = 0; + gTasks[taskId].func = Task_WaitForExitSearch; PlaySE(SE_PC_LOGIN); } else if (gMain.newKeys & B_BUTTON) @@ -1731,16 +1744,18 @@ static void Task_PokedexResultsScreen(u8 taskId) else { //Handle D-pad - gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); - if (gPokedexView->unk62E) - gTasks[taskId].func = sub_808CEF8; + gPokedexView->selectedPokemon = TryDoPokedexScroll(gPokedexView->selectedPokemon, 0xE); + if (gPokedexView->scrollTimer) + gTasks[taskId].func = Task_WaitForSearchResultsScroll; } } } -static void sub_808CEF8(u8 taskId) +static void Task_WaitForSearchResultsScroll(u8 taskId) { - if (sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) + if (UpdateDexListScroll(gPokedexView->scrollDirection, + gPokedexView->scrollMonIncrement, + gPokedexView->maxScrollTimer)) gTasks[taskId].func = Task_PokedexResultsScreen; } @@ -1764,16 +1779,16 @@ static void Task_PokedexResultsScreenMenu(u8 taskId) break; case 1: //LIST TOP gPokedexView->selectedPokemon = 0; - gPokedexView->unk62C = 0x40; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = 0x40; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; case 2: //LIST BOTTOM gPokedexView->selectedPokemon = gPokedexView->pokemonListCount - 1; - gPokedexView->unk62C = gPokedexView->pokemonListCount * 16 + 0x30; - sub_808E82C(); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->pokeBallRotation = gPokedexView->pokemonListCount * 16 + 0x30; + ClearMonSprites(); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; case 3: //BACK TO POKEDEX @@ -1809,27 +1824,27 @@ static void Task_PokedexResultsScreenMenu(u8 taskId) } } -static void sub_808D118(u8 taskId) +static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId) { if (gSprites[gPokedexView->selectedMonSpriteId].pos1.x == 48 && gSprites[gPokedexView->selectedMonSpriteId].pos1.y == 56) { - gPokedexView->unk64B = gPokedexView->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); - gTasks[taskId].func = sub_808D198; + gPokedexView->currentPageBackup = gPokedexView->currentPage; + gTasks[taskId].data[0] = LoadInfoScreen(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gPokedexView->selectedMonSpriteId); + gTasks[taskId].func = Task_WaitForExitSearchResultsInfoScreen; } } -static void sub_808D198(u8 taskId) +static void Task_WaitForExitSearchResultsInfoScreen(u8 taskId) { if (gTasks[gTasks[taskId].data[0]].isActive) { - if (gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) - sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); + if (gPokedexView->currentPage == 1 && !IsInfoScreenScrolling(gTasks[taskId].data[0]) && TryDoInfoScreenScroll()) + sub_808F284(&gPokedexView->pokedexList[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); } else { - gTasks[taskId].func = sub_808CCC4; + gTasks[taskId].func = Task_OpenSearchResults; } } @@ -1837,12 +1852,12 @@ static void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId) { if (!gPaletteFade.active) { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; + gPokedexView->pokeBallRotation = gPokedexView->pokeBallRotationBackup; + gPokedexView->selectedPokemon = gPokedexView->selectedPokemonBackup; + gPokedexView->dexMode = gPokedexView->dexModeBackup; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; + gPokedexView->dexOrder = gPokedexView->dexOrderBackup; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -1851,17 +1866,17 @@ static void Task_PokedexResultsScreenExitPokedex(u8 taskId) { if (!gPaletteFade.active) { - gPokedexView->unk62C = gPokedexView->unk62A; - gPokedexView->selectedPokemon = gPokedexView->unk610; - gPokedexView->dexMode = gPokedexView->unk614; + gPokedexView->pokeBallRotation = gPokedexView->pokeBallRotationBackup; + gPokedexView->selectedPokemon = gPokedexView->selectedPokemonBackup; + gPokedexView->dexMode = gPokedexView->dexModeBackup; if (!IsNationalPokedexEnabled()) gPokedexView->dexMode = DEX_MODE_HOENN; - gPokedexView->dexOrder = gPokedexView->unk618; + gPokedexView->dexOrder = gPokedexView->dexOrderBackup; gTasks[taskId].func = Task_ClosePokedex; } } -static bool8 sub_808D344(u8 a) +static bool8 LoadPokedexListPage(u8 a) { switch (gMain.state) { @@ -1870,32 +1885,32 @@ static bool8 sub_808D344(u8 a) if (gPaletteFade.active) return 0; SetVBlankCallback(NULL); - gPokedexView->unk64A = a; - sub_8091060(0); - REG_BG2VOFS = gPokedexView->unk62D; + gPokedexView->currentPage = a; + ResetOtherVideoRegisters(0); + REG_BG2VOFS = gPokedexView->initialVOffset; LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM)); LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800)); LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800)); DmaClear16(3, VRAM + 0x6000, 0x500); if (a == 0) - LZ77UnCompVram(gUnknown_08E96888, (void *)(VRAM + 0x6500)); + LZ77UnCompVram(gPokedexStartMenuMain_Tilemap, (void *)(VRAM + 0x6500)); else - LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500)); + LZ77UnCompVram(gPokedexStartMenuSearchResults_Tilemap, (void *)(VRAM + 0x6500)); ResetPaletteFade(); if (a == 0) - gPokedexView->unk64C_1 = 0; + gPokedexView->isSearchResults = 0; else - gPokedexView->unk64C_1 = 1; - sub_808D640(); + gPokedexView->isSearchResults = 1; + LoadPokedexBgPalette(); gMain.state = 1; break; case 1: ResetSpriteData(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; - LoadCompressedObjectPic(&gUnknown_083A05CC[0]); - LoadSpritePalettes(gUnknown_083A05DC); - sub_808E978(a); + LoadCompressedObjectPic(&sInterfaceSpriteSheet[0]); + LoadSpritePalettes(sInterfaceSpritePalette); + CreateInterfaceSprites(a); gMain.state++; break; case 2: @@ -1907,14 +1922,14 @@ static bool8 sub_808D344(u8 a) case 3: if (a == 0) SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); - sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + CreateMonSpritesAtPos(gPokedexView->selectedPokemon, 0xE); gPokedexView->menuIsOpen = 0; gPokedexView->menuY = 0; gMain.state++; break; case 4: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(sub_808C0B8); + SetVBlankCallback(VBlankCB_Pokedex); gMain.state++; break; case 5: @@ -1944,9 +1959,9 @@ static bool8 sub_808D344(u8 a) return FALSE; } -static void sub_808D640(void) +static void LoadPokedexBgPalette(void) { - if (gPokedexView->unk64C_1) + if (gPokedexView->isSearchResults) LoadPalette(sPokedexSearchPalette + 1, 1, sizeof(sPokedexSearchPalette) - sizeof(u16)); else if (!IsNationalPokedexEnabled()) LoadPalette(gPokedexMenu_Pal + 1, 1, 0xBE); @@ -1990,10 +2005,10 @@ static void SortPokedex(u8 dexMode, u8 sortMode) for (i = 0; i < vars[0]; i++) { vars[2] = HoennToNationalOrder(i + 1); - gPokedexView->unk0[i].dexNum = vars[2]; - gPokedexView->unk0[i].seen = GetSetPokedexFlag(vars[2], 0); - gPokedexView->unk0[i].owned = GetSetPokedexFlag(vars[2], 1); - if (gPokedexView->unk0[i].seen) + gPokedexView->pokedexList[i].dexNum = vars[2]; + gPokedexView->pokedexList[i].seen = GetSetPokedexFlag(vars[2], 0); + gPokedexView->pokedexList[i].owned = GetSetPokedexFlag(vars[2], 1); + if (gPokedexView->pokedexList[i].seen) gPokedexView->pokemonListCount = i + 1; } } @@ -2006,10 +2021,10 @@ static void SortPokedex(u8 dexMode, u8 sortMode) r10 = 1; if (r10) { - gPokedexView->unk0[r5].dexNum = vars[2]; - gPokedexView->unk0[r5].seen = GetSetPokedexFlag(vars[2], 0); - gPokedexView->unk0[r5].owned = GetSetPokedexFlag(vars[2], 1); - if (gPokedexView->unk0[r5].seen) + gPokedexView->pokedexList[r5].dexNum = vars[2]; + gPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(vars[2], 0); + gPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(vars[2], 1); + if (gPokedexView->pokedexList[r5].seen) gPokedexView->pokemonListCount = r5 + 1; r5++; } @@ -2023,9 +2038,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1); + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1); gPokedexView->pokemonListCount++; } } @@ -2037,9 +2052,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2051,9 +2066,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2065,9 +2080,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2079,9 +2094,9 @@ static void SortPokedex(u8 dexMode, u8 sortMode) if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1)) { - gPokedexView->unk0[gPokedexView->pokemonListCount].dexNum = vars[2]; - gPokedexView->unk0[gPokedexView->pokemonListCount].seen = 1; - gPokedexView->unk0[gPokedexView->pokemonListCount].owned = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].dexNum = vars[2]; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].seen = 1; + gPokedexView->pokedexList[gPokedexView->pokemonListCount].owned = 1; gPokedexView->pokemonListCount++; } } @@ -2090,103 +2105,104 @@ static void SortPokedex(u8 dexMode, u8 sortMode) for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) { - gPokedexView->unk0[i].dexNum |= 0xFFFF; - gPokedexView->unk0[i].seen = 0; - gPokedexView->unk0[i].owned = 0; + gPokedexView->pokedexList[i].dexNum |= 0xFFFF; + gPokedexView->pokedexList[i].seen = 0; + gPokedexView->pokedexList[i].owned = 0; } } -static void sub_808DBE8(u8 a, u16 b, u16 c) +static void CreateMonListEntry(u8 position, u16 b, u16 screenBase) { - s16 _b; + s16 entryNum; u16 i; u16 r2; - switch (a) + switch (position) { case 0: default: - _b = b - 5; + entryNum = b - 5; for (i = 0; i <= 10; i++) { - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - sub_808E090(0x11, i * 2, c); + ClearMonListEntry(0x11, i * 2, screenBase); } else { - sub_808E090(0x11, i * 2, c); - if (gPokedexView->unk0[_b].seen) + ClearMonListEntry(0x11, i * 2, screenBase); + if (gPokedexView->pokedexList[entryNum].seen) { - sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2); + CreateMonDexNum(entryNum, 0x12, i * 2, screenBase); + CreateCaughtBall(gPokedexView->pokedexList[entryNum].owned, 0x11, i * 2, screenBase); + CreateMonName(gPokedexView->pokedexList[entryNum].dexNum, 0x17, i * 2); } else { - sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(0, 0x11, i * 2, c); - sub_808DFE4(0, 0x17, i * 2); + CreateMonDexNum(entryNum, 0x12, i * 2, screenBase); + CreateCaughtBall(0, 0x11, i * 2, screenBase); + CreateMonName(0, 0x17, i * 2); } } - _b++; + entryNum++; } break; case 1: - _b = b - 5; - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) + entryNum = b - 5; + if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) { - sub_808E090(0x11, gPokedexView->unk630 * 2, c); + ClearMonListEntry(0x11, gPokedexView->listVOffset * 2, screenBase); } else { - sub_808E090(0x11, gPokedexView->unk630 * 2, c); - if (gPokedexView->unk0[_b].seen) + ClearMonListEntry(0x11, gPokedexView->listVOffset * 2, screenBase); + if (gPokedexView->pokedexList[entryNum].seen) { - sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2); + CreateMonDexNum(entryNum, 0x12, gPokedexView->listVOffset * 2, screenBase); + CreateCaughtBall(gPokedexView->pokedexList[entryNum].owned, 0x11, gPokedexView->listVOffset * 2, + screenBase); + CreateMonName(gPokedexView->pokedexList[entryNum].dexNum, 0x17, gPokedexView->listVOffset * 2); } else { - sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); - sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c); - sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2); + CreateMonDexNum(entryNum, 0x12, gPokedexView->listVOffset * 2, screenBase); + CreateCaughtBall(0, 0x11, gPokedexView->listVOffset * 2, screenBase); + CreateMonName(0, 0x17, gPokedexView->listVOffset * 2); } } break; case 2: - _b = b + 5; - r2 = gPokedexView->unk630 + 10; + entryNum = b + 5; + r2 = gPokedexView->listVOffset + 10; if (r2 > 15) r2 -= 16; - if (_b < 0 || _b >= NATIONAL_DEX_COUNT || gPokedexView->unk0[_b].dexNum == 0xFFFF) - sub_808E090(0x11, r2 * 2, c); + if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[entryNum].dexNum == 0xFFFF) + ClearMonListEntry(0x11, r2 * 2, screenBase); else { - sub_808E090(0x11, r2 * 2, c); - if (gPokedexView->unk0[_b].seen) + ClearMonListEntry(0x11, r2 * 2, screenBase); + if (gPokedexView->pokedexList[entryNum].seen) { - sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c); - sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2); + CreateMonDexNum(entryNum, 0x12, r2 * 2, screenBase); + CreateCaughtBall(gPokedexView->pokedexList[entryNum].owned, 0x11, r2 * 2, screenBase); + CreateMonName(gPokedexView->pokedexList[entryNum].dexNum, 0x17, r2 * 2); } else { - sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(0, 0x11, r2 * 2, c); - sub_808DFE4(0, 0x17, r2 * 2); + CreateMonDexNum(entryNum, 0x12, r2 * 2, screenBase); + CreateCaughtBall(0, 0x11, r2 * 2, screenBase); + CreateMonName(0, 0x17, r2 * 2); } } break; } } -static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) +static void CreateMonDexNum(u16 entryNum, u8 x, u8 y, u16 screenBase) { u8 text[4]; u16 unk[2]; - u16 r7 = gPokedexView->unk0[a].dexNum; + u16 r7 = gPokedexView->pokedexList[entryNum].dexNum; if (gPokedexView->dexMode == DEX_MODE_HOENN) r7 = NationalToHoennOrder(r7); @@ -2196,16 +2212,16 @@ static void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) text[1] = CHAR_0 + (r7 % 100) / 10; text[2] = CHAR_0 + (r7 % 100) % 10; text[3] = EOS; - *(u16 *)(BG_VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; - *(u16 *)(BG_VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; - Menu_PrintText(text, b - 15, c); + *(u16 *)(BG_VRAM + screenBase * 0x800 + y * 0x40 + x * 2) = unk[0]; + *(u16 *)(BG_VRAM + screenBase * 0x800 + (y + 1) * 0x40 + x * 2) = unk[1]; + Menu_PrintText(text, x - 15, y); } -static void sub_808DF88(u16 a, u8 b, u8 c, u16 d) +static void CreateCaughtBall(u16 owned, u8 x, u8 y, u16 screenBase) { u16 unk[2]; - if (a) + if (owned) { unk[0] = 0x3FE; unk[1] = 0x3FF; @@ -2215,11 +2231,11 @@ static void sub_808DF88(u16 a, u8 b, u8 c, u16 d) unk[0] = 0; unk[1] = 0; } - *(u16 *)(BG_VRAM + d * 0x800 + c * 0x40 + b * 2) = unk[0]; - *(u16 *)(BG_VRAM + d * 0x800 + (c + 1) * 0x40 + b * 2) = unk[1]; + *(u16 *)(BG_VRAM + screenBase * 0x800 + y * 0x40 + x * 2) = unk[0]; + *(u16 *)(BG_VRAM + screenBase * 0x800 + (y + 1) * 0x40 + x * 2) = unk[1]; } -static u8 sub_808DFE4(u16 num, u8 b, u8 c) +static u8 CreateMonName(u16 num, u8 b, u8 c) { u8 text[POKEMON_NAME_LENGTH + (MODERN ? 1 : 0)]; u8 i; @@ -2244,136 +2260,136 @@ static u8 sub_808DFE4(u16 num, u8 b, u8 c) return i; } -static void sub_808E090(u8 a, u8 b, u16 c) +static void ClearMonListEntry(u8 x, u8 y, u16 screenBase) { u8 i; for (i = 0; i < 12; i++) { - *(u16 *)(BG_VRAM + c * 0x800 + b * 64 + (a + i) * 2) = 0; - *(u16 *)(BG_VRAM + c * 0x800 + (b + 1) * 64 + (a + i) * 2) = 0; + *(u16 *)(BG_VRAM + screenBase * 0x800 + y * 64 + (x + i) * 2) = 0; + *(u16 *)(BG_VRAM + screenBase * 0x800 + (y + 1) * 64 + (x + i) * 2) = 0; } } -static void sub_808E0CC(u16 a, u16 b) +static void CreateMonSpritesAtPos(u16 selectedMon, u16 b) { u8 i; u16 unk; u8 spriteId; for (i = 0; i < 4; i++) - gPokedexView->unk61E[i] = 0xFFFF; + gPokedexView->monSpriteIds[i] = 0xFFFF; gPokedexView->selectedMonSpriteId = 0xFFFF; - sub_808DBE8(0, a, b); - REG_BG2VOFS = gPokedexView->unk62D; + CreateMonListEntry(0, selectedMon, b); + REG_BG2VOFS = gPokedexView->initialVOffset; - unk = sub_808E888(a - 1); + unk = GetPokemonSpriteToDisplay(selectedMon - 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -32; } - unk = sub_808E888(a); + unk = GetPokemonSpriteToDisplay(selectedMon); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 0; } - unk = sub_808E888(a + 1); + unk = GetPokemonSpriteToDisplay(selectedMon + 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 32; } - gPokedexView->unk630 = 0; - gPokedexView->unk632 = 0; + gPokedexView->listVOffset = 0; + gPokedexView->listMovingVOffset = 0; } -static bool8 sub_808E208(u8 a, u8 b, u8 c) +static bool8 UpdateDexListScroll(u8 direction, u8 monMoveIncrement, u8 scrollTimerMax) { u16 i; u8 foo; - if (gPokedexView->unk62E) + if (gPokedexView->scrollTimer) { - gPokedexView->unk62E--; - switch (a) + gPokedexView->scrollTimer--; + switch (direction) { case 1: for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data[5] += b; + if (gPokedexView->monSpriteIds[i] != 0xFFFF) + gSprites[gPokedexView->monSpriteIds[i]].data[5] += monMoveIncrement; } - foo = 16 * (c - gPokedexView->unk62E) / c; - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo; - gPokedexView->unk62C -= gPokedexView->unk628; + foo = 16 * (scrollTimerMax - gPokedexView->scrollTimer) / scrollTimerMax; + REG_BG2VOFS = gPokedexView->initialVOffset + gPokedexView->listMovingVOffset * 16 - foo; + gPokedexView->pokeBallRotation -= gPokedexView->pokeBallRotationStep; break; case 2: for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] != 0xFFFF) - gSprites[gPokedexView->unk61E[i]].data[5] -= b; + if (gPokedexView->monSpriteIds[i] != 0xFFFF) + gSprites[gPokedexView->monSpriteIds[i]].data[5] -= monMoveIncrement; } - foo = 16 * (c - gPokedexView->unk62E) / c; - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo; - gPokedexView->unk62C += gPokedexView->unk628; + foo = 16 * (scrollTimerMax - gPokedexView->scrollTimer) / scrollTimerMax; + REG_BG2VOFS = gPokedexView->initialVOffset + gPokedexView->listMovingVOffset * 16 + foo; + gPokedexView->pokeBallRotation += gPokedexView->pokeBallRotationStep; break; } return FALSE; } else { - REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16; + REG_BG2VOFS = gPokedexView->initialVOffset + gPokedexView->listVOffset * 16; return TRUE; } } -static void sub_808E398(u8 a, u16 b) +static void CreateScrollingPokemonSprite(u8 direction, u16 selectedMon) { u16 unk; u8 spriteId; - gPokedexView->unk632 = gPokedexView->unk630; - switch (a) + gPokedexView->listMovingVOffset = gPokedexView->listVOffset; + switch (direction) { case 1: - unk = sub_808E888(b - 1); + unk = GetPokemonSpriteToDisplay(selectedMon - 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = -64; } - if (gPokedexView->unk630 > 0) - gPokedexView->unk630--; + if (gPokedexView->listVOffset > 0) + gPokedexView->listVOffset--; else - gPokedexView->unk630 = 15; + gPokedexView->listVOffset = 15; break; case 2: - unk = sub_808E888(b + 1); + unk = GetPokemonSpriteToDisplay(selectedMon + 1); if (unk != 0xFFFF) { - spriteId = sub_808E8C8(unk, 0x60, 0x50); - gSprites[spriteId].callback = sub_808EE28; + spriteId = CreatePokedexMonSprite(unk, 0x60, 0x50); + gSprites[spriteId].callback = SpriteCB_PokedexListMonSprite; gSprites[spriteId].data[5] = 0x40; } - if (gPokedexView->unk630 <= 0xE) - gPokedexView->unk630++; + if (gPokedexView->listVOffset <= 0xE) + gPokedexView->listVOffset++; else - gPokedexView->unk630 = 0; + gPokedexView->listVOffset = 0; break; } } // Ugly, ugly, ugly. I couldn't get it to match otherwise. -static u16 sub_808E48C(u16 a, u16 b) +static u16 TryDoPokedexScroll(u16 a, u16 b) { u8 r3; u8 r5; @@ -2392,10 +2408,10 @@ static u16 sub_808E48C(u16 a, u16 b) r6 = a; //_0808E4E0 for (i = 0; i < 7; i++) - a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); - gPokedexView->unk62C += 16 * (a - r6); - sub_808E82C(); - sub_808E0CC(a, 0xE); + a = GetNextPosition(1, a, 0, gPokedexView->pokemonListCount - 1); + gPokedexView->pokeBallRotation += 16 * (a - r6); + ClearMonSprites(); + CreateMonSpritesAtPos(a, 0xE); PlaySE(0x6D); } //_0808E53C @@ -2403,16 +2419,16 @@ static u16 sub_808E48C(u16 a, u16 b) { r6 = a; for (i = 0; i < 7; i++) - a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); - gPokedexView->unk62C += (a - r6) * 16; - sub_808E82C(); - sub_808E0CC(a, 0xE); + a = GetNextPosition(0, a, 0, gPokedexView->pokemonListCount - 1); + gPokedexView->pokeBallRotation += (a - r6) * 16; + ClearMonSprites(); + CreateMonSpritesAtPos(a, 0xE); PlaySE(0x6D); } _0808E5A2: if (r10 == 0) { - gPokedexView->unk638 = 0; + gPokedexView->scrollSpeed = 0; return a; } } @@ -2420,10 +2436,10 @@ static u16 sub_808E48C(u16 a, u16 b) { // to _0808E5C4 r10 = 2; - a = sub_8091818(0, a, 0, gPokedexView->pokemonListCount - 1); - sub_808E398(2, a); + a = GetNextPosition(0, a, 0, gPokedexView->pokemonListCount - 1); + CreateScrollingPokemonSprite(2, a); //goto _0808E60E - sub_808DBE8(2, a, b); + CreateMonListEntry(2, a, b); PlaySE(0x6C); goto _0808E5A2; } @@ -2432,41 +2448,43 @@ static u16 sub_808E48C(u16 a, u16 b) { //to _0808E5E4 r10 = 1; - a = sub_8091818(1, a, 0, gPokedexView->pokemonListCount - 1); - sub_808E398(1, a); + a = GetNextPosition(1, a, 0, gPokedexView->pokemonListCount - 1); + CreateScrollingPokemonSprite(1, a); //_0808E60E - sub_808DBE8(1, a, b); + CreateMonListEntry(1, a, b); PlaySE(0x6C); goto _0808E5A2; } //_0808E628 - r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4]; - r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4]; - gPokedexView->unk62E = r3; - gPokedexView->unk636 = r3; - gPokedexView->unk634 = r5; - gPokedexView->unk62F = r10; - gPokedexView->unk628 = r5 / 2; - sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636); - if (gPokedexView->unk638 <= 0xB) - gPokedexView->unk638++; + r5 = gUnknown_083A05EC[gPokedexView->scrollSpeed / 4]; + r3 = gUnknown_083A05F1[gPokedexView->scrollSpeed / 4]; + gPokedexView->scrollTimer = r3; + gPokedexView->maxScrollTimer = r3; + gPokedexView->scrollMonIncrement = r5; + gPokedexView->scrollDirection = r10; + gPokedexView->pokeBallRotationStep = r5 / 2; + UpdateDexListScroll(gPokedexView->scrollDirection, + gPokedexView->scrollMonIncrement, + gPokedexView->maxScrollTimer); + if (gPokedexView->scrollSpeed <= 0xB) + gPokedexView->scrollSpeed++; return a; } -static void sub_808E6BC(void) +static void UpdateSelectedMonSpriteId(void) { u16 i; for (i = 0; i < 4; i++) { - u16 spriteId = gPokedexView->unk61E[i]; + u16 spriteId = gPokedexView->monSpriteIds[i]; if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF) gPokedexView->selectedMonSpriteId = spriteId; } } -static u8 sub_808E71C(void) +static u8 TryDoInfoScreenScroll(void) { u16 r2; u16 r4 = gPokedexView->selectedPokemon; @@ -2476,9 +2494,9 @@ static u8 sub_808E71C(void) r2 = r4; while (r2 != 0) { - r2 = sub_8091818(1, r2, 0, gPokedexView->pokemonListCount - 1); + r2 = GetNextPosition(1, r2, 0, gPokedexView->pokemonListCount - 1); - if (gPokedexView->unk0[r2].seen) + if (gPokedexView->pokedexList[r2].seen) { r4 = r2; break; @@ -2490,7 +2508,7 @@ static u8 sub_808E71C(void) else { gPokedexView->selectedPokemon = r4; - gPokedexView->unk62C -= 16; + gPokedexView->pokeBallRotation -= 16; return 1; } } @@ -2499,9 +2517,9 @@ static u8 sub_808E71C(void) r2 = r4; while (r2 < gPokedexView->pokemonListCount - 1) { - r2 = sub_8091818(0, r2, 0, gPokedexView->pokemonListCount - 1); + r2 = GetNextPosition(0, r2, 0, gPokedexView->pokemonListCount - 1); - if (gPokedexView->unk0[r2].seen) + if (gPokedexView->pokedexList[r2].seen) { r4 = r2; break; @@ -2513,69 +2531,69 @@ static u8 sub_808E71C(void) else { gPokedexView->selectedPokemon = r4; - gPokedexView->unk62C += 16; + gPokedexView->pokeBallRotation += 16; return 1; } } return 0; } -static u8 sub_808E82C(void) +static u8 ClearMonSprites(void) { u16 i; for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] != 0xFFFF) + if (gPokedexView->monSpriteIds[i] != 0xFFFF) { - DestroySprite(&gSprites[gPokedexView->unk61E[i]]); - gPokedexView->unk61E[i] |= 0xFFFF; + DestroySprite(&gSprites[gPokedexView->monSpriteIds[i]]); + gPokedexView->monSpriteIds[i] |= 0xFFFF; } } return 0; } -static u16 sub_808E888(u16 a1) +static u16 GetPokemonSpriteToDisplay(u16 species) { - if (a1 >= NATIONAL_DEX_COUNT || gPokedexView->unk0[a1].dexNum == 0xFFFF) + if (species >= NATIONAL_DEX_COUNT || gPokedexView->pokedexList[species].dexNum == 0xFFFF) return 0xFFFF; - else if (gPokedexView->unk0[a1].seen) - return gPokedexView->unk0[a1].dexNum; + else if (gPokedexView->pokedexList[species].seen) + return gPokedexView->pokedexList[species].dexNum; else return 0; } -static u32 sub_808E8C8(u16 a, s16 b, s16 c) +static u32 CreatePokedexMonSprite(u16 num, s16 x, s16 y) { u8 i; for (i = 0; i < 4; i++) { - if (gPokedexView->unk61E[i] == 0xFFFF) + if (gPokedexView->monSpriteIds[i] == 0xFFFF) { - u8 spriteId = sub_80918EC(a, b, c, i); + u8 spriteId = CreateMonSpriteFromNationalDexNumber(num, x, y, i); - gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.priority = 3; gSprites[spriteId].data[0] = 0; gSprites[spriteId].data[1] = i; - gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(a); - gPokedexView->unk61E[i] = spriteId; + gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(num); + gPokedexView->monSpriteIds[i] = spriteId; return spriteId; } } return 0xFFFF; } -static void sub_808E978(u8 a) +static void CreateInterfaceSprites(u8 a) { u8 spriteId; u16 r5; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 4, 0); gSprites[spriteId].data[1] = 0; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 156, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 156, 0); gSprites[spriteId].data[1] = 1; gSprites[spriteId].vFlip = TRUE; @@ -2615,7 +2633,7 @@ static void sub_808E978(u8 a) _a = 0; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 48, 1); - r5 = gPokedexView->unk61A / 100; + r5 = gPokedexView->seenCount / 100; StartSpriteAnim(&gSprites[spriteId], r5); if (r5 != 0) _a = 1; @@ -2623,19 +2641,19 @@ static void sub_808E978(u8 a) gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 48, 1); - r5 = (gPokedexView->unk61A % 100) / 10; + r5 = (gPokedexView->seenCount % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 48, 1); - r5 = (gPokedexView->unk61A % 100) % 10; + r5 = (gPokedexView->seenCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); _a = 0; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 28, 80, 1); - r5 = gPokedexView->unk61C / 100; + r5 = gPokedexView->ownCount / 100; StartSpriteAnim(&gSprites[spriteId], r5); if (r5 != 0) _a = 1; @@ -2643,14 +2661,14 @@ static void sub_808E978(u8 a) gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 34, 80, 1); - r5 = (gPokedexView->unk61C % 100) / 10; + r5 = (gPokedexView->ownCount % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 40, 80, 1); - r5 = (gPokedexView->unk61C % 100) % 10; + r5 = (gPokedexView->ownCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 140, 96, 1); @@ -2663,18 +2681,18 @@ static void sub_808E978(u8 a) } } -static void nullsub_58(struct Sprite *sprite) +static void SpriteCB_EndMoveMonForInfoScreen(struct Sprite *sprite) { } -static void sub_808ED94(struct Sprite *sprite) +static void SpriteCB_SeenOwnInfo(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0) + if (gPokedexView->currentPage != 0) DestroySprite(sprite); } //Move Pokemon into position for description page -static void sub_808EDB8(struct Sprite *sprite) +static void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) { sprite->oam.priority = 0; sprite->oam.affineMode = 0; @@ -2694,18 +2712,18 @@ static void sub_808EDB8(struct Sprite *sprite) } else { - sprite->callback = nullsub_58; + sprite->callback = SpriteCB_EndMoveMonForInfoScreen; } } -static void sub_808EE28(struct Sprite *sprite) +static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite) { u8 data1 = sprite->data[1]; - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); - gPokedexView->unk61E[data1] = 0xFFFF; + gPokedexView->monSpriteIds[data1] = 0xFFFF; } else { @@ -2731,22 +2749,22 @@ static void sub_808EE28(struct Sprite *sprite) if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0) { DestroySprite(sprite); - gPokedexView->unk61E[data1] = 0xFFFF; + gPokedexView->monSpriteIds[data1] = 0xFFFF; } } } -static void sub_808EF38(struct Sprite *sprite) +static void SpriteCB_Scrollbar(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) DestroySprite(sprite); else sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->pokemonListCount - 1); } -static void sub_808EF8C(struct Sprite *sprite) +static void SpriteCB_ScrollArrow(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); } @@ -2779,15 +2797,15 @@ static void sub_808EF8C(struct Sprite *sprite) } } -static void sub_808F08C(struct Sprite *sprite) +static void SpriteCB_DexListInterfaceText(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) DestroySprite(sprite); } -static void sub_808F0B4(struct Sprite *sprite) +static void SpriteCB_RotatingPokeBall(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); } @@ -2797,12 +2815,12 @@ static void sub_808F0B4(struct Sprite *sprite) s16 r3; s16 r0; - val = gPokedexView->unk62C + sprite->data[1]; + val = gPokedexView->pokeBallRotation + sprite->data[1]; r3 = gSineTable[val]; r0 = gSineTable[val + 0x40]; SetOamMatrix(sprite->data[0], r0, r3, -r3, r0); - val = gPokedexView->unk62C + (sprite->data[1] + 0x40); + val = gPokedexView->pokeBallRotation + (sprite->data[1] + 0x40); r3 = gSineTable[val]; r0 = gSineTable[val + 0x40]; sprite->pos2.x = r0 * 40 / 256; @@ -2810,15 +2828,15 @@ static void sub_808F0B4(struct Sprite *sprite) } } -static void sub_808F168(struct Sprite *sprite) +static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite) { - if (gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) + if (gPokedexView->currentPage != 0 && gPokedexView->currentPage != 3) { DestroySprite(sprite); } else { - u16 r1 = gPokedexView->unk64A == 0 ? 80 : 96; + u16 r1 = gPokedexView->currentPage == 0 ? 80 : 96; if (gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1) { @@ -2834,11 +2852,11 @@ static void sub_808F168(struct Sprite *sprite) } } -static u8 sub_808F210(struct PokedexListItem *item, u8 b) +static u8 LoadInfoScreen(struct PokedexListItem *item, u8 b) { u8 taskId; - gUnknown_0202FFBC = item; + sPokedexListItem = item; taskId = CreateTask(Task_InitPageScreenMultistep, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 1; @@ -2848,7 +2866,7 @@ static u8 sub_808F210(struct PokedexListItem *item, u8 b) return taskId; } -static bool8 sub_808F250(u8 taskId) +static bool8 IsInfoScreenScrolling(u8 taskId) { if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput) return FALSE; @@ -2858,7 +2876,7 @@ static bool8 sub_808F250(u8 taskId) static u8 sub_808F284(struct PokedexListItem *item, u8 b) { - gUnknown_0202FFBC = item; + sPokedexListItem = item; gTasks[b].data[0] = 1; gTasks[b].data[1] = 0; gTasks[b].data[2] = 0; @@ -2882,29 +2900,29 @@ static void Task_InitPageScreenMultistep(u8 taskId) { u16 r2; - gPokedexView->unk64A = 1; + gPokedexView->currentPage = 1; gPokedexView->descriptionPageNum = 0; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); r2 = 0; if (gTasks[taskId].data[1] != 0) r2 += 0x1000; if (gTasks[taskId].data[2] != 0) r2 |= 0x200; - sub_8091060(r2); + ResetOtherVideoRegisters(r2); gMain.state = 1; } break; case 1: LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); - sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC); + PrintFootprint(sPokedexListItem->dexNum, 2, 0x3FC); gMain.state++; break; case 2: - sub_80904FC(0xD); - sub_8090584(gPokedexView->selectedScreen, 0xD); - sub_808D640(); + LoadScreenSelectBarMain(0xD); + HighlightScreenSelectBarItem(gPokedexView->selectedScreen, 0xD); + LoadPokedexBgPalette(); gMain.state++; break; case 3: @@ -2914,20 +2932,20 @@ static void Task_InitPageScreenMultistep(u8 taskId) break; case 4: if (gPokedexView->dexMode == DEX_MODE_HOENN) - sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3); + PrintEntryScreenDexNum(NationalToHoennOrder(sPokedexListItem->dexNum), 0xD, 3); else - sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3); - sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3); + PrintEntryScreenDexNum(sPokedexListItem->dexNum, 0xD, 3); + PrintEntryScreenSpeciesName(sPokedexListItem->dexNum, 0x10, 3); Menu_PrintText(gDexText_UnknownPoke, CATEGORY_LEFT, 5); Menu_PrintText(gDexText_UnknownHeight, 16, 7); Menu_PrintText(gDexText_UnknownWeight, 16, 9); - if (gUnknown_0202FFBC->owned) + if (sPokedexListItem->owned) { - sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, CATEGORY_LEFT, 5); - sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7); - sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9); - Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); - sub_80917CC(14, 0x3FC); + UnusedPrintMonName(gPokedexEntries[sPokedexListItem->dexNum].categoryName, CATEGORY_LEFT, 5); + sub_8091458(gPokedexEntries[sPokedexListItem->dexNum].height, 16, 7); + sub_8091564(gPokedexEntries[sPokedexListItem->dexNum].weight, 16, 9); + Menu_PrintText(gPokedexEntries[sPokedexListItem->dexNum].descriptionPage1, 2, 13); + sub_80C0DC0(14, 0x3FC); } else { @@ -2939,7 +2957,7 @@ static void Task_InitPageScreenMultistep(u8 taskId) case 5: if (gTasks[taskId].data[1] == 0) { - gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); + gTasks[taskId].data[4] = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 0x30, 0x38, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; } gMain.state++; @@ -2953,7 +2971,7 @@ static void Task_InitPageScreenMultistep(u8 taskId) if (gTasks[taskId].data[1] != 0) excludedPalettes |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16)); BeginNormalPaletteFade(~excludedPalettes, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gMain.state++; } break; @@ -2973,7 +2991,7 @@ static void Task_InitPageScreenMultistep(u8 taskId) if (gTasks[taskId].data[3] == 0) { StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA); + PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); } else { @@ -3001,7 +3019,7 @@ static void Task_PageScreenProcessInput(u8 taskId) if (gTasks[taskId].data[0] != 0) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_808F888; + gTasks[taskId].func = Task_LoadInfoScreenWaitForFade; PlaySE(SE_DEX_SCROLL); return; } @@ -3030,7 +3048,7 @@ static void Task_PageScreenProcessInput(u8 taskId) PlaySE(SE_PIN); break; case SIZE_SCREEN: - if (!gUnknown_0202FFBC->owned) + if (!sPokedexListItem->owned) { PlaySE(SE_FAILURE); } @@ -3049,7 +3067,7 @@ static void Task_PageScreenProcessInput(u8 taskId) && gPokedexView->selectedScreen > 0) { gPokedexView->selectedScreen--; - sub_8090584(gPokedexView->selectedScreen, 0xD); + HighlightScreenSelectBarItem(gPokedexView->selectedScreen, 0xD); PlaySE(SE_DEX_PAGE); return; } @@ -3058,13 +3076,13 @@ static void Task_PageScreenProcessInput(u8 taskId) && gPokedexView->selectedScreen < 3) { gPokedexView->selectedScreen++; - sub_8090584(gPokedexView->selectedScreen, 0xD); + HighlightScreenSelectBarItem(gPokedexView->selectedScreen, 0xD); PlaySE(SE_DEX_PAGE); return; } } -static void sub_808F888(u8 taskId) +static void Task_LoadInfoScreenWaitForFade(u8 taskId) { if (!gPaletteFade.active) gTasks[taskId].func = Task_InitPageScreenMultistep; @@ -3084,25 +3102,25 @@ static void Task_InitAreaScreenMultistep(u8 taskId) default: if (!gPaletteFade.active) { - gPokedexView->unk64A = 5; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexView->currentPage = 5; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); gPokedexView->selectedScreen = AREA_SCREEN; gMain.state = 1; } break; case 1: - sub_8090540(0xD); + LoadScreenSelectBarSubmenu(0xD); sub_8090644(1, 0xD); - sub_808D640(); + LoadPokedexBgPalette(); REG_BG1CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(13) | BGCNT_16COLOR | BGCNT_TXT256x256; gMain.state++; break; case 2: - ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F); - SetVBlankCallback(gUnknown_03005CEC); - gPokedexView->unk64F = 0; + ShowPokedexAreaScreen(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), &gPokedexView->screenSwitchState); + SetVBlankCallback(gPokedexVBlankCB); + gPokedexView->screenSwitchState = 0; gMain.state = 0; gTasks[taskId].func = Task_AreaScreenProcessInput; break; @@ -3111,7 +3129,7 @@ static void Task_InitAreaScreenMultistep(u8 taskId) static void Task_AreaScreenProcessInput(u8 taskId) { - if (gPokedexView->unk64F != 0) + if (gPokedexView->screenSwitchState != 0) gTasks[taskId].func = sub_808FA00; } @@ -3119,7 +3137,7 @@ static void sub_808FA00(u8 taskId) { if (!gPaletteFade.active) { - switch (gPokedexView->unk64F) + switch (gPokedexView->screenSwitchState) { case 1: default: @@ -3141,10 +3159,10 @@ static void Task_InitCryScreenMultistep(u8 taskId) if (!gPaletteFade.active) { m4aMPlayStop(&gMPlayInfo_BGM); - gPokedexView->unk64A = 6; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexView->currentPage = 6; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); gPokedexView->selectedScreen = CRY_SCREEN; gMain.state = 1; } @@ -3155,9 +3173,9 @@ static void Task_InitCryScreenMultistep(u8 taskId) gMain.state++; break; case 2: - sub_8090540(0xD); + LoadScreenSelectBarSubmenu(0xD); sub_8090644(2, 0xD); - sub_808D640(); + LoadPokedexBgPalette(); DmaClear16(3, (void *)(VRAM + 0xF800), 0x500); gMain.state++; break; @@ -3169,37 +3187,38 @@ static void Task_InitCryScreenMultistep(u8 taskId) break; case 4: Menu_PrintText(gDexText_CryOf, 10, 4); - sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2); + PrintCryScreenSpeciesName(sPokedexListItem->dexNum, 10, 6, 2); gMain.state++; break; case 5: - gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); + gTasks[taskId].data[4] = + CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 0x30, 0x38, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; gMain.state++; break; case 6: { - struct CryRelatedStruct sp8; - - sp8.unk0 = 0x4020; - sp8.unk2 = 0x1F; - sp8.paletteNo = 8; - sp8.yPos = 0x1E; - sp8.xPos = 0xC; - if (sub_8119E3C(&sp8, 0) != 0) + struct CryScreenWindow waveformWindow; + + waveformWindow.charBase = 0x4020; + waveformWindow.screenBase = 0x1F; + waveformWindow.paletteNo = 8; + waveformWindow.yPos = 0x1E; + waveformWindow.xPos = 0xC; + if (LoadCryWaveformWindow(&waveformWindow, 0) != 0) { gMain.state++; - gUnknown_03005E98 = 0; + gDexCryScreenState = 0; } } break; case 7: { - struct CryRelatedStruct sp10; + struct CryScreenWindow sp10; - sp10.unk0 = 0x3000; - sp10.unk2 = 0xE; + sp10.charBase = 0x3000; + sp10.screenBase = 0xE; sp10.paletteNo = 9; sp10.xPos = 0x12; sp10.yPos = 3; @@ -3209,7 +3228,7 @@ static void Task_InitCryScreenMultistep(u8 taskId) break; case 8: BeginNormalPaletteFade(0xFFFFFFEB, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gMain.state++; break; case 9: @@ -3223,7 +3242,7 @@ static void Task_InitCryScreenMultistep(u8 taskId) gMain.state++; break; case 10: - gPokedexView->unk64F = 0; + gPokedexView->screenSwitchState = 0; gMain.state = 0; gTasks[taskId].func = Task_CryScreenProcessInput; break; @@ -3232,17 +3251,17 @@ static void Task_InitCryScreenMultistep(u8 taskId) static void Task_CryScreenProcessInput(u8 taskId) { - sub_8119F88(0); + UpdateCryWaveformWindow(0); if (IsCryPlaying()) - sub_8090040(1); + LoadPlayArrowPalette(1); else - sub_8090040(0); + LoadPlayArrowPalette(0); if (gMain.newKeys & A_BUTTON) { - sub_8090040(1); - sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum)); + LoadPlayArrowPalette(1); + CryScreenPlayButton(NationalPokedexNumToSpecies(sPokedexListItem->dexNum)); return; } else if (!gPaletteFade.active) @@ -3251,8 +3270,8 @@ static void Task_CryScreenProcessInput(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); m4aMPlayContinue(&gMPlayInfo_BGM); - gPokedexView->unk64F = 1; - gTasks[taskId].func = sub_808FFBC; + gPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromCryScreen; PlaySE(SE_PC_OFF); return; } @@ -3261,15 +3280,15 @@ static void Task_CryScreenProcessInput(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); m4aMPlayContinue(&gMPlayInfo_BGM); - gPokedexView->unk64F = 2; - gTasks[taskId].func = sub_808FFBC; + gPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromCryScreen; PlaySE(SE_DEX_PAGE); return; } if ((gMain.newKeys & DPAD_RIGHT) || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { - if (!gUnknown_0202FFBC->owned) + if (!sPokedexListItem->owned) { PlaySE(SE_FAILURE); } @@ -3277,8 +3296,8 @@ static void Task_CryScreenProcessInput(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); m4aMPlayContinue(&gMPlayInfo_BGM); - gPokedexView->unk64F = 3; - gTasks[taskId].func = sub_808FFBC; + gPokedexView->screenSwitchState = 3; + gTasks[taskId].func = Task_SwitchScreensFromCryScreen; PlaySE(SE_DEX_PAGE); } return; @@ -3286,12 +3305,12 @@ static void Task_CryScreenProcessInput(u8 taskId) } } -static void sub_808FFBC(u8 taskId) +static void Task_SwitchScreensFromCryScreen(u8 taskId) { if (!gPaletteFade.active) { DestroyCryMeterNeedleSprite(); - switch (gPokedexView->unk64F) + switch (gPokedexView->screenSwitchState) { default: case 1: @@ -3307,15 +3326,15 @@ static void sub_808FFBC(u8 taskId) } } -static void sub_8090040(u8 a) +static void LoadPlayArrowPalette(u8 cryPlaying) { - u16 unk; + u16 color; - if (a != 0) - unk = 0x392; + if (cryPlaying) + color = RGB(18, 28, 0); else - unk = 0x2AF; - LoadPalette(&unk, 0x5D, 2); + color = RGB(15, 21, 0); + LoadPalette(&color, 0x5D, 2); } static void Task_InitSizeScreenMultistep(u8 taskId) @@ -3328,10 +3347,10 @@ static void Task_InitSizeScreenMultistep(u8 taskId) case 0: if (!gPaletteFade.active) { - gPokedexView->unk64A = 7; - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexView->currentPage = 7; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x200); + ResetOtherVideoRegisters(0x200); gPokedexView->selectedScreen = SIZE_SCREEN; gMain.state = 1; } @@ -3342,13 +3361,14 @@ static void Task_InitSizeScreenMultistep(u8 taskId) gMain.state++; break; case 2: - sub_8090540(0xD); + LoadScreenSelectBarSubmenu(0xD); sub_8090644(3, 0xD); - sub_808D640(); + LoadPokedexBgPalette(); gMain.state++; break; case 3: { + // This only needs to be 25 chars long (31 in German). u8 string[40]; //I hope this is the correct size Text_LoadWindowTemplate(&gWindowTemplate_81E702C); @@ -3365,28 +3385,28 @@ static void Task_InitSizeScreenMultistep(u8 taskId) gMain.state++; break; case 5: - spriteId = sub_8091A4C(gSaveBlock2.playerGender, 152, 56, 0); + spriteId = CreateSizeScreenTrainerPic(gSaveBlock2.playerGender, 152, 56, 0); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 1; gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset; - SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale); - LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); + gSprites[spriteId].pos2.y = gPokedexEntries[sPokedexListItem->dexNum].trainerOffset; + SetOamMatrix(1, gPokedexEntries[sPokedexListItem->dexNum].trainerScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].trainerScale); + LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(sSizeScreenSilhouette_Pal)); gMain.state++; break; case 6: - spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 88, 56, 1); + spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 88, 56, 1); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 2; gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset; - SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale); - LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(gUnknown_083B4EC4)); + gSprites[spriteId].pos2.y = gPokedexEntries[sPokedexListItem->dexNum].pokemonOffset; + SetOamMatrix(2, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale); + LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, sizeof(sSizeScreenSilhouette_Pal)); gMain.state++; break; case 7: BeginNormalPaletteFade(0xFFFFFFEB, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gMain.state++; break; case 8: @@ -3400,7 +3420,7 @@ static void Task_InitSizeScreenMultistep(u8 taskId) case 9: if (!gPaletteFade.active) { - gPokedexView->unk64F = 0; + gPokedexView->screenSwitchState = 0; gMain.state = 0; gTasks[taskId].func = Task_SizeScreenProcessInput; } @@ -3413,25 +3433,25 @@ static void Task_SizeScreenProcessInput(u8 taskId) if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); - gPokedexView->unk64F = 1; - gTasks[taskId].func = sub_8090498; + gPokedexView->screenSwitchState = 1; + gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_PC_OFF); } else if ((gMain.newKeys & DPAD_LEFT) || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB(0, 0, 0)); - gPokedexView->unk64F = 2; - gTasks[taskId].func = sub_8090498; + gPokedexView->screenSwitchState = 2; + gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_DEX_PAGE); } } -static void sub_8090498(u8 taskId) +static void Task_SwitchScreensFromSizeScreen(u8 taskId) { if (!gPaletteFade.active) { - switch (gPokedexView->unk64F) + switch (gPokedexView->screenSwitchState) { default: case 1: @@ -3444,20 +3464,20 @@ static void sub_8090498(u8 taskId) } } -static void sub_80904FC(u16 a) +static void LoadScreenSelectBarMain(u16 screenBase) { - LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800)); - DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); + LZ77UnCompVram(gPokedexScreenSelectBarMain_Tilemap, (void *)(VRAM + screenBase * 0x800)); + DmaClear16(3, (void *)(VRAM + screenBase * 0x800 + 0xC0), 0x440); } -static void sub_8090540(u16 a) +static void LoadScreenSelectBarSubmenu(u16 screenBase) { - LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800)); - DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); + LZ77UnCompVram(gPokedexScreenSelectBarSubmenu_Tilemap, (void *)(VRAM + screenBase * 0x800)); + DmaClear16(3, (void *)(VRAM + screenBase * 0x800 + 0xC0), 0x440); } #ifdef NONMATCHING -static void sub_8090584(u8 a, u16 b) +static void HighlightScreenSelectBarItem(u8 a, u16 b) { u8 i; //r1 u8 j; //r3 @@ -3497,7 +3517,7 @@ static void sub_8090584(u8 a, u16 b) } #else NAKED -static void sub_8090584(u8 a, u16 b) +static void HighlightScreenSelectBarItem(u8 a, u16 b) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -3776,9 +3796,9 @@ static void sub_8090750(u8 taskId) default: if (!gPaletteFade.active) { - gUnknown_03005CEC = gMain.vblankCallback; + gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); - sub_8091060(0x100); + ResetOtherVideoRegisters(0x100); gTasks[taskId].data[0] = 1; } break; @@ -3792,7 +3812,7 @@ static void sub_8090750(u8 taskId) #endif *(u16 *)(BG_VRAM + 0x7800 + 2 * i) += 0x2000; } - sub_8091738(gTasks[taskId].data[1], 2, 0x3FC); + PrintFootprint(gTasks[taskId].data[1], 2, 0x3FC); ResetPaletteFade(); LoadPalette(gPokedexMenu_Pal + 1, 0x21, 0x9E); gTasks[taskId].data[0]++; @@ -3806,25 +3826,25 @@ static void sub_8090750(u8 taskId) case 3: MenuPrint_Centered(gDexText_RegisterComplete, 2, 0, 0xD0); if (!IsNationalPokedexEnabled()) - sub_8091154(NationalToHoennOrder(dexNum), 13, 3); + PrintEntryScreenDexNum(NationalToHoennOrder(dexNum), 13, 3); else - sub_8091154(dexNum, 13, 3); - sub_80911C8(dexNum, 16, 3); + PrintEntryScreenDexNum(dexNum, 13, 3); + PrintEntryScreenSpeciesName(dexNum, 16, 3); Menu_PrintText(gDexText_UnknownPoke, CATEGORY_LEFT, 5); Menu_PrintText(gDexText_UnknownHeight, 16, 7); Menu_PrintText(gDexText_UnknownWeight, 16, 9); - sub_8091304(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5); + UnusedPrintMonName(gPokedexEntries[dexNum].categoryName, CATEGORY_LEFT, 5); sub_8091458(gPokedexEntries[dexNum].height, 16, 7); sub_8091564(gPokedexEntries[dexNum].weight, 16, 9); Menu_PrintText(gPokedexEntries[dexNum].descriptionPage1, 2, 13); - sub_80917CC(14, 0x3FC); + sub_80C0DC0(14, 0x3FC); gTasks[taskId].data[0]++; break; case 4: - spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0); + spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, 0x30, 0x38, 0); gSprites[spriteId].oam.priority = 0; BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); - SetVBlankCallback(gUnknown_03005CEC); + SetVBlankCallback(gPokedexVBlankCB); gTasks[taskId].data[3] = spriteId; gTasks[taskId].data[0]++; break; @@ -3923,12 +3943,12 @@ static void sub_8090C28(struct Sprite *sprite) static void sub_8090C68(void) { - if (gUnknown_0202FFBC->owned) + if (sPokedexListItem->owned) { if (gPokedexView->descriptionPageNum == 0) { Menu_EraseWindowRect(2, 13, 27, 19); - Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage2, 2, 13); + Menu_PrintText(gPokedexEntries[sPokedexListItem->dexNum].descriptionPage2, 2, 13); gPokedexView->descriptionPageNum = 1; (*(u16 *)(BG_VRAM + 0x7ACA))++; (*(u16 *)(BG_VRAM + 0x7B0A))++; @@ -3937,7 +3957,7 @@ static void sub_8090C68(void) else { Menu_EraseWindowRect(2, 13, 27, 19); - Menu_PrintText(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); + Menu_PrintText(gPokedexEntries[sPokedexListItem->dexNum].descriptionPage1, 2, 13); gPokedexView->descriptionPageNum = 0; (*(u16 *)(BG_VRAM + 0x7ACA))--; (*(u16 *)(BG_VRAM + 0x7B0A))--; @@ -4109,7 +4129,7 @@ bool16 CompletedNationalPokedex(void) return TRUE; } -static void sub_8091060(u16 a) +static void ResetOtherVideoRegisters(u16 a) { if (!(a & 0x100)) { @@ -4148,7 +4168,7 @@ static void sub_8091060(u16 a) } } -static void sub_8091154(u16 order, u8 b, u8 c) +static void PrintEntryScreenDexNum(u16 order, u8 b, u8 c) { u8 str[4]; @@ -4159,7 +4179,7 @@ static void sub_8091154(u16 order, u8 b, u8 c) Menu_PrintText(str, b, c); } -static u8 sub_80911C8(u16 num, u8 b, u8 c) +static u8 PrintEntryScreenSpeciesName(u16 num, u8 b, u8 c) { u8 str[11]; u8 i; @@ -4181,13 +4201,13 @@ static u8 sub_80911C8(u16 num, u8 b, u8 c) return i; } -static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d) +static u8 PrintCryScreenSpeciesName(u16 num, u8 b, u8 c, u8 d) { u8 str[40]; u8 *end; u8 i; - end = StringCopy(str, gUnknown_083B5558); + end = StringCopy(str, sText_ClearTo0); str[2] = d; num = NationalPokedexNumToSpecies(num); switch (num) @@ -4206,7 +4226,7 @@ static u8 sub_8091260(u16 num, u8 b, u8 c, u8 d) return i; } -static void sub_8091304(const u8 *name, u8 left, u8 top) +static void UnusedPrintMonName(const u8 *name, u8 left, u8 top) { u8 str[32]; u8 i; @@ -4217,18 +4237,18 @@ static void sub_8091304(const u8 *name, u8 left, u8 top) for (i = 0; name[i] != EOS && i < 11; i++) str[i] = name[i]; #if ENGLISH - for (j = 0; gDexText_UnknownPoke[j] == 0xAC || gDexText_UnknownPoke[j] == 0; j++) + for (j = 0; gDexText_UnknownPoke[j] == CHAR_QUESTION_MARK || gDexText_UnknownPoke[j] == CHAR_SPACE; j++) ; j--; while (gDexText_UnknownPoke[j] != EOS) str[i++] = gDexText_UnknownPoke[j++]; #endif str[i] = EOS; - sub_8072B80(str, left, top, gDexText_UnknownPoke); + MenuPrint_AlignedToRightOfReferenceString(str, left, top, gDexText_UnknownPoke); } #if ENGLISH -void unref_sub_80913A4(u16 a, u8 left, u8 top) +void UnusedPrintDecimalNum(u16 a, u8 left, u8 top) { u8 str[6]; bool8 outputted = FALSE; @@ -4265,7 +4285,7 @@ void unref_sub_80913A4(u16 a, u8 left, u8 top) Menu_PrintText(str, left, top); } #elif GERMAN -void unref_sub_80913A4(u16 arg0, u8 left, u8 top) { +void UnusedPrintDecimalNum(u16 arg0, u8 left, u8 top) { u8 buffer[8]; int offset; u8 result; @@ -4348,7 +4368,7 @@ static void sub_8091458(u16 height, u8 left, u8 top) #else static void sub_8091458(u16 height, u8 left, u8 top) { - unref_sub_80913A4(height, left, top); + UnusedPrintDecimalNum(height, left, top); } #endif @@ -4418,11 +4438,11 @@ static void sub_8091564(u16 weight, u8 left, u8 top) #else static void sub_8091564(u16 arg0, u8 left, u8 top) { - unref_sub_80913A4(arg0, left, top); + UnusedPrintDecimalNum(arg0, left, top); } #endif -void sub_8091738(u16 num, u16 b, u16 c) +void PrintFootprint(u16 num, u16 b, u16 c) { u8 arr[0x80]; u16 i, j, r7; @@ -4449,7 +4469,7 @@ void sub_8091738(u16 num, u16 b, u16 c) CpuCopy16((void*)arr, (void *)(BG_VRAM + b * 0x4000 + c * 0x20), 0x80); } -static void sub_80917CC(u16 a, u16 b) +static void sub_80C0DC0(u16 a, u16 b) { *(u16 *)(BG_VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0; *(u16 *)(BG_VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1; @@ -4457,55 +4477,55 @@ static void sub_80917CC(u16 a, u16 b) *(u16 *)(BG_VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3; } -static u16 sub_8091818(u8 a, u16 b, u16 c, u16 d) +static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max) { - switch (a) + switch (direction) { case 1: - if (b > c) - b--; + if (position > min) + position--; break; case 0: - if (b < d) - b++; + if (position < max) + position++; break; case 3: - if (b > c) - b--; + if (position > min) + position--; else - b = d; + position = max; break; case 2: - if (b < d) - b++; + if (position < max) + position++; else - b = c; + position = min; break; } - return b; + return position; } -static void nullsub_59(struct Sprite *sprite) +static void _SpriteCB_Dummy(struct Sprite *sprite) { } -static void sub_8091878(u16 a, u8 b) +static void SetSpriteTemplateForPokemonPic(u16 paletteTag, u8 imagesSet) { - gUnknown_02024E8C = gUnknown_083B57A4; - gUnknown_02024E8C.paletteTag = a; - gUnknown_02024E8C.images = gUnknown_083B5794[b]; - gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; + gCreatingSpriteTemplate = sMonOrTrainerPicSpriteTemplate; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sSpriteFrameImages_MonOrTrainerPic[imagesSet]; + gCreatingSpriteTemplate.anims = gSpriteAnimTable_81E7C64; } -static void sub_80918B0(u16 a, u8 b) +static void SetSpriteTemplateForSizeComparisonTrainerPic(u16 paletteTag, u8 imagesSet) { - gUnknown_02024E8C = gUnknown_083B57A4; - gUnknown_02024E8C.paletteTag = a; - gUnknown_02024E8C.images = gUnknown_083B5794[b]; - gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; + gCreatingSpriteTemplate = sMonOrTrainerPicSpriteTemplate; + gCreatingSpriteTemplate.paletteTag = paletteTag; + gCreatingSpriteTemplate.images = sSpriteFrameImages_MonOrTrainerPic[imagesSet]; + gCreatingSpriteTemplate.anims = gUnknown_081EC2A4[0]; } -u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) +u16 CreateMonSpriteFromNationalDexNumber(u16 num, s16 x, s16 y, u16 paletteNum) { u8 spriteId; @@ -4517,8 +4537,8 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - (void*)ewram_addr, - gUnknown_083B5584[paletteNum], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[paletteNum], num); break; case SPECIES_SPINDA: @@ -4526,8 +4546,8 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - ewram_addr, - gUnknown_083B5584[paletteNum], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[paletteNum], num, gSaveBlock2.pokedex.spindaPersonality, 1); @@ -4537,21 +4557,21 @@ u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum) &gMonFrontPicTable[num], gMonFrontPicCoords[num].coords, gMonFrontPicCoords[num].y_offset, - ewram_addr, - gUnknown_083B5584[paletteNum], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[paletteNum], num, gSaveBlock2.pokedex.unownPersonality, 1); break; } LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + paletteNum * 16, 32); - sub_8091878(paletteNum, paletteNum); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + SetSpriteTemplateForPokemonPic(paletteNum, paletteNum); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].oam.paletteNum = paletteNum; return spriteId; } -u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) +u16 CreateSizeScreenTrainerPic(u16 gender, s16 x, s16 y, u16 paletteNum) { u8 spriteId; @@ -4559,29 +4579,29 @@ u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum) &gTrainerFrontPicTable[gender], gTrainerFrontPicCoords[gender].coords, gTrainerFrontPicCoords[gender].y_offset, - (void*)ewram_addr, - gUnknown_083B5584[0], + (void *)EWRAM, + sMonOrTrainerPicDecompressDestPtrs[0], gender); - sub_80918B0(gender, 0); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + SetSpriteTemplateForSizeComparisonTrainerPic(gender, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].oam.paletteNum = paletteNum; return spriteId; } -int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) +int DoPokedexSearch(u8 dexMode, u8 order, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { u16 species; u16 i; u16 resultsCount; u8 types[2]; - SortPokedex(a, b); + SortPokedex(dexMode, order); for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++) { - if (gPokedexView->unk0[i].seen) + if (gPokedexView->pokedexList[i].seen) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4594,12 +4614,12 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { u8 r3; - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); r3 = gSpeciesNames[species][0]; - if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1]) - || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3])) + if ((r3 >= sLetterSearchRanges[abcGroup][0] && r3 < sLetterSearchRanges[abcGroup][0] + sLetterSearchRanges[abcGroup][1]) + || (r3 >= sLetterSearchRanges[abcGroup][2] && r3 < sLetterSearchRanges[abcGroup][2] + sLetterSearchRanges[abcGroup][3])) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4611,11 +4631,11 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); if (bodyColor == gBaseStats[species].bodyColor) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4635,15 +4655,15 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) { - if (gPokedexView->unk0[i].owned) + if (gPokedexView->pokedexList[i].owned) { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); types[0] = gBaseStats[species].type1; types[1] = gBaseStats[species].type2; if (types[0] == type1 || types[1] == type1) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4653,15 +4673,15 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = 0, resultsCount = 0; i < gPokedexView->pokemonListCount; i++) { - if (gPokedexView->unk0[i].owned) + if (gPokedexView->pokedexList[i].owned) { - species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum); + species = NationalPokedexNumToSpecies(gPokedexView->pokedexList[i].dexNum); types[0] = gBaseStats[species].type1; types[1] = gBaseStats[species].type2; if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1)) { - gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i]; + gPokedexView->pokedexList[resultsCount] = gPokedexView->pokedexList[i]; resultsCount++; } } @@ -4674,9 +4694,9 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) { for (i = gPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++) { - gPokedexView->unk0[i].dexNum = 0xFFFF; - gPokedexView->unk0[i].seen = FALSE; - gPokedexView->unk0[i].owned = FALSE; + gPokedexView->pokedexList[i].dexNum = 0xFFFF; + gPokedexView->pokedexList[i].seen = FALSE; + gPokedexView->pokedexList[i].owned = FALSE; } } @@ -4690,17 +4710,17 @@ int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) #define SUB_8091E20_WIDTH (216) #endif -void sub_8091E20(const u8 *str) +void EraseAndPrintSearchTextBox(const u8 *str) { sub_8072AB0(str, 9, 120, SUB_8091E20_WIDTH, 32, 1); } -u8 sub_8091E3C(void) +u8 LoadSearchMenu(void) { - return CreateTask(sub_8091E54, 0); + return CreateTask(Task_LoadSearchMenu, 0); } -static void sub_8091E54(u8 taskId) +static void Task_LoadSearchMenu(u8 taskId) { u16 i; @@ -4710,10 +4730,10 @@ static void sub_8091E54(u8 taskId) case 0: if (!gPaletteFade.active) { - gPokedexView->unk64A = 2; - sub_8091060(0); + gPokedexView->currentPage = 2; + ResetOtherVideoRegisters(0); LZ77UnCompVram(gPokedexMenuSearch_Gfx, (void *)VRAM); - LZ77UnCompVram(gUnknown_08E96D2C, (void *)(VRAM + 0x7800)); + LZ77UnCompVram(gPokedexMenuSearch_Tilemap, (void *)(VRAM + 0x7800)); LoadPalette(gPokedexMenuSearch_Pal + 1, 1, 0x7E); if (!IsNationalPokedexEnabled()) { @@ -4731,14 +4751,14 @@ static void sub_8091E54(u8 taskId) case 1: Text_LoadWindowTemplate(&gWindowTemplate_81E7064); InitMenuWindow(&gWindowTemplate_81E7064); - LoadCompressedObjectPic(&gUnknown_083A05CC[0]); - LoadSpritePalettes(gUnknown_083A05DC); - sub_809308C(taskId); + LoadCompressedObjectPic(&sInterfaceSpriteSheet[0]); + LoadSpritePalettes(sInterfaceSpritePalette); + CreateSearchParameterScrollArrows(taskId); for (i = 0; i < 16; i++) gTasks[taskId].data[i] = 0; - sub_8092EB0(taskId); - sub_8092AB0(0); - sub_8092B68(taskId); + SetDefaultSearchModeAndOrder(taskId); + HighlightSelectedSearchTopBarItem(0); + PrintSelectedSearchParameters(taskId); gMain.state++; break; case 2: @@ -4753,26 +4773,26 @@ static void sub_8091E54(u8 taskId) case 4: if (!gPaletteFade.active) { - gTasks[taskId].func = sub_809204C; + gTasks[taskId].func = Task_SwitchToSearchMenuTopBar; gMain.state = 0; } break; } } -static void sub_809204C(u8 taskId) +static void Task_SwitchToSearchMenuTopBar(u8 taskId) { - sub_8092AB0(gTasks[taskId].data[0]); - sub_8092B68(taskId); - gTasks[taskId].func = sub_809207C; + HighlightSelectedSearchTopBarItem(gTasks[taskId].data[0]); + PrintSelectedSearchParameters(taskId); + gTasks[taskId].func = Task_HandleSearchTopBarInput; } -static void sub_809207C(u8 taskId) +static void Task_HandleSearchTopBarInput(u8 taskId) { if (gMain.newKeys & B_BUTTON) { PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; + gTasks[taskId].func = Task_ExitSearch; return; } if (gMain.newKeys & A_BUTTON) @@ -4782,16 +4802,16 @@ static void sub_809207C(u8 taskId) case 0: PlaySE(SE_PIN); gTasks[taskId].data[1] = 0; - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; break; case 1: PlaySE(SE_PIN); gTasks[taskId].data[1] = 4; - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; break; case 2: PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; + gTasks[taskId].func = Task_ExitSearch; break; } return; @@ -4800,47 +4820,47 @@ static void sub_809207C(u8 taskId) { PlaySE(SE_DEX_PAGE); gTasks[taskId].data[0]--; - sub_8092AB0(gTasks[taskId].data[0]); + HighlightSelectedSearchTopBarItem(gTasks[taskId].data[0]); } if ((gMain.newKeys & DPAD_RIGHT) && gTasks[taskId].data[0] < 2) { PlaySE(SE_DEX_PAGE); gTasks[taskId].data[0]++; - sub_8092AB0(gTasks[taskId].data[0]); + HighlightSelectedSearchTopBarItem(gTasks[taskId].data[0]); } } -static void sub_809217C(u8 taskId) +static void Task_SwitchToSearchMenu(u8 taskId) { - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); - sub_8092B68(taskId); - gTasks[taskId].func = sub_80921B0; + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); + PrintSelectedSearchParameters(taskId); + gTasks[taskId].func = Task_HandleSearchMenuInput; } -static void sub_80921B0(u8 taskId) +static void Task_HandleSearchMenuInput(u8 taskId) { const u8 (*r6)[4]; if (gTasks[taskId].data[0] != 0) { if (!IsNationalPokedexEnabled()) - r6 = gUnknown_083B58A4; + r6 = sSearchMovementMap_ShiftHoennDex; else - r6 = gUnknown_083B586C; + r6 = sSearchMovementMap_ShiftNatDex; } else { if (!IsNationalPokedexEnabled()) - r6 = gUnknown_083B5888; + r6 = sSearchMovementMap_SearchHoennDex; else - r6 = gUnknown_083B5850; + r6 = sSearchMovementMap_SearchNatDex; } if (gMain.newKeys & B_BUTTON) { PlaySE(SE_BALL); - sub_8092EB0(taskId); - gTasks[taskId].func = sub_809204C; + SetDefaultSearchModeAndOrder(taskId); + gTasks[taskId].func = Task_SwitchToSearchMenuTopBar; return; } if (gMain.newKeys & A_BUTTON) @@ -4849,30 +4869,30 @@ static void sub_80921B0(u8 taskId) { if (gTasks[taskId].data[0] != 0) { - gUnknown_0202FFBA = 0x40; - gPokedexView->unk62A = 0x40; - gUnknown_0202FFB8 = 0; - gPokedexView->unk610 = 0; - gSaveBlock2.pokedex.unknown1 = sub_8092E10(taskId, 5); + sPokeBallRotation = 0x40; + gPokedexView->pokeBallRotationBackup = 0x40; + sLastSelectedPokemon = 0; + gPokedexView->selectedPokemonBackup = 0; + gSaveBlock2.pokedex.mode = GetSearchModeSelection(taskId, 5); if (!IsNationalPokedexEnabled()) - gSaveBlock2.pokedex.unknown1 = 0; - gPokedexView->unk614 = gSaveBlock2.pokedex.unknown1; - gSaveBlock2.pokedex.order = sub_8092E10(taskId, 4); - gPokedexView->unk618 = gSaveBlock2.pokedex.order; + gSaveBlock2.pokedex.mode = 0; + gPokedexView->dexModeBackup = gSaveBlock2.pokedex.mode; + gSaveBlock2.pokedex.order = GetSearchModeSelection(taskId, 4); + gPokedexView->dexOrderBackup = gSaveBlock2.pokedex.order; PlaySE(SE_PC_OFF); - gTasks[taskId].func = sub_80927B8; + gTasks[taskId].func = Task_ExitSearch; } else { - sub_8091E20(gDexText_Searching); - gTasks[taskId].func = sub_80923FC; + EraseAndPrintSearchTextBox(gDexText_Searching); + gTasks[taskId].func = Task_StartPokedexSearch; PlaySE(SE_DEX_SEARCH); } } else { PlaySE(SE_PIN); - gTasks[taskId].func = sub_80925CC; + gTasks[taskId].func = Task_SelectSearchMenuItem; } return; } @@ -4881,123 +4901,123 @@ static void sub_80921B0(u8 taskId) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][0]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } if ((gMain.newKeys & DPAD_RIGHT) && r6[gTasks[taskId].data[1]][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][1]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } if ((gMain.newKeys & DPAD_UP) && r6[gTasks[taskId].data[1]][2] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][2]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } if ((gMain.newKeys & DPAD_DOWN) && r6[gTasks[taskId].data[1]][3] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].data[1] = r6[gTasks[taskId].data[1]][3]; - sub_8092AD4(gTasks[taskId].data[0], gTasks[taskId].data[1]); + HighlightSelectedSearchMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); } } -static void sub_80923FC(u8 taskId) +static void Task_StartPokedexSearch(u8 taskId) { - u8 r10 = sub_8092E10(taskId, 5); - u8 r9 = sub_8092E10(taskId, 4); - u8 r8 = sub_8092E10(taskId, 0); - u8 r6 = sub_8092E10(taskId, 1); - u8 r4 = sub_8092E10(taskId, 2); - u8 r0 = sub_8092E10(taskId, 3); + u8 r10 = GetSearchModeSelection(taskId, 5); + u8 r9 = GetSearchModeSelection(taskId, 4); + u8 r8 = GetSearchModeSelection(taskId, 0); + u8 r6 = GetSearchModeSelection(taskId, 1); + u8 r4 = GetSearchModeSelection(taskId, 2); + u8 r0 = GetSearchModeSelection(taskId, 3); - sub_8091AF8(r10, r9, r8, r6, r4, r0); - gTasks[taskId].func = sub_80924A4; + DoPokedexSearch(r10, r9, r8, r6, r4, r0); + gTasks[taskId].func = Task_WaitAndCompleteSearch; } -static void sub_80924A4(u8 taskId) +static void Task_WaitAndCompleteSearch(u8 taskId) { if (!IsSEPlaying()) { if (gPokedexView->pokemonListCount != 0) { PlaySE(SE_SUCCESS); - sub_8091E20(gDexText_SearchComplete); + EraseAndPrintSearchTextBox(gDexText_SearchComplete); } else { PlaySE(SE_FAILURE); - sub_8091E20(gDexText_NoMatching); + EraseAndPrintSearchTextBox(gDexText_NoMatching); } - gTasks[taskId].func = sub_8092508; + gTasks[taskId].func = Task_SearchCompleteWaitForInput; } } -static void sub_8092508(u8 taskId) +static void Task_SearchCompleteWaitForInput(u8 taskId) { if (gMain.newKeys & A_BUTTON) { if (gPokedexView->pokemonListCount != 0) { - gPokedexView->unk64F = 1; - gPokedexView->dexMode = sub_8092E10(taskId, 5); - gPokedexView->dexOrder = sub_8092E10(taskId, 4); - gTasks[taskId].func = sub_80927B8; + gPokedexView->screenSwitchState = 1; + gPokedexView->dexMode = GetSearchModeSelection(taskId, 5); + gPokedexView->dexOrder = GetSearchModeSelection(taskId, 4); + gTasks[taskId].func = Task_ExitSearch; PlaySE(SE_PC_OFF); } else { - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; PlaySE(SE_BALL); } } } -static void sub_80925B4(u16 a, int unused) +static void PrintSelectorArrow(u16 a, int unused) { MenuCursor_SetPos814AD7C(0x90, (a * 2 + 1) * 8); } -static void sub_80925CC(u8 taskId) +static void Task_SelectSearchMenuItem(u8 taskId) { u8 r0; u16 *p1; u16 *p2; - sub_8092C8C(0); + DrawOrEraseSearchParameterBox(0); r0 = gTasks[taskId].data[1]; - p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4]; - p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5]; + p1 = (u16 *)&gTasks[taskId].data[sSearchOptions[r0].taskDataCursorPos]; + p2 = (u16 *)&gTasks[taskId].data[sSearchOptions[r0].taskDataScrollOffset]; gTasks[taskId].data[14] = *p1; gTasks[taskId].data[15] = *p2; - sub_8092D78(taskId); + PrintSearchParameterText(taskId); CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11); - sub_80925B4(*p1, 1); - gTasks[taskId].func = sub_8092644; + PrintSelectorArrow(*p1, 1); + gTasks[taskId].func = Task_HandleSearchParameterInput; } -static void sub_8092644(u8 taskId) +static void Task_HandleSearchParameterInput(u8 taskId) { u8 r1; - const struct UnknownStruct2 *r8; + const struct SearchOptionText *r8; u16 *p1; u16 *p2; u16 r2; bool8 r3; r1 = gTasks[taskId].data[1]; - r8 = gUnknown_083B5A7C[r1].unk0; - p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4]; - p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5]; - r2 = gUnknown_083B5A7C[r1].unk6 - 1; + r8 = sSearchOptions[r1].texts; + p1 = (u16 *)&gTasks[taskId].data[sSearchOptions[r1].taskDataCursorPos]; + p2 = (u16 *)&gTasks[taskId].data[sSearchOptions[r1].taskDataScrollOffset]; + r2 = sSearchOptions[r1].numOptions - 1; if (gMain.newKeys & A_BUTTON) { sub_814ADC8(); PlaySE(SE_PIN); Menu_EraseWindowRect(18, 1, 28, 12); - sub_8092C8C(1); - gTasks[taskId].func = sub_809217C; + DrawOrEraseSearchParameterBox(1); + gTasks[taskId].func = Task_SwitchToSearchMenu; return; } if (gMain.newKeys & B_BUTTON) @@ -5005,10 +5025,10 @@ static void sub_8092644(u8 taskId) sub_814ADC8(); PlaySE(SE_BALL); Menu_EraseWindowRect(18, 1, 28, 12); - sub_8092C8C(1); + DrawOrEraseSearchParameterBox(1); *p1 = gTasks[taskId].data[14]; *p2 = gTasks[taskId].data[15]; - gTasks[taskId].func = sub_809217C; + gTasks[taskId].func = Task_SwitchToSearchMenu; return; } r3 = FALSE; @@ -5016,22 +5036,22 @@ static void sub_8092644(u8 taskId) { if (*p1 != 0) { - sub_80925B4(*p1, 0); + PrintSelectorArrow(*p1, 0); (*p1)--; - sub_80925B4(*p1, 1); + PrintSelectorArrow(*p1, 1); r3 = TRUE; } else if (*p2 != 0) { (*p2)--; - sub_8092D78(taskId); - sub_80925B4(*p1, 1); + PrintSearchParameterText(taskId); + PrintSelectorArrow(*p1, 1); r3 = TRUE; } if (r3) { PlaySE(SE_SELECT); - sub_8091E20(r8[*p1 + *p2].text1); + EraseAndPrintSearchTextBox(r8[*p1 + *p2].description); } return; } @@ -5039,41 +5059,41 @@ static void sub_8092644(u8 taskId) { if (*p1 < 5 && *p1 < r2) { - sub_80925B4(*p1, 0); + PrintSelectorArrow(*p1, 0); (*p1)++; - sub_80925B4(*p1, 1); + PrintSelectorArrow(*p1, 1); r3 = TRUE; } else if (r2 > 5 && *p2 < r2 - 5) { (*p2)++; - sub_8092D78(taskId); - sub_80925B4(5, 1); + PrintSearchParameterText(taskId); + PrintSelectorArrow(5, 1); r3 = TRUE; } if (r3) { PlaySE(SE_SELECT); - sub_8091E20(r8[*p1 + *p2].text1); + EraseAndPrintSearchTextBox(r8[*p1 + *p2].description); } return; } } -static void sub_80927B8(u8 taskId) +static void Task_ExitSearch(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - gTasks[taskId].func = sub_80927F0; + gTasks[taskId].func = Task_ExitSearchWaitForFade; } -static void sub_80927F0(u8 taskId) +static void Task_ExitSearchWaitForFade(u8 taskId) { if (!gPaletteFade.active) DestroyTask(taskId); } #define VRAM_ADDR(a, b, c) *(u16 *)(BG_VRAM + (15 * 0x800) + (c) * 64 + ((b) + (a))*2) -void sub_8092810(u8 a, u8 b, u8 c, u8 d) +void SetSearchRectHighlight(u8 a, u8 b, u8 c, u8 d) { u16 i, j; @@ -5092,156 +5112,172 @@ void sub_8092810(u8 a, u8 b, u8 c, u8 d) } } -static void sub_809286C(u8 a, u8 b, u8 c) +static void DrawSearchMenuItemBgHighlight(u8 searchBg, u8 unselected, u8 disabled) { - u8 r5 = (b & 1) | ((c & 1) << 1); + u8 r5 = (unselected & 1) | ((disabled & 1) << 1); - switch (a) + switch (searchBg) { case 0: case 1: case 2: - sub_8092810(r5, gUnknown_083B57E4[a].unk4, gUnknown_083B57E4[a].unk5, gUnknown_083B57E4[a].unk6); + SetSearchRectHighlight(r5, + sSearchMenuTopBarItems[searchBg].highlightX, + sSearchMenuTopBarItems[searchBg].highlightY, + sSearchMenuTopBarItems[searchBg].highlightWidth); break; case 3: case 4: case 7: case 8: - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].titleBgX, + sSearchMenuItems[searchBg - 3].titleBgY, + sSearchMenuItems[searchBg - 3].titleBgWidth); // fall through case 5: case 6: - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk7, gUnknown_083B57FC[a - 3].unk8, gUnknown_083B57FC[a - 3].unk9); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].selectionBgX, + sSearchMenuItems[searchBg - 3].selectionBgY, + sSearchMenuItems[searchBg - 3].selectionBgWidth); break; case 10: - sub_8092810(r5, gUnknown_083B57FC[2].unk4, gUnknown_083B57FC[2].unk5, gUnknown_083B57FC[2].unk6); + SetSearchRectHighlight( + r5, sSearchMenuItems[2].titleBgX, sSearchMenuItems[2].titleBgY, sSearchMenuItems[2].titleBgWidth); break; case 9: if (!IsNationalPokedexEnabled()) - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5 - 2, gUnknown_083B57FC[a - 3].unk6); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].titleBgX, + sSearchMenuItems[searchBg - 3].titleBgY - 2, + sSearchMenuItems[searchBg - 3].titleBgWidth); else - sub_8092810(r5, gUnknown_083B57FC[a - 3].unk4, gUnknown_083B57FC[a - 3].unk5, gUnknown_083B57FC[a - 3].unk6); + SetSearchRectHighlight(r5, + sSearchMenuItems[searchBg - 3].titleBgX, + sSearchMenuItems[searchBg - 3].titleBgY, + sSearchMenuItems[searchBg - 3].titleBgWidth); break; } } -static void sub_8092964(u8 a) +static void SetInitialSearchMenuBgHighlights(u8 topBarItem) { - switch (a) + switch (topBarItem) { case 0: - sub_809286C(0, 0, 0); - sub_809286C(1, 1, 0); - sub_809286C(2, 1, 0); - sub_809286C(3, 1, 0); - sub_809286C(4, 1, 0); - sub_809286C(10, 1, 0); - sub_809286C(5, 1, 0); - sub_809286C(6, 1, 0); - sub_809286C(7, 1, 0); - sub_809286C(8, 1, 0); - sub_809286C(9, 1, 0); + DrawSearchMenuItemBgHighlight(0, 0, 0); + DrawSearchMenuItemBgHighlight(1, 1, 0); + DrawSearchMenuItemBgHighlight(2, 1, 0); + DrawSearchMenuItemBgHighlight(3, 1, 0); + DrawSearchMenuItemBgHighlight(4, 1, 0); + DrawSearchMenuItemBgHighlight(10, 1, 0); + DrawSearchMenuItemBgHighlight(5, 1, 0); + DrawSearchMenuItemBgHighlight(6, 1, 0); + DrawSearchMenuItemBgHighlight(7, 1, 0); + DrawSearchMenuItemBgHighlight(8, 1, 0); + DrawSearchMenuItemBgHighlight(9, 1, 0); break; case 1: - sub_809286C(0, 1, 0); - sub_809286C(1, 0, 0); - sub_809286C(2, 1, 0); - sub_809286C(3, 1, 1); - sub_809286C(4, 1, 1); - sub_809286C(10, 1, 1); - sub_809286C(5, 1, 1); - sub_809286C(6, 1, 1); - sub_809286C(7, 1, 0); - sub_809286C(8, 1, 0); - sub_809286C(9, 1, 0); + DrawSearchMenuItemBgHighlight(0, 1, 0); + DrawSearchMenuItemBgHighlight(1, 0, 0); + DrawSearchMenuItemBgHighlight(2, 1, 0); + DrawSearchMenuItemBgHighlight(3, 1, 1); + DrawSearchMenuItemBgHighlight(4, 1, 1); + DrawSearchMenuItemBgHighlight(10, 1, 1); + DrawSearchMenuItemBgHighlight(5, 1, 1); + DrawSearchMenuItemBgHighlight(6, 1, 1); + DrawSearchMenuItemBgHighlight(7, 1, 0); + DrawSearchMenuItemBgHighlight(8, 1, 0); + DrawSearchMenuItemBgHighlight(9, 1, 0); break; case 2: - sub_809286C(0, 1, 0); - sub_809286C(1, 1, 0); - sub_809286C(2, 0, 0); - sub_809286C(3, 1, 1); - sub_809286C(4, 1, 1); - sub_809286C(10, 1, 1); - sub_809286C(5, 1, 1); - sub_809286C(6, 1, 1); - sub_809286C(7, 1, 1); - sub_809286C(8, 1, 1); - sub_809286C(9, 1, 1); + DrawSearchMenuItemBgHighlight(0, 1, 0); + DrawSearchMenuItemBgHighlight(1, 1, 0); + DrawSearchMenuItemBgHighlight(2, 0, 0); + DrawSearchMenuItemBgHighlight(3, 1, 1); + DrawSearchMenuItemBgHighlight(4, 1, 1); + DrawSearchMenuItemBgHighlight(10, 1, 1); + DrawSearchMenuItemBgHighlight(5, 1, 1); + DrawSearchMenuItemBgHighlight(6, 1, 1); + DrawSearchMenuItemBgHighlight(7, 1, 1); + DrawSearchMenuItemBgHighlight(8, 1, 1); + DrawSearchMenuItemBgHighlight(9, 1, 1); break; } } -static void sub_8092AB0(u8 a) +static void HighlightSelectedSearchTopBarItem(u8 topBarItem) { - sub_8092964(a); - sub_8091E20(gUnknown_083B57E4[a].text); + SetInitialSearchMenuBgHighlights(topBarItem); + EraseAndPrintSearchTextBox(sSearchMenuTopBarItems[topBarItem].text); } -static void sub_8092AD4(u8 a, u8 b) +static void HighlightSelectedSearchMenuItem(u8 topBarItem, u8 menuItem) { - sub_8092964(a); - switch (b) + SetInitialSearchMenuBgHighlights(topBarItem); + switch (menuItem) { case 0: - sub_809286C(3, 0, 0); + DrawSearchMenuItemBgHighlight(3, 0, 0); break; case 1: - sub_809286C(4, 0, 0); + DrawSearchMenuItemBgHighlight(4, 0, 0); break; case 2: - sub_809286C(10, 0, 0); - sub_809286C(5, 0, 0); + DrawSearchMenuItemBgHighlight(10, 0, 0); + DrawSearchMenuItemBgHighlight(5, 0, 0); break; case 3: - sub_809286C(10, 0, 0); - sub_809286C(6, 0, 0); + DrawSearchMenuItemBgHighlight(10, 0, 0); + DrawSearchMenuItemBgHighlight(6, 0, 0); break; case 4: - sub_809286C(7, 0, 0); + DrawSearchMenuItemBgHighlight(7, 0, 0); break; case 5: - sub_809286C(8, 0, 0); + DrawSearchMenuItemBgHighlight(8, 0, 0); break; case 6: - sub_809286C(9, 0, 0); + DrawSearchMenuItemBgHighlight(9, 0, 0); break; } - sub_8091E20(gUnknown_083B57FC[b].text); + EraseAndPrintSearchTextBox(sSearchMenuItems[menuItem].text); } -static void sub_8092B68(u8 taskId) +static void PrintSelectedSearchParameters(u8 taskId) { u16 var; var = gTasks[taskId].data[6] + gTasks[taskId].data[7]; - StringCopy(gStringVar1, gUnknown_083B5910[var].text2); + StringCopy(gStringVar1, sDexSearchNameOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 16, 1); var = gTasks[taskId].data[8] + gTasks[taskId].data[9]; - StringCopy(gStringVar1, gUnknown_083B5968[var].text2); + StringCopy(gStringVar1, sDexSearchColorOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 32, 1); var = gTasks[taskId].data[10] + gTasks[taskId].data[11]; - StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); + StringCopy(gStringVar1, sDexSearchTypeOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AAC, 45, 48, 1); var = gTasks[taskId].data[12] + gTasks[taskId].data[13]; - StringCopy(gStringVar1, gUnknown_083B59C8[var].text2); + StringCopy(gStringVar1, sDexSearchTypeOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AAC, 93, 48, 1); var = gTasks[taskId].data[4] + gTasks[taskId].data[5]; - StringCopy(gStringVar1, gUnknown_083B58D8[var].text2); + StringCopy(gStringVar1, sDexOrderOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 64, 1); if (IsNationalPokedexEnabled()) { var = gTasks[taskId].data[2] + gTasks[taskId].data[3]; - StringCopy(gStringVar1, gUnknown_083B58C0[var].text2); + StringCopy(gStringVar1, sDexModeOptions[var].title); Menu_PrintTextPixelCoords(gUnknown_083B5AB2, 45, 80, 1); } } -static void sub_8092C8C(u8 a) +static void DrawOrEraseSearchParameterBox(u8 a) { u16 i; u16 j; @@ -5276,29 +5312,31 @@ static void sub_8092C8C(u8 a) } } -static void sub_8092D78(u8 taskId) +// Prints the currently viewable search parameter titles in the right-hand text box +// and the currently selected search parameter description in the bottom text box +static void PrintSearchParameterText(u8 taskId) { - const struct UnknownStruct2 *r6 = gUnknown_083B5A7C[gTasks[taskId].data[1]].unk0; - const u16 *r8 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk4]; - const u16 *r7 = &gTasks[taskId].data[gUnknown_083B5A7C[gTasks[taskId].data[1]].unk5]; + const struct SearchOptionText *r6 = sSearchOptions[gTasks[taskId].data[1]].texts; + const u16 *r8 = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].data[1]].taskDataCursorPos]; + const u16 *r7 = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].data[1]].taskDataScrollOffset]; u16 i; u16 j; Menu_EraseWindowRect(18, 1, 28, 12); - for (i = 0, j = *r7; i < 6 && r6[j].text2 != NULL; i++, j++) + for (i = 0, j = *r7; i < 6 && r6[j].title != NULL; i++, j++) { #ifndef NONMATCHING j += 0; // Useless statement needed to match #endif - Menu_PrintText(r6[j].text2, 18, i * 2 + 1); + Menu_PrintText(r6[j].title, 18, i * 2 + 1); } - sub_8091E20(r6[*r8 + *r7].text1); + EraseAndPrintSearchTextBox(r6[*r8 + *r7].description); } -static u8 sub_8092E10(u8 taskId, u8 b) +static u8 GetSearchModeSelection(u8 taskId, u8 b) { - const u16 *ptr1 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk4]; - const u16 *ptr2 = &gTasks[taskId].data[gUnknown_083B5A7C[b].unk5]; + const u16 *ptr1 = &gTasks[taskId].data[sSearchOptions[b].taskDataCursorPos]; + const u16 *ptr2 = &gTasks[taskId].data[sSearchOptions[b].taskDataScrollOffset]; u16 r2 = *ptr1 + *ptr2; switch (b) @@ -5306,9 +5344,9 @@ static u8 sub_8092E10(u8 taskId, u8 b) default: return 0; case 5: - return gUnknown_083B5A60[r2]; + return sPokedexModes[r2]; case 4: - return gUnknown_083B5A62[r2]; + return sOrderOptions[r2]; case 0: if (r2 == 0) return 0xFF; @@ -5321,15 +5359,15 @@ static u8 sub_8092E10(u8 taskId, u8 b) return r2 - 1; case 2: case 3: - return gUnknown_083B5A68[r2]; + return sDexSearchTypeIds[r2]; } } -static void sub_8092EB0(u8 taskId) +static void SetDefaultSearchModeAndOrder(u8 taskId) { u16 r3; - switch (gPokedexView->unk614) + switch (gPokedexView->dexModeBackup) { default: case 0: @@ -5341,7 +5379,7 @@ static void sub_8092EB0(u8 taskId) } gTasks[taskId].data[2] = r3; - switch (gPokedexView->unk618) + switch (gPokedexView->dexOrderBackup) { default: case 0: @@ -5366,11 +5404,11 @@ static void sub_8092EB0(u8 taskId) gTasks[taskId].data[4] = r3; } -static bool8 sub_8092F44(u8 taskId) +static bool8 SearchParamCantScrollUp(u8 taskId) { u8 val1 = gTasks[taskId].data[1]; - const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; - u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; + const u16 *ptr = (const u16 *)&gTasks[taskId].data[sSearchOptions[val1].taskDataScrollOffset]; + u16 val2 = sSearchOptions[val1].numOptions - 1; if (val2 > 5 && *ptr != 0) return FALSE; @@ -5378,11 +5416,11 @@ static bool8 sub_8092F44(u8 taskId) return TRUE; } -static bool8 sub_8092F8C(u8 taskId) +static bool8 SearchParamCantScrollDown(u8 taskId) { u8 val1 = gTasks[taskId].data[1]; - const u16 *ptr = &gTasks[taskId].data[gUnknown_083B5A7C[val1].unk5]; - u16 val2 = gUnknown_083B5A7C[val1].unk6 - 1; + const u16 *ptr = (const u16 *)&gTasks[taskId].data[sSearchOptions[val1].taskDataScrollOffset]; + u16 val2 = sSearchOptions[val1].numOptions - 1; if (val2 > 5 && *ptr < val2 - 5) return FALSE; @@ -5390,22 +5428,22 @@ static bool8 sub_8092F8C(u8 taskId) return TRUE; } -static void sub_8092FD8(struct Sprite *sprite) +static void SpriteCB_SearchParameterScrollArrow(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].func == sub_8092644) + if (gTasks[sprite->data[0]].func == Task_HandleSearchParameterInput) { u8 val; if (sprite->data[1] != 0) { - if (sub_8092F8C(sprite->data[0])) + if (SearchParamCantScrollDown(sprite->data[0])) sprite->invisible = TRUE; else sprite->invisible = FALSE; } else { - if (sub_8092F44(sprite->data[0])) + if (SearchParamCantScrollUp(sprite->data[0])) sprite->invisible = TRUE; else sprite->invisible = FALSE; @@ -5420,18 +5458,18 @@ static void sub_8092FD8(struct Sprite *sprite) } } -static void sub_809308C(u8 taskId) +static void CreateSearchParameterScrollArrows(u8 taskId) { u8 spriteId; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 4, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 4, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 0; - gSprites[spriteId].callback = sub_8092FD8; + gSprites[spriteId].callback = SpriteCB_SearchParameterScrollArrow; - spriteId = CreateSprite(&gSpriteTemplate_83A053C, 184, 108, 0); + spriteId = CreateSprite(&sScrollArrowSpriteTemplate, 184, 108, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 1; gSprites[spriteId].vFlip = TRUE; - gSprites[spriteId].callback = sub_8092FD8; + gSprites[spriteId].callback = SpriteCB_SearchParameterScrollArrow; } diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 9abea27a1..914febd9c 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -11,37 +11,37 @@ extern struct SoundInfo gSoundInfo; extern struct MusicPlayerInfo gMPlayInfo_BGM; -struct Unk201C800 { - s8 unk_0; - s8 unk_1; - u8 unk_2; - u16 unk_4; +struct PokedexCryMeterNeedle { + s8 rotation; + s8 targetRotation; + u8 moveIncrement; + u16 spriteId; }; -struct PokedexCryScreen_201C000 +struct PokedexCryScreen { - u8 unk0000[0x10]; - u8 unk0010; - u8 unk0011; - u8 unk0012; - u16 unk0014; - u8 unk0016; + u8 cryWaveformBuffer[0x10]; + u8 cryState; + u8 playhead; + u8 waveformPreviousY; + u16 charBase; + u8 playStartPos; u16 species; - u8 unk001A; - u8 unk001B; + u8 cryOverrideCountdown; + u8 cryRepeatDelay; }; -void sub_811A0A0(u16 species); -void sub_811A0C0(void); -void sub_811A124(void); -void sub_811A15C(u8); -void sub_811A1C8(u8, u8); -void sub_811A324(void); -void sub_811A350(u8, u16, u8); -void sub_811A534(struct Sprite *); -void sub_811A6D8(s8); +void PlayCryScreenCry(u16 species); +void BufferCryWaveformSegment(void); +void DrawWaveformFlatline(void); +void AdvancePlayhead(u8 bgId); +void DrawWaveformSegment(u8 position, u8 amplitude); +void DrawWaveformWindow(void); +void ShiftWaveformOver(u8 bgId, s16 pos, u8 axis); +void SpriteCB_CryMeterNeedle(struct Sprite *); +void SetCryMeterNeedleTarget(s8); -u8 gUnknown_03005E98; +u8 gDexCryScreenState; // data/pokedex_cry_screen.o @@ -49,16 +49,16 @@ const u16 CryMeterNeedlePalette[] = INCBIN_U16("graphics/pokedex/cry_meter_needl const u8 CryMeterNeedleTiles[] = INCBIN_U8("graphics/pokedex/cry_meter_needle.4bpp"); #if ENGLISH -const u16 gUnknown_083FAE7C[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); -const u16 gUnknown_083FAF1C[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); -const u8 gUnknown_083FAF3C[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); +const u16 sCryMeter_Tilemap[] = INCBIN_U16("graphics/pokedex/cry_meter_map.bin"); +const u16 sCryMeter_Pal[] = INCBIN_U16("graphics/pokedex/cry_meter.gbapal"); +const u8 sCryMeter_Gfx[] = INCBIN_U8("graphics/pokedex/cry_meter.4bpp.lz"); #else -extern const u16 gUnknown_083FAE7C[]; -extern const u16 gUnknown_083FAF1C[]; -extern const u8 gUnknown_083FAF3C[]; +extern const u16 sCryMeter_Tilemap[]; +extern const u16 sCryMeter_Pal[]; +extern const u8 sCryMeter_Gfx[]; #endif // ENGLISH -const u16 gUnknown_083FB274[][72] = { +const u16 sWaveformOffsets[][72] = { { 0x0000, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C, 0x0400, 0x0404, 0x0408, 0x040C, 0x0410, 0x0414, 0x0418, 0x041C, @@ -142,13 +142,16 @@ const u16 gUnknown_083FB274[][72] = { } }; -struct PokedexCryScreen_201C000 * const gPokedexCryScreenPtr = (struct PokedexCryScreen_201C000 *)(gSharedMem + 0x1c000); +struct PokedexCryScreen * const gPokedexCryScreenPtr = &ePokedexCryScreen; -const u16 gUnknown_083FB6F8[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal"); -const u16 gUnknown_083FB718[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp"); +const u16 sCryScreenBg_Pal[] = INCBIN_U16("graphics/pokedex/83FB6F8.gbapal"); +const u16 sCryScreenBg_Gfx[] = INCBIN_U16("graphics/pokedex/83FB718.4bpp"); -const u8 gUnknown_083FB738[] = {0xF0, 0x0F}; -const u8 gUnknown_083FB73A[][16] = { +const u8 sWaveformTileDataNybbleMasks[] = {0xF0, 0x0F}; + +// Waveform is blue in the middle (8) grading to white at peaks (15) +// Split into two arrays for the two vertical slice halves +const u8 sWaveformColor[][16] = { { 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F @@ -158,32 +161,30 @@ const u8 gUnknown_083FB73A[][16] = { } }; -struct Unk201C800 * const gPokedexCryScreenPtr2 = (struct Unk201C800 *)(gSharedMem + 0x1c800); +struct PokedexCryMeterNeedle * const gPokedexCryScreenPtr2 = &ePokedexCryScreen2; -union AnimCmd gSpriteAnim_83FB760[] = { +union AnimCmd sAnim_CryMeterNeedle_0[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END }; -const union AnimCmd * gSpriteAnimTable_83FB768[] = { - gSpriteAnim_83FB760 -}; +const union AnimCmd *sAnimTable_CryMeterNeedle[] = { sAnim_CryMeterNeedle_0 }; -struct OamData gOamData_83FB76C = { +struct OamData sOamData_CryMeterNeedle = { .y = 160, .affineMode = ST_OAM_AFFINE_NORMAL, .size = 3, .priority = 1 }; -struct SpriteTemplate gSpriteTemplate_83FB774 = { +struct SpriteTemplate sSpriteTemplate_CryMeterNeedle = { 0x2000, 0x2000, - &gOamData_83FB76C, - gSpriteAnimTable_83FB768, + &sOamData_CryMeterNeedle, + sAnimTable_CryMeterNeedle, NULL, gDummySpriteAffineAnimTable, - sub_811A534 + SpriteCB_CryMeterNeedle }; struct SpriteSheet gCryMeterNeedleSpriteSheets[] = { @@ -202,640 +203,254 @@ struct SpritePalette gCryMeterNeedleSpritePalettes[] = { #define CRY_METER_MAP_WIDTH 32 #endif -#ifdef NONMATCHING -// caused by some switch branch weirdness -u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1) +bool8 LoadCryWaveformWindow(struct CryScreenWindow *cry, u8 bgId) { u8 i; u8 j; - u16 r6; - u16 r7; - u8 r9 = FALSE; - u32 offset; + u8 position; + u16 tileNum; + u16 screenBase; + bool8 finished = FALSE; - switch (gUnknown_03005E98) + switch (gDexCryScreenState) { - case 0: - gPokedexCryScreenPtr->unk0014 = cry->unk0; - gPokedexCryScreenPtr->unk0016 = cry->yPos; - gPokedexCryScreenPtr->unk001A = 0; - gPokedexCryScreenPtr->unk001B = 0; - gPokedexCryScreenPtr->unk0010 = 0; - gPokedexCryScreenPtr->unk0012 = 28; - gPokedexCryScreenPtr->unk0011 = 0; - sub_811A350(arg1, -8 * cry->xPos, 0); - for (i = 0; i < 7; i++) - { - for (j = 0; j < 32; j++) - { - DmaCopy16(3, gUnknown_083FB718, gSharedMem[32 * i + j], 32); - } - } - gUnknown_03005E98++; - break; - case 1: - r7 = cry->unk2 << 11; - r6 = (cry->paletteNo << 12) + ((unsigned)(cry->unk0 << 18) >> 23); - for (i = 0; i < 7; i++) + case 0: + gPokedexCryScreenPtr->charBase = cry->charBase; + gPokedexCryScreenPtr->playStartPos = cry->yPos; + gPokedexCryScreenPtr->cryOverrideCountdown = 0; + gPokedexCryScreenPtr->cryRepeatDelay = 0; + gPokedexCryScreenPtr->cryState = 0; + gPokedexCryScreenPtr->waveformPreviousY = 28; + gPokedexCryScreenPtr->playhead = 0; + ShiftWaveformOver(bgId, -8 * cry->xPos, 1); + for (i = 0; i < 7; i++) + { + for (j = 0; j < 32; j++) { - for (j = 0; j < 32; j++) - { - offset = j << 1; - offset += i << 6; - offset += r7; - *((u16 *)(VRAM + offset)) = r6++; - } + DmaCopy16(3, sCryScreenBg_Gfx, &sCryWaveformWindowTiledata[((32 * i) + j) * 32], 32); } - for (i = 0; i < gPokedexCryScreenPtr->unk0016 * 8; i++) + } + gDexCryScreenState++; + break; + case 1: + screenBase = cry->screenBase * 0x800; + tileNum = (cry->paletteNo << 12) + ((cry->charBase >> 5) & 0x1FF); + for (i = 0; i < 7; i++) + { + for (j = 0; j < 32; j++) { - sub_811A1C8(i, 0); + *((u16 *)(VRAM + (2 * j) + (64 * i) + screenBase)) = tileNum++; } - gUnknown_03005E98++; - break; - case 2: - sub_811A324(); - LoadPalette(gUnknown_083FB6F8, cry->paletteNo * 16, 32); - r9 = TRUE; - break; + } + for (position = 0; position < gPokedexCryScreenPtr->playStartPos * 8; position++) + { + DrawWaveformSegment(position, 0); + } + gDexCryScreenState++; + break; + case 2: + DrawWaveformWindow(); + LoadPalette(sCryScreenBg_Pal, cry->paletteNo * 16, 32); + finished = TRUE; + break; } - return r9; + return finished; } -#else -NAKED u8 sub_8119E3C(struct CryRelatedStruct *cry, u8 arg1) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tadds r5, r0, 0\n" - "\tlsls r1, 24\n" - "\tlsrs r2, r1, 24\n" - "\tmovs r0, 0\n" - "\tmov r9, r0\n" - "\tldr r6, _08119E60 @ =gUnknown_03005E98\n" - "\tldrb r0, [r6]\n" - "\tcmp r0, 0x1\n" - "\tbeq _08119EE0\n" - "\tcmp r0, 0x1\n" - "\tbgt _08119E64\n" - "\tcmp r0, 0\n" - "\tbeq _08119E6A\n" - "\tb _08119F74\n" - "\t.align 2, 0\n" - "_08119E60: .4byte gUnknown_03005E98\n" - "_08119E64:\n" - "\tcmp r0, 0x2\n" - "\tbeq _08119F60\n" - "\tb _08119F74\n" - "_08119E6A:\n" - "\tldr r4, _08119ECC @ =gSharedMem + 0x1C000\n" - "\tldrh r0, [r5]\n" - "\tmovs r1, 0\n" - "\tstrh r0, [r4, 0x14]\n" - "\tldrb r0, [r5, 0x5]\n" - "\tstrb r0, [r4, 0x16]\n" - "\tstrb r1, [r4, 0x1A]\n" - "\tstrb r1, [r4, 0x1B]\n" - "\tstrb r1, [r4, 0x10]\n" - "\tmovs r0, 0x1C\n" - "\tstrb r0, [r4, 0x12]\n" - "\tstrb r1, [r4, 0x11]\n" - "\tldrb r1, [r5, 0x4]\n" - "\tlsls r1, 19\n" - "\tnegs r1, r1\n" - "\tasrs r1, 16\n" - "\tadds r0, r2, 0\n" - "\tmovs r2, 0x1\n" - "\tbl sub_811A350\n" - "\tmovs r0, 0\n" - "\tmov r12, r6\n" - "\tldr r1, _08119ED0 @ =0x040000d4\n" - "\tldr r7, _08119ED4 @ =gUnknown_083FB718\n" - "\tldr r2, _08119ED8 @ =0xfffe4000\n" - "\tadds r6, r4, r2\n" - "\tldr r5, _08119EDC @ =0x80000010\n" - "_08119EA0:\n" - "\tmovs r3, 0\n" - "\tadds r4, r0, 0x1\n" - "\tlsls r2, r0, 5\n" - "_08119EA6:\n" - "\tstr r7, [r1]\n" - "\tadds r0, r2, r3\n" - "\tlsls r0, 5\n" - "\tadds r0, r6\n" - "\tstr r0, [r1, 0x4]\n" - "\tstr r5, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x1F\n" - "\tbls _08119EA6\n" - "\tlsls r0, r4, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x6\n" - "\tbls _08119EA0\n" - "\tmov r1, r12\n" - "\tb _08119F50\n" - "\t.align 2, 0\n" - "_08119ECC: .4byte gSharedMem + 0x1C000\n" - "_08119ED0: .4byte 0x040000d4\n" - "_08119ED4: .4byte gUnknown_083FB718\n" - "_08119ED8: .4byte 0xfffe4000\n" - "_08119EDC: .4byte 0x80000010\n" - "_08119EE0:\n" - "\tldrb r0, [r5, 0x2]\n" - "\tlsls r0, 27\n" - "\tlsrs r7, r0, 16\n" - "\tldrb r1, [r5, 0x3]\n" - "\tlsls r1, 12\n" - "\tldrh r0, [r5]\n" - "\tlsls r0, 18\n" - "\tlsrs r0, 23\n" - "\tadds r1, r0\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tmovs r0, 0\n" - "\tldr r2, _08119F58 @ =gSharedMem + 0x1C000\n" - "\tmov r8, r2\n" - "\tmovs r1, 0xC0\n" - "\tlsls r1, 19\n" - "\tmov r12, r1\n" - "_08119F02:\n" - "\tmovs r3, 0\n" - "\tadds r4, r0, 0x1\n" - "\tlsls r5, r0, 6\n" - "_08119F08:\n" - "\tlsls r1, r3, 1\n" - "\tadds r1, r5\n" - "\tadds r1, r7\n" - "\tadd r1, r12\n" - "\tadds r2, r6, 0\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r6, r0, 16\n" - "\tstrh r2, [r1]\n" - "\tadds r0, r3, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x1F\n" - "\tbls _08119F08\n" - "\tlsls r0, r4, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x6\n" - "\tbls _08119F02\n" - "\tmov r2, r8\n" - "\tldrb r0, [r2, 0x16]\n" - "\tmovs r4, 0\n" - "\tcmp r0, 0\n" - "\tbeq _08119F4E\n" - "\tmov r5, r8\n" - "_08119F38:\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0\n" - "\tbl sub_811A1C8\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldrb r0, [r5, 0x16]\n" - "\tlsls r0, 3\n" - "\tcmp r4, r0\n" - "\tblt _08119F38\n" - "_08119F4E:\n" - "\tldr r1, _08119F5C @ =gUnknown_03005E98\n" - "_08119F50:\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tb _08119F74\n" - "\t.align 2, 0\n" - "_08119F58: .4byte gSharedMem + 0x1C000\n" - "_08119F5C: .4byte gUnknown_03005E98\n" - "_08119F60:\n" - "\tbl sub_811A324\n" - "\tldr r0, _08119F84 @ =gUnknown_083FB6F8\n" - "\tldrb r1, [r5, 0x3]\n" - "\tlsls r1, 4\n" - "\tmovs r2, 0x20\n" - "\tbl LoadPalette\n" - "\tmovs r0, 0x1\n" - "\tmov r9, r0\n" - "_08119F74:\n" - "\tmov r0, r9\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_08119F84: .4byte gUnknown_083FB6F8"); -} -#endif // NONMATCHING -void sub_8119F88(u8 a0) +void UpdateCryWaveformWindow(u8 bgId) { u8 r4; - sub_811A324(); - sub_811A15C(a0); - if (gPokedexCryScreenPtr->unk001B) - gPokedexCryScreenPtr->unk001B--; - if (gPokedexCryScreenPtr->unk001A && !--gPokedexCryScreenPtr->unk001A) + DrawWaveformWindow(); + AdvancePlayhead(bgId); + if (gPokedexCryScreenPtr->cryRepeatDelay) + gPokedexCryScreenPtr->cryRepeatDelay--; + if (gPokedexCryScreenPtr->cryOverrideCountdown && !--gPokedexCryScreenPtr->cryOverrideCountdown) { - sub_811A0A0(gPokedexCryScreenPtr->species); - sub_811A124(); + PlayCryScreenCry(gPokedexCryScreenPtr->species); + DrawWaveformFlatline(); return; } - if (gPokedexCryScreenPtr->unk0010 == 0) + if (gPokedexCryScreenPtr->cryState == 0) { - sub_811A124(); + DrawWaveformFlatline(); return; } - if (gPokedexCryScreenPtr->unk0010 == 1) + if (gPokedexCryScreenPtr->cryState == 1) { - sub_811A0C0(); + BufferCryWaveformSegment(); } - else if (gPokedexCryScreenPtr->unk0010 > 8) + else if (gPokedexCryScreenPtr->cryState > 8) { if (!IsCryPlaying()) { - sub_811A124(); - gPokedexCryScreenPtr->unk0010 = 0; + DrawWaveformFlatline(); + gPokedexCryScreenPtr->cryState = 0; return; } - sub_811A0C0(); - gPokedexCryScreenPtr->unk0010 = 1; + BufferCryWaveformSegment(); + gPokedexCryScreenPtr->cryState = 1; } - r4 = 2 * (gPokedexCryScreenPtr->unk0010 - 1); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, gPokedexCryScreenPtr->unk0000[r4]); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, gPokedexCryScreenPtr->unk0000[r4 + 1]); - gPokedexCryScreenPtr->unk0010++; + r4 = 2 * (gPokedexCryScreenPtr->cryState - 1); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 2, + gPokedexCryScreenPtr->cryWaveformBuffer[r4]); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 1, + gPokedexCryScreenPtr->cryWaveformBuffer[r4 + 1]); + gPokedexCryScreenPtr->cryState++; } -void sub_811A050(u16 species) +void CryScreenPlayButton(u16 species) { - if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->unk001A) + if (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE && !gPokedexCryScreenPtr->cryOverrideCountdown) { - if (!gPokedexCryScreenPtr->unk001B) + if (!gPokedexCryScreenPtr->cryRepeatDelay) { - gPokedexCryScreenPtr->unk001B = 4; + gPokedexCryScreenPtr->cryRepeatDelay = 4; if (IsCryPlaying() == TRUE) { StopCry(); gPokedexCryScreenPtr->species = species; - gPokedexCryScreenPtr->unk001A = 2; + gPokedexCryScreenPtr->cryOverrideCountdown = 2; } else - sub_811A0A0(species); + PlayCryScreenCry(species); } } } -void sub_811A0A0(u16 species) +void PlayCryScreenCry(u16 species) { - PlayCry2(species, 0, 0x7d, 10); - gPokedexCryScreenPtr->unk0010 = 1; + PlayCry2(species, 0, 125, 10); + gPokedexCryScreenPtr->cryState = 1; } -// compiler refuses to put src into r0. this can't be solved with greg asm hacks -#ifdef NONMATCHING -void sub_811A0C0(void) +#define GetSrcBufferForCryWaveformSegment(counter) ({ \ + const s8 * p; \ + if ((counter) < 2) \ + p = gSoundInfo.pcmBuffer; \ + else \ + p = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank; \ + p + PCM_DMA_BUF_SIZE; \ +}) + +void BufferCryWaveformSegment(void) { const s8 * src; u8 i; - if (gPcmDmaCounter < 2) - src = gSoundInfo.pcmBuffer; - else - src = gSoundInfo.pcmBuffer + (gSoundInfo.pcmDmaPeriod + 1 - gPcmDmaCounter) * gSoundInfo.pcmSamplesPerVBlank; - - src += PCM_DMA_BUF_SIZE; + src = GetSrcBufferForCryWaveformSegment(gPcmDmaCounter); for (i = 0; i < 16; i++) - gPokedexCryScreenPtr->unk0000[i] = src[i * 2] * 2; - -} -#else -NAKED void sub_811A0C0(void) -{ - asm_unified("\tpush {r4,lr}\n" - "\tldr r3, _0811A0D0 @ =gPcmDmaCounter\n" - "\tmovs r0, 0\n" - "\tldrsb r0, [r3, r0]\n" - "\tcmp r0, 0x1\n" - "\tbgt _0811A0D8\n" - "\tldr r0, _0811A0D4 @ =gSoundInfo + 0x350\n" - "\tb _0811A0F0\n" - "\t.align 2, 0\n" - "_0811A0D0: .4byte gPcmDmaCounter\n" - "_0811A0D4: .4byte gSoundInfo + 0x350\n" - "_0811A0D8:\n" - "\tldr r2, _0811A11C @ =gSoundInfo\n" - "\tldrb r1, [r2, 0xB]\n" - "\tmovs r0, 0\n" - "\tldrsb r0, [r3, r0]\n" - "\tsubs r0, 0x1\n" - "\tsubs r1, r0\n" - "\tldr r0, [r2, 0x10]\n" - "\tmuls r0, r1\n" - "\tmovs r1, 0xD4\n" - "\tlsls r1, 2\n" - "\tadds r2, r1\n" - "\tadds r0, r2\n" - "_0811A0F0:\n" - "\tmovs r1, 0xC6\n" - "\tlsls r1, 3\n" - "\tadds r3, r0, r1\n" - "\tmovs r2, 0\n" - "\tldr r4, _0811A120 @ =gSharedMem + 0x1C000\n" - "_0811A0FA:\n" - "\tadds r1, r2, r4\n" - "\tlsls r0, r2, 1\n" - "\tadds r0, r3\n" - "\tldrb r0, [r0]\n" - "\tlsls r0, 24\n" - "\tasrs r0, 24\n" - "\tlsls r0, 1\n" - "\tstrb r0, [r1]\n" - "\tadds r0, r2, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r2, r0, 24\n" - "\tcmp r2, 0xF\n" - "\tbls _0811A0FA\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0811A11C: .4byte gSoundInfo\n" - "_0811A120: .4byte gSharedMem + 0x1C000"); + gPokedexCryScreenPtr->cryWaveformBuffer[i] = src[i * 2] * 2; + } -#endif // NONMATCHING -void sub_811A124(void) +void DrawWaveformFlatline(void) { - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 2, 0); - sub_811A1C8(gPokedexCryScreenPtr->unk0016 * 8 + gPokedexCryScreenPtr->unk0011 - 1, 0); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 2, 0); + DrawWaveformSegment(gPokedexCryScreenPtr->playStartPos * 8 + gPokedexCryScreenPtr->playhead - 1, 0); } -void sub_811A15C(u8 a0) +void AdvancePlayhead(u8 bgId) { u8 i; - u16 r3; - sub_811A350(a0, gPokedexCryScreenPtr->unk0011, 0); - gPokedexCryScreenPtr->unk0011 += 2; - r3 = (gPokedexCryScreenPtr->unk0011 / 8 + gPokedexCryScreenPtr->unk0016 + 1) % 32; + u16 offset; + + ShiftWaveformOver(bgId, gPokedexCryScreenPtr->playhead, 0); + gPokedexCryScreenPtr->playhead += 2; + offset = (gPokedexCryScreenPtr->playhead / 8 + gPokedexCryScreenPtr->playStartPos + 1) % 32; for (i = 0; i < 7; i++) { - DmaCopy16(3, gUnknown_083FB718, &gSharedMem[32 * (32 * i + r3)], 32); + DmaCopy16(3, sCryScreenBg_Gfx, &sCryWaveformWindowTiledata[32 * (32 * i + offset)], 32); } } -#ifdef NONMATCHING -void sub_811A1C8(u8 a0, u8 a1) +void DrawWaveformSegment(u8 position, u8 amplitude) { - u8 sp0; - u8 r7; - u8 r8; - u16 r1 = (a1 + 127) << 8; - u8 i = r1 / 1152.0; - if (i > 71 - 16) - i = 71 - 16; - sp0 = i; - r7 = a0 % 2; - r8 = a0 / 8; - if (i > gPokedexCryScreenPtr->unk0012) +#define PLAY_START_POS (position >> 3) +#define PLAYHEAD_POS (position & ((1 << 3) - 1)) +#define VERT_SLICE (position & 1) + u8 currentPointY; + u8 nybble; + u16 offset; + u16 temp; + u8 y; + + temp = (amplitude + 127) * 256; + y = temp / 1152.0; + if (y > 71 - 16) + y = 71 - 16; + currentPointY = y; + nybble = VERT_SLICE; + if (y > gPokedexCryScreenPtr->waveformPreviousY) { do { - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] &= gUnknown_083FB738[r7]; - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] |= gUnknown_083FB73A[r7][((i / 3) - 1) & 0x0F]; - i--; - } while (i > gPokedexCryScreenPtr->unk0012); + offset = sWaveformOffsets[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= sWaveformTileDataNybbleMasks[nybble]; + sCryWaveformWindowTiledata[offset] |= sWaveformColor[nybble][((y / 3) - 1) & 0x0F]; + y--; + } while (y > gPokedexCryScreenPtr->waveformPreviousY); } else { do { - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] &= gUnknown_083FB738[r7]; - gSharedMem[(u16)(r8 * 32 + gUnknown_083FB274[a0 % 8][i])] |= gUnknown_083FB73A[r7][((i / 3) - 1) & 0x0F]; - i++; - } while (i < gPokedexCryScreenPtr->unk0012); + offset = sWaveformOffsets[PLAYHEAD_POS][y] + PLAY_START_POS * TILE_SIZE_4BPP; + sCryWaveformWindowTiledata[offset] &= sWaveformTileDataNybbleMasks[nybble]; + sCryWaveformWindowTiledata[offset] |= sWaveformColor[nybble][((y / 3) - 1) & 0x0F]; + y++; + } while (y < gPokedexCryScreenPtr->waveformPreviousY); } - gPokedexCryScreenPtr->unk0012 = sp0; -} -#else -NAKED void sub_811A1C8(u8 a0, u8 a1) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0xC\n" - "\tlsls r5, r0, 24\n" - "\tlsrs r4, r5, 24\n" - "\tlsls r1, 24\n" - "\tmovs r0, 0xFE\n" - "\tlsls r0, 23\n" - "\tadds r1, r0\n" - "\tlsrs r1, 16\n" - "\tadds r0, r1, 0\n" - "\tbl __floatsidf\n" - "\tldr r3, _0811A280 @ =0x00000000\n" - "\tldr r2, _0811A27C @ =0x40920000\n" - "\tbl __divdf3\n" - "\tbl __fixunsdfsi\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tcmp r6, 0x37\n" - "\tbls _0811A1FE\n" - "\tmovs r6, 0x37\n" - "_0811A1FE:\n" - "\tstr r6, [sp]\n" - "\tmovs r7, 0x1\n" - "\tands r7, r4\n" - "\tldr r0, _0811A284 @ =gSharedMem + 0x1C000\n" - "\tmov r10, r0\n" - "\tlsrs r5, 27\n" - "\tmov r8, r5\n" - "\tldr r0, _0811A288 @ =gUnknown_083FB738\n" - "\tmov r1, r10\n" - "\tldrb r1, [r1, 0x12]\n" - "\tcmp r6, r1\n" - "\tbls _0811A298\n" - "\tadds r0, r7, r0\n" - "\tldrb r0, [r0]\n" - "\tmov r9, r0\n" - "\tmovs r2, 0x7\n" - "\tands r2, r4\n" - "_0811A220:\n" - "\tlsls r1, r6, 1\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 4\n" - "\tadds r1, r0\n" - "\tldr r3, _0811A28C @ =gUnknown_083FB274\n" - "\tadds r1, r3\n" - "\tmov r3, r8\n" - "\tlsls r0, r3, 5\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0811A290 @ =gSharedMem\n" - "\tadds r5, r0, r1\n" - "\tldrb r4, [r5]\n" - "\tmov r3, r9\n" - "\tands r4, r3\n" - "\tstrb r4, [r5]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0x3\n" - "\tstr r2, [sp, 0x8]\n" - "\tbl __udivsi3\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tsubs r0, 0x1\n" - "\tmovs r1, 0xF\n" - "\tands r0, r1\n" - "\tlsls r1, r7, 4\n" - "\tadds r0, r1\n" - "\tldr r1, _0811A294 @ =gUnknown_083FB73A\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0]\n" - "\torrs r4, r0\n" - "\tstrb r4, [r5]\n" - "\tsubs r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, [sp, 0x8]\n" - "\tldr r3, _0811A284 @ =gSharedMem + 0x1C000\n" - "\tldrb r3, [r3, 0x12]\n" - "\tcmp r6, r3\n" - "\tbhi _0811A220\n" - "\tb _0811A2FA\n" - "\t.align 2, 0\n" - "_0811A27C: .4byte 0x40920000\n" - "_0811A280: .4byte 0x00000000\n" - "_0811A284: .4byte gSharedMem + 0x1C000\n" - "_0811A288: .4byte gUnknown_083FB738\n" - "_0811A28C: .4byte gUnknown_083FB274\n" - "_0811A290: .4byte gSharedMem\n" - "_0811A294: .4byte gUnknown_083FB73A\n" - "_0811A298:\n" - "\tlsls r1, r7, 4\n" - "\tstr r1, [sp, 0x4]\n" - "\tadds r0, r7, r0\n" - "\tldrb r0, [r0]\n" - "\tmov r9, r0\n" - "\tmovs r7, 0x7\n" - "\tands r7, r4\n" - "_0811A2A6:\n" - "\tlsls r1, r6, 1\n" - "\tlsls r0, r7, 3\n" - "\tadds r0, r7\n" - "\tlsls r0, 4\n" - "\tadds r1, r0\n" - "\tldr r2, _0811A314 @ =gUnknown_083FB274\n" - "\tadds r1, r2\n" - "\tmov r3, r8\n" - "\tlsls r0, r3, 5\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0811A318 @ =gSharedMem\n" - "\tadds r5, r0, r1\n" - "\tldrb r4, [r5]\n" - "\tmov r2, r9\n" - "\tands r4, r2\n" - "\tstrb r4, [r5]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0x3\n" - "\tbl __udivsi3\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tsubs r0, 0x1\n" - "\tmovs r1, 0xF\n" - "\tands r0, r1\n" - "\tldr r3, [sp, 0x4]\n" - "\tadds r0, r3\n" - "\tldr r1, _0811A31C @ =gUnknown_083FB73A\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0]\n" - "\torrs r4, r0\n" - "\tstrb r4, [r5]\n" - "\tadds r0, r6, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, _0811A320 @ =gSharedMem + 0x1C000\n" - "\tldrb r2, [r2, 0x12]\n" - "\tcmp r6, r2\n" - "\tbcc _0811A2A6\n" - "_0811A2FA:\n" - "\tmov r3, sp\n" - "\tldrb r0, [r3]\n" - "\tmov r3, r10\n" - "\tstrb r0, [r3, 0x12]\n" - "\tadd sp, 0xC\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0811A314: .4byte gUnknown_083FB274\n" - "_0811A318: .4byte gSharedMem\n" - "_0811A31C: .4byte gUnknown_083FB73A\n" - "_0811A320: .4byte gSharedMem + 0x1C000"); + gPokedexCryScreenPtr->waveformPreviousY = currentPointY; + #undef PLAYHEAD_POS + #undef PLAY_START_POS + #undef VERT_SLICE } -#endif // NONMATCHING -void sub_811A324(void) +void DrawWaveformWindow(void) { - DmaCopy16(3, gSharedMem, VRAM + gPokedexCryScreenPtr->unk0014, 0x1c00); + DmaCopy16(3, sCryWaveformWindowTiledata, VRAM + gPokedexCryScreenPtr->charBase, 0x1c00); } -void sub_811A350(u8 a0, u16 a1, u8 a2) +void ShiftWaveformOver(u8 bgId, s16 pos, u8 axis) { - switch (a0) + switch (bgId) { case 0: - if (a2) - REG_BG0VOFS = a1; + if (axis) + REG_BG0VOFS = pos; else - REG_BG0HOFS = a1; + REG_BG0HOFS = pos; break; case 1: - if (a2) - REG_BG1VOFS = a1; + if (axis) + REG_BG1VOFS = pos; else - REG_BG1HOFS = a1; + REG_BG1HOFS = pos; break; case 2: - if (a2) - REG_BG2VOFS = a1; + if (axis) + REG_BG2VOFS = pos; else - REG_BG2HOFS = a1; + REG_BG2HOFS = pos; break; case 3: - if (a2) - REG_BG3VOFS = a1; + if (axis) + REG_BG3VOFS = pos; else - REG_BG3HOFS = a1; + REG_BG3HOFS = pos; break; } } -u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { +bool8 ShowPokedexCryScreen(struct CryScreenWindow *cry, UNUSED u8 arg1) { int returnVal = FALSE; - switch (gUnknown_03005E98) + switch (gDexCryScreenState) { case 0: - LZ77UnCompVram(gUnknown_083FAF3C, (void *) (VRAM + cry->unk0)); - LoadPalette(&gUnknown_083FAF1C, cry->paletteNo * 16, 0x20); - gUnknown_03005E98 += 1; + LZ77UnCompVram(sCryMeter_Gfx, (void *) (VRAM + cry->charBase)); + LoadPalette(sCryMeter_Pal, cry->paletteNo * 16, 0x20); + gDexCryScreenState++; break; case 1: @@ -845,9 +460,9 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { u32 r12; int x, y; - vram = BG_SCREEN_ADDR(cry->unk2); + vram = BG_SCREEN_ADDR(cry->screenBase); - r12 = (u32) (cry->unk0 << 18) >> 23; + r12 = (cry->charBase >> 5) & 0x1FF; for (row = 0; row < 8; row++) { @@ -855,11 +470,11 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { { y = row + cry->yPos; x = col + cry->xPos; - *(u16 *) (vram + (y * 64 + x * 2)) = (gUnknown_083FAE7C[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; + *(u16 *) (vram + (y * 64 + x * 2)) = (sCryMeter_Tilemap[row * CRY_METER_MAP_WIDTH + col] | (cry->paletteNo << 12)) + r12; } } - gUnknown_03005E98 += 1; + gDexCryScreenState += 1; break; } @@ -867,10 +482,10 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { { LoadSpriteSheets(gCryMeterNeedleSpriteSheets); LoadSpritePalettes(gCryMeterNeedleSpritePalettes); - gPokedexCryScreenPtr2->unk_4 = CreateSprite(&gSpriteTemplate_83FB774, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); - gPokedexCryScreenPtr2->unk_0 = 0x20; - gPokedexCryScreenPtr2->unk_1 = 0x20; - gPokedexCryScreenPtr2->unk_2 = 0; + gPokedexCryScreenPtr2->spriteId = CreateSprite(&sSpriteTemplate_CryMeterNeedle, 40 + cry->xPos * 8, 56 + cry->yPos * 8, 1); + gPokedexCryScreenPtr2->rotation = 0x20; + gPokedexCryScreenPtr2->targetRotation = 0x20; + gPokedexCryScreenPtr2->moveIncrement = 0; returnVal = TRUE; break; @@ -882,82 +497,84 @@ u8 ShowPokedexCryScreen(struct CryRelatedStruct *cry, u8 arg1) { void DestroyCryMeterNeedleSprite(void) { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->unk_4].oam.paletteNum)); - DestroySprite(gSprites + gPokedexCryScreenPtr2->unk_4); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[gPokedexCryScreenPtr2->spriteId].oam.paletteNum)); + DestroySprite(gSprites + gPokedexCryScreenPtr2->spriteId); } -void sub_811A534(struct Sprite * sprite) +void SpriteCB_CryMeterNeedle(struct Sprite * sprite) { u16 i; - s8 r3; + s8 peakAmplitude; s16 x; s16 y; - struct ObjAffineSrcData sp04; - struct OamMatrix sp0c; + struct ObjAffineSrcData affine; + struct OamMatrix matrix; u8 * r0; - gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[gPokedexCryScreenPtr2->unk_4].oam.affineParam = 0; - switch (gPokedexCryScreenPtr->unk0010) + gSprites[gPokedexCryScreenPtr2->spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[gPokedexCryScreenPtr2->spriteId].oam.affineParam = 0; + switch (gPokedexCryScreenPtr->cryState) { case 0: - gPokedexCryScreenPtr2->unk_1 = 0x20; - if (gPokedexCryScreenPtr2->unk_0 > 0) + gPokedexCryScreenPtr2->targetRotation = 0x20; + if (gPokedexCryScreenPtr2->rotation > 0) { - if (gPokedexCryScreenPtr2->unk_2 != 1) - gPokedexCryScreenPtr2->unk_2--; + if (gPokedexCryScreenPtr2->moveIncrement != 1) + gPokedexCryScreenPtr2->moveIncrement--; } else - gPokedexCryScreenPtr2->unk_2 = 5; + gPokedexCryScreenPtr2->moveIncrement = 5; break; case 2: - r3 = 0; + peakAmplitude = 0; for (i = 0; i < 16; i++) { - if (r3 < gPokedexCryScreenPtr->unk0000[i]) - r3 = gPokedexCryScreenPtr->unk0000[i]; + if (peakAmplitude < gPokedexCryScreenPtr->cryWaveformBuffer[i]) + peakAmplitude = gPokedexCryScreenPtr->cryWaveformBuffer[i]; } - sub_811A6D8(r3 * 0xd0 / 0x100); + SetCryMeterNeedleTarget(peakAmplitude * 0xd0 / 0x100); break; case 6: - r0 = &gPokedexCryScreenPtr->unk0000[10]; - sub_811A6D8(*r0 * 0xd0 / 0x100); + r0 = &gPokedexCryScreenPtr->cryWaveformBuffer[10]; + SetCryMeterNeedleTarget(*r0 * 0xd0 / 0x100); break; } - if (gPokedexCryScreenPtr2->unk_0 == gPokedexCryScreenPtr2->unk_1) - ; - else if (gPokedexCryScreenPtr2->unk_0 < gPokedexCryScreenPtr2->unk_1) + if (gPokedexCryScreenPtr2->rotation == gPokedexCryScreenPtr2->targetRotation) + ; // Empty, needle has reached target + else if (gPokedexCryScreenPtr2->rotation < gPokedexCryScreenPtr2->targetRotation) { - if ((gPokedexCryScreenPtr2->unk_0 += gPokedexCryScreenPtr2->unk_2) > gPokedexCryScreenPtr2->unk_1) + // Rotate needle left + if ((gPokedexCryScreenPtr2->rotation += gPokedexCryScreenPtr2->moveIncrement) > gPokedexCryScreenPtr2->targetRotation) { - gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1; - gPokedexCryScreenPtr2->unk_1 = 0; + gPokedexCryScreenPtr2->rotation = gPokedexCryScreenPtr2->targetRotation; + gPokedexCryScreenPtr2->targetRotation = 0; } } else { - if ((gPokedexCryScreenPtr2->unk_0 -= gPokedexCryScreenPtr2->unk_2) < gPokedexCryScreenPtr2->unk_1) + // Rotate needle right + if ((gPokedexCryScreenPtr2->rotation -= gPokedexCryScreenPtr2->moveIncrement) < gPokedexCryScreenPtr2->targetRotation) { - gPokedexCryScreenPtr2->unk_0 = gPokedexCryScreenPtr2->unk_1; - gPokedexCryScreenPtr2->unk_1 = 0; + gPokedexCryScreenPtr2->rotation = gPokedexCryScreenPtr2->targetRotation; + gPokedexCryScreenPtr2->targetRotation = 0; } } - sp04.xScale = 0x100; - sp04.yScale = 0x100; - sp04.rotation = gPokedexCryScreenPtr2->unk_0 * 256; - ObjAffineSet(&sp04, &sp0c, 1, 2); - SetOamMatrix(0, sp0c.a, sp0c.b, sp0c.c, sp0c.d); - x = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF)]; - y = gSineTable[((gPokedexCryScreenPtr2->unk_0 + 0x7F) & 0xFF) + 0x40]; + affine.xScale = 0x100; + affine.yScale = 0x100; + affine.rotation = gPokedexCryScreenPtr2->rotation * 256; + ObjAffineSet(&affine, &matrix, 1, 2); + SetOamMatrix(0, matrix.a, matrix.b, matrix.c, matrix.d); + x = gSineTable[((gPokedexCryScreenPtr2->rotation + 0x7F) & 0xFF)]; + y = gSineTable[((gPokedexCryScreenPtr2->rotation + 0x7F) & 0xFF) + 0x40]; sprite->pos2.x = x * 24 / 256; sprite->pos2.y = y * 24 / 256; } -void sub_811A6D8(s8 a0) +void SetCryMeterNeedleTarget(s8 offset) { - u16 r2 = (0x20 - a0) & 0xff; - if (r2 > 0x20 && r2 < 0xe0) - r2 = 0xe0; - gPokedexCryScreenPtr2->unk_1 = r2; - gPokedexCryScreenPtr2->unk_2 = 5; + u16 rotation = (0x20 - offset) & 0xff; + if (rotation > 0x20 && rotation < 0xe0) + rotation = 0xe0; + gPokedexCryScreenPtr2->targetRotation = rotation; + gPokedexCryScreenPtr2->moveIncrement = 5; } diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 17f0aa768..db31ec47a 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -36,7 +36,7 @@ extern u16 gBattleMovePower; extern u16 gTrainerBattleOpponent; extern struct PokemonStorage gPokemonStorage; -EWRAM_DATA struct SpriteTemplate gUnknown_02024E8C = {0}; +EWRAM_DATA struct SpriteTemplate gCreatingSpriteTemplate = {0}; extern u8 gBadEggNickname[]; extern const struct SpriteTemplate gSpriteTemplate_8208288[]; @@ -152,26 +152,28 @@ u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) const struct SpriteTemplate gSpriteTemplate_8208288[] = { {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, - {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, + gAffineAnims_BattleSpriteOpponentSide, oac_poke_opponent}, {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, - {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, + gAffineAnims_BattleSpriteOpponentSide, oac_poke_opponent}, }; void GetMonSpriteTemplate_803C56C(u16 species, u8 a2) { - gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; - gUnknown_02024E8C.paletteTag = species; - gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? + gCreatingSpriteTemplate = gSpriteTemplate_8208288[a2]; + gCreatingSpriteTemplate.paletteTag = species; + gCreatingSpriteTemplate.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? } void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) { - gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; - gUnknown_02024E8C.paletteTag = species; + gCreatingSpriteTemplate = gSpriteTemplate_8208288[a2]; + gCreatingSpriteTemplate.paletteTag = species; if (a2 == 0 || a2 == 2) - gUnknown_02024E8C.anims = gUnknown_081ECACC[species]; + gCreatingSpriteTemplate.anims = gUnknown_081ECACC[species]; else - gUnknown_02024E8C.anims = gUnknown_081EC2A4[species]; + gCreatingSpriteTemplate.anims = gUnknown_081EC2A4[species]; } void EncryptBoxMon(struct BoxPokemon *boxMon) @@ -1077,27 +1079,27 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) for (i = 0; i < 6; i++) { - if (eSecretBaseRecord->partySpecies[i]) + if (eSecretBaseRecord->party.species[i]) { CreateMon(&gEnemyParty[i], - eSecretBaseRecord->partySpecies[i], - eSecretBaseRecord->partyLevels[i], + eSecretBaseRecord->party.species[i], + eSecretBaseRecord->party.levels[i], 15, 1, - eSecretBaseRecord->partyPersonality[i], + eSecretBaseRecord->party.personality[i], 2, 0); // these two SetMonData calls require the (u8 *) cast since SetMonData is declared in this function. - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&eSecretBaseRecord->partyHeldItems[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, (u8 *)&eSecretBaseRecord->party.heldItems[i]); for (j = 0; j < 6; j++) - SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &eSecretBaseRecord->partyEVs[i]); + SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &eSecretBaseRecord->party.EVs[i]); for (j = 0; j < 4; j++) { - SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&eSecretBaseRecord->partyMoves[i * 4 + j]); - SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[eSecretBaseRecord->partyMoves[i * 4 + j]].pp); + SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, (u8 *)&eSecretBaseRecord->party.moves[i * 4 + j]); + SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[eSecretBaseRecord->party.moves[i * 4 + j]].pp); } } } @@ -1188,6 +1190,7 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) { s32 i; s8 nickname[POKEMON_NAME_LENGTH * 2]; + u16 * hpSwitchout; gBattleMons[battleIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL); gBattleMons[battleIndex].item = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM, NULL); @@ -1226,7 +1229,9 @@ void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex) GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); StringCopy10(gBattleMons[battleIndex].nickname, nickname); GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battleIndex].otName); - ewram160BC[GetBattlerSide(battleIndex)] = gBattleMons[battleIndex].hp; + + hpSwitchout = &gBattleStruct->HP_OnSwitchout[GetBattlerSide(battleIndex)]; + *hpSwitchout = gBattleMons[battleIndex].hp; for (i = 0; i < 8; i++) gBattleMons[battleIndex].statStages[i] = 6; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 16c2f3738..2e71154b9 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -473,7 +473,7 @@ u16 SpeciesToCryId(u16 species) void unref_sub_803F938(u16 species, u32 personality, u8 *dest) { - if (species == SPECIES_SPINDA && dest != gUnknown_081FAF4C[0] && dest != gUnknown_081FAF4C[2]) + if (species == SPECIES_SPINDA && dest != gMonSpriteGfx_Sprite_ptr[0] && dest != gMonSpriteGfx_Sprite_ptr[2]) { int i; for (i = 0; i < 4; i++) diff --git a/src/pokemon_storage_system_2.c b/src/pokemon_storage_system_2.c index 79ebc93ee..e3f007bb3 100644 --- a/src/pokemon_storage_system_2.c +++ b/src/pokemon_storage_system_2.c @@ -1706,7 +1706,7 @@ void sub_80981F0(u16 species, u32 pid) { if (species != SPECIES_NONE) { - HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, 1, (intptr_t)gPokemonStorageSystemPtr->unk_4784, gPokemonStorageSystemPtr->unk_2784, species, pid); + HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, 1, gPokemonStorageSystemPtr->unk_4784, gPokemonStorageSystemPtr->unk_2784, species, pid); LZ77UnCompWram(gPokemonStorageSystemPtr->unk_11e8, gPokemonStorageSystemPtr->unk_2704); CpuCopy32(gPokemonStorageSystemPtr->unk_2784, gPokemonStorageSystemPtr->unk_26fc, 0x800); LoadPalette(gPokemonStorageSystemPtr->unk_2704, gPokemonStorageSystemPtr->unk_26fa, 0x20); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 9d1aa99db..32b40566c 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -126,7 +126,7 @@ extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlayInfo_BGM; extern u8 gPPUpReadMasks[]; TaskFunc gUnknown_03005CF0; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; extern const u8 gStatusPal_Icons[]; extern const u8 gStatusGfx_Icons[]; @@ -1838,8 +1838,8 @@ static u8 SummaryScreen_LoadPokemonSprite(struct Pokemon *mon, u8 *state) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - ewram_addr, - gUnknown_081FAF4C[1], + (void *)EWRAM, + gMonSpriteGfx_Sprite_ptr[1], species, personality); *state += 1; @@ -3988,7 +3988,7 @@ u8 SummaryScreen_CreatePokemonSprite(struct Pokemon *mon) u8 spriteId; species = GetMonData(mon, MON_DATA_SPECIES2); - spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5); + spriteId = CreateSprite(&gCreatingSpriteTemplate, 40, 64, 5); FreeSpriteOamMatrix(&gSprites[spriteId]); diff --git a/src/pokenav.c b/src/pokenav.c index ee2a4e676..8b9040e12 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -4626,7 +4626,7 @@ void sub_80F4824(s16 arg0, u8 arg1) &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, 1, - (intptr_t)gPokenavStructPtr->unk131E4, + gPokenavStructPtr->unk131E4, gPokenavStructPtr->unkD1E4[arg1], species, personality); diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index d0fbbec85..7c8c37c9e 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -1,14 +1,14 @@ #include "global.h" +#include "constants/heal_locations.h" +#include "contest_util.h" #include "event_data.h" #include "hall_of_fame.h" #include "load_save.h" #include "main.h" -#include "pokemon.h" #include "overworld.h" -#include "script_pokemon_80C4.h" -#include "constants/heal_locations.h" +#include "pokemon.h" -extern u8 gUnknown_02039324; +extern u8 gHasHallOfFameRecords; int GameClear(void) { @@ -19,11 +19,11 @@ int GameClear(void) if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE) { - gUnknown_02039324 = 1; + gHasHallOfFameRecords = 1; } else { - gUnknown_02039324 = 0; + gHasHallOfFameRecords = 0; FlagSet(FLAG_SYS_GAME_CLEAR); } diff --git a/src/record_mixing.c b/src/record_mixing.c index 1bf92bb41..f04c2ecb0 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -677,7 +677,7 @@ void sub_80BA00C(u8 taskId) task->data[1]++; if (task->data[1] > 10) { - sub_800832C(); + SetCloseLinkCallback(); task->data[0]++; } break; diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index ad18b3594..8254921a4 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -9,8 +9,8 @@ #include "data2.h" #include "ewram.h" -extern struct SpriteTemplate gUnknown_02024E8C; -extern struct Window gUnknown_03004210; +extern struct SpriteTemplate gCreatingSpriteTemplate; +extern struct Window gWindowTemplate_Contest_MoveDescription; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; extern u8 gBankInMenu; @@ -72,7 +72,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) ScanlineEffect_Clear(); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gWindowTemplate_Contest_MoveDescription, &gWindowTemplate_81E6C58); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; gBattle_BG1_X = 0; @@ -201,7 +201,7 @@ static bool8 LoadAppropiateBankSprite(u8 bank) { if (GetBattlerSide(bank)) { - if (!ewram17800[bank].substituteSprite) + if (!gBattleSpriteInfo[bank].substituteSprite) BattleLoadOpponentMonSprite(&gEnemyParty[gBattlerPartyIndexes[bank]], bank); else BattleLoadSubstituteSprite(bank, 0); @@ -210,7 +210,7 @@ static bool8 LoadAppropiateBankSprite(u8 bank) LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, 0); else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) LoadPlayerTrainerBankSprite(2, 0); - else if (!ewram17800[bank].substituteSprite) + else if (!gBattleSpriteInfo[bank].substituteSprite) BattleLoadPlayerMonSprite(&gPlayerParty[gBattlerPartyIndexes[bank]], bank); else BattleLoadSubstituteSprite(bank, 0); @@ -226,7 +226,7 @@ static void sub_807B184(u8 bank) { u8 posY; - if (ewram17800[bank].substituteSprite) + if (gBattleSpriteInfo[bank].substituteSprite) posY = sub_8077F7C(bank); else posY = sub_8077F68(bank); @@ -235,7 +235,7 @@ static void sub_807B184(u8 bank) if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0) return; GetMonSpriteTemplate_803C56C(GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES), GetBattlerPosition(bank)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[bank]].data[0] = bank; @@ -245,7 +245,7 @@ static void sub_807B184(u8 bank) else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0) { GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBattlerPosition(0)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50, + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, 0x50, (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, GetBattlerSubpriority(0)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; @@ -255,7 +255,7 @@ static void sub_807B184(u8 bank) else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0) { GetMonSpriteTemplate_803C5A0(2, GetBattlerPosition(0)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, 0x50, + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, 0x50, (8 - gTrainerBackPicCoords[2].coords) * 4 + 80, GetBattlerSubpriority(0)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; @@ -267,14 +267,14 @@ static void sub_807B184(u8 bank) if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_HP) == 0) return; GetMonSpriteTemplate_803C56C(GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES), GetBattlerPosition(bank)); - gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_02024E8C, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); + gBattlerSpriteIds[bank] = CreateSprite(&gCreatingSpriteTemplate, GetBattlerSpriteCoord(bank, 2), posY, GetBattlerSubpriority(bank)); gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank; gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy; gSprites[gBattlerSpriteIds[bank]].data[0] = bank; gSprites[gBattlerSpriteIds[bank]].data[2] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES); StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]); } - gSprites[gBattlerSpriteIds[bank]].invisible = ewram17800[bank].invisible; + gSprites[gBattlerSpriteIds[bank]].invisible = gBattleSpriteInfo[bank].invisible; } } diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 036209fbf..89ef50037 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -172,10 +172,10 @@ u8 GetBattlerSpriteCoord(u8 slot, u8 a2) default: if (IsContest()) { - if (shared19348.unk4_0) - species = shared19348.unk2; + if (gContestResources__moveAnim.hasTargetAnim) + species = gContestResources__moveAnim.targetSpecies; else - species = shared19348.unk0; + species = gContestResources__moveAnim.species; } else { @@ -197,9 +197,9 @@ u8 GetBattlerSpriteCoord(u8 slot, u8 a2) } } if (a2 == 3) - var = sub_8077E44(slot, species, 1); + var = GetBattlerSpriteFinal_Y(slot, species, 1); else - var = sub_8077E44(slot, species, 0); + var = GetBattlerSpriteFinal_Y(slot, species, 0); break; } return var; @@ -219,10 +219,10 @@ u8 sub_8077BFC(u8 slot, u16 species) { if (IsContest()) { - if (shared19348.unk4_0) - personality = shared19348.unk10; + if (gContestResources__moveAnim.hasTargetAnim) + personality = gContestResources__moveAnim.unk10; else - personality = shared19348.unk8; + personality = gContestResources__moveAnim.personality; } else { @@ -302,7 +302,7 @@ u8 sub_8077DD8(u8 slot, u16 species) return ret; } -u8 sub_8077E44(u8 slot, u16 species, u8 a3) +u8 GetBattlerSpriteFinal_Y(u8 slot, u16 species, u8 a3) { u16 offset; u8 y; @@ -335,10 +335,10 @@ u8 sub_8077EE4(u8 slot, u8 a2) { if (IsContest()) { - if (shared19348.unk4_0) - species = shared19348.unk2; + if (gContestResources__moveAnim.hasTargetAnim) + species = gContestResources__moveAnim.targetSpecies; else - species = shared19348.unk0; + species = gContestResources__moveAnim.species; } else { @@ -349,9 +349,9 @@ u8 sub_8077EE4(u8 slot, u8 a2) species = transform->species; } if (a2 == 3) - return sub_8077E44(slot, species, 1); + return GetBattlerSpriteFinal_Y(slot, species, 1); else - return sub_8077E44(slot, species, 0); + return GetBattlerSpriteFinal_Y(slot, species, 0); } else { @@ -1756,7 +1756,7 @@ u16 sub_8079B10(u8 sprite) { if (IsContest()) { - species = shared19348.unk0; + species = gContestResources__moveAnim.species; return gMonBackPicCoords[species].y_offset; } else @@ -1943,7 +1943,7 @@ u8 sub_8079F44(u16 species, bool8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - EWRAM, + (void *)EWRAM, (void *)EWRAM, species, a7, @@ -1957,7 +1957,7 @@ u8 sub_8079F44(u16 species, bool8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a &gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, - EWRAM, + (void *)EWRAM, (void *)EWRAM, species, a7, @@ -1974,7 +1974,7 @@ u8 sub_8079F44(u16 species, bool8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a if (IsContest()) { - gSprites[sprite].affineAnims = gSpriteAffineAnimTable_81E7C18; + gSprites[sprite].affineAnims = gAffineAnims_BattleSpriteContest; StartSpriteAffineAnim(&gSprites[sprite], 0); } return sprite; @@ -1997,15 +1997,15 @@ s16 GetBattlerSpriteCoordAttr(u8 slot, u8 a2) if (IsContest()) { - if (shared19348.unk4_0) + if (gContestResources__moveAnim.hasTargetAnim) { - species = shared19348.unk2; - personality = shared19348.unk10; + species = gContestResources__moveAnim.targetSpecies; + personality = gContestResources__moveAnim.unk10; } else { - species = shared19348.unk0; - personality = shared19348.unk8; + species = gContestResources__moveAnim.species; + personality = gContestResources__moveAnim.personality; } if (species == SPECIES_UNOWN) { diff --git a/src/scrcmd.c b/src/scrcmd.c index 1a2d55f2e..c51bd2b10 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -3,16 +3,19 @@ #include "berry.h" #include "clock.h" #include "coins.h" -#include "contest_link_80C2020.h" +#include "constants/maps.h" +#include "contest_link_util.h" #include "contest_painting.h" +#include "contest_util.h" #include "data2.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" +#include "event_object_lock.h" +#include "event_object_movement.h" #include "field_door.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "event_object_movement.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -22,27 +25,24 @@ #include "fieldmap.h" #include "item.h" #include "main.h" -#include "event_object_lock.h" #include "menu.h" #include "money.h" #include "mystery_event_script.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" #include "pokemon.h" #include "random.h" -#include "overworld.h" #include "rtc.h" #include "script.h" #include "script_menu.h" #include "script_movement.h" -#include "script_pokemon_80C4.h" #include "script_pokemon_80F9.h" #include "shop.h" #include "slot_machine.h" #include "sound.h" #include "string_util.h" #include "tv.h" -#include "constants/maps.h" typedef u16 (*SpecialFunc)(void); typedef void (*NativeFunc)(void); @@ -1411,7 +1411,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx) u8 v1 = ScriptReadByte(ctx); if (v1) - sub_8106630(v1); + SetContestWinnerForPainting(v1); ShowContestWinner(); ScriptContext1_Stop(); return TRUE; @@ -1831,7 +1831,7 @@ bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx) bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx) { - sub_80C4980(gSpecialVar_ContestCategory); + ContestLinkTransfer(gSpecialVar_ContestCategory); ScriptContext1_Stop(); return TRUE; } diff --git a/src/secret_base.c b/src/secret_base.c index b37da51d1..cf09a7544 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -147,13 +147,13 @@ void ClearSecretBase(struct SecretBaseRecord *record) record->playerName[i] = 0xff; for (i = 0; i < 4; i++) record->trainerId[i] = 0x00; - record->sbr_field_e = 0; - record->sbr_field_10 = 0; - record->sbr_field_11 = 0; - record->sbr_field_1_0 = 0; + record->numSecretBasesReceived = 0; + record->numTimesEntered = 0; + record->unused = 0; + record->toRegister = 0; record->gender = 0; - record->sbr_field_1_5 = 0; - record->sbr_field_1_6 = 0; + record->battledOwnerToday = 0; + record->registryStatus = 0; for (i = 0; i < 16; i++) { record->decorations[i] = 0; @@ -162,12 +162,12 @@ void ClearSecretBase(struct SecretBaseRecord *record) for (i = 0; i < 6; i++) { for (j = 0; j < 4; j++) - record->partyMoves[i * 4 + j] = 0; - record->partyPersonality[i] = 0; - record->partyEVs[i] = 0; - record->partySpecies[i] = 0; - record->partyHeldItems[i] = 0; - record->partyLevels[i] = 0; + record->party.moves[i * 4 + j] = 0; + record->party.personality[i] = 0; + record->party.EVs[i] = 0; + record->party.species[i] = 0; + record->party.heldItems[i] = 0; + record->party.levels[i] = 0; } } @@ -373,8 +373,8 @@ void sub_80BBA48(u8 taskid) break; case 2: curbaseid = VarGet(VAR_CURRENT_SECRET_BASE); - if (gSaveBlock1.secretBases[curbaseid].sbr_field_10 < 0xff) - gSaveBlock1.secretBases[curbaseid].sbr_field_10++; + if (gSaveBlock1.secretBases[curbaseid].numTimesEntered < 0xff) + gSaveBlock1.secretBases[curbaseid].numTimesEntered++; sub_80BBA14(); WarpIntoMap(); gFieldCallback = sub_8080990; @@ -660,7 +660,7 @@ void BufferSecretBaseOwnerName(void) bool8 sub_80BC268(u8 i) { - if (gSaveBlock1.secretBases[i].sbr_field_1_6) + if (gSaveBlock1.secretBases[i].registryStatus) return TRUE; else return FALSE; @@ -686,24 +686,24 @@ void SetPlayerSecretBaseRecordMixingParty(void) { u16 j; for (j = 0; j < 4; j++) - record->partyMoves[i * 4 + j] = MOVE_NONE; + record->party.moves[i * 4 + j] = MOVE_NONE; - record->partySpecies[i] = SPECIES_NONE; - record->partyHeldItems[i] = ITEM_NONE; - record->partyLevels[i] = 0; - record->partyPersonality[i] = 0; - record->partyEVs[i] = 0; + record->party.species[i] = SPECIES_NONE; + record->party.heldItems[i] = ITEM_NONE; + record->party.levels[i] = 0; + record->party.personality[i] = 0; + record->party.EVs[i] = 0; if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { for (j = 0; j < 4; j++) - record->partyMoves[secretBasePartyIndex * 4 + j] = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j); + record->party.moves[secretBasePartyIndex * 4 + j] = GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j); - record->partySpecies[secretBasePartyIndex] = GetMonData(&(gPlayerParty[i]), MON_DATA_SPECIES); - record->partyHeldItems[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - record->partyLevels[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - record->partyPersonality[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); - record->partyEVs[secretBasePartyIndex] = CalculateMonAverageEVs(&gPlayerParty[i]); + record->party.species[secretBasePartyIndex] = GetMonData(&(gPlayerParty[i]), MON_DATA_SPECIES); + record->party.heldItems[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + record->party.levels[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + record->party.personality[secretBasePartyIndex] = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + record->party.EVs[secretBasePartyIndex] = CalculateMonAverageEVs(&gPlayerParty[i]); secretBasePartyIndex++; } } @@ -711,9 +711,9 @@ void SetPlayerSecretBaseRecordMixingParty(void) void sub_80BC440(void) { - u16 backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + u16 backupValue = gSaveBlock1.secretBases[0].numSecretBasesReceived; ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; + gSaveBlock1.secretBases[0].numSecretBasesReceived = backupValue; sub_80BC0F8(); } @@ -760,9 +760,9 @@ void MoveSecretBase(void) sub_80BC474(); IncrementGameStat(GAME_STAT_MOVED_SECRET_BASE); - backupValue = gSaveBlock1.secretBases[0].sbr_field_e; + backupValue = gSaveBlock1.secretBases[0].numSecretBasesReceived; ResetSecretBase(0); - gSaveBlock1.secretBases[0].sbr_field_e = backupValue; + gSaveBlock1.secretBases[0].numSecretBasesReceived = backupValue; } u8 sub_80BC538(void) @@ -790,7 +790,7 @@ void GetCurSecretBaseRegistrationValidity(void) void ToggleCurSecretBaseRegistry(void) { - gSaveBlock1.secretBases[sub_80BC14C(gCurrentSecretBaseId)].sbr_field_1_6 ^= 1; + gSaveBlock1.secretBases[sub_80BC14C(gCurrentSecretBaseId)].registryStatus ^= 1; FlagSet(FLAG_SECRET_BASE_REGISTRY_ENABLED); } @@ -1045,7 +1045,7 @@ void sub_80BCB10(u8 taskId) Menu_EraseWindowRect(0, 0, 29, 19); - gSaveBlock1.secretBases[taskData[4]].sbr_field_1_6 = 0; + gSaveBlock1.secretBases[taskData[4]].registryStatus = 0; taskData[0]--; if (taskData[2] > 0) @@ -1128,12 +1128,12 @@ void unref_sub_80BCD7C(u8 secretBaseIndex) for (i = 0; i < 1; i++) { - gSaveBlock1.secretBases[secretBaseIndex].partyPersonality[i] = i + 1; - gSaveBlock1.secretBases[secretBaseIndex].partyMoves[i * 4] = i + 1; - gSaveBlock1.secretBases[secretBaseIndex].partySpecies[i] = SPECIES_TREECKO; - gSaveBlock1.secretBases[secretBaseIndex].partyHeldItems[i] = i + 1; - gSaveBlock1.secretBases[secretBaseIndex].partyLevels[i] = i + 5; - gSaveBlock1.secretBases[secretBaseIndex].partyEVs[i] = i * 5; + gSaveBlock1.secretBases[secretBaseIndex].party.personality[i] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].party.moves[i * 4] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].party.species[i] = SPECIES_TREECKO; + gSaveBlock1.secretBases[secretBaseIndex].party.heldItems[i] = i + 1; + gSaveBlock1.secretBases[secretBaseIndex].party.levels[i] = i + 5; + gSaveBlock1.secretBases[secretBaseIndex].party.EVs[i] = i * 5; } } @@ -1147,7 +1147,7 @@ void sub_80BCE1C(void) void sub_80BCE4C() { - gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_5 = gSpecialVar_Result; + gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].battledOwnerToday = gSpecialVar_Result; } void sub_80BCE90() @@ -1159,13 +1159,13 @@ void sub_80BCE90() u8 i; for (i = 0; i < MAX_SECRET_BASES; i++) - gSaveBlock1.secretBases[i].sbr_field_1_5 = 0; + gSaveBlock1.secretBases[i].battledOwnerToday = 0; FlagSet(FLAG_DAILY_UNKNOWN_8C2); } gSpecialVar_0x8004 = GetSecretBaseOwnerType(curBaseIndex); - gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].sbr_field_1_5; + gSpecialVar_Result = gSaveBlock1.secretBases[curBaseIndex].battledOwnerToday; } void sub_80BCF1C(u8 taskId) @@ -1208,7 +1208,7 @@ void sub_80BCF1C(u8 taskId) void sub_80BD034(u8 i, struct SecretBaseRecord *secretBase) { gSaveBlock1.secretBases[i] = *secretBase; - gSaveBlock1.secretBases[i].sbr_field_1_6 = 2; + gSaveBlock1.secretBases[i].registryStatus = 2; } bool8 sub_80BD070(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB) @@ -1277,7 +1277,7 @@ u8 sub_80BD1B0(void) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0) + if (gSaveBlock1.secretBases[i].registryStatus == 0 && gSaveBlock1.secretBases[i].toRegister == 0) return i; } @@ -1296,10 +1296,10 @@ u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) { if (secretBaseIndex != -1) { - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 == 1) + if (gSaveBlock1.secretBases[secretBaseIndex].toRegister == 1) return 0; - if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 - || secretBase->sbr_field_1_0 == 1) + if (gSaveBlock1.secretBases[secretBaseIndex].registryStatus != 2 + || secretBase->toRegister == 1) { sub_80BD034(secretBaseIndex, secretBase); return secretBaseIndex; @@ -1336,8 +1336,8 @@ void sub_80BD280(void) { for (j = i + 1; j < MAX_SECRET_BASES; j++) { - if ((!secretBases[i].sbr_field_1_6 && secretBases[j].sbr_field_1_6 == 1) - || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2)) + if ((!secretBases[i].registryStatus && secretBases[j].registryStatus == 1) + || (secretBases[i].registryStatus == 2 && secretBases[j].registryStatus != 2)) { temp = secretBases[i]; secretBases[i] = secretBases[j]; @@ -1353,7 +1353,7 @@ void sub_80BD328(struct SecretBaseRecord *secretBases, u8 b) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (secretBases[i].sbr_field_1_6 == b) + if (secretBases[i].registryStatus == b) sub_80BD1FC(&secretBases[i]); } } @@ -1439,13 +1439,13 @@ bool8 sub_80BD494(struct SecretBaseRecord *base, struct SecretBaseRecord *secret return FALSE; } - if (base->sbr_field_e > secretBases[i].sbr_field_e) + if (base->numSecretBasesReceived > secretBases[i].numSecretBasesReceived) { ClearSecretBase(&secretBases[i]); return FALSE; } - secretBases[i].sbr_field_1_0 = base->sbr_field_1_0; + secretBases[i].toRegister = base->toRegister; ClearSecretBase(base); return TRUE; @@ -1464,8 +1464,8 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases { if (basesA[i].secretBaseId) { - if (basesA[i].sbr_field_1_6 == 1) - basesA[i].sbr_field_1_0 = 1; + if (basesA[i].registryStatus == 1) + basesA[i].toRegister = 1; if (!sub_80BD494(&basesA[i], basesB, i)) { @@ -1479,7 +1479,7 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases { if (basesB[i].secretBaseId) { - basesB[i].sbr_field_1_5 = 0; + basesB[i].battledOwnerToday = 0; if (!sub_80BD494(&basesB[i], basesC, i)) sub_80BD494(&basesB[i], basesD, i); @@ -1490,12 +1490,12 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases { if (basesC[i].secretBaseId) { - basesC[i].sbr_field_1_5 = 0; + basesC[i].battledOwnerToday = 0; sub_80BD494(&basesC[i], basesD, i); } if (basesD[i].secretBaseId) - basesD[i].sbr_field_1_5 = 0; + basesD[i].battledOwnerToday = 0; } } @@ -1557,10 +1557,10 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (gSaveBlock1.secretBases[i].sbr_field_1_0 == 1) + if (gSaveBlock1.secretBases[i].toRegister == 1) { - gSaveBlock1.secretBases[i].sbr_field_1_6 = 1; - gSaveBlock1.secretBases[i].sbr_field_1_0 = 0; + gSaveBlock1.secretBases[i].registryStatus = 1; + gSaveBlock1.secretBases[i].toRegister = 0; } } @@ -1568,11 +1568,11 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c) for (i = 1; i < MAX_SECRET_BASES; i++) { - if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 2) - gSaveBlock1.secretBases[i].sbr_field_1_6 = 0; + if (gSaveBlock1.secretBases[i].registryStatus == 2) + gSaveBlock1.secretBases[i].registryStatus = 0; } - if (gSaveBlock1.secretBases[0].sbr_field_e != 0xFFFF) - gSaveBlock1.secretBases[0].sbr_field_e++; + if (gSaveBlock1.secretBases[0].numSecretBasesReceived != 0xFFFF) + gSaveBlock1.secretBases[0].numSecretBasesReceived++; } } diff --git a/src/slot_machine.c b/src/slot_machine.c index fd3e2580d..a1245cfb0 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -822,7 +822,7 @@ static bool8 sub_8102058(struct Task *task) unk_debug_bss_1_8--; if (unk_debug_bss_1_8 == 0) { - PlaySE(0x18); + PlaySE(SE_CONTEST_PLACE); sub_8102E1C(eSlotMachine->unk18); sub_8103C14(eSlotMachine->unk18); unk_debug_bss_1_8 = (Random() & 0x1F) + 1; diff --git a/src/starter_choose.c b/src/starter_choose.c index 4e430015e..99d38bbe4 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -17,7 +17,7 @@ #include "scanline_effect.h" extern u16 gSpecialVar_Result; -extern struct SpriteTemplate gUnknown_02024E8C; +extern struct SpriteTemplate gCreatingSpriteTemplate; //-------------------------------------------------- // Graphics Data @@ -714,11 +714,11 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) DecompressPicFromTable_2( &gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, - gUnknown_081FAF4C[0], gUnknown_081FAF4C[1], + gMonSpriteGfx_Sprite_ptr[0], gMonSpriteGfx_Sprite_ptr[1], species); LoadCompressedObjectPalette(&gMonPaletteTable[species]); GetMonSpriteTemplate_803C56C(species, 1); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0); + spriteId = CreateSprite(&gCreatingSpriteTemplate, x, y, 0); gSprites[spriteId].callback = nullsub_72; gSprites[spriteId].oam.priority = 0; return spriteId; diff --git a/src/text.c b/src/text.c index d963045df..a5a78b430 100644 --- a/src/text.c +++ b/src/text.c @@ -1480,7 +1480,7 @@ const struct WindowTemplate gWindowTemplate_81E7144 = BG_SCREEN_ADDR(31), // tilemap }; -const struct WindowTemplate gWindowTemplate_81E7160 = +const struct WindowTemplate gWindowTemplate_ContestPainting = { 1, // BG number 1, // BG character base block @@ -2019,7 +2019,7 @@ void Text_SetWindowText(struct Window *win, const u8 *text) win->delayCounter = 0; } -void Text_InitWindow8002EB0(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) +void Contest_StartTextPrinter(struct Window *win, const u8 *text, u16 tileDataStartOffset, u8 left, u8 top) { gMain.watchedKeysMask = A_BUTTON | B_BUTTON; gMain.watchedKeysPressed = 0; @@ -2546,7 +2546,7 @@ u8 Text_UpdateWindowAutoscroll(struct Window *win) return retVal; } -u8 Text_UpdateWindowInContest(struct Window *win) +u8 Contest_RunTextPrinter(struct Window *win) { u8 retVal; diff --git a/src/text_window.c b/src/text_window.c index ade349f4e..6d2900845 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -205,7 +205,7 @@ u16 TextWindow_SetDlgFrameBaseTileNum(u16 baseTileNum) void unref_sub_80651DC(struct Window *win, u8 *text) { - Text_InitWindow8002EB0(win, text, sDialogueFrameBaseTileNum + 14, 2, 15); + Contest_StartTextPrinter(win, text, sDialogueFrameBaseTileNum + 14, 2, 15); } // Loads and draws a dialogue window frame diff --git a/src/trade.c b/src/trade.c index aeb77dd58..218471fe6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1406,7 +1406,7 @@ static void sub_80489F4(void) { gUnknown_020297D8[0] = gUnknown_03004824->tradeMenuCursorPosition; gUnknown_020297D8[1] = gUnknown_03004824->unk_008a; - sub_800832C(); + SetCloseLinkCallback(); gUnknown_03004824->unk_007b = 13; } } @@ -2158,7 +2158,7 @@ static void sub_8049D9C(void) { if (!gPaletteFade.active) { - sub_800832C(); + SetCloseLinkCallback(); gUnknown_03004824->unk_007b = 12; } } @@ -3522,13 +3522,13 @@ static void sub_804B2D0(u8 whichParty, u8 a1) case 0: species = GetMonData(pokemon, MON_DATA_SPECIES2); personality = GetMonData(pokemon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, (u32)gSharedMem, gUnknown_081FAF4C[whichParty * 2 + 1], species, personality); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, gSharedMem, gMonSpriteGfx_Sprite_ptr[whichParty * 2 + 1], species, personality); LoadCompressedObjectPalette(GetMonSpritePalStruct(pokemon)); gUnknown_03004828->tradeSpecies[whichParty] = species; break; case 1: GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(pokemon)->tag, v0); - gUnknown_03004828->pokePicSpriteIdxs[whichParty] = CreateSprite(&gUnknown_02024E8C, 0x78, 0x3c, 0x6); + gUnknown_03004828->pokePicSpriteIdxs[whichParty] = CreateSprite(&gCreatingSpriteTemplate, 0x78, 0x3c, 0x6); gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].invisible = TRUE; gSprites[gUnknown_03004828->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; break; @@ -5168,7 +5168,7 @@ static void sub_804DC88(void) case 8: if (IsBGMStopped() == TRUE) { - sub_800832C(); + SetCloseLinkCallback(); gMain.state ++; } break; diff --git a/src/trainer_card.c b/src/trainer_card.c index 0e44c7cfc..fcae77e85 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -1,7 +1,10 @@ #include "global.h" #include "trainer_card.h" +#include "constants/songs.h" +#include "contest_util.h" #include "easy_chat.h" #include "event_data.h" +#include "ewram.h" #include "field_effect.h" #include "graphics.h" #include "link.h" @@ -9,19 +12,16 @@ #include "main.h" #include "menu.h" #include "money.h" +#include "overworld.h" #include "palette.h" #include "pokedex.h" -#include "overworld.h" -#include "script_pokemon_80C4.h" -#include "constants/songs.h" +#include "scanline_effect.h" #include "sound.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" #include "task.h" -#include "scanline_effect.h" #include "util.h" -#include "ewram.h" typedef void (*Callback)(void); @@ -417,7 +417,7 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) } r4 = FALSE; - if (sub_80C4D50() > 4) + if (CountPlayerMuseumPaintings() > 4) { r4 = TRUE; } diff --git a/src/trig.c b/src/trig.c index e16a69e63..c2bca3059 100644 --- a/src/trig.c +++ b/src/trig.c @@ -1,12 +1,6 @@ #include "global.h" #include "trig.h" -// Converts a number to Q8.8 fixed-point format -#define Q_8_8(n) ((s16)((n) * 256)) - -// Converts a number to Q4.12 fixed-point format -#define Q_4_12(n) ((s16)((n) * 4096)) - // Values of sin(x*(π/128)) as Q8.8 fixed-point numbers from x = 0 to x = 319 const s16 gSineTable[] = { diff --git a/sym_common.txt b/sym_common.txt index b089f46d3..fca25afb0 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -97,7 +97,7 @@ SYMBOL(gBattle_BG3_Y, 4) SYMBOL(gBattleTextBuff1, 16) SYMBOL(gUnknown_030041D0, 48) SYMBOL(gBattle_WIN1H, 4) -SYMBOL(gUnknown_03004210, 48) +SYMBOL(gWindowTemplate_Contest_MoveDescription, 48) SYMBOL(gBattle_WIN0V, 4) SYMBOL(gBattle_WIN1V, 4) SYMBOL(gUnknown_03004250, 48) @@ -244,8 +244,8 @@ SYMBOL(gLastFieldPokeMenuOpened, 4) SYMBOL(gPostMenuFieldCallback, 4) // pokedex.c -SYMBOL(gUnknown_03005CE8, 4) -SYMBOL(gUnknown_03005CEC, 4) +SYMBOL(gUnusedPokedexU8, 4) +SYMBOL(gPokedexVBlankCB, 4) // pokemon_summary_screen.o SYMBOL(gUnknown_03005CF0, 4) @@ -292,23 +292,23 @@ SYMBOL(gUnknown_03005D38, 4) SYMBOL(gUnknown_03005DA0, 0x48) // contest_painting_effects.c -SYMBOL(gUnknown_03005DE8, 4) -SYMBOL(gUnknown_03005DEC, 4) -SYMBOL(gUnknown_03005DF0, 4) -SYMBOL(gUnknown_03005DF4, 4) -SYMBOL(gUnknown_03005DF8, 4) -SYMBOL(gUnknown_03005DFC, 4) -SYMBOL(gUnknown_03005E00, 4) -SYMBOL(gUnknown_03005E04, 4) -SYMBOL(gUnknown_03005E08, 4) -SYMBOL(gUnknown_03005E0C, 4) +SYMBOL(gCanvasColumnStart, 4) +SYMBOL(gCanvasPixels, 4) +SYMBOL(gCanvasRowEnd, 4) +SYMBOL(gCanvasHeight, 4) +SYMBOL(gCanvasColumnEnd, 4) +SYMBOL(gCanvasRowStart, 4) +SYMBOL(gCanvasMonPersonality, 4) +SYMBOL(gCanvasWidth, 4) +SYMBOL(gCanvasPalette, 4) +SYMBOL(gCanvasPaletteStart, 4) // contest_painting.c -SYMBOL(gUnknown_03005E10, 4) -SYMBOL(gUnknown_03005E20, 32) -SYMBOL(gUnknown_03005E40, 76) -SYMBOL(gUnknown_03005E8C, 4) -SYMBOL(gUnknown_03005E90, 4) +SYMBOL(gContestMonPixels, 4) +SYMBOL(gImageProcessingContext, 32) +SYMBOL(sCaptionBuffer, 76) +SYMBOL(gContestPaintingWinner, 4) +SYMBOL(gContestPaintingMonPalette, 4) // evolution_scene.c SYMBOL(gCB2_AfterEvolution, 4) @@ -319,7 +319,7 @@ gUnknown_Debug_03005FB8 = .; #endif // pokedex_cry_screen.c -SYMBOL(gUnknown_03005E98, 4) +SYMBOL(gDexCryScreenState, 4) // save.c SYMBOL(gFirstSaveSector, 4) diff --git a/sym_ewram.txt b/sym_ewram.txt index 80e699ab2..790d684b1 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -154,7 +154,7 @@ gActionForBanks = .; /* 2024C18 */ gSelectionBattleScripts = .; /* 2024C1C */ . += 0x10; -gUnknown_02024C2C = .; /* 2024C2C */ +gLastPrintedMoves = .; /* 2024C2C */ . += 0x8; gLastMoves = .; /* 2024C34 */ @@ -166,7 +166,7 @@ gLastLandedMoves = .; /* 2024C3C */ gLastHitByType = .; /* 2024C44 */ . += 0x8; -gUnknown_02024C4C = .; /* 2024C4C */ +gLastResultingMoves = .; /* 2024C4C */ . += 0x8; gLockedMoves = .; /* 2024C54 */ @@ -184,7 +184,7 @@ gMoveResultFlags = .; /* 2024C68 */ gHitMarker = .; /* 2024C6C */ . += 0x4; -gUnknown_02024C70 = .; /* 2024C70 */ +sUnusedBattlersArray = .; /* 2024C70 */ . += 0x4; gTakenDmgByBattler = .; /* 2024C74 */ @@ -238,7 +238,7 @@ gWishFutureKnock = .; /* 2024DBC */ gUnknown_02024DDC = .; /* 2024DDC */ . += 0xC; -gUnknown_02024DE8 = .; /* 2024DE8 */ +gIntroSlideFlags = .; /* 2024DE8 */ . += 0x2; gSentPokesToOpponent = .; /* 2024DEA */ |