From 21ec0f0223eee93b97242c6943544c5c384b7d6a Mon Sep 17 00:00:00 2001 From: W1serV1ser <1prefertheaircauseimanairnomad@gmail.com> Date: Wed, 6 Jul 2022 09:02:50 -0700 Subject: [PATCH] Revert "Merge branch 'master' into FollowingPokemon_Gen1-3" This reverts commit 63b2bd9a44c4cf5faa561160dec788573f819a7b, reversing changes made to a716f522f3599ecf073c7e302e3c72dbaac053c3. --- INSTALL.md | 19 +- Makefile | 2 +- asm/macros/event.inc | 22 + asm/macros/trainer_hill.inc | 8 +- data/battle_anim_scripts.s | 546 +-- data/event_scripts.s | 1 + data/field_effect_scripts.s | 15 + .../scripts.inc | 8 +- .../scripts.inc | 3 +- data/maps/BattleFrontier_Lounge2/scripts.inc | 26 +- .../map.json | 13 + .../scripts.inc | 1 + data/maps/TrainerHill_Entrance/scripts.inc | 2 +- data/script_cmd_table.inc | 4 + data/scripts/field_move_scripts.inc | 66 + data/scripts/gift_altering_cave.inc | 2 +- data/text/contest_strings.inc | 141 +- data/text/pc_transfer.inc | 3 +- data/text/pokedex_rating.inc | 2 +- data/text/surf.inc | 3 +- data/text/tv.inc | 30 +- docs/bugs_and_glitches.md | 51 + gflib/bg.h | 2 +- gflib/sprite.c | 11 +- gflib/sprite.h | 2 +- gflib/text.c | 8 +- graphics/door_anims/abandoned_ship.png | Bin 306 -> 420 bytes graphics/door_anims/abandoned_ship_room.png | Bin 305 -> 419 bytes graphics/door_anims/battle_arena.png | Bin 394 -> 509 bytes graphics/door_anims/battle_arena_lobby.png | Bin 293 -> 408 bytes graphics/door_anims/battle_dome.png | Bin 279 -> 394 bytes graphics/door_anims/battle_dome_corridor.png | Bin 347 -> 462 bytes graphics/door_anims/battle_dome_lobby.png | Bin 374 -> 486 bytes graphics/door_anims/battle_factory.png | Bin 251 -> 366 bytes graphics/door_anims/battle_frontier.png | Bin 306 -> 421 bytes .../door_anims/battle_frontier_sliding.png | Bin 277 -> 390 bytes graphics/door_anims/battle_palace_lobby.png | Bin 319 -> 432 bytes graphics/door_anims/battle_tent.png | Bin 429 -> 544 bytes graphics/door_anims/battle_tent_interior.png | Bin 389 -> 504 bytes graphics/door_anims/battle_tower.png | Bin 352 -> 467 bytes graphics/door_anims/battle_tower_corridor.png | Bin 0 -> 404 bytes graphics/door_anims/battle_tower_elevator.png | Bin 283 -> 398 bytes .../battle_tower_multi_corridor.png | Bin 413 -> 554 bytes graphics/door_anims/battle_tower_old.png | Bin 343 -> 458 bytes graphics/door_anims/birchs_lab.png | Bin 287 -> 402 bytes graphics/door_anims/cable_club.png | Bin 253 -> 368 bytes graphics/door_anims/contest.png | Bin 337 -> 452 bytes graphics/door_anims/cycling_road.png | Bin 328 -> 441 bytes graphics/door_anims/fallarbor_light_roof.png | Bin 317 -> 432 bytes graphics/door_anims/general.png | Bin 310 -> 425 bytes graphics/door_anims/gym.png | Bin 289 -> 404 bytes graphics/door_anims/lilycove.png | Bin 311 -> 426 bytes graphics/door_anims/lilycove_dept_store.png | Bin 315 -> 430 bytes graphics/door_anims/lilycove_wooden.png | Bin 286 -> 401 bytes graphics/door_anims/mauville.png | Bin 317 -> 432 bytes graphics/door_anims/mossdeep_space_center.png | Bin 394 -> 509 bytes graphics/door_anims/pacifidlog.png | Bin 337 -> 452 bytes graphics/door_anims/petalburg_gym.png | Bin 289 -> 0 bytes graphics/door_anims/poke_center.png | Bin 304 -> 419 bytes graphics/door_anims/pokemon_league.png | Bin 332 -> 445 bytes graphics/door_anims/rustboro_gray.png | Bin 325 -> 440 bytes graphics/door_anims/rustboro_tan.png | Bin 325 -> 440 bytes graphics/door_anims/safari_zone.png | Bin 343 -> 458 bytes graphics/door_anims/sootopolis.png | Bin 322 -> 435 bytes .../door_anims/sootopolis_peaked_roof.png | Bin 322 -> 435 bytes .../trainer_hill_lobby_elevator.png | Bin 231 -> 348 bytes ...unused_battle_frontier.png => unknown.png} | Bin graphics/field_effects/pics/bug_tracks.png | Bin 0 -> 275 bytes .../field_effects/pics/slither_tracks.png | Bin 0 -> 354 bytes graphics/field_effects/pics/spot_tracks.png | Bin 0 -> 269 bytes .../palettes/followers/aggron.pal | 19 + .../palettes/followers/aipom.pal | 19 + .../palettes/followers/ampharos.pal | 19 + .../palettes/followers/anorith.pal | 19 + .../palettes/followers/ariados.pal | 19 + .../palettes/followers/armaldo.pal | 19 + .../palettes/followers/articuno.pal | 19 + .../palettes/followers/bagon.pal | 19 + .../palettes/followers/barboach.pal | 19 + .../palettes/followers/bayleef.pal | 19 + .../palettes/followers/beautifly.pal | 19 + .../palettes/followers/beldum.pal | 19 + .../palettes/followers/bellossom.pal | 19 + .../palettes/followers/blastoise.pal | 19 + .../palettes/followers/blaziken.pal | 19 + .../palettes/followers/blissey.pal | 19 + .../palettes/followers/breloom.pal | 19 + .../palettes/followers/butterfree.pal | 19 + .../palettes/followers/camerupt.pal | 19 + .../palettes/followers/carvanha.pal | 19 + .../palettes/followers/caterpie.pal | 19 + .../palettes/followers/celebi.pal | 19 + .../palettes/followers/charizard.pal | 19 + .../palettes/followers/charmander.pal | 19 + .../palettes/followers/charmeleon.pal | 19 + .../palettes/followers/chimecho.pal | 19 + .../palettes/followers/chinchou.pal | 19 + .../palettes/followers/clamperl.pal | 19 + .../palettes/followers/claydol.pal | 19 + .../palettes/followers/clefable.pal | 19 + .../palettes/followers/cloyster.pal | 19 + .../palettes/followers/corphish.pal | 19 + .../palettes/followers/corsola.pal | 19 + .../palettes/followers/cradily.pal | 19 + .../palettes/followers/crawdaunt.pal | 19 + .../palettes/followers/crobat.pal | 19 + .../palettes/followers/croconaw.pal | 19 + .../palettes/followers/cyndaquil.pal | 19 + .../palettes/followers/delcatty.pal | 19 + .../palettes/followers/delibird.pal | 19 + .../palettes/followers/deoxys.pal | 19 + .../palettes/followers/diglett.pal | 19 + .../palettes/followers/dodrio.pal | 19 + .../palettes/followers/donphan.pal | 19 + .../palettes/followers/dragonair.pal | 19 + .../palettes/followers/dragonite.pal | 19 + .../palettes/followers/dratini.pal | 19 + .../palettes/followers/dugtrio.pal | 19 + .../palettes/followers/dunsparce.pal | 19 + .../palettes/followers/dusclops.pal | 19 + .../palettes/followers/duskull.pal | 19 + .../palettes/followers/dustox.pal | 19 + .../palettes/followers/eevee.pal | 19 + .../palettes/followers/ekans.pal | 19 + .../palettes/followers/electrike.pal | 19 + .../palettes/followers/entei.pal | 19 + .../palettes/followers/espeon.pal | 19 + .../palettes/followers/exeggutor.pal | 19 + .../palettes/followers/exploud.pal | 19 + .../palettes/followers/farfetchd.pal | 19 + .../palettes/followers/fearow.pal | 19 + .../palettes/followers/feebas.pal | 19 + .../palettes/followers/feraligatr.pal | 19 + .../palettes/followers/flaaffy.pal | 19 + .../palettes/followers/flareon.pal | 19 + .../palettes/followers/flygon.pal | 19 + .../palettes/followers/forretress.pal | 19 + .../palettes/followers/gardevoir.pal | 19 + .../palettes/followers/gastly.pal | 19 + .../palettes/followers/gengar.pal | 19 + .../palettes/followers/girafarig.pal | 19 + .../palettes/followers/glalie.pal | 19 + .../palettes/followers/gligar.pal | 19 + .../palettes/followers/goldeen.pal | 19 + .../palettes/followers/golduck.pal | 19 + .../palettes/followers/golem.pal | 19 + .../palettes/followers/gorebyss.pal | 19 + .../palettes/followers/granbull.pal | 19 + .../palettes/followers/groudon.pal | 19 + .../palettes/followers/grovyle.pal | 19 + .../palettes/followers/grumpig.pal | 19 + .../palettes/followers/gulpin.pal | 19 + .../palettes/followers/gyarados.pal | 19 + .../palettes/followers/hariyama.pal | 19 + .../palettes/followers/haunter.pal | 19 + .../palettes/followers/heracross.pal | 19 + .../palettes/followers/hitmonchan.pal | 19 + .../palettes/followers/hitmonlee.pal | 19 + .../palettes/followers/hitmontop.pal | 19 + .../palettes/followers/ho_oh.pal | 19 + .../palettes/followers/hoothoot.pal | 19 + .../palettes/followers/hoppip.pal | 19 + .../palettes/followers/horsea.pal | 19 + .../palettes/followers/huntail.pal | 19 + .../palettes/followers/igglybuff.pal | 19 + .../palettes/followers/illumise.pal | 19 + .../palettes/followers/ivysaur.pal | 19 + .../palettes/followers/jigglypuff.pal | 19 + .../palettes/followers/jirachi.pal | 19 + .../palettes/followers/jolteon.pal | 19 + .../palettes/followers/jumpluff.pal | 19 + .../object_events/palettes/followers/jynx.pal | 19 + .../palettes/followers/kabuto.pal | 19 + .../palettes/followers/kabutops.pal | 19 + .../palettes/followers/kangaskhan.pal | 19 + .../palettes/followers/kecleon.pal | 19 + .../palettes/followers/kingdra.pal | 19 + .../palettes/followers/kyogre.pal | 19 + .../palettes/followers/lanturn.pal | 19 + .../palettes/followers/lapras.pal | 19 + .../palettes/followers/latias.pal | 19 + .../palettes/followers/latios.pal | 19 + .../palettes/followers/ledian.pal | 19 + .../palettes/followers/ledyba.pal | 19 + .../palettes/followers/lickitung.pal | 19 + .../palettes/followers/lileep.pal | 19 + .../palettes/followers/linoone.pal | 19 + .../palettes/followers/lombre.pal | 19 + .../palettes/followers/lotad.pal | 19 + .../palettes/followers/ludicolo.pal | 19 + .../palettes/followers/lugia.pal | 19 + .../palettes/followers/luvdisc.pal | 19 + .../palettes/followers/machamp.pal | 19 + .../palettes/followers/machoke.pal | 19 + .../palettes/followers/machop.pal | 19 + .../palettes/followers/magby.pal | 19 + .../palettes/followers/magcargo.pal | 19 + .../palettes/followers/magikarp.pal | 19 + .../palettes/followers/magmar.pal | 19 + .../palettes/followers/magnemite.pal | 19 + .../palettes/followers/makuhita.pal | 19 + .../palettes/followers/manectric.pal | 19 + .../palettes/followers/mankey.pal | 19 + .../palettes/followers/mantine.pal | 19 + .../palettes/followers/mareep.pal | 19 + .../palettes/followers/marshtomp.pal | 19 + .../palettes/followers/masquerain.pal | 19 + .../palettes/followers/mawile.pal | 19 + .../palettes/followers/medicham.pal | 19 + .../palettes/followers/meditite.pal | 19 + .../palettes/followers/meganium.pal | 19 + .../palettes/followers/meowth.pal | 19 + .../palettes/followers/metang.pal | 19 + .../object_events/palettes/followers/mew.pal | 19 + .../palettes/followers/mewtwo.pal | 19 + .../palettes/followers/mightyena.pal | 19 + .../palettes/followers/milotic.pal | 19 + .../palettes/followers/miltank.pal | 19 + .../palettes/followers/misdreavus.pal | 19 + .../palettes/followers/moltres.pal | 19 + .../palettes/followers/mr_mime.pal | 19 + .../palettes/followers/mudkip.pal | 19 + .../palettes/followers/murkrow.pal | 19 + .../object_events/palettes/followers/natu.pal | 19 + .../palettes/followers/nidoking.pal | 19 + .../palettes/followers/nidoqueen.pal | 19 + .../palettes/followers/nidoran_f.pal | 19 + .../palettes/followers/nidorina.pal | 19 + .../palettes/followers/nincada.pal | 19 + .../palettes/followers/ninetales.pal | 19 + .../palettes/followers/ninjask.pal | 19 + .../palettes/followers/noctowl.pal | 19 + .../palettes/followers/nosepass.pal | 19 + .../palettes/followers/numel.pal | 19 + .../palettes/followers/nuzleaf.pal | 19 + .../palettes/followers/octillery.pal | 19 + .../palettes/followers/omanyte.pal | 19 + .../palettes/followers/omastar.pal | 19 + .../palettes/followers/pelipper.pal | 19 + .../palettes/followers/persian.pal | 19 + .../palettes/followers/phanpy.pal | 19 + .../palettes/followers/pichu.pal | 19 + .../palettes/followers/pidgeot.pal | 19 + .../palettes/followers/pidgeotto.pal | 19 + .../palettes/followers/pidgey.pal | 19 + .../palettes/followers/pikachu.pal | 19 + .../palettes/followers/piloswine.pal | 19 + .../palettes/followers/pineco.pal | 19 + .../palettes/followers/politoed.pal | 19 + .../palettes/followers/poliwag.pal | 19 + .../palettes/followers/poochyena.pal | 19 + .../palettes/followers/porygon.pal | 19 + .../palettes/followers/porygon2.pal | 19 + .../palettes/followers/primeape.pal | 19 + .../palettes/followers/quilava.pal | 19 + .../palettes/followers/qwilfish.pal | 19 + .../palettes/followers/raichu.pal | 19 + .../palettes/followers/raikou.pal | 19 + .../palettes/followers/raticate.pal | 19 + .../palettes/followers/rattata.pal | 19 + .../palettes/followers/rayquaza.pal | 19 + .../palettes/followers/regice.pal | 19 + .../palettes/followers/regirock.pal | 19 + .../palettes/followers/registeel.pal | 19 + .../palettes/followers/relicanth.pal | 19 + .../palettes/followers/remoraid.pal | 19 + .../palettes/followers/rhydon.pal | 19 + .../palettes/followers/roselia.pal | 19 + .../palettes/followers/sableye.pal | 19 + .../palettes/followers/salamence.pal | 19 + .../palettes/followers/sandshrew.pal | 19 + .../palettes/followers/sandslash.pal | 19 + .../palettes/followers/sceptile.pal | 19 + .../palettes/followers/scizor.pal | 19 + .../palettes/followers/scyther.pal | 19 + .../palettes/followers/seadra.pal | 19 + .../palettes/followers/seaking.pal | 19 + .../palettes/followers/sealeo.pal | 19 + .../palettes/followers/seedot.pal | 19 + .../object_events/palettes/followers/seel.pal | 19 + .../palettes/followers/sentret.pal | 19 + .../palettes/followers/seviper.pal | 19 + .../palettes/followers/sharpedo.pal | 19 + .../palettes/followers/shedinja.pal | 19 + .../palettes/followers/shelgon.pal | 19 + .../palettes/followers/shellder.pal | 19 + .../palettes/followers/shiftry.pal | 19 + .../palettes/followers/shroomish.pal | 19 + .../palettes/followers/shuckle.pal | 19 + .../palettes/followers/skarmory.pal | 19 + .../palettes/followers/skiploom.pal | 19 + .../palettes/followers/slaking.pal | 19 + .../palettes/followers/slakoth.pal | 19 + .../palettes/followers/slowbro.pal | 19 + .../palettes/followers/slowking.pal | 19 + .../palettes/followers/slowpoke.pal | 19 + .../palettes/followers/smeargle.pal | 19 + .../palettes/followers/smoochum.pal | 19 + .../palettes/followers/sneasel.pal | 19 + .../palettes/followers/snorlax.pal | 19 + .../palettes/followers/snorunt.pal | 19 + .../palettes/followers/snubbull.pal | 19 + .../palettes/followers/spearow.pal | 19 + .../palettes/followers/spheal.pal | 19 + .../palettes/followers/spinarak.pal | 19 + .../palettes/followers/spinda.pal | 19 + .../palettes/followers/spoink.pal | 19 + .../palettes/followers/squirtle.pal | 19 + .../palettes/followers/stantler.pal | 19 + .../palettes/followers/sudowoodo.pal | 19 + .../palettes/followers/suicune.pal | 19 + .../palettes/followers/sunflora.pal | 19 + .../palettes/followers/sunkern.pal | 19 + .../palettes/followers/surskit.pal | 19 + .../palettes/followers/swalot.pal | 19 + .../palettes/followers/swampert.pal | 19 + .../palettes/followers/swellow.pal | 19 + .../palettes/followers/swinub.pal | 19 + .../palettes/followers/taillow.pal | 19 + .../palettes/followers/tangela.pal | 19 + .../palettes/followers/tauros.pal | 19 + .../palettes/followers/teddiursa.pal | 19 + .../palettes/followers/tentacool.pal | 19 + .../palettes/followers/tentacruel.pal | 19 + .../palettes/followers/togepi.pal | 19 + .../palettes/followers/torkoal.pal | 19 + .../palettes/followers/totodile.pal | 19 + .../palettes/followers/trapinch.pal | 19 + .../palettes/followers/treecko.pal | 19 + .../palettes/followers/tropius.pal | 19 + .../palettes/followers/typhlosion.pal | 19 + .../palettes/followers/tyranitar.pal | 19 + .../palettes/followers/tyrogue.pal | 19 + .../palettes/followers/umbreon.pal | 19 + .../palettes/followers/ursaring.pal | 19 + .../palettes/followers/vaporeon.pal | 19 + .../palettes/followers/venomoth.pal | 19 + .../palettes/followers/venonat.pal | 19 + .../palettes/followers/venusaur.pal | 19 + .../palettes/followers/vibrava.pal | 19 + .../palettes/followers/victreebel.pal | 19 + .../palettes/followers/vigoroth.pal | 19 + .../palettes/followers/volbeat.pal | 19 + .../palettes/followers/vulpix.pal | 19 + .../palettes/followers/wailmer.pal | 19 + .../palettes/followers/wailord.pal | 19 + .../palettes/followers/walrein.pal | 19 + .../palettes/followers/wartortle.pal | 19 + .../palettes/followers/weepinbell.pal | 19 + .../palettes/followers/whiscash.pal | 19 + .../palettes/followers/whismur.pal | 19 + .../palettes/followers/wingull.pal | 19 + .../palettes/followers/wurmple.pal | 19 + .../palettes/followers/wynaut.pal | 19 + .../object_events/palettes/followers/xatu.pal | 19 + .../palettes/followers/yanma.pal | 19 + .../palettes/followers/zangoose.pal | 19 + .../palettes/followers/zapdos.pal | 19 + .../palettes/followers/zigzagoon.pal | 19 + .../pics/pokemon/followers/aggron.png | Bin 0 -> 1225 bytes .../pics/pokemon/followers/aipom.png | Bin 0 -> 798 bytes .../pics/pokemon/followers/ampharos.png | Bin 0 -> 775 bytes .../pics/pokemon/followers/anorith.png | Bin 0 -> 840 bytes .../pics/pokemon/followers/ariados.png | Bin 0 -> 1043 bytes .../pics/pokemon/followers/armaldo.png | Bin 0 -> 1003 bytes .../pics/pokemon/followers/articuno.png | Bin 0 -> 1286 bytes .../pics/pokemon/followers/bagon.png | Bin 0 -> 557 bytes .../pics/pokemon/followers/barboach.png | Bin 0 -> 558 bytes .../pics/pokemon/followers/bayleef.png | Bin 0 -> 745 bytes .../pics/pokemon/followers/beautifly.png | Bin 0 -> 952 bytes .../pics/pokemon/followers/beldum.png | Bin 0 -> 568 bytes .../pics/pokemon/followers/bellossom.png | Bin 0 -> 699 bytes .../pics/pokemon/followers/blastoise.png | Bin 0 -> 955 bytes .../pics/pokemon/followers/blaziken.png | Bin 0 -> 958 bytes .../pics/pokemon/followers/blissey.png | Bin 0 -> 665 bytes .../pics/pokemon/followers/breloom.png | Bin 0 -> 659 bytes .../pics/pokemon/followers/butterfree.png | Bin 0 -> 876 bytes .../pics/pokemon/followers/camerupt.png | Bin 0 -> 971 bytes .../pics/pokemon/followers/carvanha.png | Bin 0 -> 768 bytes .../pics/pokemon/followers/caterpie.png | Bin 0 -> 606 bytes .../pics/pokemon/followers/celebi.png | Bin 0 -> 663 bytes .../pics/pokemon/followers/charizard.png | Bin 0 -> 1110 bytes .../pics/pokemon/followers/charmander.png | Bin 0 -> 528 bytes .../pics/pokemon/followers/charmeleon.png | Bin 0 -> 612 bytes .../pics/pokemon/followers/chimecho.png | Bin 0 -> 412 bytes .../pics/pokemon/followers/chinchou.png | Bin 0 -> 708 bytes .../pics/pokemon/followers/clamperl.png | Bin 0 -> 566 bytes .../pics/pokemon/followers/claydol.png | Bin 0 -> 628 bytes .../pics/pokemon/followers/clefable.png | Bin 0 -> 654 bytes .../pics/pokemon/followers/cloyster.png | Bin 0 -> 1096 bytes .../pics/pokemon/followers/corphish.png | Bin 0 -> 889 bytes .../pics/pokemon/followers/corsola.png | Bin 0 -> 669 bytes .../pics/pokemon/followers/cradily.png | Bin 0 -> 1085 bytes .../pics/pokemon/followers/crawdaunt.png | Bin 0 -> 959 bytes .../pics/pokemon/followers/crobat.png | Bin 0 -> 963 bytes .../pics/pokemon/followers/croconaw.png | Bin 0 -> 836 bytes .../pics/pokemon/followers/cyndaquil.png | Bin 0 -> 713 bytes .../pics/pokemon/followers/delcatty.png | Bin 0 -> 761 bytes .../pics/pokemon/followers/delibird.png | Bin 0 -> 676 bytes .../pics/pokemon/followers/deoxys_attack.png | Bin 0 -> 960 bytes .../pics/pokemon/followers/deoxys_defense.png | Bin 0 -> 869 bytes .../pics/pokemon/followers/deoxys_normal.png | Bin 0 -> 897 bytes .../pics/pokemon/followers/deoxys_speed.png | Bin 0 -> 898 bytes .../pics/pokemon/followers/diglett.png | Bin 0 -> 470 bytes .../pics/pokemon/followers/dodrio.png | Bin 0 -> 1088 bytes .../pics/pokemon/followers/donphan.png | Bin 0 -> 745 bytes .../pics/pokemon/followers/dragonair.png | Bin 0 -> 1103 bytes .../pics/pokemon/followers/dragonite.png | Bin 0 -> 1030 bytes .../pics/pokemon/followers/dratini.png | Bin 0 -> 693 bytes .../pics/pokemon/followers/dugtrio.png | Bin 0 -> 764 bytes .../pics/pokemon/followers/dunsparce.png | Bin 0 -> 789 bytes .../pics/pokemon/followers/dusclops.png | Bin 0 -> 915 bytes .../pics/pokemon/followers/duskull.png | Bin 0 -> 568 bytes .../pics/pokemon/followers/dustox.png | Bin 0 -> 872 bytes .../pics/pokemon/followers/eevee.png | Bin 0 -> 546 bytes .../pics/pokemon/followers/ekans.png | Bin 0 -> 593 bytes .../pics/pokemon/followers/electrike.png | Bin 0 -> 614 bytes .../pics/pokemon/followers/entei.png | Bin 0 -> 1072 bytes .../pics/pokemon/followers/espeon.png | Bin 0 -> 812 bytes .../pics/pokemon/followers/exeggutor.png | Bin 0 -> 877 bytes .../pics/pokemon/followers/exploud.png | Bin 0 -> 1163 bytes .../pics/pokemon/followers/farfetchd.png | Bin 0 -> 811 bytes .../pics/pokemon/followers/fearow.png | Bin 0 -> 1072 bytes .../pics/pokemon/followers/feebas.png | Bin 0 -> 588 bytes .../pics/pokemon/followers/feraligatr.png | Bin 0 -> 1090 bytes .../pics/pokemon/followers/flaaffy.png | Bin 0 -> 782 bytes .../pics/pokemon/followers/flareon.png | Bin 0 -> 828 bytes .../pics/pokemon/followers/flygon.png | Bin 0 -> 1067 bytes .../pics/pokemon/followers/forretress.png | Bin 0 -> 620 bytes .../pics/pokemon/followers/gardevoir.png | Bin 0 -> 783 bytes .../pics/pokemon/followers/gastly.png | Bin 0 -> 716 bytes .../pics/pokemon/followers/gengar.png | Bin 0 -> 672 bytes .../pics/pokemon/followers/girafarig.png | Bin 0 -> 770 bytes .../pics/pokemon/followers/glalie.png | Bin 0 -> 598 bytes .../pics/pokemon/followers/gligar.png | Bin 0 -> 958 bytes .../pics/pokemon/followers/goldeen.png | Bin 0 -> 773 bytes .../pics/pokemon/followers/golduck.png | Bin 0 -> 644 bytes .../pics/pokemon/followers/golem.png | Bin 0 -> 778 bytes .../pics/pokemon/followers/gorebyss.png | Bin 0 -> 925 bytes .../pics/pokemon/followers/granbull.png | Bin 0 -> 695 bytes .../pics/pokemon/followers/groudon.png | Bin 0 -> 1368 bytes .../pics/pokemon/followers/grovyle.png | Bin 0 -> 658 bytes .../pics/pokemon/followers/grumpig.png | Bin 0 -> 749 bytes .../pics/pokemon/followers/gulpin.png | Bin 0 -> 562 bytes .../pics/pokemon/followers/gyarados.png | Bin 0 -> 1450 bytes .../pics/pokemon/followers/hariyama.png | Bin 0 -> 1187 bytes .../pics/pokemon/followers/haunter.png | Bin 0 -> 617 bytes .../pics/pokemon/followers/heracross.png | Bin 0 -> 838 bytes .../pics/pokemon/followers/hitmonchan.png | Bin 0 -> 656 bytes .../pics/pokemon/followers/hitmonlee.png | Bin 0 -> 607 bytes .../pics/pokemon/followers/hitmontop.png | Bin 0 -> 591 bytes .../pics/pokemon/followers/ho_oh.png | Bin 0 -> 2252 bytes .../pics/pokemon/followers/hoothoot.png | Bin 0 -> 647 bytes .../pics/pokemon/followers/hoppip.png | Bin 0 -> 595 bytes .../pics/pokemon/followers/horsea.png | Bin 0 -> 561 bytes .../pics/pokemon/followers/huntail.png | Bin 0 -> 1060 bytes .../pics/pokemon/followers/igglybuff.png | Bin 0 -> 463 bytes .../pics/pokemon/followers/illumise.png | Bin 0 -> 793 bytes .../pics/pokemon/followers/ivysaur.png | Bin 0 -> 657 bytes .../pics/pokemon/followers/jigglypuff.png | Bin 0 -> 483 bytes .../pics/pokemon/followers/jirachi.png | Bin 0 -> 627 bytes .../pics/pokemon/followers/jolteon.png | Bin 0 -> 740 bytes .../pics/pokemon/followers/jumpluff.png | Bin 0 -> 671 bytes .../pics/pokemon/followers/jynx.png | Bin 0 -> 880 bytes .../pics/pokemon/followers/kabuto.png | Bin 0 -> 509 bytes .../pics/pokemon/followers/kabutops.png | Bin 0 -> 833 bytes .../pics/pokemon/followers/kangaskhan.png | Bin 0 -> 841 bytes .../pics/pokemon/followers/kecleon.png | Bin 0 -> 739 bytes .../pics/pokemon/followers/kingdra.png | Bin 0 -> 859 bytes .../pics/pokemon/followers/krabby.png | Bin 0 -> 534 bytes .../pics/pokemon/followers/kyogre.png | Bin 0 -> 1311 bytes .../pics/pokemon/followers/lanturn.png | Bin 0 -> 947 bytes .../pics/pokemon/followers/lapras.png | Bin 0 -> 940 bytes .../pics/pokemon/followers/latias.png | Bin 0 -> 1161 bytes .../pics/pokemon/followers/latios.png | Bin 0 -> 1219 bytes .../pics/pokemon/followers/ledian.png | Bin 0 -> 1027 bytes .../pics/pokemon/followers/ledyba.png | Bin 0 -> 1025 bytes .../pics/pokemon/followers/lickitung.png | Bin 0 -> 642 bytes .../pics/pokemon/followers/lileep.png | Bin 0 -> 724 bytes .../pics/pokemon/followers/linoone.png | Bin 0 -> 651 bytes .../pics/pokemon/followers/lombre.png | Bin 0 -> 679 bytes .../pics/pokemon/followers/lotad.png | Bin 0 -> 532 bytes .../pics/pokemon/followers/ludicolo.png | Bin 0 -> 909 bytes .../pics/pokemon/followers/lugia.png | Bin 0 -> 1751 bytes .../pics/pokemon/followers/luvdisc.png | Bin 0 -> 419 bytes .../pics/pokemon/followers/machamp.png | Bin 0 -> 967 bytes .../pics/pokemon/followers/machoke.png | Bin 0 -> 678 bytes .../pics/pokemon/followers/machop.png | Bin 0 -> 476 bytes .../pics/pokemon/followers/magby.png | Bin 0 -> 545 bytes .../pics/pokemon/followers/magcargo.png | Bin 0 -> 1206 bytes .../pics/pokemon/followers/magikarp.png | Bin 0 -> 840 bytes .../pics/pokemon/followers/magmar.png | Bin 0 -> 881 bytes .../pics/pokemon/followers/magnemite.png | Bin 0 -> 482 bytes .../pics/pokemon/followers/magneton.png | Bin 0 -> 841 bytes .../pics/pokemon/followers/makuhita.png | Bin 0 -> 627 bytes .../pics/pokemon/followers/manectric.png | Bin 0 -> 798 bytes .../pics/pokemon/followers/mankey.png | Bin 0 -> 631 bytes .../pics/pokemon/followers/mantine.png | Bin 0 -> 1002 bytes .../pics/pokemon/followers/mareep.png | Bin 0 -> 722 bytes .../pics/pokemon/followers/marshtomp.png | Bin 0 -> 552 bytes .../pics/pokemon/followers/masquerain.png | Bin 0 -> 968 bytes .../pics/pokemon/followers/mawile.png | Bin 0 -> 757 bytes .../pics/pokemon/followers/medicham.png | Bin 0 -> 673 bytes .../pics/pokemon/followers/meditite.png | Bin 0 -> 556 bytes .../pics/pokemon/followers/meganium.png | Bin 0 -> 843 bytes .../pics/pokemon/followers/meowth.png | Bin 0 -> 685 bytes .../pics/pokemon/followers/metang.png | Bin 0 -> 979 bytes .../pics/pokemon/followers/mew.png | Bin 0 -> 618 bytes .../pics/pokemon/followers/mewtwo.png | Bin 0 -> 928 bytes .../pics/pokemon/followers/mightyena.png | Bin 0 -> 803 bytes .../pics/pokemon/followers/milotic.png | Bin 0 -> 1050 bytes .../pics/pokemon/followers/miltank.png | Bin 0 -> 799 bytes .../pics/pokemon/followers/misdreavus.png | Bin 0 -> 891 bytes .../pics/pokemon/followers/moltres.png | Bin 0 -> 1158 bytes .../pics/pokemon/followers/mr_mime.png | Bin 0 -> 743 bytes .../pics/pokemon/followers/mudkip.png | Bin 0 -> 461 bytes .../pics/pokemon/followers/murkrow.png | Bin 0 -> 509 bytes .../pics/pokemon/followers/natu.png | Bin 0 -> 472 bytes .../pics/pokemon/followers/nidoking.png | Bin 0 -> 799 bytes .../pics/pokemon/followers/nidoqueen.png | Bin 0 -> 830 bytes .../pics/pokemon/followers/nidoran_f.png | Bin 0 -> 496 bytes .../pics/pokemon/followers/nidorina.png | Bin 0 -> 666 bytes .../pics/pokemon/followers/nincada.png | Bin 0 -> 681 bytes .../pics/pokemon/followers/ninetales.png | Bin 0 -> 810 bytes .../pics/pokemon/followers/ninjask.png | Bin 0 -> 751 bytes .../pics/pokemon/followers/noctowl.png | Bin 0 -> 1114 bytes .../pics/pokemon/followers/nosepass.png | Bin 0 -> 705 bytes .../pics/pokemon/followers/numel.png | Bin 0 -> 848 bytes .../pics/pokemon/followers/nuzleaf.png | Bin 0 -> 624 bytes .../pics/pokemon/followers/octillery.png | Bin 0 -> 691 bytes .../pics/pokemon/followers/omanyte.png | Bin 0 -> 603 bytes .../pics/pokemon/followers/omastar.png | Bin 0 -> 837 bytes .../pics/pokemon/followers/pelipper.png | Bin 0 -> 1014 bytes .../pics/pokemon/followers/persian.png | Bin 0 -> 717 bytes .../pics/pokemon/followers/phanpy.png | Bin 0 -> 457 bytes .../pics/pokemon/followers/pichu.png | Bin 0 -> 465 bytes .../pics/pokemon/followers/pidgeot.png | Bin 0 -> 1177 bytes .../pics/pokemon/followers/pidgeotto.png | Bin 0 -> 912 bytes .../pics/pokemon/followers/pidgey.png | Bin 0 -> 444 bytes .../pics/pokemon/followers/pikachu.png | Bin 0 -> 550 bytes .../pics/pokemon/followers/piloswine.png | Bin 0 -> 640 bytes .../pics/pokemon/followers/pineco.png | Bin 0 -> 420 bytes .../pics/pokemon/followers/politoed.png | Bin 0 -> 751 bytes .../pics/pokemon/followers/poliwag.png | Bin 0 -> 526 bytes .../pics/pokemon/followers/poochyena.png | Bin 0 -> 551 bytes .../pics/pokemon/followers/porygon.png | Bin 0 -> 612 bytes .../pics/pokemon/followers/porygon2.png | Bin 0 -> 592 bytes .../pics/pokemon/followers/primeape.png | Bin 0 -> 806 bytes .../pics/pokemon/followers/quilava.png | Bin 0 -> 1062 bytes .../pics/pokemon/followers/qwilfish.png | Bin 0 -> 633 bytes .../pics/pokemon/followers/raichu.png | Bin 0 -> 805 bytes .../pics/pokemon/followers/raikou.png | Bin 0 -> 1010 bytes .../pics/pokemon/followers/raticate.png | Bin 0 -> 589 bytes .../pics/pokemon/followers/rattata.png | Bin 0 -> 552 bytes .../pics/pokemon/followers/rayquaza.png | Bin 0 -> 1648 bytes .../pics/pokemon/followers/regice.png | Bin 0 -> 850 bytes .../pics/pokemon/followers/regirock.png | Bin 0 -> 1074 bytes .../pics/pokemon/followers/registeel.png | Bin 0 -> 845 bytes .../pics/pokemon/followers/relicanth.png | Bin 0 -> 864 bytes .../pics/pokemon/followers/remoraid.png | Bin 0 -> 599 bytes .../pics/pokemon/followers/rhydon.png | Bin 0 -> 790 bytes .../pics/pokemon/followers/roselia.png | Bin 0 -> 623 bytes .../pics/pokemon/followers/sableye.png | Bin 0 -> 554 bytes .../pics/pokemon/followers/salamence.png | Bin 0 -> 1027 bytes .../pics/pokemon/followers/sandshrew.png | Bin 0 -> 521 bytes .../pics/pokemon/followers/sandslash.png | Bin 0 -> 729 bytes .../pics/pokemon/followers/sceptile.png | Bin 0 -> 907 bytes .../pics/pokemon/followers/scizor.png | Bin 0 -> 912 bytes .../pics/pokemon/followers/scyther.png | Bin 0 -> 827 bytes .../pics/pokemon/followers/seadra.png | Bin 0 -> 813 bytes .../pics/pokemon/followers/seaking.png | Bin 0 -> 1038 bytes .../pics/pokemon/followers/sealeo.png | Bin 0 -> 820 bytes .../pics/pokemon/followers/seedot.png | Bin 0 -> 442 bytes .../pics/pokemon/followers/seel.png | Bin 0 -> 669 bytes .../pics/pokemon/followers/sentret.png | Bin 0 -> 608 bytes .../pics/pokemon/followers/seviper.png | Bin 0 -> 957 bytes .../pics/pokemon/followers/sharpedo.png | Bin 0 -> 746 bytes .../pics/pokemon/followers/shedinja.png | Bin 0 -> 693 bytes .../pics/pokemon/followers/shelgon.png | Bin 0 -> 596 bytes .../pics/pokemon/followers/shellder.png | Bin 0 -> 577 bytes .../pics/pokemon/followers/shiftry.png | Bin 0 -> 912 bytes .../pics/pokemon/followers/shroomish.png | Bin 0 -> 453 bytes .../pics/pokemon/followers/shuckle.png | Bin 0 -> 594 bytes .../pics/pokemon/followers/skarmory.png | Bin 0 -> 1071 bytes .../pics/pokemon/followers/skiploom.png | Bin 0 -> 581 bytes .../pics/pokemon/followers/slaking.png | Bin 0 -> 1015 bytes .../pics/pokemon/followers/slakoth.png | Bin 0 -> 652 bytes .../pics/pokemon/followers/slowbro.png | Bin 0 -> 808 bytes .../pics/pokemon/followers/slowking.png | Bin 0 -> 817 bytes .../pics/pokemon/followers/slowpoke.png | Bin 0 -> 634 bytes .../pics/pokemon/followers/smeargle.png | Bin 0 -> 694 bytes .../pics/pokemon/followers/smoochum.png | Bin 0 -> 541 bytes .../pics/pokemon/followers/sneasel.png | Bin 0 -> 741 bytes .../pics/pokemon/followers/snorlax.png | Bin 0 -> 892 bytes .../pics/pokemon/followers/snorunt.png | Bin 0 -> 481 bytes .../pics/pokemon/followers/snubbull.png | Bin 0 -> 701 bytes .../pics/pokemon/followers/spearow.png | Bin 0 -> 471 bytes .../pics/pokemon/followers/spheal.png | Bin 0 -> 582 bytes .../pics/pokemon/followers/spinarak.png | Bin 0 -> 667 bytes .../pics/pokemon/followers/spinda.png | Bin 0 -> 648 bytes .../pics/pokemon/followers/spoink.png | Bin 0 -> 500 bytes .../pics/pokemon/followers/squirtle.png | Bin 0 -> 439 bytes .../pics/pokemon/followers/stantler.png | Bin 0 -> 745 bytes .../pics/pokemon/followers/sudowoodo.png | Bin 0 -> 672 bytes .../pics/pokemon/followers/suicune.png | Bin 0 -> 1091 bytes .../pics/pokemon/followers/sunflora.png | Bin 0 -> 605 bytes .../pics/pokemon/followers/sunkern.png | Bin 0 -> 445 bytes .../pics/pokemon/followers/surskit.png | Bin 0 -> 466 bytes .../pics/pokemon/followers/swalot.png | Bin 0 -> 821 bytes .../pics/pokemon/followers/swampert.png | Bin 0 -> 894 bytes .../pics/pokemon/followers/swellow.png | Bin 0 -> 1050 bytes .../pics/pokemon/followers/swinub.png | Bin 0 -> 497 bytes .../pics/pokemon/followers/taillow.png | Bin 0 -> 465 bytes .../pics/pokemon/followers/tangela.png | Bin 0 -> 656 bytes .../pics/pokemon/followers/tauros.png | Bin 0 -> 909 bytes .../pics/pokemon/followers/teddiursa.png | Bin 0 -> 692 bytes .../pics/pokemon/followers/tentacool.png | Bin 0 -> 636 bytes .../pics/pokemon/followers/tentacruel.png | Bin 0 -> 749 bytes .../pics/pokemon/followers/togepi.png | Bin 0 -> 553 bytes .../pics/pokemon/followers/torkoal.png | Bin 0 -> 731 bytes .../pics/pokemon/followers/totodile.png | Bin 0 -> 574 bytes .../pics/pokemon/followers/trapinch.png | Bin 0 -> 461 bytes .../pics/pokemon/followers/treecko.png | Bin 0 -> 452 bytes .../pics/pokemon/followers/tropius.png | Bin 0 -> 1065 bytes .../pics/pokemon/followers/typhlosion.png | Bin 0 -> 1101 bytes .../pics/pokemon/followers/tyranitar.png | Bin 0 -> 940 bytes .../pics/pokemon/followers/tyrogue.png | Bin 0 -> 515 bytes .../pics/pokemon/followers/umbreon.png | Bin 0 -> 739 bytes .../pics/pokemon/followers/ursaring.png | Bin 0 -> 844 bytes .../pics/pokemon/followers/vaporeon.png | Bin 0 -> 870 bytes .../pics/pokemon/followers/venomoth.png | Bin 0 -> 1087 bytes .../pics/pokemon/followers/venonat.png | Bin 0 -> 589 bytes .../pics/pokemon/followers/venusaur.png | Bin 0 -> 898 bytes .../pics/pokemon/followers/vibrava.png | Bin 0 -> 916 bytes .../pics/pokemon/followers/victreebel.png | Bin 0 -> 967 bytes .../pics/pokemon/followers/vigoroth.png | Bin 0 -> 759 bytes .../pics/pokemon/followers/volbeat.png | Bin 0 -> 932 bytes .../pics/pokemon/followers/vulpix.png | Bin 0 -> 627 bytes .../pics/pokemon/followers/wailmer.png | Bin 0 -> 718 bytes .../pics/pokemon/followers/wailord.png | Bin 0 -> 1151 bytes .../pics/pokemon/followers/walrein.png | Bin 0 -> 1049 bytes .../pics/pokemon/followers/wartortle.png | Bin 0 -> 698 bytes .../pics/pokemon/followers/weepinbell.png | Bin 0 -> 698 bytes .../pics/pokemon/followers/whiscash.png | Bin 0 -> 787 bytes .../pics/pokemon/followers/whismur.png | Bin 0 -> 501 bytes .../pics/pokemon/followers/wingull.png | Bin 0 -> 652 bytes .../pics/pokemon/followers/wurmple.png | Bin 0 -> 642 bytes .../pics/pokemon/followers/wynaut.png | Bin 0 -> 564 bytes .../pics/pokemon/followers/xatu.png | Bin 0 -> 740 bytes .../pics/pokemon/followers/yanma.png | Bin 0 -> 1038 bytes .../pics/pokemon/followers/zangoose.png | Bin 0 -> 912 bytes .../pics/pokemon/followers/zapdos.png | Bin 0 -> 1073 bytes .../pics/pokemon/followers/zigzagoon.png | Bin 0 -> 769 bytes .../maps_expert/floor_0/collision.bin | Bin 32 -> 0 bytes .../maps_expert/floor_0/metatiles.bin | 1 - .../maps_expert/floor_1/collision.bin | Bin 32 -> 0 bytes .../maps_expert/floor_1/metatiles.bin | 1 - .../maps_expert/floor_2/collision.bin | 1 - .../maps_expert/floor_2/metatiles.bin | 1 - .../maps_expert/floor_3/collision.bin | Bin 32 -> 0 bytes .../maps_expert/floor_3/metatiles.bin | 1 - .../maps_jp/floor_0/collision.bin | 1 - .../maps_jp/floor_0/metatiles.bin | 1 - .../maps_jp/floor_1/collision.bin | Bin 32 -> 0 bytes .../maps_jp/floor_1/metatiles.bin | 1 - .../maps_normal/floor_0/collision.bin | 1 - .../maps_normal/floor_0/metatiles.bin | 1 - .../maps_normal/floor_1/collision.bin | 1 - .../maps_normal/floor_1/metatiles.bin | 1 - .../maps_normal/floor_2/collision.bin | Bin 32 -> 0 bytes .../maps_normal/floor_2/metatiles.bin | 1 - .../maps_normal/floor_3/collision.bin | Bin 32 -> 0 bytes .../maps_normal/floor_3/metatiles.bin | 1 - .../maps_unique/floor_0/collision.bin | Bin 32 -> 0 bytes .../maps_unique/floor_0/metatiles.bin | 1 - .../maps_unique/floor_1/collision.bin | Bin 32 -> 0 bytes .../maps_unique/floor_1/metatiles.bin | 1 - .../maps_unique/floor_2/collision.bin | Bin 32 -> 0 bytes .../maps_unique/floor_2/metatiles.bin | 1 - .../maps_unique/floor_3/collision.bin | Bin 32 -> 0 bytes .../maps_unique/floor_3/metatiles.bin | 1 - .../maps_variety/floor_0/collision.bin | Bin 32 -> 0 bytes .../maps_variety/floor_0/metatiles.bin | 1 - .../maps_variety/floor_1/collision.bin | Bin 32 -> 0 bytes .../maps_variety/floor_1/metatiles.bin | 1 - .../maps_variety/floor_2/collision.bin | Bin 32 -> 0 bytes .../maps_variety/floor_2/metatiles.bin | 1 - .../maps_variety/floor_3/collision.bin | Bin 32 -> 0 bytes .../maps_variety/floor_3/metatiles.bin | 1 - include/battle_anim.h | 28 +- include/battle_controllers.h | 14 +- include/battle_gfx_sfx_util.h | 2 +- include/battle_interface.h | 4 +- include/battle_setup.h | 2 +- include/battle_util.h | 2 +- include/constants/battle.h | 2 +- include/constants/battle_anim.h | 17 - include/constants/battle_frontier.h | 10 - include/constants/battle_pike.h | 2 - include/constants/battle_pyramid.h | 7 - include/constants/battle_string_ids.h | 2 - include/constants/battle_tent.h | 6 - include/constants/event_object_movement.h | 3 +- include/constants/event_objects.h | 4 + include/constants/field_effects.h | 6 + include/constants/flags.h | 2 +- include/constants/follow_me.h | 19 + include/constants/metatile_labels.h | 2 +- include/constants/trainer_hill.h | 27 +- include/constants/tv.h | 17 - include/constants/union_room.h | 2 - include/contest.h | 9 +- include/decompress.h | 2 +- include/digit_obj_util.h | 4 +- include/ereader_helpers.h | 2 +- include/event_data.h | 2 +- include/event_object_movement.h | 24 +- include/event_scripts.h | 30 +- include/evolution_graphics.h | 2 +- include/field_camera.h | 8 +- include/field_player_avatar.h | 54 +- include/field_screen_effect.h | 2 + include/field_special_scene.h | 8 +- include/field_specials.h | 1 + include/fldeff.h | 6 +- include/fldeff_misc.h | 6 +- include/follow_me.h | 58 + include/gba/m4a_internal.h | 2 +- include/global.fieldmap.h | 5 +- include/global.h | 43 +- include/intro_credits_graphics.h | 6 +- include/link.h | 2 +- include/list_menu.h | 8 +- include/main_menu.h | 2 +- include/mauville_old_man.h | 4 +- include/menu.h | 14 +- include/menu_helpers.h | 6 +- include/menu_specialized.h | 2 +- include/overworld.h | 6 +- include/pokeball.h | 4 +- include/pokemon.h | 14 +- include/pokemon_storage_system.h | 4 +- include/pokenav.h | 14 +- include/region_map.h | 2 +- include/scanline_effect.h | 2 +- include/script.h | 3 + include/trade.h | 4 +- include/trainer_card.h | 2 +- include/trainer_hill.h | 42 +- ld_script.txt | 52 +- spritesheet_rules.mk | 1261 +++++- src/agb_flash_1m.c | 2 +- src/bard_music.c | 4 +- src/battle_ai_switch_items.c | 57 +- src/battle_anim_dragon.c | 4 +- src/battle_anim_effects_1.c | 96 +- src/battle_anim_effects_2.c | 2 +- src/battle_anim_effects_3.c | 247 +- src/battle_anim_fire.c | 274 +- src/battle_anim_ghost.c | 6 +- src/battle_anim_mons.c | 40 +- src/battle_anim_normal.c | 44 +- src/battle_anim_psychic.c | 4 +- src/battle_anim_smokescreen.c | 66 +- src/battle_anim_sound_tasks.c | 16 +- src/battle_anim_status_effects.c | 6 +- src/battle_anim_throw.c | 10 +- src/battle_anim_utility_funcs.c | 17 +- src/battle_bg.c | 8 +- src/battle_controller_player.c | 30 +- src/battle_controllers.c | 26 +- src/battle_dome.c | 148 +- src/battle_factory.c | 44 +- src/battle_factory_screen.c | 10 +- src/battle_gfx_sfx_util.c | 12 +- src/battle_interface.c | 94 +- src/battle_main.c | 15 +- src/battle_message.c | 6 +- src/battle_pike.c | 34 +- src/battle_pyramid.c | 90 +- src/battle_pyramid_bag.c | 6 +- src/battle_script_commands.c | 2 +- src/battle_setup.c | 27 +- src/battle_tent.c | 40 +- src/battle_tower.c | 102 +- src/battle_transition.c | 4 +- src/battle_util.c | 2 +- src/berry_blender.c | 6 +- src/berry_crush.c | 6 +- src/bike.c | 4 +- src/cable_car.c | 4 +- src/coins.c | 2 +- src/contest.c | 50 +- src/contest_util.c | 46 +- src/credits.c | 6 +- .../battle_pyramid_open_level_wild_mons.h | 2 +- src/data/battle_frontier/trainer_hill.h | 1389 ++++-- .../field_effect_object_template_pointers.h | 6 + src/data/field_effects/field_effect_objects.h | 49 +- .../movement_action_func_tables.h | 0 .../object_events/movement_type_func_tables.h | 7 + src/data/object_events/object_event_anims.h | 0 .../object_events/object_event_graphics.h | 3 + .../object_event_graphics_info.h | 0 .../object_event_graphics_info_pointers.h | 2 +- .../object_events/object_event_pic_tables.h | 3764 +++++++++++++++++ src/data/pokemon/base_stats.h | 1548 +++---- src/data/trade.h | 6 +- src/data/trainer_graphics/back_pic_anims.h | 30 +- src/decompress.c | 6 +- src/decoration.c | 4 +- src/dodrio_berry_picking.c | 8 +- src/easy_chat.c | 11 +- src/ereader_helpers.c | 124 +- src/event_data.c | 8 +- src/event_object_movement.c | 395 +- src/evolution_graphics.c | 162 +- src/evolution_scene.c | 6 +- src/field_camera.c | 14 +- src/field_control_avatar.c | 16 +- src/field_door.c | 83 +- src/field_effect.c | 78 +- src/field_effect_helpers.c | 54 + src/field_message_box.c | 2 +- src/field_player_avatar.c | 174 +- src/field_region_map.c | 5 +- src/field_screen_effect.c | 70 +- src/field_special_scene.c | 204 +- src/field_specials.c | 75 +- src/field_weather.c | 8 +- src/field_weather_effect.c | 79 +- src/fieldmap.c | 42 +- src/frontier_util.c | 103 +- src/hall_of_fame.c | 26 +- src/intro.c | 4 +- src/intro_credits_graphics.c | 3 +- src/item_menu.c | 2 +- src/item_menu_icons.c | 31 +- src/item_use.c | 44 +- src/landmark.c | 16 +- src/libisagbprn.c | 10 +- src/link.c | 12 +- src/list_menu.c | 8 +- src/m4a_1.s | 8 +- src/main.c | 6 +- src/main_menu.c | 57 +- src/map_name_popup.c | 39 +- src/match_call.c | 46 +- src/mauville_old_man.c | 4 +- src/menu.c | 8 +- src/menu_helpers.c | 47 +- src/mystery_event_script.c | 35 +- src/mystery_gift.c | 4 - src/mystery_gift_client.c | 7 +- src/mystery_gift_server.c | 3 +- src/mystery_gift_view.c | 6 +- src/new_game.c | 1 + src/overworld.c | 49 +- src/palette.c | 62 +- src/party_menu.c | 8 +- src/player_pc.c | 114 +- src/pokeball.c | 185 +- src/pokedex.c | 16 +- src/pokedex_area_region_map.c | 4 +- src/pokemon.c | 38 +- src/pokemon_jump.c | 7 +- src/pokemon_storage_system.c | 13 +- src/pokemon_summary_screen.c | 196 +- src/pokenav.c | 13 +- src/pokenav_conditions.c | 4 +- src/pokenav_list.c | 318 +- src/pokenav_main_menu.c | 10 +- src/pokenav_match_call_data.c | 2 +- src/pokenav_region_map.c | 2 +- src/record_mixing.c | 2 +- src/recorded_battle.c | 2 - src/region_map.c | 602 +-- src/rom_header_gf.c | 49 +- src/rotating_gate.c | 70 +- src/rotating_tile_puzzle.c | 10 +- src/save.c | 6 - src/scrcmd.c | 4 +- src/script.c | 7 + src/script_movement.c | 9 +- src/siirtc.c | 1 - src/slot_machine.c | 72 +- src/start_menu.c | 9 +- src/tileset_anims.c | 6 +- src/trade.c | 12 +- src/trainer_hill.c | 227 +- src/tv.c | 117 +- src/union_room.c | 2 +- src/union_room_chat.c | 3 +- tools/gbagfx/Makefile | 2 - tools/mid2agb/agb.cpp | 3 +- tools/rsfont/Makefile | 2 - 896 files changed, 16440 insertions(+), 4907 deletions(-) create mode 100644 docs/bugs_and_glitches.md create mode 100644 graphics/door_anims/battle_tower_corridor.png delete mode 100644 graphics/door_anims/petalburg_gym.png rename graphics/door_anims/{unused_battle_frontier.png => unknown.png} (100%) create mode 100644 graphics/field_effects/pics/bug_tracks.png create mode 100644 graphics/field_effects/pics/slither_tracks.png create mode 100644 graphics/field_effects/pics/spot_tracks.png create mode 100644 graphics/object_events/palettes/followers/aggron.pal create mode 100644 graphics/object_events/palettes/followers/aipom.pal create mode 100644 graphics/object_events/palettes/followers/ampharos.pal create mode 100644 graphics/object_events/palettes/followers/anorith.pal create mode 100644 graphics/object_events/palettes/followers/ariados.pal create mode 100644 graphics/object_events/palettes/followers/armaldo.pal create mode 100644 graphics/object_events/palettes/followers/articuno.pal create mode 100644 graphics/object_events/palettes/followers/bagon.pal create mode 100644 graphics/object_events/palettes/followers/barboach.pal create mode 100644 graphics/object_events/palettes/followers/bayleef.pal create mode 100644 graphics/object_events/palettes/followers/beautifly.pal create mode 100644 graphics/object_events/palettes/followers/beldum.pal create mode 100644 graphics/object_events/palettes/followers/bellossom.pal create mode 100644 graphics/object_events/palettes/followers/blastoise.pal create mode 100644 graphics/object_events/palettes/followers/blaziken.pal create mode 100644 graphics/object_events/palettes/followers/blissey.pal create mode 100644 graphics/object_events/palettes/followers/breloom.pal create mode 100644 graphics/object_events/palettes/followers/butterfree.pal create mode 100644 graphics/object_events/palettes/followers/camerupt.pal create mode 100644 graphics/object_events/palettes/followers/carvanha.pal create mode 100644 graphics/object_events/palettes/followers/caterpie.pal create mode 100644 graphics/object_events/palettes/followers/celebi.pal create mode 100644 graphics/object_events/palettes/followers/charizard.pal create mode 100644 graphics/object_events/palettes/followers/charmander.pal create mode 100644 graphics/object_events/palettes/followers/charmeleon.pal create mode 100644 graphics/object_events/palettes/followers/chimecho.pal create mode 100644 graphics/object_events/palettes/followers/chinchou.pal create mode 100644 graphics/object_events/palettes/followers/clamperl.pal create mode 100644 graphics/object_events/palettes/followers/claydol.pal create mode 100644 graphics/object_events/palettes/followers/clefable.pal create mode 100644 graphics/object_events/palettes/followers/cloyster.pal create mode 100644 graphics/object_events/palettes/followers/corphish.pal create mode 100644 graphics/object_events/palettes/followers/corsola.pal create mode 100644 graphics/object_events/palettes/followers/cradily.pal create mode 100644 graphics/object_events/palettes/followers/crawdaunt.pal create mode 100644 graphics/object_events/palettes/followers/crobat.pal create mode 100644 graphics/object_events/palettes/followers/croconaw.pal create mode 100644 graphics/object_events/palettes/followers/cyndaquil.pal create mode 100644 graphics/object_events/palettes/followers/delcatty.pal create mode 100644 graphics/object_events/palettes/followers/delibird.pal create mode 100644 graphics/object_events/palettes/followers/deoxys.pal create mode 100644 graphics/object_events/palettes/followers/diglett.pal create mode 100644 graphics/object_events/palettes/followers/dodrio.pal create mode 100644 graphics/object_events/palettes/followers/donphan.pal create mode 100644 graphics/object_events/palettes/followers/dragonair.pal create mode 100644 graphics/object_events/palettes/followers/dragonite.pal create mode 100644 graphics/object_events/palettes/followers/dratini.pal create mode 100644 graphics/object_events/palettes/followers/dugtrio.pal create mode 100644 graphics/object_events/palettes/followers/dunsparce.pal create mode 100644 graphics/object_events/palettes/followers/dusclops.pal create mode 100644 graphics/object_events/palettes/followers/duskull.pal create mode 100644 graphics/object_events/palettes/followers/dustox.pal create mode 100644 graphics/object_events/palettes/followers/eevee.pal create mode 100644 graphics/object_events/palettes/followers/ekans.pal create mode 100644 graphics/object_events/palettes/followers/electrike.pal create mode 100644 graphics/object_events/palettes/followers/entei.pal create mode 100644 graphics/object_events/palettes/followers/espeon.pal create mode 100644 graphics/object_events/palettes/followers/exeggutor.pal create mode 100644 graphics/object_events/palettes/followers/exploud.pal create mode 100644 graphics/object_events/palettes/followers/farfetchd.pal create mode 100644 graphics/object_events/palettes/followers/fearow.pal create mode 100644 graphics/object_events/palettes/followers/feebas.pal create mode 100644 graphics/object_events/palettes/followers/feraligatr.pal create mode 100644 graphics/object_events/palettes/followers/flaaffy.pal create mode 100644 graphics/object_events/palettes/followers/flareon.pal create mode 100644 graphics/object_events/palettes/followers/flygon.pal create mode 100644 graphics/object_events/palettes/followers/forretress.pal create mode 100644 graphics/object_events/palettes/followers/gardevoir.pal create mode 100644 graphics/object_events/palettes/followers/gastly.pal create mode 100644 graphics/object_events/palettes/followers/gengar.pal create mode 100644 graphics/object_events/palettes/followers/girafarig.pal create mode 100644 graphics/object_events/palettes/followers/glalie.pal create mode 100644 graphics/object_events/palettes/followers/gligar.pal create mode 100644 graphics/object_events/palettes/followers/goldeen.pal create mode 100644 graphics/object_events/palettes/followers/golduck.pal create mode 100644 graphics/object_events/palettes/followers/golem.pal create mode 100644 graphics/object_events/palettes/followers/gorebyss.pal create mode 100644 graphics/object_events/palettes/followers/granbull.pal create mode 100644 graphics/object_events/palettes/followers/groudon.pal create mode 100644 graphics/object_events/palettes/followers/grovyle.pal create mode 100644 graphics/object_events/palettes/followers/grumpig.pal create mode 100644 graphics/object_events/palettes/followers/gulpin.pal create mode 100644 graphics/object_events/palettes/followers/gyarados.pal create mode 100644 graphics/object_events/palettes/followers/hariyama.pal create mode 100644 graphics/object_events/palettes/followers/haunter.pal create mode 100644 graphics/object_events/palettes/followers/heracross.pal create mode 100644 graphics/object_events/palettes/followers/hitmonchan.pal create mode 100644 graphics/object_events/palettes/followers/hitmonlee.pal create mode 100644 graphics/object_events/palettes/followers/hitmontop.pal create mode 100644 graphics/object_events/palettes/followers/ho_oh.pal create mode 100644 graphics/object_events/palettes/followers/hoothoot.pal create mode 100644 graphics/object_events/palettes/followers/hoppip.pal create mode 100644 graphics/object_events/palettes/followers/horsea.pal create mode 100644 graphics/object_events/palettes/followers/huntail.pal create mode 100644 graphics/object_events/palettes/followers/igglybuff.pal create mode 100644 graphics/object_events/palettes/followers/illumise.pal create mode 100644 graphics/object_events/palettes/followers/ivysaur.pal create mode 100644 graphics/object_events/palettes/followers/jigglypuff.pal create mode 100644 graphics/object_events/palettes/followers/jirachi.pal create mode 100644 graphics/object_events/palettes/followers/jolteon.pal create mode 100644 graphics/object_events/palettes/followers/jumpluff.pal create mode 100644 graphics/object_events/palettes/followers/jynx.pal create mode 100644 graphics/object_events/palettes/followers/kabuto.pal create mode 100644 graphics/object_events/palettes/followers/kabutops.pal create mode 100644 graphics/object_events/palettes/followers/kangaskhan.pal create mode 100644 graphics/object_events/palettes/followers/kecleon.pal create mode 100644 graphics/object_events/palettes/followers/kingdra.pal create mode 100644 graphics/object_events/palettes/followers/kyogre.pal create mode 100644 graphics/object_events/palettes/followers/lanturn.pal create mode 100644 graphics/object_events/palettes/followers/lapras.pal create mode 100644 graphics/object_events/palettes/followers/latias.pal create mode 100644 graphics/object_events/palettes/followers/latios.pal create mode 100644 graphics/object_events/palettes/followers/ledian.pal create mode 100644 graphics/object_events/palettes/followers/ledyba.pal create mode 100644 graphics/object_events/palettes/followers/lickitung.pal create mode 100644 graphics/object_events/palettes/followers/lileep.pal create mode 100644 graphics/object_events/palettes/followers/linoone.pal create mode 100644 graphics/object_events/palettes/followers/lombre.pal create mode 100644 graphics/object_events/palettes/followers/lotad.pal create mode 100644 graphics/object_events/palettes/followers/ludicolo.pal create mode 100644 graphics/object_events/palettes/followers/lugia.pal create mode 100644 graphics/object_events/palettes/followers/luvdisc.pal create mode 100644 graphics/object_events/palettes/followers/machamp.pal create mode 100644 graphics/object_events/palettes/followers/machoke.pal create mode 100644 graphics/object_events/palettes/followers/machop.pal create mode 100644 graphics/object_events/palettes/followers/magby.pal create mode 100644 graphics/object_events/palettes/followers/magcargo.pal create mode 100644 graphics/object_events/palettes/followers/magikarp.pal create mode 100644 graphics/object_events/palettes/followers/magmar.pal create mode 100644 graphics/object_events/palettes/followers/magnemite.pal create mode 100644 graphics/object_events/palettes/followers/makuhita.pal create mode 100644 graphics/object_events/palettes/followers/manectric.pal create mode 100644 graphics/object_events/palettes/followers/mankey.pal create mode 100644 graphics/object_events/palettes/followers/mantine.pal create mode 100644 graphics/object_events/palettes/followers/mareep.pal create mode 100644 graphics/object_events/palettes/followers/marshtomp.pal create mode 100644 graphics/object_events/palettes/followers/masquerain.pal create mode 100644 graphics/object_events/palettes/followers/mawile.pal create mode 100644 graphics/object_events/palettes/followers/medicham.pal create mode 100644 graphics/object_events/palettes/followers/meditite.pal create mode 100644 graphics/object_events/palettes/followers/meganium.pal create mode 100644 graphics/object_events/palettes/followers/meowth.pal create mode 100644 graphics/object_events/palettes/followers/metang.pal create mode 100644 graphics/object_events/palettes/followers/mew.pal create mode 100644 graphics/object_events/palettes/followers/mewtwo.pal create mode 100644 graphics/object_events/palettes/followers/mightyena.pal create mode 100644 graphics/object_events/palettes/followers/milotic.pal create mode 100644 graphics/object_events/palettes/followers/miltank.pal create mode 100644 graphics/object_events/palettes/followers/misdreavus.pal create mode 100644 graphics/object_events/palettes/followers/moltres.pal create mode 100644 graphics/object_events/palettes/followers/mr_mime.pal create mode 100644 graphics/object_events/palettes/followers/mudkip.pal create mode 100644 graphics/object_events/palettes/followers/murkrow.pal create mode 100644 graphics/object_events/palettes/followers/natu.pal create mode 100644 graphics/object_events/palettes/followers/nidoking.pal create mode 100644 graphics/object_events/palettes/followers/nidoqueen.pal create mode 100644 graphics/object_events/palettes/followers/nidoran_f.pal create mode 100644 graphics/object_events/palettes/followers/nidorina.pal create mode 100644 graphics/object_events/palettes/followers/nincada.pal create mode 100644 graphics/object_events/palettes/followers/ninetales.pal create mode 100644 graphics/object_events/palettes/followers/ninjask.pal create mode 100644 graphics/object_events/palettes/followers/noctowl.pal create mode 100644 graphics/object_events/palettes/followers/nosepass.pal create mode 100644 graphics/object_events/palettes/followers/numel.pal create mode 100644 graphics/object_events/palettes/followers/nuzleaf.pal create mode 100644 graphics/object_events/palettes/followers/octillery.pal create mode 100644 graphics/object_events/palettes/followers/omanyte.pal create mode 100644 graphics/object_events/palettes/followers/omastar.pal create mode 100644 graphics/object_events/palettes/followers/pelipper.pal create mode 100644 graphics/object_events/palettes/followers/persian.pal create mode 100644 graphics/object_events/palettes/followers/phanpy.pal create mode 100644 graphics/object_events/palettes/followers/pichu.pal create mode 100644 graphics/object_events/palettes/followers/pidgeot.pal create mode 100644 graphics/object_events/palettes/followers/pidgeotto.pal create mode 100644 graphics/object_events/palettes/followers/pidgey.pal create mode 100644 graphics/object_events/palettes/followers/pikachu.pal create mode 100644 graphics/object_events/palettes/followers/piloswine.pal create mode 100644 graphics/object_events/palettes/followers/pineco.pal create mode 100644 graphics/object_events/palettes/followers/politoed.pal create mode 100644 graphics/object_events/palettes/followers/poliwag.pal create mode 100644 graphics/object_events/palettes/followers/poochyena.pal create mode 100644 graphics/object_events/palettes/followers/porygon.pal create mode 100644 graphics/object_events/palettes/followers/porygon2.pal create mode 100644 graphics/object_events/palettes/followers/primeape.pal create mode 100644 graphics/object_events/palettes/followers/quilava.pal create mode 100644 graphics/object_events/palettes/followers/qwilfish.pal create mode 100644 graphics/object_events/palettes/followers/raichu.pal create mode 100644 graphics/object_events/palettes/followers/raikou.pal create mode 100644 graphics/object_events/palettes/followers/raticate.pal create mode 100644 graphics/object_events/palettes/followers/rattata.pal create mode 100644 graphics/object_events/palettes/followers/rayquaza.pal create mode 100644 graphics/object_events/palettes/followers/regice.pal create mode 100644 graphics/object_events/palettes/followers/regirock.pal create mode 100644 graphics/object_events/palettes/followers/registeel.pal create mode 100644 graphics/object_events/palettes/followers/relicanth.pal create mode 100644 graphics/object_events/palettes/followers/remoraid.pal create mode 100644 graphics/object_events/palettes/followers/rhydon.pal create mode 100644 graphics/object_events/palettes/followers/roselia.pal create mode 100644 graphics/object_events/palettes/followers/sableye.pal create mode 100644 graphics/object_events/palettes/followers/salamence.pal create mode 100644 graphics/object_events/palettes/followers/sandshrew.pal create mode 100644 graphics/object_events/palettes/followers/sandslash.pal create mode 100644 graphics/object_events/palettes/followers/sceptile.pal create mode 100644 graphics/object_events/palettes/followers/scizor.pal create mode 100644 graphics/object_events/palettes/followers/scyther.pal create mode 100644 graphics/object_events/palettes/followers/seadra.pal create mode 100644 graphics/object_events/palettes/followers/seaking.pal create mode 100644 graphics/object_events/palettes/followers/sealeo.pal create mode 100644 graphics/object_events/palettes/followers/seedot.pal create mode 100644 graphics/object_events/palettes/followers/seel.pal create mode 100644 graphics/object_events/palettes/followers/sentret.pal create mode 100644 graphics/object_events/palettes/followers/seviper.pal create mode 100644 graphics/object_events/palettes/followers/sharpedo.pal create mode 100644 graphics/object_events/palettes/followers/shedinja.pal create mode 100644 graphics/object_events/palettes/followers/shelgon.pal create mode 100644 graphics/object_events/palettes/followers/shellder.pal create mode 100644 graphics/object_events/palettes/followers/shiftry.pal create mode 100644 graphics/object_events/palettes/followers/shroomish.pal create mode 100644 graphics/object_events/palettes/followers/shuckle.pal create mode 100644 graphics/object_events/palettes/followers/skarmory.pal create mode 100644 graphics/object_events/palettes/followers/skiploom.pal create mode 100644 graphics/object_events/palettes/followers/slaking.pal create mode 100644 graphics/object_events/palettes/followers/slakoth.pal create mode 100644 graphics/object_events/palettes/followers/slowbro.pal create mode 100644 graphics/object_events/palettes/followers/slowking.pal create mode 100644 graphics/object_events/palettes/followers/slowpoke.pal create mode 100644 graphics/object_events/palettes/followers/smeargle.pal create mode 100644 graphics/object_events/palettes/followers/smoochum.pal create mode 100644 graphics/object_events/palettes/followers/sneasel.pal create mode 100644 graphics/object_events/palettes/followers/snorlax.pal create mode 100644 graphics/object_events/palettes/followers/snorunt.pal create mode 100644 graphics/object_events/palettes/followers/snubbull.pal create mode 100644 graphics/object_events/palettes/followers/spearow.pal create mode 100644 graphics/object_events/palettes/followers/spheal.pal create mode 100644 graphics/object_events/palettes/followers/spinarak.pal create mode 100644 graphics/object_events/palettes/followers/spinda.pal create mode 100644 graphics/object_events/palettes/followers/spoink.pal create mode 100644 graphics/object_events/palettes/followers/squirtle.pal create mode 100644 graphics/object_events/palettes/followers/stantler.pal create mode 100644 graphics/object_events/palettes/followers/sudowoodo.pal create mode 100644 graphics/object_events/palettes/followers/suicune.pal create mode 100644 graphics/object_events/palettes/followers/sunflora.pal create mode 100644 graphics/object_events/palettes/followers/sunkern.pal create mode 100644 graphics/object_events/palettes/followers/surskit.pal create mode 100644 graphics/object_events/palettes/followers/swalot.pal create mode 100644 graphics/object_events/palettes/followers/swampert.pal create mode 100644 graphics/object_events/palettes/followers/swellow.pal create mode 100644 graphics/object_events/palettes/followers/swinub.pal create mode 100644 graphics/object_events/palettes/followers/taillow.pal create mode 100644 graphics/object_events/palettes/followers/tangela.pal create mode 100644 graphics/object_events/palettes/followers/tauros.pal create mode 100644 graphics/object_events/palettes/followers/teddiursa.pal create mode 100644 graphics/object_events/palettes/followers/tentacool.pal create mode 100644 graphics/object_events/palettes/followers/tentacruel.pal create mode 100644 graphics/object_events/palettes/followers/togepi.pal create mode 100644 graphics/object_events/palettes/followers/torkoal.pal create mode 100644 graphics/object_events/palettes/followers/totodile.pal create mode 100644 graphics/object_events/palettes/followers/trapinch.pal create mode 100644 graphics/object_events/palettes/followers/treecko.pal create mode 100644 graphics/object_events/palettes/followers/tropius.pal create mode 100644 graphics/object_events/palettes/followers/typhlosion.pal create mode 100644 graphics/object_events/palettes/followers/tyranitar.pal create mode 100644 graphics/object_events/palettes/followers/tyrogue.pal create mode 100644 graphics/object_events/palettes/followers/umbreon.pal create mode 100644 graphics/object_events/palettes/followers/ursaring.pal create mode 100644 graphics/object_events/palettes/followers/vaporeon.pal create mode 100644 graphics/object_events/palettes/followers/venomoth.pal create mode 100644 graphics/object_events/palettes/followers/venonat.pal create mode 100644 graphics/object_events/palettes/followers/venusaur.pal create mode 100644 graphics/object_events/palettes/followers/vibrava.pal create mode 100644 graphics/object_events/palettes/followers/victreebel.pal create mode 100644 graphics/object_events/palettes/followers/vigoroth.pal create mode 100644 graphics/object_events/palettes/followers/volbeat.pal create mode 100644 graphics/object_events/palettes/followers/vulpix.pal create mode 100644 graphics/object_events/palettes/followers/wailmer.pal create mode 100644 graphics/object_events/palettes/followers/wailord.pal create mode 100644 graphics/object_events/palettes/followers/walrein.pal create mode 100644 graphics/object_events/palettes/followers/wartortle.pal create mode 100644 graphics/object_events/palettes/followers/weepinbell.pal create mode 100644 graphics/object_events/palettes/followers/whiscash.pal create mode 100644 graphics/object_events/palettes/followers/whismur.pal create mode 100644 graphics/object_events/palettes/followers/wingull.pal create mode 100644 graphics/object_events/palettes/followers/wurmple.pal create mode 100644 graphics/object_events/palettes/followers/wynaut.pal create mode 100644 graphics/object_events/palettes/followers/xatu.pal create mode 100644 graphics/object_events/palettes/followers/yanma.pal create mode 100644 graphics/object_events/palettes/followers/zangoose.pal create mode 100644 graphics/object_events/palettes/followers/zapdos.pal create mode 100644 graphics/object_events/palettes/followers/zigzagoon.pal create mode 100644 graphics/object_events/pics/pokemon/followers/aggron.png create mode 100644 graphics/object_events/pics/pokemon/followers/aipom.png create mode 100644 graphics/object_events/pics/pokemon/followers/ampharos.png create mode 100644 graphics/object_events/pics/pokemon/followers/anorith.png create mode 100644 graphics/object_events/pics/pokemon/followers/ariados.png create mode 100644 graphics/object_events/pics/pokemon/followers/armaldo.png create mode 100644 graphics/object_events/pics/pokemon/followers/articuno.png create mode 100644 graphics/object_events/pics/pokemon/followers/bagon.png create mode 100644 graphics/object_events/pics/pokemon/followers/barboach.png create mode 100644 graphics/object_events/pics/pokemon/followers/bayleef.png create mode 100644 graphics/object_events/pics/pokemon/followers/beautifly.png create mode 100644 graphics/object_events/pics/pokemon/followers/beldum.png create mode 100644 graphics/object_events/pics/pokemon/followers/bellossom.png create mode 100644 graphics/object_events/pics/pokemon/followers/blastoise.png create mode 100644 graphics/object_events/pics/pokemon/followers/blaziken.png create mode 100644 graphics/object_events/pics/pokemon/followers/blissey.png create mode 100644 graphics/object_events/pics/pokemon/followers/breloom.png create mode 100644 graphics/object_events/pics/pokemon/followers/butterfree.png create mode 100644 graphics/object_events/pics/pokemon/followers/camerupt.png create mode 100644 graphics/object_events/pics/pokemon/followers/carvanha.png create mode 100644 graphics/object_events/pics/pokemon/followers/caterpie.png create mode 100644 graphics/object_events/pics/pokemon/followers/celebi.png create mode 100644 graphics/object_events/pics/pokemon/followers/charizard.png create mode 100644 graphics/object_events/pics/pokemon/followers/charmander.png create mode 100644 graphics/object_events/pics/pokemon/followers/charmeleon.png create mode 100644 graphics/object_events/pics/pokemon/followers/chimecho.png create mode 100644 graphics/object_events/pics/pokemon/followers/chinchou.png create mode 100644 graphics/object_events/pics/pokemon/followers/clamperl.png create mode 100644 graphics/object_events/pics/pokemon/followers/claydol.png create mode 100644 graphics/object_events/pics/pokemon/followers/clefable.png create mode 100644 graphics/object_events/pics/pokemon/followers/cloyster.png create mode 100644 graphics/object_events/pics/pokemon/followers/corphish.png create mode 100644 graphics/object_events/pics/pokemon/followers/corsola.png create mode 100644 graphics/object_events/pics/pokemon/followers/cradily.png create mode 100644 graphics/object_events/pics/pokemon/followers/crawdaunt.png create mode 100644 graphics/object_events/pics/pokemon/followers/crobat.png create mode 100644 graphics/object_events/pics/pokemon/followers/croconaw.png create mode 100644 graphics/object_events/pics/pokemon/followers/cyndaquil.png create mode 100644 graphics/object_events/pics/pokemon/followers/delcatty.png create mode 100644 graphics/object_events/pics/pokemon/followers/delibird.png create mode 100644 graphics/object_events/pics/pokemon/followers/deoxys_attack.png create mode 100644 graphics/object_events/pics/pokemon/followers/deoxys_defense.png create mode 100644 graphics/object_events/pics/pokemon/followers/deoxys_normal.png create mode 100644 graphics/object_events/pics/pokemon/followers/deoxys_speed.png create mode 100644 graphics/object_events/pics/pokemon/followers/diglett.png create mode 100644 graphics/object_events/pics/pokemon/followers/dodrio.png create mode 100644 graphics/object_events/pics/pokemon/followers/donphan.png create mode 100644 graphics/object_events/pics/pokemon/followers/dragonair.png create mode 100644 graphics/object_events/pics/pokemon/followers/dragonite.png create mode 100644 graphics/object_events/pics/pokemon/followers/dratini.png create mode 100644 graphics/object_events/pics/pokemon/followers/dugtrio.png create mode 100644 graphics/object_events/pics/pokemon/followers/dunsparce.png create mode 100644 graphics/object_events/pics/pokemon/followers/dusclops.png create mode 100644 graphics/object_events/pics/pokemon/followers/duskull.png create mode 100644 graphics/object_events/pics/pokemon/followers/dustox.png create mode 100644 graphics/object_events/pics/pokemon/followers/eevee.png create mode 100644 graphics/object_events/pics/pokemon/followers/ekans.png create mode 100644 graphics/object_events/pics/pokemon/followers/electrike.png create mode 100644 graphics/object_events/pics/pokemon/followers/entei.png create mode 100644 graphics/object_events/pics/pokemon/followers/espeon.png create mode 100644 graphics/object_events/pics/pokemon/followers/exeggutor.png create mode 100644 graphics/object_events/pics/pokemon/followers/exploud.png create mode 100644 graphics/object_events/pics/pokemon/followers/farfetchd.png create mode 100644 graphics/object_events/pics/pokemon/followers/fearow.png create mode 100644 graphics/object_events/pics/pokemon/followers/feebas.png create mode 100644 graphics/object_events/pics/pokemon/followers/feraligatr.png create mode 100644 graphics/object_events/pics/pokemon/followers/flaaffy.png create mode 100644 graphics/object_events/pics/pokemon/followers/flareon.png create mode 100644 graphics/object_events/pics/pokemon/followers/flygon.png create mode 100644 graphics/object_events/pics/pokemon/followers/forretress.png create mode 100644 graphics/object_events/pics/pokemon/followers/gardevoir.png create mode 100644 graphics/object_events/pics/pokemon/followers/gastly.png create mode 100644 graphics/object_events/pics/pokemon/followers/gengar.png create mode 100644 graphics/object_events/pics/pokemon/followers/girafarig.png create mode 100644 graphics/object_events/pics/pokemon/followers/glalie.png create mode 100644 graphics/object_events/pics/pokemon/followers/gligar.png create mode 100644 graphics/object_events/pics/pokemon/followers/goldeen.png create mode 100644 graphics/object_events/pics/pokemon/followers/golduck.png create mode 100644 graphics/object_events/pics/pokemon/followers/golem.png create mode 100644 graphics/object_events/pics/pokemon/followers/gorebyss.png create mode 100644 graphics/object_events/pics/pokemon/followers/granbull.png create mode 100644 graphics/object_events/pics/pokemon/followers/groudon.png create mode 100644 graphics/object_events/pics/pokemon/followers/grovyle.png create mode 100644 graphics/object_events/pics/pokemon/followers/grumpig.png create mode 100644 graphics/object_events/pics/pokemon/followers/gulpin.png create mode 100644 graphics/object_events/pics/pokemon/followers/gyarados.png create mode 100644 graphics/object_events/pics/pokemon/followers/hariyama.png create mode 100644 graphics/object_events/pics/pokemon/followers/haunter.png create mode 100644 graphics/object_events/pics/pokemon/followers/heracross.png create mode 100644 graphics/object_events/pics/pokemon/followers/hitmonchan.png create mode 100644 graphics/object_events/pics/pokemon/followers/hitmonlee.png create mode 100644 graphics/object_events/pics/pokemon/followers/hitmontop.png create mode 100644 graphics/object_events/pics/pokemon/followers/ho_oh.png create mode 100644 graphics/object_events/pics/pokemon/followers/hoothoot.png create mode 100644 graphics/object_events/pics/pokemon/followers/hoppip.png create mode 100644 graphics/object_events/pics/pokemon/followers/horsea.png create mode 100644 graphics/object_events/pics/pokemon/followers/huntail.png create mode 100644 graphics/object_events/pics/pokemon/followers/igglybuff.png create mode 100644 graphics/object_events/pics/pokemon/followers/illumise.png create mode 100644 graphics/object_events/pics/pokemon/followers/ivysaur.png create mode 100644 graphics/object_events/pics/pokemon/followers/jigglypuff.png create mode 100644 graphics/object_events/pics/pokemon/followers/jirachi.png create mode 100644 graphics/object_events/pics/pokemon/followers/jolteon.png create mode 100644 graphics/object_events/pics/pokemon/followers/jumpluff.png create mode 100644 graphics/object_events/pics/pokemon/followers/jynx.png create mode 100644 graphics/object_events/pics/pokemon/followers/kabuto.png create mode 100644 graphics/object_events/pics/pokemon/followers/kabutops.png create mode 100644 graphics/object_events/pics/pokemon/followers/kangaskhan.png create mode 100644 graphics/object_events/pics/pokemon/followers/kecleon.png create mode 100644 graphics/object_events/pics/pokemon/followers/kingdra.png create mode 100644 graphics/object_events/pics/pokemon/followers/krabby.png create mode 100644 graphics/object_events/pics/pokemon/followers/kyogre.png create mode 100644 graphics/object_events/pics/pokemon/followers/lanturn.png create mode 100644 graphics/object_events/pics/pokemon/followers/lapras.png create mode 100644 graphics/object_events/pics/pokemon/followers/latias.png create mode 100644 graphics/object_events/pics/pokemon/followers/latios.png create mode 100644 graphics/object_events/pics/pokemon/followers/ledian.png create mode 100644 graphics/object_events/pics/pokemon/followers/ledyba.png create mode 100644 graphics/object_events/pics/pokemon/followers/lickitung.png create mode 100644 graphics/object_events/pics/pokemon/followers/lileep.png create mode 100644 graphics/object_events/pics/pokemon/followers/linoone.png create mode 100644 graphics/object_events/pics/pokemon/followers/lombre.png create mode 100644 graphics/object_events/pics/pokemon/followers/lotad.png create mode 100644 graphics/object_events/pics/pokemon/followers/ludicolo.png create mode 100644 graphics/object_events/pics/pokemon/followers/lugia.png create mode 100644 graphics/object_events/pics/pokemon/followers/luvdisc.png create mode 100644 graphics/object_events/pics/pokemon/followers/machamp.png create mode 100644 graphics/object_events/pics/pokemon/followers/machoke.png create mode 100644 graphics/object_events/pics/pokemon/followers/machop.png create mode 100644 graphics/object_events/pics/pokemon/followers/magby.png create mode 100644 graphics/object_events/pics/pokemon/followers/magcargo.png create mode 100644 graphics/object_events/pics/pokemon/followers/magikarp.png create mode 100644 graphics/object_events/pics/pokemon/followers/magmar.png create mode 100644 graphics/object_events/pics/pokemon/followers/magnemite.png create mode 100644 graphics/object_events/pics/pokemon/followers/magneton.png create mode 100644 graphics/object_events/pics/pokemon/followers/makuhita.png create mode 100644 graphics/object_events/pics/pokemon/followers/manectric.png create mode 100644 graphics/object_events/pics/pokemon/followers/mankey.png create mode 100644 graphics/object_events/pics/pokemon/followers/mantine.png create mode 100644 graphics/object_events/pics/pokemon/followers/mareep.png create mode 100644 graphics/object_events/pics/pokemon/followers/marshtomp.png create mode 100644 graphics/object_events/pics/pokemon/followers/masquerain.png create mode 100644 graphics/object_events/pics/pokemon/followers/mawile.png create mode 100644 graphics/object_events/pics/pokemon/followers/medicham.png create mode 100644 graphics/object_events/pics/pokemon/followers/meditite.png create mode 100644 graphics/object_events/pics/pokemon/followers/meganium.png create mode 100644 graphics/object_events/pics/pokemon/followers/meowth.png create mode 100644 graphics/object_events/pics/pokemon/followers/metang.png create mode 100644 graphics/object_events/pics/pokemon/followers/mew.png create mode 100644 graphics/object_events/pics/pokemon/followers/mewtwo.png create mode 100644 graphics/object_events/pics/pokemon/followers/mightyena.png create mode 100644 graphics/object_events/pics/pokemon/followers/milotic.png create mode 100644 graphics/object_events/pics/pokemon/followers/miltank.png create mode 100644 graphics/object_events/pics/pokemon/followers/misdreavus.png create mode 100644 graphics/object_events/pics/pokemon/followers/moltres.png create mode 100644 graphics/object_events/pics/pokemon/followers/mr_mime.png create mode 100644 graphics/object_events/pics/pokemon/followers/mudkip.png create mode 100644 graphics/object_events/pics/pokemon/followers/murkrow.png create mode 100644 graphics/object_events/pics/pokemon/followers/natu.png create mode 100644 graphics/object_events/pics/pokemon/followers/nidoking.png create mode 100644 graphics/object_events/pics/pokemon/followers/nidoqueen.png create mode 100644 graphics/object_events/pics/pokemon/followers/nidoran_f.png create mode 100644 graphics/object_events/pics/pokemon/followers/nidorina.png create mode 100644 graphics/object_events/pics/pokemon/followers/nincada.png create mode 100644 graphics/object_events/pics/pokemon/followers/ninetales.png create mode 100644 graphics/object_events/pics/pokemon/followers/ninjask.png create mode 100644 graphics/object_events/pics/pokemon/followers/noctowl.png create mode 100644 graphics/object_events/pics/pokemon/followers/nosepass.png create mode 100644 graphics/object_events/pics/pokemon/followers/numel.png create mode 100644 graphics/object_events/pics/pokemon/followers/nuzleaf.png create mode 100644 graphics/object_events/pics/pokemon/followers/octillery.png create mode 100644 graphics/object_events/pics/pokemon/followers/omanyte.png create mode 100644 graphics/object_events/pics/pokemon/followers/omastar.png create mode 100644 graphics/object_events/pics/pokemon/followers/pelipper.png create mode 100644 graphics/object_events/pics/pokemon/followers/persian.png create mode 100644 graphics/object_events/pics/pokemon/followers/phanpy.png create mode 100644 graphics/object_events/pics/pokemon/followers/pichu.png create mode 100644 graphics/object_events/pics/pokemon/followers/pidgeot.png create mode 100644 graphics/object_events/pics/pokemon/followers/pidgeotto.png create mode 100644 graphics/object_events/pics/pokemon/followers/pidgey.png create mode 100644 graphics/object_events/pics/pokemon/followers/pikachu.png create mode 100644 graphics/object_events/pics/pokemon/followers/piloswine.png create mode 100644 graphics/object_events/pics/pokemon/followers/pineco.png create mode 100644 graphics/object_events/pics/pokemon/followers/politoed.png create mode 100644 graphics/object_events/pics/pokemon/followers/poliwag.png create mode 100644 graphics/object_events/pics/pokemon/followers/poochyena.png create mode 100644 graphics/object_events/pics/pokemon/followers/porygon.png create mode 100644 graphics/object_events/pics/pokemon/followers/porygon2.png create mode 100644 graphics/object_events/pics/pokemon/followers/primeape.png create mode 100644 graphics/object_events/pics/pokemon/followers/quilava.png create mode 100644 graphics/object_events/pics/pokemon/followers/qwilfish.png create mode 100644 graphics/object_events/pics/pokemon/followers/raichu.png create mode 100644 graphics/object_events/pics/pokemon/followers/raikou.png create mode 100644 graphics/object_events/pics/pokemon/followers/raticate.png create mode 100644 graphics/object_events/pics/pokemon/followers/rattata.png create mode 100644 graphics/object_events/pics/pokemon/followers/rayquaza.png create mode 100644 graphics/object_events/pics/pokemon/followers/regice.png create mode 100644 graphics/object_events/pics/pokemon/followers/regirock.png create mode 100644 graphics/object_events/pics/pokemon/followers/registeel.png create mode 100644 graphics/object_events/pics/pokemon/followers/relicanth.png create mode 100644 graphics/object_events/pics/pokemon/followers/remoraid.png create mode 100644 graphics/object_events/pics/pokemon/followers/rhydon.png create mode 100644 graphics/object_events/pics/pokemon/followers/roselia.png create mode 100644 graphics/object_events/pics/pokemon/followers/sableye.png create mode 100644 graphics/object_events/pics/pokemon/followers/salamence.png create mode 100644 graphics/object_events/pics/pokemon/followers/sandshrew.png create mode 100644 graphics/object_events/pics/pokemon/followers/sandslash.png create mode 100644 graphics/object_events/pics/pokemon/followers/sceptile.png create mode 100644 graphics/object_events/pics/pokemon/followers/scizor.png create mode 100644 graphics/object_events/pics/pokemon/followers/scyther.png create mode 100644 graphics/object_events/pics/pokemon/followers/seadra.png create mode 100644 graphics/object_events/pics/pokemon/followers/seaking.png create mode 100644 graphics/object_events/pics/pokemon/followers/sealeo.png create mode 100644 graphics/object_events/pics/pokemon/followers/seedot.png create mode 100644 graphics/object_events/pics/pokemon/followers/seel.png create mode 100644 graphics/object_events/pics/pokemon/followers/sentret.png create mode 100644 graphics/object_events/pics/pokemon/followers/seviper.png create mode 100644 graphics/object_events/pics/pokemon/followers/sharpedo.png create mode 100644 graphics/object_events/pics/pokemon/followers/shedinja.png create mode 100644 graphics/object_events/pics/pokemon/followers/shelgon.png create mode 100644 graphics/object_events/pics/pokemon/followers/shellder.png create mode 100644 graphics/object_events/pics/pokemon/followers/shiftry.png create mode 100644 graphics/object_events/pics/pokemon/followers/shroomish.png create mode 100644 graphics/object_events/pics/pokemon/followers/shuckle.png create mode 100644 graphics/object_events/pics/pokemon/followers/skarmory.png create mode 100644 graphics/object_events/pics/pokemon/followers/skiploom.png create mode 100644 graphics/object_events/pics/pokemon/followers/slaking.png create mode 100644 graphics/object_events/pics/pokemon/followers/slakoth.png create mode 100644 graphics/object_events/pics/pokemon/followers/slowbro.png create mode 100644 graphics/object_events/pics/pokemon/followers/slowking.png create mode 100644 graphics/object_events/pics/pokemon/followers/slowpoke.png create mode 100644 graphics/object_events/pics/pokemon/followers/smeargle.png create mode 100644 graphics/object_events/pics/pokemon/followers/smoochum.png create mode 100644 graphics/object_events/pics/pokemon/followers/sneasel.png create mode 100644 graphics/object_events/pics/pokemon/followers/snorlax.png create mode 100644 graphics/object_events/pics/pokemon/followers/snorunt.png create mode 100644 graphics/object_events/pics/pokemon/followers/snubbull.png create mode 100644 graphics/object_events/pics/pokemon/followers/spearow.png create mode 100644 graphics/object_events/pics/pokemon/followers/spheal.png create mode 100644 graphics/object_events/pics/pokemon/followers/spinarak.png create mode 100644 graphics/object_events/pics/pokemon/followers/spinda.png create mode 100644 graphics/object_events/pics/pokemon/followers/spoink.png create mode 100644 graphics/object_events/pics/pokemon/followers/squirtle.png create mode 100644 graphics/object_events/pics/pokemon/followers/stantler.png create mode 100644 graphics/object_events/pics/pokemon/followers/sudowoodo.png create mode 100644 graphics/object_events/pics/pokemon/followers/suicune.png create mode 100644 graphics/object_events/pics/pokemon/followers/sunflora.png create mode 100644 graphics/object_events/pics/pokemon/followers/sunkern.png create mode 100644 graphics/object_events/pics/pokemon/followers/surskit.png create mode 100644 graphics/object_events/pics/pokemon/followers/swalot.png create mode 100644 graphics/object_events/pics/pokemon/followers/swampert.png create mode 100644 graphics/object_events/pics/pokemon/followers/swellow.png create mode 100644 graphics/object_events/pics/pokemon/followers/swinub.png create mode 100644 graphics/object_events/pics/pokemon/followers/taillow.png create mode 100644 graphics/object_events/pics/pokemon/followers/tangela.png create mode 100644 graphics/object_events/pics/pokemon/followers/tauros.png create mode 100644 graphics/object_events/pics/pokemon/followers/teddiursa.png create mode 100644 graphics/object_events/pics/pokemon/followers/tentacool.png create mode 100644 graphics/object_events/pics/pokemon/followers/tentacruel.png create mode 100644 graphics/object_events/pics/pokemon/followers/togepi.png create mode 100644 graphics/object_events/pics/pokemon/followers/torkoal.png create mode 100644 graphics/object_events/pics/pokemon/followers/totodile.png create mode 100644 graphics/object_events/pics/pokemon/followers/trapinch.png create mode 100644 graphics/object_events/pics/pokemon/followers/treecko.png create mode 100644 graphics/object_events/pics/pokemon/followers/tropius.png create mode 100644 graphics/object_events/pics/pokemon/followers/typhlosion.png create mode 100644 graphics/object_events/pics/pokemon/followers/tyranitar.png create mode 100644 graphics/object_events/pics/pokemon/followers/tyrogue.png create mode 100644 graphics/object_events/pics/pokemon/followers/umbreon.png create mode 100644 graphics/object_events/pics/pokemon/followers/ursaring.png create mode 100644 graphics/object_events/pics/pokemon/followers/vaporeon.png create mode 100644 graphics/object_events/pics/pokemon/followers/venomoth.png create mode 100644 graphics/object_events/pics/pokemon/followers/venonat.png create mode 100644 graphics/object_events/pics/pokemon/followers/venusaur.png create mode 100644 graphics/object_events/pics/pokemon/followers/vibrava.png create mode 100644 graphics/object_events/pics/pokemon/followers/victreebel.png create mode 100644 graphics/object_events/pics/pokemon/followers/vigoroth.png create mode 100644 graphics/object_events/pics/pokemon/followers/volbeat.png create mode 100644 graphics/object_events/pics/pokemon/followers/vulpix.png create mode 100644 graphics/object_events/pics/pokemon/followers/wailmer.png create mode 100644 graphics/object_events/pics/pokemon/followers/wailord.png create mode 100644 graphics/object_events/pics/pokemon/followers/walrein.png create mode 100644 graphics/object_events/pics/pokemon/followers/wartortle.png create mode 100644 graphics/object_events/pics/pokemon/followers/weepinbell.png create mode 100644 graphics/object_events/pics/pokemon/followers/whiscash.png create mode 100644 graphics/object_events/pics/pokemon/followers/whismur.png create mode 100644 graphics/object_events/pics/pokemon/followers/wingull.png create mode 100644 graphics/object_events/pics/pokemon/followers/wurmple.png create mode 100644 graphics/object_events/pics/pokemon/followers/wynaut.png create mode 100644 graphics/object_events/pics/pokemon/followers/xatu.png create mode 100644 graphics/object_events/pics/pokemon/followers/yanma.png create mode 100644 graphics/object_events/pics/pokemon/followers/zangoose.png create mode 100644 graphics/object_events/pics/pokemon/followers/zapdos.png create mode 100644 graphics/object_events/pics/pokemon/followers/zigzagoon.png delete mode 100755 graphics/trainer_hill/maps_expert/floor_0/collision.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_0/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_1/collision.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_1/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_2/collision.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_2/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_3/collision.bin delete mode 100755 graphics/trainer_hill/maps_expert/floor_3/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_jp/floor_0/collision.bin delete mode 100755 graphics/trainer_hill/maps_jp/floor_0/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_jp/floor_1/collision.bin delete mode 100755 graphics/trainer_hill/maps_jp/floor_1/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_0/collision.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_0/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_1/collision.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_1/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_2/collision.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_2/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_3/collision.bin delete mode 100755 graphics/trainer_hill/maps_normal/floor_3/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_0/collision.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_0/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_1/collision.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_1/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_2/collision.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_2/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_3/collision.bin delete mode 100755 graphics/trainer_hill/maps_unique/floor_3/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_0/collision.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_0/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_1/collision.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_1/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_2/collision.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_2/metatiles.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_3/collision.bin delete mode 100755 graphics/trainer_hill/maps_variety/floor_3/metatiles.bin mode change 100644 => 100755 include/constants/event_object_movement.h create mode 100644 include/constants/follow_me.h create mode 100644 include/follow_me.h mode change 100644 => 100755 src/data/object_events/movement_action_func_tables.h mode change 100644 => 100755 src/data/object_events/object_event_anims.h mode change 100644 => 100755 src/data/object_events/object_event_graphics.h mode change 100644 => 100755 src/data/object_events/object_event_graphics_info.h mode change 100644 => 100755 src/data/object_events/object_event_graphics_info_pointers.h diff --git a/INSTALL.md b/INSTALL.md index 7f1d47879..f6434c07b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -451,6 +451,13 @@ Replace `` with the number that the `nproc` command returned. `nproc` is not available on macOS. The alternative is `sysctl -n hw.ncpu` ([relevant Stack Overflow thread](https://stackoverflow.com/questions/1715580)). +## Debug info + +To build **pokeemerald.elf** with enhanced debug info: +```bash +make DINFO=1 +``` + ## devkitARM's C compiler This project supports the `arm-none-eabi-gcc` compiler included with devkitARM. If devkitARM (a.k.a. gba-dev) has already been installed as part of the platform-specific instructions, simply run: @@ -527,7 +534,7 @@ devkitARM is now installed. devkitARM is now installed. -### Installing devkitARM on Arch Linux +## Installing devkitARM on Arch Linux 1. Follow [devkitPro's instructions](https://devkitpro.org/wiki/devkitPro_pacman#Customising_Existing_Pacman_Install) to configure `pacman` to download devkitPro packages. 2. Install `gba-dev`: run the following command as root. @@ -545,7 +552,7 @@ devkitARM is now installed. devkitARM is now installed. -### Other toolchains +## Other toolchains To build using a toolchain other than devkitARM, override the `TOOLCHAIN` environment variable with the path to your toolchain, which must contain the subdirectory `bin`. ```bash @@ -557,14 +564,6 @@ make TOOLCHAIN="/usr/local/arm-none-eabi" ``` To compile the `modern` target with this toolchain, the subdirectories `lib`, `include`, and `arm-none-eabi` must also be present. -### Building with debug info under a modern toolchain - -To build **pokeemerald.elf** with debug symbols under a modern toolchain: -```bash -make modern DINFO=1 -``` -Note that this is not necessary for a non-modern build since those are built with debug symbols by default. - # Useful additional tools * [porymap](https://github.com/huderlem/porymap) for viewing and editing maps diff --git a/Makefile b/Makefile index c36cc8e93..6283a87fe 100644 --- a/Makefile +++ b/Makefile @@ -107,7 +107,7 @@ LIBPATH := -L ../../tools/agbcc/lib LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall else CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g ROM := $(MODERN_ROM_NAME) OBJ_DIR := $(MODERN_OBJ_DIR_NAME) LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 62df0878b..a3052dfc4 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1729,6 +1729,28 @@ .2byte \quantity .endm + @ sets an NPC up to follow the player + .macro setfollower localId:req, flags:req + .byte 0xe3 + .byte \localId + .2byte \flags + .endm + + @ remove the following NPC (assumes there will only ever be one) + .macro destroyfollower + .byte 0xe4 + .endm + + @ makes the player and follower face one another + .macro facefollower + .byte 0xe5 + .endm + + @ checks if you have a follower. returns the result to VAR_RESULT + .macro checkfollower + .byte 0xe6 + .endm + @ Supplementary diff --git a/asm/macros/trainer_hill.inc b/asm/macros/trainer_hill.inc index 988e2867a..65c8c6bef 100644 --- a/asm/macros/trainer_hill.inc +++ b/asm/macros/trainer_hill.inc @@ -100,9 +100,9 @@ special CallTrainerHillFunction .endm - @ Set the challenge mode to HILL_MODE_* (Normal, Variety, Unique, or Expert) - .macro trainerhill_setmode mode:req - setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_MODE - copyvar VAR_0x8005, \mode + @ Set the challenge mode to HILL_TAG_* (Normal, Variety, Unique, or Expert) + .macro trainerhill_settag tag:req + setvar VAR_0x8004, TRAINER_HILL_FUNC_SET_TAG + copyvar VAR_0x8005, \tag special CallTrainerHillFunction .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index eff53de84..1cfc5230c 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -763,7 +763,7 @@ Move_TAKE_DOWN: setalpha 12, 8 createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -24, 8, 23, 10, 40, 10 delay 35 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, ANIM_TARGET, 0 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET delay 1 @@ -783,14 +783,14 @@ Move_TAKE_DOWN: Move_DOUBLE_EDGE: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 waitforvisualfinish delay 10 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 16, 16, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 16, 16, RGB_WHITE createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 delay 3 waitforvisualfinish @@ -802,7 +802,7 @@ Move_DOUBLE_EDGE: createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 0 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 0, 1 createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, 1, 1 @@ -860,7 +860,7 @@ Move_FIRE_BLAST: call FireBlastRing call FireBlastRing delay 24 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 8, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 0, 8, RGB_BLACK waitforvisualfinish delay 19 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 20, 1 @@ -882,7 +882,7 @@ Move_FIRE_BLAST: delay 3 call FireBlastCross waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 2, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 2, 8, 0, RGB_BLACK waitforvisualfinish end FireBlastRing: @@ -941,17 +941,17 @@ Move_MEGA_PUNCH: loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET delay 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, RGB_BLACK setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 50 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 7, RGB_WHITE delay 50 call SetImpactBackground createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -984,18 +984,18 @@ Move_MEGA_KICK: loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET delay 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, RGB_BLACK setalpha 12, 8 playsewithpan SE_M_MEGA_KICK, SOUND_PAN_TARGET createsprite gMegaPunchKickSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 50 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 7, RGB_WHITE delay 50 playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET call SetImpactBackground createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 22, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -1054,21 +1054,21 @@ SonicBoomHit: Move_THUNDER_SHOCK: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 createvisualtask AnimTask_ElectricBolt, 5, 0, -44, 0 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 9 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 0, 13, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 13, 0, RGB_BLACK waitforvisualfinish delay 20 call ElectricityEffect waitforvisualfinish delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 0, RGB_BLACK waitforvisualfinish end @@ -1076,7 +1076,7 @@ Move_THUNDERBOLT: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SHOCK_3 loadspritegfx ANIM_TAG_SPARK_2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 createvisualtask AnimTask_ElectricBolt, 5, 24, -52, 0 @@ -1088,9 +1088,9 @@ Move_THUNDERBOLT: createvisualtask AnimTask_ElectricBolt, 5, 0, -60, 1 playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET delay 9 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 0, 13, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 13, 0, RGB_BLACK waitforvisualfinish delay 20 createsprite gThunderboltOrbSpriteTemplate, ANIM_TARGET, 3, 44, 0, 0, 3 @@ -1104,20 +1104,20 @@ Move_THUNDERBOLT: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET delay 0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 2, 2, RGB_BLACK delay 6 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 6, RGB_BLACK delay 6 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 2, 2, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 2, 2, RGB_BLACK delay 6 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 6, RGB_BLACK waitforvisualfinish delay 20 waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19 call ElectricityEffect waitforvisualfinish delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 0, RGB_BLACK waitforvisualfinish end @@ -1125,7 +1125,7 @@ Move_THUNDER_WAVE: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_SPARK_H - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 6, RGB_BLACK waitforvisualfinish delay 10 createvisualtask AnimTask_ElectricBolt, 5, 0, -48, 0 @@ -1138,7 +1138,7 @@ Move_THUNDER_WAVE: delay 4 createsprite gThunderWaveSpriteTemplate, ANIM_TARGET, 2, -16, 16 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 6, 0, RGB_BLACK waitforvisualfinish end @@ -1247,10 +1247,10 @@ Move_REVERSAL: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB_WHITE, 8, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB_WHITE, 8, RGB_BLACK, 0 waitforvisualfinish delay 30 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 2, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 31, 3, 2, 0, 10, RGB_WHITE delay 10 playsewithpan SE_M_REVERSAL, SOUND_PAN_ATTACKER createsprite gReversalOrbSpriteTemplate, ANIM_ATTACKER, 2, 26, 0 @@ -1264,7 +1264,7 @@ Move_REVERSAL: createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 delay 8 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 8, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 8, RGB_BLACK, 0 createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 10, 1, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 @@ -1348,7 +1348,7 @@ Move_PSYCH_UP: delay 4 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, ANIM_ATTACKER, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 9, F_PAL_ATTACKER, 2, 10, 0, RGB_YELLOW + createvisualtask AnimTask_BlendBattleAnimPal, 9, 2, 2, 10, 0, RGB_YELLOW delay 30 clearmonbg ANIM_ATK_PARTNER blendoff @@ -1446,18 +1446,18 @@ FuryCutterRight: createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 goto FuryCutterContinue FuryCutterMedium: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB(9, 8, 10), 4, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 FuryCutterStrong: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 FuryCutterStrongest: - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 Move_SELF_DESTRUCT: loadspritegfx ANIM_TAG_EXPLOSION - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 9, RGB_RED createvisualtask AnimTask_ShakeMon2, 5, 4, 6, 0, 38, 1 createvisualtask AnimTask_ShakeMon2, 5, 5, 6, 0, 38, 1 createvisualtask AnimTask_ShakeMon2, 5, 6, 6, 0, 38, 1 @@ -1466,7 +1466,7 @@ Move_SELF_DESTRUCT: call SelfDestructExplode call SelfDestructExplode waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 9, 0, RGB_RED end SelfDestructExplode: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_ATTACKER @@ -1623,7 +1623,7 @@ RisingWaterHitEffect: Move_EXPLOSION: loadspritegfx ANIM_TAG_EXPLOSION - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, 4, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, 5, 8, 0, 40, 1 createvisualtask AnimTask_ShakeMon2, 5, 6, 8, 0, 40, 1 @@ -1632,9 +1632,9 @@ Move_EXPLOSION: call Explosion1 call Explosion1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 16, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 1, 16, 16, RGB_WHITE delay 50 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 16, 0, RGB_WHITE end Explosion1: playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER @@ -1678,16 +1678,16 @@ Move_PROTECT: Move_DETECT: loadspritegfx ANIM_TAG_SPARKLE_4 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 9, RGB_BLACK waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 9, RGB_WHITE delay 18 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER createsprite gSpinningSparkleSpriteTemplate, ANIM_ATTACKER, 13, 20, -20 waitforvisualfinish delay 10 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 9, 0, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 9, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 2, 9, 0, RGB_WHITE waitforvisualfinish end @@ -1709,7 +1709,7 @@ Frustration_Continue: Frustration_Strongest: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER, 1, 0, 15, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 0, 9, 31 waitforvisualfinish delay 20 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -1740,12 +1740,12 @@ Frustration_Strongest: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, ANIM_TARGET, 0 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 9, 0, 31 goto Frustration_Continue Frustration_Strong: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER, 1, 0, 15, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 0, 9, 31 waitforvisualfinish delay 20 playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -1766,7 +1766,7 @@ Frustration_Strong: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -12, -6, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 3, 9, 0, 31 goto Frustration_Continue Frustration_Medium: playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER @@ -1808,7 +1808,7 @@ Move_SAFEGUARD: createsprite gGuardRingSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 0, 2, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 10, 0, 2, 0, 10, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -1864,13 +1864,13 @@ Move_GUILLOTINE: playsewithpan SE_M_VICEGRIP, SOUND_PAN_TARGET createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 0 createsprite gGuillotineSpriteTemplate, ANIM_ATTACKER, 2, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 16, RGB_BLACK delay 9 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 23, 1 delay 46 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 8, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -1900,7 +1900,7 @@ Move_PAY_DAY: Move_OUTRAGE: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 2, 5, 3, 8, RGB(14, 13, 0) + createvisualtask AnimTask_BlendColorCycle, 2, 7, 2, 5, 3, 8, RGB(14, 13, 0) createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 6, 5, 4 delay 0 createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 @@ -1946,25 +1946,25 @@ Move_SPARK: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 5, 5, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 32, 24, 190, 12, ANIM_ATTACKER, 1, 0 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 80, 24, 22, 12, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 156, 24, 121, 13, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) delay 10 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 5, 5, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 5, 5, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 100, 24, 60, 10, ANIM_ATTACKER, 1, 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 170, 24, 42, 11, ANIM_ATTACKER, 1, 1 delay 0 createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 238, 24, 165, 10, ANIM_ATTACKER, 1, 1 delay 0 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) delay 20 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 7, 7, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 7, 7, RGB(31, 31, 22) playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 @@ -1976,14 +1976,14 @@ Move_SPARK: createsprite gSparkElectricityFlashingSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 delay 4 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_ATTACKER, -31, 1, 0, 0, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 3, -31, 1, 0, 0, RGB(31, 31, 22) createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 delay 4 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, -31, 2, 0, 6, RGB(31, 31, 22) + createvisualtask AnimTask_BlendColorCycle, 2, 4, -31, 2, 0, 6, RGB(31, 31, 22) call ElectricityEffect waitforvisualfinish end @@ -2014,7 +2014,7 @@ Move_ATTRACT: createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 112, 256, 90 createsprite gRedHeartRisingSpriteTemplate, ANIM_ATTACKER, 40, 200, 272, 90 delay 75 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 4, 4, 0, 10, RGB(31, 25, 27) end Move_GROWTH: @@ -2024,7 +2024,7 @@ Move_GROWTH: waitforvisualfinish end GrowthEffect: - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return @@ -2084,12 +2084,12 @@ Move_MEAN_LOOK: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, RGB_BLACK loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_TARGET, 15, 4 waitplaysewithpan SE_M_LEER, SOUND_PAN_TARGET, 85 createsprite gMeanLookEyeSpriteTemplate, ANIM_ATTACKER, 2 delay 120 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK delay 30 clearmonbg ANIM_DEF_PARTNER waitforvisualfinish @@ -2229,7 +2229,7 @@ Move_ICY_WIND: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_ICE_SPIKES monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE, 4, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 11, 4, 0, 4, RGB_BLACK fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_ICY_WIND, 0 @@ -2246,7 +2246,7 @@ Move_ICY_WIND: clearmonbg ANIM_DEF_PARTNER restorebg waitbgfadeout - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE, 4, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 11, 4, 4, 0, RGB_BLACK waitbgfadein end IcyWindSwirlingSnowballs: @@ -2601,9 +2601,9 @@ Move_EARTHQUAKE: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 delay 10 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 16 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 end Move_FISSURE: @@ -2614,11 +2614,11 @@ Move_FISSURE: delay 8 call FissureDirtPlumeFar delay 15 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 15 call FissureDirtPlumeClose delay 15 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 15 call FissureDirtPlumeFar delay 50 @@ -2846,7 +2846,7 @@ SkullBashAttack: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER waitforvisualfinish playse SE_BANG - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 0 @@ -2892,7 +2892,7 @@ Move_GLARE: createvisualtask AnimTask_GlareEyeDots, 5, 0 playsewithpan SE_M_PSYBEAM2, SOUND_PAN_ATTACKER waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, 1, 0, 0, 16, RGB_BLACK waitforvisualfinish createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 @@ -2901,7 +2901,7 @@ Move_GLARE: delay 2 createvisualtask AnimTask_ShakeTargetInPattern, 3, 20, 1, FALSE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, 1, 0, 16, 0, RGB_BLACK end Move_BARRAGE: @@ -2926,17 +2926,17 @@ SkyAttackSetUp: jumpretfalse SkyAttackSetUpAgainstOpponent goto SkyAttackSetUpAgainstPartner SkyAttackSetUpAgainstOpponent: - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 1, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 27, 1, 0, 12, RGB_BLACK waitforvisualfinish delay 12 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 8, 0, RGB_BLACK createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 loopsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER, 4, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 15, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 15, RGB_WHITE delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 15, 0, RGB_WHITE waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_ATK_PARTNER | F_PAL_DEF_PARTNER, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 25, 1, 8, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -2945,13 +2945,13 @@ SkyAttackSetUpAgainstPartner: createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, ANIM_TARGET, 1, 0, 12, RGB_BLACK waitforvisualfinish delay 12 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 8, 0, RGB_BLACK createvisualtask AnimTask_HorizontalShake, 5, ANIM_ATTACKER, 2, 16 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER delay 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 15, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 0, 15, RGB_WHITE delay 20 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 1, 15, 0, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 4, 1, 8, 0, RGB_BLACK waitforvisualfinish @@ -2963,7 +2963,7 @@ SkyAttackUnleash: loadspritegfx ANIM_TAG_BIRD call SetSkyBg monbg ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE delay 4 createvisualtask AnimTask_AttackerFadeToInvisible, 5, 0 waitforvisualfinish @@ -2975,7 +2975,7 @@ SkyAttackUnleash: delay 20 createvisualtask AnimTask_AttackerFadeFromInvisible, 5, 1 delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 15, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 15, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATTACKER call UnsetSkyBg @@ -3025,7 +3025,7 @@ Move_SUPER_FANG: createsprite gSuperFangSpriteTemplate, ANIM_TARGET, 2 playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB(31, 2, 2), 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB(31, 2, 2), 14, RGB_WHITE, 14 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 7, 12, 1 waitforvisualfinish blendoff @@ -3113,7 +3113,7 @@ Move_SPITE: playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein monbg ANIM_DEF_PARTNER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 6, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 6, 0, 8, RGB_WHITE createvisualtask AnimTask_SpiteTargetShadow, 2 loopsewithpan SE_M_PSYBEAM, SOUND_PAN_TARGET, 20, 3 waitforvisualfinish @@ -3198,7 +3198,7 @@ Move_ENDURE: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -3332,9 +3332,9 @@ MagnitudeIntense: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 0, 50 loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 10 delay 10 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 delay 16 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 goto MagnitudeEnd Move_RAPID_SPIN: @@ -3361,7 +3361,7 @@ Move_MOONLIGHT: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR setalpha 0, 16 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, RGB_BLACK waitforvisualfinish createsprite gMoonSpriteTemplate, ANIM_ATTACKER, 2, 120, 56 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -3484,12 +3484,12 @@ Move_HEAT_WAVE: Move_HAIL: loadspritegfx ANIM_TAG_HAIL loadspritegfx ANIM_TAG_ICE_CRYSTALS - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 0, 6, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_Hail, 5 loopsewithpan SE_M_HAIL, 0, 8, 10 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 3, 6, 0, RGB_BLACK end Move_TORMENT: @@ -3567,7 +3567,7 @@ Move_CHARGE: loadspritegfx ANIM_TAG_ELECTRICITY monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 60, 2, 12 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -3591,7 +3591,7 @@ Move_CHARGE: createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0, -16, -16 playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, RGB_BLACK clearmonbg ANIM_ATTACKER blendoff end @@ -3721,13 +3721,13 @@ BrickBreakNormal: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createvisualtask AnimTask_WindUpLunge, 2, ANIM_ATTACKER, -24, 0, 24, 10, 24, 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 6, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, RGB_BLACK delay 37 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 10, 1, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 6, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -3747,7 +3747,7 @@ BrickBreakShatteredWall: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET delay 20 createvisualtask AnimTask_WindUpLunge, 2, ANIM_ATTACKER, -24, 0, 24, 10, 24, 3 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 6, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, RGB_BLACK delay 37 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 10, 1, 0 @@ -3759,7 +3759,7 @@ BrickBreakShatteredWall: createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 3, 8, 12 playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 6, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -3798,7 +3798,7 @@ Move_ENDEAVOR: Move_ERUPTION: loadspritegfx ANIM_TAG_WARM_ROCK - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 2, 0, 4, RGB_RED waitforvisualfinish createvisualtask AnimTask_EruptionLaunchRocks, 2 waitplaysewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER, 60 @@ -3818,7 +3818,7 @@ Move_ERUPTION: createvisualtask AnimTask_HorizontalShake, 5, MAX_BATTLERS_COUNT, 8, 60 loopsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET, 16, 12 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, 31, 4, 4, 0, RGB_RED end Move_SKILL_SWAP: @@ -3873,13 +3873,13 @@ Move_CAMOUFLAGE: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 16, 0 - createvisualtask AnimTask_SetCamouflageBlend, 5, F_PAL_ATTACKER, 3, 0, 14 + createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 3, 0, 14 delay 16 createvisualtask AnimTask_AttackerFadeToInvisible, 2, 4 playsewithpan SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER waitforvisualfinish delay 8 - createvisualtask AnimTask_SetCamouflageBlend, 5, F_PAL_ATTACKER, 0, 0, 0 + createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 0, 0, 0 waitforvisualfinish createvisualtask AnimTask_AttackerFadeFromInvisible, 2, 1 waitforvisualfinish @@ -3891,13 +3891,13 @@ Move_TAIL_GLOW: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB_BLACK waitforvisualfinish createsprite gTailGlowOrbSpriteTemplate, ANIM_ATTACKER, 66, ANIM_ATTACKER delay 18 loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER, 16, 6 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, RGB_BLACK clearmonbg ANIM_ATTACKER blendoff delay 1 @@ -3955,15 +3955,15 @@ Move_MIST_BALL: waitforvisualfinish playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 10, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 1, 1, RGB(23, 16, 31), 16, RGB_WHITE, 16 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 1, 1, RGB(23, 16, 31), 16, RGB_WHITE, 16 delay 0 playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_LoadMistTiles, 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 0, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 3, 0, 16, RGB_WHITE delay 8 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 70, 0 delay 70 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 16, 0, RGB_WHITE end Move_FEATHER_DANCE: @@ -4133,7 +4133,7 @@ Move_AROMATHERAPY: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 0, 0, 7, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 0, 0, 7, RGB(13, 31, 12) delay 1 monbg ANIM_ATTACKER delay 1 @@ -4151,7 +4151,7 @@ Move_AROMATHERAPY: waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 0, 7, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 0, 7, 0, RGB(13, 31, 12) delay 1 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER createvisualtask AnimTask_StatusClearedEffect, 2, 1 @@ -4162,7 +4162,7 @@ Move_AROMATHERAPY: createsprite gSparklingStarsSpriteTemplate, ANIM_ATTACKER, 16, 12, -5, 0, 0, 32, 60, 1 waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_ANIM_1, 3, 10, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 43, 3, 10, 0, RGB(13, 31, 12) createsprite gBlendThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 16, 0, 0, 0, 1 waitforvisualfinish end @@ -4223,13 +4223,13 @@ Move_ODOR_SLEUTH: waitforvisualfinish clearmonbg ANIM_TARGET delay 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_WHITEALPHA, 16, RGB_WHITEALPHA, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, RGB_WHITEALPHA, 16, RGB_WHITEALPHA, 0 playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end Move_GRASS_WHISTLE: loadspritegfx ANIM_TAG_MUSIC_NOTES - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB(18, 31, 12) waitforvisualfinish createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish @@ -4260,19 +4260,19 @@ Move_GRASS_WHISTLE: delay 4 waitforvisualfinish createvisualtask AnimTask_MusicNotesClearRainbowBlend, 2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 4, 0, RGB(18, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, RGB(18, 31, 12) waitforvisualfinish end Move_TICKLE: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 0, 16, RGB_BLACK waitforvisualfinish createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, -16, -8 createsprite gEyeSparkleSpriteTemplate, ANIM_ATTACKER, 0, 16, -8 playsewithpan SE_M_DETECT, SOUND_PAN_ATTACKER waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 16, 0, RGB_BLACK waitforvisualfinish delay 20 createvisualtask AnimTask_SwayMon, 3, 0, 6, 1280, 3, ANIM_ATTACKER @@ -4351,7 +4351,7 @@ Move_AERIAL_ACE: playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER delay 5 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 10, RGB_BLACK, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_TARGET @@ -4361,7 +4361,7 @@ Move_AERIAL_ACE: Move_IRON_DEFENSE: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end @@ -4414,7 +4414,7 @@ Move_VOLT_TACKLE: loadspritegfx ANIM_TAG_ELECTRICITY monbg ANIM_ATTACKER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 8, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 0, 8, RGB_BLACK waitforvisualfinish createsprite gVoltTackleOrbSlideSpriteTemplate, ANIM_ATTACKER, 1 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -4451,7 +4451,7 @@ Move_VOLT_TACKLE: delay 2 createsprite gElectricPuffSpriteTemplate, ANIM_ATTACKER, 2, 0, -16, -16 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 8, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 8, 0, RGB_BLACK waitforvisualfinish end @@ -4547,7 +4547,7 @@ Move_SHOCK_WAVE: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_ATTACKER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_ElectricChargingParticles, 2, ANIM_ATTACKER, 20, 0, 2 playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER @@ -4561,10 +4561,10 @@ Move_SHOCK_WAVE: playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 6, 18, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 3, 16, 0, RGB_WHITE - createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 16, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, 1, 3, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 16, 16, RGB_BLACK delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 0, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER blendoff @@ -4629,7 +4629,7 @@ Move_MIND_READER: createsprite gWhiteHaloSpriteTemplate, ANIM_ATTACKER, 5 delay 40 playsewithpan SE_M_LEER, SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 1, 2, 0, 10, RGB_BLACK + createvisualtask AnimTask_BlendColorCycle, 2, 1, 1, 2, 0, 10, RGB_BLACK call MindReaderEyeSpikeEffect waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -4665,8 +4665,8 @@ Move_ICE_PUNCH: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB(12, 26, 31) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB(12, 26, 31) delay 20 playsewithpan SE_M_STRING_SHOT, SOUND_PAN_TARGET createsprite gIceCrystalSpiralInwardSmall, ANIM_ATTACKER, 2, 0 @@ -4688,9 +4688,9 @@ Move_ICE_PUNCH: delay 15 call IceCrystalEffectShort delay 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 9, 0, RGB(12, 26, 31) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 9, 0, RGB(12, 26, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -4712,7 +4712,7 @@ Move_CONFUSION: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE waitforvisualfinish playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 15, 1 @@ -4729,7 +4729,7 @@ Move_PSYCHIC: call SetPsychicBackground setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB(31, 23, 0) + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB(31, 23, 0) waitforvisualfinish loopsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET, 10, 3 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 15, 1 @@ -4754,7 +4754,7 @@ FutureSight: call SetPsychicBackground setalpha 8, 8 playsewithpan SE_M_SUPERSONIC, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 8, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 8, RGB_WHITE createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, ANIM_ATTACKER, 1 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -4767,7 +4767,7 @@ Move_THUNDER: waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, -1 waitbgfadein - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK delay 16 createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET @@ -4811,7 +4811,7 @@ Move_THUNDER: delay 2 createvisualtask AnimTask_InvertScreenColor, 2, 257, 257, 257 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, 1, 2, 16, 0, RGB_BLACK waitforvisualfinish restorebg waitbgfadeout @@ -4825,7 +4825,7 @@ Move_THUNDER_PUNCH: loadspritegfx ANIM_TAG_LIGHTNING monbg ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK waitforvisualfinish playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 4, 0, 0, 8, 1, 0 @@ -4845,7 +4845,7 @@ Move_THUNDER_PUNCH: createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 15, 1 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 2 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK delay 20 waitforvisualfinish clearmonbg ANIM_TARGET @@ -4931,7 +4931,7 @@ Move_DRAGON_BREATH: delay 2 createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 delay 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 9, RGB_RED createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 delay 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 21, 1 @@ -4951,7 +4951,7 @@ Move_DRAGON_BREATH: delay 2 createsprite gDragonBreathFireSpriteTemplate, ANIM_TARGET, 2, 0, 0, 0, 0, 20 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 9, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -5031,17 +5031,17 @@ Move_LIGHT_SCREEN: end SpecialScreenSparkle: - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 23, 0, ANIM_ATTACKER, TRUE + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 23, 0, ANIM_ATTACKER, 1 delay 6 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 31, -8, ANIM_ATTACKER, TRUE + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 31, -8, ANIM_ATTACKER, 1 delay 5 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 20, ANIM_ATTACKER, TRUE + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 20, ANIM_ATTACKER, 1 delay 7 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -15, ANIM_ATTACKER, TRUE + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, -15, ANIM_ATTACKER, 1 delay 6 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, ANIM_ATTACKER, TRUE + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, ANIM_ATTACKER, 1 delay 6 - createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE + createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, 1 return Move_MIRROR_COAT: @@ -5064,11 +5064,11 @@ Move_REFLECT: waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 15 createsprite gReflectWallSpriteTemplate, ANIM_ATTACKER, 1, 40, 0, ANIM_TAG_BLUE_LIGHT_WALL delay 20 - createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 0, ANIM_ATTACKER, TRUE + createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 30, 0, ANIM_ATTACKER, 1 delay 7 - createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 19, -12, ANIM_ATTACKER, TRUE + createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 19, -12, ANIM_ATTACKER, 1 delay 7 - createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 20, ANIM_ATTACKER, TRUE + createsprite gReflectSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 20, ANIM_ATTACKER, 1 waitforvisualfinish delay 1 blendoff @@ -5135,7 +5135,7 @@ Move_SMOG: call SmogCloud delay 120 loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(26, 0, 26) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(26, 0, 26) delay 10 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 15, 1 waitforvisualfinish @@ -5269,14 +5269,14 @@ Move_DRAGON_RAGE: Move_RAIN_DANCE: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 delay 120 delay 30 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 4, 0, RGB_BLACK waitforvisualfinish end @@ -5347,7 +5347,7 @@ Move_ICE_BEAM: splitbgprio ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK waitforvisualfinish createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_BUBBLE_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 4, 4, 0, 10 createsprite gIceBeamOuterCrystalSpriteTemplate, ANIM_ATTACKER, 2, 20, 12, 0, 12, 20 @@ -5356,7 +5356,7 @@ Move_ICE_BEAM: call IceBeamCreateCrystals call IceBeamCreateCrystals call IceBeamCreateCrystals - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, -31, 0, 7, RGB(0, 20, 31) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, -31, 0, 7, RGB(0, 20, 31) createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 25, 1 call IceBeamCreateCrystals call IceBeamCreateCrystals @@ -5372,9 +5372,9 @@ Move_ICE_BEAM: waitforvisualfinish delay 20 call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 5, 7, 0, RGB(0, 20, 31) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 7, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -5437,7 +5437,7 @@ SolarBeamEnd: SolarBeamSetUp: monbg ANIM_ATK_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 1, 4, 0, 11, RGB(31, 31, 11) + createvisualtask AnimTask_BlendColorCycle, 2, 2, 1, 4, 0, 11, RGB(31, 31, 11) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call SolarBeamAbsorbEffect waitforvisualfinish @@ -5482,7 +5482,7 @@ SolarBeamUnleash: delay 4 createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 1 delay 4 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 0, 10, RGB(25, 31, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 0, 10, RGB(25, 31, 0) createsprite gSolarBeamBigOrbSpriteTemplate, ANIM_TARGET, 3, 15, 0, 20, 2 delay 4 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 65, 1 @@ -5497,7 +5497,7 @@ SolarBeamUnleash: call SolarBeamUnleash1 call SolarBeamUnleash1 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 10, 0, RGB(25, 31, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 1, 10, 0, RGB(25, 31, 0) call UnsetSolarBeamBg goto SolarBeamEnd SolarBeamUnleash1: @@ -5572,7 +5572,7 @@ BlizzardAgainstPlayer: Move_POWDER_SNOW: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 0, 3, RGB_BLACK waitforvisualfinish panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 call PowderSnowSnowballs @@ -5584,7 +5584,7 @@ Move_POWDER_SNOW: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 20 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 3, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 3, 0, RGB_BLACK end PowderSnowSnowballs: createsprite gPowderSnowSnowballSpriteTemplate, ANIM_ATTACKER, 40, 0, 0, 0, 0, 56, 4, 4, 1 @@ -5665,7 +5665,7 @@ Move_SIGNAL_BEAM: call SignalBeamOrbs call SignalBeamOrbs createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 25, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 8, 5, RGB_RED, 8, RGB(1, 30, 0), 8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 8, 5, RGB_RED, 8, RGB(1, 30, 0), 8 call SignalBeamOrbs call SignalBeamOrbs call SignalBeamOrbs @@ -5698,7 +5698,7 @@ Move_ABSORB: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 @@ -5711,7 +5711,7 @@ Move_ABSORB: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5751,7 +5751,7 @@ Move_MEGA_DRAIN: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 8, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 @@ -5764,7 +5764,7 @@ Move_MEGA_DRAIN: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 8, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5812,7 +5812,7 @@ Move_GIGA_DRAIN: monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 12, RGB(13, 31, 12) waitforvisualfinish playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 @@ -5825,7 +5825,7 @@ Move_GIGA_DRAIN: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 12, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5891,14 +5891,14 @@ Move_LEECH_LIFE: delay 2 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 7, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK waitforvisualfinish call AbsorbEffect waitforvisualfinish delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -5906,7 +5906,7 @@ Move_LEECH_LIFE: Move_SYNTHESIS: loadspritegfx ANIM_TAG_SPARKLE_2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 16, RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call GrantingStarsEffect waitforvisualfinish @@ -5948,7 +5948,7 @@ Move_SLUDGE: createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 5, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, RGB(30, 0, 31) call PoisonBubblesEffect waitforvisualfinish end @@ -5966,7 +5966,7 @@ Move_SLUDGE_BOMB: call SludgeBombProjectile call SludgeBombProjectile createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 2, 0, 12, RGB(30, 0, 31) createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20 createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20 @@ -6010,7 +6010,7 @@ Move_ACID: delay 15 createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 2, 0, 10, 1 createvisualtask AnimTask_ShakeMon2, 5, ANIM_DEF_PARTNER, 2, 0, 10, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 2, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 20, 2, 2, 0, 12, RGB(30, 0, 31) createsprite gAcidPoisonDropletSpriteTemplate, ANIM_TARGET, 2, 0, -22, 0, 15, 55 playsewithpan SE_M_BUBBLE, SOUND_PAN_TARGET delay 10 @@ -6060,7 +6060,7 @@ Move_BONE_CLUB: delay 12 createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 1 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, RGB_BLACK, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 7, 5, 1, RGB_BLACK, 10, RGB_BLACK, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish clearmonbg ANIM_DEF_PARTNER @@ -6124,7 +6124,7 @@ MegahornContinue: createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 4, 1, 4 waitforvisualfinish createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, -4, 1, 12, 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 7, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 delay 10 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 delay 3 @@ -6266,7 +6266,7 @@ Move_CRABHAMMER: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 0 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET delay 1 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB(13, 21, 31), 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB(13, 21, 31), 10, RGB_BLACK, 0 createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -24, 0, 0, 4 waitforvisualfinish delay 8 @@ -6362,14 +6362,14 @@ Move_WHIRLPOOL: splitbgprio ANIM_TARGET setalpha 12, 8 delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(0, 13, 23) playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 50, 1 call WhirlpoolEffect call WhirlpoolEffect call WhirlpoolEffect delay 12 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(0, 13, 23) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -6469,7 +6469,7 @@ Move_CROSS_CHOP: createsprite gCrossChopHandSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1 delay 40 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_WHITE, 10, RGB_BLACK, 10 createsprite gCrossImpactSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 20 createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 7, 0, 9, 1 waitforvisualfinish @@ -6721,7 +6721,7 @@ Move_SUNNY_DAY: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 1, 0, 6, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 1, 0, 6, RGB_WHITE waitforvisualfinish panse_adjustnone SE_M_PETAL_DANCE, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +1, 0 call SunnyDayLightRay @@ -6729,7 +6729,7 @@ Move_SUNNY_DAY: call SunnyDayLightRay call SunnyDayLightRay waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 1, 6, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 1, 6, 0, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -6929,7 +6929,7 @@ Move_MIST: call MistCloud call MistCloud delay 32 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATK_SIDE, 8, 2, 0, 14, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 10, 8, 2, 0, 14, RGB_WHITE waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -6945,9 +6945,9 @@ Move_HAZE: playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 delay 30 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 2, 0, 16, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x780, 2, 0, 16, RGB_BLACK delay 90 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x780, 1, 16, 0, RGB_BLACK end Move_FIRE_PUNCH: @@ -6956,7 +6956,7 @@ Move_FIRE_PUNCH: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 9, RGB_RED createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 0 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 64 createsprite gFireSpiralInwardSpriteTemplate, ANIM_TARGET, 1, 128 @@ -6970,7 +6970,7 @@ Move_FIRE_PUNCH: delay 4 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 9, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 0, 9, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -7099,7 +7099,7 @@ Move_POISON_GAS: createsprite gPoisonGasCloudSpriteTemplate, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 delay 40 loopsewithpan SE_M_MIST, SOUND_PAN_TARGET, 28, 6 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 6, 2, 0, 12, RGB(26, 0, 26) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 6, 2, 0, 12, RGB(26, 0, 26) waitforvisualfinish blendoff clearmonbg ANIM_DEF_PARTNER @@ -7133,7 +7133,7 @@ Move_PSYBEAM: call PsybeamRings call PsybeamRings createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, ANIM_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 18, 31) call PsybeamRings call PsybeamRings call PsybeamRings @@ -7158,7 +7158,7 @@ Move_HYPNOSIS: call HypnosisRings call HypnosisRings call HypnosisRings - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(31, 18, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 18, 31) waitforvisualfinish delay 1 call UnsetPsychicBackground @@ -7178,7 +7178,7 @@ Move_PSYWAVE: createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 9, 0, 10 call PsywaveRings call PsywaveRings - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(31, 18, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 1, 4, 0, 12, RGB(31, 18, 31) call PsywaveRings call PsywaveRings call PsywaveRings @@ -7314,7 +7314,7 @@ Move_NIGHT_SHADE: createvisualtask AnimTask_NightShadeClone, 5, 85 delay 70 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 12, 1 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 2, 0, 13, RGB_BLACK + createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 2, 0, 13, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATTACKER delay 1 @@ -7376,7 +7376,7 @@ Move_FOCUS_ENERGY: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_WHITE createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -7389,7 +7389,7 @@ Move_BIDE: end BideSetUp: loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER, 9, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 waitforvisualfinish end @@ -7399,7 +7399,7 @@ BideUnleash: monbg ANIM_DEF_PARTNER setalpha 12, 8 loopsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER, 9, 2 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 waitforvisualfinish createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 4 @@ -7418,7 +7418,7 @@ BideUnleash: delay 5 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 11, 0, RGB_RED + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 2, 11, 0, RGB_RED waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -7429,7 +7429,7 @@ Move_STRING_SHOT: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK waitforvisualfinish loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 call StringShotThread @@ -7461,7 +7461,7 @@ Move_STRING_SHOT: clearmonbg ANIM_DEF_PARTNER delay 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK end StringShotThread: @@ -7474,7 +7474,7 @@ Move_SPIDER_WEB: loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 0, 9, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK waitforvisualfinish splitbgprio ANIM_TARGET loopsewithpan SE_M_STRING_SHOT, SOUND_PAN_ATTACKER, 9, 6 @@ -7498,7 +7498,7 @@ Move_SPIDER_WEB: waitforvisualfinish clearmonbg ANIM_DEF_PARTNER delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, F_PAL_BG, 2, 9, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK end SpiderWebThread: @@ -7566,7 +7566,7 @@ Move_RECOVER: monbg ANIM_ATK_PARTNER setalpha 12, 8 loopsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER, 13, 3 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB(31, 31, 11) + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 6, 0, 11, RGB(31, 31, 11) call RecoverAbsorbEffect call RecoverAbsorbEffect call RecoverAbsorbEffect @@ -7608,7 +7608,7 @@ Move_MIMIC: setarg 7, 0xFFFF waitforvisualfinish playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 2, 0, 11, RGB_WHITE waitforvisualfinish clearmonbg_static ANIM_DEF_PARTNER blendoff @@ -7655,7 +7655,7 @@ CurseGhost: createsprite gCurseGhostSpriteTemplate, ANIM_TARGET, 2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 14, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 16, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -7673,7 +7673,7 @@ CurseStats: CurseStats1: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_DrawFallingWhiteLinesOnAttacker, 5 - createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 5, 2, 4, 2, 0, 10, RGB_RED return Move_SOFT_BOILED: @@ -7688,7 +7688,7 @@ Move_SOFT_BOILED: delay 120 delay 7 playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 10, 0, RGB(12, 24, 30) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 10, 0, RGB(12, 24, 30) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 31, 16, 0, 1 delay 8 createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 31, 16, 0, 1 @@ -7703,7 +7703,7 @@ Move_HEAL_BELL: loadspritegfx ANIM_TAG_BELL loadspritegfx ANIM_TAG_MUSIC_NOTES_2 loadspritegfx ANIM_TAG_THIN_RING - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATK_SIDE, 0, 0, 10, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 10, 0, 0, 10, RGB_WHITE waitforvisualfinish createvisualtask AnimTask_LoadMusicNotesPals, 5 createsprite gBellSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 0, 1 @@ -7741,12 +7741,12 @@ Move_HEAL_BELL: loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 4, 3, 10, 0, RGB(12, 24, 30) - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATK_SIDE, 3, 10, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 10, 3, 10, 0, RGB_WHITE createsprite gBlendThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 16, 0, 0, 0, 1 end HealBellRing: createvisualtask AnimTask_BlendBattleAnimPalExclude, 10, 4, 3, 8, 0, RGB(12, 24, 30) - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATK_SIDE, 3, 2, 10, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 10, 3, 2, 10, RGB_WHITE createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 40, 0, -24, 0, 1 playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER return @@ -7759,12 +7759,12 @@ Move_FAKE_OUT: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 5, 1 createvisualtask AnimTask_StretchTargetUp, 3 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_WHITE end Move_SCARY_FACE: loadspritegfx ANIM_TAG_EYE_SPARKLE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 3, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 27, 3, 0, 16, RGB_BLACK playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitforvisualfinish delay 10 @@ -7776,7 +7776,7 @@ Move_SCARY_FACE: waitforvisualfinish createvisualtask AnimTask_ShakeTargetInPattern, 3, 20, 1, FALSE playsewithpan SE_M_STRING_SHOT2, SOUND_PAN_TARGET - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER, 3, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 27, 3, 16, 0, RGB_BLACK waitforvisualfinish end @@ -7920,7 +7920,7 @@ PresentHeal: Move_BATON_PASS: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 2, 0, 11, RGB(31, 22, 30) + createvisualtask AnimTask_BlendColorCycle, 2, 31, 1, 2, 0, 11, RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end @@ -7946,13 +7946,13 @@ Move_PERISH_SONG: delay 20 panse SE_M_PERISH_SONG, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 delay 80 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_BLACK createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 4, 0 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 5, 0 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 6, 0 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 7, 0 delay 100 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_BLACK createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 4, 1 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 5, 1 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, 6, 1 @@ -8027,7 +8027,7 @@ Move_TRI_ATTACK: delay 20 createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 6, 0, 7 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, RGB_BLACK delay 16 loadspritegfx ANIM_TAG_FIRE createsprite gLargeFlameScatterSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 @@ -8063,7 +8063,7 @@ Move_TRI_ATTACK: waitforvisualfinish loadspritegfx ANIM_TAG_ICE_CRYSTALS call IceCrystalEffectShort - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, RGB_BLACK waitforvisualfinish end @@ -8149,7 +8149,7 @@ Move_TRICK: Move_WISH: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, RGB_BLACK waitforvisualfinish panse_adjustall SE_M_REFLECT, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 createsprite gWishStarSpriteTemplate, ANIM_ATTACKER, 40 @@ -8158,19 +8158,19 @@ Move_WISH: loopsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER, 16, 3 call GrantingStarsEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, RGB_BLACK waitforvisualfinish end Move_STOCKPILE: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE + createvisualtask AnimTask_BlendColorCycle, 2, 2, 8, 1, 0, 12, RGB_WHITE createvisualtask AnimTask_StockpileDeformMon, 5 call StockpileAbsorb call StockpileAbsorb waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 12, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 12, 0, RGB_WHITE end StockpileAbsorb: createsprite gStockpileAbsorptionOrbSpriteTemplate, ANIM_ATTACKER, 2, 55, 55, 13 @@ -8288,7 +8288,7 @@ Move_MORNING_SUN: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 delay 8 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 8, 0, 12, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 8, 0, 12, RGB_WHITE delay 14 call MorningSunStar call MorningSunStar @@ -8305,7 +8305,7 @@ Move_MORNING_SUN: call MorningSunStar call MorningSunStar call MorningSunStar - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 3, 12, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 3, 12, 0, RGB_WHITE waitforvisualfinish waitsound call HealingEffect @@ -8324,7 +8324,7 @@ Move_SWEET_SCENT: call SweetScentEffect createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 55, 0 setpan SOUND_PAN_TARGET - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_DEF_SIDE, 1, 5, 5, 13, RGB(31, 21, 21) + createvisualtask AnimTask_BlendColorCycle, 2, 20, 1, 5, 5, 13, RGB(31, 21, 21) call SweetScentEffect waitforvisualfinish end @@ -8355,7 +8355,7 @@ SweetScentEffect: Move_HYPER_BEAM: loadspritegfx ANIM_TAG_ORBS - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 0, 16, RGB_BLACK waitforvisualfinish delay 10 playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER @@ -8371,7 +8371,7 @@ Move_HYPER_BEAM: call HyperBeamOrbs call HyperBeamOrbs createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(25, 25, 25) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 11, RGB(25, 25, 25) call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs @@ -8393,9 +8393,9 @@ Move_HYPER_BEAM: call HyperBeamOrbs call HyperBeamOrbs call HyperBeamOrbs - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(25, 25, 25) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 11, 0, RGB(25, 25, 25) waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 16, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 16, 0, RGB_BLACK end HyperBeamOrbs: createsprite gHyperBeamOrbSpriteTemplate, ANIM_TARGET, 2 @@ -8450,17 +8450,17 @@ CreateFlatterConfetti: Move_ROLE_PLAY: monbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_WHITE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 10, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 16, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 10, RGB_BLACK waitforvisualfinish playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_DETECT, SOUND_PAN_ATTACKER, 30 createvisualtask AnimTask_RolePlaySilhouette, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 16, 0, RGB_WHITE delay 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 10, 0, RGB_BLACK end Move_REFRESH: @@ -8473,7 +8473,7 @@ Move_REFRESH: call GrantingStarsEffect waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 10, 0, RGB(12, 24, 30) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 10, 0, RGB(12, 24, 30) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end @@ -8485,13 +8485,13 @@ Move_BLAZE_KICK: setalpha 12, 8 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET createsprite gSpinningHandOrFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 30 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 7, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 7, RGB_WHITE delay 30 playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 0 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 14, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 0, RGB_WHITE - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, 4, 2, 0, 0, RGB_WHITE + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 call FireSpreadEffect waitforvisualfinish clearmonbg ANIM_TARGET @@ -8510,7 +8510,7 @@ Move_HYPER_VOICE: end HyperVoiceEffect: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 8, 0, RGB_YELLOW + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 8, 0, RGB_YELLOW createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0 createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 @@ -8521,14 +8521,14 @@ HyperVoiceEffect: Move_SAND_TOMB: loadspritegfx ANIM_TAG_MUD_SAND - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 43, 1 playsewithpan SE_M_SAND_TOMB, SOUND_PAN_TARGET call SandTombSwirlingDirt call SandTombSwirlingDirt call SandTombSwirlingDirt delay 22 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(19, 17, 0) waitforvisualfinish end @@ -8627,7 +8627,7 @@ Move_DRAGON_CLAW: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_CLAW_SLASH playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 4, 0, 8, RGB(31, 19, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 4, 0, 8, RGB(31, 19, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 15, 1 call DragonClawFireSpiral call DragonClawFireSpiral @@ -8664,7 +8664,7 @@ Move_DRAGON_CLAW: createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 512, 25, 16, 46, ANIM_ATTACKER delay 2 createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, ANIM_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 4, 8, 0, RGB(31, 19, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 4, 8, 0, RGB(31, 19, 0) waitforvisualfinish end DragonClawFireSpiral: @@ -8747,7 +8747,7 @@ Move_REVENGE: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createsprite gRevengeSmallScratchSpriteTemplate, ANIM_ATTACKER, 2, 10, -10 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 4, 2, 8, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, 2, 0, 4, 2, 8, RGB_RED waitforvisualfinish unloadspritegfx ANIM_TAG_PURPLE_SCRATCH loadspritegfx ANIM_TAG_PURPLE_SWIPE @@ -8777,7 +8777,7 @@ Move_POISON_FANG: delay 10 createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 3, 0, 10, 1 waitforvisualfinish - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 0, 4, 0, 12, RGB(26, 0, 26) + createvisualtask AnimTask_BlendColorCycle, 2, 4, 0, 4, 0, 12, RGB(26, 0, 26) call PoisonBubblesEffect waitforvisualfinish end @@ -8793,7 +8793,7 @@ Move_FRENZY_PLANT: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 2, 0, 5, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 2, 0, 5, RGB_BLACK waitforvisualfinish createsprite gFrenzyPlantRootSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, 2, 0, 0, 100 playsewithpan SE_M_SCRATCH, SOUND_PAN_ATTACKER @@ -8841,7 +8841,7 @@ Move_FRENZY_PLANT: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, ANIM_TARGET, 1 playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_BG, 2, 5, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 2, 5, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET blendoff @@ -8983,7 +8983,7 @@ ReturnStrong: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto ReturnContinue ReturnStrongest: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 6, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 6, RGB_BLACK waitforvisualfinish createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, ANIM_ATTACKER createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -9040,7 +9040,7 @@ ReturnStrongest: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -5, 3, ANIM_TARGET, 0 createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_MEGA_KICK2, SOUND_PAN_TARGET waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 6, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6, 0, RGB_BLACK goto ReturnContinue ReturnStrongestHit: createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 3, ANIM_ATTACKER @@ -9170,7 +9170,7 @@ Move_SILVER_WIND: createvisualtask AnimTask_StartSlidingBg, 5, 1536, 0, 0, -1 SilverWindContinue: delay 0 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 4, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 1, 0, 4, 4, RGB_BLACK waitbgfadein createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 createsprite gSilverWindBigSparkSpriteTemplate, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 @@ -9284,7 +9284,7 @@ Move_OVERHEAT: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 18 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 5, RGB(28, 0, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 5, RGB(28, 0, 0) waitforvisualfinish createvisualtask AnimTask_AllocBackupPalBuffer, 5 waitforvisualfinish @@ -9295,7 +9295,7 @@ Move_OVERHEAT: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_CopyPalUnfadedToBackup, 5, 1, 0 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 0, 13, RGB(28, 0, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 1, 0, 13, RGB(28, 0, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 2, 0, 15, 1 waitforvisualfinish playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_ATTACKER @@ -9341,12 +9341,12 @@ Move_OVERHEAT: playsewithpan SE_M_FIRE_PUNCH, SOUND_PAN_TARGET createvisualtask AnimTask_CopyPalFadedToUnfaded, 5, 1 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, -1, 0, 13, RGB(18, 18, 18) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, -1, 0, 13, RGB(18, 18, 18) createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 3, 0, 15, 1 waitforvisualfinish createvisualtask AnimTask_CopyPalUnfadedFromBackup, 5, 0, 1 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 5, 0, RGB(28, 0, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 5, 0, RGB(28, 0, 0) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -9354,7 +9354,7 @@ Move_OVERHEAT: delay 15 createvisualtask AnimTask_CopyPalUnfadedFromBackup, 5, 1, 0 delay 1 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 13, 0, RGB(18, 18, 18) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 13, 0, RGB(18, 18, 18) waitforvisualfinish createvisualtask AnimTask_FreeBackupPalBuffer, 5 waitforvisualfinish @@ -9498,7 +9498,7 @@ Move_WATER_PULSE: monbg ANIM_TARGET splitbgprio ANIM_TARGET playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 0, 0, 7, RGB(0, 25, 28) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 7, RGB(0, 25, 28) delay 10 createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0 createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1 @@ -9518,7 +9518,7 @@ Move_WATER_PULSE: delay 13 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 8, 18, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 7, 0, RGB(0, 25, 28) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB(0, 25, 28) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER end @@ -9531,7 +9531,7 @@ Move_PSYCHO_BOOST: createvisualtask AnimTask_FadeScreenToWhite, 5 waitbgfadein delay 6 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_BG, 2, 8, 0, 10, RGB_BLACK + createvisualtask AnimTask_BlendColorCycle, 2, 1, 2, 8, 0, 10, RGB_BLACK delay 0 splitbgprio ANIM_ATTACKER setalpha 8, 8 @@ -9558,7 +9558,7 @@ Move_KNOCK_OFF: playsewithpan SE_M_VITAL_THROW, SOUND_PAN_TARGET createsprite gKnockOffStrikeSpriteTemplate, ANIM_TARGET, 2, -16, -16 delay 8 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -12, 10, 0, 3 @@ -9576,7 +9576,7 @@ Move_DOOM_DESIRE: delay 1 monbg ANIM_ATK_PARTNER createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, FALSE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, RGB_BLACK waitforvisualfinish setalpha 8, 8 playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -9584,7 +9584,7 @@ Move_DOOM_DESIRE: waitforvisualfinish delay 20 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_TARGET, TRUE - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, RGB_BLACK waitforvisualfinish clearmonbg ANIM_ATK_PARTNER blendoff @@ -9836,7 +9836,7 @@ Move_WEATHER_BALL: waitforvisualfinish delay 15 playsewithpan SE_M_DETECT, 0 - createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, RGB_WHITE, 10, RGB_BLACK, 0 waitforvisualfinish createvisualtask AnimTask_GetWeather, 2 delay 1 @@ -10218,7 +10218,7 @@ UnsetSolarBeamBg: Status_Poison: loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 18, 2 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB(30, 0, 31) + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 12, RGB(30, 0, 31) end Status_Confusion: @@ -10320,13 +10320,13 @@ General_StatsChange: General_SubstituteFade: monbg ANIM_ATTACKER createvisualtask AnimTask_SubstituteFadeToInvisible, 5 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 16, RGB_WHITE waitforvisualfinish delay 1 clearmonbg ANIM_ATTACKER delay 2 blendoff - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 10, 2, 0, 0, 0, RGB_WHITE createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE end @@ -10389,13 +10389,13 @@ Status_Whirlpool: splitbgprio ANIM_TARGET setalpha 12, 8 delay 0 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(0, 13, 23) playsewithpan SE_M_WHIRLPOOL, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 30, 1 call WhirlpoolEffect call WhirlpoolEffect delay 12 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(0, 13, 23) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(0, 13, 23) waitforvisualfinish stopsound clearmonbg ANIM_DEF_PARTNER @@ -10420,13 +10420,13 @@ Status_Clamp: Status_SandTomb: loadspritegfx ANIM_TAG_MUD_SAND - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 30, 1 playsewithpan SE_M_SAND_TOMB, SOUND_PAN_TARGET call SandTombSwirlingDirt call SandTombSwirlingDirt delay 22 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 7, 0, RGB(19, 17, 0) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, RGB(19, 17, 0) waitforvisualfinish stopsound end @@ -10448,7 +10448,7 @@ General_HeldItemEffect: call GrantingStarsEffect waitforvisualfinish playsewithpan SE_SHINY, SOUND_PAN_ATTACKER - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 3, 7, 0, RGB(17, 31, 25) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 3, 7, 0, RGB(17, 31, 25) createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 waitforvisualfinish end @@ -10492,11 +10492,11 @@ General_SmokeballEscape: end General_FocusBand: - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 7, 0, 9, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 2, 7, 0, 9, RGB_RED playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SlideMonForFocusBand, 5, 30, 128, 0, 1, 2, 0, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 4, 9, 0, RGB_RED + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 2, 4, 9, 0, RGB_RED waitforvisualfinish delay 6 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 0, 0, 0, 15 @@ -10505,13 +10505,13 @@ General_FocusBand: General_Rain: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 0, 4, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 0, 4, RGB_BLACK waitforvisualfinish createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 delay 50 waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG | F_PAL_BATTLERS_2, 2, 4, 0, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, 0x781, 2, 4, 0, RGB_BLACK waitforvisualfinish end @@ -10595,7 +10595,7 @@ General_FutureSightHit: General_DoomDesireHit: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 loadspritegfx ANIM_TAG_EXPLOSION - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, RGB_WHITE waitforvisualfinish delay 10 createvisualtask AnimTask_DoomDesireLightBeam, 5 @@ -10622,7 +10622,7 @@ General_DoomDesireHit: playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, RGB_WHITE waitforvisualfinish end @@ -10631,7 +10631,7 @@ General_FocusPunchSetUp: playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect delay 8 - createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED + createvisualtask AnimTask_BlendColorCycle, 2, 2, 2, 2, 0, 11, RGB_RED createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 32, 1 call EndureEffect delay 8 @@ -10644,7 +10644,7 @@ General_IngrainHeal: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER setalpha 12, 8 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 4, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, RGB(13, 31, 12) waitforvisualfinish delay 3 call AbsorbEffect @@ -10652,7 +10652,7 @@ General_IngrainHeal: delay 15 call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 4, 0, RGB(13, 31, 12) + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, RGB(13, 31, 12) waitforvisualfinish clearmonbg ANIM_DEF_PARTNER blendoff @@ -10660,7 +10660,7 @@ General_IngrainHeal: General_WishHeal: loadspritegfx ANIM_TAG_SPARKLE_2 - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, RGB_BLACK waitforvisualfinish playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER call GrantingStarsEffect @@ -10669,7 +10669,7 @@ General_WishHeal: loadspritegfx ANIM_TAG_BLUE_STAR call HealingEffect waitforvisualfinish - createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, RGB_BLACK end SnatchMoveTrySwapFromSubstitute: diff --git a/data/event_scripts.s b/data/event_scripts.s index 1f3db6aa2..66877b25c 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -53,6 +53,7 @@ #include "constants/union_room.h" #include "constants/vars.h" #include "constants/weather.h" +#include "constants/follow_me.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .include "constants/constants.inc" diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 49fcf798b..277cbb376 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -72,6 +72,9 @@ gFieldEffectScriptPointers:: .4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK + .4byte gFieldEffectScript_TracksSlither @ FLDEFF_TRACKS_SLITHER + .4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG + .4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT gFieldEffectScript_ExclamationMarkIcon1:: field_eff_callnative FldEff_ExclamationMarkIcon @@ -128,6 +131,18 @@ gFieldEffectScript_JumpTallGrass:: gFieldEffectScript_SandFootprints:: field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandFootprints field_eff_end + +gFieldEffectScript_TracksBug:: @ 82DBB42 + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksBug + field_eff_end + +gFieldEffectScript_TracksSpot:: @ 82DBB42 + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSpot + field_eff_end + +gFieldEffectScript_TracksSlither:: @ 82DBBFF + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSlither + field_eff_end gFieldEffectScript_JumpBigSplash:: field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpBigSplash diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc index def903b1d..406ab46ae 100644 --- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc @@ -5,10 +5,6 @@ .set LOCALID_PLAYER, 13 .set LOCALID_OPPONENT, 15 -.set NO_DRAW, 0 -.set DRAW_TRAINER, 1 -.set DRAW_TUCKER, 2 - BattleFrontier_BattleDomeBattleRoom_MapScripts:: map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleDomeBattleRoom_OnTransition map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleDomeBattleRoom_OnFrame @@ -16,6 +12,10 @@ BattleFrontier_BattleDomeBattleRoom_MapScripts:: map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleDomeBattleRoom_OnResume .byte 0 + .set NO_DRAW, 0 + .set DRAW_TRAINER, 1 + .set DRAW_TUCKER, 2 + BattleFrontier_BattleDomeBattleRoom_OnTransition: dome_setopponentgfx frontier_get FRONTIER_DATA_BATTLE_NUM diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 3e729e212..320e12d99 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -364,8 +364,7 @@ BattleFrontier_BattlePikeLobby_Text_AwardYouTheseBattlePoints2: @ Unused BattleFrontier_BattlePikeLobby_Text_ReachedBattlePointLimit: .string "You appear to have reached the limit\n" - .string "for Battle Points…\p" - .string "Please exchange some Battle Points\n" + .string "for Battle Points…\pPlease exchange some Battle Points\n" .string "for prizes, then return…$" BattleFrontier_BattlePikeLobby_Text_FailedToSaveBeforeQuitting: diff --git a/data/maps/BattleFrontier_Lounge2/scripts.inc b/data/maps/BattleFrontier_Lounge2/scripts.inc index 12eda4a5e..8efc17293 100644 --- a/data/maps/BattleFrontier_Lounge2/scripts.inc +++ b/data/maps/BattleFrontier_Lounge2/scripts.inc @@ -22,20 +22,18 @@ BattleFrontier_Lounge2_EventScript_AlreadyMetManiac:: end BattleFrontier_Lounge2_EventScript_GiveAdvice:: - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_SINGLES, BattleFrontier_Lounge2_EventScript_BufferSingle - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_DOUBLES, BattleFrontier_Lounge2_EventScript_BufferDouble - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_MULTIS, BattleFrontier_Lounge2_EventScript_BufferMulti - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_LINK, BattleFrontier_Lounge2_EventScript_BufferMultiLink - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_DOME, BattleFrontier_Lounge2_EventScript_BufferBattleDome - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_FACTORY, BattleFrontier_Lounge2_EventScript_BufferBattleFactory - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_PALACE, BattleFrontier_Lounge2_EventScript_BufferBattlePalace - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_ARENA, BattleFrontier_Lounge2_EventScript_BufferBattleArena - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_PIKE, BattleFrontier_Lounge2_EventScript_BufferBattlePike - call_if_eq VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_PYRAMID, BattleFrontier_Lounge2_EventScript_BufferBattlePyramid -@ <= FRONTIER_MANIAC_TOWER_LINK is any Battle Tower mode - call_if_le VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_TOWER_LINK, BattleFrontier_Lounge2_EventScript_BattleTowerNews -@ >= FRONTIER_MANIAC_DOME is any facility other than Battle Tower - call_if_ge VAR_FRONTIER_MANIAC_FACILITY, FRONTIER_MANIAC_DOME, BattleFrontier_Lounge2_EventScript_FacilityNews + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 0, BattleFrontier_Lounge2_EventScript_BufferSingle + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 1, BattleFrontier_Lounge2_EventScript_BufferDouble + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 2, BattleFrontier_Lounge2_EventScript_BufferMulti + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 3, BattleFrontier_Lounge2_EventScript_BufferMultiLink + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 4, BattleFrontier_Lounge2_EventScript_BufferBattleDome + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 5, BattleFrontier_Lounge2_EventScript_BufferBattleFactory + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 6, BattleFrontier_Lounge2_EventScript_BufferBattlePalace + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 7, BattleFrontier_Lounge2_EventScript_BufferBattleArena + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 8, BattleFrontier_Lounge2_EventScript_BufferBattlePike + call_if_eq VAR_FRONTIER_MANIAC_FACILITY, 9, BattleFrontier_Lounge2_EventScript_BufferBattlePyramid + call_if_le VAR_FRONTIER_MANIAC_FACILITY, 3, BattleFrontier_Lounge2_EventScript_BattleTowerNews + call_if_ge VAR_FRONTIER_MANIAC_FACILITY, 4, BattleFrontier_Lounge2_EventScript_FacilityNews special ShowFrontierManiacMessage waitmessage waitbuttonpress diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/map.json b/data/maps/LittlerootTown_ProfessorBirchsLab/map.json index deee3e264..c7bf196ef 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/map.json +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/map.json @@ -91,6 +91,19 @@ "trainer_sight_or_berry_tree_id": "0", "script": "LittlerootTown_ProfessorBirchsLab_EventScript_Chikorita", "flag": "FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_POKEBALL_CHIKORITA" + }, + { + "graphics_id": "OBJ_EVENT_GFX_VAR_1", + "x": 6, + "y": 6, + "elevation": 3, + "movement_type": "MOVEMENT_TYPE_NONE", + "movement_range_x": 0, + "movement_range_y": 0, + "trainer_type": "TRAINER_TYPE_NONE", + "trainer_sight_or_berry_tree_id": "0", + "script": "NULL", + "flag": "FLAG_UNUSED_0x020" } ], "warp_events": [ diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index 3026b0708..efa55aabb 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -29,6 +29,7 @@ LittlerootTown_ProfessorBirchsLab_MapScripts:: LittlerootTown_ProfessorBirchsLab_OnTransition: call Common_EventScript_SetupRivalGfxId call ProfBirch_EventScript_UpdateLocation + setflag FLAG_UNUSED_0x020 goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_SetAfterJohtoStarterLayout goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4, LittlerootTown_ProfessorBirchsLab_EventScript_SetJohtoStarterLayout goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3, LittlerootTown_ProfessorBirchsLab_EventScript_CheckReadyForJohtoStarter diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index 2dd001a3b..8989883e4 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -157,7 +157,7 @@ TrainerHill_Entrance_EventScript_ChooseChallenge:: switch VAR_RESULT case 4, TrainerHill_Entrance_EventScript_CancelEntry case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_CancelEntry - trainerhill_setmode VAR_RESULT + trainerhill_settag VAR_RESULT setvar VAR_TRAINER_HILL_IS_ACTIVE, 1 setvar VAR_TEMP_5, 0 special HealPlayerParty diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 51b7f966e..7d52b8c8d 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -227,6 +227,10 @@ gScriptCmdTable:: .4byte ScrCmd_warpwhitefade @ 0xe0 .4byte ScrCmd_buffercontestname @ 0xe1 .4byte ScrCmd_bufferitemnameplural @ 0xe2 + .4byte ScrCmd_setfollower @ 0xe3 + .4byte ScrCmd_destroyfollower @ 0xe4 + .4byte ScrCmd_facefollower @ 0xe5 + .4byte ScrCmd_checkfollower @ 0xe6 gScriptCmdTableEnd:: .4byte ScrCmd_nop diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 3e99fc08e..14570cf99 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -287,3 +287,69 @@ EventScript_FailSweetScent:: Text_FailSweetScent: .string "Looks like there's nothing here…$" + +FollowerPositionFixScript:: + setvar 0x8000 0x0 + callnative FollowerTrainerSightingPositionFix + compare VAR_RESULT 0xFFFF + goto_if_eq FollowerPositionFixScriptReturn + call WalkCall + setvar 0x8000 0x1 + callnative FollowerTrainerSightingPositionFix +FollowerPositionFixScriptReturn: + return + +FollowerIntoPlayerScript:: + setvar 0x8000 0x0 + callnative FollowerIntoPlayer + compare VAR_RESULT 0xFFFF + goto_if_eq FollowerPositionFixScriptReturn + setvar 0x8005 0xFE @ follower + call WalkCall + setvar 0x8000 0x1 + callnative FollowerIntoPlayer + return + +WalkCall: + compare VAR_RESULT 0x0 + call_if_eq WalkDownCall + compare VAR_RESULT 0x1 + call_if_eq WalkUpCall + compare VAR_RESULT 0x2 + call_if_eq WalkLeftCall + compare VAR_RESULT 0x3 + call_if_eq WalkRightCall + waitmovement 0x8005 + return + +WalkDownCall: + applymovement 0x8005 WalkDown + return + +WalkUpCall: + applymovement 0x8005 WalkUp + return + +WalkLeftCall: + applymovement 0x8005 WalkLeft + return + +WalkRightCall: + applymovement 0x8005 WalkRight + return + +WalkDown: + walk_down + step_end + +WalkUp: + walk_up + step_end + +WalkLeft: + walk_left + step_end + +WalkRight: + walk_right + step_end diff --git a/data/scripts/gift_altering_cave.inc b/data/scripts/gift_altering_cave.inc index 0ea69aac0..65ff87068 100644 --- a/data/scripts/gift_altering_cave.inc +++ b/data/scripts/gift_altering_cave.inc @@ -12,7 +12,7 @@ MysteryGiftScript_AlteringCave_: release end -sText_MysteryGiftAlteringCave: +sText_MysteryGiftAlteringCave:: .string "Thank you for using the MYSTERY\n" .string "GIFT System.\p" .string "There appears to be a rumor about\n" diff --git a/data/text/contest_strings.inc b/data/text/contest_strings.inc index 948c19922..e57e76a52 100644 --- a/data/text/contest_strings.inc +++ b/data/text/contest_strings.inc @@ -4,192 +4,145 @@ gText_HighlyAppealingMove:: .string "A highly appealing move.$" gText_UserMoreEasilyStartled:: - .string "After this move, the user is\n" - .string "more easily startled.$" + .string "After this move, the user is\nmore easily startled.$" gText_GreatAppealButNoMoreToEnd:: - .string "Makes a great appeal, but\n" - .string "allows no more to the end.$" + .string "Makes a great appeal, but\nallows no more to the end.$" gText_UsedRepeatedlyWithoutBoringJudge:: - .string "Can be repeatedly used\n" - .string "without boring the JUDGE.$" + .string "Can be repeatedly used\nwithout boring the JUDGE.$" gText_AvoidStartledByOthersOnce:: - .string "Can avoid being startled\n" - .string "by others once.$" + .string "Can avoid being startled\nby others once.$" gText_AvoidStartledByOthers:: - .string "Can avoid being startled\n" - .string "by others.$" + .string "Can avoid being startled\nby others.$" gText_AvoidStartledByOthersLittle:: - .string "Can avoid being startled\n" - .string "by others a little.$" + .string "Can avoid being startled\nby others a little.$" gText_UserLessLikelyStartled:: - .string "After this move, the user is\n" - .string "less likely to be startled.$" + .string "After this move, the user is\nless likely to be startled.$" gText_SlightlyStartleFrontMon:: - .string "Slightly startles the\n" - .string "POKéMON in front.$" + .string "Slightly startles the\nPOKéMON in front.$" gText_SlightlyStartleAppealed:: - .string "Slightly startles those\n" - .string "that have made appeals.$" + .string "Slightly startles those\nthat have made appeals.$" gText_StartleAppealedBeforeUser:: - .string "Startles the POKéMON that\n" - .string "appealed before the user.$" + .string "Startles the POKéMON that\nappealed before the user.$" gText_StartleAllAppealed:: - .string "Startles all POKéMON that\n" - .string "have done their appeals.$" + .string "Startles all POKéMON that\nhave done their appeals.$" gText_BadlyStartleFrontMon:: - .string "Badly startles the\n" - .string "POKéMON in front.$" + .string "Badly startles the\nPOKéMON in front.$" gText_BadlyStartleAppealed:: - .string "Badly startles those that\n" - .string "have made appeals.$" + .string "Badly startles those that\nhave made appeals.$" gText_StartleAppealedBeforeUser2:: - .string "Startles the POKéMON that\n" - .string "appealed before the user.$" + .string "Startles the POKéMON that\nappealed before the user.$" gText_StartleAllAppealed2:: - .string "Startles all POKéMON that\n" - .string "have done their appeals.$" + .string "Startles all POKéMON that\nhave done their appeals.$" gText_ShiftJudgesAttentionFromOthers:: - .string "Shifts the JUDGE's\n" - .string "attention from others.$" + .string "Shifts the JUDGE's\nattention from others.$" gText_StartleMonHasJudgesAttention:: - .string "Startles the POKéMON that\n" - .string "has the JUDGE's attention.$" + .string "Startles the POKéMON that\nhas the JUDGE's attention.$" gText_JamOthersMissesTurn:: - .string "Jams the others, and misses\n" - .string "one turn of appeals.$" + .string "Jams the others, and misses\none turn of appeals.$" gText_StartleMonsMadeSameTypeAppeal:: - .string "Startles POKéMON that\n" - .string "made a same-type appeal.$" + .string "Startles POKéMON that\nmade a same-type appeal.$" gText_BadlyStartleCoolAppeals:: - .string "Badly startles POKéMON\n" - .string "that made COOL appeals.$" + .string "Badly startles POKéMON\nthat made COOL appeals.$" gText_BadlyStartleBeautyAppeals:: - .string "Badly startles POKéMON\n" - .string "that made BEAUTY appeals.$" + .string "Badly startles POKéMON\nthat made BEAUTY appeals.$" gText_BadlyStartleCuteAppeals:: - .string "Badly startles POKéMON\n" - .string "that made CUTE appeals.$" + .string "Badly startles POKéMON\nthat made CUTE appeals.$" gText_BadlyStartleSmartAppeals:: - .string "Badly startles POKéMON\n" - .string "that made SMART appeals.$" + .string "Badly startles POKéMON\nthat made SMART appeals.$" gText_BadlyStartleToughAppeals:: - .string "Badly startles POKéMON\n" - .string "that made TOUGH appeals.$" + .string "Badly startles POKéMON\nthat made TOUGH appeals.$" gText_MakeMonAfterUserNervous:: - .string "Makes one POKéMON after\n" - .string "the user nervous.$" + .string "Makes one POKéMON after\nthe user nervous.$" gText_MakeAllMonsAfterUserNervous:: - .string "Makes all POKéMON after\n" - .string "the user nervous.$" + .string "Makes all POKéMON after\nthe user nervous.$" gText_WorsenConditionOfThoseMadeAppeals:: - .string "Worsens the condition of\n" - .string "those that made appeals.$" + .string "Worsens the condition of\nthose that made appeals.$" gText_BadlyStartleMonsGoodCondition:: - .string "Badly startles POKéMON in\n" - .string "good condition.$" + .string "Badly startles POKéMON in\ngood condition.$" gText_AppealGreatIfPerformedFirst:: - .string "The appeal works great if\n" - .string "performed first.$" + .string "The appeal works great if\nperformed first.$" gText_AppealGreatIfPerformedLast:: - .string "The appeal works great if\n" - .string "performed last.$" + .string "The appeal works great if\nperformed last.$" gText_AppealAsGoodAsThoseBeforeIt:: - .string "Makes the appeal as good\n" - .string "as those before it.$" + .string "Makes the appeal as good\nas those before it.$" gText_AppealAsGoodAsOneBeforeIt:: - .string "Makes the appeal as good\n" - .string "as the one before it.$" + .string "Makes the appeal as good\nas the one before it.$" gText_AppealBetterLaterItsPerformed:: - .string "The appeal works better\n" - .string "the later it is performed.$" + .string "The appeal works better\nthe later it is performed.$" gText_AppealVariesDependingOnTiming:: - .string "The appeal's quality varies\n" - .string "depending on its timing.$" + .string "The appeal's quality varies\ndepending on its timing.$" gText_WorksWellIfSameTypeAsBefore:: - .string "Works well if it's the same\n" - .string "type as the one before.$" + .string "Works well if it's the same\ntype as the one before.$" gText_WorksWellIfDifferentTypeAsBefore:: - .string "Works well if different in\n" - .string "type than the one before.$" + .string "Works well if different in\ntype than the one before.$" gText_AffectedByAppealInFront:: - .string "Affected by how well the\n" - .string "appeal in front goes.$" + .string "Affected by how well the\nappeal in front goes.$" gText_UpsConditionHelpsPreventNervousness:: - .string "Ups the user's condition.\n" - .string "Helps prevent nervousness.$" + .string "Ups the user's condition.\nHelps prevent nervousness.$" gText_AppealWorksWellIfConditionGood:: - .string "The appeal works well if the\n" - .string "user's condition is good.$" + .string "The appeal works well if the\nuser's condition is good.$" gText_NextAppealMadeEarlier:: - .string "The next appeal can be\n" - .string "made earlier next turn.$" + .string "The next appeal can be\nmade earlier next turn.$" gText_NextAppealMadeLater:: - .string "The next appeal can be\n" - .string "made later next turn.$" + .string "The next appeal can be\nmade later next turn.$" gText_TurnOrderMoreEasilyScrambled:: - .string "Makes the next turn's order\n" - .string "more easily scrambled.$" + .string "Makes the next turn's order\nmore easily scrambled.$" gText_ScrambleOrderOfNextAppeals:: - .string "Scrambles the order of\n" - .string "appeals on the next turn.$" + .string "Scrambles the order of\nappeals on the next turn.$" gText_AppealExcitesAudienceInAnyContest:: - .string "An appeal that excites the\n" - .string "audience in any CONTEST.$" + .string "An appeal that excites the\naudience in any CONTEST.$" gText_BadlyStartlesMonsGoodAppeals:: - .string "Badly startles all POKéMON\n" - .string "that made good appeals.$" + .string "Badly startles all POKéMON\nthat made good appeals.$" gText_AppealBestMoreCrowdExcited:: - .string "The appeal works best the\n" - .string "more the crowd is excited.$" + .string "The appeal works best the\nmore the crowd is excited.$" gText_TemporarilyStopCrowdExcited:: - .string "Temporarily stops the\n" - .string "crowd from growing excited.$" + .string "Temporarily stops the\ncrowd from growing excited.$" @ Unused move names diff --git a/data/text/pc_transfer.inc b/data/text/pc_transfer.inc index 3fa255340..53a82c8f1 100644 --- a/data/text/pc_transfer.inc +++ b/data/text/pc_transfer.inc @@ -5,8 +5,7 @@ gText_PkmnTransferredSomeonesPC:: .string "BOX “{STR_VAR_1}.â€�$" gText_PkmnTransferredLanettesPC:: - .string "{STR_VAR_2} was transferred to\n" - .string "LANETTE'S PC.\p" + .string "{STR_VAR_2} was transferred to\nLANETTE'S PC.\p" .string "It was placed in \n" .string "BOX “{STR_VAR_1}.â€�$" diff --git a/data/text/pokedex_rating.inc b/data/text/pokedex_rating.inc index 175aaccc6..fcb26bc7d 100644 --- a/data/text/pokedex_rating.inc +++ b/data/text/pokedex_rating.inc @@ -3,7 +3,7 @@ gBirchDexRatingText_AreYouCurious:: .string "Are you curious about how your\n" .string "POKéDEX is coming along?$" -gBirchDexRatingText_Cancel:: +gBirchDexRatingText_Cancel: .string "Hm? Oh, you haven't caught enough\n" .string "POKéMON to make it worthwhile.$" diff --git a/data/text/surf.inc b/data/text/surf.inc index 13854f7aa..453a3d5b1 100644 --- a/data/text/surf.inc +++ b/data/text/surf.inc @@ -1,6 +1,5 @@ gText_WantToUseSurf:: - .string "The water is dyed a deep blue…\n" - .string "Would you like to SURF?$" + .string "The water is dyed a deep blue…\nWould you like to SURF?$" gText_PlayerUsedSurf:: .string "{STR_VAR_1} used SURF!$" diff --git a/data/text/tv.inc b/data/text/tv.inc index 6cfc289d2..68b842158 100644 --- a/data/text/tv.inc +++ b/data/text/tv.inc @@ -166,7 +166,7 @@ BattleFrontier_BattleTowerLobby_Text_LookingForwardToNextBattle:: .string "I'll be looking forward to your\n" .string "next battle!$" -BravoTrainerBattleTower_Text_Intro:: +gTVBravoTrainerBattleTowerText00:: .string "Yeah!\n" .string "It's BRAVO TRAINER time!\p" .string "Today, we're going to profile {STR_VAR_1},\n" @@ -174,12 +174,12 @@ BravoTrainerBattleTower_Text_Intro:: .string "For the challenge, {STR_VAR_1} entered\n" .string "one wicked {STR_VAR_2}.$" -BravoTrainerBattleTower_Text_NewRecord:: +gTVBravoTrainerBattleTowerText01:: .string "The pair set a new record of {STR_VAR_2} wins\n" .string "in a row in {STR_VAR_1} competition!\l" .string "Bravo, TRAINER!$" -BravoTrainerBattleTower_Text_Lost:: +gTVBravoTrainerBattleTowerText02:: .string "The twosome finally succumbed to\n" .string "{STR_VAR_1} in match number {STR_VAR_2}.\l" .string "Nice try, TRAINER!\p" @@ -188,7 +188,7 @@ BravoTrainerBattleTower_Text_Lost:: .string "We asked the TRAINER for impressions\n" .string "on the match with {STR_VAR_1}.$" -BravoTrainerBattleTower_Text_Won:: +gTVBravoTrainerBattleTowerText03:: .string "The twosome won it all by defeating\n" .string "{STR_VAR_1}'s {STR_VAR_2} thoroughly.\l" .string "Bravo, TRAINER!\p" @@ -197,7 +197,7 @@ BravoTrainerBattleTower_Text_Won:: .string "We asked the TRAINER for impressions\n" .string "on the moment of glory.$" -BravoTrainerBattleTower_Text_LostFinal:: +gTVBravoTrainerBattleTowerText04:: .string "After a string of wins, the pair finally\n" .string "succumbed to {STR_VAR_1}'s {STR_VAR_2},\l" .string "their final hurdle.\p" @@ -208,7 +208,7 @@ BravoTrainerBattleTower_Text_LostFinal:: .string "We asked the TRAINER for impressions\n" .string "on battling the celebrity pair.$" -BravoTrainerBattleTower_Text_Satisfied:: +gTVBravoTrainerBattleTowerText05:: .string "This is what the TRAINER had to say:\n" .string "“I'm satisfied!â€�\p" .string "Now isn't that a refreshing reply?\n" @@ -218,7 +218,7 @@ BravoTrainerBattleTower_Text_Satisfied:: .string "I found out exactly how satisfied\n" .string "when I heard the TRAINER say this:$" -BravoTrainerBattleTower_Text_Unsatisfied:: +gTVBravoTrainerBattleTowerText06:: .string "This is what the TRAINER had to say:\n" .string "“I'm not satisfied…â€�\p" .string "Our TRAINER was obviously a little down\n" @@ -228,22 +228,22 @@ BravoTrainerBattleTower_Text_Unsatisfied:: .string "Anyway, I found out how dissatisfied\n" .string "our TRAINER was when I heard this:$" -BravoTrainerBattleTower_Text_None1:: +gTVBravoTrainerBattleTowerText07:: .string "None$" -BravoTrainerBattleTower_Text_None2:: +gTVBravoTrainerBattleTowerText08:: .string "None$" -BravoTrainerBattleTower_Text_None3:: +gTVBravoTrainerBattleTowerText09:: .string "None$" -BravoTrainerBattleTower_Text_None4:: +gTVBravoTrainerBattleTowerText10:: .string "None$" -BravoTrainerBattleTower_Text_Response:: +gTVBravoTrainerBattleTowerText11:: .string "“{STR_VAR_1}.â€�$" -BravoTrainerBattleTower_Text_ResponseSatisfied:: +gTVBravoTrainerBattleTowerText12:: .string "“{STR_VAR_1}.â€�\n" .string "Now isn't that great?\p" .string "It really expresses {STR_VAR_2}'s joy,\n" @@ -252,7 +252,7 @@ BravoTrainerBattleTower_Text_ResponseSatisfied:: .string "end… It really was what you'd call\l" .string "“{STR_VAR_1}â€�!$" -BravoTrainerBattleTower_Text_ResponseUnsatisfied:: +gTVBravoTrainerBattleTowerText13:: .string "“{STR_VAR_1}.â€�\n" .string "Now isn't that fitting?\p" .string "That battle with {STR_VAR_3} at the\n" @@ -261,7 +261,7 @@ BravoTrainerBattleTower_Text_ResponseUnsatisfied:: .string "{STR_VAR_2}'s disappointment comes across\n" .string "loud and clear, I'd say!$" -BravoTrainerBattleTower_Text_Outro:: +gTVBravoTrainerBattleTowerText14:: .string "Bravo, {STR_VAR_1}!\n" .string "Bravo, {STR_VAR_2}!\p" .string "I hope we can count on seeing\n" diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md new file mode 100644 index 000000000..ce06c1489 --- /dev/null +++ b/docs/bugs_and_glitches.md @@ -0,0 +1,51 @@ + +# Bugs and Glitches + +These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` and `UBFIX` preprocessor variables will fix some of these automatically. `UBFIX` will already be defined for MODERN builds. + +Fixes are written in the `diff` format. If you've used Git before, this should look familiar: + +```diff + this is some code +-delete red - lines ++add green + lines +``` + +## Contents + +- [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker) + + +## Scrolling through items in the bag causes the image to flicker + +**Fix:** Add the following function to [src/item_menu_icons.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu_icons.c): +```diff ++void HideBagItemIconSprite(u8 id) ++{ ++ u8 *spriteId = &gBagMenu->spriteId[10]; ++ if (spriteId[id] != 0xFF) ++ { ++ gSprites[spriteId[id]].invisible = TRUE; ++ } ++} + +``` + +and its corresponding declaration in [include/item_menu_icons.h](https://github.com/pret/pokeemerald/blob/master/include/item_menu_icons.h): + +```diff ++void HideBagItemIconSprite(u8 id); + +``` + +Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu.c): + +```diff + ... +{ +- RemoveBagItemIconSprite(1 ^ gBagMenu->itemIconSlot); ++ HideBagItemIconSprite(gBagMenu->itemIconSlot ^ 1); ++ RemoveBagItemIconSprite(gBagMenu->itemIconSlot); + if (itemIndex != LIST_CANCEL) + ... +``` diff --git a/gflib/bg.h b/gflib/bg.h index 02ff07369..d8b5a5404 100644 --- a/gflib/bg.h +++ b/gflib/bg.h @@ -76,7 +76,7 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op); s32 ChangeBgY_ScreenOff(u8 bg, s32 value, u8 op); s32 GetBgY(u8 bg); void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle); -u8 Unused_AdjustBgMosaic(u8 val, u8 mode); +u8 Unused_AdjustBgMosaic(u8 a1, u8 a2); void SetBgTilemapBuffer(u8 bg, void *tilemap); void UnsetBgTilemapBuffer(u8 bg); void* GetBgTilemapBuffer(u8 bg); diff --git a/gflib/sprite.c b/gflib/sprite.c index 6ba366105..411e7d3b8 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -96,7 +96,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC static u8 IndexOfSpriteTileTag(u16 tag); static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset); -static void UpdateSpriteMatrixAnchorPos(struct Sprite*, s32, s32); +static void UpdateSpriteMatrixAnchorPos(struct Sprite* sprite, s32 a1, s32 a2); typedef void (*AnimFunc)(struct Sprite *); typedef void (*AnimCmdFunc)(struct Sprite *); @@ -634,11 +634,14 @@ void DestroySprite(struct Sprite *sprite) } } -void ResetOamRange(u8 start, u8 end) +void ResetOamRange(u8 a, u8 b) { u8 i; - for (i = start; i < end; i++) + + for (i = a; i < b; i++) + { gMain.oamBuffer[i] = *(struct OamData *)&gDummyOamData; + } } void LoadOam(void) @@ -1045,7 +1048,7 @@ void AnimCmd_frame(struct Sprite *sprite) else sprite->y2 = -1; } - + if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) SetSpriteOamFlipBits(sprite, hFlip, vFlip); diff --git a/gflib/sprite.h b/gflib/sprite.h index f7ef16532..e53737981 100644 --- a/gflib/sprite.h +++ b/gflib/sprite.h @@ -270,7 +270,7 @@ u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 sub u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)); u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); void DestroySprite(struct Sprite *sprite); -void ResetOamRange(u8 start, u8 end); +void ResetOamRange(u8 a, u8 b); void LoadOam(void); void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d); void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode); diff --git a/gflib/text.c b/gflib/text.c index c400c0582..557c11704 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -326,14 +326,14 @@ void RunTextPrinters(void) { if (sTextPrinters[i].active) { - u16 renderCmd = RenderFont(&sTextPrinters[i]); - switch (renderCmd) + u16 temp = RenderFont(&sTextPrinters[i]); + switch (temp) { case RENDER_PRINT: CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX); case RENDER_UPDATE: - if (sTextPrinters[i].callback != NULL) - sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, renderCmd); + if (sTextPrinters[i].callback != 0) + sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, temp); break; case RENDER_FINISH: sTextPrinters[i].active = FALSE; diff --git a/graphics/door_anims/abandoned_ship.png b/graphics/door_anims/abandoned_ship.png index 0030246b4e08aace30276066cf61d1510e8c2712..e46aca9ba94b1b66552d49666d925b87b1dfea1d 100644 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0IEi7Q8@egp~$Bq#cnfoLFB0AesmJ-~bw$k^lQ;uxZF ze(wc)u0sYQ$3L3yvJ%-<#qj=;Im<4W4{DKIw%y?$WSUNEyJ(bno=f=mXHi6^V?h1o zcAv_4tK=_za*KtxvGuzegnOxL++*r$^uDb6VsB+DYhL>|t}nH0;xdf++!d^*1~Yw| zcqT7oP!D8O3Y4|<{G@V2c>jyXYgd^ZD1LEA{lJ+G)eGhxu46F2CTV2C`S4d~(EJMr zp4dI)tWD9VeUe}MNPoIvo#?}DJd81o4C@>i!W9k_&9~0m?BaiY#VIkMKU7OxBT7;d zOH!?pi&B9UgOP!efv$m}u90DgfvJ_TrInG1wt<0_fkFNZD=!ocx%nxXX_dG&$Q^C^ P1`0AyS3j3^P6mg{ds5z{VzjjXtgJcz|6;*#<;nm60KG{>K~yM_z0ffV!Y~xZ@mwKU z3Izjsi{LrDf@djo$xQ^a6f&fD@c^!c4z7;%CHbOQX+coG>3>J2yua9E;vEep4%iwb z77@beU4jo+zz1O0w+ZfSU!j4`soMfglMxDzfYb$H1p`poTLPKNP7Fm+45Fx3C`yuo zuqS@eM`}MhAk5)%ABLUb@<2C-{s5{TGRX7^e0?>gKHR|OKKz6}WJ(|UTc7yLWz=5< o-*YzyJUM07*qoM6N<$f`l}GNB{r; diff --git a/graphics/door_anims/abandoned_ship_room.png b/graphics/door_anims/abandoned_ship_room.png index 006922f5b64cacc6320f0ff81a541ef4db6bda8a..a5284af7e17391f3c87f3ac1b4d8a5587d8b7833 100644 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0IEJ?T1z44{xea-v@uhz4Q>AO?ff1I$-}jNP6tjv*T7 z_g*mMI%FVn>|@V5zSebe2X=qqZPXLo<2lV~{ewuG_6MK11i4}-8UL766R5LIVa5F~ z%E9;Izs|5q&bCO*7udkD$ZIx>Z?uDOLFO)&&D+-(9C&*nu5sV_1x?BVF^p>$u&M3# ze2}=w>w%@$0hz0s=RF+_za7#4#j;$R`GSnvcflKyW&B%;ckn+rZq?kb=D2Qt$SY;u zoOjCpFAh7uJY4@;xPE8P$JG;V8%ca%<@v$HR>R1Ay7t|SC`b9FGq;HYy`fs-8c~vx zSdwa$T$Bo=7>o>z40H_)b&U)|3{0(zEv-zmg{ds5z{VzjjXtgJcz|6;*#<;nm60K7>=K~yM_z0ffV!Y~xZ@mwKU z3Izjsi{Lpti&rRg$xQ^a6f&fD@c^!c4z7;%CHbOQY(Y@J>3>J2yuWBLvB%bMz}`S& z5h0A;CHQa!d;oTRo8Zp&6&l!_x-HN&8KK|^NL>(CFaVXkC6KA?#84E)Ac|^*q9iE@ zd*T;;r1ql&!W=I5Vb~ci4|H?r51{HHgG`^m*H=^O!wqci!%yf#ru3n|^@+b+M*UUr nZ5afp0s>S40UD}+faN}SsrPV&9*H$8=og>^lXcknxhr8iYIoJXtCIo$u3tkA4@9dF7a6T zL+DfTf%-T6XIKM|@+2wnM_gxly~;qyRFWl7WZU}CuR9NJ zbqyiHjpp*@4gMU@ghNg~uk0(Vyez!$SVj7!2%#qtMt{0g!1AZLTaov#h6ul|nz!6^7JBH+@Ady{}6rCQ<|QIe8al4_M)lnSI6 zj0}tnbPWu3jSNE!Osz}|tPBjb4S=M}I6;98E>g5EdT|jb2ya<8tgxIhE#{_{P+DQPOZ*6@W8T4sueFI*k ztz}~nB19rN&WESZw}vUTD_DC~=61PPQz4-l+UKK>+}oo zQ-TkM5Ywn3>T@~+VyEkLV?+$|0OPVE_S+20+9KBd2B{{3U_S8xAMee_tCG)Gk diff --git a/graphics/door_anims/battle_arena_lobby.png b/graphics/door_anims/battle_arena_lobby.png index 78c344070c9ba1d73e04803ff65511032ae2e95f..b9a2134e3f5707da95b9ac9a468f925387391343 100644 GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0G`zU3V@`9L9o z_or>@kMQJPl*E4e$*Z0PdoSnZen04>ANu@o{{JujTYzp?Epd$~Nl7e8wMs5Z1yT$~ z21W+D28Oyuh9L%~Rwf2kh9=qu237_JCYH<(P&DM`r(~v8;@04rvO5N-fx*+&&t;uc GLK6T^XOOG_ delta 277 zcmV+w0qXvk1Em6x8Gi!+008Fy?~?!k05DKYR7L*)|58$Fl$4~+y~Y3k|Gm{}oW)9N zq$&TjbJc@VtWq)V=A_=ugVnTZ&74yI-h)^*Xukje0I*3!K~yM_y^z5X!XOkxY2gnX zwThnxoTNBgumxN2l(SqYfL`3s|A5Ib9yH@#@@83>?7F+jU4KoV;AZO3t`pHB`Uk|g zD&$0$u!nsn(^P?{3e1|BK@2A?1;~V>=R@QU+=nP=i(lXrq4Cif#R|llQHP{5hUxI0 zfs@G_B+m`lGG!kq%$t3n!}pPw?Hj&?vQJ#c8EvmWk7lxuSV0S-Vh79k>WrYh({63| b!9p+WZ#l8r2o9sd00000NkvXXu0mjf|I3L( diff --git a/graphics/door_anims/battle_dome.png b/graphics/door_anims/battle_dome.png index 4bc9fab94b53c414908c14401b996d133fb93213..729385b3fc7063eb1f781ecfe03d58bd183868e3 100644 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0G`t2Ubxw}3(d$%%etAR34jfEWx?4=`T^G8TEdIEHAP zKYQUICzGK7>xE3ks!uOU6vC3-BlG22&g@{dxO{Mv=#8nLeO+wcI@$bCJkzW)p~h-k zfcmylxenp9q$EGVw60c_NxaYEGWH~7e_v2I>4dJq{Gxs5WF@=~|Gc;0+Jk)zs{@P# z%LP@{!byW>wLzl8$j2pmbgZgq$HN4S|t~y0x1R~10w@n14CUS!w>^gD-#1N pQwwba11kfA^2_OYC>nC}Q!>*kacf}fyMGB3FrKb{F6*2UngECmgDU_4 delta 262 zcmV+h0r~!l1D67j8Gi!+008Fy?~?!k05DKYR7DsmQvd(|-sbMT&E}l6-h+dSVq$wi zN@^)FT64YjVyy1}y@T$QbKYuV%|TLg#iX8JIZ6Nk0HR4mK~yM_&CtOK0x=K;(5cD_ zmhE810@j%Y58g~VvKq02c=V*H!TC-^Jncd}_#w=LB#?YMw|`J4?lCV^DrPNIO7)aN zzK}}xz`Pnw2W;IoG>zujIfhft`=JAAZa8imR2rBUAOR&YV>VM_!NZh$Yx!9}WA>~@ zGMfX;0cDnNuxBMCfPQfOkNUA!95eo&7J##W;XAmcfOJCw`oX)OCqy=@mZ6Cva{vGU M07*qoM6N<$f<&Tr>;M1& diff --git a/graphics/door_anims/battle_dome_corridor.png b/graphics/door_anims/battle_dome_corridor.png index 78e77869ea6752f126873b250962606ec13f34b9..198ad9acca356dd0b5025adcdb576b26ba046fd1 100644 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0Hx{*zN|cL0S1k`w*PKr|3505KS(9$>x-WIXe9aSYKo zzxKjL!Da&<)_}DWM2)y}uLNG&#a*0YamqnGe2#T?+Y4oRrRgnNS{JMZPSjiqE6Ehy zv5l+7?pFN#Wu8~{3e}eeZe3E+wog9f`9A)VyS`s%zvJ}F{gUcHd%r?$lZR>^fr z)26It*l_xhqeDx`1aF3q3JOkICsaTDuh}DSXHlh}E+JF=;8_LRjg3L2PxKR9rOXch zYhJzfM!<`>#yuAvY>3@-)o1bI3070&`i}RBdrCe&V)cus4d`Rl64!{5l*E!$tK_0o zAjM#0U}T_cV5n*WnyS$XsT^sU}a!X+moDyq9HdwB{QuOw+5bzx37T$*VEO{ JWt~$(69C{dqW=H@ delta 309 zcmV-50m}Z)1KR?S8Gi!+008Fy?~?!k05DKYR7L*)|58$Fl$4~+y~Y3k|K8Q+d#sC# z&8(d6&5NA0oV3NP&DFgr5Z+24|6(!!-h;|31}*>q0Om%y|M?OR@geoe~I}pfx;#Tx(6=Ha{3Vc7>ULS^m*)DOX z){!~adWLzPnEQDSEX#xWx-5GrbGITfmmknnd`3k8TOs1R?jjf8CDL{|wi!FF2+q7= zXhr|a2kj%D5iQppTl9sj2A1n-P-zMn`h8&jt9j#M>Sf_O zUu3R%w2sO8Y(}EB+vTLYA7{HI-tE~CK5w1f?fC^FZsK!4@0_}@FX_|^QL`q=L#EEs zcU0Ye9WwZ^{BVQ)o&JZ)FSx|!397S(IZXDNttP7R=E?)FK#IZ0z{o(?z);u7FvP&r%EZvh*izfTz{x~Hq3%Q~loCIA+?tFr(A delta 358 zcmV-s0h#{h1NH)t8Gi!+008Fy?~?!k05DKYR7L*)|58$Fl$4~+y~Y3k|K8Q+d#sC# z&8(d6&5NA0oV3NP&DFgr5Z+24|6(!!-h;|31}*>q0Rc%wK~yM_z0f^Q12GT<;CBT( zijWm3Y$_V01R9c(Tp%U!DX8`w=BIF-q}dL6x7v!Hh6B)W0DsQFjAtbyVWmR6#-C)5 zta(_EK?PSiYutY2T;o#kiL;NK_kz>6oL8tZh>?#NE4ULpW7`I$bbEl`XY}wLW9YH! z_|1^88b$_|vAT)$&*U1U^ix zU~3urP~Zi$sb5UfrhkY(@&7o zRIm|Dk6|vD6jUCYNC^a4kfsDQ<#K9R2+j+%!2a&%8>gJ=K|q%GkN^Mx07*qoM6N<$ Eg75LGzW@LL diff --git a/graphics/door_anims/battle_factory.png b/graphics/door_anims/battle_factory.png index 1d74d8b58076856ad87d26e8ece5299f0ce5747c..7ed6c876b89fcf6701668add452862a571c62fec 100644 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0HR`Tu-%@<1VhtT-`M>4Be@h*jZkp~0#Sb3O*?Ii5pHm!(lynfn%?Z#_|^Ts9XST1gE z;OWp#Q?R+gXjtjda-K`zs%wmbz~k~Hi4ZP%hEsp~zfJS|tOInBYKdz^NlIc#s#S7P zDv)9@GB7gGH89jQG7K>=wK6fXGB(sUFt9Q(P`LP;9YsTKeoAIqC2kFYJLkH5R->Q_=JO~ kQsM%E7{3$4pi=k%0C!q#D)xyq5dZ)H07*qoM6N<$f=U2l%>V!Z diff --git a/graphics/door_anims/battle_frontier.png b/graphics/door_anims/battle_frontier.png index c3dcd43245a92365967b8d3a178f97dae2bc0781..bf758c03edef025ead3128936560b8353c195447 100644 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0HRgOK~qZa^V{nh_rEHD^&M-s%LqarEi$r zi`zLe3(ro7NN2wIY;%vtM2573xjo^BBMJkL>{e>hwtnb(uew$Hg!_UM=XY{t6fjL$ zQq&zdaq>b14;vlBC*5{ji~mSvsiy&(F4{*A4|A z4f_3XbP0l+XkKzsQrc delta 290 zcmV+-0p0$k1F`~;8Gi!+008Fy?~?!k05DKYR7DsmQvd(|-sbMT&E}l6-h+dSVq$wi zN@^)FT64YjVyy1}y@T$QbKYuV%|TLg#iX8JIZ6Nk0KG{>K~yM_#n7=4!ypU=Q16sJ zTPRF`e92uXQRhK2f@jGJZquO|f{-8%@j0bcy*mW=`2*VwJAZiEY#foz;6Y~tX!BVn z3K*D2!EMI7VXk;6@Tx#gWhb7(vMh>JkdIiApGy_okOU-2U!d*shIxLONL6|VLJQ|o8^>Bk+{&pOXP$n64o oQ)}trd+6ua@Ebk!1a|s?H@mc}+g#W~-2eap07*qoM6N<$g45WB+W-In diff --git a/graphics/door_anims/battle_frontier_sliding.png b/graphics/door_anims/battle_frontier_sliding.png index 1359f4725b8d6061a5088ffd6efa5677705df3eb..a43cf519dda91ceaa86aa2b89c4b73e978aabc88 100644 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0I6<&#y$H-SO|$%%etAR34jfEWx?4=`T^GUj=@IEHAP zzj|RKZ?l02OThXGq7jXe6E+2?EN+qe&$(u{f)ICrfrC_8W4^r7KhG71MPGQfJKB{e z-eJso=KWMM-0=75`5b31mVYVCo|WCW!LdV3Ea@WC_r!{Qjt$36dabXq-L=_&YQK6z z;r|`|-|wV5bJ%`&e4-ucvYrMLXY>mdKI;Vst06Rr|u>b%7 delta 260 zcmV+f0sH=j1C;`h8Gi!+008Fy?~?!k05DKYR7DsmQvd(|-sbMT&E}l6-h+dSVq$wi zN@^)FT64YjVyy1}y@T$QbKYuV%|TLg#iX8JIZ6Nk0H8@kK~yM_)zGmGgD?~XP|re> z0Vr4iDHEJL!8d&pVTpwzF-um+3Yj5%`w;O@aEo#UdeUK#&wafZSHXk%QANf*neF9o z1g7>KeN6LwFA!D;F~UMDM&Q=>=MM;QZQE|c(%{lGr}FO!U~01*woi=QXGI7D_krgu z7Gj~7_uMB#6x=648~A_R$3PDad7tG%c@_h)NKFB;$W1!6x6d0NH`N|xMv)c(0000< KMNUMnLSTY0w{xNZ diff --git a/graphics/door_anims/battle_palace_lobby.png b/graphics/door_anims/battle_palace_lobby.png index a4aa998d46eeb4322e164473076d799205e5b7ca..f106ae960d99172907dbf1fa3ca61e9ecb42222c 100644 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0I63upOXra&QqxVj{_jU(+AI`l!<9bnreee;lUovJh%iYdA?60$P`FbOh z{TY7|&`+u*t`Q|Ei6yC4$wjF^iowXh$UxV?P}j&X#K6?b#MsKzOxwV~%D~{v?d1k2 c8glbfGSez?YuMW+-vbIhPgg&ebxsLQ00^m%=>Px# delta 303 zcmV+~0nq-i1HS^08Gi!+008Fy?~?!k05DKYR7C&)08&zFl$4~+y~Y3k{{R30ltE&o zVuQVlq|LM`=EYKbDG;PN7|lu`|6(!!-h(7-*tP%w0Ln>3K~yM_t&lMegD?;T_W|Tr zG|=R8G)9Wt(BLL7h{OjhrH$g_2Xtwi=3@I4T!2texN5vwdw+ckBE_tT@KD^^4IJT#s>2cp$KNAu^0pj%yU#fR$$x940nN3ZYX0}%i;aZ5gX}C*k%4RVhKO=^8x)~B)9D+DvSUC002ovPDHLkV1itn BhQ0s* diff --git a/graphics/door_anims/battle_tent.png b/graphics/door_anims/battle_tent.png index b278e33109f5c138e7da2d54e3ef3f1fc3357411..a0a88e4c5fba405715e0b1441841074fbdef9119 100644 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^0zllr0wfq7@kRd!QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`gjG}BTtlYW=Al(AViGF1u8i*Bu7z|PmFkfY0V6^abaSX9I zee}Y{tiuKZY!9ki_cgKiSI#y*If1W@HS^q@yZo**%?+i&%(zN^2&$9M+s;Thi&c$}8rXb6tPamq(` zTskAaXWpsi`cn&bDx71@Tz7u$|1;^CZ_BdcB6t6m3{8G(@bq%jY2i;#)lZ1zK4+Q3 zxLB{@@k<%@BN!DUSN`LE>z+zf9h7V8d;DMS3j3^P68!!QsA;ClrX z8fYOyJ?3pXNFieeopE+skhkbyg909!A;I@H89n$F`V76(sefq;t?5#780!O_Y~2q> zlWGO@Bh}5Q%FU&$%{)w0ipt}MaH-gYsq5uE@ diff --git a/graphics/door_anims/battle_tent_interior.png b/graphics/door_anims/battle_tent_interior.png index 036ec9d5aa4b096c39d5de4533cf7198fa1657dd..f8edb5a1a3c9592994c05bb7f2c0376c4c00c2d9 100644 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^0zllr0wfq7@kRd!QY`6?zK#qG8~eHcB(eheOiAAE zE)4uuMs|yVJoXY#Usv`gjG}BTS_}U0dIE(6k`w*PKr|3505KS(9$>!8z`!Wr>Eak- zaeD71!@R==JgfopT%C{IadX@x#SvKfLRTo@u5O2&L%?SpTi3Q8TW3%2Q0^-RlNLTq zu=kku#Z_X5Sj{!2m8|kxuU)Xq`yHVB;of`yUj{O5sc!_FootxI7W96ZZk6Ovkas!W z>iL1(_3O94Ep_uS-nV?u_Wsht+g9aP@JG!P`}cnDzlHYIi!R^kWxlwfCsx7Bo%Neb zmGfDf!-u{bN^fEBI@h>OJuP>F(vda1n>5pAUwZmDWV&>LtfR``wr7cQ&;IS{++)Ae z{^?tJX0Zj0I~BT8jje1Lnt)xo3(R- zb;D&Lx5HaHCcXBXviXw#kBvUQ@fOjpg&TLW@&W@%wZt`|BqgyV)hf9t6-Y4{85kMp z8W`#t8HN~`Ss9pE8Cz-_7+4t?2piwZM$wR)pOTqYiCaTbUea|?GxOMr+wdN=JT3g+d;LRy&di6o8z<)7GA@zX9~Ck%>kT#Y3=2O5XV4xf#thn?;Iu)C z7@Ri9rig4xmu~l6U2c$dL`44^nulmN_vZug{Ym{P@AMd?Knz3$0nsTYCPd;9reJU* zNazteC+o0$>qx<(yXXEtU*)}j5GAUj?6-$Vb^!S$^oDK`CD)xOXZfG-eVOWRS01*$ Ti^=MU00000NkvXXu0mjf7)Py+ diff --git a/graphics/door_anims/battle_tower.png b/graphics/door_anims/battle_tower.png index 3ec2b59bb62ed5fec08a69ee9c6f0ebd42057227..3b9fe547c1a64d71dfd3477650f8c6946c708c47 100644 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0HB-l(@LE&_!Fk`w*PKr|3505KS(9$>x-WW4rtaSYKo ze{_Ox7n7kt>wVE8hWF8e>G|e6_+2lHXWY@A!dTAtm{G*(oI&W^Z|xjS98t4tmIzh6 zcQ)pgYh2Fg`&sJD>GuV@3(xUApLghu!Fzo(e)Xn>pGPx12d#z`u)=>kM0Ru&=DitF6D?|4zAV z%X~SxDWS?oU`c~nsIBj2p&4?|^bUV9_@0!%rAXa_^~#J_7pHa^*=lht7X4bp{#b3r ze5P9^JhJMmPXTQ@hK~Q_=VM4Em`J(?>uX3{ iLtjJU8qQbX8vX!lNHy}}qa-v@uhz4Q>AO?ff1I$-}j5VGvjv*T7 z&tBZfdssn$H6U$a?~{#2++J!4%#)N_qm7waZFv$n(@qqYYy4QEq2V<#-uA8}cl~N( z_p=8IuFN%VJ>_`dLF0}{?}FQ69IvI09GNe$(|^6Bd8Yr%}aVC#>4_ zZt}-Aj8cfZ}y#_!Q7Xv(7Aq}96QGbla-v@uhz4Q>AO?ff1I$-}jAfoKjv*T7 z_g*mMI&8qh8Zh_T?7ddz9xoKFrcao+z}#T2t;mv#7aXmebyGT=jY~2%(PTcPcT19cJX zM`d~1KK5&zYt@yQSfz6KlH(TMm47$LId7f6M!Me1{$QG=kn4F)(Xs^o^(REXUFJJF zk7>hJ#|gQQ_y7LM@OWxi6Z^MM?m!o-mbgZgq$HN4S|t~y0x1R~10w@n14CUS!w>^g tD-%;I0~2in11kdqxm_o$P&DM`r(~v8;?|J=yr2yfIG(P4F6*2UngCQTf;s>I delta 267 zcmV+m0rdWk1DgVn8Gi!+008Fy?~?!k05DKYR7L*)|58$Fl$4~+y~Y3k|K8Q+|Noo- z?u!7ui*s{>T57a&i^aVu5Z+24|6(!!-hNn{1`nUcKS zT^RVSjO-QzdF&;gzOL*~7)9CG%s-xC76J+hBq#cnfoLFB0AesmJ-~dGfq~J<)5S5w z;`H7td$X7gc^DGx*KV))>brg3&h{5FJQumYh+3s{oLKD3`pr1xlmDzIQ5n+fnwt5W zQzONe->X`2UCy5ATfoxxQ;hfH4cgC(W@|=rZI95qs%ianOF`gzx9wjHiNxW025PT^14vC26hlq(Mytg0oh5hW>!C8<`)MX5lF!N|bK zK-a)f*T^u$z|0DWOpLV+46F4%P)|NsBq)#m^IoB-~N0KJQIbAwuHv~!Eay(tjhN+ADYG5_9!)HKb>0003f zNkl_(H;Cvh*Hqa}$zlHfN z$^vM#t8;0WXn|L2O}7JSR=X|7p;I%<_4f_UOg5HDs5u6VO#})7epi)o@B*Ng100000NkvXX Hu0mjfq_nO+ diff --git a/graphics/door_anims/battle_tower_old.png b/graphics/door_anims/battle_tower_old.png index 326763f56530cd808692751e0599d3bd256d4ab8..645c006138649eaba098c1b9b7eebe930077da46 100644 GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0H>(STWu$ACft$%%etAR34jfEWx?4=`T^G9G!lIEHAP zKRRJACzGQ<>vC4Z?d;M9yN)pNZ4`*y&?K46dndxOX6ucX8Tq{Dim%(+o@J4h_>pk$ zkFDo)&m=D?f8pRurPF3i^7>Msr}$gQHiJ`g>WhP?S6z{rwe!`s%qKVWLd$c1bBbkO z&3h`qv2d#1;Zu!L?cdi$t$K7Tj=gAip|zq=!(>G!8@s0Ci(UBbKen@8zaS^2Qq$dE z%TRZ?UL}RY|AEx)_lIJ0G-4+T7~MI_R^tDF`7V>ZM>xa%duR4KEwC+UZaI5k|DTmh z*B_MIts_7Ge--0lfky&7&Nuel{L~=ryKcS3sm+gNfxcBOag8WRNi0dVN-jzTQVd20 zMh3bDhPp`Vp1Vj&_|fXPKRU=QYE4bF4dJw43?9T@mv-hcc(3FC8MO1PW?Q^M#N zm=a3#FexF65txpM%$9BY3HBSaX6uj$sg)+f)`1#__pVy1 z;@VyZa=UUnArgS8A_6=r5EZ;P6CAlk`w*PKr|3505KS(9$>x-WUTUZaSYKo zfAqpd!9xl>Y!B8vsIU@z$y@RBzdxL|EVrqLq zN@^)FTBOzHYQ4qo?)J^q?wp*obF4XY#iZT6gUSE^0IEquK~yM_#n90a!XOL=;Otc0 z0G+@e-h3)_0$?H?&lyZ4;2CRuZ0@-GE-4g#a;JlnMbmMbWPcH~C}~mEdUw8Yajmvc z+P4eU0{95U{o3(ZMM{eKY%xZkyT*b27fG;GmLQ^LFnEGcrPCickXr_U_Q|L6t^MsE zQpapj`lxtCwBW~QC<0n6(ozJ?hg)m;VDEg)eYP=ny`{SVW7`L-?5wo_=8{ VgMp($0{{R300>D%PDHLkV1ft0fJ*=X diff --git a/graphics/door_anims/cable_club.png b/graphics/door_anims/cable_club.png index 3b45cb1010aa89869f45f1c9cbc460f9698fd464..a1dfd7bc27f1a5a636ae3df52445b2c7f7eda8fa 100644 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0H>-HI7IBY;8z$%%etAR34jfEWx?4=`T^GCDk6978nD zpS^UEm&uTa`NEk)3~P>atvR6M;nQ$K;qHN%4=*JI2hM%RtjJftx8EaoO@u*NYFI(q zn?pQvW*BZZ{8OdPG%qvXBBjs%knQIU4G&&)-{WaA-WF_sadxKhtIzY9nuG=BG)(AT z{7bM(bVXf<{fp<(1=qM6*&}anPq)9k){5~UC&#OFMyD%kwwjlY1_0fpTH+c}l9E`G zYL#4+3Zxi}42%qP4GeXS3_}b|txP~j+rYrez`&;cYzc~n-29Zxv`X9>d~cPW0D0fj L)z4*}Q$iB}idS`c delta 236 zcmVxICB mtnJ&QpXpYEfDi-(^>YXRg4W{~fJGeu0000%Os~AO?ff1I$-}j60q#jv*T7 z&t7okYBmsHy|B~iyi$em!PuQ(=wG{hSuXIl~a0!x6Ck~xclFo z(gVBpC9p*uz1P8W+UsrOaxMj>DGtI5p^^Cd;Qn{G&yiU{Svs6XFj^uN^G$!ACZMig&;qlfT$qQZrn$gL z(ULSkxzEy;Ue`64vBrsW!%t%QVLmH9qvo>!gCzI}M+9TMZb>#p3_Z^o^zNSJ?AiQ$n$vs?n7_$ TyLB{700000NkvXXu0mjf5N(pO diff --git a/graphics/door_anims/cycling_road.png b/graphics/door_anims/cycling_road.png index cb1fb30343b29ff9681e5a7f337135097a8ce670..0c22c918236a01a8999f86d665d79f7647a3813f 100644 GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0Hh4vCF+cYs0y$%%etAR34jfEWx?4=`T^GA??$IEHAP zKRe+p?_mX=)<{Mp#&?>}*IZEDHuqf{v&)r8^aWr4E|374xTJGN%GpHQuv+<(wIitQ-FqyyQ$54s*X z*hiP8oj$jwWs%AWFRMC+Hce(d6OkEFr_|kkPyZS6yQV!?E52>x5h*9$l0Sk@yicC2 z^#5tYP?50xlQCO^Fwk?VC9V-ADTyViR>?)FK#IZ0z{o(?z);u7FvP&r%EZjdz(U)= lz{Wt~$(69BShk-q={ delta 312 zcmV-80muHi1IPl98Gi!+008Fy?~?!k05DKYR7HEVz5oBT?(SOE)j_?qN`r%oVq$wi zN@^)FTGiFnq@=9o#rD;U-o@yQ0Lh7USfVR%=7ci=$qdD@12m;QR<&g1>3>=Aw|}^EiTYC4*kV(vs=8u} z)wp5r@IIwvs^$bVm$3A9!dV{!Kmzb_As9!3xIC7lrS(jf8Q3zz(F%Dgr4c`Mp zn*bN;Gqe-kM=?tKm-i|5`3~DuN`_~VC8!c8{1H?M^^;5h diff --git a/graphics/door_anims/fallarbor_light_roof.png b/graphics/door_anims/fallarbor_light_roof.png index a4c959f8831a985f7279cde06d6b0dda4bb62eaa..4c81ba10e737a9ef27c55d401bca577134b96764 100644 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0Hh1B1xJ z*&iwLn|1q1^Y%HnQ;zCAHruINoHsdBa<%E>6{$_vgng#_hw;r~^ayu#Sk%!lw`o`5 z5(USdhdSQQQhM{$SnJL14u{ze%~Ix^G2VM1oMI_+#iU?vN;Uuh0LV#1K~yM_&CtsY!Y~X5;LOr) zP%{CJV1asrh7)kAnoF6Cj*t^@WrfZ_?YON7&lAFurB89H)PKLZcDpOL3CC^VHhs76 zxlQnG;5NOM@me!BTE=QU!E|};<)9jXuuxb8h_IL|ARk8x5VU8EIGiBDFF&KfERV2I zWDH08C=rzw`La|!W7_Mt`S=*a~@r+`8N$%%etAR34jfEWx?4=`T^G7fsWIEHAP zKYHOT?_mWV)(2}6^7f`J@44VuWbCfAwQFWWRrfvXkX#-U)xc^Vp-bu?zgIXjFwAv6 zY}B{-T;r)945uw3x^f;f{C?cg_+)Kp;p_~}8CvVuc1d%@+<+vbd6)CQ(?5B*=cKWZ1!32^?=#xKrnyHGLzTYu2{=S?@9?e0&= z(zOX+a*O}`+WDo|{jJu|&z)C);j(1a@~fAWzil|5FIatp>;H@P`>ZD2zD8wC3xJ+c zEpd$~Nl7e8wMs5Z1yT$~21W+D28Oyuh9L%~Rwiavrk2_U237_JcXr9lMbVI(pOTqY XiCe?k=SviU8W=oX{an^LB{Ts5P0onek1GWN?8Gi!+008Fy?~?!k05DKYR7DsmQvd(|-sbMT&E}l6-h+dSVq$wi zN@^)FT64YjVyy1}y@T$QbKYuV%|TLg#iX8JIZ6Nk0KrK_K~yM_#n8n39DfXRj8W!*b$mc|94tA| zae)1CB9HvmBzUYiSF8O~yQ`r+Po^vTu0WW0*UzZxPAqj{fZv`L)CnG_ScvNCo zunK75PwI!``x?xn!G9z8mjbWZP&S8Ktv5i0>%pHljI9<}8phTSEY{Do>t{T#pKYFh skkbWnr`FQL^&imBZ{d3A3jF8?-aRpK)BF=v3IG5A07*qoM6N<$g0l*Se*gdg diff --git a/graphics/door_anims/gym.png b/graphics/door_anims/gym.png index 065181a9d95665a6e8ec122a38fdcee15861ca84..fce0007514729f11bec1662868d7eb52978b9982 100644 GIT binary patch literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0IM$!sb8e4vm(a-v@uhz4Q>AO?ff1I$-}j5VGvjv*T7 z&t5pld00V&Eg}2`*WHy5oEW9Q-m_@@Bg_$bz?uET(%oP7{^&R&<>ddizT#(x#;?_@ zU1C+ZCh_&S_)gljY*__+%F3A}y9xm%$SlE;)#KKX)V6EQZ#{O<5qm<~stqdlw zj@r%tGrLZy-tCpUF9vB^d%C+C%&;PHVb$>iyZOKvCk*}rXS0nnfl3$C7*!K zEpXHV9AO?ff1I$-}j61-6&Xirzgxy4r2!lc(&5 zLmqsdlQJV{ufJaHZvQ>M?C#q9-&j8N>=&Jl?e85yxU6OV_fC1=nl%$lD}Po3eWP09 z8c~vxSdwa$T$Bo=7>o>z40H_)b&U)|3{0&|%&m;gv<(cb3=Ej#`Oczf$jwj5OsmAL Up@?Z)At>NHUHx3vIVCg!0No&ubpQYW delta 295 zcmV+?0oeYk1GfT@8Gi!+008Fy?~?!k05DKYR7DsmQq9%wtiASgl+{{uy@P{`Vq$wi zN^0KK-mJ~`gT>YV|NsB?oZjAhtgLGPq&XP?txEs^0K!Q`K~yM_#n8bG!!QT{Kz7Lp z86n7>!0`aJ$uF-IrtP=C?oeZ!MzPv_gM@Sc+2D-aEnVN?*|RIt8qJR*Op{~RBT_TT}FG$b#Zg7e@(v|@XG z@u+JBxaK}09G$Ch1|&nPkYVk?)Y^G&?P+f98Ksh!-wdH3@o@IsE_t002ovPDHLkV1nMDkG22+ diff --git a/graphics/door_anims/lilycove_dept_store.png b/graphics/door_anims/lilycove_dept_store.png index 7c64ab6da82eed8da704b662546b4b02ddad9b5c..4f036c51db1cce8e59a6a6ce35f7560c15925720 100644 GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0IM!?^YBQ-MMP$%%etAR34jfEWx?4=`T^GLCt=IEHAP zzk1;yZ?gdp>xDNLJhjqJwlWqa2rU-<&v4El&R9x6ms_-PiagO7&pAMy5; z*D{sX4xE-*w9NCd$g{mdEj|#D56pQ+>~l6LO^COY4#Bw#Vn+wAu=b4DS}PbCRdtHt zNqiN+tTxS_TLx9`7k28VZE}$|scl x{ta;$3h0Ugx+HS}D7Ya2g)|tTC=I`p&kJi%4I^GgaY+CG002ovPDHLkV1n6Zgs=br diff --git a/graphics/door_anims/lilycove_wooden.png b/graphics/door_anims/lilycove_wooden.png index 7c3680c2897116d0cc5c3730d2a7954f73c2176e..99b94e72db320fac8c5607f3ffb3b7c4a6e71ab9 100644 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0G+2VO0$cBWnD%(#)KYk_ w7?@g_SXddGY8x0>85kVi<9`=LLvDUbW?Cg~4VxZ*PXvXJr>mdKI;Vst0Py&PT>t<8 delta 270 zcmV+p0rCEk1D*nq8Gi!+008Fy?~?!k05DKYR7DsmQvd(|-sbMT&E}l6-h+dSVq$wi zN@^)FT64YjVyy1&=A_=ugVnTZ&74wm#iS7?mT&+70I5ktK~yM_#n8JA10f6sVDFR_ zvVui*RfMTX2^|||gsgBg1fL%vBqHTmLi&X70RQl8`-2xasDJIm3rGv9)*Ie(T(wph z&bf0XMK)}TY}gou`o@7v-%w<0$u}Q=`8jfO)w>E-K}1%9g2+lg21G45DW9rOU4jg^ z8O2%!6>&x%-VrPoY=&U@VDo&^S3cpqe8%_u1K)6fCzDua#2GUDh&V$!xX1@z7X3$o Ua2+mB00000Ne4wvM6N<$f+}Kn761SM diff --git a/graphics/door_anims/mauville.png b/graphics/door_anims/mauville.png index fec5f344fba4ee8727b153750c52898ef5dff8f5..63167408ad65d2c4447ed7ad1cb220a02a51ea0f 100644 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0G+-S#h6U4TLY$%%etAR34jfEWx?4=`T^GER89IEHAP zKRe+p?_mX=)<{Mp#&?>}*IZEDhu;c&>XRz4+3CmWjEqbwV+M1dweX(!Gat8uu zYd0`>oyW9lO=)SJiFgc$Q*6F-(3W`tTl9{8`du^OorLHdrijKTdmVDTSpH|V#;)D4 zdeZEm#;H|*n7E{wb+?$@a67qt%7^JcOMch1CwJ*Dj_~5&$!__NXD54M#j9XDeuG`1 zHPig`P6PdsI7A7p_Z(CdM_6CGYK(Mn|~_+h(K*TfTuQI%Q(w5 zyn*ANDBqibm`X-uz*KgDWf3U*eLq{?Z(@a6tuUXh+@^AyV!)C&0ab2wb$--Ymt_N{=>Qg=s5v!-9+T@v)00000NkvXXu0mjfr0tBG diff --git a/graphics/door_anims/mossdeep_space_center.png b/graphics/door_anims/mossdeep_space_center.png index c778b171834485fdaaae3c828509eb3188c24919..4f2ccb6ffd4ba359bcff496b98673b98669bc41b 100644 GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0Hn-ldI4&H{x5k`w*PKr|3505KS(9$>!8z`!W#>Ealo zasKQ@$Gm0(0oDta;@>4!TQ=wxP6%s0BGw%dXqIyzkiVgbanUc9sZ|X*MQ#5KFQ}DV z4Yih@cZ{vyK1AJdY3HjFkC%&Pd|M&4LT7WPy3qNYSk0C;!*kodEaE-x|7DJJgO01b zcVJA{u65P5`dyEz{d<}{4hVhrTaxJftW4DMo{Zr+!S@WzChyiI-|#kQt8zo?GyOllcFj*FdgwR4oOnL8&_!zL zq1~w`@0XfvSoQUU`^D-f&9)2kC!FWn6M9tF$!(Vg-wF1WN92~z4|_8I>i_vQw|++c zm9n}S*ZBJgKYk_7?@g_SXvnxYa19?85r<(i!DLXkei>9nO2EgL(R2y5}>&7boFyt I=akR{07nnK>;M1& delta 378 zcmV-=0fqkk1BwHX8Gi!+008Fy?~?!k05DKYR7HcuV*mgD&CSKMw4}7X-iwQrVq$wi zN@^)FTC~;wl%($e)iLgr5Y5$tl$1(ZQV55Gf_MM`0ToF^K~yM_&Cx+_gD?;U(78f3 zIY6bJz*V?F!~v=pHf*BEL1v4@s67aheSlP+dvLG*G0-M-)qhnx8=l4nk3ZBKMwx|3fCO~mu9Lz|5h=vnNfh*TABAFu$ojztj5Ewj$&5RaJ(leB z^wY5%tb%o#d2_I3<}dtBJ{9MYNH2luk!102 Y0_M|E?x({8D*ylh07*qoM6N<$f}$C=tpET3 diff --git a/graphics/door_anims/pacifidlog.png b/graphics/door_anims/pacifidlog.png index 841c31658d649c60888ccb6ba2b517e797ccdb9f..3e05288255cf4fb19527b03c2878df97f06632ce 100644 GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0HnotH1JOa=-GBq#cnfoLFB0AesmJ-~bw$hhO_;uxZF z{_KT~y@w5WSOeA_I90pu0)v*xske#B4^o+qFI^QAHo>-WC1(zQ=^_{D#wP7cEI)bW zPq_Ws;5%ni&W1I6-1;snE2*n(Xi$$hY|`)DaloeCz)1bWoHVx^Gn83)17@-;X`Fvg zBFkUx@Qkp+TOYR`){0@9sBKYy-NJ8gHJj#|#eN^WuT46TeE;OjrjFj6K5;n*-aT9A zzuv09HD!jnMXR>Qe0_`S65lQt1pj!}pn9<3hNWxN)2NiC88I)}C)%x?KWBR3bdH+3 z;#I8KKctwieK6Il=KTNtGyA5)NoU>eZ7%})Q?2OC7#SED=o%R6 z8X1Ndm|B@wTA7$=8yHv_7&M$w^Fz^)o1c=IR*74~$BFYkfr8Z2)z4*}Q$iB}Hm9I~ delta 321 zcmV-H0lxmk1JMGI8Gi!+008Fy?~?!k05DKYR7C&)0N&=Lw7q+rq+)}MN?KwmVq$wi zN@^e=QtsxY?!{uwoH?X>7=uzVgM*7wYSnC2)-eD80NhDLK~yM_&Cs!N!!Qg5Q0ydW z0zwnWTp>xtQqlxAPABh?QCM&Q7ICi%GngPDosT*fX>$1u-hTlN`JovwrE8#Tu{CIh zR~Sr8KmiWW+M&O6)&OE}?FBIb`!q9bgJ{5NfXXBw4cz7!>HdfrG2RuA9X~sQ!e|?zrzLOfHm-^{Y=wbYRQNvc!e)WpD$QyjQeT) zQn>9vAi>DIdOAf~)fl;kt8v{+c;C+xkCU2H Tl_fKQ00000NkvXXu0mjfJF<;- diff --git a/graphics/door_anims/petalburg_gym.png b/graphics/door_anims/petalburg_gym.png deleted file mode 100644 index 42a1e1dfde2db2157bd42c50b25674799c68eca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmV++0p9+JP)KhL>^uRK(%$3ulnyX;06ya- zOzo5LhKS0Us^ypc=!N^yOYXRa4{(m*D*?Xj1*!#b8v&aEREt2{@bUlY=NmYPrGDU- nQ!N5s0yhVE3EJSPcl|s88&4S*v2toa00000NkvXXu0mjfj5&aT diff --git a/graphics/door_anims/poke_center.png b/graphics/door_anims/poke_center.png index 8bf5cb146dd19441ed4d034c632a843feb8911e3..8658107149024abb90fd59b85dbae29fda13df90 100644 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0HnlV2@9M}a~D$%%etAR34jfEWx?4=`T^GIo2qIEHAP zKYL*#?;!^s)(g=G0~Aw5u5}!7^5|?(ihaYW z>o=#Mbc2%+gGp-+ufq1dN$g4q8YP9u_k85}=H&9e)XE6%nnoE@ z_W+l(HLrfZW;#+Mw)4D%^gf=$$#q9tUaqpgy?j+oi>O0Rt^B*1X&hY_j+gK2Zxq?* z-)45_?_0amziZn6t>0REjQyq#qsYYB<^e6HKd&sWowr76`n=}-wShoysFt`!l%yn< zq*^5xr2;7iBLgD?T?0d1Bf}5_Q!5ioD^nwF0|P4q1O08nuTV7P=BH$)RpQnV_j+|0 PD8xKn{an^LB{Ts5Hm8kG delta 288 zcmV+*0pI?k1F!;+8Gi!+008Fy?~?!k05DKYR7DsmQvd(|-sbMT&E}l6-h+dSVq$wi zN@^)FT64YjVyy1}y@T$QbKYuV%|TLg#iX8JIZ6Nk0J}*R< z1Gu20io^s~Ca}|`0F+29gp@THB@z{Q2I8|xf+bKo_|;RsE`PfFiJ2Rb0g{L`1KbS) zyQ|_R0Ad&*SK2{hjXWTA9{Vz8M(Ii5N$AO^&V7Gb3x0tdEk;m8i+C!_{Q`t|1lZ0P z8$1-nW`4zl>8d~5r|W!#6=1G?AFOSE|H5vKTr+uE5JY|BPgBK|P0000x-WL))haSYKo zfAxYP*I@+_wgls}?g>l1*_OZ4i{*}UJi)o-d4}i4=v|@y0eeFA9!UQB=c44f;Oz}N zk9+LDMCy-OuIKt?_-hWc#NuZwLRI@GerJ80D*X7u<$2XhZuLsc;xswrz9M;T!=|uT z9ub0CUh^dTU5o2woa6mLQL%* zwqsMn{RhQ%`iyS{3#Z-wm=wK6rZ rGBnXPFt9Q(_`3a$0*Z#*{FKbJO57S+UZubP0l+XkK*mRX; delta 316 zcmV-C0mJ^i1Iz-D8Gi!+008Fy?~?!k05DKYR7DsmQuf7r?wnf9b19@+F@uAPVq$wi zN@^)FT7$*jVw|-9|L)%2#l^*>q^x`Y|8tR1rgi`T0M|)GK~yM_)zC2tgD?~Z;9MaW z@K&KGNV?Unq0*kCv(Po1XE~iYaH_|EtQkQqVSuYz2Xw7-6&Z1IFFcz>ZzEu zrPhVD3C3KtJ{bcjH9?9A;%n6PO^9<{CwPAs;^KXp9;TwLu@ZhIpAt)96A%vq0u%xQ zB;HIoiZ$d0Vl@O(K`sf12Lb(4KJP*Ks6Bwk?+A!x3Ax6wvw+;-b3QLXcx-WL)rcaSYKo zfA&%=U$X)aLqgwuKK=veStrCYG_%i`=)87IsMz$kg^|1uxwjlMn{_Sf?ddmLzM48L z&yHu_bn$BE<~^A+YNw_@*z-w>O($%{HN!nh#}=*VJ`lb~A#DAIS;72MG&Z=#SsYxH z(ZIw0mQhym^1~-Q&*li5SY4DjA@ywf=ao`_jRoeEGet;TdBnI}!&6}Gvx>6^BZ~|6 zaUSX^cYP?F6}O6`b2Zaf?%7JYM)T)<%ztM5Z~pf8Kl|d2#1^F2>ip~~Xf^o{B<>Vk zUH;RCammd;e>C2gM*#h%TH+c}l9E`GYL#4+3Zxi}42%qP4GeXS3_}b|txOH9j4ZSb m46Fer2qf_-rnAR0001U#iU-u!}|aL0MJQ9K~yM_&C*>CgCGn5VD5x* z2e6R~47~t92avVbU!heNmhEv_4dDy4#x@#jE!1Tu-sr1oNz%AO?ff1I$-}j0>JFjv*T7 z&t8hx5W_X7(8qo!4#&6`TIHFp~En_m*R3v#v$GJ^g0OS5t@O z+40PqE?({2yeD%;?bP%Kdp=3A>4dGgX1GV`*rFBP2g3I#gstB&E0}+Z#s=3oi-U_Y z8hF^>GRi7me)xpv*&JaLtBVpRq@GRxyi)3~vA~>irU;2Ej~JJ0cnYk2R&n-VWO2bh z&O<%rt`CK?;#P5Vu4ekmJzFW)X#Sj!`Ol31&ENk1XJ6cr*n;$0ou6F=ttS70#GQhx z%YWK1F1h*VkH-7*2%z6oOI#yLQW8s2t&)pUffR$0fsui(fuXLEVTggLm8pT1v4ysQ lft7(lfzd`y6b-rgDVb@NxHT~5b4~>Xqo=E%%Q~loCIJ13ngIX+ delta 309 zcmV-50m}Zk1H}T68Gi!+008Fy?~?!k05DKYR7G>er2qf_)z!VUw3M8jdxL|EVq$wi zN@^)FTFuqwi?r45=Dpt4ti7yitdwGN#iR;hAvOR20MJQ9K~yM_&C*>CgCGn5VD5x* z2e6R~47~t92avVbU!heNmhEv_4dDy4#x@#jE!1Tu-sr1oNz%X<$%%etAR34jfEWx?4=`T^G9G!lIEHAP zzdGR{CzGLo>vFN|o0Gq9nb6!(>LbQ|VNNP%qIJP}C98-wbx+=N{*Tr@cofO*Bxhf5 zbY}VL6AjM7G3|`cwQEX_Moq~&dtjrOZkDfsU7>Exi5~u5!8F6RoGOF+la`h?3g=$x z+UZ@sNi5;*>`zAh3QPilJ3g!n&zQB8yM5Wg0QpxJHXY@#pTn>BM47>`#dYH==`{?o zO3?@WxNP#m&)R8Z*yy#*epZ|)@4Wt}PHd0V1ir6a|EKzElzTsCx-Hpo{O$K#wphdF zcQVD(xdhWVBx@Qcu+FG$RXQ@WW}dR~zukq0Cu{=xR<*=6q9i4;B-JXpC>2OC7#SED z=o%R68X1Ndm|B?{SeY7W8yHv_7zpV;e}JMPH$NpatrE9}QAZF?i@sJjB_q4Uxi}RDXyWrwk2SOe{e}6K}r!{kfLnEx42Inh$ zblF;DYR$mD7Cmc?Fg!^ud?x-WSsVNaSYKo zfA+#b-a`r^Yzbi*apEgdJNO=?RWux#E$$_C{_D=hGKSf^I>gfjD)`r4IkNa4`=?fM zjlV~yDo>kn&anB${p7qwi%mg6J9-b--4eP!|nM` zXkU37wLJ1G&|9h{t`Q|Ei6yC4$wjF^iowXh$UxV?P}j&X#K6?b)X>VnLfgQ=%D_Od g{_YnP4Y~O#nQ4`{H6$pddVoUE)78&qol`;+0Qeb`NdN!< delta 306 zcmV-20nPri1HuB38Gi!+008Fy?~?!k05DKYR7G>er2qf_?(Wsz-n6u|l!JqdVq$wi zN@^)FS^xk50001-q?~($dtz#0Qd&{~000Ye(r zA~tn^>IOc0HVx(C%>)jznFDkPstfd`GYGtgR@%gy@js9+ynjIHFE$)8N3n~k#Ay|? z77b0x1^8uupyLHV6|ptuGQF_n2*dHv*cqz=M(nN;_`n;Xf4GQq@9qIj**ixV9FLHJ zI3(Z;Lx8bf0kXCc8o>MIMvA!@@vnM%kZbHvF9WDc6Z{G;!Fo_Z@NGxr3PF8}}l07*qoM6N<$ Ef+e_whyVZp diff --git a/graphics/door_anims/sootopolis_peaked_roof.png b/graphics/door_anims/sootopolis_peaked_roof.png index 7d8ea1f33e1710294ddbb02bdc8084127df55687..b4ccfb5f993ba33e06842e571e7cfb1813b871f5 100644 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0H{k)<<(_Hcs7ogGU8*)`Ib6BqR&cj%`uKS-RQ+3|AySILRjRYAW@p9aNme!MOO(?^+g(!2R#k|F-J~a8}LS z!MKWNUdtY?>bAo|3t6r1YhWYqJ_cJ)z4*}Q$iB}FRzdh delta 306 zcmV-20nPri1HuB38Gi!+008Fy?~?!k05DKYR7G>er2qf_?(Wsz-n6u|l!JqdVq$wi zN@^)FS^xk50001-q?~($dtz#0Qd&{~000YeGj{qbeYWZzH=|4n+a07*qoM6N<$ Ef{~wn*#H0l diff --git a/graphics/door_anims/trainer_hill_lobby_elevator.png b/graphics/door_anims/trainer_hill_lobby_elevator.png index bdd1c3b271d0d3c4ddd895e12fa82735e2f33258..aeb7eaf26050aff021cc812dde0faf71a994fab5 100644 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=0wfr|csbMpDVB6cUq=Rpjs4tz5?O(KrX+87 z7Y2SSBfG^w9(#$WuPgf#Mp0H{HEZs8exQ&*a-v@uhz4Q>AO?ff1I$-}j1o^5#}JM4 z$ve1Nd3G;sFgd2B;m|Rsk*RHSxq`sK3U*eWr%y|3_2*5Wt}M~iRP;H{PDEr0JM+zN z>qm=0&Aagv_0?^NS>!)D{*4m{k_~tJlj6JY`&l`&{HXJ%)83q z!L)tN6@O*tePCo*^IE^XaJs4_(01GbWneJ>!!2N19Pgg&ebxsLQ0F3HsQ~&?~ delta 214 zcmcb^^qg^mWIZzj1H-fb?C_g1^}vu%3o-_)eQb|>+}g##%UOlyuf zh9t5#ee~lw;!y*Z_VQ9VmcTvVi9@$9LB&ZT=}W=^UD1|`SOI^arBk!d&b%YHEeB{l NgQu&X%Q~loCIE-4SabjY diff --git a/graphics/door_anims/unused_battle_frontier.png b/graphics/door_anims/unknown.png similarity index 100% rename from graphics/door_anims/unused_battle_frontier.png rename to graphics/door_anims/unknown.png diff --git a/graphics/field_effects/pics/bug_tracks.png b/graphics/field_effects/pics/bug_tracks.png new file mode 100644 index 0000000000000000000000000000000000000000..b7062d253f68cd83d17f7e356850f9f4b47bb163 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%Amx6nlxMuPgggPDy5E6|D{BGC(2m z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm z>&U>cv7h@-A}f$@5a1KynzZKKw`WJ+UEOkT%as5B|KEG|ZtvM=bGF<|nzQBq-e*8n z@18BWceeTJmaMaLKOLC z@v3_<&z>L46J9N{{kvjCupr0An@3hg*Dm7DDtYXbt-r@;M1& literal 0 HcmV?d00001 diff --git a/graphics/field_effects/pics/spot_tracks.png b/graphics/field_effects/pics/spot_tracks.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8c9c0cf4ba7ff95fc87f06ec3c4fb7d51140ab GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Et!VDx^^%Amx6nlxMuPgggPDy5IruRyIQa~Z` z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm z>&U>cv7h@-A}f$@5a1KynzZKKw`WJ+UEOkT%as5B|KEG|ZtvM=bGF<|nzQBq-e*8n z@18BWceeTJmaMaLKkyAQ5E-N7?N2WG8`EhW-^NWZME4T3e?Qt>FVdQ&MBb@ E08~6)ssI20 literal 0 HcmV?d00001 diff --git a/graphics/object_events/palettes/followers/aggron.pal b/graphics/object_events/palettes/followers/aggron.pal new file mode 100644 index 000000000..285abfd63 --- /dev/null +++ b/graphics/object_events/palettes/followers/aggron.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 129 145 +73 65 81 +209 209 217 +1 1 1 +65 97 129 +105 145 201 +169 57 57 +49 41 57 +177 177 193 +209 89 89 +233 233 249 +145 145 153 +105 97 113 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/aipom.pal b/graphics/object_events/palettes/followers/aipom.pal new file mode 100644 index 000000000..f658712e1 --- /dev/null +++ b/graphics/object_events/palettes/followers/aipom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 145 97 +169 137 201 +97 81 65 +225 209 161 +185 201 225 +113 73 145 +1 1 1 +81 41 113 +233 233 249 +137 105 169 +137 113 81 +137 153 185 +201 177 129 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ampharos.pal b/graphics/object_events/palettes/followers/ampharos.pal new file mode 100644 index 000000000..17ad1d495 --- /dev/null +++ b/graphics/object_events/palettes/followers/ampharos.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 129 25 +185 57 17 +113 129 153 +49 57 65 +1 1 1 +185 201 225 +241 89 81 +129 25 9 +81 97 113 +241 209 89 +105 89 9 +233 233 249 +201 161 33 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/anorith.pal b/graphics/object_events/palettes/followers/anorith.pal new file mode 100644 index 000000000..34717ba7c --- /dev/null +++ b/graphics/object_events/palettes/followers/anorith.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 153 113 +65 65 73 +201 201 217 +73 113 57 +161 161 177 +137 25 57 +129 169 121 +233 233 249 +193 113 105 +49 41 49 +105 105 113 +169 65 81 +217 217 233 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ariados.pal b/graphics/object_events/palettes/followers/ariados.pal new file mode 100644 index 000000000..ebc2b6797 --- /dev/null +++ b/graphics/object_events/palettes/followers/ariados.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 137 1 +97 33 169 +129 97 9 +1 1 1 +201 65 57 +49 41 33 +169 185 209 +113 17 25 +145 81 225 +233 233 249 +249 193 9 +73 73 73 +241 97 81 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/armaldo.pal b/graphics/object_events/palettes/followers/armaldo.pal new file mode 100644 index 000000000..9ca50cb6f --- /dev/null +++ b/graphics/object_events/palettes/followers/armaldo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 129 9 +17 65 97 +97 145 177 +193 65 105 +193 193 209 +49 49 49 +233 201 73 +57 105 145 +113 113 121 +1 1 1 +233 233 249 +161 41 81 +129 169 201 +81 81 81 +145 145 161 diff --git a/graphics/object_events/palettes/followers/articuno.pal b/graphics/object_events/palettes/followers/articuno.pal new file mode 100644 index 000000000..417a8deb9 --- /dev/null +++ b/graphics/object_events/palettes/followers/articuno.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 25 +49 177 193 +161 225 249 +57 57 41 +57 129 137 +177 177 209 +217 249 249 +49 105 153 +161 33 49 +201 185 73 +1 1 1 +121 201 249 +105 161 233 +49 65 89 +233 233 249 diff --git a/graphics/object_events/palettes/followers/bagon.pal b/graphics/object_events/palettes/followers/bagon.pal new file mode 100644 index 000000000..cb37d7d6a --- /dev/null +++ b/graphics/object_events/palettes/followers/bagon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 17 +65 137 161 +201 201 201 +121 121 121 +185 185 185 +41 65 105 +233 233 249 +193 161 73 +1 1 1 +121 193 249 +105 169 225 +153 153 153 +73 81 105 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/barboach.pal b/graphics/object_events/palettes/followers/barboach.pal new file mode 100644 index 000000000..ccc983a79 --- /dev/null +++ b/graphics/object_events/palettes/followers/barboach.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 145 153 +233 233 249 +89 145 185 +49 65 81 +121 177 209 +89 97 113 +1 1 1 +153 161 177 +57 113 153 +185 185 201 +25 65 105 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/bayleef.pal b/graphics/object_events/palettes/followers/bayleef.pal new file mode 100644 index 000000000..bdfc636fc --- /dev/null +++ b/graphics/object_events/palettes/followers/bayleef.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 145 9 +217 217 217 +169 153 89 +161 193 81 +65 81 1 +201 185 89 +177 81 121 +233 233 249 +233 217 89 +1 1 1 +97 81 33 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/beautifly.pal b/graphics/object_events/palettes/followers/beautifly.pal new file mode 100644 index 000000000..1f2c4405a --- /dev/null +++ b/graphics/object_events/palettes/followers/beautifly.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 169 49 +97 97 105 +81 145 225 +41 41 49 +209 209 217 +185 49 73 +1 1 1 +217 89 97 +177 177 177 +249 217 105 +97 73 33 +49 97 153 +233 233 249 +65 65 73 +0 0 0 diff --git a/graphics/object_events/palettes/followers/beldum.pal b/graphics/object_events/palettes/followers/beldum.pal new file mode 100644 index 000000000..2ed964eb8 --- /dev/null +++ b/graphics/object_events/palettes/followers/beldum.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 129 169 +65 65 65 +185 185 201 +177 57 57 +113 161 209 +17 73 105 +153 217 241 +137 41 41 +1 1 1 +41 41 49 +97 97 105 +233 233 249 +153 201 233 +145 145 161 +65 97 121 diff --git a/graphics/object_events/palettes/followers/bellossom.pal b/graphics/object_events/palettes/followers/bellossom.pal new file mode 100644 index 000000000..d6249f109 --- /dev/null +++ b/graphics/object_events/palettes/followers/bellossom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 161 65 +233 233 249 +17 65 41 +57 137 89 +241 193 57 +233 81 57 +113 33 9 +217 137 25 +1 1 1 +97 89 9 +193 41 25 +73 105 25 +153 193 113 +217 153 17 +0 0 0 diff --git a/graphics/object_events/palettes/followers/blastoise.pal b/graphics/object_events/palettes/followers/blastoise.pal new file mode 100644 index 000000000..020dadbe0 --- /dev/null +++ b/graphics/object_events/palettes/followers/blastoise.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 137 81 +145 137 233 +129 81 9 +241 201 81 +97 97 169 +49 57 89 +137 137 137 +233 233 249 +81 81 81 +185 185 185 +1 1 1 +73 41 9 +177 113 25 +201 169 81 +0 0 0 diff --git a/graphics/object_events/palettes/followers/blaziken.pal b/graphics/object_events/palettes/followers/blaziken.pal new file mode 100644 index 000000000..723203d09 --- /dev/null +++ b/graphics/object_events/palettes/followers/blaziken.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 169 17 +33 97 185 +1 1 1 +97 73 1 +169 25 25 +209 185 89 +241 225 153 +113 89 65 +177 129 81 +249 97 89 +241 233 225 +105 17 1 +233 49 41 +249 209 81 +185 169 161 diff --git a/graphics/object_events/palettes/followers/blissey.pal b/graphics/object_events/palettes/followers/blissey.pal new file mode 100644 index 000000000..e169adc07 --- /dev/null +++ b/graphics/object_events/palettes/followers/blissey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 145 169 +169 185 209 +65 73 97 +1 1 1 +225 81 97 +233 233 249 +105 17 65 +249 121 185 +249 169 201 +185 89 137 +201 209 233 +145 65 113 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/breloom.pal b/graphics/object_events/palettes/followers/breloom.pal new file mode 100644 index 000000000..811a70749 --- /dev/null +++ b/graphics/object_events/palettes/followers/breloom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 137 57 +49 81 33 +233 233 249 +129 193 89 +201 65 65 +97 33 33 +1 1 1 +73 113 49 +161 41 41 +129 105 57 +233 209 145 +105 169 65 +33 57 17 +209 185 113 +81 73 49 diff --git a/graphics/object_events/palettes/followers/butterfree.pal b/graphics/object_events/palettes/followers/butterfree.pal new file mode 100644 index 000000000..9d7c7c4e3 --- /dev/null +++ b/graphics/object_events/palettes/followers/butterfree.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 145 145 +50 65 145 +105 201 249 +97 97 97 +249 113 137 +193 40 65 +81 145 225 +185 193 225 +65 40 89 +161 105 225 +233 233 249 +113 81 201 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/camerupt.pal b/graphics/object_events/palettes/followers/camerupt.pal new file mode 100644 index 000000000..da482a575 --- /dev/null +++ b/graphics/object_events/palettes/followers/camerupt.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 137 81 +201 73 25 +249 249 249 +73 65 49 +73 145 161 +89 97 97 +161 49 25 +1 1 1 +161 153 121 +217 105 49 +89 33 33 +129 113 81 +193 185 153 +49 57 65 +0 0 0 diff --git a/graphics/object_events/palettes/followers/carvanha.pal b/graphics/object_events/palettes/followers/carvanha.pal new file mode 100644 index 000000000..cb0714f8c --- /dev/null +++ b/graphics/object_events/palettes/followers/carvanha.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 161 9 +17 97 185 +49 121 233 +145 49 9 +1 1 1 +105 81 1 +241 193 17 +233 233 249 +169 177 185 +49 57 65 +201 57 33 +249 81 41 +249 217 33 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/caterpie.pal b/graphics/object_events/palettes/followers/caterpie.pal new file mode 100644 index 000000000..68f678aba --- /dev/null +++ b/graphics/object_events/palettes/followers/caterpie.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 153 41 +169 233 65 +65 89 33 +249 121 113 +81 81 81 +161 49 73 +169 153 65 +249 233 97 +1 1 1 +129 97 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/celebi.pal b/graphics/object_events/palettes/followers/celebi.pal new file mode 100644 index 000000000..50b97151d --- /dev/null +++ b/graphics/object_events/palettes/followers/celebi.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 81 +25 169 225 +121 185 73 +249 249 193 +1 89 137 +33 41 41 +145 153 153 +137 185 241 +193 225 113 +233 233 249 +1 1 1 +33 65 33 +81 177 209 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/charizard.pal b/graphics/object_events/palettes/followers/charizard.pal new file mode 100644 index 000000000..e817695ce --- /dev/null +++ b/graphics/object_events/palettes/followers/charizard.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 129 129 +161 161 161 +97 49 1 +249 185 17 +41 73 89 +201 89 41 +1 1 1 +145 65 33 +217 217 249 +249 121 57 +193 17 33 +241 209 113 +217 169 49 +97 65 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/charmander.pal b/graphics/object_events/palettes/followers/charmander.pal new file mode 100644 index 000000000..8df0fb2ef --- /dev/null +++ b/graphics/object_events/palettes/followers/charmander.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +167 177 129 +249 137 57 +97 65 33 +233 233 249 +1 1 1 +185 89 33 +225 41 41 +217 169 49 +41 73 89 +241 209 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/charmeleon.pal b/graphics/object_events/palettes/followers/charmeleon.pal new file mode 100644 index 000000000..108320b28 --- /dev/null +++ b/graphics/object_events/palettes/followers/charmeleon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 169 49 +41 105 129 +177 185 249 +241 209 113 +201 17 41 +145 145 145 +185 65 57 +97 25 33 +233 233 249 +249 105 89 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/chimecho.pal b/graphics/object_events/palettes/followers/chimecho.pal new file mode 100644 index 000000000..cfbd41a93 --- /dev/null +++ b/graphics/object_events/palettes/followers/chimecho.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 145 57 +161 169 193 +193 57 57 +1 1 1 +121 129 153 +209 209 233 +89 97 121 +113 33 33 +249 217 89 +137 105 33 +233 233 249 +209 161 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/chinchou.pal b/graphics/object_events/palettes/followers/chinchou.pal new file mode 100644 index 000000000..23a92cfb2 --- /dev/null +++ b/graphics/object_events/palettes/followers/chinchou.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 161 17 +97 137 225 +41 57 113 +193 201 217 +81 65 9 +1 1 1 +113 169 241 +185 49 41 +249 209 97 +89 89 161 +129 105 25 +233 233 249 +193 185 217 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/clamperl.pal b/graphics/object_events/palettes/followers/clamperl.pal new file mode 100644 index 000000000..8ff612cf1 --- /dev/null +++ b/graphics/object_events/palettes/followers/clamperl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 129 169 +49 65 105 +1 1 1 +169 65 105 +137 161 209 +49 49 65 +73 97 137 +161 193 241 +233 121 161 +137 33 73 +201 89 129 +209 217 233 +97 105 129 +153 169 201 +0 0 0 diff --git a/graphics/object_events/palettes/followers/claydol.pal b/graphics/object_events/palettes/followers/claydol.pal new file mode 100644 index 000000000..2c319666c --- /dev/null +++ b/graphics/object_events/palettes/followers/claydol.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 25 +137 137 153 +57 49 41 +137 121 89 +193 73 121 +217 185 89 +233 233 249 +89 81 65 +137 41 65 +185 185 193 +233 137 113 +1 1 1 +113 89 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/clefable.pal b/graphics/object_events/palettes/followers/clefable.pal new file mode 100644 index 000000000..a9968049c --- /dev/null +++ b/graphics/object_events/palettes/followers/clefable.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 129 169 +73 57 57 +1 1 1 +217 81 121 +121 97 73 +201 201 201 +225 145 153 +121 57 73 +249 193 193 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/cloyster.pal b/graphics/object_events/palettes/followers/cloyster.pal new file mode 100644 index 000000000..b15a51ee6 --- /dev/null +++ b/graphics/object_events/palettes/followers/cloyster.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 153 153 +97 97 97 +57 57 57 +233 233 249 +193 177 233 +145 113 185 +41 41 49 +1 1 1 +81 81 81 +97 89 121 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/corphish.pal b/graphics/object_events/palettes/followers/corphish.pal new file mode 100644 index 000000000..4fe98b274 --- /dev/null +++ b/graphics/object_events/palettes/followers/corphish.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 121 145 +89 81 65 +233 233 249 +177 177 193 +193 73 33 +161 153 129 +89 25 1 +121 113 97 +233 137 97 +217 105 65 +153 49 9 +1 1 1 +57 73 89 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/corsola.pal b/graphics/object_events/palettes/followers/corsola.pal new file mode 100644 index 000000000..caf141ec5 --- /dev/null +++ b/graphics/object_events/palettes/followers/corsola.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 145 185 +169 185 209 +73 81 97 +1 1 1 +233 233 249 +169 65 89 +121 33 65 +233 129 161 +241 169 193 +217 105 129 +193 209 233 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/cradily.pal b/graphics/object_events/palettes/followers/cradily.pal new file mode 100644 index 000000000..9b10b1bbe --- /dev/null +++ b/graphics/object_events/palettes/followers/cradily.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 129 89 +33 89 49 +241 185 1 +97 169 97 +49 41 49 +193 65 97 +241 209 97 +137 25 57 +209 105 137 +153 217 153 +161 49 89 +1 1 1 +129 113 65 +89 81 49 +0 0 0 diff --git a/graphics/object_events/palettes/followers/crawdaunt.pal b/graphics/object_events/palettes/followers/crawdaunt.pal new file mode 100644 index 000000000..cd8f78f0c --- /dev/null +++ b/graphics/object_events/palettes/followers/crawdaunt.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 153 41 +49 57 73 +41 129 169 +201 81 65 +169 153 145 +113 89 25 +233 233 249 +169 169 185 +249 217 89 +89 41 9 +145 57 33 +249 105 97 +89 81 65 +57 145 201 +1 1 1 diff --git a/graphics/object_events/palettes/followers/crobat.pal b/graphics/object_events/palettes/followers/crobat.pal new file mode 100644 index 000000000..35a380e27 --- /dev/null +++ b/graphics/object_events/palettes/followers/crobat.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +73 25 121 +41 145 185 +17 97 145 +233 233 249 +121 81 145 +161 49 57 +233 217 97 +169 185 209 +161 113 185 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/croconaw.pal b/graphics/object_events/palettes/followers/croconaw.pal new file mode 100644 index 000000000..f1504a314 --- /dev/null +++ b/graphics/object_events/palettes/followers/croconaw.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 161 89 +73 65 17 +57 169 193 +41 65 97 +113 25 41 +225 209 121 +121 105 41 +233 233 249 +65 105 137 +169 41 65 +113 193 225 +1 1 1 +137 73 1 +209 49 73 +0 0 0 diff --git a/graphics/object_events/palettes/followers/cyndaquil.pal b/graphics/object_events/palettes/followers/cyndaquil.pal new file mode 100644 index 000000000..58b2aa207 --- /dev/null +++ b/graphics/object_events/palettes/followers/cyndaquil.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 169 25 +73 73 113 +129 25 25 +97 129 225 +89 65 17 +1 1 1 +209 57 49 +169 185 209 +233 233 249 +33 49 81 +249 209 97 +81 97 161 +161 41 41 +57 65 81 +241 161 17 diff --git a/graphics/object_events/palettes/followers/delcatty.pal b/graphics/object_events/palettes/followers/delcatty.pal new file mode 100644 index 000000000..a31726030 --- /dev/null +++ b/graphics/object_events/palettes/followers/delcatty.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 121 73 +193 145 217 +65 49 105 +225 185 57 +153 105 201 +1 1 1 +81 73 57 +233 233 249 +233 209 129 +97 73 137 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/delibird.pal b/graphics/object_events/palettes/followers/delibird.pal new file mode 100644 index 000000000..899736131 --- /dev/null +++ b/graphics/object_events/palettes/followers/delibird.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +129 105 17 +137 1 1 +145 161 177 +185 25 25 +193 209 233 +249 217 89 +73 73 73 +233 233 249 +153 1 1 +201 25 25 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/deoxys.pal b/graphics/object_events/palettes/followers/deoxys.pal new file mode 100644 index 000000000..a02008116 --- /dev/null +++ b/graphics/object_events/palettes/followers/deoxys.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +49 121 105 +121 65 129 +57 57 57 +161 177 129 +249 129 81 +225 73 65 +97 17 17 +81 89 97 +233 233 249 +1 1 1 +185 89 209 +65 169 153 +185 41 41 +33 73 65 +0 0 0 diff --git a/graphics/object_events/palettes/followers/diglett.pal b/graphics/object_events/palettes/followers/diglett.pal new file mode 100644 index 000000000..761624524 --- /dev/null +++ b/graphics/object_events/palettes/followers/diglett.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 137 3 +113 113 113 +65 49 17 +1 1 1 +65 65 65 +169 169 169 +153 33 73 +153 121 57 +209 65 105 +233 113 153 +201 201 201 +113 73 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dodrio.pal b/graphics/object_events/palettes/followers/dodrio.pal new file mode 100644 index 000000000..183414bf0 --- /dev/null +++ b/graphics/object_events/palettes/followers/dodrio.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 73 +121 81 41 +177 177 153 +129 129 129 +65 49 33 +137 97 41 +193 161 65 +1 1 1 +233 233 249 +97 25 33 +185 65 89 +225 129 145 +249 177 49 +57 57 57 +137 113 41 diff --git a/graphics/object_events/palettes/followers/donphan.pal b/graphics/object_events/palettes/followers/donphan.pal new file mode 100644 index 000000000..df25c4cb5 --- /dev/null +++ b/graphics/object_events/palettes/followers/donphan.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +121 137 153 +73 65 73 +249 249 249 +1 1 1 +25 41 57 +121 121 129 +73 89 113 +185 185 193 +137 25 25 +137 1 1 +153 153 161 +49 73 81 +185 185 201 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dragonair.pal b/graphics/object_events/palettes/followers/dragonair.pal new file mode 100644 index 000000000..5f7e4eaa8 --- /dev/null +++ b/graphics/object_events/palettes/followers/dragonair.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +209 209 209 +65 65 65 +41 121 169 +81 145 217 +233 233 249 +105 105 105 +89 177 217 +145 41 33 +161 201 249 +49 65 105 +113 177 241 +81 113 177 +241 241 241 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dragonite.pal b/graphics/object_events/palettes/followers/dragonite.pal new file mode 100644 index 000000000..c17cc58ce --- /dev/null +++ b/graphics/object_events/palettes/followers/dragonite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 65 +145 153 161 +241 177 81 +65 57 33 +57 129 113 +1 1 1 +41 97 81 +233 233 249 +185 193 209 +153 97 49 +153 153 153 +233 201 153 +97 97 97 +209 169 121 +217 137 65 diff --git a/graphics/object_events/palettes/followers/dratini.pal b/graphics/object_events/palettes/followers/dratini.pal new file mode 100644 index 000000000..b8472f998 --- /dev/null +++ b/graphics/object_events/palettes/followers/dratini.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +65 65 65 +193 193 217 +97 113 169 +129 137 209 +105 105 105 +217 217 217 +145 41 33 +153 161 225 +233 233 249 +57 65 97 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dugtrio.pal b/graphics/object_events/palettes/followers/dugtrio.pal new file mode 100644 index 000000000..19bbad592 --- /dev/null +++ b/graphics/object_events/palettes/followers/dugtrio.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 105 57 +57 41 17 +1 1 1 +113 113 113 +65 65 65 +129 17 49 +169 169 169 +153 121 57 +209 65 105 +233 121 153 +201 201 201 +113 73 33 +153 33 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dunsparce.pal b/graphics/object_events/palettes/followers/dunsparce.pal new file mode 100644 index 000000000..9cc03ea9e --- /dev/null +++ b/graphics/object_events/palettes/followers/dunsparce.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 169 1 +1 1 1 +137 185 225 +25 57 73 +217 193 1 +233 233 249 +249 225 161 +185 209 241 +249 233 113 +153 137 105 +81 161 185 +65 81 97 +65 57 57 +121 193 217 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dusclops.pal b/graphics/object_events/palettes/followers/dusclops.pal new file mode 100644 index 000000000..30d44a7a9 --- /dev/null +++ b/graphics/object_events/palettes/followers/dusclops.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 121 113 +185 185 185 +73 65 49 +161 161 161 +209 97 97 +1 1 1 +225 217 217 +105 89 81 +145 33 33 +169 177 201 +233 233 249 +185 177 177 +65 65 65 +121 121 121 +0 0 0 diff --git a/graphics/object_events/palettes/followers/duskull.pal b/graphics/object_events/palettes/followers/duskull.pal new file mode 100644 index 000000000..5f79a1d4e --- /dev/null +++ b/graphics/object_events/palettes/followers/duskull.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 121 113 +73 65 49 +1 1 1 +193 57 57 +145 33 33 +217 113 113 +81 89 113 +201 185 185 +33 41 57 +225 217 217 +105 113 145 +57 65 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dustox.pal b/graphics/object_events/palettes/followers/dustox.pal new file mode 100644 index 000000000..72e80bb45 --- /dev/null +++ b/graphics/object_events/palettes/followers/dustox.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 113 57 +73 57 113 +161 145 217 +137 185 105 +57 57 57 +169 217 89 +185 49 73 +241 105 105 +121 97 169 +105 153 41 +65 89 33 +97 73 33 +241 217 105 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/eevee.pal b/graphics/object_events/palettes/followers/eevee.pal new file mode 100644 index 000000000..c04ada4ee --- /dev/null +++ b/graphics/object_events/palettes/followers/eevee.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 65 +225 209 169 +97 65 57 +185 161 97 +129 97 49 +65 49 25 +193 145 81 +233 233 249 +1 1 1 +121 97 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ekans.pal b/graphics/object_events/palettes/followers/ekans.pal new file mode 100644 index 000000000..b163ae5c8 --- /dev/null +++ b/graphics/object_events/palettes/followers/ekans.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 161 49 +113 97 41 +201 129 193 +121 81 121 +97 49 105 +249 217 65 +1 1 1 +145 97 145 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/electrike.pal b/graphics/object_events/palettes/followers/electrike.pal new file mode 100644 index 000000000..5d0115cfa --- /dev/null +++ b/graphics/object_events/palettes/followers/electrike.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 137 65 +233 233 249 +249 209 65 +129 169 97 +33 57 9 +153 201 97 +193 145 41 +1 1 1 +113 81 25 +177 225 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/entei.pal b/graphics/object_events/palettes/followers/entei.pal new file mode 100644 index 000000000..934782cde --- /dev/null +++ b/graphics/object_events/palettes/followers/entei.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 137 25 +97 65 49 +113 137 145 +49 57 81 +249 217 57 +217 73 33 +169 25 1 +89 81 25 +169 193 209 +1 1 1 +73 49 41 +233 233 249 +89 97 121 +169 121 81 +129 89 57 diff --git a/graphics/object_events/palettes/followers/espeon.pal b/graphics/object_events/palettes/followers/espeon.pal new file mode 100644 index 000000000..814e30a6e --- /dev/null +++ b/graphics/object_events/palettes/followers/espeon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +49 33 121 +241 201 233 +233 137 177 +57 113 177 +225 177 217 +201 57 49 +81 41 121 +169 105 161 +233 233 249 +201 145 209 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/exeggutor.pal b/graphics/object_events/palettes/followers/exeggutor.pal new file mode 100644 index 000000000..9e45a52b5 --- /dev/null +++ b/graphics/object_events/palettes/followers/exeggutor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 169 41 +161 161 161 +57 81 41 +129 217 89 +201 137 89 +201 89 121 +145 97 57 +209 161 89 +233 233 249 +65 41 41 +249 201 89 +1 1 1 +89 73 65 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/exploud.pal b/graphics/object_events/palettes/followers/exploud.pal new file mode 100644 index 000000000..000d9c38f --- /dev/null +++ b/graphics/object_events/palettes/followers/exploud.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 145 49 +105 73 33 +137 129 185 +81 73 105 +41 49 65 +233 233 249 +105 97 153 +233 209 105 +1 1 1 +169 177 193 +113 33 49 +185 65 105 +177 169 225 +105 113 137 +137 41 65 diff --git a/graphics/object_events/palettes/followers/farfetchd.pal b/graphics/object_events/palettes/followers/farfetchd.pal new file mode 100644 index 000000000..5c23264c2 --- /dev/null +++ b/graphics/object_events/palettes/followers/farfetchd.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 145 33 +169 169 169 +249 201 49 +81 81 81 +153 161 113 +241 225 161 +1 1 1 +177 145 41 +73 57 41 +233 233 249 +137 113 65 +209 209 193 +177 129 73 +217 169 121 +201 185 121 diff --git a/graphics/object_events/palettes/followers/fearow.pal b/graphics/object_events/palettes/followers/fearow.pal new file mode 100644 index 000000000..04f68a619 --- /dev/null +++ b/graphics/object_events/palettes/followers/fearow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 145 33 +241 129 153 +193 65 1 +225 129 97 +185 185 185 +65 65 65 +89 57 17 +185 169 113 +233 233 249 +177 81 121 +177 113 17 +89 17 9 +225 201 169 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/feebas.pal b/graphics/object_events/palettes/followers/feebas.pal new file mode 100644 index 000000000..f5ca9d67c --- /dev/null +++ b/graphics/object_events/palettes/followers/feebas.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 121 73 +113 161 209 +73 57 33 +1 1 1 +49 81 113 +81 121 161 +233 233 249 +17 41 65 +193 65 105 +193 193 209 +169 153 89 +105 89 49 +201 185 113 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/feraligatr.pal b/graphics/object_events/palettes/followers/feraligatr.pal new file mode 100644 index 000000000..043239005 --- /dev/null +++ b/graphics/object_events/palettes/followers/feraligatr.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 41 +81 129 185 +73 65 17 +185 161 89 +161 209 241 +169 41 65 +225 193 121 +161 177 201 +17 65 97 +97 33 41 +65 105 137 +233 233 249 +1 1 1 +113 177 233 +209 49 73 diff --git a/graphics/object_events/palettes/followers/flaaffy.pal b/graphics/object_events/palettes/followers/flaaffy.pal new file mode 100644 index 000000000..3e934d7da --- /dev/null +++ b/graphics/object_events/palettes/followers/flaaffy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 185 89 +57 153 193 +97 201 241 +49 57 65 +225 145 185 +33 89 145 +185 201 225 +185 97 129 +113 41 65 +249 185 217 +233 233 249 +89 105 121 +137 153 177 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/flareon.pal b/graphics/object_events/palettes/followers/flareon.pal new file mode 100644 index 000000000..df0c348e5 --- /dev/null +++ b/graphics/object_events/palettes/followers/flareon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 49 +233 217 153 +73 57 41 +153 65 41 +217 169 73 +233 233 249 +217 89 33 +249 129 73 +1 1 1 +217 193 193 +81 65 65 +193 65 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/flygon.pal b/graphics/object_events/palettes/followers/flygon.pal new file mode 100644 index 000000000..3ed7c9537 --- /dev/null +++ b/graphics/object_events/palettes/followers/flygon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 65 +65 105 57 +185 193 209 +129 33 33 +161 193 97 +1 1 1 +249 129 153 +169 49 65 +249 249 249 +49 73 49 +193 217 153 +97 97 97 +209 65 89 +121 145 57 +0 0 0 diff --git a/graphics/object_events/palettes/followers/forretress.pal b/graphics/object_events/palettes/followers/forretress.pal new file mode 100644 index 000000000..12bb3be0e --- /dev/null +++ b/graphics/object_events/palettes/followers/forretress.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 137 137 +89 65 105 +225 209 249 +105 17 25 +185 153 185 +137 113 145 +49 49 49 +1 1 1 +217 97 65 +193 49 57 +209 185 217 +233 233 249 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gardevoir.pal b/graphics/object_events/palettes/followers/gardevoir.pal new file mode 100644 index 000000000..7fc27c511 --- /dev/null +++ b/graphics/object_events/palettes/followers/gardevoir.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 129 57 +169 169 177 +17 65 33 +73 177 89 +129 33 57 +129 129 145 +233 233 249 +241 105 105 +1 1 1 +201 201 217 +73 73 81 +105 201 129 +185 49 73 +145 145 145 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gastly.pal b/graphics/object_events/palettes/followers/gastly.pal new file mode 100644 index 000000000..e3337fe80 --- /dev/null +++ b/graphics/object_events/palettes/followers/gastly.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 137 137 +73 73 73 +65 17 57 +233 233 249 +41 41 57 +1 1 1 +113 89 153 +81 57 105 +153 9 5 +185 185 185 +137 113 161 +57 57 57 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gengar.pal b/graphics/object_events/palettes/followers/gengar.pal new file mode 100644 index 000000000..374fed5aa --- /dev/null +++ b/graphics/object_events/palettes/followers/gengar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 97 97 +153 153 153 +81 57 105 +185 185 185 +145 121 161 +41 41 57 +217 97 97 +1 1 1 +249 169 161 +105 81 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/girafarig.pal b/graphics/object_events/palettes/followers/girafarig.pal new file mode 100644 index 000000000..5d0e01229 --- /dev/null +++ b/graphics/object_events/palettes/followers/girafarig.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 81 +33 65 121 +249 209 97 +73 49 17 +185 81 105 +161 177 201 +41 49 57 +201 161 81 +233 233 249 +233 113 185 +57 113 161 +105 81 57 +1 1 1 +73 81 89 +97 113 153 diff --git a/graphics/object_events/palettes/followers/glalie.pal b/graphics/object_events/palettes/followers/glalie.pal new file mode 100644 index 000000000..8938d2810 --- /dev/null +++ b/graphics/object_events/palettes/followers/glalie.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 121 137 +1 1 1 +57 57 73 +153 161 177 +41 41 57 +41 129 193 +193 201 217 +81 81 97 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gligar.pal b/graphics/object_events/palettes/followers/gligar.pal new file mode 100644 index 000000000..74a83d573 --- /dev/null +++ b/graphics/object_events/palettes/followers/gligar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 145 169 +89 41 97 +241 193 217 +9 89 129 +161 89 137 +1 1 1 +233 233 249 +201 113 177 +137 33 57 +225 153 209 +177 73 121 +209 105 153 +169 185 161 +201 209 217 +17 97 129 diff --git a/graphics/object_events/palettes/followers/goldeen.pal b/graphics/object_events/palettes/followers/goldeen.pal new file mode 100644 index 000000000..3e9389b60 --- /dev/null +++ b/graphics/object_events/palettes/followers/goldeen.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 129 113 +177 177 177 +233 73 33 +249 233 161 +217 161 81 +97 17 1 +81 81 81 +241 129 161 +233 233 249 +1 1 1 +201 89 121 +161 33 17 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/golduck.pal b/graphics/object_events/palettes/followers/golduck.pal new file mode 100644 index 000000000..c1568e666 --- /dev/null +++ b/graphics/object_events/palettes/followers/golduck.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 185 65 +81 121 169 +241 49 113 +65 65 65 +249 233 137 +233 233 249 +1 1 1 +177 177 209 +89 17 33 +121 161 249 +249 193 81 +49 57 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/golem.pal b/graphics/object_events/palettes/followers/golem.pal new file mode 100644 index 000000000..d2852e60c --- /dev/null +++ b/graphics/object_events/palettes/followers/golem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 145 105 +89 81 57 +193 193 193 +153 153 153 +121 113 81 +49 49 49 +1 1 1 +105 17 25 +233 233 249 +193 153 121 +113 89 73 +145 113 97 +161 161 161 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gorebyss.pal b/graphics/object_events/palettes/followers/gorebyss.pal new file mode 100644 index 000000000..af3c25028 --- /dev/null +++ b/graphics/object_events/palettes/followers/gorebyss.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 121 137 +81 57 129 +209 217 233 +145 129 217 +121 105 185 +97 105 129 +49 49 65 +1 1 1 +153 169 201 +185 81 97 +201 89 113 +137 33 73 +169 153 241 +233 145 161 +233 233 249 diff --git a/graphics/object_events/palettes/followers/granbull.pal b/graphics/object_events/palettes/followers/granbull.pal new file mode 100644 index 000000000..ed5998bfc --- /dev/null +++ b/graphics/object_events/palettes/followers/granbull.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 121 137 +177 193 209 +49 65 81 +129 89 137 +1 1 1 +233 233 249 +193 145 209 +225 185 241 +161 113 169 +105 65 105 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/groudon.pal b/graphics/object_events/palettes/followers/groudon.pal new file mode 100644 index 000000000..28f20e54a --- /dev/null +++ b/graphics/object_events/palettes/followers/groudon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +121 129 145 +217 73 65 +145 153 177 +137 25 17 +57 65 81 +33 41 57 +209 193 49 +185 201 217 +1 1 1 +129 113 25 +97 105 121 +233 233 249 +89 17 9 +73 81 97 +177 33 33 diff --git a/graphics/object_events/palettes/followers/grovyle.pal b/graphics/object_events/palettes/followers/grovyle.pal new file mode 100644 index 000000000..d1df22d69 --- /dev/null +++ b/graphics/object_events/palettes/followers/grovyle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +57 121 65 +41 57 17 +1 1 1 +105 25 25 +97 153 73 +153 201 121 +153 41 41 +65 105 41 +249 217 89 +185 49 49 +113 153 73 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/grumpig.pal b/graphics/object_events/palettes/followers/grumpig.pal new file mode 100644 index 000000000..0563b27ca --- /dev/null +++ b/graphics/object_events/palettes/followers/grumpig.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +121 65 145 +73 81 89 +153 89 185 +105 25 65 +185 73 129 +49 57 65 +193 193 193 +249 249 249 +113 121 121 +193 121 225 +145 49 97 +225 97 161 +81 41 105 +137 73 169 diff --git a/graphics/object_events/palettes/followers/gulpin.pal b/graphics/object_events/palettes/followers/gulpin.pal new file mode 100644 index 000000000..28cdbf17d --- /dev/null +++ b/graphics/object_events/palettes/followers/gulpin.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 121 41 +57 97 17 +233 185 65 +57 73 81 +105 153 65 +1 1 1 +33 49 17 +169 129 57 +113 89 41 +137 193 113 +73 89 97 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gyarados.pal b/graphics/object_events/palettes/followers/gyarados.pal new file mode 100644 index 000000000..3019ff479 --- /dev/null +++ b/graphics/object_events/palettes/followers/gyarados.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 129 1 +41 129 129 +193 193 209 +137 97 33 +73 177 225 +1 1 1 +33 97 129 +249 201 105 +185 65 105 +49 57 81 +217 113 153 +233 233 249 +137 145 145 +177 137 49 +65 121 153 diff --git a/graphics/object_events/palettes/followers/hariyama.pal b/graphics/object_events/palettes/followers/hariyama.pal new file mode 100644 index 000000000..9ae8eaef4 --- /dev/null +++ b/graphics/object_events/palettes/followers/hariyama.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 121 33 +105 129 177 +25 41 89 +73 57 9 +217 185 65 +217 201 153 +185 153 105 +105 81 65 +233 233 249 +65 81 137 +185 89 17 +1 1 1 +97 33 9 +241 233 193 +209 129 57 diff --git a/graphics/object_events/palettes/followers/haunter.pal b/graphics/object_events/palettes/followers/haunter.pal new file mode 100644 index 000000000..aab1166f2 --- /dev/null +++ b/graphics/object_events/palettes/followers/haunter.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 161 +73 73 73 +233 233 249 +65 17 57 +1 1 1 +97 73 105 +65 49 57 +153 153 153 +185 185 185 +129 97 129 +97 33 89 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/heracross.pal b/graphics/object_events/palettes/followers/heracross.pal new file mode 100644 index 000000000..26bd7164c --- /dev/null +++ b/graphics/object_events/palettes/followers/heracross.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 137 9 +81 153 177 +153 89 1 +249 249 249 +17 73 97 +129 193 201 +57 121 145 +1 1 1 +241 177 65 +33 97 121 +153 169 185 +185 201 217 +57 73 81 +17 17 17 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hitmonchan.pal b/graphics/object_events/palettes/followers/hitmonchan.pal new file mode 100644 index 000000000..7c6c8e38c --- /dev/null +++ b/graphics/object_events/palettes/followers/hitmonchan.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 161 105 +113 81 57 +145 25 41 +233 233 249 +73 49 49 +161 137 201 +113 105 129 +1 1 1 +225 57 57 +153 113 65 +57 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hitmonlee.pal b/graphics/object_events/palettes/followers/hitmonlee.pal new file mode 100644 index 000000000..16a145cac --- /dev/null +++ b/graphics/object_events/palettes/followers/hitmonlee.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 121 49 +161 161 161 +1 1 1 +89 73 41 +177 145 129 +161 129 81 +201 201 209 +97 97 97 +73 49 49 +233 233 249 +121 97 57 +209 185 113 +153 137 89 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hitmontop.pal b/graphics/object_events/palettes/followers/hitmontop.pal new file mode 100644 index 000000000..cb5c2f1ee --- /dev/null +++ b/graphics/object_events/palettes/followers/hitmontop.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 73 +97 153 209 +89 73 25 +209 161 105 +233 233 249 +57 113 161 +25 57 105 +177 185 193 +1 1 1 +129 81 25 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ho_oh.pal b/graphics/object_events/palettes/followers/ho_oh.pal new file mode 100644 index 000000000..dcc241696 --- /dev/null +++ b/graphics/object_events/palettes/followers/ho_oh.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 153 1 +57 57 57 +1 1 1 +161 57 25 +129 201 81 +169 185 209 +81 25 1 +169 105 1 +97 121 121 +217 233 249 +57 97 17 +249 209 97 +217 81 49 +97 41 1 +233 233 249 diff --git a/graphics/object_events/palettes/followers/hoothoot.pal b/graphics/object_events/palettes/followers/hoothoot.pal new file mode 100644 index 000000000..bf367bd48 --- /dev/null +++ b/graphics/object_events/palettes/followers/hoothoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 113 113 +65 81 89 +1 1 1 +225 169 169 +81 41 9 +217 81 73 +137 73 57 +233 217 161 +169 185 209 +41 41 41 +177 129 89 +105 41 41 +137 89 65 +201 177 121 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hoppip.pal b/graphics/object_events/palettes/followers/hoppip.pal new file mode 100644 index 000000000..7dade5208 --- /dev/null +++ b/graphics/object_events/palettes/followers/hoppip.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 201 1 +225 105 129 +49 89 17 +97 153 65 +1 1 1 +169 65 89 +89 9 3 +113 193 81 +241 145 193 +201 89 105 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/horsea.pal b/graphics/object_events/palettes/followers/horsea.pal new file mode 100644 index 000000000..4a5c74fdb --- /dev/null +++ b/graphics/object_events/palettes/followers/horsea.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 161 97 +97 153 193 +25 57 97 +233 233 249 +65 65 65 +249 209 161 +169 185 209 +145 17 17 +41 89 137 +1 1 1 +145 185 225 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/huntail.pal b/graphics/object_events/palettes/followers/huntail.pal new file mode 100644 index 000000000..f89eadd28 --- /dev/null +++ b/graphics/object_events/palettes/followers/huntail.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +185 81 49 +153 201 225 +49 49 65 +97 153 217 +49 97 137 +233 233 249 +121 185 217 +129 49 25 +185 65 113 +153 41 89 +217 113 73 +209 217 233 +177 193 217 +0 0 0 diff --git a/graphics/object_events/palettes/followers/igglybuff.pal b/graphics/object_events/palettes/followers/igglybuff.pal new file mode 100644 index 000000000..0d5864b65 --- /dev/null +++ b/graphics/object_events/palettes/followers/igglybuff.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 145 169 +169 81 97 +249 201 217 +89 41 65 +225 113 121 +1 1 1 +233 233 249 +169 49 57 +201 113 145 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/illumise.pal b/graphics/object_events/palettes/followers/illumise.pal new file mode 100644 index 000000000..33284a660 --- /dev/null +++ b/graphics/object_events/palettes/followers/illumise.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 41 +201 121 201 +65 65 73 +161 193 233 +113 89 57 +89 161 233 +201 185 89 +49 65 105 +41 41 49 +169 169 201 +233 233 249 +105 105 113 +1 1 1 +209 177 233 +105 57 105 diff --git a/graphics/object_events/palettes/followers/ivysaur.pal b/graphics/object_events/palettes/followers/ivysaur.pal new file mode 100644 index 000000000..db3e0fda9 --- /dev/null +++ b/graphics/object_events/palettes/followers/ivysaur.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 169 17 +73 169 153 +49 89 25 +105 209 193 +201 89 121 +137 225 33 +145 65 33 +65 129 121 +241 129 161 +201 201 217 +1 1 1 +105 33 41 +233 233 249 +41 65 65 +65 65 65 diff --git a/graphics/object_events/palettes/followers/jigglypuff.pal b/graphics/object_events/palettes/followers/jigglypuff.pal new file mode 100644 index 000000000..cf6b522cc --- /dev/null +++ b/graphics/object_events/palettes/followers/jigglypuff.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +97 73 65 +113 161 249 +81 81 121 +97 41 65 +249 169 185 +145 73 89 +233 233 249 +209 113 145 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/jirachi.pal b/graphics/object_events/palettes/followers/jirachi.pal new file mode 100644 index 000000000..4611f22c6 --- /dev/null +++ b/graphics/object_events/palettes/followers/jirachi.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 153 1 +89 161 145 +121 201 177 +73 65 17 +217 185 65 +177 185 185 +33 89 81 +1 1 1 +57 129 113 +209 209 225 +169 113 9 +249 217 89 +233 233 249 +81 105 105 +137 153 153 diff --git a/graphics/object_events/palettes/followers/jolteon.pal b/graphics/object_events/palettes/followers/jolteon.pal new file mode 100644 index 000000000..1398b039a --- /dev/null +++ b/graphics/object_events/palettes/followers/jolteon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 161 33 +169 169 193 +65 57 41 +249 249 81 +1 1 1 +209 225 233 +169 105 33 +249 201 25 +73 65 81 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/jumpluff.pal b/graphics/object_events/palettes/followers/jumpluff.pal new file mode 100644 index 000000000..63bedfafd --- /dev/null +++ b/graphics/object_events/palettes/followers/jumpluff.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +41 81 137 +249 249 201 +113 113 97 +33 57 97 +97 153 225 +121 17 9 +193 185 161 +57 113 217 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/jynx.pal b/graphics/object_events/palettes/followers/jynx.pal new file mode 100644 index 000000000..10f616466 --- /dev/null +++ b/graphics/object_events/palettes/followers/jynx.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 25 +153 153 185 +105 73 137 +193 193 209 +65 57 57 +249 225 33 +137 97 193 +233 233 249 +1 1 1 +177 57 33 +249 89 73 +249 233 185 +249 209 97 +241 129 161 +201 89 121 diff --git a/graphics/object_events/palettes/followers/kabuto.pal b/graphics/object_events/palettes/followers/kabuto.pal new file mode 100644 index 000000000..aa01d9002 --- /dev/null +++ b/graphics/object_events/palettes/followers/kabuto.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +121 97 65 +49 41 41 +233 185 89 +209 65 65 +169 129 57 +89 73 57 +137 25 25 +49 57 73 +1 1 1 +153 121 73 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kabutops.pal b/graphics/object_events/palettes/followers/kabutops.pal new file mode 100644 index 000000000..10c3bb588 --- /dev/null +++ b/graphics/object_events/palettes/followers/kabutops.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 73 +89 57 33 +193 193 201 +105 105 121 +137 97 41 +153 153 153 +65 65 65 +49 41 41 +233 233 249 +1 1 1 +105 73 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kangaskhan.pal b/graphics/object_events/palettes/followers/kangaskhan.pal new file mode 100644 index 000000000..131f73a28 --- /dev/null +++ b/graphics/object_events/palettes/followers/kangaskhan.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 121 41 +89 73 41 +169 185 209 +209 169 97 +113 113 113 +65 49 33 +73 73 73 +249 201 121 +233 233 249 +185 121 113 +105 9 1 +1 1 1 +57 57 65 +129 113 145 +121 81 57 diff --git a/graphics/object_events/palettes/followers/kecleon.pal b/graphics/object_events/palettes/followers/kecleon.pal new file mode 100644 index 000000000..4adc1da0a --- /dev/null +++ b/graphics/object_events/palettes/followers/kecleon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 129 41 +233 233 249 +145 193 89 +89 81 41 +1 1 1 +185 225 105 +33 57 17 +121 169 49 +153 41 65 +249 193 65 +129 113 65 +217 169 33 +249 225 121 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kingdra.pal b/graphics/object_events/palettes/followers/kingdra.pal new file mode 100644 index 000000000..53a982441 --- /dev/null +++ b/graphics/object_events/palettes/followers/kingdra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 41 +73 121 161 +137 97 33 +169 185 209 +25 57 97 +233 233 249 +1 1 1 +193 209 233 +113 153 201 +113 17 17 +73 73 73 +217 161 57 +41 81 129 +145 193 233 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kyogre.pal b/graphics/object_events/palettes/followers/kyogre.pal new file mode 100644 index 000000000..da6327faa --- /dev/null +++ b/graphics/object_events/palettes/followers/kyogre.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 121 129 +129 113 25 +65 129 193 +153 25 25 +129 185 217 +57 57 57 +225 193 33 +97 161 193 +41 97 153 +1 1 1 +201 217 241 +201 41 41 +89 17 9 +25 57 89 +153 169 177 diff --git a/graphics/object_events/palettes/followers/lanturn.pal b/graphics/object_events/palettes/followers/lanturn.pal new file mode 100644 index 000000000..c2a012f36 --- /dev/null +++ b/graphics/object_events/palettes/followers/lanturn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 161 17 +97 137 225 +17 33 89 +185 201 217 +81 65 9 +225 233 241 +1 1 1 +185 49 41 +65 97 169 +249 209 97 +129 105 25 +113 177 241 +161 209 241 +233 233 249 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lapras.pal b/graphics/object_events/palettes/followers/lapras.pal new file mode 100644 index 000000000..cb7e199bd --- /dev/null +++ b/graphics/object_events/palettes/followers/lapras.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 153 73 +89 129 177 +105 81 17 +145 153 161 +193 201 209 +49 73 105 +49 57 57 +249 209 105 +97 177 233 +113 113 129 +233 233 249 +1 1 1 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/latias.pal b/graphics/object_events/palettes/followers/latias.pal new file mode 100644 index 000000000..e65c159fc --- /dev/null +++ b/graphics/object_events/palettes/followers/latias.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 169 1 +65 129 169 +57 65 65 +185 201 209 +97 25 17 +1 1 1 +193 65 65 +33 41 41 +105 121 121 +233 233 249 +153 169 177 +233 89 89 +129 145 153 +145 41 41 +0 0 0 diff --git a/graphics/object_events/palettes/followers/latios.pal b/graphics/object_events/palettes/followers/latios.pal new file mode 100644 index 000000000..a50cfc45c --- /dev/null +++ b/graphics/object_events/palettes/followers/latios.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 121 121 +89 193 249 +57 65 65 +49 129 193 +129 33 33 +9 57 89 +1 1 1 +185 201 209 +33 113 169 +65 153 217 +33 41 41 +233 233 249 +153 169 177 +129 145 153 +193 33 33 diff --git a/graphics/object_events/palettes/followers/ledian.pal b/graphics/object_events/palettes/followers/ledian.pal new file mode 100644 index 000000000..95b25de50 --- /dev/null +++ b/graphics/object_events/palettes/followers/ledian.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 153 89 +137 65 1 +17 129 193 +65 65 97 +241 209 81 +177 41 49 +1 1 1 +185 201 225 +249 97 121 +113 97 73 +17 105 153 +233 233 249 +209 177 81 +225 33 57 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ledyba.pal b/graphics/object_events/palettes/followers/ledyba.pal new file mode 100644 index 000000000..4540e80b7 --- /dev/null +++ b/graphics/object_events/palettes/followers/ledyba.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 177 49 +81 89 201 +129 113 49 +193 201 225 +169 33 9 +1 1 1 +105 33 41 +233 233 241 +241 225 129 +249 113 49 +225 57 33 +57 57 57 +225 201 41 +233 233 249 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lickitung.pal b/graphics/object_events/palettes/followers/lickitung.pal new file mode 100644 index 000000000..7c028935c --- /dev/null +++ b/graphics/object_events/palettes/followers/lickitung.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 129 129 +161 161 161 +233 233 249 +177 97 121 +233 185 201 +217 201 49 +217 153 177 +89 49 73 +1 1 1 +241 169 169 +169 89 137 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lileep.pal b/graphics/object_events/palettes/followers/lileep.pal new file mode 100644 index 000000000..80228afba --- /dev/null +++ b/graphics/object_events/palettes/followers/lileep.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 121 57 +41 33 89 +137 97 177 +161 49 89 +113 89 49 +209 185 73 +89 17 41 +97 57 145 +209 105 137 +161 145 217 +1 1 1 +41 25 41 +81 57 81 +193 65 97 +0 0 0 diff --git a/graphics/object_events/palettes/followers/linoone.pal b/graphics/object_events/palettes/followers/linoone.pal new file mode 100644 index 000000000..f7daf07d4 --- /dev/null +++ b/graphics/object_events/palettes/followers/linoone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 129 185 +81 73 65 +113 105 89 +169 185 209 +41 81 121 +1 1 1 +121 89 65 +105 105 121 +233 233 249 +65 41 17 +217 209 185 +185 177 169 +153 113 89 +65 73 81 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lombre.pal b/graphics/object_events/palettes/followers/lombre.pal new file mode 100644 index 000000000..22a7e49bb --- /dev/null +++ b/graphics/object_events/palettes/followers/lombre.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +9 131 3 +121 153 137 +41 81 33 +145 209 17 +233 233 249 +129 41 17 +105 153 65 +1 1 1 +233 89 65 +113 169 17 +73 113 65 +153 193 161 +169 49 25 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lotad.pal b/graphics/object_events/palettes/followers/lotad.pal new file mode 100644 index 000000000..d3457a4ec --- /dev/null +++ b/graphics/object_events/palettes/followers/lotad.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 129 25 +81 145 193 +33 57 17 +113 169 17 +41 97 137 +1 1 1 +41 97 65 +145 209 17 +233 233 249 +25 49 89 +233 185 65 +169 121 25 +97 65 9 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ludicolo.pal b/graphics/object_events/palettes/followers/ludicolo.pal new file mode 100644 index 000000000..87294c677 --- /dev/null +++ b/graphics/object_events/palettes/followers/ludicolo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 137 57 +161 161 161 +33 57 17 +121 177 33 +97 73 49 +1 1 1 +145 209 17 +137 105 81 +233 233 249 +209 129 9 +49 41 9 +137 65 1 +209 177 65 +233 201 121 +65 65 73 diff --git a/graphics/object_events/palettes/followers/lugia.pal b/graphics/object_events/palettes/followers/lugia.pal new file mode 100644 index 000000000..adf9c9f0e --- /dev/null +++ b/graphics/object_events/palettes/followers/lugia.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +201 209 217 +41 49 113 +41 121 193 +73 73 89 +153 161 169 +233 233 249 +49 97 193 +137 169 225 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/luvdisc.pal b/graphics/object_events/palettes/followers/luvdisc.pal new file mode 100644 index 000000000..4275e201b --- /dev/null +++ b/graphics/object_events/palettes/followers/luvdisc.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 129 153 +97 105 129 +249 193 185 +1 1 1 +49 49 65 +233 145 145 +209 97 137 +137 33 73 +233 233 249 +249 177 145 +161 49 97 +217 105 153 +233 153 161 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/machamp.pal b/graphics/object_events/palettes/followers/machamp.pal new file mode 100644 index 000000000..a84bfe10a --- /dev/null +++ b/graphics/object_events/palettes/followers/machamp.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 25 +129 129 145 +249 209 9 +233 201 153 +65 65 65 +177 153 113 +209 185 73 +233 233 249 +193 41 65 +241 233 113 +161 161 201 +81 89 105 +201 201 201 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/machoke.pal b/graphics/object_events/palettes/followers/machoke.pal new file mode 100644 index 000000000..4585ebaa7 --- /dev/null +++ b/graphics/object_events/palettes/followers/machoke.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 25 +129 129 145 +73 73 73 +249 209 9 +233 201 153 +177 153 113 +97 105 129 +193 41 65 +1 1 1 +233 233 249 +161 161 201 +209 161 17 +89 89 89 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/machop.pal b/graphics/object_events/palettes/followers/machop.pal new file mode 100644 index 000000000..828328b78 --- /dev/null +++ b/graphics/object_events/palettes/followers/machop.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 129 137 +233 201 153 +57 57 57 +1 1 1 +193 41 65 +177 153 113 +233 233 249 +73 97 105 +137 169 185 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/magby.pal b/graphics/object_events/palettes/followers/magby.pal new file mode 100644 index 000000000..8a53eb769 --- /dev/null +++ b/graphics/object_events/palettes/followers/magby.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 153 33 +105 73 1 +177 185 193 +129 1 1 +65 65 73 +1 1 1 +153 41 57 +249 81 121 +233 233 249 +241 193 57 +81 89 105 +209 41 57 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/magcargo.pal b/graphics/object_events/palettes/followers/magcargo.pal new file mode 100644 index 000000000..04fdccbae --- /dev/null +++ b/graphics/object_events/palettes/followers/magcargo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 121 25 +41 49 57 +1 1 1 +177 57 49 +73 1 1 +105 113 137 +249 153 1 +73 81 97 +249 209 89 +225 81 73 +121 25 17 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/magikarp.pal b/graphics/object_events/palettes/followers/magikarp.pal new file mode 100644 index 000000000..d29c0357d --- /dev/null +++ b/graphics/object_events/palettes/followers/magikarp.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 25 +185 65 105 +145 145 145 +137 41 25 +1 1 1 +81 33 17 +249 193 17 +217 113 153 +193 193 209 +233 233 249 +121 33 65 +233 169 73 +233 97 65 +49 49 49 +201 57 17 diff --git a/graphics/object_events/palettes/followers/magmar.pal b/graphics/object_events/palettes/followers/magmar.pal new file mode 100644 index 000000000..ce9d6c30d --- /dev/null +++ b/graphics/object_events/palettes/followers/magmar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 121 9 +49 49 49 +145 145 145 +201 89 129 +193 193 209 +185 57 25 +129 1 1 +241 209 1 +241 185 201 +233 233 249 +113 81 17 +225 153 17 +105 33 17 +1 1 1 +241 73 33 diff --git a/graphics/object_events/palettes/followers/magnemite.pal b/graphics/object_events/palettes/followers/magnemite.pal new file mode 100644 index 000000000..041b62f37 --- /dev/null +++ b/graphics/object_events/palettes/followers/magnemite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 129 145 +193 209 217 +81 81 81 +73 137 233 +233 65 65 +153 169 185 +57 57 57 +1 1 1 +113 113 121 +233 233 249 +177 177 185 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/makuhita.pal b/graphics/object_events/palettes/followers/makuhita.pal new file mode 100644 index 000000000..681982bc5 --- /dev/null +++ b/graphics/object_events/palettes/followers/makuhita.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 153 57 +73 57 9 +57 65 81 +137 41 65 +225 201 105 +185 65 105 +25 33 41 +1 1 1 +113 97 17 +81 89 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/manectric.pal b/graphics/object_events/palettes/followers/manectric.pal new file mode 100644 index 000000000..5d93d7697 --- /dev/null +++ b/graphics/object_events/palettes/followers/manectric.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 145 33 +81 153 185 +97 73 49 +249 249 145 +193 57 57 +1 1 1 +129 185 217 +33 121 153 +161 217 249 +25 49 89 +225 193 73 +161 161 161 +233 233 249 +65 65 73 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mankey.pal b/graphics/object_events/palettes/followers/mankey.pal new file mode 100644 index 000000000..91522b4e5 --- /dev/null +++ b/graphics/object_events/palettes/followers/mankey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 49 +241 129 161 +73 65 57 +1 1 1 +145 17 49 +153 121 97 +233 233 249 +177 105 129 +177 177 209 +177 169 129 +233 217 137 +137 105 57 +121 41 65 +209 177 129 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mantine.pal b/graphics/object_events/palettes/followers/mantine.pal new file mode 100644 index 000000000..62f32dc56 --- /dev/null +++ b/graphics/object_events/palettes/followers/mantine.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 137 153 +217 209 225 +17 65 105 +81 121 185 +177 169 185 +49 49 73 +209 233 249 +49 89 145 +1 1 1 +121 161 217 +57 81 121 +137 177 217 +41 65 73 +233 233 249 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mareep.pal b/graphics/object_events/palettes/followers/mareep.pal new file mode 100644 index 000000000..04d1d5345 --- /dev/null +++ b/graphics/object_events/palettes/followers/mareep.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 161 1 +1 1 1 +105 89 9 +169 145 73 +249 249 177 +49 57 65 +81 129 185 +89 105 121 +241 201 81 +121 169 233 +233 233 249 +225 113 1 +137 5 7 +233 209 105 +249 169 1 diff --git a/graphics/object_events/palettes/followers/marshtomp.pal b/graphics/object_events/palettes/followers/marshtomp.pal new file mode 100644 index 000000000..828789299 --- /dev/null +++ b/graphics/object_events/palettes/followers/marshtomp.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +241 129 17 +129 161 177 +73 57 17 +33 81 89 +65 129 129 +233 233 249 +89 185 177 +161 73 17 +1 1 1 +177 193 209 +193 89 17 +97 121 129 +49 81 97 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/masquerain.pal b/graphics/object_events/palettes/followers/masquerain.pal new file mode 100644 index 000000000..366b9fb54 --- /dev/null +++ b/graphics/object_events/palettes/followers/masquerain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +81 81 89 +137 177 201 +65 81 113 +161 209 225 +137 33 89 +161 65 49 +217 105 121 +105 25 33 +225 161 185 +89 113 153 +233 233 249 +201 89 73 +177 217 233 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mawile.pal b/graphics/object_events/palettes/followers/mawile.pal new file mode 100644 index 000000000..6751c3e12 --- /dev/null +++ b/graphics/object_events/palettes/followers/mawile.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 169 89 +81 73 57 +177 185 201 +249 217 129 +129 105 73 +193 57 57 +145 145 145 +41 41 41 +233 233 249 +1 1 1 +113 113 113 +73 73 73 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/medicham.pal b/graphics/object_events/palettes/followers/medicham.pal new file mode 100644 index 000000000..c0ba10536 --- /dev/null +++ b/graphics/object_events/palettes/followers/medicham.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 129 25 +152 152 145 +113 81 17 +193 193 185 +57 57 65 +1 1 1 +185 81 105 +233 137 161 +233 233 249 +249 217 89 +113 113 97 +49 25 33 +193 161 17 +145 57 89 +201 97 129 diff --git a/graphics/object_events/palettes/followers/meditite.pal b/graphics/object_events/palettes/followers/meditite.pal new file mode 100644 index 000000000..5c7838281 --- /dev/null +++ b/graphics/object_events/palettes/followers/meditite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 137 153 +217 225 233 +57 57 65 +1 1 1 +65 105 153 +89 145 193 +81 81 89 +185 49 41 +177 185 201 +161 161 177 +41 65 97 +233 233 249 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/meganium.pal b/graphics/object_events/palettes/followers/meganium.pal new file mode 100644 index 000000000..0e95eb9ff --- /dev/null +++ b/graphics/object_events/palettes/followers/meganium.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 41 +201 177 185 +137 97 1 +129 161 89 +177 81 121 +161 185 81 +233 233 249 +73 89 41 +105 41 81 +241 209 49 +1 1 1 +193 209 81 +209 97 145 +105 105 65 +185 177 201 diff --git a/graphics/object_events/palettes/followers/meowth.pal b/graphics/object_events/palettes/followers/meowth.pal new file mode 100644 index 000000000..1c7fd519a --- /dev/null +++ b/graphics/object_events/palettes/followers/meowth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 129 49 +81 57 25 +217 177 65 +121 105 81 +1 1 1 +169 121 81 +153 81 25 +169 33 81 +241 217 129 +249 201 33 +177 89 81 +217 145 25 +65 57 49 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/metang.pal b/graphics/object_events/palettes/followers/metang.pal new file mode 100644 index 000000000..819ca143b --- /dev/null +++ b/graphics/object_events/palettes/followers/metang.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 129 169 +193 193 193 +65 65 65 +105 145 209 +233 233 249 +121 33 33 +1 1 1 +150 150 161 +41 41 49 +65 97 121 +145 193 233 +153 217 241 +255 255 255 +33 65 81 +153 41 41 diff --git a/graphics/object_events/palettes/followers/mew.pal b/graphics/object_events/palettes/followers/mew.pal new file mode 100644 index 000000000..d99299b99 --- /dev/null +++ b/graphics/object_events/palettes/followers/mew.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 129 129 +201 201 249 +97 97 97 +1 1 1 +233 233 249 +177 105 169 +89 49 81 +249 209 233 +217 161 185 +113 89 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mewtwo.pal b/graphics/object_events/palettes/followers/mewtwo.pal new file mode 100644 index 000000000..6f5afee0f --- /dev/null +++ b/graphics/object_events/palettes/followers/mewtwo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 121 153 +137 73 137 +217 201 217 +65 65 65 +153 153 153 +177 153 193 +65 49 81 +185 89 209 +97 97 97 +233 233 249 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mightyena.pal b/graphics/object_events/palettes/followers/mightyena.pal new file mode 100644 index 000000000..38610816d --- /dev/null +++ b/graphics/object_events/palettes/followers/mightyena.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 113 113 +1 1 1 +49 57 57 +145 153 161 +225 65 65 +177 185 193 +81 81 89 +129 33 33 +249 217 89 +129 121 137 +169 161 185 +65 57 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/milotic.pal b/graphics/object_events/palettes/followers/milotic.pal new file mode 100644 index 000000000..d012770f9 --- /dev/null +++ b/graphics/object_events/palettes/followers/milotic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 169 65 +33 57 89 +233 217 169 +241 105 113 +129 9 73 +81 129 169 +81 73 153 +185 49 81 +1 1 1 +113 161 209 +97 89 65 +249 241 217 +241 105 153 +57 89 129 +185 49 113 diff --git a/graphics/object_events/palettes/followers/miltank.pal b/graphics/object_events/palettes/followers/miltank.pal new file mode 100644 index 000000000..e64e3f03d --- /dev/null +++ b/graphics/object_events/palettes/followers/miltank.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 145 89 +81 65 33 +169 185 209 +41 65 81 +1 1 1 +121 73 81 +33 49 65 +233 233 249 +209 137 161 +73 97 121 +177 97 121 +241 169 193 +57 65 73 +89 41 57 +209 185 121 diff --git a/graphics/object_events/palettes/followers/misdreavus.pal b/graphics/object_events/palettes/followers/misdreavus.pal new file mode 100644 index 000000000..64f7bcb41 --- /dev/null +++ b/graphics/object_events/palettes/followers/misdreavus.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 121 1 +33 81 97 +201 73 105 +105 129 161 +33 49 89 +97 1 3 +65 105 137 +217 97 161 +233 233 249 +225 177 41 +1 1 1 +193 65 129 +81 113 153 +89 9 3 +0 0 0 diff --git a/graphics/object_events/palettes/followers/moltres.pal b/graphics/object_events/palettes/followers/moltres.pal new file mode 100644 index 000000000..524c5a1d4 --- /dev/null +++ b/graphics/object_events/palettes/followers/moltres.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 137 33 +177 177 209 +65 65 65 +249 185 33 +233 73 49 +1 1 1 +161 25 41 +249 137 121 +233 233 249 +65 49 49 +185 113 97 +249 201 121 +233 177 81 +201 129 57 +113 73 57 diff --git a/graphics/object_events/palettes/followers/mr_mime.pal b/graphics/object_events/palettes/followers/mr_mime.pal new file mode 100644 index 000000000..156deec2c --- /dev/null +++ b/graphics/object_events/palettes/followers/mr_mime.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 145 161 +33 65 89 +241 193 201 +145 65 81 +41 49 65 +1 1 1 +49 97 113 +233 233 249 +169 105 121 +201 201 233 +209 65 89 +105 105 105 +193 145 145 +73 49 57 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mudkip.pal b/graphics/object_events/palettes/followers/mudkip.pal new file mode 100644 index 000000000..ad2e4fc26 --- /dev/null +++ b/graphics/object_events/palettes/followers/mudkip.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +241 129 17 +73 57 17 +73 137 177 +41 73 121 +233 233 249 +65 65 81 +89 177 217 +1 1 1 +113 105 145 +161 73 17 +177 177 209 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/murkrow.pal b/graphics/object_events/palettes/followers/murkrow.pal new file mode 100644 index 000000000..3f8fb5c91 --- /dev/null +++ b/graphics/object_events/palettes/followers/murkrow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 25 +17 33 73 +121 153 193 +49 49 49 +49 65 113 +1 1 1 +233 233 249 +201 57 49 +145 33 25 +113 89 9 +177 193 217 +225 177 41 +73 89 137 +33 49 97 +0 0 0 diff --git a/graphics/object_events/palettes/followers/natu.pal b/graphics/object_events/palettes/followers/natu.pal new file mode 100644 index 000000000..e3133ef1c --- /dev/null +++ b/graphics/object_events/palettes/followers/natu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 161 73 +49 49 49 +113 129 153 +129 193 113 +65 81 105 +121 17 33 +1 1 1 +97 81 1 +185 201 225 +217 73 89 +241 209 97 +233 233 249 +177 41 57 +185 153 49 +57 81 33 diff --git a/graphics/object_events/palettes/followers/nidoking.pal b/graphics/object_events/palettes/followers/nidoking.pal new file mode 100644 index 000000000..0f1679f32 --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoking.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +25 169 153 +201 201 201 +217 153 241 +49 113 105 +185 129 185 +1 1 1 +65 49 81 +241 233 225 +153 105 161 +89 25 25 +161 161 161 +233 233 249 +169 169 153 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidoqueen.pal b/graphics/object_events/palettes/followers/nidoqueen.pal new file mode 100644 index 000000000..9fb7ed22a --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoqueen.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +97 137 177 +89 65 49 +201 201 201 +241 193 121 +73 65 121 +233 233 249 +97 41 25 +129 177 217 +193 161 81 +169 97 49 +169 201 241 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidoran_f.pal b/graphics/object_events/palettes/followers/nidoran_f.pal new file mode 100644 index 000000000..a268e55b6 --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoran_f.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 169 137 +49 89 73 +153 241 225 +161 81 105 +17 153 241 +1 1 1 +217 105 137 +161 33 17 +65 81 137 +233 233 249 +161 161 161 +241 121 113 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidorina.pal b/graphics/object_events/palettes/followers/nidorina.pal new file mode 100644 index 000000000..f59ffda8b --- /dev/null +++ b/graphics/object_events/palettes/followers/nidorina.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 137 209 +113 193 225 +1 1 1 +49 89 105 +153 225 249 +169 169 193 +161 41 33 +81 161 177 +241 161 153 +233 233 249 +49 97 137 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nincada.pal b/graphics/object_events/palettes/followers/nincada.pal new file mode 100644 index 000000000..359d3480f --- /dev/null +++ b/graphics/object_events/palettes/followers/nincada.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 145 65 +33 73 25 +153 145 161 +97 89 113 +121 177 89 +49 41 65 +57 113 41 +233 233 249 +185 177 193 +97 89 65 +121 113 137 +1 1 1 +145 129 89 +65 57 41 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ninetales.pal b/graphics/object_events/palettes/followers/ninetales.pal new file mode 100644 index 000000000..393b1073b --- /dev/null +++ b/graphics/object_events/palettes/followers/ninetales.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 169 1 +193 65 105 +1 1 1 +89 57 49 +233 233 249 +185 161 105 +145 113 73 +233 217 153 +137 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ninjask.pal b/graphics/object_events/palettes/followers/ninjask.pal new file mode 100644 index 000000000..c1e058ac4 --- /dev/null +++ b/graphics/object_events/palettes/followers/ninjask.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 145 65 +201 201 201 +193 57 57 +233 193 49 +113 33 33 +233 233 249 +97 89 113 +1 1 1 +145 97 17 +57 49 73 +241 225 73 +217 217 225 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/noctowl.pal b/graphics/object_events/palettes/followers/noctowl.pal new file mode 100644 index 000000000..05f350df8 --- /dev/null +++ b/graphics/object_events/palettes/followers/noctowl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 97 +97 65 17 +169 185 209 +201 185 121 +65 81 89 +225 169 169 +105 41 41 +209 161 113 +201 113 113 +233 233 249 +225 217 161 +97 73 57 +129 97 81 +1 1 1 +169 49 49 diff --git a/graphics/object_events/palettes/followers/nosepass.pal b/graphics/object_events/palettes/followers/nosepass.pal new file mode 100644 index 000000000..391eef08c --- /dev/null +++ b/graphics/object_events/palettes/followers/nosepass.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +17 33 73 +209 49 73 +113 25 41 +65 73 81 +81 129 185 +41 49 57 +41 57 97 +113 177 233 +65 89 137 +161 33 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/numel.pal b/graphics/object_events/palettes/followers/numel.pal new file mode 100644 index 000000000..ba92ab59c --- /dev/null +++ b/graphics/object_events/palettes/followers/numel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 161 49 +217 225 185 +137 201 65 +49 81 25 +73 121 33 +177 185 137 +89 73 57 +1 1 1 +249 249 249 +217 185 73 +241 217 89 +121 97 73 +185 145 57 +65 73 81 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nuzleaf.pal b/graphics/object_events/palettes/followers/nuzleaf.pal new file mode 100644 index 000000000..ae9bbd957 --- /dev/null +++ b/graphics/object_events/palettes/followers/nuzleaf.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 161 9 +89 73 9 +233 233 249 +1 1 1 +65 105 9 +33 57 9 +145 209 17 +97 65 33 +161 137 65 +161 113 49 +233 201 121 +73 49 25 +121 81 41 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/octillery.pal b/graphics/object_events/palettes/followers/octillery.pal new file mode 100644 index 000000000..78b4092d3 --- /dev/null +++ b/graphics/object_events/palettes/followers/octillery.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 161 25 +129 105 17 +153 161 177 +137 1 1 +1 1 1 +137 25 1 +201 89 73 +233 233 249 +249 217 89 +177 41 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/omanyte.pal b/graphics/object_events/palettes/followers/omanyte.pal new file mode 100644 index 000000000..121eb8cc6 --- /dev/null +++ b/graphics/object_events/palettes/followers/omanyte.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +57 129 161 +233 201 153 +81 65 57 +73 169 217 +145 113 73 +1 1 1 +121 201 241 +177 153 105 +233 233 249 +169 169 177 +105 105 105 +49 73 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/omastar.pal b/graphics/object_events/palettes/followers/omastar.pal new file mode 100644 index 000000000..1f042f749 --- /dev/null +++ b/graphics/object_events/palettes/followers/omastar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 145 65 +57 129 161 +81 65 57 +249 225 105 +233 225 185 +129 105 81 +177 153 105 +73 169 217 +121 201 241 +233 201 153 +1 1 1 +105 105 105 +49 65 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pelipper.pal b/graphics/object_events/palettes/followers/pelipper.pal new file mode 100644 index 000000000..a1e730a7e --- /dev/null +++ b/graphics/object_events/palettes/followers/pelipper.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 41 +81 137 169 +105 81 17 +180 193 211 +201 177 57 +81 81 89 +105 161 217 +233 233 249 +145 145 145 +1 1 1 +65 105 145 +225 209 73 +137 105 25 +137 137 153 +49 73 113 diff --git a/graphics/object_events/palettes/followers/persian.pal b/graphics/object_events/palettes/followers/persian.pal new file mode 100644 index 000000000..16d9b1527 --- /dev/null +++ b/graphics/object_events/palettes/followers/persian.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 137 3 +1 1 1 +81 57 25 +145 129 73 +185 65 113 +233 233 249 +193 169 121 +241 217 129 +145 105 81 +161 129 105 +65 57 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/phanpy.pal b/graphics/object_events/palettes/followers/phanpy.pal new file mode 100644 index 000000000..fa6f2ba20 --- /dev/null +++ b/graphics/object_events/palettes/followers/phanpy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +33 57 105 +185 201 217 +137 1 1 +81 129 177 +153 33 33 +249 249 249 +137 177 209 +209 49 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pichu.pal b/graphics/object_events/palettes/followers/pichu.pal new file mode 100644 index 000000000..ec7bc91d9 --- /dev/null +++ b/graphics/object_events/palettes/followers/pichu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 57 +81 81 81 +225 121 161 +49 49 49 +1 1 1 +97 89 41 +193 169 65 +193 81 137 +233 233 249 +249 217 105 +65 65 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pidgeot.pal b/graphics/object_events/palettes/followers/pidgeot.pal new file mode 100644 index 000000000..22828bc3f --- /dev/null +++ b/graphics/object_events/palettes/followers/pidgeot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 137 1 +241 105 225 +145 89 49 +1 1 1 +177 65 97 +193 153 65 +129 25 113 +209 113 41 +233 233 249 +241 209 113 +249 193 49 +81 57 25 +225 113 113 +201 73 33 +161 161 161 diff --git a/graphics/object_events/palettes/followers/pidgeotto.pal b/graphics/object_events/palettes/followers/pidgeotto.pal new file mode 100644 index 000000000..03725fd2b --- /dev/null +++ b/graphics/object_events/palettes/followers/pidgeotto.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 129 33 +153 153 153 +97 65 33 +233 233 249 +225 113 113 +241 209 113 +241 137 225 +201 73 33 +161 33 161 +193 153 65 +1 1 1 +177 81 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pidgey.pal b/graphics/object_events/palettes/followers/pidgey.pal new file mode 100644 index 000000000..f843a7e59 --- /dev/null +++ b/graphics/object_events/palettes/followers/pidgey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 65 +217 145 177 +97 65 33 +241 209 113 +233 233 249 +201 113 33 +153 57 97 +1 1 1 +185 185 185 +185 89 33 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pikachu.pal b/graphics/object_events/palettes/followers/pikachu.pal new file mode 100644 index 000000000..987f609d0 --- /dev/null +++ b/graphics/object_events/palettes/followers/pikachu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 161 65 +113 81 57 +233 233 249 +49 49 49 +249 209 81 +153 113 57 +1 1 1 +201 89 57 +145 57 25 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/piloswine.pal b/graphics/object_events/palettes/followers/piloswine.pal new file mode 100644 index 000000000..a9806b257 --- /dev/null +++ b/graphics/object_events/palettes/followers/piloswine.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 89 +121 73 49 +169 185 209 +73 41 9 +1 1 1 +201 97 113 +49 49 65 +233 137 161 +233 233 249 +153 105 65 +145 41 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pineco.pal b/graphics/object_events/palettes/followers/pineco.pal new file mode 100644 index 000000000..b01042837 --- /dev/null +++ b/graphics/object_events/palettes/followers/pineco.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +49 129 169 +17 81 129 +233 233 249 +1 1 1 +201 65 73 +97 113 153 +81 177 193 +17 89 129 +161 177 201 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/politoed.pal b/graphics/object_events/palettes/followers/politoed.pal new file mode 100644 index 000000000..113eb9ff2 --- /dev/null +++ b/graphics/object_events/palettes/followers/politoed.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 121 9 +249 129 177 +105 185 65 +49 81 17 +209 185 65 +189 203 220 +33 65 81 +1 1 1 +137 57 73 +201 89 137 +65 113 121 +89 153 57 +233 233 249 +153 217 113 +241 201 73 diff --git a/graphics/object_events/palettes/followers/poliwag.pal b/graphics/object_events/palettes/followers/poliwag.pal new file mode 100644 index 000000000..207b398d6 --- /dev/null +++ b/graphics/object_events/palettes/followers/poliwag.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +121 121 121 +89 89 89 +233 233 233 +121 129 233 +25 41 57 +1 1 1 +65 89 153 +97 49 65 +177 177 209 +241 121 161 +177 65 105 +49 49 49 +233 233 249 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/poochyena.pal b/graphics/object_events/palettes/followers/poochyena.pal new file mode 100644 index 000000000..53d5307c0 --- /dev/null +++ b/graphics/object_events/palettes/followers/poochyena.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 113 113 +49 57 57 +1 1 1 +193 57 57 +81 81 89 +185 185 185 +137 41 41 +145 145 145 +249 217 89 +65 57 81 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/porygon.pal b/graphics/object_events/palettes/followers/porygon.pal new file mode 100644 index 000000000..a9a1804e9 --- /dev/null +++ b/graphics/object_events/palettes/followers/porygon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +49 137 153 +41 97 97 +81 217 217 +1 1 1 +177 49 105 +41 65 73 +249 153 209 +233 105 161 +233 233 249 +41 185 193 +97 25 49 +161 185 201 +209 65 137 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/porygon2.pal b/graphics/object_events/palettes/followers/porygon2.pal new file mode 100644 index 000000000..b70e67bb6 --- /dev/null +++ b/graphics/object_events/palettes/followers/porygon2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 153 193 +17 73 121 +145 233 249 +1 1 1 +113 17 49 +225 81 137 +249 153 209 +169 41 81 +41 121 169 +185 201 217 +249 249 249 +89 185 217 +193 57 97 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/primeape.pal b/graphics/object_events/palettes/followers/primeape.pal new file mode 100644 index 000000000..38020a677 --- /dev/null +++ b/graphics/object_events/palettes/followers/primeape.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 49 +241 129 161 +65 57 49 +1 1 1 +105 105 105 +209 169 113 +233 233 249 +121 41 65 +177 177 209 +137 105 57 +233 217 137 +153 121 97 +177 105 129 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/quilava.pal b/graphics/object_events/palettes/followers/quilava.pal new file mode 100644 index 000000000..20abfb6b8 --- /dev/null +++ b/graphics/object_events/palettes/followers/quilava.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 145 81 +73 65 17 +49 137 153 +241 201 41 +161 17 25 +33 81 89 +209 177 89 +217 81 81 +233 233 249 +25 57 73 +41 113 121 +249 209 97 +185 49 49 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/qwilfish.pal b/graphics/object_events/palettes/followers/qwilfish.pal new file mode 100644 index 000000000..3606f4b28 --- /dev/null +++ b/graphics/object_events/palettes/followers/qwilfish.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 153 65 +73 145 193 +57 57 25 +225 209 137 +17 49 105 +1 1 1 +233 233 249 +33 73 129 +249 129 161 +153 33 57 +49 105 153 +193 177 97 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/raichu.pal b/graphics/object_events/palettes/followers/raichu.pal new file mode 100644 index 000000000..a131215ea --- /dev/null +++ b/graphics/object_events/palettes/followers/raichu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 121 33 +1 1 1 +113 73 41 +209 177 25 +249 233 209 +121 105 73 +249 225 9 +73 41 25 +249 145 1 +249 193 65 +233 233 249 +137 89 25 +193 177 129 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/raikou.pal b/graphics/object_events/palettes/followers/raikou.pal new file mode 100644 index 000000000..07b95381f --- /dev/null +++ b/graphics/object_events/palettes/followers/raikou.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 121 17 +65 33 97 +161 185 201 +33 57 65 +49 81 105 +185 49 49 +1 1 1 +233 233 249 +233 185 65 +161 89 185 +73 89 89 +113 57 145 +89 65 41 +57 97 97 +153 201 201 diff --git a/graphics/object_events/palettes/followers/raticate.pal b/graphics/object_events/palettes/followers/raticate.pal new file mode 100644 index 000000000..75f836e6c --- /dev/null +++ b/graphics/object_events/palettes/followers/raticate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 145 57 +225 201 169 +89 65 25 +185 169 113 +233 233 249 +137 49 121 +201 201 201 +177 97 57 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rattata.pal b/graphics/object_events/palettes/followers/rattata.pal new file mode 100644 index 000000000..79c244a7b --- /dev/null +++ b/graphics/object_events/palettes/followers/rattata.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 81 +169 129 217 +57 49 89 +233 217 177 +185 169 129 +217 217 217 +225 57 33 +105 89 153 +233 233 249 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rayquaza.pal b/graphics/object_events/palettes/followers/rayquaza.pal new file mode 100644 index 000000000..93c0e8a41 --- /dev/null +++ b/graphics/object_events/palettes/followers/rayquaza.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 145 81 +49 105 49 +153 169 177 +153 25 25 +121 185 113 +49 49 49 +241 201 49 +201 217 241 +153 225 145 +193 161 41 +145 121 25 +201 41 41 +17 65 25 +89 17 9 +1 1 1 diff --git a/graphics/object_events/palettes/followers/regice.pal b/graphics/object_events/palettes/followers/regice.pal new file mode 100644 index 000000000..ea013d68a --- /dev/null +++ b/graphics/object_events/palettes/followers/regice.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 169 89 +97 145 185 +177 225 249 +233 233 137 +41 73 97 +217 201 113 +121 169 209 +1 1 1 +65 105 145 +145 185 225 +201 241 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/regirock.pal b/graphics/object_events/palettes/followers/regirock.pal new file mode 100644 index 000000000..bbbdd8d21 --- /dev/null +++ b/graphics/object_events/palettes/followers/regirock.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 113 89 +1 1 1 +137 65 41 +161 145 129 +57 41 33 +201 185 169 +113 89 81 +217 113 73 +233 217 201 +177 89 57 +177 161 145 +97 41 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/registeel.pal b/graphics/object_events/palettes/followers/registeel.pal new file mode 100644 index 000000000..f01e24f60 --- /dev/null +++ b/graphics/object_events/palettes/followers/registeel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 121 121 +57 65 65 +185 201 209 +1 1 1 +193 57 57 +33 41 41 +129 145 153 +81 89 97 +209 105 105 +233 233 249 +153 169 177 +97 41 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/relicanth.pal b/graphics/object_events/palettes/followers/relicanth.pal new file mode 100644 index 000000000..9caac6b77 --- /dev/null +++ b/graphics/object_events/palettes/followers/relicanth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 113 97 +97 65 57 +1 1 1 +177 41 81 +57 41 33 +121 89 73 +169 153 129 +193 177 153 +73 73 97 +217 201 169 +49 49 65 +73 49 41 +105 97 81 +137 121 105 +0 0 0 diff --git a/graphics/object_events/palettes/followers/remoraid.pal b/graphics/object_events/palettes/followers/remoraid.pal new file mode 100644 index 000000000..379f4e4f6 --- /dev/null +++ b/graphics/object_events/palettes/followers/remoraid.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 121 161 +169 185 209 +105 25 81 +233 233 249 +73 73 73 +1 1 1 +193 209 233 +25 57 105 +113 153 201 +41 81 129 +145 193 233 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rhydon.pal b/graphics/object_events/palettes/followers/rhydon.pal new file mode 100644 index 000000000..d8b41c6ea --- /dev/null +++ b/graphics/object_events/palettes/followers/rhydon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 49 +185 185 185 +65 57 25 +137 137 137 +217 217 217 +121 105 57 +137 33 57 +217 177 89 +1 1 1 +65 65 65 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/roselia.pal b/graphics/object_events/palettes/followers/roselia.pal new file mode 100644 index 000000000..4a0189e95 --- /dev/null +++ b/graphics/object_events/palettes/followers/roselia.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 145 17 +33 57 17 +81 145 209 +25 49 89 +41 97 137 +233 185 65 +1 1 1 +89 17 49 +201 65 113 +169 129 57 +57 97 17 +145 41 81 +161 201 145 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sableye.pal b/graphics/object_events/palettes/followers/sableye.pal new file mode 100644 index 000000000..beadb4681 --- /dev/null +++ b/graphics/object_events/palettes/followers/sableye.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +25 153 121 +65 49 105 +233 233 249 +81 121 185 +233 89 113 +49 81 137 +121 161 225 +193 57 57 +1 1 1 +121 97 177 +89 65 145 +145 129 217 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/salamence.pal b/graphics/object_events/palettes/followers/salamence.pal new file mode 100644 index 000000000..76afcbc8f --- /dev/null +++ b/graphics/object_events/palettes/followers/salamence.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 145 169 +57 57 65 +81 185 201 +161 65 65 +1 1 1 +233 233 249 +193 81 97 +97 33 33 +129 129 145 +49 73 113 +161 161 177 +153 201 209 +217 89 121 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sandshrew.pal b/graphics/object_events/palettes/followers/sandshrew.pal new file mode 100644 index 000000000..ac1703261 --- /dev/null +++ b/graphics/object_events/palettes/followers/sandshrew.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +129 177 169 +185 137 41 +161 161 161 +225 217 169 +97 65 33 +185 169 137 +1 1 1 +33 97 121 +217 169 57 +233 233 249 +121 105 89 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sandslash.pal b/graphics/object_events/palettes/followers/sandslash.pal new file mode 100644 index 000000000..d11a2ce3b --- /dev/null +++ b/graphics/object_events/palettes/followers/sandslash.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 131 3 +153 153 153 +97 65 33 +233 225 153 +89 89 89 +177 177 177 +201 137 49 +1 1 1 +233 233 249 +137 97 41 +49 33 17 +41 105 129 +225 169 65 +193 161 137 +161 105 33 diff --git a/graphics/object_events/palettes/followers/sceptile.pal b/graphics/object_events/palettes/followers/sceptile.pal new file mode 100644 index 000000000..806146f2d --- /dev/null +++ b/graphics/object_events/palettes/followers/sceptile.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 145 49 +41 81 17 +161 209 105 +105 25 25 +1 1 1 +201 161 57 +121 105 25 +65 49 9 +129 177 73 +249 217 89 +153 41 41 +65 89 25 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/scizor.pal b/graphics/object_events/palettes/followers/scizor.pal new file mode 100644 index 000000000..ee3678e0c --- /dev/null +++ b/graphics/object_events/palettes/followers/scizor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 137 1 +137 89 1 +129 25 17 +1 1 1 +185 201 217 +41 49 65 +81 89 113 +209 57 57 +233 233 249 +145 153 177 +89 17 9 +105 113 137 +161 33 33 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/scyther.pal b/graphics/object_events/palettes/followers/scyther.pal new file mode 100644 index 000000000..b279ae4cd --- /dev/null +++ b/graphics/object_events/palettes/followers/scyther.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 161 65 +177 169 201 +1 1 1 +41 65 33 +129 129 129 +233 233 249 +153 209 105 +177 153 41 +241 217 73 +81 65 17 +177 177 201 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seadra.pal b/graphics/object_events/palettes/followers/seadra.pal new file mode 100644 index 000000000..cd2bb36c4 --- /dev/null +++ b/graphics/object_events/palettes/followers/seadra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 161 97 +89 145 217 +1 1 1 +233 233 249 +65 65 73 +169 185 209 +73 137 169 +249 209 161 +49 81 113 +121 185 241 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seaking.pal b/graphics/object_events/palettes/followers/seaking.pal new file mode 100644 index 000000000..7cc446f83 --- /dev/null +++ b/graphics/object_events/palettes/followers/seaking.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 161 81 +169 57 49 +177 177 177 +249 233 161 +249 81 41 +49 49 49 +241 129 161 +113 25 17 +233 233 249 +1 1 1 +97 97 97 +193 65 105 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sealeo.pal b/graphics/object_events/palettes/followers/sealeo.pal new file mode 100644 index 000000000..4efd9fd5a --- /dev/null +++ b/graphics/object_events/palettes/followers/sealeo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 137 153 +217 209 153 +81 81 57 +73 153 201 +49 65 105 +137 193 241 +185 169 113 +49 113 145 +209 217 233 +177 185 209 +121 113 81 +233 233 249 +81 81 105 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seedot.pal b/graphics/object_events/palettes/followers/seedot.pal new file mode 100644 index 000000000..7aff4c0af --- /dev/null +++ b/graphics/object_events/palettes/followers/seedot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 113 49 +73 49 25 +177 161 65 +65 57 57 +129 113 113 +89 73 9 +1 1 1 +97 89 81 +33 33 25 +233 201 121 +121 81 41 +65 65 73 +137 121 41 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seel.pal b/graphics/object_events/palettes/followers/seel.pal new file mode 100644 index 000000000..dad2284d8 --- /dev/null +++ b/graphics/object_events/palettes/followers/seel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 153 9 +225 129 145 +113 89 33 +249 241 185 +73 81 121 +49 49 81 +1 1 1 +225 225 241 +161 169 209 +193 65 89 +81 33 33 +233 201 97 +97 97 97 +233 233 249 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sentret.pal b/graphics/object_events/palettes/followers/sentret.pal new file mode 100644 index 000000000..7e9a52ae0 --- /dev/null +++ b/graphics/object_events/palettes/followers/sentret.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 89 +81 65 57 +241 225 193 +73 41 9 +1 1 1 +161 65 113 +129 97 73 +217 193 129 +49 33 25 +233 233 249 +137 33 49 +209 169 129 +89 73 57 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seviper.pal b/graphics/object_events/palettes/followers/seviper.pal new file mode 100644 index 000000000..276c88dc2 --- /dev/null +++ b/graphics/object_events/palettes/followers/seviper.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 113 25 +81 89 105 +33 41 57 +113 121 137 +217 169 73 +161 49 57 +249 217 89 +121 33 33 +169 113 241 +145 89 185 +1 1 1 +209 73 81 +57 65 81 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sharpedo.pal b/graphics/object_events/palettes/followers/sharpedo.pal new file mode 100644 index 000000000..5381c6030 --- /dev/null +++ b/graphics/object_events/palettes/followers/sharpedo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 169 49 +97 81 17 +89 145 193 +33 65 105 +1 1 1 +193 89 113 +57 65 73 +233 233 249 +129 137 145 +65 113 161 +113 25 49 +249 209 81 +161 169 177 +33 89 137 +73 81 89 diff --git a/graphics/object_events/palettes/followers/shedinja.pal b/graphics/object_events/palettes/followers/shedinja.pal new file mode 100644 index 000000000..05d9d168e --- /dev/null +++ b/graphics/object_events/palettes/followers/shedinja.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 65 +105 81 17 +153 145 161 +241 217 121 +97 89 113 +65 57 33 +201 177 105 +233 233 249 +121 105 65 +185 177 193 +121 113 137 +57 49 73 +1 1 1 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/shelgon.pal b/graphics/object_events/palettes/followers/shelgon.pal new file mode 100644 index 000000000..bea7288b0 --- /dev/null +++ b/graphics/object_events/palettes/followers/shelgon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 65 +161 161 185 +65 65 81 +201 201 217 +209 177 97 +113 113 137 +129 41 41 +185 185 201 +233 233 249 +89 89 105 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/shellder.pal b/graphics/object_events/palettes/followers/shellder.pal new file mode 100644 index 000000000..b48549223 --- /dev/null +++ b/graphics/object_events/palettes/followers/shellder.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 153 153 +73 73 161 +233 233 249 +129 129 201 +41 41 49 +233 153 217 +57 57 73 +1 1 1 +193 89 177 +161 161 241 +73 33 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/shiftry.pal b/graphics/object_events/palettes/followers/shiftry.pal new file mode 100644 index 000000000..cea3ce83c --- /dev/null +++ b/graphics/object_events/palettes/followers/shiftry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 137 9 +129 137 145 +97 65 33 +1 1 1 +137 97 41 +65 41 9 +145 209 17 +233 233 249 +161 177 185 +161 137 65 +81 81 89 +233 201 121 +33 57 9 +161 113 49 +0 0 0 diff --git a/graphics/object_events/palettes/followers/shroomish.pal b/graphics/object_events/palettes/followers/shroomish.pal new file mode 100644 index 000000000..203fd57ea --- /dev/null +++ b/graphics/object_events/palettes/followers/shroomish.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 105 73 +121 177 89 +225 201 145 +73 65 49 +81 137 65 +193 161 129 +49 89 41 +145 129 89 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/shuckle.pal b/graphics/object_events/palettes/followers/shuckle.pal new file mode 100644 index 000000000..ecf1abe78 --- /dev/null +++ b/graphics/object_events/palettes/followers/shuckle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 49 +73 57 57 +1 1 1 +89 25 17 +241 217 81 +209 57 57 +233 209 201 +201 177 65 +113 97 33 +161 33 33 +201 169 153 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/skarmory.pal b/graphics/object_events/palettes/followers/skarmory.pal new file mode 100644 index 000000000..5d54ff7e1 --- /dev/null +++ b/graphics/object_events/palettes/followers/skarmory.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 169 17 +33 49 105 +121 145 193 +161 25 49 +1 1 1 +201 57 89 +209 233 249 +73 1 1 +65 97 153 +249 209 97 +153 177 217 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/skiploom.pal b/graphics/object_events/palettes/followers/skiploom.pal new file mode 100644 index 000000000..6d538d4e6 --- /dev/null +++ b/graphics/object_events/palettes/followers/skiploom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 153 33 +185 201 225 +233 193 25 +129 193 81 +185 49 177 +249 217 81 +121 81 9 +169 121 9 +41 113 9 +233 233 249 +1 1 1 +185 217 121 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/slaking.pal b/graphics/object_events/palettes/followers/slaking.pal new file mode 100644 index 000000000..40eca9702 --- /dev/null +++ b/graphics/object_events/palettes/followers/slaking.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 97 +97 73 73 +217 201 161 +1 1 1 +209 113 137 +129 105 89 +73 57 41 +145 137 153 +193 193 209 +233 233 249 +169 81 105 +121 57 73 +201 177 153 +169 129 105 +81 73 89 diff --git a/graphics/object_events/palettes/followers/slakoth.pal b/graphics/object_events/palettes/followers/slakoth.pal new file mode 100644 index 000000000..12c49947a --- /dev/null +++ b/graphics/object_events/palettes/followers/slakoth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 129 89 +81 65 65 +185 177 193 +169 57 57 +1 1 1 +129 89 81 +145 137 153 +89 81 97 +233 233 249 +121 33 33 +209 89 89 +225 201 145 +185 153 113 +113 65 57 +113 97 89 diff --git a/graphics/object_events/palettes/followers/slowbro.pal b/graphics/object_events/palettes/followers/slowbro.pal new file mode 100644 index 000000000..f6c55d4cd --- /dev/null +++ b/graphics/object_events/palettes/followers/slowbro.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 193 89 +73 81 89 +241 169 177 +145 121 49 +241 241 169 +177 97 105 +153 153 153 +233 233 249 +113 49 57 +193 65 65 +193 201 209 +217 113 97 +1 1 1 +209 121 129 +0 0 0 diff --git a/graphics/object_events/palettes/followers/slowking.pal b/graphics/object_events/palettes/followers/slowking.pal new file mode 100644 index 000000000..30d658e9b --- /dev/null +++ b/graphics/object_events/palettes/followers/slowking.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 137 41 +153 161 169 +113 49 57 +1 1 1 +73 81 89 +193 201 209 +209 121 129 +153 65 73 +209 17 17 +121 89 17 +233 233 249 +233 201 97 +241 169 177 +201 161 65 +201 81 97 diff --git a/graphics/object_events/palettes/followers/slowpoke.pal b/graphics/object_events/palettes/followers/slowpoke.pal new file mode 100644 index 000000000..324117fbd --- /dev/null +++ b/graphics/object_events/palettes/followers/slowpoke.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 121 129 +241 217 145 +209 169 97 +105 81 17 +233 233 249 +161 169 177 +193 193 193 +97 41 49 +153 89 97 +241 153 161 +1 1 1 +249 193 177 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/smeargle.pal b/graphics/object_events/palettes/followers/smeargle.pal new file mode 100644 index 000000000..380390f8e --- /dev/null +++ b/graphics/object_events/palettes/followers/smeargle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 177 65 +177 185 193 +41 113 41 +161 153 105 +217 217 185 +97 89 73 +1 1 1 +65 57 49 +233 233 249 +113 97 33 +185 185 137 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/smoochum.pal b/graphics/object_events/palettes/followers/smoochum.pal new file mode 100644 index 000000000..79f273b2d --- /dev/null +++ b/graphics/object_events/palettes/followers/smoochum.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 137 25 +249 153 201 +113 33 97 +1 1 1 +177 65 153 +129 81 1 +249 193 49 +233 233 249 +217 65 105 +177 185 193 +153 97 41 +225 161 105 +153 49 81 +201 129 57 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sneasel.pal b/graphics/object_events/palettes/followers/sneasel.pal new file mode 100644 index 000000000..d3e0617ce --- /dev/null +++ b/graphics/object_events/palettes/followers/sneasel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 137 17 +57 73 81 +81 153 177 +89 97 105 +121 1 1 +249 249 249 +1 1 1 +25 81 121 +201 49 73 +169 185 201 +241 177 65 +57 113 137 +129 145 169 +153 9 3 +25 89 113 diff --git a/graphics/object_events/palettes/followers/snorlax.pal b/graphics/object_events/palettes/followers/snorlax.pal new file mode 100644 index 000000000..204900db7 --- /dev/null +++ b/graphics/object_events/palettes/followers/snorlax.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 145 81 +161 161 185 +65 65 65 +1 1 1 +249 225 169 +137 105 73 +41 49 49 +81 129 145 +233 233 249 +65 105 121 +193 193 201 +217 193 121 +41 73 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/snorunt.pal b/graphics/object_events/palettes/followers/snorunt.pal new file mode 100644 index 000000000..283587f32 --- /dev/null +++ b/graphics/object_events/palettes/followers/snorunt.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 153 57 +89 65 57 +169 73 65 +41 129 193 +97 97 121 +33 33 41 +249 217 89 +145 105 57 +233 233 249 +169 169 185 +1 1 1 +241 105 89 +49 49 65 +65 65 81 +193 81 65 diff --git a/graphics/object_events/palettes/followers/snubbull.pal b/graphics/object_events/palettes/followers/snubbull.pal new file mode 100644 index 000000000..36e6c87a4 --- /dev/null +++ b/graphics/object_events/palettes/followers/snubbull.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +49 121 153 +49 65 81 +209 193 145 +1 1 1 +185 73 113 +121 33 65 +177 193 209 +73 153 193 +241 145 185 +233 233 249 +209 105 145 +33 81 113 +161 49 81 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/spearow.pal b/graphics/object_events/palettes/followers/spearow.pal new file mode 100644 index 000000000..2c7f13b8a --- /dev/null +++ b/graphics/object_events/palettes/followers/spearow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 33 +81 57 17 +249 137 145 +233 121 89 +65 65 65 +201 57 25 +185 169 113 +145 41 17 +233 233 249 +161 81 105 +129 89 33 +137 121 65 +1 1 1 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/spheal.pal b/graphics/object_events/palettes/followers/spheal.pal new file mode 100644 index 000000000..637a19fa1 --- /dev/null +++ b/graphics/object_events/palettes/followers/spheal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 145 113 +217 201 161 +81 81 57 +105 137 185 +49 65 105 +1 1 1 +209 217 233 +137 169 225 +81 97 145 +121 113 81 +177 185 209 +233 233 249 +81 81 105 +193 177 137 +0 0 0 diff --git a/graphics/object_events/palettes/followers/spinarak.pal b/graphics/object_events/palettes/followers/spinarak.pal new file mode 100644 index 000000000..2f09009e2 --- /dev/null +++ b/graphics/object_events/palettes/followers/spinarak.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 137 33 +113 137 153 +81 57 1 +121 185 33 +233 233 249 +65 97 89 +169 185 209 +161 217 97 +209 65 105 +1 1 1 +113 17 25 +193 137 1 +225 193 9 +33 81 33 +0 0 0 diff --git a/graphics/object_events/palettes/followers/spinda.pal b/graphics/object_events/palettes/followers/spinda.pal new file mode 100644 index 000000000..97d7f9ff1 --- /dev/null +++ b/graphics/object_events/palettes/followers/spinda.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 113 +81 73 57 +145 65 65 +1 1 1 +129 105 89 +209 105 105 +217 193 169 +121 49 49 +177 81 81 +193 169 145 +57 65 73 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/spoink.pal b/graphics/object_events/palettes/followers/spoink.pal new file mode 100644 index 000000000..652308e48 --- /dev/null +++ b/graphics/object_events/palettes/followers/spoink.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 137 137 +145 49 97 +49 57 65 +97 105 105 +249 249 249 +105 25 65 +1 1 1 +185 73 129 +225 97 161 +73 81 89 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/squirtle.pal b/graphics/object_events/palettes/followers/squirtle.pal new file mode 100644 index 000000000..8d090127d --- /dev/null +++ b/graphics/object_events/palettes/followers/squirtle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 121 25 +57 137 185 +217 169 49 +233 233 249 +33 73 97 +185 185 185 +1 1 1 +161 9 3 +89 185 241 +241 209 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/stantler.pal b/graphics/object_events/palettes/followers/stantler.pal new file mode 100644 index 000000000..ca315697f --- /dev/null +++ b/graphics/object_events/palettes/followers/stantler.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 145 25 +89 73 9 +169 185 209 +201 145 89 +73 65 57 +225 209 81 +97 49 9 +1 1 1 +233 233 249 +185 97 49 +137 33 49 +113 89 81 +201 177 113 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sudowoodo.pal b/graphics/object_events/palettes/followers/sudowoodo.pal new file mode 100644 index 000000000..a16242e5e --- /dev/null +++ b/graphics/object_events/palettes/followers/sudowoodo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 153 65 +1 1 1 +201 169 1 +25 81 17 +161 129 89 +121 209 121 +129 105 65 +185 153 89 +233 233 249 +225 121 121 +89 65 17 +225 193 1 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/suicune.pal b/graphics/object_events/palettes/followers/suicune.pal new file mode 100644 index 000000000..2ec7c2b8c --- /dev/null +++ b/graphics/object_events/palettes/followers/suicune.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +49 153 137 +65 33 97 +97 201 193 +81 81 97 +97 153 193 +185 49 49 +129 153 153 +185 201 201 +25 57 89 +161 97 177 +233 233 249 +113 57 137 +49 97 137 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sunflora.pal b/graphics/object_events/palettes/followers/sunflora.pal new file mode 100644 index 000000000..34210aafa --- /dev/null +++ b/graphics/object_events/palettes/followers/sunflora.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 137 49 +225 185 17 +89 185 81 +1 1 1 +41 81 17 +201 129 33 +241 225 113 +233 193 33 +121 209 113 +225 161 41 +129 73 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sunkern.pal b/graphics/object_events/palettes/followers/sunkern.pal new file mode 100644 index 000000000..8184c4986 --- /dev/null +++ b/graphics/object_events/palettes/followers/sunkern.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 9 +233 233 249 +89 65 1 +113 193 81 +73 97 113 +1 1 1 +153 105 9 +241 217 113 +33 49 57 +105 161 57 +217 185 49 +41 81 17 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/surskit.pal b/graphics/object_events/palettes/followers/surskit.pal new file mode 100644 index 000000000..40ff84b78 --- /dev/null +++ b/graphics/object_events/palettes/followers/surskit.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 33 +105 81 17 +97 145 185 +185 169 49 +41 73 97 +145 41 41 +233 233 249 +1 1 1 +33 41 57 +193 57 57 +225 209 73 +73 105 137 +121 177 225 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/swalot.pal b/graphics/object_events/palettes/followers/swalot.pal new file mode 100644 index 000000000..ed14e5df2 --- /dev/null +++ b/graphics/object_events/palettes/followers/swalot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 57 +137 105 161 +65 41 97 +233 185 65 +57 73 81 +161 129 193 +97 73 121 +161 25 25 +1 1 1 +217 105 105 +185 145 217 +121 89 145 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/swampert.pal b/graphics/object_events/palettes/followers/swampert.pal new file mode 100644 index 000000000..351f6cc11 --- /dev/null +++ b/graphics/object_events/palettes/followers/swampert.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +241 129 17 +89 121 161 +161 73 17 +129 185 241 +49 57 81 +1 1 1 +97 161 209 +49 73 113 +89 105 129 +249 193 129 +201 201 225 +161 161 193 +193 89 17 +49 65 73 +0 0 0 diff --git a/graphics/object_events/palettes/followers/swellow.pal b/graphics/object_events/palettes/followers/swellow.pal new file mode 100644 index 000000000..4a366df34 --- /dev/null +++ b/graphics/object_events/palettes/followers/swellow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 137 41 +89 81 17 +105 137 193 +49 73 113 +209 209 233 +17 49 73 +225 209 73 +65 65 65 +217 81 89 +185 185 193 +1 1 1 +73 105 153 +177 65 81 +105 33 65 +233 233 249 diff --git a/graphics/object_events/palettes/followers/swinub.pal b/graphics/object_events/palettes/followers/swinub.pal new file mode 100644 index 000000000..1ac67e68b --- /dev/null +++ b/graphics/object_events/palettes/followers/swinub.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 97 57 +185 153 105 +113 89 81 +201 97 113 +145 41 65 +73 41 9 +169 129 73 +1 1 1 +233 137 161 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/taillow.pal b/graphics/object_events/palettes/followers/taillow.pal new file mode 100644 index 000000000..c01cf137c --- /dev/null +++ b/graphics/object_events/palettes/followers/taillow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 145 41 +105 81 17 +105 137 193 +49 73 113 +225 209 73 +193 73 89 +17 49 73 +233 233 249 +121 121 129 +1 1 1 +145 49 81 +73 105 153 +169 169 177 +65 65 65 +241 105 105 diff --git a/graphics/object_events/palettes/followers/tangela.pal b/graphics/object_events/palettes/followers/tangela.pal new file mode 100644 index 000000000..eec939132 --- /dev/null +++ b/graphics/object_events/palettes/followers/tangela.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 145 +233 233 249 +65 65 65 +121 145 177 +161 49 41 +1 1 1 +25 33 33 +89 113 113 +169 185 209 +105 161 169 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tauros.pal b/graphics/object_events/palettes/followers/tauros.pal new file mode 100644 index 000000000..9d198490e --- /dev/null +++ b/graphics/object_events/palettes/followers/tauros.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 73 +113 129 169 +73 65 65 +201 153 65 +193 193 209 +105 97 89 +1 1 1 +41 33 17 +145 145 145 +233 233 249 +81 81 105 +225 169 73 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/teddiursa.pal b/graphics/object_events/palettes/followers/teddiursa.pal new file mode 100644 index 000000000..10b1388ec --- /dev/null +++ b/graphics/object_events/palettes/followers/teddiursa.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 121 33 +177 185 193 +225 201 97 +89 73 65 +241 225 193 +1 1 1 +89 49 17 +233 161 57 +153 97 33 +233 233 249 +201 209 225 +217 201 137 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tentacool.pal b/graphics/object_events/palettes/followers/tentacool.pal new file mode 100644 index 000000000..ebde6755c --- /dev/null +++ b/graphics/object_events/palettes/followers/tentacool.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 3 +73 145 161 +65 65 65 +121 193 241 +145 25 89 +177 121 73 +249 161 161 +41 105 121 +233 233 249 +65 49 41 +209 169 97 +1 1 1 +209 209 209 +225 49 97 +57 73 97 diff --git a/graphics/object_events/palettes/followers/tentacruel.pal b/graphics/object_events/palettes/followers/tentacruel.pal new file mode 100644 index 000000000..5eb5f673e --- /dev/null +++ b/graphics/object_events/palettes/followers/tentacruel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 3 +1 1 1 +65 65 65 +233 233 249 +121 193 241 +169 169 169 +145 25 89 +153 121 89 +41 105 121 +185 161 121 +81 153 169 +225 49 97 +249 161 161 +57 73 97 +0 0 0 diff --git a/graphics/object_events/palettes/followers/togepi.pal b/graphics/object_events/palettes/followers/togepi.pal new file mode 100644 index 000000000..52fd5d0ed --- /dev/null +++ b/graphics/object_events/palettes/followers/togepi.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 137 73 +97 169 225 +233 217 89 +49 57 41 +193 177 73 +217 209 209 +217 81 89 +113 97 49 +233 121 145 +153 153 145 +249 233 145 +233 233 249 +121 201 241 +81 81 81 +1 1 1 diff --git a/graphics/object_events/palettes/followers/torkoal.pal b/graphics/object_events/palettes/followers/torkoal.pal new file mode 100644 index 000000000..fab0f050a --- /dev/null +++ b/graphics/object_events/palettes/followers/torkoal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 113 65 +145 97 57 +137 33 49 +121 129 129 +97 41 41 +1 1 1 +209 137 81 +89 97 105 +209 57 81 +185 185 185 +49 57 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/totodile.pal b/graphics/object_events/palettes/followers/totodile.pal new file mode 100644 index 000000000..1a7c37644 --- /dev/null +++ b/graphics/object_events/palettes/followers/totodile.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 153 81 +65 73 81 +81 129 185 +113 25 41 +41 57 97 +169 185 209 +209 49 73 +1 1 1 +233 233 249 +113 177 233 +65 97 137 +121 105 41 +161 33 57 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/trapinch.pal b/graphics/object_events/palettes/followers/trapinch.pal new file mode 100644 index 000000000..410b897fd --- /dev/null +++ b/graphics/object_events/palettes/followers/trapinch.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 153 113 +169 89 73 +201 121 81 +41 41 41 +249 249 249 +1 1 1 +105 105 105 +121 121 121 +113 49 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/treecko.pal b/graphics/object_events/palettes/followers/treecko.pal new file mode 100644 index 000000000..e5b4b2e4c --- /dev/null +++ b/graphics/object_events/palettes/followers/treecko.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 169 33 +49 73 25 +249 217 89 +105 25 25 +57 137 105 +65 105 41 +185 49 49 +49 89 57 +1 1 1 +201 217 121 +145 33 33 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tropius.pal b/graphics/object_events/palettes/followers/tropius.pal new file mode 100644 index 000000000..af8de33ba --- /dev/null +++ b/graphics/object_events/palettes/followers/tropius.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 121 9 +161 161 161 +209 169 25 +25 57 33 +129 185 97 +65 145 73 +41 105 57 +65 49 1 +233 233 249 +249 209 33 +161 121 81 +121 97 73 +1 1 1 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/typhlosion.pal b/graphics/object_events/palettes/followers/typhlosion.pal new file mode 100644 index 000000000..eeacd5c1f --- /dev/null +++ b/graphics/object_events/palettes/followers/typhlosion.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 145 81 +73 65 17 +57 137 169 +241 201 41 +25 57 73 +161 17 25 +209 185 97 +217 81 81 +233 233 249 +57 97 121 +1 1 1 +105 89 57 +185 49 49 +249 209 97 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tyranitar.pal b/graphics/object_events/palettes/followers/tyranitar.pal new file mode 100644 index 000000000..4dadfce81 --- /dev/null +++ b/graphics/object_events/palettes/followers/tyranitar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 121 81 +137 185 105 +57 49 105 +121 137 145 +33 41 41 +161 185 201 +113 161 89 +41 73 49 +81 105 169 +233 233 249 +177 217 121 +1 1 1 +97 137 193 +49 65 65 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tyrogue.pal b/graphics/object_events/palettes/followers/tyrogue.pal new file mode 100644 index 000000000..e0f3829ec --- /dev/null +++ b/graphics/object_events/palettes/followers/tyrogue.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 145 153 +193 57 57 +177 185 193 +89 49 105 +169 121 177 +73 89 105 +97 25 25 +1 1 1 +233 233 249 +137 97 9 +201 161 217 +145 41 41 +113 81 129 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/umbreon.pal b/graphics/object_events/palettes/followers/umbreon.pal new file mode 100644 index 000000000..83c9ac129 --- /dev/null +++ b/graphics/object_events/palettes/followers/umbreon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 17 +129 89 9 +209 25 25 +233 233 249 +225 177 41 +25 41 57 +65 73 81 +1 1 1 +249 217 89 +105 113 121 +137 57 1 +41 57 65 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ursaring.pal b/graphics/object_events/palettes/followers/ursaring.pal new file mode 100644 index 000000000..36e1ff602 --- /dev/null +++ b/graphics/object_events/palettes/followers/ursaring.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 137 57 +161 169 185 +121 73 49 +1 1 1 +145 105 57 +209 161 97 +233 233 249 +73 41 9 +217 201 137 +193 193 201 +177 129 89 +89 73 65 +153 105 65 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/vaporeon.pal b/graphics/object_events/palettes/followers/vaporeon.pal new file mode 100644 index 000000000..e28edebe1 --- /dev/null +++ b/graphics/object_events/palettes/followers/vaporeon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +9 131 5 +33 145 137 +129 201 233 +81 73 57 +89 177 225 +1 1 1 +177 153 57 +209 209 209 +33 57 105 +17 113 121 +225 201 105 +233 233 249 +73 137 177 +161 161 161 +49 105 137 diff --git a/graphics/object_events/palettes/followers/venomoth.pal b/graphics/object_events/palettes/followers/venomoth.pal new file mode 100644 index 000000000..558651bc1 --- /dev/null +++ b/graphics/object_events/palettes/followers/venomoth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 65 +209 153 249 +105 97 137 +233 233 249 +73 65 89 +1 1 1 +193 193 193 +161 105 241 +113 113 113 +233 185 249 +217 185 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/venonat.pal b/graphics/object_events/palettes/followers/venonat.pal new file mode 100644 index 000000000..b1281ab1c --- /dev/null +++ b/graphics/object_events/palettes/followers/venonat.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 145 81 +73 57 129 +201 201 201 +129 97 33 +1 1 1 +137 1 1 +137 137 137 +113 73 209 +169 49 81 +49 33 65 +233 233 249 +161 105 241 +233 129 153 +217 185 129 +249 201 201 diff --git a/graphics/object_events/palettes/followers/venusaur.pal b/graphics/object_events/palettes/followers/venusaur.pal new file mode 100644 index 000000000..46f21dc4a --- /dev/null +++ b/graphics/object_events/palettes/followers/venusaur.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 129 41 +241 121 161 +137 225 33 +145 65 33 +65 153 97 +105 217 193 +233 193 113 +201 73 129 +233 233 249 +105 33 41 +97 169 17 +161 161 161 +1 1 1 +65 97 49 +249 225 9 diff --git a/graphics/object_events/palettes/followers/vibrava.pal b/graphics/object_events/palettes/followers/vibrava.pal new file mode 100644 index 000000000..4402c3530 --- /dev/null +++ b/graphics/object_events/palettes/followers/vibrava.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 137 97 +217 225 185 +41 105 25 +185 193 209 +121 185 113 +73 73 73 +1 1 1 +57 57 57 +249 249 249 +105 105 105 +81 89 57 +97 161 97 +161 177 137 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/victreebel.pal b/graphics/object_events/palettes/followers/victreebel.pal new file mode 100644 index 000000000..90de7ab6a --- /dev/null +++ b/graphics/object_events/palettes/followers/victreebel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 153 57 +241 121 161 +81 65 49 +137 217 81 +1 1 1 +169 65 113 +121 9 5 +185 137 57 +193 193 193 +233 233 249 +33 33 33 +65 89 41 +241 225 73 +185 161 49 +129 97 41 diff --git a/graphics/object_events/palettes/followers/vigoroth.pal b/graphics/object_events/palettes/followers/vigoroth.pal new file mode 100644 index 000000000..446f1e8d6 --- /dev/null +++ b/graphics/object_events/palettes/followers/vigoroth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 129 121 +65 57 73 +97 89 105 +217 209 217 +97 49 49 +1 1 1 +169 57 57 +209 89 89 +105 25 25 +177 169 177 +233 233 249 +121 81 73 +145 105 97 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/volbeat.pal b/graphics/object_events/palettes/followers/volbeat.pal new file mode 100644 index 000000000..f78520d3b --- /dev/null +++ b/graphics/object_events/palettes/followers/volbeat.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 57 +65 65 73 +177 177 193 +225 185 65 +209 73 81 +121 33 49 +105 105 113 +1 1 1 +233 233 249 +137 137 153 +41 41 49 +225 113 121 +177 57 65 +225 209 89 +97 81 49 diff --git a/graphics/object_events/palettes/followers/vulpix.pal b/graphics/object_events/palettes/followers/vulpix.pal new file mode 100644 index 000000000..9c57ccda9 --- /dev/null +++ b/graphics/object_events/palettes/followers/vulpix.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +241 137 73 +169 81 25 +217 113 49 +233 233 249 +121 73 57 +89 57 49 +1 1 1 +185 89 57 +241 201 153 +89 65 73 +137 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wailmer.pal b/graphics/object_events/palettes/followers/wailmer.pal new file mode 100644 index 000000000..4104dc7f0 --- /dev/null +++ b/graphics/object_events/palettes/followers/wailmer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 153 97 +65 73 81 +193 185 121 +65 129 193 +41 97 137 +33 65 97 +185 201 217 +105 161 225 +137 121 73 +81 65 33 +217 233 249 +137 153 169 +49 105 161 +1 1 1 +97 113 121 diff --git a/graphics/object_events/palettes/followers/wailord.pal b/graphics/object_events/palettes/followers/wailord.pal new file mode 100644 index 000000000..8168289fe --- /dev/null +++ b/graphics/object_events/palettes/followers/wailord.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +185 201 217 +33 65 105 +65 129 193 +57 73 81 +137 161 177 +217 233 249 +41 105 153 +105 161 225 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/walrein.pal b/graphics/object_events/palettes/followers/walrein.pal new file mode 100644 index 000000000..1543eafcf --- /dev/null +++ b/graphics/object_events/palettes/followers/walrein.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 25 +129 137 153 +177 185 209 +81 81 57 +1 1 1 +105 161 217 +209 217 233 +49 65 105 +249 217 89 +137 185 249 +81 129 177 +81 81 105 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wartortle.pal b/graphics/object_events/palettes/followers/wartortle.pal new file mode 100644 index 000000000..d4d157193 --- /dev/null +++ b/graphics/object_events/palettes/followers/wartortle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 25 +161 161 161 +65 81 153 +57 57 73 +233 233 249 +1 1 1 +65 121 217 +161 89 25 +161 9 3 +241 209 113 +113 153 225 +65 65 65 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/weepinbell.pal b/graphics/object_events/palettes/followers/weepinbell.pal new file mode 100644 index 000000000..c6ea065e7 --- /dev/null +++ b/graphics/object_events/palettes/followers/weepinbell.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 153 57 +241 121 161 +81 65 49 +137 217 81 +89 89 89 +1 1 1 +185 137 57 +185 185 185 +233 233 249 +121 9 5 +169 65 113 +65 89 41 +241 225 73 +185 161 49 +129 97 41 diff --git a/graphics/object_events/palettes/followers/whiscash.pal b/graphics/object_events/palettes/followers/whiscash.pal new file mode 100644 index 000000000..70c9415af --- /dev/null +++ b/graphics/object_events/palettes/followers/whiscash.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 57 +65 129 185 +25 33 105 +233 233 249 +177 161 73 +97 161 217 +33 97 161 +97 81 33 +1 1 1 +49 65 137 +209 193 97 +177 177 193 +105 129 193 +73 97 161 +9 5 9 diff --git a/graphics/object_events/palettes/followers/whismur.pal b/graphics/object_events/palettes/followers/whismur.pal new file mode 100644 index 000000000..f353acb32 --- /dev/null +++ b/graphics/object_events/palettes/followers/whismur.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 137 41 +209 121 169 +81 57 9 +225 209 73 +1 1 1 +65 73 89 +97 41 73 +193 169 49 +233 161 201 +161 89 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wingull.pal b/graphics/object_events/palettes/followers/wingull.pal new file mode 100644 index 000000000..676a03740 --- /dev/null +++ b/graphics/object_events/palettes/followers/wingull.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 145 41 +137 137 153 +161 201 225 +105 81 17 +177 185 201 +81 81 89 +225 209 73 +105 161 217 +1 1 1 +65 105 145 +233 233 249 +81 145 185 +49 73 113 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wurmple.pal b/graphics/object_events/palettes/followers/wurmple.pal new file mode 100644 index 000000000..a6f96b9dc --- /dev/null +++ b/graphics/object_events/palettes/followers/wurmple.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 153 57 +121 97 25 +137 137 145 +1 1 1 +81 81 81 +129 33 57 +169 169 177 +241 105 105 +241 217 105 +249 209 185 +185 49 73 +177 145 129 +113 89 81 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wynaut.pal b/graphics/object_events/palettes/followers/wynaut.pal new file mode 100644 index 000000000..b73b089b8 --- /dev/null +++ b/graphics/object_events/palettes/followers/wynaut.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 137 153 +25 65 81 +193 57 57 +137 209 225 +49 105 121 +41 41 49 +105 177 193 +33 81 97 +1 1 1 +233 233 249 +113 33 33 +97 97 121 +65 65 81 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/xatu.pal b/graphics/object_events/palettes/followers/xatu.pal new file mode 100644 index 000000000..399c787a2 --- /dev/null +++ b/graphics/object_events/palettes/followers/xatu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 145 57 +113 129 153 +49 49 49 +129 193 113 +65 81 97 +176 198 222 +121 17 33 +1 1 1 +233 233 249 +217 73 89 +97 81 1 +241 209 97 +177 41 57 +185 153 49 +57 81 33 diff --git a/graphics/object_events/palettes/followers/yanma.pal b/graphics/object_events/palettes/followers/yanma.pal new file mode 100644 index 000000000..40a8c8679 --- /dev/null +++ b/graphics/object_events/palettes/followers/yanma.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 121 49 +41 105 9 +185 201 225 +81 97 137 +113 193 81 +185 65 17 +145 49 9 +97 25 25 +1 1 1 +241 105 81 +161 233 129 +57 73 73 +233 233 249 +217 73 49 +0 0 0 diff --git a/graphics/object_events/palettes/followers/zangoose.pal b/graphics/object_events/palettes/followers/zangoose.pal new file mode 100644 index 000000000..2736e0cb2 --- /dev/null +++ b/graphics/object_events/palettes/followers/zangoose.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 121 137 +161 49 97 +41 49 65 +209 209 209 +225 113 129 +1 1 1 +161 49 57 +121 33 33 +73 81 97 +241 113 185 +233 233 249 +153 161 177 +209 73 81 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/zapdos.pal b/graphics/object_events/palettes/followers/zapdos.pal new file mode 100644 index 000000000..037f1b687 --- /dev/null +++ b/graphics/object_events/palettes/followers/zapdos.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 121 1 +1 1 1 +65 65 65 +249 209 1 +225 169 25 +177 177 209 +161 113 73 +57 41 25 +233 233 249 +225 145 73 +249 217 65 +89 81 65 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/zigzagoon.pal b/graphics/object_events/palettes/followers/zigzagoon.pal new file mode 100644 index 000000000..a2d068ced --- /dev/null +++ b/graphics/object_events/palettes/followers/zigzagoon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 89 +89 73 33 +169 185 209 +1 1 1 +41 33 25 +65 73 81 +121 129 145 +153 97 57 +233 233 249 +217 209 153 +73 49 25 +201 177 121 +121 73 41 +153 137 89 +65 49 41 diff --git a/graphics/object_events/pics/pokemon/followers/aggron.png b/graphics/object_events/pics/pokemon/followers/aggron.png new file mode 100644 index 0000000000000000000000000000000000000000..1a72691c938b0970a63c2cda271aa9021bd53707 GIT binary patch literal 1225 zcmV;)1UCDLP)K*0FD^MjQulWHGQh%FyLW4nY->pBLl7 zRa%L_Pp^j@#{L6Uhc|bxTA=bSvt%p?2&^QcKPxrs{2M1Uo zB&zh*-jomczQ4O4XBdw9TD3KIrpxo!E3SK42jK`zg zMDD0*Me%nD#HXJ{?poL__60L8FffVCFu%}rpIhUZHFU>Z_M~ZC@^19Q$twPo4%0TP zLeMz|ZfIEU@S#Bm_8Q!=`-QF17Awlp0eR)E;#b7!_S)==^agvr+=_CC4Xf5yUmsHv zK~K}|7At2jGV;wTdQAp$LMTjWk+)dUx+1-G`1<@t+d1Zb%LsgLp|G^Y z9U)AQuA(`C)2sYG9}($+*r5pqp8ugA-;#ZS+Qo|OH@{jC2n-C37Gt2}f7{o;a{~Po zCrpNVAT0~Jz90mT#hCcQwI3VDd^REj!~ds8iT&7lApGoo8NpGvpZln56fO&@7C7n5 zvgnS&D!(5=APsJL)I-Z5CZTaknf=&#ps~XcbA5E5ukcR4E^Nqx8n8jOF!ZG`FNzi> z%gVHTn`oe3Q$|HJ09(2<**gymAdVa+&n2ExCM^qUx?@u7%pEZbq?ip%8gG;*T>;J* z^&(T0XCEflwbk92VWPuKMv7-*5@zOROnwn41lj%fvn(6XJWw-2voN-7TIMq`Suz5I z$QCJDm~LvTCKX1;m;!vm<7(FfcWD$1=5hg{E-likz+A_#FQWm4az_i@ zAe5C>{rJ)pnW3MQ4a9=zL3}Acj)BYvpD^~W_`vy+6|M^AffEC7SBD5I(lxM@Rd%ph zx`}1VmWJ^qnt&s3V<0{2cEOLga)*CjLhhv~iLI)3+sLuhqGSmCOmT(cL)01rs2dMcdc|K;ohu^>jVxdC+`6=^_NCMRd5tAfR@ zDL~rbzFzTH9at93f4ZtbJZ}tc7?WmfizZb;ISJ1leUjzHdO`5udLD=iQtJ+=1!z^U noC6PLHTe8cTR+@>_0jkjX0)b~Yg`BU00000NkvXXu0mjf2dPCC literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/aipom.png b/graphics/object_events/pics/pokemon/followers/aipom.png new file mode 100644 index 0000000000000000000000000000000000000000..76dd6b92bb14c259d6e4a61c6c7949fc263b2584 GIT binary patch literal 798 zcmV+(1L6FMP)DKHkpTe#Q7Lih>G_Fisflq>iJ7^{v4H>p00000h?Pvk00009 za7bBm000XU000XU0RWnu7ytkQlu1NER7i>K)G=$@Koke?0}ayZCZKlk(4%ldP;e@P zCl9G_s3{&Z^b>TI&xKR21YD;eMUbJ8(gfPYi-e#3PuTcn%3mbra$i z?tePu+_BPf^VVRZ^#|bSBgU`tW(QeDSg4z@tg!XyLw@b6fLnujst1_kg9F>&;5c!E zni)zTt`?cmMP9y!mE7t=|!a4Fcm?cTlXw!|E-jAdi zOSM2*LHlR8(OKMVBgz83pB1My%X*j4+FLg%d#HPSci&cM1)x^iUv2fBEi0S%>H6lK cg@0JT0h#bA42cB`8UO$Q07*qoM6N<$f~t*nUjP6A literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ampharos.png b/graphics/object_events/pics/pokemon/followers/ampharos.png new file mode 100644 index 0000000000000000000000000000000000000000..8fbb26f04426db24b892be32466383eb93773c7b GIT binary patch literal 775 zcmV+i1Ni)jP)0u5pjW;F*!j20Rg$m;qh5fff)%=VR7-%S!r1b>FN2&p&K)iG-uF%$q`1tc)slEE25$ynMwTczd%`6zoFlgaEXF%vKCRmV49dh?{x)r&DYW zy4m?2-vC^ov8LA(UIH|oEnZe!;HDl6!|a>sWLXdli_Mm&hUL4d=etIqOsBn<+iWQ{ zEU*|ufX{tuau-FcSKKv>zxz?4tx37M`ln0XJHr+2_lKps4lyo4L_SSGTwNiHU;F43 z1?>3Iu6X7UXC-u*|I^o*k=WKo!HmCQO3)^tIWwkmSpqs{JNGw`PJ?#5^ z8(Ee6_-C!XnBIqT+i#_?S;h1Ajx)ejxw=002ovPDHLk FV1noaZ;Su{ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/anorith.png b/graphics/object_events/pics/pokemon/followers/anorith.png new file mode 100644 index 0000000000000000000000000000000000000000..62e93257ea91e412c1e56dfd92dcbd1b53adb032 GIT binary patch literal 840 zcmV-O1GoH%P)If1Ep>FN2wacMCrF==UWsXK)Xz)XU>pYUcSUjtE)XdQ9!h<6j5Q+% zMUWlJIs`#jF5;l#Bo_k_6&%8#2QRyO@DRutB}S#JN)J7*ARacsQE#)SInrNN>wN!) z<;|NnO-s`a#$bnj4~0+LJkR^SO#?uG`qQ8O{ON=Mi1zYd4;u{`z5M?dC?!_EXK@$gKZJ zL72HO$+S?!uFyhuQ4o2)l5Z8XyMpe7q?!f*d48nnmS>>u!c?J3}a+?}M% zSmy2obTxOpIwGPARc1w>OB!%(2cp_ALYoqD1JyL~tws~eW}y&^ct=_!E|MKqR;)b{_=yIB!3E+4#}883T=_^4a-R|EX1u5PyW6kF z>FKJ~-FBcUnV`)~HV^r#8c@biI9E6{7_K&pWcXI`U> z&5%CsEnkh_Cs#Cge~vG;q$>Lg*jatRx*8*qH7>HZDa z7g$`ghdEf2=snkIPQov(XOZKdZO)600009 za7bBm000XU000XU0RWnu7ytkRiAh93R7i>KmAy|RM;OLO_7*POGv=;% zDJ&B8&c_qRS(fR6u^Qu2fiZUd5lms8sKo|OJmDBiQxjjoIOhwD_OCxqW1eV(v06Og z7|XRk-Sg~H8s~m~O6dw6kRxJoG*Oa*tFvb?M5TU+!F0y znc+ej@6tyP zVuZhTs7}8TdJ)@5akgL<0N#JT<-^SoB49u(c%s;tE=~b}jIbiMoDE7HA-GuH)6AVg z04ODdlsjFsa#0gICfO{~l39^#Am0Ixe(Uvrf%;UxQ~`Ue7o;($AWnx&4#pyU*`yUOh^q_Dk0RI^CiDPpVphx zUg@l=P621Uw?>IQqkgQ!KIZtrs;V&Zq8T9N7`V0YkD4P}<)UVlD7Qsm4tv{boMh~| z7sQSIVjG7W_Mr+RFPc>e-_4nV17f9ECHm?oBy4R*a-8|w$N#Z1u>rq!|2ou;h0TZo zh!&TZS+bsY9 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/armaldo.png b/graphics/object_events/pics/pokemon/followers/armaldo.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba9f344ea9005da558bce5046ae6f19bdfd470c GIT binary patch literal 1003 zcmVG3m)kIcbq`ad`m&0qN=ap(#;;smW1MQIV0M@YGJV00009 za7bBm000XU000XU0RWnu7ytkRVM#Kl`&`(K@^6EEhG#!7a<9$E)$5$niFyZ zvYbRjtkc=0NC?CjBw#EOth~JSy5+~7)#kv1sl2A)97HA^;nuX85F*2N9!6f5= zT&jfm++He+Qn=4+X^ccdFv*zi-Kd1i%|aRnZz-kuU@wh{aC`I;jPSYX$CZQHMJtWV z?@N@jfcIyk!OPu(Nru>|P0loOJ8|ny6?nYE9y6(JIw?FE)?PeqbkvdzvGn8N?(Y84 zTne9F_P7v^xY?I+c(wIh{CXMJBf&CZxB8(H(t0C}uRR#2bmIPOUoL-XeBBUjuY9jP_!z4hx2Bu45H`~I_0ODFvkv<+4(OD_7UQBP zS;p({UNgUW_%emb%(BUtwQ{-LulY(=k;sfNb6F1V&j<}nj4@&sNo?>+@r2o)Qp3uT zoHhAMClJkVqJx0NnC&dM@PB6eGHgrp`Z{B4LuPC^EO{ZgtI%g;5N1pU_0fid9 ziS^G@)HySUkfT?SU^EcW#o^M%P+JfTBc6UAB?wp$fh9$PV5r$r2eux59v;u%z5sdZ zj>8EC17Z8~BblYD76e1Ze!*7>91KPoAJKx!P&1c$p*X*4-!35YtrD!ayp?VSBU`|} zWJa~1G*m47>AR|=-ntTGt5OgQI}GR7i=nmNAdyG!(~OY!~sWtpHJEm1@uw8=)if-lW{4m}N38OP0Ki9)%U1C~DiK~1b3pnk76eGoSVR$a^5LO>&8twxzSm8r@&cH1QQh2Tzhkk*_udoD) zu*-0>`RwY2A;6!?o~SM|O+b|s+KPcGq9STAn`w_%+i8K?gQMh6%-Np%V@JUoeK;D~ zXplfhR2RnUMhRF1Nydl>aaU@O+cZO=oq6<$5&(5{2LXuvvAKuZBFj6X6>TatKxfdV zIi+D}g04KiO$$-z>5KPK!BCYriH1L_!(XPKiM%6Ho&K*Hb28tjv;)RA45!V;dVHG- zAcprhu-ICUu@z#q=RrSRKmGca1i%SVoBjOdLS%OPZl{QL#zKwa zw-4gub`W5S$h;7*7LN0FY($-mfO;z-%5s*b*ES~MqW`VVe$m&aV&sJO(g%vm=A{*ednUJmkOtP(v zcw{d!x_?*ed^JIv1&@e6HiNzI2fTzJZkocnaA|L6I)<&-T{G|p0o*=LeEagLJ8OP9 zKd;fARgZ{F20%S^(U?Lio2Fl&Zt-eRfahX+EvtaftiX@w&T~ygU0%F*OaeRmvJ;W% z@99pFL8K05|LXQ3qav{uKz#E!3iwHB1zxhDQB9Nb#ku<5lr~dDx?8Dj6}@qKKd6vJ z%HiQ0&FAMybYfqpX*N8i3Q(U=2(y*>QxUlW6kuNmfDRN{S48&Qv7-xmv~0+{Ja+{= z%r%-E2o#ZVpqrH@XAqGgApav1k$a5<+^KY9BcI^%{&L++&iXGIsQeT8&{A)+afiwB wpZgCq{iy`G{kNHaX>aip{C~B-0aEb4Y7f3vasU7T07*qoM6N<$f@{lL&;S4c literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/bagon.png b/graphics/object_events/pics/pokemon/followers/bagon.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4964436c66f14e4bd88db4aa7c1fe90d57070e GIT binary patch literal 557 zcmV+|0@D47P)K)G=$qKo|yKCm}!IoM~{!1@OY3@EvDk+5ydABE@ z_kP?BW-@8gq)GFCvg7{FKW2gE$-TvPcZ%$JQZu?hH9~uzn)pCHsfP&FWugrlM=ec} zRg#mLK{yp+JFvgA^vqj_ax(XjAn>!W4EpPU2nx1$?*#FV6%L{OTUE)#)T()!fiHVn3vaTcsuAI{ju>V$5=6E_fZ~9 z7E7`aI#|0u*^4z-;iAlRJGLwQ{eg5A`;>62=;o+-(Ph8qOjqG*t%EV@+Y{xx#9pC6;=>HD|nkSe>N`I9&&GiCWku v=UV%eYRhVExB!PPgjbB6ul;(%@juHaWXKWf0;d;C00000NkvXXu0mjfjbHSK literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/barboach.png b/graphics/object_events/pics/pokemon/followers/barboach.png new file mode 100644 index 0000000000000000000000000000000000000000..710fe09e5e7c77e314c5674c62e3287bb6132a84 GIT binary patch literal 558 zcmV+}0@3}6P)cahbWf$r(Xu000000000000000|03Hk00009 za7bBm000XU000XU0RWnu7ytkPq)9|UR7i>Kl(B2VKorJr2pl0(N{H>)|G+^grAx%1 z#nsYMoC@J=>5^bIq}_^>lORQGrgoBZu~=K;{d3h=%-z#Vq0*(~+kWqR@B4^`Ae1Rn zrcD1r>JPlLhT0^RcUEtj&P!<%#YXIRtcH0Z3-U@wRa(iX@L<8c?W{(&B@_T&sdP`9 zRtld|I+C#ZPCL8>d8KMNezww>QYv9}PDciIlY%9~e5E@c(~g|cmA+36z~8<`=}T@l zSX)arD=reGJdW8bU$6%_=jmNzJL5Uk&9jTO7c*BFi{z%YPah~7lLFVh=2Q31)hS+P-h>FN3D*;xSr0bx-g000000000000000OMyaV00009 za7bBm000XU000XU0RWnu7ytkQUr9tkR7i>Km9cKyFc5~>K?^+zkd}7K*p7q(*q#EA zOC|>*3#i!|AVBg2d4py*V&I&Gjnkr*7PmqQSbDioc3|BxW(su3l-s`J-T&WNl+4&$ zyv3`8F%yiDG5@3Dw;|Pgsjvf=(k~?(c>_IVwLB(GQrg}?Drz7nv=kpZCAr7IWwAjd zv4J5iTxqNrd48Ju^;PDWR4KhP;BE&jVL6r{rO%a~;+>lxRk1``j%JP%GSv6DH*|uy z)G<}sjUg?m@}5ZBVvG=Xr7NmbVcy0-)8EZ?k)jHq39wdQmbYj)tqfq^#yUw)DSyBt z^9z8P-OoB50?d(t$J++b1=yF^MSvq&08IORecr?Xw1HKae|CbG0d}(xcb~ghLZa|m zKEG&SI{49FW1lyIvzy{#9_B^YGYar>`W4`J+BbW=$$bO3nunPWZ;Gi6@Di?Imi3p= z=Pv$!1h~5lGZ$J38{jqk0+GGn9s1nGX}9u2mMs8-@!&BtxeytikTQ>R zfGoBlX7?Mx{wev)k5rcHB*@Gh0-WIiC`Yj|pJ6%*u@lU-%CG@tR*Utm7_$&ZG8czu zV&rk(&x|-pMcH%NF`Bp*<67VsjdB#{V=+bsaW3i_8`S4o9pGztpw&5=crg~DM)ka7 zWN5^wERmzBMY$j^&UI6v1>6cvb&bzO)zb5}!Too2#oA9KVgHan5YoLT^^bF2K2LDV bUL_s@l@&<^SEFK^00000NkvXXu0mjfsLDx= literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/beautifly.png b/graphics/object_events/pics/pokemon/followers/beautifly.png new file mode 100644 index 0000000000000000000000000000000000000000..33e2eccef9e9506adcd17f6f72ca56002cc33166 GIT binary patch literal 952 zcmV;p14sOcP)5%NdW-?*;!$+v9bBtX<G?rHNdN!Klrd}DKorLhBhX+loE8-XBEB|};{=!J|sXHi2!; zAMlhuLrj4ER_pRKJBYqx*#TfMNDB#ZcJNPnO#CP&lAVWQLA`U?1u~AF?|gNV!uOcC z&(aya$Mr5JHfci|lILZWl^+hvo2Ymh6+yOxicV6vq{P_^mi}Fji5KdS543DEtMof6 z%l-SqV%M_FJ~|?ClYdm~MnL_-ah$q^!=e-EO>~43ONCU=JB%2}P-DmvLSb*^0)1l( zVn+|`Pzf1E z1BYDqA)<{5J4Z2S7$RRZx=MTqL_N@d$n*-k%*9TAq>ffgDM@Xlmm$sIICdn`)sgSxu_&})Xs{V6@sM3rvOB&GHGleq03NrOKd-h&e1IG~ z68h5Kl{c=61#(^Y9}(X|{>Qatf-%0~_GyIehV8v;;|VL2V@D>}-D(Y2cZHs#j&7!i zA?C;qXn16Q~)DLZ7!0Da7s%w$wtDN{$a zEulx3H5NJuV@DG~EZ6uz$r4lN1(B&EJhvw|i5(F^4CXig@%hvdnbSZLN6E~Tcy9B5 aAHM}M{P)FN2I$?1`ip+RAJZw~ok00009 za7bBm000XU000XU0RWnu7ytkPu1Q2eR7i>K)W1u^Koke?PJy_+p@Fz`bEu$yhi(p6 zager34>Hu^puxd^!09qreEuM!2%4q;g#SX34w;->lp;nV$TN)&ZM=6K+@#;_GraG+ zgX2o2S!S8#|3o(a=4r9~eWPu$Vf6F`;23T92S!g#hp1t)_b}j%YO<{8(Se#icm`Xk ze~@s-&%s1v(Rty6zd112YWs(hvF#tm*)kg$=LvkjzovN0w%8nhH{-U6-bl(0F#awq zM>o5Qce5o#v%wg#O8`wk#-oJuw^3cOw#r#y%hB5o2_?V~&Xm^qK)rgux?JO3_7Eo) zj5%E2OS&Bj#n0m@Iv=Q2SB@5HyxrrtkB;7_?|b!ZUpwAbTIaV)w{EYzl(jV!aepn* z`=lo*4d5d7l-A#c2rj0)%TmggtM_>iDrucA;)dS&fS29L^LRU1p>*}e9+4DqEPhU0 zbUsj#lyqF)&spEjliqd!NjQW6c9hn6f`pQx!Pi9eddV0OOCbdnWIRe2035~ploppi z49-4=kc^I&s&^)bk1uF&srdK&c64d<+;wF1-!nJG|2SVSaXJ7@4|%Wv0000Kl`(7EKp2J(JP3s>!ccJQ{D>O9)w{ zMOlkz>!Hx0G9ioUAXC(}OD6{#6-80W5El$3TWwM|kW8hmT1b{4ns4fsA-|z_isbw5 zEQeC)RDY8ny{G5Zon=hOVivQQ#r(IUb_oe@$(1%Cohfy0Sy?Vrf~U!;`(~byC|-*w zZgD~R_@yh@W(#GZ7j)pl3)w*n_O5T>^P%1`0%h?$e!`#3P3&I(J}6&rRfd?c(89d~wvuB|t!t6X5{rfFcN zLQ7!ND)?YCbPjATV}+QrYZeol1PL~7xQx*pv#05grcv=-fj4aA4@n6LD&udmO~P% hLZ>48xR@yStPVW}}WS&4~>>FN1VQBk?Mxd8zINht}jaT&>}Q2+n{Xr#Ta00009 za7bBm000V|000V|0Vb6__5c6_F-b&0R7i>K)jez5KmZ0{O#-7yr9;6G=oOh#Lx*Z9 zNjw-tArvwwIoCvsF_l8?IU&JQ3nm|4LZQ@+$P_S%UCPC&Mn5nn*WB5li|-F1HZV-}>frp;E=ZEm2OCWR6!M0^1ei*#xZ;jX{G zQ47*`(}wf{*lix57_SB1h_R?E079cbo~=Ceg@uT>ufj+;I;hh1Ro#F`ZL z4mLNpTfqXtE-LAli*pN=&g`gQ%-&-;qk-4_;E!86?N2wG` z`ZC4u@I+PHX;rQ9`P?oK`~nSg=^SIf;3ISblVkZKxjU>*4bV%0t#c4Lf`YyMQD;^=1Vv- deT@Hd`~}D1|2TWyKPvzL002ovPDHLkV1ho-wGsdT literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/blaziken.png b/graphics/object_events/pics/pokemon/followers/blaziken.png new file mode 100644 index 0000000000000000000000000000000000000000..7c49d9dcfcc21d4c1eb3fb4fee4c70dace448d6f GIT binary patch literal 958 zcmV;v13~KkS@G%NX%PYGF)8`cQMsw1>^uuQ00009 za7bBm000XU000XU0RWnu7ytkRG)Y83R7i>K)xB%mKo|$$gY)1ai?Q=>gmcf56~}H8 zvUUkVA%o~5@M)VcZ&e*SIko_H z4*;x87aI?*`!(Kj+I+*Xr`}&kH{fr1&MXg1hrL)?#-F`kk2eq=Z_aE(CQN?bp1;H+}!5w;hE8b`-v98KQ5YiKtv--S~u9cK6v3k%lB5eLK?RLhD|yA9T+o9YA|iX-5GM) zM!4MGyCPt}Y*nI24y+iyqYcQ%P4_yAL+taPh{pAg&kLG%9R;$6+^fgIKQ;?=HT4>wn*I;X zK4tT&8#P=#HY6<$#M2?wG_k?uC7o!R9tQG;+;n9n3Ov$19iN=|o=(X`_qM}^h%JSh$k8ZJtz&W3{>O?%T8-6l@aU*C1`QH!1^K|@raTxtMSOKW(2BX+Gq3Z=5( z5-C&!SJ&5YDO$f?Dy<>0<_35m+7NeGLy3k3iiE&fLqwyDS~Y&3J-`F!N^HnWyrw{t gQ|W8x2L56F22EVORTprSjsO4v07*qoM6N<$f(He{yZ`_I literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/blissey.png b/graphics/object_events/pics/pokemon/followers/blissey.png new file mode 100644 index 0000000000000000000000000000000000000000..ba65960e21bebe744dedc04cedbc504de68bf2df GIT binary patch literal 665 zcmV;K0%rY*P)K)iG<^Koke?0}BpH<}RHoLxxT!G6vH{ ztq<3tbBA_KcWjZdQJ8#n> zNwERG>CH+fzRtI@6|d&ovfL5LpI@zfy)jGk11Evjw~%sJ*Bdk~;_>2%U6W(!Snq>Z zXDo#Ex-6zz#$s?Lt_!2Rd?G~agJUmd@P1h}P%J}M;EC(fHTXd>vQJ27EFUHSUXDby zJP;iMe+@90>5UeVsCX4czRt2BPXX!;>K1Wm7vLDa&}mO=Sujtn!M!n)N2xVXEOK-h zuEaxy*LF{9^t7n=`HoG`PsLGYLns$j%aM#=GN+5lCDFTc^CK^Kv(b>Kgu2&jDOjOZ|HdH zl>dR^d?w@RleA084%@cTouk2w_T8$QYMK5s+kQ-Xf9XztRP`>cywY%b?lfL=!MU^C z{PFrSRqC~FAmSo5ja#I(jI8^0OI>c=_>cJw&nTco{rB}B00000NkvXXu0mjfTW2<> literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/breloom.png b/graphics/object_events/pics/pokemon/followers/breloom.png new file mode 100644 index 0000000000000000000000000000000000000000..a133c90b616b076699bd40813aba6978ffb57ea6 GIT binary patch literal 659 zcmV;E0&M+>P)K)3Iw4Q5*;GH|3@fZo0A1LAxCO2Tnh% zgIxZFLH3w4?4Un{9w#^BV61 z+~u4N16V5zFE~r(+YZ3$gL)}fPq86fKCBdY(Uru&C-nB`8 z*h?8VPLhjM7#?TbZ|)u+kIa;_XjuFG153=e;T@WeXdR3gW5XYBUK};wrksU$*y=SW zg0nQI;(2H2aL!&yGVv0Rw}Ez8k3XA^ah88Ly78|$UXl^-ST?58=3IO7RYtW|k25~e z_RH^Ghj;8ZEZ^pAbXWFn{jwa+xOBt!x9AO?`ThpI;Y!omi#QuwzW?ze|HX7;o=Ul0 z&sph8d6SeY_Q192{&?WV`F=O%4_mP t%vkJ?4X=a_#L$L@TdZm4=e7H1`3(ShrnOUQO&|aO002ovPDHLkV1j6YE&Bif literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/butterfree.png b/graphics/object_events/pics/pokemon/followers/butterfree.png new file mode 100644 index 0000000000000000000000000000000000000000..1d19c4f9f7c33a592e3103712d7e7fe3f7682c1d GIT binary patch literal 876 zcmV-y1C#uTP)k7R7i>KlQC->F&Ku0@!~~6@Rq4Rpq(7J z!NqtD=*A|#7PNy7lk?P5_6p#!0uNnWUoxCeoqO6s50$$QD|l|#u^$}j^m-x+o%xl;ueF(<Ty4;8(j`LQn$-Ama2J=X+bk z%wP}9TP9RgWe5R@tuAy=jBX4wQUH$6w>SAk0K@^9fKzR_1=au@&`hKq2;$k81yGCJ z0`hb#?6@&Jf*N&zPkXu-)cqAwN`|{%-(O|+5e5ge0F{L#Z2|U3@-v!^-3b}PGy6jH zj_$TMuW83^K)*IEJ(t&$I$o25c$HRdzsAjGF%&t9z$6Qw4Ky(DnbPRwL+V>~M$cUUk)rGw_PUar?m`$ga-Ai}@vrGvQz3&3T= z(tcT@`6?k)e;K%>F9Meh>*()QdSzruf6Z`JFV`OeF7H_7cL**30000z>%kQMLp00009 za7bBm000XU000XU0RWnu7ytkRK}keGR7i>Kl|O6SKp4hv=pZl{l%>I)a+F$F&^gc! zCCy+%vlQ|bf}s$I7ah_ft0p>2j)zjHO`V~kP;*%vw-8aSfhNQmng;3=t7Hm>5PycA zY@H-4l09@P^s!{?r$5j0>Xm#4z<>QK;^y#Q%TQp%v!@zm`(eK2 z3>vE<3t&7sP9J)PwBPPDPJ0-tcNu^iTwdb&C2TT7##deo#2RikYNp7JGgesuX@A{+ zuy$bWdI3}H8Z60tW=j-3!yCq4i_9E``4z!PVBo!p>a=U|V=1%d)ck$TNtt z2@kZgR_=+D9(geqG`l0uH%#bnH zgknER21(X!B?+4y1ob^pfg1QDJD~890huAC@ubAPm z_zJuG0z=6NGu<}yP+;X*O4oIhuByitLdbT%e8Wz9bHfj~-rNLs5a=2rd%6Hi3Ibi> zVbL58gG=h$*iP5C>w#f-j^pS|5e^&|un{U?W2yjG_3KSAqAPP4(X-Pdb_wTCJ>i;y tK-ch20ii%|SJ-BJc66Rj)Vu;_=?^M(N}disXx{(;002ovPDHLkV1nrxyF&l~ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/carvanha.png b/graphics/object_events/pics/pokemon/followers/carvanha.png new file mode 100644 index 0000000000000000000000000000000000000000..ceba6596d6a9108f5513bc78538d8d8593a0442d GIT binary patch literal 768 zcmV+b1ONPqP)FN2YvAHohLCHBG`B5qP*&zS`00000zTbFg00009 za7bBm000XU000XU0RWnu7ytkQc1c7*R7i>K)IE>WFc=4L3)NXzFjCr~+~SgvrB*xK z)I%*Gx+G~F;8IJ;N$G-aC1Gy~Pbze}Q!+)jaRXzAlmYTxNSil1#XS}lR7)9t zar}Rtyf^?H#$g=B|1$=APr&?;`OZNb0f0JZ& zm)ZXzcAR-Q;0mC`WGhu_V9rhBoi4M#ZV7=~HzK~ModyaW)@(j88I~Ecd6Vi@VCMTH zE+68f345sRai8?NGMj9!60Hi%JZ@I)x)7gF*qH`qdJ&Mh4D1j>3Gd#76owk3lwhX_ zEd0K_+*q5P{=_EOUTq85vwNA9vS5ewZp8w(RRP>1q>G0|VD6KaTV8&orv0Qn9%Zl9 zNN8rZ$_x0IOyjOrte`&b{hD;OY(K%#Ca((2{k*yZK-(XW$#L(qn&m++H_AU$8e=>~ zXIh-kpU2pHWMVDZ&QD)=PP_DR8JPQ-=T;ToUM!xzSYDJJ=FWF~dWYBA6*9x(4iUXJ zP>4fgyP2IgUq4+U-zowN&#HU?7hk@8UtCITG<7Syi6h-c`8!gaFbM-Ydq*%_epnjG z+AbDv%vKIx0Gy74=%p^P?E)*hi37d-%77InQBc4L9VhgXqCn+~j{18$)q@y29OWCl(v{$v*(4DLn8U y|4jiH?xE5YCU?9&cZWgk5sE+jS~olXm*Y2NCiJz(&hha80000Kl0R$XFc^mgh681jJ@k5;Uqf*>|AD*9 zcwqWDj?{Q>J2dImK!}_v=?#rCwcOxbK4oQDPF|^vxk9`7H|eon{T@3JA$|Jv>C@+< z@})?>7w?(>okqoe{XYk?BERSm;zGs0z;EaC%gB!bi_-Au3e)2>@ZF1ponl7h9;3Kt2NW*cPI~SAwhnJZcM7Xeb5Y`Ej8opi{|E zHjrl{DHuGp0xjGbg4y&8X5~?#QCPEE^J%j#ijnV;?V{b(LjFV!q2)A9N>pGAQK4cc z(Qo)638%~>RV&cK!59n3I)ETt9v7lQl@$Y@HS-U_Y|T8=U$lJ=f_Sn=DU^I-2KmA^~FKorN5;anO)Xc2>5#aYrt=u&(N zqC*f0YAGm4LGeFua&U1A{(#WVB6V>vh{i%fRS0Cr;{Ri=QSaT$4|NfQez&`K_dfTz zCXJ$uGtM}Fme4CKYhm&3?*YSVF<_za0DfULj;RdG9+S=_Z85clx`OMn5wA+2Mx{tA zm%YhbG$k3a$d6l0nz*Gn080a?Q4FxGo(w3XH7p8r-ID>LN;G|_8-jkL?{j*a?Jqa^P6s#{>hu1_{k5kN9>=J&he5l$H; z4UWTb1~s5Ys_V2|bVZU;=_!0cbZV4L>bhlNC^6D|i)R7)ky-y_v;Wmovup>QZe)bU ziI!pPqsNdMRei&#`gum0;o|p-8}$j`b+qB%y)JUo&Mhc1QX?PJeqIF_K x{{D$kR;W=b#E7J*_Srx_@h|H?_(cDsyaT~C=!Q%gjfVgL002ovPDHLkV1hh=BH{o5 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/charizard.png b/graphics/object_events/pics/pokemon/followers/charizard.png new file mode 100644 index 0000000000000000000000000000000000000000..d435a4f3f07e9cfc85697507b20d9958aae1b4e3 GIT binary patch literal 1110 zcmV-c1gZOpP)KmA{MQMij>fhDCve1r=VB`vW#91;dSu zO}Zs1+^jjoZPF#mKAX8loG%(7lOhpoi%pd##kD4*&8u9PO+e)}DfX%qY1V(j{SO&w z^vfpRR4D>Ch4Dukz3+S9H$Mn@Ki-f3%Ww#xk1=74Jj(wv=!%embC?MO*onB$gzgFM zu~h^N4m0IK`Oab15B%Nudu*-JbXQ=PV;_-chnevmxjkkMvv9D&fHid)ZuL}*n2F#J zGX&;#@+o=NR0FGwe2w_)D7*Fw0s56)vwdoUS^>|&x2mR6wF-u#JKq|J;&rH}3N>-BL{M5%aX%c3?0jtm zy!aQPzRbKzpm%BbdRz&_0pHvuR@Rst4A1k#Qn)JA&$OK|l~2Te!O7xjsZ=JCJaDV?cnUH^E?MZ)v9FoQn-81w%Tl?gXfwnPW^(A1KHD@OYVS9hS zg=PIgWVjYs%1{SfOk`9EPzW_oTY(3GYSEr11;e6qdPVTvcKa8!JuqAeN4(oTlyJ^lqWw10)UKDD7yQft4<|+b9hVF^P5qYC(X0Q?O2%rPFZA+LHRP)Rr~x ztxrB?%$4m2a>m%pA38UV3;IBA-_JC6uP{Pi!mNAE7udZ-Wp{ENRCY;9t24(6q*!Z*4GSN}-<;$Op zjEp-Y6(4G9-dt&@=^6R)Vj)l!8aQ*{(Nv%iXMsm#F#`kFTo7hdn`--wfq}8j)5S5w zqx0>gjec7VB-*5%ZrF<~lFs#e{6>~RvpHGYSBAfHQUPOn!51+fo3`Cs11!Ed-+p@j z{SoW0nGY*(GbvVodvkO1^Y@1$1fSH4x-hJqE_r)b-LGaQVZI5Xa%SiK4!0=yad>$c zv^H)1bL>jqGW8B~R>j7rdAske)yX~RAfWCZqu?l3*SAD7pd){G>*AbyK9}SL*YEJL zV~WwVKQ2_2VOaiFYtMY{W6F;fs{1WcZ;*caJmPunH6^(?v1K33#OH86dgwFf$m9)Q zjWa(LhbhU~iLFyh{PlODxZl0IOqV<^q&7UR+2dy2^srLa>w%lZR=I7K8F$4P*L`Z- z)hhZ$-0n&c(_`_6)86*AW}IROcUU=n=gm#k349_SSS23bRoDNUQ|Ik9wZGLs{1rzl z!;#C}Zx3sPG?a3QYI!W&Sx_=*rr5bxCx6J!V_pB)^XE(xFY_G%*5N0%7S&F?#`F7Z z$k~=^wLs%=k4I4pjEhzI&b^+kf9fKCQtNHb$2!dYIbyB?|MT}T)VL=wU2+z_28uaP LS3j3^P6G}C-Spfk7000000000000000##oNI00009 za7bBm000V|000V|0Vb6__5c6@+DSw~R7i>K)Xz%8FdPT)UIvAp1c!nTAbWgv^2a z%mCI8EX7WpRA@pD2Y_ifNs)UfpwxrB@S6c+u-h@!bM*u3jU()d9bi&%1J~YwlEZ4# zr=tiP1w86oo)>;g$SAZs&G;Pns$q&fwgcWzfe%{0h1oLX>DCekgy^5Weu|9(qy#Qo zWRSZXZd`9IxFES{cpYIM+W`s1hxx1PDfY|ONl7xIeV_Nq+KRkkLtOXlq1b^?OZipH<7WENB*PE;ElbM_hAyd}v zoecTRvMI(7j&F+2HvKR yy7}=N-VlfD2JVPEq*}CqR@pt2Gxuw^KdcY*yF-t7xk0)B0000 zGBQ>+&b)Z>Wn^Myp`zl?n~|NFiZ5UOytptBs2l>C);xF&WN{XFL>4nJa0`PlBg3pY z5)2HCLY^*;As(H{2@Wfvkxt$q2Rb`UE@a+WQyM<;wb-j`E!eE<&;ewkx znjkxXRaUEN~%`A~+_W~Ql85lAy)n0uW*xL;XJWp3Ymvv4FO#sV5 Bs@wno literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/chinchou.png b/graphics/object_events/pics/pokemon/followers/chinchou.png new file mode 100644 index 0000000000000000000000000000000000000000..abf39ef13689c60fcede09253b6cfcb058614c42 GIT binary patch literal 708 zcmV;#0z3VQP)FN2wx!C{!00000wN3G|00009 za7bBm000XU000XU0RWnu7ytkQI!Q!9R7i>Kls{|RKp4hfIIKaM(x9Oz(}^n3E{YB+ z+&Pmcdk`UXIhvw^y2aq5YrjF)t<^yaq~xxGvb21AoPu1> zp`9S$p&#B<-GEntCAe##s)?ho)~a29~ zJ-%%Ksx8+8DY4cp?>HF++!h=iG~aN4?K}X$XI4XZWNug+1m7F*--rqy{y|OLMd0V+ z1q4UZa2DO(u+$PPg0;g+m*j$V20acArf{8$yhbfGu?yjPu@E($Ri60e(V2)-OK^AZ zvWzkpLZl{C`2sW(6Y7*4qhJiPwT>**JbK*dOwPn*VhPSdmoZ9mjDoQV6{9w6GA|&b zi^U~PM^l~hG^6u5a-s1G4JhyQ{PWOZnQXQa;@vWpX@iW`@Lgnry8nzbO0$kh zv2p~-lk=WI2;=dRuEwbj6*D(HYYkp0!TlbG$!h%3{u6m=Ge+uPuqFM#Djh0ju9=(6 z!T*AKS+ec6Xf`pELtLH2dxJyv$YzXm^HrUAQ|nNRpPIKnbmp*`lu43Qr*)h1spQv_ zHiDCf@pG)+()Z7*uAyuuiaSA%dr6tVzTuRTy*7oQL@%qq1to6n_q)<= qPuN?KeY=BkyW9N6q%X(dztt}Re6HsV8}6V00000Kls`+uKp2NZZ|im`(zUsYE>h|pr39R; zi{O$%=qfGT;1EcP+|sF2KY$3)O`%}h&Cy8yi-Ic5ag}g_wud*6r$|&V}*4j8$d7EF=MI4T}mP zPl?&J^Ld>ME%A|o&0P5vBq4aC!N_@42*0?tm9-ZQxKI~uC5w4+zbpg}rPOICguL$7 zTxK;@!a9O-1Bdpyf)G&7RN%Of4+TP)T`(6i;q|mGM7qd4^vu7ar%INDT1s~z^yXtp zU&e)Lzs|gP13>%!b+@79xRA4JKxoXy08GD;MZ)|{zanzDhWmH@8=~Zti#lyXn5&_8 z+AtSgmreg-Ul7V1X7Bdlevnf#z|gjI;Q<9Vf=n{JRPdJiJ?w} zL-si18RJRiWFmZqGKV+p1iis1uVk&9CuFzyJs(WQg^y+P6^^>P!J~NaE9^mC#UPlr zo`jmr(ISBvvW_uAO2)x+Y$7s8A;n*_{O8^DC;sDn0(7*Weg%>Jp#T5?07*qoM6N<$ Ef-*S=W&i*H literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/claydol.png b/graphics/object_events/pics/pokemon/followers/claydol.png new file mode 100644 index 0000000000000000000000000000000000000000..45cb9b9f023554a5e38680f5b01940ac501cc6b3 GIT binary patch literal 628 zcmV-)0*n2LP)~jiFsMUNqO11S?THdSy4fWDM7ip!Rd){0RaJVSxEo@00000@ADTN00009 za7bBm000XU000XU0RWnu7ytkP>PbXFR7i>K)Uj*SP#g#FO4bZQQ7SmK2{lsBWF^)E6N0SjW^g zRINpHn^j6|9+FVHGc(kzwazJxNjV=mJ4%n~`;@4eq!)BME!Si7Y^GWM87kJk=lUkM zBa2KyoFvmw#rh}~f>BXoi=EFpaRTY&bz8;elWq!e(s^9GAGWw)54w{M9Qkb(oBkPe zx|5+N7a)rZ=C9EkzdHDJT5dT5 zEC4Gk=V9}e@SxXwXEAvr&K-xBeY3IFDEn6KSbpv9?z*ehdB`HHak5eFgxq?0!g}ld zS}!bn-A!G$GE8?FRGpmxfVzP}SZyJyJ3G_E1sv73i~V^1ffdJo O0000EWic{xe>!NC9k000000000000000000007!~;;00009 za7bBm000XU000XU0RWnu7ytkQ1W80eR7i>Km9dVTFc5~3XxyTG5%y*;9OWrjY@O8> zd4f~gSh<02B~WZ?6v4c0#`c1ZW70)RvA?tu-`M_VY!6G8J@n8+5B(p4a{G{Ct#7-` z>ilDZpD(~GZaG}bJr*rBd#tt4Kd#;|<}7=<5(paWUth{3KQoizYl?Fsh2H@dx0p@n zE73r#%PzM}ZJKMOSw3Aai(AY##)imC%6+yS*{UDNg!|hLAC2SG9m@p2*v&wfPW?H}85DphkB2hBHBY3mKll^cvQ^hkHC5pqSeAFri=wFTSQLi@n~5~_{*EJd zD>$TrgR2~m%Q&3gKJ(AN;Q$)hvvl+J?g{Nwn z8?&ppF=?CiVsdR6mxKy{bPMaEkgcHt3=_=g*(Ffe5(Y8HYDplJoKc}#6FAlu2JU;+ z_{GD_37Tz!yh5Wefsy|^QL<^|-Owd8?B*-d8$&e@Do$`Wj1zbk>@J%u$pTSh9&jek0 ogz}BS-v*;8dGs~=Gw@IK8%A$vBVO~Bi2wiq07*qoM6N<$f_51mk^lez literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/cloyster.png b/graphics/object_events/pics/pokemon/followers/cloyster.png new file mode 100644 index 0000000000000000000000000000000000000000..4515f8a2180c5e6e53789b1b4f0e788ded2b6a6c GIT binary patch literal 1096 zcmV-O1h@N%P)VL3TD>FN2wvFVXn+a0000000000000008gM_x00009 za7bBm000XU000XU0RWnu7ytkRzDYzuR7i>Kmc5UhMiju2C^Aat>fGK{SFTKg2wkN7 z2PZ~&TeL4|s+?q*RVwx{!(-aW(ypsWXy@?!l^Ny(xOKdhlQf~)9}j--y!qR zn+yM8Kgqwf@uK2yp5Ri*%P%V+^%b4~uf<;^Ac)mv1*{h36>jr@WGkbFcI|vwF$Z<| zkwb-IxWaKB61rK%cTHP-wPMbcs#nqJg%m~P0PBVIZxfI6ACf7-9Crz@{+o(JrLS?- zE!JTy8!n>&r@q@9gOrtwZ3yaNF>#m@6iYnbVGA~{uLN zc9Sln+tY`ts^0aVs1@u!TRs~BPGh52t`>qV031s|D{S?&RI~8@#Fz!2Dan*A-4Wsg?aewsF zRxt6P%kX2W7lviGEVQtoF`I=?H--o05*lIm>IRR?I_UA$>p7p^9vdxum^bh+wd~?g zH@rL#Y8HN1Sx)C2H5~gR;tA&yAl1+x#byzfh=mvGmMpshwNN#=YP^tihHLZ<1hE)T z$J0@9-$AMR<4KJEND*q(!gAh%iDNJ1Y#4A1yzqO+^F`Pwe!@OQFl}6|{Lo}SYk_l71 zT={}ao}Ll4c=@kk9P2g4$dmeOj7VM_`j>3(UHok!HC~N>$(O!=?fMJIOEKl|N70Kp2OwEUDCEL=1H30-+)cQoc!R zMJ1jX0%JsLndEL_2pw3e5}~6oA_Qcrl$yvMERb=MyARd(J)iAM#h;<=mUnTU+^n7AqGz34sb=FsuM({VmXm#Ycensj1U4drdK$R3elbp9QWD?F)%rE+jMr1pX&`}pA zY{3L0gg|<;)f|v+2RBO{$E717A|up+$T)x}c6k!n0mxBmZGj%{fWQNp5n>=RZR{Lj zL)CE?g%IaPh!?|+cPMOJggh;8AoA3;ZYW)AMT=rMIyXWL%=lNUh7IFkbs2;wZ!;kV zYF=Kw#dS_c7tN_#`hZ<=W8Z|k-QZRI$ML2SVxZ>A?Y3^CYTdgM;=<2_7^r!_rXPx_ zSeg+6GtsvLh}!skFTUUVMhJnLSuO8c@Ep;1j8F$6?`4CNZ}k}=@R-d85c;LwKdu)- zwV~O15}4yS&AkE_G@E07|KWZ{2>h^P9hnXYm)2HSq9?h+0^bjoBwIkJ!n;`Uy z_Y|17Qr~`W2@ij^wnIBWbJ4;ibDG>Q13560+4!2b!ducy8fFmKQ(jUq_J?fT`QVG)o7z_lU}gp*E3u_8cn;3N;MIjNr{rSKtf zxqIYVJ0MAL*E@)1xq}!u9a_Sn=SA!ZP8#b+PU04~h&ua;3#nFsjHyzj{2hnSz|s=J zQxjR^6gdx&e4!Rm>k$d=U}`yA3m+>xP$^|k(43FsRoVYCdaaK;|3m!-sM5b-YdCKy P00000NkvXXu0mjfFmQvd literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/corsola.png b/graphics/object_events/pics/pokemon/followers/corsola.png new file mode 100644 index 0000000000000000000000000000000000000000..62c09dd48a8ea71c889aec2b056b740933b11038 GIT binary patch literal 669 zcmV;O0%HA%P)G`QaS$QEr>4Bl~slnN4fx*$~000000000000000VD!{G00009 za7bBm000XU000XU0RWnu7ytkQ6G=otR7i>Kls}8xFciQIC#=2w22JSF?e3t%Euje8 z`UtmmFmBw*Lx|&yCCC<8jqKOCG?1~}aK&G)k`wEX8*^|_=#aPltf%*T(zES(*SN+t zu5pe3B=QmCY@E?Q$*1{+`iD`q?cah!=A?}{JPGmQvS9l&c2@8)A#Mgi(z#tBou+!& zniJ4M35sG^9|E3!ms79*s~*)EzqWHN(cr4<)vhG+607SJL9!McTdlq8VOdIR3re|B&?|?^mY!_4Pv!$$&=p#Bp zEOQ}Y)*GNWcE4`QDNr-hG5f3cvfzAuQHW)3TU9#w#73wB3Enio>M8baKJ2^wOrsR; zJ2nW{RabT2Om|~e1;dBmY4?##v3K+4`T5sd?=sU*UDwU6>lksrVgAtF&!!p8Z{OWp zd(e~Qr!$bd+1;(x@R<7z3q(BfT9*GT^PjxH|2F;r(uDrFd0ap*00000NkvXXu0mjf DWW+L? literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/cradily.png b/graphics/object_events/pics/pokemon/followers/cradily.png new file mode 100644 index 0000000000000000000000000000000000000000..e53d6af1c5ac4884544cc13360143cb5d559de99 GIT binary patch literal 1085 zcmV-D1j74?P)KmQQQrMjVF6J`_Q9=onK%szS1KVM%>! zpchlndde=ry(~3**c^HiGVv`71=EAF2QkJv2aEW!U=Yly6dD|)gXDF*@_Hx~dJPo% zMLN=Gq>;OFmO^hGZ17{vypJ`1elh_6w-0J+$lw3=`n_#E_p$D;_3ra!&M(%1p9=MZi02Z805rq3srAe>tli9u_uL`CYCxp!Q zXf^=*nNZ9zy_sUXzRDxY3<=R+o3Z#cph;N!)EP;;P+2D5b*(%g6J}R&ZDaO&cJK+# zdI;vg`jQ!5<%0br?5We21P)5RL-G5CD|bBqwby$wp7WJdu;5f!OZpPc4>aDrp7QIB z9|@yk51tGO@m{V>i?a}N-WbN;JFiOQf}bIvLU`ii#o70vg(dV6~wX@lZm0LA^G$J$4(C3u<$ z*MeDbT0~kae~73)=S)aXpSR&U(()T_u=%G`SkzNiiP^k|N+GZkVa`c=`&025P|jIG z)M5)fn*NzzUO?DV+~1@D7^ru5A;1zR3tUv=dh4%m76;({tRBKfI0~f8lmg{yAqjQ| zuyz=I_lMS~VwHyVP0*49LCY^aadro=S!g1pYt_uEQ*m%p?iQ8eLjq{Rw3@*e-3V$2 z5+hpTdjeDh^(I7N6$8M^`(t=e$!tL9xExSsz17qg%}NG!7Kfx&-DWo6_s`1#C1wX< z*_HoGZF3!IEj_GeHh|J{K$-vf$8n3(VP)8R_Zysj0d7*;!dB36VJ=`DtNUQ9(J8$pHZY2aQfn00009 za7bBm000XU000XU0RWnu7ytkRHAzH4R7i>KmOp3|K@`TfN^uaDYYxsPkVeoVMX(YC zVT!mH*&=L{5Y#51O?sPvt<`}DXOk3*$ZTYryJlbDnky_8lI9vAY$3L?kvkJ-62>=w z?sjg?CW2^{*ZpSZeczk6?{?2|ZsI2XTRgpn|5jjb_iDa2t`qp@2G81gCA+g*zwxyK zXt(u(Ziy;BDG8QYB{bXH;tGDZpVEa2o-5T>W*Kg$)2=U6volK5L0-Yn-_jYeGV5D4 zo1MIx-PJTr{mXf-xy2Lv0wvZ7ezU&oS947YdYAKDr?b$qiYc>BAV2FPuZo4krJ$8% zSdGh8y*?sVF=bW}EuNfwzq@xiyJ>Cl9#StZch!au!J7#P-q=jkCQ z_)v|YGE^+m6c3070BIGuWmXAnCnf&NqC&$;uok8v?@}5XL2ZZ(qx}KSOYO%Z0Q8IY zmRKdQ4=GupMTMHRU=2vbDIs2H1krFLIpSd}k;h*}0FhPiEIUq^dYm4RB(f@0%vJ|@ zQ#S(22!^KxrJ-gPL5%yKPNm?q>1CD)UEbSh1)v3$q2f_jRT!~EwWMVP(a>v@Mt;ct=$j1royh~h=Ux}<0q7P0EuS=(a>jNFdr~uRh#D@~>?|#1EO_wk-a1o) z(onO=mgN4ta0E~q@xB%u1{rYVe(qk#mJlKcO(1T7?z>#D*_jVS+*?}?`mq*7L&M`u z(^g>E5(eTz8}dXl*Q0noARbOd61Q*dO&5HN9VcVJgWd-3Ye6*BoQNZR00m<~8J$c9 zql#69ZaN_Tn8ulSez2co5gYFxUXd~BA+ZMoUjtaw~+OPRNrmk7Ar2`jjY$p3`-qhXN!CW h|0qQ1ze1U-;};O>yb~%NZIu83002ovPDHLkV1mtIvS(5n++(>G^q4k)bg;>DghaxzV9Kmc4G&y zPC=E)Z_rJqQzG!#p~#$}=nJHKWJ4(KQ}*(ovXchr(k1j@Q-?g?xfDgYC|=uZJ8C@p z4eY6_|74IZ^-py`(Zo1-_Ba2h4PMfPE;t4NtdAyHi9c(Q>nERB(&f@879HSaoV7kI zfqXdgW@QXw3?7g55#YiZg6?D+uZ#8LApivqG67=Z0Lb;GXF=yX5147bZvp_s{1Ha} z3{WDH0keRfg~S{K!08UKin?qsd}1xzWhxulgk=cm3OV3F$(1$3-X}Ic{T!#;wpd2p zr8bGxz6k)Dh1E$nNh=B38%&fl>wRK~rbhs$I{+mX8DK)O@T}7#fT8w<2W)$92)MPQ zl-H?L187&w>9RF9)+Q#vRahYu1D>%FpgX5T=S*8by~SXFdTJsOkW2_T82zkCfF<*Z zi4_6;Jzbe(fP$;r?>O8kWv|u7$|jaL7y#_91oa2j+B*Vvjm(|eH#{UJRs_7i$ARn7 z*&*wn`1{A)F-wWPt%xI@TF2d`&^Tz`_{VOsvK7gehs6E9xejLa?N(tw@`t|G55IKf zw@g{#`8VwEWbYry`A%qR3!M4^#G{JzsZ%MjXp`YP8cG?n6)GebUmqScm*HY1Ohw%L z!Ft})B!x2-64j=nDkb(TCw>t$7PAwF?^#I(>*6e8ZAIRn4l-5OTGy4Z=t-s5XQwf#iG4XiM%&KcSB!F0ka~75#T@ulmihQgT2Da{LmV>Qm;-77k zcrqf08yQ!Sdd=rx&^iF<52m7z$^+tS3q7E76>V8atk`Ig#0?}sxryg&v1rzA(QNO{ za{$q~elopQlk7GZa04RV_i}TYgeL%Hwx#{?Eqpf}m?sASeFYgHD{kQcKA{I>x_beI zqdpz^2Y^B-+H!s#Y^F(g>xOyBegS6s{P<5msAU8IPH&00B{QKM4Rd<_el4E?Knyj4 lxR(C|D5rd3k9m>FN1FX^E*RL2<$10RaJtNdeI@NdN!K)-i9>KokIAtFi|qFHxleq6;7)bxfZV zFwS5&3pIGjK$ZqYDuIg-T?&Y)Q#-J>xI^7k-MUnW#pzI9hg2yNrBUZf%q*ztZ@@h( zch@7AA|aUirhN9h_b$2fIfii=m+`;Cy1;*3V7fBQJtbT9g#|9KeRBS$>OU!1)!V8Z zoyc=moyF72P@DB9T3aWlKYJeyt+N3~`$HYpYrf9bkJGJhas$QLfTKfyh;5v%?doiO zs#dq8FRYqP80)q65ZkzoyE-#^)!Bdp-03c8Z9j(sIJ1L&C%)GJC~Wp`s%8VOdx-A1-s9NLn++I2=Mz})qDLxlTduiD%JbN@lG_i}H5 z&Q`1n_uQF9eKVPyqcg9?J|vm>lR%OprH#bt=R@XxzTHD8HY@ymw0i_oTfBuC=3mA! z@PcN->;=5w-SitZftzIRH#A7vfOf&2bw6GvWD| zIPd7ZSkk<yZhis`9>EU`6b+iQqYqxm;?T1$PLp7{PPnKTZ-jMv;Cd_Hhuy8)?@VWD`V&Y O0000G>fsQTfqfQDLE>DJeNYQSqS>VLuTP00009 za7bBm000XU000XU0RWnu7ytkQKS@MER7i>KlQC%9Kp2GuA}R z=X`8+0B0l40nat6HNH6@9F19NXkByZU}YVv0~_j@4jV5Bt8}!Oh~p?Mcd;mrMF4P3%>95#82^oG()91xd@f*-U z^ZfR<-)dyTPPevFySI=J&dG4YCTTIP^Hjmwi=Ex%4?IlM^#=BA*AMo{>^OCvs_V79 z7Kk(^+y{+ZLb`C?C&X12E3SOsF6&Ks&F)qLR*(AbGq|wgc8|XU!z16XyrB91F$i4! v`Mxs!_2bot+J0?L{@=`vUTr$J@Xz!c`qCwmitc1700000NkvXXu0mjfwzED+ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/delcatty.png b/graphics/object_events/pics/pokemon/followers/delcatty.png new file mode 100644 index 0000000000000000000000000000000000000000..9896fa83684d545537fffe634e3358ce596d95aa GIT binary patch literal 761 zcmVFN3D(Scz}i2wiq0000000000000001)Odo00009 za7bBm000XU000XU0RWnu7ytkQZ%IT!R7i>K)jf}!Fc=4LOFkKixeDs)h|C-m+OnMz zL2m__fr*3QG?`MBChEti6y@YC>M5%3K4pOzFa(n2I#jx62|w)T|2Quw0KC;({XZoi zF7XxW*clMMay~T2nn>N(2KSy9z2YKK#jOF@6NpaN){tQkwZl3t8lb0YLO{Vfz=%(Q zdZP6jAkq%(x@<80RzS|$F)rUSigDEIatTiW{V4Q2nr4Hp{*F zhxx*f%l#rwxD-&>%x|c~>a~8_TR*CmIj;v4PKa+3p9&^M<>JJKMS-DOKybynfph{y z!w1{zZU!8m$VbKWkB0#t(!lxUkVx>|zBVMb{>;`l3SZ^E z69&kT1S8_h!(OtVEEzEL$2Mb+bs%>&j~^*qH3vMiuFcu~F4DDr8}{sxIorCsv@5&; z0LO@KC>#$ONX}xEztlzwbsK+kx3f_bSNNR+#L^@MEr2GNN{Zk-5JjyHDhY{_12SG|1NNl8iR>G_!f0m&H|000000000000000$k$yO00009 za7bBm000XU000XU0RWnu7ytkQ8c9S!R7i>K(=l(;Koke?Gg)qo>%>aTQc^(~V;P}R zrYMn>j7*)aM5n;W0E`Z`qH~xmMN!^}vLG{6UJ(9roSnq?eC>5WVnKO>rJr>7fA7vV zA*VXksZRBuRLCDUp<(gle``7(*W(luVkAwkZzhkK5WVThq)psFF(C`E@~oSLT5m){ zTkBgliE*H6LY9+N{yX+Vo#RQ-aH8|uyY(8!sTN0uZT<@qttkxiY_iq3k#_;m#HvNv zF?@?*+0@x!(>!AVdDx9RfCM*CEQ+rIV7(1>CQI<%Y$WTB#9I7asxBsi4s5%L-b^&y z1RBQxqZ#V1y4VmT@gfQIX72&e6)muzd|Ciw@=8=60&m{c8wk&5Eef;6+Ftz4W zC+%13OYaUcIb$<4v1(C{?a!EB1(NI1X{Yj!RhsTlgPN&7eLe5UH0pZ{yO{X9xHVG- zI;CBC!j{iIq^4Y7+Br0cMyu?KRmUgM_@{@xPaF+W8EBN2r!=m_JCz3@r1Wt;A3n`& z6vzj;V=E0Vb}eg%uFWcZF5MAqlN}& z^B(e>G=Tx0l8VxL8+O!DJdaIK>z>%f$ljC00009 za7bBm000XU000XU0RWnu7ytkRHc3Q5R7i>K);(+6Ko|$`rx_|ZNI_&M2-^_4bn4J0 zu4z6*hjSn_Lx!A+L7)z`z@U7PPA5Vmdf^Q1oFx=86c2$A2?Q5nIs^pvXXu^Ida)wA zl+vlaNx%E!=T5rQ$pHV`zth}5F=ESM-Le^bzwrJVqnp8U{hC$#fZg@()0IXyc&T9B z*@SLzyx#rQ{)CrDuRHqz#(V4CAFMLMm{beaEmwrX5aYfJj5XQtT@p8PS~zK z&${J^`{5DB*k*XY(Zu#5S#ac$L6c=cKUp4N$p9Q59KD@j2OrR86Neo2iA|g)qX{M= zDfeaFs>?helgXv?##&+F5Yi`(lQbEfUy^uOu29{ojh`M)&M)i^U12UFLWmHJK5Jdt z5h?_DSn}D;xm3)04=Z=dmgnCq!Kra#*fv-SEV;ApHFL{8dPi*~tp# z&I)F^AjFCDoE292*+nlpY}0apnjv7Og>Hi{;{=&jKxM%W)rPSunB{&%#3;{Asttk4 zH@FX*07krCIKCAq0P~b2hfLM;#^y+^}Zip0Z-f z3s<%kz)Ymm?Q|yY6attJwWH%ZSx|P(+dIDSb~}q4O?l=Z1)0MOE)vxGUKG@xR2~vU z;Sa`6?oY4ufQF;ZZBl%bbjdx&y(g%R7jwiq;f-{H`6)%^9b|@Lm194KVe+m!h+IQ>SFq_N zxl!!r`L5F|^3p1o&)iOVbxCXXg*=y2`Ett_OkE?9YIfgPuEzC z2Guiu+2dH>YsI`c7#D3uf#0pM?^54gWh2RM8!CSAzeOHwAzfon+FfO|{QY|1tgo`I ie&6-!KK$GD7u!$wbyi@K5&E?N0000>G=Tx0l8VxL8+O!DJdaIK>z>%f$ljC00009 za7bBm000XU000XU0RWnu7ytkQ+et)0R7i>KmOpFUFc`*7mIDm|)8XKV3(eB4b6ff~ zbX}SuLwuz)kajqMK>Z+{bd;W{f)Bdi5=t`^w~!?QgAOtU4$hyU?<>pyRJ%i#`Mkkcg*)S92Hv>#y zJZ+`>jFrM1J(7c**uVk)jD~q*<};qDG*ohk=g3pu%Ou0GsndPNsmnQimC@<^$1vlf zekSWnO5;|5$58vQAj`f_=f4ISTN3y4`N1Wfo|?KRK0_^jinrN1I}#UifJ?)EKF^{! zHmv}Uq0*hW%GMV~?Bo!~Cp13o=ktr_;MWT97@B5`_;j#-kcx7)k7KCQe%|}`(X7 z>Q7RAlZ_igpJBm-ZEhYFnwJaGE9H3Mc%qGojLvJ_ajBC-Q4|GlHtaDhkO?b_TPE!S zVp^P+I&=&AR_S5Q_DF=8jY=Cs?lBthAh>avh82D(c496aC1IJ{C zcOb$_Uqq-wK&6LxmrH0!yXD}o+5tiGLGDMInTNp&=Ly>ej>#>abX7nAaE>F;3*3NZ z9HQYkZGUd#kaxc70-|86GDx>L!XCF v!%jz(Bpog%;X!#vhGY1DBL4i_^6%<5E!w$Fy}k|t00000NkvXXu0mjf^{0!* literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/deoxys_normal.png b/graphics/object_events/pics/pokemon/followers/deoxys_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..000d6ec5027b314ccda4155b783ccfbd6af8c5e0 GIT binary patch literal 897 zcmV-{1AhF8P)>G=Tx0l8VxL8+O!DJdaIK>z>%f$ljC00009 za7bBm000XU000XU0RWnu7ytkQ_en%SR7i>K)Ip2WKoke?!OOxs6oRlqa2NI@h#$ZO zzs6J$_t3*mBoe3xGZ2Uu!Ot;4oZz@AtXF&4gPwX>!2|+X+LKUdKZ7$#)6UE$^`f_Z z^zuuZ|Gdn+7NNVktAAAobie6%zyF&57SnyE`1!csG_qE=EGxu#IPUksImRC9Gn@~Z z9%frT@C##H^gEV38~6DW#=f3rTb7U=VW0IGxa3fvZi7Uizkp?VMVzU?;DzY6;JFIS z1?%+1cZ|udxm#ARbawu7h69XQmw}L6E=Y3HytwTzGd$D-Z6lO9M`Skp5jaPz%W&<~ zf!9unIt-VyVG-^EZ6h`F#b`FY@(S8*8dn4lgQ}f<(=fft!*DkNw(CkiKAhf9S)U;z zgaq0l>xSul9(&r*TCQ7;K0lkDim15 zN<0y_KMcz!lgbFRtrqYm&dG7w9z7+dffN;ui`*NV4w^H%x2(#N?b2+^xh7S)I9XPC zGbIPa&vc_qo@Z6W>lHPbDiZOs{RTsZRbU~~Hc&InH-YBV z*hVrb8zW=iEJJ|~WLI^d=C+JSJ1k57bEd4{5UEeEGb_-xdO{xXJ_~iF*XF(3{;%~1 XwVfML`xDa%00000NkvXXu0mjfWdfXl literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/deoxys_speed.png b/graphics/object_events/pics/pokemon/followers/deoxys_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..01817fbe85f58bd1e5a6a37209e07716843346fb GIT binary patch literal 898 zcmV-|1AY97P)>G=Tx0l8VxL8+O!DJdaIK>z>%f$ljC00009 za7bBm000XU000XU0RWnu7ytkQ_(?=TR7i>K*1>AqFc=4LuR8>E2$VuMOq$E?gUyF! zeh;ru+N%SGLQnB1w3plhdx4!4%#uuv4co4{gt8rqD3q}n%skT5ptO00>62v1abtI^ z^fnO+KdJiuvMnnyjQ{O#+x!mSx7E+8eeVU_6;L;;eP;{zaHStSAZk{)c3}AaLAhB& z>0VOlYD$vns+t&0^bChXD)-SNtu#&Mdg_DSPgr=5FXMe_+;7j!aB&2mG*5}#0W7L!~+ z!F<9^(3ot5SLIHjt@g>({+Z@pnxc7&KE9Z|j&P}mP%mEXwbS<(>7m+Tw+xMtU;R%} zLb3`-T91dUAjypji-P9OMLbN^KTGS?u=#X@q-he&Jkg8#!r3I^e(!}T={C;fcqqIs z#-E2VSuFJRasSSpB#4@%OGwZoGqEqmXVNa8gxrL5d+=$9*MHzi%eR#THl+()5qy57 z1IFxN99hp=*ci@W20B;ffdjU_6ZPX0tLwK*-*iLBb68?-Gju zX%S%99d@=~s{n4a9I!cR4e|lfS->zIwZd2jWX=NM#j5Lj#C<)_1)#SvPc~T$hVPkZnXd0Q^Wl6Sye0wg25BpkOp#>S7!D9$r4$Zu=qI YA7AGx4^3@50RR9107*qoM6N<$f;Eq$>i_@% literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/diglett.png b/graphics/object_events/pics/pokemon/followers/diglett.png new file mode 100644 index 0000000000000000000000000000000000000000..958ca3dac636ad3b2dde025eb83e70a19c824072 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*qGVLTv%A>Xeh|Y z$mrD=jZNX1*+(dGh4RLQh4YatNqw-S`s7;wyM=+<~-* zIXYWE2Y$IUv%P3@w%+F1rX2~}?KPk6p85a(PL-}E2>7?Ia+aU`l9x-<|I|L%I%V5w z&zasoE#%a><~pQqip}fV^`1B7i})`lcha#s`S~3(7vAFV>X*C(hQfsHx2K5UwF*o)^dY$|J`dDSI2c3@t$}y2Ndj{u6{1- HoD!MG@$9A-O?W;enC)u`xM0If-#85qG&&00009 za7bBm000XU000XU0RWnu7ytkRwn;=mR7i=LIIINo#C1z`OQCRr1fr- z1fpj7%>4BE{xma^jnMz(npFR?V8rDl_=kaY)tut2^-l*LCbmNy8%9imlha@ybObyJ zCduHAdVpgd2aLFGt3f0%35Et&*d7Mp1$!Z&wf)w0HMjxTZ9&$BerHe*=dirybc)<% zm4T$HE3K=Fh1(GXF5G8S!eu(`yQ?i*Bc_xxD{M_*w+LC|pNF%)BM3ZaX(n7D7(8Z# zGF!1R!r&4DA|sUjsKBo2tp4#l_4*EF;42za)&=;+poKjvqZH~; z(JH^z%qg82;UpkdsLqQF%(-q7>UoK9U=NWDEa7eV!ya2HBuVQVA>QwJBAIYHjg3%# zJdIH0$UxYL1=98LRh2c4kC)X|V4p|{5vda+Ts?{6Qt{h-!;BEY`7%P41Jmg1LVRYb zKFqGdKsdg*4V^$K#HG)SaFw8mFB#|Yp4rCBh8ZD-?PQWOhD<%GMclxfe`9=M2Amt# z!g-m-LJJFdG9_n?*gR=rTf|KSXIKfJi!3lqbUiA4UQqV_;YR!5W6`rJ$kI4%Uuz+< ze8~`gQo{0eGs~xe7J}faHf*o3O*xG|-aZQ$?QQg2-dE$mp{AL@=8*l8M?IW^z2 zyp}}@ulC*j??)Id;e>K#?snM>VgAL|i+bUhbC1$>e7jAKupIEZZ`BJ-zWwmHjgK>Y zo2VCV?{AK<8tA@NFEIJ=aQFDz30_9a=>7d;a)jjocb4>k(Jvow?~)T-wr#Q97DpM5 zbt{~D4D8;I$e-KB{UaR$59Z4Ponrhw`)T3wo8-+qx8R#+^6UmIKHlhD! zkPJF5&>#?mXwVW#hJhd$1&juU52O{x>4jSk1c%1|==vMwL>H_{7~=x~000000009 za7bBm000XU000XU0RWnu7ytkQUr9tkR7i>K)iG<^KokdX5zb5La-iVVq#ipprUbf3 z_LCH98CY0zejLxo9)aUp57*~h|P`l@KL)&t+etYEG-v(g0s{xOth zWdp?PC2;dJb#pM(KEXl& z957J1x1OADWD!M6SyZ;~P_o+4OtY}-eYXDKmQQQkMi|CN>~SbawpB`3-NPE60!tGg zO5H^e$f2;OZJA4?J@s4k7Rarq(rYiq(8HjEWU^o^*`OHZAWce4F%+B}ydk%s&(L@N zXfz|bp@jC~90+`RLFrALr@ep$T|!SI{Ke7yuiH!hq6bD=??Y z>C^z=bJ|SzkF`aA-N5XgXxSd)@5)xLmk+26uGT@t- zG1l}ITEN}`Q1u-gN4;;$?%mHOT!31JLPd2Uior{k3V;ar| zM|jP`c?GLi2{q7pq5uREF8g>Bi0dCtHu6BMg#pEHN8yZDr~Ke8`1I;U;PwdzK;FTa zaZXI&Io)MyJ2IXT)8qM-*n-Yr4!EBj&)q&@2RvJJfY+?*0DNHv@bl#B>JRDGXS~ay zSHG^rYo?b6oxjkNpHZK%1MWTSlHM@A9BzaGbQp_PXfShcc*)85^&O7F{{0#oBhJ1bR-oc`?L!7KUfLN1tpw)i4$a^>p< z~_qRvT7NY>ph&wdgBt&w-ILP8Z1;OvlB4rr&d2**{hw^))``3f3<%a~Qyos*a> zUsL5D-zZb#wu*4gEiGivWfh@w(71awF(pB{QxZb1wccBB%_rb*`9=^QE@&Cf7iMbw zo-EgO(nv?824IPb?$s>lo8bAZ8k5M?x|~!#5$DI@TZc)IFeV+qjjb;kS>7bk8@+|GB7Mw7W1c}FDvkiF>rWkY9 zb)$L;=-^rv916B002ovPDHLkV1m7T5O4qh literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/dragonite.png b/graphics/object_events/pics/pokemon/followers/dragonite.png new file mode 100644 index 0000000000000000000000000000000000000000..aedbf448ffa80f2adc17537fccd64f99256c0efd GIT binary patch literal 1030 zcmV+h1o``kP)FN2o!O@vvF`1c}>B*U4VPVm!dD)3UDNnPS00009 za7bBm000XU000XU0RWnu7ytkRd`Uz>R7i>CmcMJ;KorL{2o2c^{ZF2w!HZ066mU&6 z6ydR=axbk3+!9BBK>m?Z8xL+lTZhacLomtEC4WJOQk2225=7|h{nAN3;iQyy>ccqP z>D~K&Kc{yWTh@OOcErC&|4v|VVfT8@vh%z7QFDqFcw~Wp6u91iXn`k)9Jf*4@8^a8 zh(!N7rkA>YgUE2)Z~La?lE(DtqAs~fG==FD-s_=3WH`1lr-r0OE~kr&YSJXKfk$f_ zk>S{eqx0Ml2tKVIQoW!-)DYMpl8!4oar?ZtHUww^ZLDFLM25iTSUT=&h4`WC)r$#% z6+ks-cO;QsVhZetaeKot8LJ&|pr{uU>;2U!z-g`u+TE5Q8iAT1JID$&iYz`**)2{NVlEJaUvo@DS1pGd zXu-S=uzP$@!F#)&h)r;I!xKp~30-L^54eDjzy%#vT^L}0N$HpgOkPSr3h$UeyS7Jh zm{4ZOJCrGLI6RR=laNn1fJj*VoZ`wA4#CU$7}=soI`)vRZGQZ#S0QPAq7^zpL53^=66Y`nx8-myHK43XLoo~&}ll(6S*bM zp(09%+#zlr1%})s50Q$Gs~saIN%%@_3!$b!fOA4p+?N8Dt%#20dT%{ur9CW02qIw= zNTOb(9diLvUJyIC#Tv$yfIEUUF0a?C7EzaqBZ<^wvKNRp#XVmo*n&tO6XqBTLaefl z4{p=kqYEt%+0g%)Wkt7Tsm@kJ9r@UDPzo?bnb4O+<$Gj~nL_na2j`Hxh_mYUAi=|O ziM}$x4z409Eg)|g5B0VxqEdi4W!=dI@5|+FrDzaYH0Li}-!CQ+b1aU!HkbuWv8r#`X^~~wH=J!DvU)y0 zwY_pnOrnP4J`>Q{JjRROv*-Oqnb075F=GOwk9vtg)NpLgvFcKh(Thkls%~e4h~3`~ zI{{Tw7(`9SHmP5BjQNbIk3VlC;u%o?ziSdT9iMeJ#-hE;W6~tz5!cijL=DH*V?Tnd zCXp#%5;Yw^6$TL>85xG)6OR8N41vENCehaT1wax&NL?IBYybcN07*qoM6N<$f}R`8 Al>h($ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/dratini.png b/graphics/object_events/pics/pokemon/followers/dratini.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab1aa0340e4c86c55f8c78430af4d6b524ae3a4 GIT binary patch literal 693 zcmV;m0!safP)Kl(B2uKorI$uea!^K{#GYQcyZJa_P{i z_%xVK0Ubqn%YWd+RBbY~|A9j^yl$Bcp6pg4r1#JDPGH}APuN?Q;x`yR`MdA;-JMVn z9OpR4`Cq2zeqO(vKS-h=2(R}CaLxTe@013fGI|mjgBS3Ct|oqA&Mt7A`JHmWtf=Ds z0bNb};<=j22<3y`ND4Tc0mP_82go$_HvpHV2Z#cyct-Mj=`}!tw#9)=Gyl^BaG;pO z0`c60Mrhw+;Ve&ZL3#5TTd+GpN|H<9sBK3f9`FHT@f&-*d5&<}n1Ul`2JHS#_QhC5? zHn{9FfcSa4JYS;#4#a`ZuL1PdAC^DhA@{4}Zv)6UV7yw55P$ zu{fad7iUjFkpi_P_>xbMH`*^3CFDj=F+pVI4Y6e9yz!ld)EWm`Al9O+raJd^oX)hu zTMoZifI_cYtG5o(XnO?+;D9*>yjS+fxW?Z*7pO*?HPu^LtBmZR1*)-c{9%ssJK8-O zmub4$r|kvUNq2z`sK)Pny)-2U$hDgx$>%zheTB3Gjz6x6n|%MdZWqaeIwaaE869wU b^h?e^?||>8EtLu900000NkvXXu0mjfixokg literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/dugtrio.png b/graphics/object_events/pics/pokemon/followers/dugtrio.png new file mode 100644 index 0000000000000000000000000000000000000000..b60c3fb73ba29829f09888c7ad535c529d7f4878 GIT binary patch literal 764 zcmVKlQC=KFcil{oPK~@#x94GKnD*;+?E_T zP%cko4T(hNa?5=H2k*@yXy!uu0s0wkwz=X#TcL16zDu8E%eG|BJveTQAdsJ>_y0Zl zC4`*TX`R+-{q^#~@L!I5;q-%wnGjz(65K%dc)Q#YdP0bOM}>p#aW5C*u1iR~dvR}7 z*a>c6Pc#F4|616BmXLURnOOo`*mD9b?hS@dKYn%!@zBfTbNXkYD`?)xyB!RFKg>FW zdW6~W)e_jk);mYe{LlLP*XQ%W{H;Ss^hlyGssmfXW}xO=9I`TE{`h?`oYewXX!?_~ z4s?Z9pn3@-DP<;vHhRa~!Kb_qbcLjxs2qi+!LRIkc^pIVMD!>&wfq27$51MFJ6P;n(rbAa~1y(Gj z{EO}!BuS(7v?5W>;rg&BCR>GCZKieS62-_a(XJ=~^N+m3L zk>BaS^s;1`*6iVL{-6XYFRoV!xe>5kfE-}klbvR&8HELJH}Y2?(@~Hys`u9wtNr;K zhGB&tYkeWC85al2rN0isXuMDi@wWhZbbMu+*)kaW0i(cT-P9Hg16TKt~#R98+og*egs3}Q$agQVQ0JVrIcPc>v+!ht|Nc4S6)%?kSL u#&DmKJ~zZ~`V`A~9kv2WSG1Y`Ki4~`z@qj`uf$pa0000? literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/dunsparce.png b/graphics/object_events/pics/pokemon/followers/dunsparce.png new file mode 100644 index 0000000000000000000000000000000000000000..2a886d622bd4d4ef6650f94e9d92e14824acd8a4 GIT binary patch literal 789 zcmV+w1M2*VP)2aBfX;GoMK~Z5rIXQX3*#H0lDj0xd00009 za7bBm000XU000XU0RWnu7ytkQi%CR5R7i>Kl)sDGU>L{WhE8o99B$|!NT77MQ4j}* zP4z)!pM!Ci#QmzuOxuGE8isWzT zo6E2Fm5ah*H=pfeUccYx$NRhhY-1bS@FJ$uY;N43MYEybeD3xJJGA12-?RZrP;4A- zxP(|7QHqlXt*E27G(a+CV4w~6=-&A;ZFn@>q&(Zp!Iyg)@r%Qhp-ErdWnL4i*pZ~J z(DPZli}^DfFo>NanN(cnb#`93?y>R_8 zYYmY!WE(T|>DLFs(BZ%kun_CXzzTz7%-)P*j@eV|uRd{iHDKS+3BxIw=pfCkHf~AMT=O0AjEt$&^=5R(Is3%2 zcof$|UJUt3sIaETs_$f0+`^|A2T~tSP-+(>EkKsGb zZ>N2QR6&FZk`J;l9fW-)~oIa=Do;=>)&floGk=%wv1Lzk+w+(NQURGe6sXbq1j} z@E6-<2+2hUAfLMt?F0gg*X^Z$*18;p7x T{(WgQ00000NkvXXu0mjfY4CON literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/dusclops.png b/graphics/object_events/pics/pokemon/followers/dusclops.png new file mode 100644 index 0000000000000000000000000000000000000000..472bffdaf7b8db85414f69c200f71f22618f497d GIT binary patch literal 915 zcmV;E18n?>P)n+aH79z500009 za7bBm000XU000XU0RWnu7ytkR2}wjjR7i>KmAz}*Kp2MwhQmt+V^A`<84k}T#b7V) z5`>o$?P(Xe39k#a4WSS%8ImRS&~(d?jvYI6=vpX*fU{`mhtW`af(D}@p!aX+d%BZs ztCj+V4u#yL=T7%~?n@`bxG(qR|0$(HE^ejb+`&ev?G$mpx%_&Tn}@|rJzS@V?`ST$ z6QhU?gIymMbEZdz+egd(ER(Y1IYm71me(Z1O>fzsWyA2j$(Ld_3wUkd4HsLpOf$A% zzx(&R-vxAxd^U`s#p^pxK99CJw{w}@)Dis!eTJp-8|PD}fH~*&TxJb!N8y4X!&EcH zPoHOgJ_i)o$mLNTMG(#XS*8xrudziHyYb&p!gAcd0Mt7J|m8)tE#4;8hECI~4M>Lq!OsL=j|n*krWb79;RQi!Q`2ObW`GImYg#c2o5-DAhiPo^Sf#k2?nKk9#v3> p#ed#n_^P@)+F7>!kBWa-egpmt_h;_i^!We)002ovPDHLkV1imhqi6sC literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/duskull.png b/graphics/object_events/pics/pokemon/followers/duskull.png new file mode 100644 index 0000000000000000000000000000000000000000..faeed6a2041b9f132d0c5b061369decd89599b9b GIT binary patch literal 568 zcmV-80>}M{P)%tcq00009 za7bBm000XU000XU0RWnu7ytkPu1Q2eR7i>K)iF=PKoke?YNuOeQCAm6;>BQ#U&6)2 zui(mXG`QeIaA{H!yl{((i4->n5?=>Q2U58YWob=&ee@bkoD6UKweQ~l+Ca}RcD1Wr z?P}{H99`h<-v)>U3Y66wDCBd2o6)o_0&s(RpRCYg5p2vi1Y1qKg=HwJLz})vln~n=xm6P zT2#8Fw*5z7z5H*2oerE{O|I2|qD^NEZN}TBjvsc!9G*QccCx@b8cul4)0zRiGuAHk zdF^<_ZkO3W?4)RiPaoP1olVA=wNwKX*SRfNcb+w4r|;x+;NMw#Ta3!4(#c%_&iYaxQn~Vua7H&PdJ?Tf9o68S_EKmK-I?p0000S-CMu@o8y!VX0}EDM48wVM!tJ*=Yd*0RR91`rn;t00009 za7bBm000XU000XU0RWnu7ytkQ-bqA3R7i>Kl|O6SKp4h_p;N+v_eL0Jawr{oQy};| zWXzIL1qZSk+@P_9Z0)9|WVFH=L?@N%f@sqr1d>4Z#>jDSk>tLgp{M&RsUgjf(4o1( z`0mmDp67jK-&xkvcpCrBfX6n-lgH(wQOy87upuIGZ6Ut>K`|DKj-vU!^^0VoZjjw+ zfG(4EYcjsCzSvAM5>#JvROwkg5o(Tc_tL&yXWiAhfF8rwjLfJZUL>e$SV@E+S-i4w zcj<=(Ac0Ef^VsOT4~>^g5RG~!GOK8T1lo`RRU!clw{Ip4(7XXB7C^1@dARk7>j~w$ zmHuj`Db%SEIc_AY1ZBMGQC;i3QNgiMw=)SI_N%Xd?smm_a6iOz)Fk zn)UpFG{D&V(APj!kuu~PL}CeqD6q%g!Pq9T0uHxv*YUMZ2>DWcaD5rCefRbW8A$_G zk$LG1C=yGc1^sX9-n;b^H<3LgWSGu~&Ita11cdZOMug98uk-nh`dO-qM%usvS0pyT zxxKOZJSziPVhLn=pTq!>Kj1oIJH5_62_#KbWd3+4@Jz`>mBS+kcnwDVu>lyI{QA&*qYFvU4L}XI-a@_ zR7Iu32tXtTwUpDJ$0xb25rB0oB1T7fjJs4HHjNkVj`zN$rm~{)6(kdzrsZ)824DfD zQ&ykZfv%U^rNa!(-Hs7uMJ=oJKwcy+?_h^p`80%U{7UB+E0q~a$~Rc8BK`oRaObt% ySZ?1X*G9D>G1{$L9xRP&;=ej14}B;9!|@xJmLpNQ;M8LP0000FN0a0ReeoK>z>%000000000000000F0hie00009 za7bBm000XU000XU0RWnu7ytkPm`OxIR7i>K)In>5Fcb&yoB}xtYn)e+eS-~lEk$T= zWmxcLN{!2I4rbPG5l5@!I?ABma#5HhsoB_Jhk^f|e)`@^U$Fu(Wy+K(Q~pt)a2qlJ z8k8aGunNu0cGIeX!9CCi7)CxrRm+NC+%OX~(FWS?8wyey0}O+f*JasqF>YAxla2m; zEvq!V=4D$6mzBDY!+FV>)P7Oh-N1sYP~kH2I}Zz)hQ42E+g-SCpsK!NPJ^SGI1}TB zoELhn?H>p9TT9B0*|^&mzoJ^L?LOp@zmm*tc?zSm7&o~lUJ6h%^jhvyGcO>*X?Tk0 zF8UaE9*|kuwEXL#w%s=@?>u}TyS<`Y`s6TrxJ`D9Ki`0H_t)lflfEt8{=oAXpBv2q#3CzIRF3v07*qoM6N<$f`9VyKmY&$ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ekans.png b/graphics/object_events/pics/pokemon/followers/ekans.png new file mode 100644 index 0000000000000000000000000000000000000000..dc315987acabdc3b2d1bf3f111f3bd9dff9cbe15 GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#_tTzPS!VPT@?$;N|~ zft87dnLlqjGBPqwOq>W*f(dqTs2&4~au#?*7Bet#%>`jbwW+q>7#J9jd%8G=cyzv< zyfN>Pfk4}0uW9MxQ&Zktv1@4kz-(Zk*2Ob(^`dp10;bwsKJPYG`zhMZ-jcL1NHwqV z{kebj@il&vs_#6O`~JiH;Ff)B6EsunydBk+&iT6~?)3%hXW1; z{`(zZTiS4(HQsn-&>O!@p*Skux^xjE|^w^({_*1mW>-$N(NCc3gYyWcTU zTA_G3Z|{P6Rn1pstcm+s%cD?{apU3vpA>6f|KOCZ)n|@ueK{v#v*eE4mWE$f1dq#y z9h@VT;NI-0nz*{CUh3K^*?mIWKAx5?X!?EUvy}a(cUJ`OFWC1jxvPzF`l&}AqW2tD z2`QvMNs=?_4Nl~YescIHhi{zL3O2@loRzB?w6r@Iceps_$1%uUvPqbDtN2my;+C)C z;)dtmB>KAD@11dgWpAajOO*Sb&+hX|+U%aFrSx?RPiEikJE6cb`2Qh}DV0Y)runGU Zi^tb@?$~&x%Uuu@`<||TF6*2UngIV)`<(y) literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/electrike.png b/graphics/object_events/pics/pokemon/followers/electrike.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c1b95f1879779a8eec26448c76486d938aceed GIT binary patch literal 614 zcmV-s0-61ZP)K)Uj{cKokb>w^(vUOBh||4lN@(H6f!V zx3MzWB4^QV2=YX-b|BfV!gd}T5<{CY3yS<#_Mi>iIX)99iqwH``<>74!!|a+A%`4t z$g6X-$8XNBMYI3=f}`nOqu&}w4Rjg|ju6n~eM!F2Jc;dwqdb?$*`g{fti(0Rjx~lWB2R8S|?OD;%3JiZ=d7khS_P`glR+()Ea%poqX3O6U zw*~1$x%KSSJ3$@O=7#t4Cf;{CaOnr=NK50ANz&C;2uSLMjt{Q!X3~0T*B_~i z)J|8>p4i`kFQXT_FE{8*>dWH}%wxH%p737z1JqU4tyyuFh5!Hn07*qoM6N<$f~o8j A8vp#5JF*#BB**V!sA*mSwSy36O!O;N$0ZB0_>FN1dVR@-}QGr=G2{Tej00009 za7bBm000XU000XU0RWnu7ytkRrb$FWR7i>KmA`M>Mij?y&_qH*1}_=2wH@U}Z3GxF z7a7suK`7uqKmpXf2C{W2GFJkMlSzP$#0WY%q*@yZETYn2p#j@7pu$}ki2r~D&>cKc zfUif1_d^N=b;!`6ZxHTt ziha2DpVWnPbAjmrs<8) z!m?xc%FO1l-J@*=+ixa}&wY&jlz%#@B6LL!g4L_K;>3XWIXbh@-eU{3%xn&hbf3Q2 zt@4C%(#4Fey+_~IsX+rmiFNFk*ep&7nua z4VDbCUu4rKr*(g>9#@awrET*OLpa5a0t{eN=3>gP^>yw2@z->F3+J^aJ@c_qVO&WV zS618}e_N{;o8w}7MvM!v!3T1DTL1II^A~@EYz}BSIv$tV{Rz`HO1aZIMM!(v+&^3y z2rjY&HR_(~Kb|`51>a;%E5oPwTGI{$H!x0FX}yTta$r1bhs#Elm>Uec=hwLFuo1P% zKnWUCeE0zfh9x{^j1oZz{Wp`N`~lCGl6oc9i<5fbTkub%r6zpmH2dCt|h}nkO~YA*!82!0Z@eDFHaIJ z<<%EFfo{BdG7tt!aXy^EaxEJsg1JJ08ypt)Wy5xuq$(xeX3283DG7cQ(q1A65aO&P q1qee0Z6?sAB5vOuN@fB7PT?P7R@7>QyX}?$00004~v9ak1gC*~vLEQ7L(;X`$)q`N@&d000000000000000Ty9~N00009 za7bBm000XU000XU0RWnu7ytkQqDe$SR7i>K)lX~NFcbiA>87KFnQ`bR7(1Cqi?bYi z=(&u*uBBjHa$HY4$(R`hokE}_9>@d z{+(d*6weUll{mpa4>nwgex4!9d2)j1m>`LQe*PwyIBnfD64Y)DEt>A~sIevWvU$d! zUQ;CO|MC6rI5}!en0pg=)}6g3Wtjr#j5LJgsIj2lXx}<2;gG)A{Q&|VgaG2W8H}9K zZ>**C4^v}inP92}A544P?0zDcFjsSLYqeNYmgP>3ZR?th@aZbznN?XXOHp+j+M7sW z`o~q4Nvp<=3Aq3rqwe6kE+NID3As!iv-|Gge5)anRS3_b^MzE#gq9#nD9oNqJ;A~3 z5lR?+#&ykwZ8n{^wL$6pGiY zR|U3Nz`FMtE8*rE%r}5%8c^WLjBw-mJZ&9*j3L!)VGn_0!rB#)vWBl;pcZ|`mrKJJ z!~`poFh2YpCU`HT?DBOc)vWCfoBHN@Q>Q&9WO~;$_Vs6>TDPw&+-?d{Cfj_S<)l3% zG}-)stMBWi$GDbgu+7YdT+=v{5#F07aJ_9eK&ZHQ55o^Z(PK=Q=TFWAj@dTDXlA~x zZ7-gsEGu;P2@~`6AG?q^Df!7+0RaJ7NkISr00000c4My`00009 za7bBm000XU000XU0RWnu7ytkQ<4Ht8R7i>K)<0_-F%$rBfj6T?=tg~rJI>=Rhc$XC z90#Fu=+G%}92jqf5@LUYbO?ns#`Xs=mWNZ$X%bg~E?oloE`5ssL?=sWA$05W^m~@y zdwM>D5&9p09q}Lh)@XHK_nV>)5$aG}S029}F`P!qZ-`YlL>;zDE05tmVY8@deHwTD zhQL9$m9A3daVx1>6ejZ+PNNlTRBIUFI*x+6mokqLCbTADOqj=FHtd8DDG61(p-iuM$|OrAXKFic z)0?J**O3a+ZO$@QDkc#$3^om$Rx;p>L=la{?YK>El6Axqs8>0yR~9j%__m?tR!mYE zC5m@96>aN!oYPv;q;gwDurkU5LPNJ}!eU8C&_zxo%n9Kvk-S$qjd1k5^JKTwrr~%@ z6d^Q@oqpbF9Z}t~=k#VK0xMT8uZV6(RlR-FwvP7cr-Z;)7gSDTp2i9uOTt}N5HXGT z?pI-3$5hN`YCN3n9z)A86HO#^bh|C)Bem~-Xq^#a3a^F7s)lk&tj^q?3Nb!YO70eF z8ww7^LWsqeg~w>TN*O#lYq!T@F%(x9c=rw2hMg|Yr+Vn6$7q(aHT=GNZvVK4)64$8 zoNXvL6w~=!eEaAzlI*rD2a;4y--+qaENC0z`|14;aer6&tkz|zD^^b957W{4vbfmK zYgwlr?u3}Hy+-Z4$jc*Kxvj=RjIx)4w)OeJ=i^b|Yjm0ExbXS$cz%-`1#P2tk*bZtzh){oS7ICCyvVY0;5E7_pe3g}j(f+`2<-9C2BXgr|jL^=?vUqPy zq|D?lIqxxa$;PZ}x|0;e1l$aB%TN&pG00000NkvXXu0mjf DY<8AM literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/exploud.png b/graphics/object_events/pics/pokemon/followers/exploud.png new file mode 100644 index 0000000000000000000000000000000000000000..fe13983e17fc6c7d03dc292869773da9a00c6925 GIT binary patch literal 1163 zcmV;61a$j}P)CtHc0RgG8!Eqrmxj|{Mso`mHiHRvexO^d400009 za7bBm000XU000XU0RWnu7ytkS0ZBwbR7i>K)<1~bRvZWLhq+KR$|cku098ZspB zzz9xokOzudEJFVshi=8MJT!Q4Lckshx|725BXy@v?U1cUaM})C4dto>W6Ill zlv|R$cX0hZ>G_||_ENf(KJf67rSJDiPm+z$|KmS046)e=mF$1y!%no(2-P~)M%U|` z>{Pl-fkh)5)w@>7+F+--!KHF{X~spPQrCjO`r~yrK8j$*{pLEC>K(CEP%s2KHPcxv zShmr%Yo=ZAtusC8RjLblMWfQKNn3`pyw;{`n$^4O%w+nY+ndJ~jY`&?)3&72ve)@G z{lcVdjo*^8ak6mDi$Zh7oV8 z15WYux)p8Pol|o1*tS;Lkn(qlUFHR__`yqUyl$c{|Y z(H35VYjcJ}zd0Pfd=#|2i7K4C!6LNf(5=5i3;3e3ntm399#&Jqydd$1Q{VY%w zPHjYLjbJk))DJ^L1wx^b8@^yF!gzB`2PqWn>Id=7aR|>cnHsi`?=DAweH$PZ2!%6e zUxKM11nzWIralJA9O^$0#`i23q%NJlS(GKt%k%N9`Fc3~>HHvCV}rm*$isaV2%k@s zpkn$p3nPI;iWVFJU;67?D{zgI9LLnUcP>7}fT1y*rU~$X}^T6U*Dn!>3 dR!06C<8PQTiEA)gQ8fSn002ovPDHLkV1g?WHNF4< literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/farfetchd.png b/graphics/object_events/pics/pokemon/followers/farfetchd.png new file mode 100644 index 0000000000000000000000000000000000000000..d4eb66b53a5f3a4ca74eb385bf233d6f88123682 GIT binary patch literal 811 zcmV+`1JwM9P)gryp#cE_v5_fBIVtJs`H68s(b2)Nfl1k^dC9qX_6Vic!^mtz{G~X#vE{M6>{GZX(=QF{;|HHA{hZQgfZgwdS{m7T_3F?bn)TDcJ$X zJk3mkZ8B5#>umWI&vji+iqfRk=f;rzam;g)g0S#3gsxH0 zk6#w8T^pmnV?C6EwnUST3ZoS>2_Tw1>iu=X@tfl;wnJUx0zQ9h+X5Q>ozi?L#;pnZ z=pK!3g0lePU?1&B;j49A?{o$iX!ji3IY;vP6up8*uwR-Beb|yVAs;%v)&Nfl*98@R zzVd~FlMvniuGdZJq40#wuhhj=X%@n2_g>qCqVSn@0tylvbM11+ruPuwD`pCbBv($+ zv>fU?v@tr4zyByLe!e?7unAdMIIsyr&^oj+^8%20R|CGN`C9;4c?Vp^aTkw@L4L5F z-gO^r!iFe}MtdP7xPY+m^LFw(2^xo9K@8ObVu%mO!ICht_NEUCA05Xm-|+xh6fQMd zc`KZ2B+iJRo(3a2>bF21yjBADGEcQ}0b>=Aqb<~@iCs*a{sCZKd&4PUYD|AL$2cUb p-W;M9l^K=Z>hKLuHxK&f?GI$4+yVl_I;8*r002ovPDHLkV1jPMc^Ciy literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/fearow.png b/graphics/object_events/pics/pokemon/followers/fearow.png new file mode 100644 index 0000000000000000000000000000000000000000..99508e3be13ad3779dcd38d71aff4be9ff511aae GIT binary patch literal 1072 zcmV-01kd}4P)L0LHwxv6pK>G`oyd9iU3SrG~0$*BPW0RR91J9O!800009 za7bBm000V|000V|0Vb6__5c6_rb$FWR7i>Cmc44+SQN)^HK!Q_s${sai)^uwENLd- zX2=tSJcGAc%m#u)z|yXwfi#goXx?JGG-`6SoQ)V_Lm-$ynnYmMOsBDh^$fXJx*wYH zM@&*|vA6M&?#J)^|L2~O3HjfQ#W&{tA3T5j_~v=|;{G6Dy76MM35dChTS36}uLw64 zY(B$wOyJ)e0HBYG{4XZ0NNssBUEjQ^2(}A1I=Q|O5K=W6#REVlkA>$GH4pAUfe~vL z{&o>x51`ahA-+|~M#$7lXIIVlqNF0N(6ce7YWeYHz=+jvWEfzscVQtz&)KzQ7%-y< ziUGh!>=cX_N0$ks*^>heK&P(>(5nCuGm1cq^(cCXonzz2M@NfIz`^X%fwDX0fUYJS zpiB*IkE(feH84~bN#_~GGXvC(*twNEZ$4aj{_6Hq(4Q*}AI!t?-Du44u0o(>Nu z6W`B zOi4g2KJ%JXCTlVZ3RR;Kf9-aPcvash&tZ#cLl1XDKhIv;#wD+6?o8?GlT5Nfe8p>$ zA}-a6Aj=XtJ30}Eb4472pOxoO@mt!j`0&#o=r#p^_9X)Htuyxi@0BeRh7d(fQZ#K; zRY|4#Z=WmtjVls=_mt;uq)ITpd;g3PE2klPjw=DqS^e`_ZR@rQOI{NkNK8_iyp$5! z1dEC*s<4AZ3NiAH+cT5t%;TZ&iYt-jy}_#3qVNq6}bXHL`?<`Z9SuO zXWszGQx4c8()0IXKbBaUUoqa}gF7giX#C5tnTV)~J`HfkYG`Xw-4;YBl7QZG(lm^F zuFr%Lu~hMi0K66e{Us1J(Q$}#ZacBkK>}P6SsPaU*YJ}h0CP1J2r&zuL@_h#ADG3V zyj{Tnz!i~=vGxMeMgz!2(Pz7QYqA~y0JHx6MQS{uEL?sHv`<&-~(;-fHl<%9R=}HMs;#)06*=vYhiw> q6FI&9--hoWP@7cz`i6!7(fA6lIobLU2fEn+0000K)G<%OKoke?iyTP@77~qvWy6FKA~6gO z6%Q;H5(f@DxR`)p&~Ly1#v@Ji3z+yN8W@PMn7SDTqJxR_yGTiC-<{!@98CJQAHDZ~ zcTEq3qKYc2sG|BurF3~);)3o5Z>qSEXbJ&JMq(O2=N^joYRlxkFAiu+Y+8Jv=w(A% z?%Y*&y~{0)d*~SpJ1nHLGUMs(+j^Jce4yttKNF9dLz!c)`?1z!RL{ad&scb+vB~2= z<{WWn@JRVuXsmucY=gk1m39~QBV+2mYZB**H5(2nrrp3sYWh9U!@#A>j2}>)xpPh8 zV?C3Ew(fc>aBaAocU%9)*d(ZLU% z!2outH&hz7C?;#E{y<~isf}$K1p2nP0sZ^&c-RL4p26L=5{w>!e-ma>dgKqR%ufwl z)q|_=yAJaaxlkv&^>E95&ke8#Trl%sy@ePf{=mv}=fqI+LEyq90v~c zjNuZU@eNiGfM3Z@-9aT_T0KCd%dJP1CrxV19~nB~6t3Y-PB@26^s6x0U`=Ks>_%w* a)A|9^c&DxN$UYtb0000FN0a0ReHb>CrJsxTT^U00009 za7bBm000XU000XU0RWnu7ytkRxJg7oR7i>K)2j#B3zr7gj9`)1!+4xn*Ep_Gn&Dn5)VNVUPEF`Yl{ZdzM*VZlTxYSbv zq~WMh?%f-n$YmcNlvqu;>JA4Cy9@6C;xg}k`v_h%*Kgwzs|iO9m}r1fbNqZ2`WI{8 zl~_#>M~6cJ!=8DZu6Sd-ZH&LB0OIIkyw!w#aR>jsQ|^`Yj_!~5a{(VS8F;o9kF}bx z^%ch7Y?Pac<3q7C-rd!?w>%9@#yf30Tc2V2>4sZo4x)JoJ)YCfo%OdtHLQC_oz8DP z?*0YcA3`0Vomb#;OXZdT&F0vCZle0p@4sy=gJ3w{kx{2lrS&C!v^w|D1m+G%)=w#g z;|5SF)BpzBS^po^YV{r_CNMP~uw_Tin|(U>)1?l?QD!H*B?csrfg;2ryHL7?W+Iz_mb}oXB(zYh z&4uucec^h1`E$?B0%bvM$O;g7>DK_ecC?*NuZ7xJKQ-i2K|*A{(j5VqY1=?-C*Uk1 zS)eS)GuyP6_SZsrc4Q;gxteeu=eDCKdEhw+OgOqp@>}>3F!r>Oc*Pw#-f?&q2*gt+ z^_S{qe` zgl0k~O6?SO{AR-|0^7=D;A=VC#`4L}>nk%KCD>twJJG`3yGylgy~5fP=}$~S6t%i{ z=;h!7q?4#+3Rp`~$m@w2z!&RYm>8ql_RQj~ehZbNB{mGVNlf;^QVOm4+WS6#o03FTNl&E^A>i_@%07*qo IM6N<$f_Wtb?*IS* literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/flaaffy.png b/graphics/object_events/pics/pokemon/followers/flaaffy.png new file mode 100644 index 0000000000000000000000000000000000000000..57e8ee5023718f904cf90e25fcfd7af193b7619b GIT binary patch literal 782 zcmV+p1M&QcP)K)G=$@Ko|z#8;rpaH1-F$kfmcFV-WO= zT|zTSG){srrp?$X;RZFCTxu^Og_zVHGNp@BJhTA~pBy|iWRS^J$RJV#QAko7{f3^B zNcwbGrck<+yo-5s_ugmD$b>xRF^~CwG8|0zU!M>5V47zJLz3m3oIXo*80lPRKc|?K z-!VDMi}p*3*F=Xog>%;$WLts@_n1s}4jdcMbkTPix#zBn4s=3$XnhO%dWLg-0Otq| z5PbJ+wAJtHXUP|ILi=bPcru*Z>Vu012o5t|1sh<^%k(RLo|War3t;#c63ydlaN-;* z-V_65dLK5f@qwawq(-o!`NkAG0N*oQFq=1;p4^G(Ff+lbd8myuT@Dyy+t>0$cg=&7 z;V3y!bQs6(nY}MC$Z{D@8FMUoqPvF&CluX@=(_{iFVno%2kV04D*=l!NM3}LyFK%T zrZYKTOFMN%u)U(`_LE{QWfFDrZ!NHny`&Hz7gjzSBR;J@n|68t>+I=v{p)1( z0{qxX3cJ|BnCX_6fA+M7O~^Vy1qRl}$9i!ddnfATi{DR;x7GObYu~RobFK@`OkqI{RoI zzsAmv;I&2mdg?0igW20Xo^kcmMzZ M07*qoM6N<$f>ir#N&o-= literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/flareon.png b/graphics/object_events/pics/pokemon/followers/flareon.png new file mode 100644 index 0000000000000000000000000000000000000000..280b5f4506144ccbbc9c58ab9a3222d9ed23ef60 GIT binary patch literal 828 zcmV-C1H=4@P);!BIg$!9gJa0000000000tNfAh00009 za7bBm000XU000XU0RWnu7ytkQvPnciR7i>Kl`(7EKorNXsEbC&7@9F>G-Q)?61KoY zz=mMR;uAOcV-yEu(`*j)nJh}=Lls%OWG}QOW3v?eq59-Vx+gUXDQ&mBNk84)`|G`X z?}?CCd$m_9jj`wO@6F)dXYe2RcPzUZ!Ri71X@HJHyNzf@@CF3a27ZAVlvV|RbqK~P zGDMfes|IdEKsew!gE4RzAU#eg%8{|y7@feB^9DY!*%&*lGlcB%V@zOJZ0>3Nf3vO?rgD8l zErvN3s7!7bBT5G!q9!II$MXCWEimyMt9?=kyj#gDzpRUrQCZ%8Q#kE2X^uqA~$tS6ElNkti;b zm^5;Bx~Ch(m^!*M`*JAdq{E9=(yRsixi4mH*~nQR(t}>fJ?9`3c;vyySdLUjLI_sjB4wF*Ng~&YDjn1r9D>BP=9^40 z7c~0eoCy$^kqUD(eY{z?2$#ZcV$-9RCD5HHVNuI3C}mU(p|vXPK}hK>8rCwaeYSwcYLX=W>2H z-u*~X-@pJA{1`g`K0@rKtv3F>m~rcHt262{cJ`p>n+nEkR~>iej`=ZSNaOG)ULP?Z ze-KF-o1j&wl{9}keanbC{a_m6l#JXeqZPx}Q;01usaPX=oM0000L0Nf`IRF3vh-XOw00009 za7bBm000XU000XU0RWnu7ytkRp-DtRR7i>KltF9bMi_>NMd+a0m=cN$r53@59Qq4- zNQ$hQ7N6?Rg!RVAjxuq3Q;^z5dJxl zh5M?3mib~2N1yKgg5?oc5Bh;_d_B2D~i-B#|wE%^o5HyJ=7u&d^>6;kWuvePUh)kPR zxvvljLEp(gFe{iZE)25_7~}G>X+#4|DJ~JqJkRx8>7gJp(ko92`tFL- zu`qbs{{nnh8VZAy8Kly{Jj{vQjX{^vd2ZmZ=#?O9(S^Ga47&7}OklA8+meDCNJC-p z@>l!!z>^WLIMH{hpGpVo9-tTHT{=H$aD(=BmokK0@EUTxS3jrAd9N7rGTh}4)LlAK z;Y1Jx-Gy*49GCQnbC|W?Qh+N?)B>P4ULkla0=`xjNP*8L_MPnJ@_E(4M}3@$Lh_g3s`1 zf(VY8g1MT5+vt$~K6DqJJQKEM{vlEYWnyGbJG0wrGCj&1%@rJfe|q}k>8J_aEMgNJ zPUO7d`lw0g?QhAbgZCR<8s-Xo%e;+#E+`YDmmmAM_vP1-xM`*{39Y?9UOZHdN$84z zh!aIdcBnxbI1aAC3(Owsa9%Rl7DTZ&wx4}f9%@9$jI8p|BJnMWb_x=-voxZu8WEyy l$=?ZXl}4nOM)aSqKLO)QtuyVP^wR(U002ovPDHLkV1m|R@Sy+z literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/forretress.png b/graphics/object_events/pics/pokemon/followers/forretress.png new file mode 100644 index 0000000000000000000000000000000000000000..286ecb983e9b709c1e95229d9c372496cc81a3a9 GIT binary patch literal 620 zcmV-y0+aoTP)FN0Z0000000000bn^Nu00009 za7bBm000XU000XU0RWnu7ytkP;z>k7R7i>K)G=$@KokdXAu{M2c*#)gx)^)Q!y%AG z1cj(KI-D16fx4mn02hJ>6U+FjtR51Lfi~e*BNMm}5Pz)bPI|JWSas{tDgICX>Hn;E z9N31j%Pza@@{VHhfAFT^IOeUq+1i_i)yjz{Dc{nYhE>K38ujO+YDYApRUSu!!55h? zi#CiscYYYZ5T2dHPGm0d)-M1!rm%WecIf~`$HShK0J$$0 ztl~ls;NbkouJCEPaIIYcDd(%QY<;P`eR~|V0=vS$JpdUiG_$g76)xBnXV*`o3OmU{ z-(F|eRd^uT_LAf5h131o<9;oerJg1B(IF8}TnMt(!#6GXx$Hg zgnKWgT{~T4j*O7Hv z;YqJai)GO&)}%iu{vrN_tK*1>DjP#g#FCk5e=izPYuTn^I1pxLFd zld%ax*}D{S-EIS!UN*slg0=n?$yPRgDGH0wkrbg+5n4eQ3yARUqh~=7{|R5JP2YRu z)yb~=K@OiZ`F>v?X(&S1b3NB{*#Ynu`lC+;YY>TmPAQZ^X0$Z(=dFj_yyV$5hDYf|F7uh{y z?0h4pwb>3So^DCYW!~9Z%hz~u0blUi>(0DDaW?C_S>V0Bn#MeE)07M5c5SxVYSVdv z;%Q*i_Uz{KxTZ0tln{&NkDg>~pIw}uer)6yE1sT%SC)0V4O*AWgz%%#*diAW2C_J@ zhc&%#)b}Qj-T4W3>YN|y^4m={&m&}F-V#ojWI{|K@Bx`DK{b#$2=0qe1!8& zhqvQooD76JGJlyB;&D}cF(5oTSV79%Og4Hyg~#+qw9ykjHWD7#*Loa**p9}Piex^+ zD2T*!!;=HiI7-4O*4l|8Y02EnaszfwAgPLu1IgXK(FdIkXTL8l*>HNvP~IdQR*@qH zgmFN0?DLDZF0dZNGQ8{Uu2?e>ixruS1IXO810000000000?9O2Q00009 za7bBm000XU000XU0RWnu7ytkQLPKl)Y+OF%-wONpQD9my$`44#BUHK0qKO z;4FdG&CtP%ErT*#DEJEc1X%+O6gqe@H=wBj-_`D<;}nQt7T1mp)xxTjkiaRX1UkjY4j)ZdDU_5z|(l z6@sME<|pn+4ZAhz2Fsiox5iXoglF`vdXbGb9g>*TI$Sz^3~{dwm#%dm5N0(oJajg< z!xBsg{a~heZWJ7I=3i9@`y?HyY=M&(2SFGPZ?&<^q5$Zderbti0i6?sup15L5NWz; zs5kM@Efb0i2V)!HjBu!qQP79y=CG`wPq(*2^!7a2?>WPvK|$h#S!A9B0_Rf@3{yGo z-BW3{Pkfh5Q?i?A0Zxfd&pl#)#U~fZMk(tv&iOP3J!gM3A@d~ZlA^#C@VLhsY1wc1 zXmT%OaPj2Rk3&Nuwi#1l zhU6D0;CO18E{)iLwIy5Y7Wd%&j?QlBxXlH^P%LG(?Rc`*gMxVrT))K yN~XDCauc#&&@&-x$i7408v6nNc}uxw*NKd7&vOIoV-h0RaK|siA36fdBvi000000000000000rG`?W00009 za7bBm000XU000XU0RWnu7ytkQ7D+@wR7i>Kl}(D*zs1Z|i_wj!ROWtZIs z4TDw&Vb$aavod&`(f9%bT~;X3yi-^4Y@T_Bf=ALCWvZOnF z2+TaYcynM>aukM1+2#{^0r&U<^~et+1D1eCHu0V-SI|hxu#%Lm3B%e07;3*Bd~|yxN!lWe}JNFn%MB}Vg3uUt2{6GB6W_RCyswwiWGgyhX#uhGO-`Cv{y`U2+2UWMs< zl6NJXS?uRS)iyrgQknwC13zHnF@4F8aAL&?B9b94Ra_F=j{~Dp)4bI35^gU zG8q!HhNU>o{3me=4NbfGADA&z*<5k*lI>&vU*4tgf2QAtq+v{>j5T8b0000G|n#xjAv6X;C==0Rc%-Sz&RR24XUB00009 za7bBm000XU000XU0RWnu7ytkQcu7P-R7i>K)W2)nKoke?8?>J3p$uL;b!kR%P4Q5J zi`C-6hC&FqhD;3}3hwHuLuv&w)Jsi5kJk1O)c+w{p&n(hi0WF#7XpDmhIkBkC{(Ir z-Mg!Aap{%^9zG}O`+QG75W27Xy01m0E*8Hv4G*m{LSYx7>(1J~dMn4N{^tfa=W?8C zgm8T}8x7ZX2zsw_bU`ib)P{PeYV%(0LT4OyzDa3{5en?@7|SdVj!!|q;R z+JIt&##YE!$870*mVLq4UNg7am~~&%JlKHZsHWR2s;z<6l-6pLYK$3c@4)#gj+ZKN z;K5L9pGK9@IK|iz3{)Lgal}~N(Yrvmw&`Pyqj9!(Uy6f?4O?vCGh?T4m#S&ir5fX~ z&S=g}0)-1Czr4Ws$k=9H1gOT8bGgAmW$7R6^wP?>JIlbt#uF>KYsUMdSC3!=#i&fo z01y>8UruP!-n_KTiHqzUE+nYM+>OXiUuIh9)NuqdT7C&vzGr!o{m( z)5f^!w%`s_kB&c;q2q>k#ueu~CDbB(5h%xqrjHd(a58zWx>L@8IKV*xcx<>hPR#% z8#E~a$9=`|$A{81Y_LzM2|V54rDp@^pbYG13s#8;j}=EVKP)-~KIf$99721gzNhzi zzxbi=d3orPC*I?@0sq;60gZQDYS7?ZZos)XAE%u`P_jL+uo2kse1vbJk34XU^P%4I z`FQr{@dO>C1>BIncT)Q5CG`*dB`zP(kA463fB*mh07*qoM6N<$g5W%G A+W-In literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/glalie.png b/graphics/object_events/pics/pokemon/followers/glalie.png new file mode 100644 index 0000000000000000000000000000000000000000..b2e15e52eb75d2dd61f6c0dc764c4444a5cc57ea GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*jQNE$;ilPY3Vt0 z;YLkOOU=fE2T$G%3`_(n!32k8f6oGnau#?*7Bet#3xhBt!>lwb4z(Eqr=@x$hH55*&L!bD zUT4F1Zc}T~_@C?ZG|zN@NB-mDAQeri|Mp)H3le{b^r@O;aWV72CN=~rXl|NMN<-Q~ZYjL9{_-ya(y zbm#4Iy8CsW%wLuZ_Lj|VsV2Jv?q9kdu;sg3d99LQGGnStHS;`0CK-cmzIj}+dMWkI z^Io&=yswjS{9fhvXBSe|aXsB0`fuBBYjgE``N9=9-|t~`juAiRnepk@geP+KaobvV z&33={Un@|q{98k}$^C{ELYbe0_UE)th+X*3O4~xN;D7b;wmD9nt|HQZHGix!dwjYq zsQmM-X9`Eya?Bo-F1TmmBE9(K9}cHauGTAeOP)@f^n9932}2;)#B`IX4AZv0$Xog@ zE$6AOaox_HyH2iZU@1y7i?`W5t#synr*{|FU`MyO`HmpKd*O6E#a( h<o3eNxl literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/gligar.png b/graphics/object_events/pics/pokemon/followers/gligar.png new file mode 100644 index 0000000000000000000000000000000000000000..6d17b0e3abf84b78feec20d34c8d583f387959ee GIT binary patch literal 958 zcmV;v13~Kmdk3}Koo|DA=Tc+`zWWD7z`l`(=NP< zL)vXXR6=BBMC2%jtkboM+`*5bAVH@MR-LOZaauxXcR2=;Z+_`N z|6HsXp_h88m-;t_;lTjdUAF7Xv)CqS*ACNe1M8i+Jd1JO^~1T}ZHTP5Q-osufECq@ z-A8o39JLPGFzp!P+Fdy57hvVr}bVA>B_JA{KH4uqTSKzWhC9+tq8MDjh$r^QN725Bzlt8aQ6M52fl{F6sAaU2rO3Gr>ICrnhSbSEU5lOfj;X4kA(mC?c^ z7R=@gqNgAdB{!c~c~wRtF|xqd9DAU3D*UL@u~TYJ3X%F%!6B!iX&{-AjG8qPiN2h( zn{z4?BQ)7)j`j|vK3q^yi>1=}R!C0y=7>X5UU5I-8$Zc;ngwRbcEAb3C1W)3VIT%h zdLI<;?TQB2VJxCR(m9ifc>}|$!Oi)yBcQgBWd;24*dWW)OuP^zm z*H@dymjhT%_{441prnGSYJfvZA?-JZNU(R%44^^pcs=`i7i}heWiUBe&+hM{YI39- zlyoUl*A1v(evu8V`|sfIHGYbFt&Z7o^~;~dLA7}=Unz;l`GWI0w6&iw42096IC??(sKTCVYIP^|@58~Ikpz^w>BqtgR1RkW!`##+68DQA_1-qtf}DU6%1AgXQ~wCIkF@_qY%_5?YL~4X2dKm7!R?}&1$d0Nel>Iq gZ9MJrw*CLB-x5@!LziqCmH+?%07*qoM6N<$f(>lD;s5{u literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/goldeen.png b/graphics/object_events/pics/pokemon/followers/goldeen.png new file mode 100644 index 0000000000000000000000000000000000000000..9400c02fee61ee222b72045b3e394aa232520233 GIT binary patch literal 773 zcmV+g1N!`lP)G=Tx0m)f;p&=0f0000000000`qiK?00009 za7bBm000XU000XU0RWnu7ytkQdr3q=R7i>KmCcIVFcgKg8iC%RTNfJa&9yUJ(F=ja~a$Ov8P zQkS~aKNtSbf;i>V3*@Ex6G5J&00~b5uEicbu7p?NL6Vb9Kx6sXZ1i5go2VGY^QfPt=jry48hSO)%$RfkY~WDs>W z0+AVJb`ENUqrF`8KTJo7F*F^uu+f71HM4q-!_iP4-oVqZuaPoylvb8IKWJpHIzME( zBV%YfYASjIL8c0ux#Q6kkxboG@ZpfzE#wEo$_)nIQl+T>7t}brQ%dqcA%q=4MN~h`^iOdXVcGEZ&OS-%U=YZ4KnrV3Ct1rDeCWf({)K4{OEfL{<7a)EN!{uI z51v-`2hg|v9Zxv5g~b@`T4<7F*#8H000000000068TQb00009 za7bBm000XU000XU0RWnu7ytkP`bk7VR7i>K)je+;As7d6HWrptic%$0XcZ*H9Q6Zq z>Rd1FH|P|dWFeh0cgWZwd#=Mph^bQdGs{VY4^_bD;{h9|a+FMdGX22(dG3uMbgW|? z>#d6TznA#gvV$F7;%ABs*4e=wY=j)dwu!caJAJU7;|V*ANN2S&dXEjIbxX?i0OCsf z1>APZimH(@sxw2ySSjILnk^m5Dqln0#l^JMA&*1a!z{_usci@(ko&rCq$7@zKq2Zp3on9{9U;pqe57S)fX~8|e z`X#DHjc=LW?DX>F;vU}e($fO^_fHm3cx(iPJpp5Rat`xKuR9)}PA^6n5S*UVt!k`k z!H2f?)Pa-&EZuf!xO-ZBH+||Nx|^Sy($pG}o?E;2W`W@h!73dBJ}$my0nwWP{9v@w zot>?sSN-OCL=Rgg%4LoL?DUMnfZ)}9NzxxpTCLKC(c{z*=~{IQjt0`JUgSrGH2m`y z3Id`>@b&vo*UH&4dP73n^M-;A*h5c&L&dWt1nGSh^8xa9OG{E#d2v}uk#S+6p`ic(00000_g6b+00009 za7bBm000XU000XU0RWnu7ytkQfJsC_R7i>Km9cKyFc3gFQ8NX|nSB7QKS-ARK_(HP zy&5Vk1GWc4NyS0=j}}Geq)tk?%z6Xc2OZ zV;tice;d&>n*IaRC|Z+um_%$G45kM&oiT6JGIp6z#$3h*hq5yh0Q`jfi3$0r7kKLf zIp#ygcwp0ACXQf&L*PyhV<*6B%!M)OXB?5hnFoAw7*nQ&Y()AQw={GE#sq`)K|C`; zcS?Gh(2#k!Kr*)xG#qvE{ft7%JQ1`CykfH2F)>jJN35XcL8+&#ZkW(32Ae*nkrYx& z0ir&#E)%l2m2jPHVm>y)o#9EQ1&bRA)e1h=Oj=w$(P9$QRi+xc* zR14>pZJy(wi}ZI57n)68<<@8A%QQutL-cNbgL3mB$q~ z1yu}}CHk71tKtv)V!4Hvo4m~9kxF2BXD-@x9#)*@Eg|;JGB^1&4=c6>Lr}lwU^h%c z|1!DDW6LO<;||r;gArUksETdDw9cm&4PVsxrXUT|=;c5wR{rWSv5dmCqZDzJVW;}7 zh%JcbzPv3+=yRUD`1J?vId6S%?8?{C7QUOuV}CQ_?a2R%-^Wu>{74D&2mk;807*qo IM6N<$f^qa;>Hq)$ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/gorebyss.png b/graphics/object_events/pics/pokemon/followers/gorebyss.png new file mode 100644 index 0000000000000000000000000000000000000000..08c8e2f5941ede9892cf821af0c3dc55d2e970d3 GIT binary patch literal 925 zcmV;O17iG%P)b0RaJ-smZxfVaZu>i6Kd;nepk7q3P-Qq(QsN00009 za7bBm000XU000XU0RWnu7ytkR6G=otR7i>4l|N`xK^(`=2kP;7gNF{mlt(F*g0{P> zVxV&&*hT0lPMIupda0$pCLyJp*d?9%e3oi)Xvme2S15+IW)Oug9RdzP zFpl_ZR~4dh0M&v2BS4Op@i{=8YYimWyHKD3@uR^6!6bjnXu@m2r~`4=L4%B9PZfkh zMW6vqEgK^vDpAYDpV&or<(^Ooav#tfQljQK){7*9_|OCPEFa) zeoTgC4<}!VUoiG2!P=gRaFE5nG|b{?^E%1az`{YkxzsOZw7R$ zG@}TU90~wX9B|Bfuz?*ntmRqmX*6-r7X0hq@`Yqc*sGWeCk27sq_iOgp)k(k3eg2s#vIu|J^q2m^J7s1QA5VwR6?|DW)IPAP?O!5A&)z;W-T7%8l(6($K6n-v90R-|Z>Uoo~`V0_+dNba@ z1!2SMvfx=Eko-uPrj`oi0xWX6nDdx8q#Hmej?G3&KsV1A`y-<QcTr?yzPUyxLs z2tWrfm)Xf8=s*z)0R&crfDjKpp)TRT{el#dOq#{G@yfov2s%)Nr2@jingntI3f8hx zaMJ4%A(%@9XH_BubD-pXJKF*RMOZ3W?Fs-2A;=c{yFy5|j&NLY=VXZxLLKY_0dCfz zKoOc72P-RC3ItXFa`o54HzZT0?rHSQG5fSsBrdHlgWmw*PWvMiKq2bq*B)6qda5Ds5C$VUn?fkmoK;KWMy-o(Mm4 zrt9YBDY!fNC^{C5iV!=P0s$AgBBw1Pvxe{8_g>50KANBM)jtS~)S(GWzGtOCUNp~0 z3OEqEuwJu}YukKl|PTuKoG@^kejsk8R$V)6hs}A990Bt zoVX{VPgdh|OH4+tIUPx5=@PB+r)1U}d&iqUNCvt*rO40Ee(PC##-4Z6O*j1;mHBo4 zTlFxz&SmLUzq}iJGlbSHpYlc^iWt*w96{L%blIb`jYKE*5jQ1^bD2sWoAcLsCoT|E zF|lzj>zWffn5ncI)BiE1HqB*S^DL&aQqhThQ%-ZsE>|_l!+HVZ=+FeZtQ8isZ*S8~UStz^p4D`!WSBHzE}Ov5i0}CV z4ujrvIM0QWDS!=hxvC02Mu%5mpOfLp`jwbp$@qRI(iIDIne=iHN|l7N>5kIy@^$Th z(s_OB8$S94CL`XtF4L|JWC$R`)$wR=WO$j>J_IDNzTuf6Tl4t#NPw>u|aUvMHP@T%{8 dUmX0u`VDP9rj)xkKZ5`O002ovPDHLkV1nMBMRWiF literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/groudon.png b/graphics/object_events/pics/pokemon/followers/groudon.png new file mode 100644 index 0000000000000000000000000000000000000000..242241c16f0d84de3347a4b309402d2a73fef6ab GIT binary patch literal 1368 zcmV-e1*iInP)FN1d5eZ3AVX+}04FYAETx4dx22aH!csy@ zb8QE~9K^N|li;g9|h6XS0LF@v@|+24e7GG3t`R6?^KT z6ml?|1s%k6KBWE7%7Nx#uzs4I|9kW1%{&=~w$LpZ-YL7Vd_sOC6! z&eJ8uGApO8^GSB&a&SXo%bmg7uXX>+bvW@VI5vPs6%EBKvFmkYBGKCfUaK5u5Y zxnERHnUx*TESpTy%`14D04WIA#}%A7Jj0mNG+%F-)ru*Wf;bJUxrU(32!dM`98a<* z`%TpD`1ux;SnAz*{1k*czF*6I^;6T3H>hnKBd2qemAUQ!z)ta85Qg^`g%8c zNeaO-tDI+~J!O-{9<1_ROl8C=eptnaCnpEpl;L)slQPSQpTWH(IYAf23QGJ*>`TGO zc~HgX-rm7C7pO(^c*<-T1U`db?w$OAE+|u+7K{{I9?}s*Z&by2h_a~7Ba|PmGMgfq zX>_vZQ`A;Ri%tuM>afNT=#vXjrs`zDj#i{0rs;2>NP3CA=5>sR@=wfDJ6eL0^ECYf3PCemK|RO&)nj#7FTOn~vx84{i^KPci47bl`E0C2w{;FAfb0`bA121V$EE zX6;}*;2z$wQ6Ix}jZJUH@y>8K9Mq#(OWg73GVtq%;>9uMf$+$VPNP6ZJoArE(a3_! zOmxycuf^^GWcNwB&d3hF(0X(hi?Sh3kZO`d-C z(v?$U6T!yeul4%iLps(e>ZI=;*6Y^>Jp=`_e%B#D7>oN|vd*dwJqHOrgj9;w8P}yn z4OewRWcPgaB5x^C3~f)Ci=Z#7C_)80c_D6N*KY$TBxzbOUodi$p43y@uF4d8k{gLF z9hwRAeSjc{#2$;^Q?biAlSCiZnjifWXhB>spR);UM`Waa4S`@LQxwbq6e+6@Vpq0Z z;oz9El#+BuokVdC3oabU79l2iBK3I}tVLkX(gAxV4B4DZLC#$$nG_BZUo;=lgd)(E zMKA>gCkqF31|C1MKcl$=le=>^K__8fZ*2UH?DkX&wx=$XOp>wsa3G1u2#_lV%3=N} za+ENmFyBq0$47k%=MEMejT3cl5>RY1$Y1ETM-ql&033*by(NNm0n|*E9AL2;eDrF5 zgR*hLa;_c!KG1=V{hkzPL>)ELJp6Y@@>kwhTeH!SOc+y$Tm(c>U;tHh2~old2ffV>Su974eRQis z<_)K~$NLX;ncnRdZ?vC0E|ci~Kp@LsECswv$nv+A+219L(fP0N>i@EtD}GBurAhM- a!T$h3kvHA7q`~t50000!f literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/grovyle.png b/graphics/object_events/pics/pokemon/followers/grovyle.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2a2df5867ab13609cd7c2cde3667b336c78cfc GIT binary patch literal 658 zcmV;D0&V??P)T5di@KX&D(|nMs++d6_9GL1`)Z*;%#qm000000000000000*`Kl|OIWFc8HZU5Ab~gzSM;xPuqUS1M|` zwPU7$&=;@)B7wJb@LE7X;5~qsj@>*)g@AxxuA~(4pDZCAviVK^>8SUPl6;&@&N}O? zv)(SmF&?kJMNkwt%vcn}^A8x%!yYS9o_hCq3`I=2mma4c)566bD}AJSN#h|-d0z5g zwyGFirkn=d`KnD<2xrnF}ECX0@N`KS?@_~gdj6=nqdY)WWrVhUS^xg zh0|TgjiC~`Ag39oEt{&(^IEU9h9PS)QEx?M1AK;QrVTeXz-6eL-^MWH*6>ho@7(~8 zVal{&WdmG(4Ks!zw}wxL`>z!YF=0{&X##v!h6fd9nhUw@=|za&WQ3*C0O#WAuytx7 zw^|92j4_kW27Ctg^6Z5N-0FI<{yD;UDxe!BfY+*MheODXLHYeteq}k*jP{Oa{Yc!| zqQC?wZr~?~*wE&SYm1f6VwnmTjbpN*BTSFbV-~VxXi0G}hH0zmW^GK0$ zna1{!02a(;ZSePa{9z3dzZ{P@SI&ZRMq`H~&4$t#rTb1{h8P|Qc@myr?kiDs4C}bE sK$hNj3E2Nk`zH|Kf7JcOA-=Ev0Vj#rZBkHlN&o-=07*qoM6N<$f*6A$8UO$Q literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/grumpig.png b/graphics/object_events/pics/pokemon/followers/grumpig.png new file mode 100644 index 0000000000000000000000000000000000000000..8f757d50ce1e18020b957bd5f7f6967e467f46e5 GIT binary patch literal 749 zcmVKl+SC^U>t|@BBQs`mp5Iyv`wHWJ4(nQ z&_bZ>6%Ru3_d&YjJhx0K#Djl^Udxa{7=l>n;RU6L^`eIfyEzzCsHaMCW4Fe)NzMDs zyQO#$JoIxYecrrzK6#TjQIu6yS!I>~B%PM{y@b(%+bPVG0sk*yZ@)D;>G-V_Mt;QI z6z0BNE9sZGl& z7k*;;v;F|GSM2|70jjEXe@_Ty=E)XW{T4HpF;5zkt)6!vu0|m@lRQ6x@>|ktEMu0+ zYmaI@@>x7onWGb^{)9pS_0%M@UK($IU=#{vo+nfIUZ+36T?<(gtWqAqnUELrn_nrd z+u~%I=kYew%GC`Z2w9IGY9tiw!NRqj#!HHYOlF=dzI)^Ns8Nku^@#Uk;cM<|fcGHc zMIo-gpfk8j=ZqgD3)a63jaVo%^4(KPXLkIl*bTY5D9ozV34k!GZaok3$G1fRsu^dG zcV@aM2)Ss*Li3c~3AFesHFJ8O24qoaRHnWOgvNEf8?1jk1WVA&VEi)>!dl2s7@U1G z#eGF)=_rVg7fj;kheB8|s@-eDJS@n#LBX6kLKv|SI+bQwvjCS%cQ^kqHjC%lLm|ZY zeY=CV;XcZ^6U!cfT|`EfI{^i@-7FJOV3$kx?0CWBHgkw{j!ci<3+jd6*!jO|0PZc;rK{*A%LWD7PV4=ka#L-{ioeUe~fw}NP@Di5h f%Tq57{KNbPMl2mk75L+K00000NkvXXu0mjfY>H3T literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/gulpin.png b/graphics/object_events/pics/pokemon/followers/gulpin.png new file mode 100644 index 0000000000000000000000000000000000000000..320f5fce9bd70e5b7c1add8ba90ff7208b80d6dc GIT binary patch literal 562 zcmV-20?qx2P)IZ07znLz;o0UKlrd|QIFG<$CAg-Mx!(>r(Q^<@f&Y{k?Z2A*58PQl(1$ zC(&1%s^P`v>U*w|8^D2tOi%~C#V*6$6UWXExPgSM@gH=N`PjiO#xn!CKrw@_2u08i zK41R0qJ`lC!-w#mS9O~!$<54|$qQ~yHZ$U=wT>G$H-c_t^L(2Q5$}A%^Y#Xt?Ki}7 z0iL8hw0XC}EL6naXu!wTkzJNb`A+;Uu}~4uInTy>YXOI)d^xZ!<|Y69;UDIVif1R2 zXRx=MG0TldGB68^*lY5`fe&V9nTmA)zO?D`u?8{_!Xoxyd^miAo?(jBgBQtG=23p8t(6)U(*{Y zRvUTC006Gcx(=&A5JeM6eaTxh!=Nb^FxRSBgFm!ygux(t!tX8hqe0vFN22k&&^9F+q8m5pzGF00009 za7bBm000XU000XU0RWnu7ytkTAW1|)R7i=vmc5G`M;M2v2wM!KI7pMmMZj02OA&<} zT#P~7!4)=K*bS)BCO(bAVBI!G8y0dR-H|3u8aHO`lV)K++CRWmNC+V$*q}p(1#tw9 zy+j6y5Nibs=gB)WJNoihm29O)JNtWP-uc)?=zqD$8~9BZ4&Tt=w!0d-&N{{Aui&sl zkZZZG5#DAYFTIBKQ>D_&8T0)b`}t%cctOazCFf-DYSt+{DZQL=XVb21ZHJ3nYeLKU zeaj|ExX##Ri@eybb`$hchCJKpFK(_2kyqL7*j{5EIA^Cb?*(BsJ0C7OwZ!=9Cg*u~ zF+uA>L}PgqAb4Gclzm(5gzI;7aaP9miSvcSG99=qv`V20WK-L& z2+He(ht}mk6-%=cB6RO%u-*+Cdt&s{`2uCTVQUHN1A)d1+ zh+-PT@6fOmB6R&;gYFzYPf>iS*6sCsQrJsz_iI(6UddlUVXvwV&3_{8ASs+&__u}K@?_%1!P=N~}@RQI4 ziU0%=18%ptVI_oh+3qIKVMSVUaFX$9(u3KF^v-W2U;VK0OE5g#K@Ax=7Xo`lU`x!7 zXq>C#6YnLO3n8-H-d+!;AhZ(IW6PDokv!7XVPTP@jg2c!GKyRkXoNI!$xH{L2+AP^ z@->R1ZfLkTug9Z_$gC26QXCGwk(`ncn^(-i#>P7b-SK&r3EiR)W?4BX0zEPF(>zYQlFJk+E`$iZ z)jNMi(5+#sIL<);EQN|5C)USzOM9mScJm<6!gud(bj!QIO&w^}h3}{1vD-zDE z7ea^_T|7%enzWm!5K6u^^pp?}L+j7ubleyOyE0G;pFT`M80^+veHg}!`~HX!*;vlH zr`QOg$Gnwiw3QcAfJc!4PVQ(Sm-~i}(|X{`Kq-U~NujSR27$TYM{dy=wRdC1MhKI7 z!F##r1;~_Wq}T}6e>cwkNC$ExM|2~tN51|BXzxZM^4s&)xV&Kf;yoPuH-d?&5D3>; zrIfiJn2$L^T**zHX_Y~JXYmDNL4B54cG>saML{+1uCRKFmUrkHn+EjGPI+hP9x1Of zth;hEYVze4#BZ*CXu|S$U&+K>y}8b^@mh=Zxc~0@7vM|jtL2A4`Tzg`07*qoM6N<$ Ef=AAyzyJUM literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/hariyama.png b/graphics/object_events/pics/pokemon/followers/hariyama.png new file mode 100644 index 0000000000000000000000000000000000000000..541c6a2f58cee07c6795093c46861337f4ed18b3 GIT binary patch literal 1187 zcmV;U1YG-xP)G?rXiMd%30RaJFAqny6!O?*^a49=F00009 za7bBm000XU000XU0RWnu7ytkS8A(JzR7i>KmQQQrMi|Bgo5ND%gCIH8y=X5b_)u15 zX@v_l@v;l`MXPc^OY|i|=Gka>9l61-z!@ zn}k=E_%aL^^)2iIJi!Hnw{z~A?>VYE(xE|m5Hu)fOS<=S7^=;FrnkxW5%^erzOPSC zD7RBi19nBs;=bn_$?~AjcuJOp6ZS#4=uA$Rf}7k~j0$R9bZ(ESUo+(s8Zbm+;YCv{ zOd&Ne8GB?&Ig^uBB<{=046Jhw)x%Tq?E44ZTa75Tnkm<(SkL#2g)2Ivedm^Lg1=-h zAO=od)Dg%G=IcC-o$j{}$D_}W&JYm@GM?QHaKLjTJOzEw@7|hZ%5=#|&Tyiz+xV~L z9{Ov{$FYNcwDkUEs~!hQ$4zudxZ}*?D9H%CQe^-h9oYe$@f%~$OmgP=uVqoX>bg49 z=lwOt20=XePL__x!FfbFj6Vp^q8n_$`4CplEYNp4Z5HCBL-{M122u}wGJmE zz^;e6b$QtOCS@MIfzZ}YTa5}N6Fdlwa>Do_LW#hyTB8E=vX-7rp7AlOs=3vPClk#T zdr1VjAb#C``h%A84C|Z1Sks2Po|#zkQ)mXhwCE# zQ`HW{2gJaPk*%svQYHpU9vXsDqf6wGLilTDz+IG)D2fI9F-y@V_tln(`EulkGzSglg_VL+Co)E;6%v8dFj+y--8>HN*iXq0GS=3o?$wYHWr z#}(1Dp@N%Tb;Kl(BB4Fc5}mEY~h_g&*PGAgTAR*lQeV z;Uc;#FcK9hf+hOA#C0TRR+&0oUhX`$!Nx#}q&S_le}VW0&p(4PlVulObkTn!)xOW4 z6jic)kBJD^kFe@xo=1KuXXFa6x8j4W#ws6lOEFqr8fB2pN?*&W#*|u~y@JGGRopBuJ9izfA zaW3R^kg^VoQ^r$q!j8U$0p&O{lmK!vq`h`ro_#=di_x><9v+T|!=IlpClF+zW<%OF zW8Heg0w#86g+2({MIEa=ql*ef*$egKRgtrdT0W4_Q7evFXFki$Q<~T;n3b)RV%(7b?dUBSF6NCxV_;m@kAhIuL z4T+u&t;%5Hmxlt&pKPtPppPbtB1f|9SR_j?`q%mkDbyRNYXl8;00000NkvXXu0mjf D6YC75 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/heracross.png b/graphics/object_events/pics/pokemon/followers/heracross.png new file mode 100644 index 0000000000000000000000000000000000000000..3699497b44303a23b40ef1981c4efeb3b0eeb93f GIT binary patch literal 838 zcmV-M1G)T(P)K)z502KpY3~xh$Pa=N8>F1rLF~z?P8UVIQE!K1f(BW^7t~hWc+t*K`aN3O(ev zm;KB*-=CwqiqKO%)qhZvlW|u?e1zh^^}9jf(Dj0Igcpxkleo}#1BY%F9E2aWQAbNp z;=A+&6}`Ekn+oRd{ZYfd%;wCQDBEso=yvo2JsGub$~>XLg!Tf5t}8<67W-pnQWM2T zhGB@gq3f|(mS*W<#D2D2N=!@@6%<6`(DfKF-AuI+TcGJOW0lNO0I|WLt12|z(zYYE z=iteVA%-$gMG{xFWT2$}h!5s7kUCWp0N6(|S3N(&{-ru%nD6Y0*e@^pfkT&%mBa6__e1k#exw14UYCK&RBnYG!;4p`%hz)^9k5@l ztH8~cFW`<^PmXm^B3A?s9D6i!Y{w1TKoqt1ym}y7KwtwnORWjSG50y&qH81vft;ruGp~&u{O6&n*Iffs?z}TTb##v1k|y zDRk zdr#uBj3T(mJ5H?3HG2*$QWWG&Z241dgPSB9=F(!tU-M)YS57uv0-8*Voi`F*6<3{p zTJ=7~mg;ZhOgMFN1NF)^Wu$#H3c0RaKwIXRheK{+`&000000000000000(>b=t00009 za7bBm000XU000XU0RWnu7ytkQ21!IgR7i>KmCuUXFc8KCi$Ktm0s`S%U<+Zdxn!?} z-tDrXX&zwv29==~DTTOTU8Q&(OOur-lwL|ceEH2}z8U?AjnG9G zUG)D5=V|_Hf64O{rw3R9H^^2}a-QPk0GNSc*xB;2oKAcP$f%HzPD6H* z=53qZX&z;+4+kS(WQ zfB3R+%!e_^qUA!!Z2Me=2d?^d+UVBX6Uerpc`%!qUY*vp+ByEvJR6ev+6bY$dG#U_ zwOa>=0N6&FuXS0Mw}T-bxEdOoT8L6_hX#wDhk;%-532I~em1*+T>~YAIvGMncwY)p z{}{Kh=V70(n#Y;%ciU|CD3DV3_W3e4c)UM`#t|HQLxsGxEB+odSUmac3Z6cF{5%>e z<+uX*DA)5v=^I|n>k>4;Myc9=Tb4@c9OV55L7u2Cyp{W3@RLJCj)Hf%LReIPoPS>e qzq0^3`$8aSn97q11(p#cE_SxG6ek%6IsQOU{CVPRoOF)``s`FUYE(YbM%iCF*u00000kO_(>00009 za7bBm000XU000XU0RWnu7ytkP)k#D_R7i>Km9cJvFcd{CdGefzZ|IU1Iz)6T-7gtJr%ss|`$x4Q#m@#*gw!o};=F6_b&LXpTy)Vz7mXDY zVmdoshxPgm=VB@|+v~8FTF-epkvF#2VcmJuHyfr-yE$>;G<^N2L9zsZk>qa zfmJ|!LLZ>4Rwi&&K@kx;$G(Ss5Bq^ktY_*cfyGL!61kU}Krs`d!oDZ+3i~G^JhSC* z-%j&qZh@E)D$u*8%n9|-e?^>B$J+R7kI<_1#hvqR%PVJ~12f3lX}0}LtwI&}3is`{ zZk8XZDP&jI3p>so)Pa7Mw*mSZ7wW*UFy}x6n43bjEuF8CJE#MRkIqe9<3b%s@i{9% tg<0vGNM~S$_syu^vC)XRah<_`>Ib>LXPH;!J8S>|002ovPDHLkV1k1R44MD{ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/hitmontop.png b/graphics/object_events/pics/pokemon/followers/hitmontop.png new file mode 100644 index 0000000000000000000000000000000000000000..9a64f87a5f6d003ae0704e6867696a1af6b2ca04 GIT binary patch literal 591 zcmV-V0G?Tvp&2=8vAMwk0Re$g82|tP000000000000000in%x&00009 za7bBm000XU000XU0RWnu7ytkP#Ysd#R7i>Kld*2XFc5~RGN5#`5>SqU%&tCZ4iRP|ewpQb1iQ{wbd?{{QnisZ_4I>Z<=E<3c_v z-n@W+lYUXav6qEh2%6{f@c=h~fbKYrKOy*_ZaU}v}46lhSk?4 zyk1#g`@Wos&P7LQ7oO5|*P+fE#)RWx=H0q5+znl4Arl!wJFa0Vw}c_{4l_>}XYzjb zxlqE~mbENr6n?c5Hdgi22TRs;F4in$wS@jiIg>pMT~DpMUi@A6-cvsy={gq%quw*$ z{Tv3|_nu#Az{EwQ^_*qh@bHD&xf z`9eKpG#m73eJ~_-j2@A`Y-TEN4Uw*yn5lt-zFsGR)oG|SJPotGD?t5770vL+x~Vp7 d>iz$zz5wSN&RqL*BYpq?002ovPDHLkV1jDA1a1HT literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ho_oh.png b/graphics/object_events/pics/pokemon/followers/ho_oh.png new file mode 100644 index 0000000000000000000000000000000000000000..714171a55d48f4b2fc027cf311bb9bc6fd603c6b GIT binary patch literal 2252 zcmV;-2s8JIP)ZfQ$f+R~P`w52U= zX-iw$(w4Tgr7i9M!EUbqxBc_${Q83$2(BN}yQ)5@b1-#0c~BdCr<-3PkC0j&xepq? z!ZlYNPe$}J%kCq@i&B0cIfQt3ZZe*Xxxy&Z$@>TudQM((E+GKW zspJVr2-&-@RD2Y9cgzLjiOfwhK)wy3Qa*tkLi}XZQ4~4n-GmTNcI}M@>R}ZG6gwbb zgg5XOgrJjb54c=HynCrAc{yN8h$mm!$L$7Iqar$CvEzgyj`?0fU`HkCFx!P(LVPIz z0ogO`me3BdeZ9$6jDT-6E_No7xDH|#tGZp!2 z#03*7U@UVH5+u!Jbg&t7LCPYDTzXKU6e z5+gy;fglmXj+}mZxYzFwTk4FEI&Ag(r!7{14Gs`?7Oxsp1#?1zO?K1OcBb+@oyK|M zo4RK8hZRbw+v;1IsoMmZ#wPKQbzt>{mc;fgp&jDs=@5+EPye<5RA_o}xCO;9O1n5E zWY!H$(-{GxD1&NM4e6(NSHKQrE>k}_ZBRlRduOI@*yIWkz!M~ka{L|)JuR3K0#`^n z5fOaRfu{EB*u)HL6ri5(b`R&2oN)s1`P))+@5cV9k()g~2GeX3#`OWq<_~ZTyhuh88I+DpZ&gjq|&InobTRIO`Mfqku76***;+mQeBHTszv*+7}&m!@|b`^m9dOo3Q|F{B6HXye%Y;ZtU5Bz&}g~ zSvrc*+umIZ)JjYTl*Qv^h(gp3%#DYB5q{TOGUv~^SIInf;g3xptow6>BW z#Btjuxgv^0c8H!H9cpE&psq+|>OZ#SgdFLU_?Jbn(Kw?D5<>7}{Sny@C-&o5K-g6$ z?wt`{Amq^qN)zJvp+%02dKrS)YGE_fgf}Un>3qZlXtZ?$i=mCZbCVbeAj7l1Xl9;F zH~X+i9M^)9i*CJn@`i>&n;`@dM7-xe_}gb+J~r4zGIr215<;GZ9$IL6p#Irt3^l&^ z+%l4Kz1<%)Ga?9f+y_*E0uis)u=1b0`8W8lGKA=Q??3}$Bot?``{&L^)gJ+pcsW6WIxAo zE5G{Z!NG?tA^rn{eEea(Q!H;jB_6X=jO|H6XdmzS7f~-zilP!a5heg23@jkzA6?|# z%m|uR*7Vbw=#JGICV+c#0LBucQ{eE4(kV*&LdGNj0Wl$5fEkH5vRF}MDUiR$Pxezn zs9U$qXm!Z)!;0#<8FvROpkV)d458I6;(h#5DP2m>o*Lu`ontErp+{)DuoF?Lk}Q=J z_zUg&mQbDo5I{FNg`Qf?IRC$=Ztnk(CB%O~{P$iKN|)EqerFRrgt&wdS_He?bDj-C1Is<)5JKg6`3dM_0p07wm+K%P!R*?&!CMLwp%c8AFJV1;n}qbh8;-Ob9hW9fyuvsg8TmXbbIePUt$v zvDJ*r^RzL9c;j~11mtpR=0)cHx6oD#T@WyG_-%Bvu|Viy|HjI)Id>uZf;J~ItwG_Y zTC1v&aE`8H3xwW{fcX`yfG?!?nDvUz5}F!t0o*O2cjNzqZ7w_Of_6&izvRz5v4qgl a7VJMRNp_@OCf~*Y0000Di&FxzQ;pDY1cBX(=g*SwYFMc>n+akOBYj00009 za7bBm000XU000XU0RWnu7ytkP{YgYYR7i>KlQC=CKpe#nj2EpXTc>pMr1D2jEa7~B zP62UC!%e0dyn4zv@RTJ(*I+ds&dnsU_|OpOTngf#MBJ36L;D?ir?XCXmnu+0r}{1C zcklGx>F*Ol2OV_KLH~=W^Yhni)_WMCRkK7#doo4Aja%TdeBk&7EvLF&G@q5?oUu6XXQBdm4{x?PlvbF} zN=cj)dC|`oD)7FCYbxLOyfb}PulzX6Sp#ZJc8sQoXq3|P?xDo%w{fN+{WypE$TP_rEfFy&TZ1<)2gtUr*N zRIS-Cn|9oYR6oB?%{7!GY1oVeVMwgcASqLMX29AHK7+s_GEXb6i^#gvYHmN4%PSKA zShM-l(J&$9h3((hyg1+ar&mJosJoYvF^=4Oiq4kHrNT#NmbeJx6552PFUi002ovPDHLkV1m&mC*A-6 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/hoppip.png b/graphics/object_events/pics/pokemon/followers/hoppip.png new file mode 100644 index 0000000000000000000000000000000000000000..90dc9f1260659cf67e5bdd4ac9b771b345a0d32a GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*!c1!Rnt-_IxEw_oMVzy}P%bW&OUZRf-Zz)^99* z_T>9!-d_Q~b=I7TYGb@I(KaFQ-TdAK3l+_shVCb{On4Sl<&!g$jb^Q%cHWM zNt{Wv7vWYE4Ae?f*{`XdG$Z7BaKQQG6Fkd!ZkNv2cMW@JqAoDkUq?NuDat|Wr(bUt z&o4g%XNI1)ZkLpQ=1uH8xu?QN^_7H@{Li-yarg7y+?#Ht=+6?BR=o18-WKMILH6mN z+wJC?gtaHnTyvsfZC(A9_F{(IJ6{Diu6}!Lsou1#6#j&rc`3`vq@EwY^i9w(cg~%C zg?38$OWtkSXE^54dohsT~xOt||* z{FGb4&x(_0{hc}^-mUC)VivvbRk_2^D(2m_*}ONHAI$xHT!Q_E%ZE=NKQ;bo>ED~b zC^-3wpIEC({l(1UhK{GJW$vHcJGWfzS60sPiT`pRP451z5mFN1FK|%S^p{cpikr5FoS&0Dw0g<`k000000000000000V|e~t00009 za7bBm000XU000XU0RWnu7ytkPr%6OXR7i>Kl)X;FFcgI=Sqx+=NbJ24Rg)~inVN2$ z7(s|ijDX+)5RbqUIATbO8_s~g~h=bAf<Bp5}QmzYn&-Z2l>vzu(r;8%7 z@}!&2pA46BEq;1pPRx3bxKPaV#K!FU!CM%Cl-CzI{$Fv<(H3zZtjsz1x5k!GUMtUV zVJ;Cn&5ORr9H!`I%4@~pVOE)y8TqqO{$u?B`}w{gWpk6A00000NkvXXu0mjf|FidX literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/huntail.png b/graphics/object_events/pics/pokemon/followers/huntail.png new file mode 100644 index 0000000000000000000000000000000000000000..9e09fc66e4a98e7b42186bd3ccc4ab1f569a22fc GIT binary patch literal 1060 zcmV+<1l#+GP)OqH+3B&t*#H0lqw|Jz00009 za7bBm000XU000XU0RWnu7ytkRnn^@KR7i=%mQQOFK^Vq&JOsS$Y@DsZAnZbffC#cs zQre5)!Rw|>j8G)ovSGy@y;X!XBrLRuNwK)lPtcw`Xb*eZ1e*%gPv9k<{SeOV&g{-i z4N_EmFUfEIJnu8_%+9W+{l6%6{&j-ozb)8N8n)DiKTV)GE(ObfIm4E$=WjUobBNx^ zV^t>6RrpdxRLB08bDjUM*mYg(Q~4MEF7Kh_nDpani~k38yKV`6D*swg%_ur1ap-#P zl@fIOa*@=Eh>l5Iujv}h$rz8NlBk@{pE^>TQW429OHc%~EorjKWc=aAx1QJ#DHV|& zlR!c*SdR|!?BsMv%+_SV^Nzs4hSi~HsZx_I>b{@=`i_&^3pz4ufXoEVPKjGeeWE)Z zu_EvyL85=kd`F05wC*^VO{a%NWNMxyaJ@89>Ye@~PZKHvKHK#~*y5C%dhQstody#u zZ7oYoqH?5@1a~=uD4_|eVnrmuoafvzz%;T2-|T;CiJXomGm(*Su8uT`(^ZbghzaJL zDNx72Cwjh@sqKGj5$+C5yGy-CcdXL$0S)7qs{F42@+gE z{&v7w15PyRkU}MFet9J_HG$JH{Ytr)393vTk4>~4xJ(e4s6zO>#}kyDl>>4htI3e% zbD~D4VBYB57ZXt4Z0p={L%$EZ0OsR{gU zo?yE6YC34u-wkSP1+yOwycuz(QCgZ!XESrIuwDp`{BDr%85$fH@AMY2EJ%51Cl-Hf z%JGW_C{2(pVDT z1%0F6fVTR&vmt~=eIZMNRFgEgxdw!`C$1 ezY9h1D)AFyGD@?zGGAo?0000lzzeqZ-G2ymLU(NaEe7*DsGNLi(cDcL}Hw)jmbD!UzXAh%g3BX7lL6h4PDQURS@; yJ|p#W&288I$o1tW_q$ls)X)4l`MBga|5xs9p0Sr@m;#$Y0q^PR=d#Wzp$P!m+Qq#9 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/illumise.png b/graphics/object_events/pics/pokemon/followers/illumise.png new file mode 100644 index 0000000000000000000000000000000000000000..b48a801f2c7054c4a1340eca9633cc1310cdb66a GIT binary patch literal 793 zcmV+!1LpjRP)$w5I$p~2~KSvgsu>B+fSF+pi5DKV+3$?56&X=!l*0Rhpm>1jD>308gD00009 za7bBm000XU000XU0RWnu7ytkQk4Z#9R7i>K(?4h$Q5*;GTLf=7LU8DmH!JifsHdcf>I{Qtn686dqzi(i6D7 zj2J)y(S`}=z!?L91`SFe_m+?!<*e7Y@`uwtAJ~C#dj$ZQ0WMQ5h!ci9A2fjq0O6_w zNMY65LRgjO1-8uf=NaHGgmBdZcraHrz%>O_vjCW?JTK5(f88?};8k?=9>UF!BRS&( zhN~F&D!>CKJ8}UgumkUZAB@1&JrBtJAr%O>PRO+lxS(_9kzT*n>r(H;0_`2yf!;Tr zI9MGFqul}ppz~C6E0r4drhw{zzcMzUYyBF2gWRtuQZ~VN_Dh}yHrLncH+ZeY|$fN=S)&_p_iCNKY(2Jyi|`rX-*!G4IReLG#qF)(vVV7PJDH zi8VbUaMi@PNe8f?AoSySgN|T9K2R)ZJRlwlMS9JFGkq4E2^6^#nk_!?hW^cgx48ZS XMiabqCxuKq00000NkvXXu0mjfpmSQC literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ivysaur.png b/graphics/object_events/pics/pokemon/followers/ivysaur.png new file mode 100644 index 0000000000000000000000000000000000000000..fda631a53a8b1fac26b49a872d25e20405705ffc GIT binary patch literal 657 zcmV;C0&e|@P)G>%^K|w)5<(O4J00009 za7bBm000V|000V|0Vb6__5c6^2T4RhR7i>Kl(B2uKorIwWRy8L49?(8hX+$Nj*Y;J zJ1I99TF4}V!HWra@l?`aXxhc~5Xc-t{tH_Pso{w6kPZdYzri>j0s>FjGBjt)l1>-h zEhdn`-=yC=>HFT@lLWBQMjLJPel#BGd0nM0>snr0e=lky9j~iY?dqbgVKf1lYZy}F zF=%+}lfw-yCBv*R{+F95*@8b;ha*t(Rw;YpIH%ZBFgN^iS*K!v$jHLHp>}8}GeEh4 ze>;bL+$<(Dpd6pceIa}x#%Nl`J2l4%3}s&IsF}s>ui4B|F_{5!9rfFP+SO zz!POR^tqs5?Tlt!?zgx7BS@DyFg&C20Fn7j((U8ej3S=VpY;E)MjEdcW%iFG&kd_) z6yS4sWPOIyINR?f@vM4hlWr+fO0NPWUdq^YseKn2dOk<%XME^`^F%fX7cC#Lm7&aj z@xwPtznf|%W}`(EJSTZV_bU+WPv+&BxP;ndsAS$1b7KJ_^UItaEy8db=Y^r^<_HrE zmK=RpMrT0s?zw`|fE0-E>oYp}4k6+Oct;*%o={?(r$Q5q>rtFRg%^6!<4p83$lM#o r1AxJ689g;i_p^9`O#mf1zKvc0Q^yfpP8i$s00000NkvXXu0mjfE3PDV literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/jigglypuff.png b/graphics/object_events/pics/pokemon/followers/jigglypuff.png new file mode 100644 index 0000000000000000000000000000000000000000..ea877a890adf812292ce324f03d2cd5ba30b751e GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*vQDpnCR(PxbSCS zU}d7FO>_%)r1c48n{Iv*t)JFfc}Xx;Tb- zbiTc^F|XM`fGt5nK%0lva2d1z1@{*d3}qFPRD{xRoDc|j=B6Pl*>LanwHvvG>&&9f z|7ir-9r?R_LPKiq%}uGNr|H^%{CWG^wL90e{XAs1rZ!){=D6=sL5kY;tQY$FGNyy1%s6HsAjDkl#V~QC%6&yU8~# zzQ24s?Jma-k)ZAytV(=4Z(1zBe(Tsmr>Ex@O{?6c6lb&9`JTC?jGuez_75d$f2Y~1 z_Va6~Tds1xc=LPh*P3&$zcZ;HGXJ`-=nv1y+O(6$)o;F>>ENDY_2>D4{m;1dP9G{~ SnQlA}6d9hbelF{r5}E+7AG@GK)Ip2WKo|z#90ts(P-rkve}F$@7bXx` zdkFZ!f;oC99!g!2-9itkv@jZ|SI^!(?4eYs$1N`S{eZoAa6u^wdoBnYXOd5JMyQ61x2@dzj66aeV1ALx1fG}{o(yDCjVdT%(9Li zLOctoT9kTsckAjYF4fwdB}Kg8rq9^m8|pZ{y8s9H+b*ZQN5eg<`0HEHY0_@)A0ZR N002ovPDHLkV1j8#D1rb0 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/jolteon.png b/graphics/object_events/pics/pokemon/followers/jolteon.png new file mode 100644 index 0000000000000000000000000000000000000000..c75292549d2f3155ded51bc02c6a64bc3add50c1 GIT binary patch literal 740 zcmV8WWU`NK)lYBQFc=1KOHmFSBZxw;nTEv8sS}YM zD_*p4gF-ZR?V2x0xVz=u z2pep5h8z+KZG+1qQg5u`aLNha&auHZgAn9rXRsW!z^Sj1hUYU%37t<&UO)$+lbCGJ z9H)({b=Neq;t}C-ln{fF%>f{(I$XCMCd5rs6g&@0)3W4ZB*%0&b`3_>LX5|cGo<$d zz@5X$a-Ju>X_+sba!fCbw(pCg5Xu|W+<~iQvY*9}5v^suKP&;3Vq!8X{GQ)CAg!%( zIz)a49vkU=?$HASU^%LpR~G(_INkIQTFVL(A*L*0qlwPvvQ0T@)z)pgxDhZu-5#_K zVF@(7{9sk^?>=rJ6G z>Ukckwu4LmcAC*H*1N3GPxrg)zR?yhE2JjR{9YP3gO`olG%DA1dR<@VHCr@WXBjoQ zC{kzbR3k3!t(~=c+=-&s%asOlX`wVQ@W{ZehSZ9ry%)DyM~}?bS>>Njv{wJXknMKlQC=KFc^mIL*1h|4%U`rD0DPm4m1Yh zJ8ta3QSj)}6XXvZWHjo5Ru?+x59D`NmZjQ~V>L^cl5a_@SNh)P6`!K$TGzVPXH>B} zvxtiDp^x-of7p&4&>n&vg1SqL0AM@XvsbI`w&G&lBfiYQCl2U-!$f_<%uba85@CoKmQ#i9@t=5)<7;f^31G-Nf3nA)zum4S^ zR?}(XknR)TU{RBiL6r&ocbYh)`@|)~M80|k53ItB^}BrHrPgO>b)Wcwv8Tc_D1NfG z`WNXDqovjtXA_kNOo|_lK>`D~HYDWi#7>o+3siK8{@Ay)CvE>jVgZUS(PC#BR>O%a zRU^n(LjyI*c!he0h`&H3oYyiS%15Pt2a|?n5@5*N#C(DUnjDpUyx5NR_CeX4Dbq_?E2`{%j2R zf1QYPZE$4jl*Bh7}!Jx|PFEaoD002ovPDHLk FV1nmCDw_ZR literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/jynx.png b/graphics/object_events/pics/pokemon/followers/jynx.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c2430691b26ecb23bd953a8f31ee301755e629 GIT binary patch literal 880 zcmV-$1CRWPP)!NJi%IXU^^A&FtZ>FN0a0Rgc&A^BNJ`RTd&(P8m{p~+c!tCfIg00009 za7bBm000XU000XU0RWnu7ytkQ=1D|BR7i>Kl|5|JKoo$zc<^{bKq>Olt!&6dRfaM^ z5p*Mkf>IhbkeEwkvVfRSH>XJ&T|!iKVCZ@3f)wA>fdR=GJa~xYn_=t7%K83mUu%nn z0jV$3chB#A?_I3KFs|b|{+F;uCj6&@S=1t4g|K=66T%8)^@P}DSs|<(!0Zr`YpEfN zFR38OI_N^mpnQN<1VFA>Ll%1rLP+?eRCvVzIbq8tB>8TXAbUOx=~?)rRJccxBqalw zv|$*=GN&Ow3l}?aCsbBlXf0?Fv2z3Dg;tG($%06|hAcWs?B47q>QEP&Q7SxFQx%2g z*rw^MxQJXpUbwE?QHQ#)6NNO+vmOPZ>2A;q%aTQ8F^krz;EsAPE(z^~3W$BR@Rj>1 z-%-OfU_XBU$bH<6q(BqG8U04-%(fb!AUysxr0G~>aCd;6nhW8D)QF`?jrLknm`V8HWTDdcQC9XA2UI%-G@_8U?A_yV?;j^pu- zgpji}XaJD*uZesnWNeJm2eOVDrYmpGj$ZG)nT?#D*oX^b&W806u&6nZ=arEEragbV z-|p8`I}Ot~T$_Hof#Gn=6B}`%V8a-;m|%O0``Co3kh6*B&gNQOHq(%oOm3Z>;gwbS zT5dunTvgv&pEVo`w(fJ`Gf#9pf!k~9t+||c#nvek?ucZ7kdKh;xQh`&K~{XFKxce9 z381gIAhc*h><7NQ&uM`Cd@(=7KK*!QY~jGi2$u*U!Z^q!Cq6DTV~22x^Z(R3PlL2a zZU82fOdp;@FISB5<-dIhy$Vii=CG74t)JfPZ=!mDiuePEk~d;5KI^jp0000QCGL?Vsm@j1A zvBRv8U1dhmw)g+$WXDS{^qj2bJImzd{}#*tw#oM2n{zeTAFxNR)|j1i?oV3(+FK_2 z3oH+Wyw=zr)me4kFhw~i@^I)J#w|@bb2zUuEGj$M@H-;#vdff0KTF@PoH?BzA1kye zx8I3hbx!lcs?I{aBbka?W~Z!KI|U3>oZs>tDNwcFYbnX>1!9{ks(a&Dz*j{zfZnrd_6iCUfOQLBy4gbz4Y;sO~yyo%Ki{~IQezZsorAln^N=aPj6p7^Re;a{=SbwVWDRI29@vo zcJ1w*aQ5u8d$$FYw(~4ZPVd-O+#xvXG=Tx0clAw000000000000000ej@V$00009 za7bBm000XU000XU0RWnu7ytkQw@E}nR7i>Kl|5_QKpcmUED_h~3Z|i%VhEUct^@uA zU6Z0lIAe$$)WvP69o$704L+o)Yo@b}FN!pkk|Lxp*E^kbFN)nx-Fz6N=U$%Q=`YCw zVApnS*LF=b3;&(5ad^R2P#*TSF|cL_roX{phCz}5e6WQrge{EKsuw(K`KI4wCT!(D z57V=QEo{xu5n?~Qg%_=JL)c{2!xy|pZ?~}3wr$k1&pVqLB6LYKTa*7C0HSu+zHE2> z&Aed3Sle=w%dTUD&h-F;CsENkbGn5J5Ii51#5UuknKCw+3B0psmfDin1qIWIpy5rC z9d(LqII8B?>{S(M1t@j23K`4=p8XD?4>p-p0w|b{%Sh@@yPX;Co(LhIFL>j#9M20#em5D50%(nx!B87!6orEV2ibB~nu{Dn|1ul@zI1*e|(gwO+l zmCz-SGo`njq1*RP!bK9E411)SFWBqx@x|d2nnY^DoG-p<7r+GL`Nyvp*HaClR6-Ugcm#VQU_Xwc z2tR^S*kph)b(2i(7-Lq780Z1uZtl8wb0riEY6fA}?c}};Fu1(t>r^i~yc#>i2)K7{ zPwyQi)ETS@%!42Za~U9+)J2X5`u``ribIXrv~?b3=|Bb4+!y1pSgx08Eo?Gd5!(ax z8nS@C!E73gU-==CLX#l@LAXu=Uk22i02vTRnGv8f6IhuA*pns$FlV2SRQJta5L^pc zZ^f#}_s)&}X7!!MHwUvg`kM$LB=8d}w)SX)z=vSjk!ZCEWPLKA53Go&**DXF>9(Wzl^adAO0AxTL|`N?_d>G`>NacKzw0RaIyIYEJOk$F)$G9e)n00009 za7bBm000XU000XU0RWnu7ytkQzez+vR7i>K);(+6Ko|#bO_~HnL){FapP*Z}Hed?D z%@8OZu3iGMQ*(nj5QREg+?GHF5BUUzP6Z8z!VUcbZj;DGy+&i`i#xVU3x%c{4#D-# z(n)7UN{6&tp26_Dlb-+iu|#4Rmvvc}^^c1F#TPAW{d~(vdI5hvTx?jiydD60u7}-b zzX#oAeY0xAgmef%m%?77JpjBWTjFAGQnssFtc-VL!=>@0$-B~P4W16c##C!qwW!1K zH2@xs*PHxy^(p}OSNG~Y^?yQAGnqwOgGBfH+#iMPG9Q#P!6Ui8HC zp3rkV^SoJuMZ;(Pai|9@SeEI$@VpOxugQjsXEU4_wT|{b-SkmhTwJv*$GJV5z4HAg zn-LZj^lBaBch50Nip{F!m%>r7|1k>iq~3-TVMcIJ9zeGxvIx~iRPlT%kSB`DfT}qr zOnlUv@^*^T^2Ak(iAH3FkpmX|%zQ;TpE6>;40MPJP|lA@X^gcW?2HX34P8nT6#KO{ z35^*eB&B(vtIXzIOm90SLHP(&ZJ0Q4J9i%s5~c!3<_KpE2zTX363%LU>~#_v!=m5Z zp|1tBS57-Wz6|cEhB(N4@GCPN^PEYR9GJE&b!C-@dofydjD+7iS20 zARa7^@>^iY#UmDRl;6F#1!>5+nz}Hh#O3;nnY2*YcatWEJi*w7NI8bmD!>?Yn3!7m zY7OqR7>V^)%}x5Yz5IJa`RKuG+iq!rkTa6#2XGnTusAa0Vq9fEbL)m!(E1xkn<0cf zI#IT$2_Y&2<3vngai4SKriC{*i@kXQsw`Nw{{-j_4G0%Eh0Fajf3eRl{J;7G268x6 TZA1$Y00000NkvXXu0mjf$}4+t literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/kecleon.png b/graphics/object_events/pics/pokemon/followers/kecleon.png new file mode 100644 index 0000000000000000000000000000000000000000..22540441b3f3b085f079afaffbfde5f773f368ad GIT binary patch literal 739 zcmV<90v!E`P)K)xnC|Ko|$`EF`3dUY14DJ^KVDwiT%m zSS@>qkPu^JHHTu?^GYk}b+KLJ(u?#FTtVy#g}P8$3Wdf?iKnQC;Jizdu_iNPhL%11 z9YTJ7$$!SlL>XpZ``XvO{r5(5^TwgL zxb%y|&&U9T8Rp>}yl9qyOEc@t^>fp4lFj}A{S49fyIxa*J2KIHQ@-GK5(06fE~lq=c1RNApy|wj4kV()3xG04}Ag8&F?F1blHx2 zq+#BmJOMWv@(`ipZTnSg>qpg#sQ(uF4xZP*m)t1TiJGK0f!RXg6nzh%k$taLU#fot z;egPaK35z6?yBOms7ZM9;c>6mOU3J^LnBMlsXWrU@qh;O_GVpZwbUnZ7-1OD>i7E= z-JDf1j5f`DUlh8?7T`ZV#vGO^=nnd7lxM~vYE?7p5@K01)TqxNpJ7+?siAO)zi2@q zga3Fa95$dFJXNf(wUGhqsUp_3>M6_&_IJ1~JkSvED+~eYb7Y*p8~3jwGj=j*^#{3n VKYW}c9-9CF002ovPDHLkV1iuIUVs1q literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/kingdra.png b/graphics/object_events/pics/pokemon/followers/kingdra.png new file mode 100644 index 0000000000000000000000000000000000000000..8043bb032d06a45443d23e582a9d329c296e337d GIT binary patch literal 859 zcmV-h1ElPx#Md$}g00009 za7bBm000XU000XU0RWnu7ytkQ(Md!>R7i>Kl|65pKp22;K{s^k-l0?$N~JFCU$B#o z$Ot*6RSH$*~S7{ZhY=13G>t1xuPkSR;mA#?XGQRE>VDk0>d_ZxZ++;Ml{s_Ms< zTkMAyKM!Dx5xQG<>z}OG&CAuF&im`?t4u~^gb2Cz%pMjRbu&-a%zHwFJR3RPCZobB zLXpn{dXNQHa}nqTbs=NdA-0SwL71-zA`ey!Vy*@ILgXcZ1KkEps?ePge@(DISA%^a z;}EFW-$6j*f&zQfFc&(%H}46NK@!UL=WEBtlr7&l=G+K5Z}a(tb331`5h5d}b%(}| zJ6j2=@Yrrx1npLs+|Ijz8q|ddC)Mh7pgkp=rA;8p{6QX1ZUeACR=C<8`-4Ihv#AZZ zta*S0OG-!a@ikp(ker z$zpy&2rbAtrRU^Sa2w=2g}{tSJ>mzX1{-0Nl13P^>-GL@K~e}s0A|Z_Sytjc(1S1z ztWyX-4+gm~YlVm3mgMG!lAE#k;oUn*56k6s^!#Eth~MnyZZUbW$-guu$c5>CBg7CB z!ft^uI~IZLlaY(}ZLM3?wsQs4J4*8~w@??aaP z;*9j5E(GL)JCC+R0O3c6*H61gi56t@+=-65xfbjTjR)okvhD*2y>i1Z5^6#AFe{2w zo~yy0(0FEAPe2y9(@`j)9z<@j0GYKQ?5RT7bF9ED-${q24*H6aI_b@*>T08&%002ovPDHLkV1f|teG>ox literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/krabby.png b/graphics/object_events/pics/pokemon/followers/krabby.png new file mode 100644 index 0000000000000000000000000000000000000000..bee310360e42277d35240dd2079814486bb785b4 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*toDU@Z`yhftH4h zjEpA}6<@ymxzf?{;L1jz5=>C#e7OxM%30tMS{fq~PIM0r zE%Po}dZ_UDc@F&}4g%GQ-o=MHYnM;G_3}vU?ezj&TUShIXcFJ{W!C!{CAW>P&Ro#H zLU2`oQp*#ob~!vTR6}8db?Yuq%3z|K|_L~;>C1T zi|yynFWL z-ktv}&B!TZ+Ue9+=98l5-Mp<4_iEqwGr9Uc=a|1ZbU$<6Yw}K`%lDj9$O?I8&PP)= z#ChZ=Ua>K4+!GZx%V&E=ZG}msVe90VtvaeE(<(jgu)j0@Y`u8#$y3VDxzEmC6cqj8 RP8lc)Jzf1=);T3K0RUm@;OYPX literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/kyogre.png b/graphics/object_events/pics/pokemon/followers/kyogre.png new file mode 100644 index 0000000000000000000000000000000000000000..5af391b3025ad5d398447127bd6f1903de7c12cb GIT binary patch literal 1311 zcmV+)1>pLLP)@x!E~6IpM(}VWGh(VVMB|0m<3%$tfvW5eXSNS(&M^)b@MR00009 za7bBm000XU000XU0RWnu7ytkSl}SWFR7i=nmceV=RvgFQDUb&hCn)js(WoKVULM4ruaw5wB$pd}u zp8j>R<0LQ?)wz?rK;DBue8xRYM3w~-zNd?N9QTYJCxHRy!JQy^8*aP^Z6mz#A`zJ| zj3b)>lI{?7cbE^PdwPQh@@P0V7*YVM8ynDfFTplo>$Q~+B;Ceey8g}Fa1tn1v$9va zr>osT5v4gkr7Z4(QMkCsr$Yn4?*2YL+KYjKJVWU+)NJTRDgh+EOa83&`weZN+QQ2Z z-LZksn0aZCGF@d2EBD|MP#?-B7 zGix|CyE%w~rQ@ACS?Z!@4E1n{q=2Sx(7DC_kBzrtp)`x!HU(pOh7+5KG6r=BrSMYdC=$(2R2tk{z)%4M(3JbvWULXKx56kX5GEVH==D~Jwz&oMGZ8oC(SatF$$1o{Q2?h0Ko-izP2 zw(XYCX`teE9p`6;qJ>YZSX!&!S4vv*R;~6-^#-lmXBb%^4SN{b&S4U`F`LyXAZc6l z^taE->XtYj+T0ckd&S=znE&*DSnSXHrDO9Xifn9%k?o&%AdtWwR1c0&yB*Y31$7D- zn4Iu0mQE{M+uNUr0TeQeJUSI8O9OGz-RBsYCbfr=(St*iNFeby&Mm1yl+-Dp=@rFT zz5BOqy!nM*^ z06f~jX*RXOEv0!&*Pp2_uq-#0CaQ6#dCz%=sufM?}VB zLoOoA1Bwe0%N8$*k1%0I3K0?;@;M;Hq3U6h}4VK1Tgbzmsd%{Y{!#z4d8!Ny5kS2e*ynl Vg>?uD8_ECx002ovPDHLkV1jM)UOfN+ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/lanturn.png b/graphics/object_events/pics/pokemon/followers/lanturn.png new file mode 100644 index 0000000000000000000000000000000000000000..2c42ca35b6afc1935ff6631ae58e0e9c908a1b6f GIT binary patch literal 947 zcmV;k15EshP)^@R7i>KmcMHoF%-uSgz~{QmJ&?i0=ASG zimyv!0@><7rZ$s<=QtVMhGgzqx*4)$C6SPdd=%qU9!n_o4VeS|8!DZoJL#^} zE$J9--*->n&(p7GTh`-v9RF#Q(jj2V?Fab-KOOT7Xtww2A;8&ydj6B~H3ggjps77d zgz9AzkOa;GxM{%92!VoGaS}KS0Mh_71eOz@3;(u75G6y{1XL3VBsn2@=%(I+D6s^9 zpzHl)&OAA&rP)i@YTMGHKC(-9a}SGz~`Y> zDH+?l$Qd`adOGm6Dc-aF#$&_CcsYuya-@-LBNUPab|62PXQwUpyTn%R5uun15INAK(P)1LT7t> zFIY0?hp+#zYbl@xnAR5p9q@g;qv?H@A?UCeYs&1EZi7h(@Y%vk{E#gP1W`$t-sYWS zy}}TPVng3e0)}3sGZXH|9A(7{2!<${aBDlqx&a3&4M+`g0IZ3tVu4l20dQR|u};sP za)2+7O#z7n0J85+4!hG~Q5rD7$aantpwg^i1cwmSnvF2OQp3=N7}XjgzuvpPV17d+ z4Ha+D>?&r?G?cDT>8x0A_oga3YmVjLX5oCji@0I2{R~W7epjFTP>@j~9Lk18= zfR{XQcE2PH0Ac#e8>Z#!Ar@xMip>_f(kNkOzl=ad0PvGmkJ}*yP{4v{27s*R@6T_p z?^dNjQ)yWt+toQZAGJfk?jtVq>VP~GY|p`G9}y{tiUp8hWUKx`T5o&3_lqRjk}}ux zWFrFDaKUVbb*QzfY#S~$H%q{l6?0&x*&uNWC^)BcQH4Zl5}9u6%~BwZhTraNG#fz0 zLLghdmO|JO>JySWlLnZ9_JLv8?$kETUl?NerSwdIr7c$gfAd%CPb2j==x_fQ{Q}`( VY*yvcccuUU002ovPDHLkV1m-hri%ao literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/lapras.png b/graphics/object_events/pics/pokemon/followers/lapras.png new file mode 100644 index 0000000000000000000000000000000000000000..f55e3028db1e24253f5a6c479eedaabb451f1052 GIT binary patch literal 940 zcmV;d15^BoP)KmcMJ;KorLf1_g>1bqFbR$rY3ev}Eg$ z(TTz2F9;djOR6Bykio%JWNC+@`3iyu8U+U7DV?&pYO0__e^lRDce*s31OO^r+AM^SDPrwH3aWNpLOrN~ zs0O`;CXg=zN=T)^WE!eufVm(Y7*T^f>-Xk(=nnGFpf*Te%Nv<*0vsdHKL8Mw+!JK!1t zR|?Q?r~}tfg5gUu-aQa?OhcAkv)(Zsl;1pfqc!L^)PZX#-IHu!o^^aikZMfwfw z;}D|bryJ_Pbu<^nrA&uF9O9qPWi7Dnmzow1aTzs-{e}jR=a1(3MCR?vap=ur+||B! zHi@Qryue)~cfV<<12Hyc#bl%`HoIh2pLP#B2l zO`MM=vodN6hRJ8RDaNtfR@6+_cs-RY!H3oKagB~!pmZGEj^koJmib{4fv_hdf#|XTekELUra$MXMmvX|xO-M;xH1fI~ZiT3q-CGCGWXgfA zIGGmhbhjz-GDD!8q0Mfi>`dL5dw7?-bLduJw}xQnV-`qV5#LFYPp^r)5)E7J$)7^W zZYet}yUVF&Clo)OwgIXjQuq0=#s@V>KCVIa-Eo|%5ldS literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/latias.png b/graphics/object_events/pics/pokemon/followers/latias.png new file mode 100644 index 0000000000000000000000000000000000000000..9e6ad4240cf58d8fce798a10d8bcd7841aec91d3 GIT binary patch literal 1161 zcmV;41a|w0P)i0l`5*At@KmceTqM-;{f%nmyBSZMx&9s@2dQLarhS0_|Eja`WQ>N*uX-FybRC%Ecy48msN-wMR zLCoLKnSDE>l`Q*^ODS}~i{EJX`+o0zyDK5||N1vq>s2pYxjs8yAy_-tM`yjdH(y=0 z-agjH`rURy{JGh8IDbGo{U`SF4Q2+mGD1cP=((HT)Za@8h7h*5;x zHeE)H`AKuQ&FO-{p*47`Fz95uC7f1TXh#&cQ+LA;DGn!HHyY8U#C5J#rGb@-pe~65 zL^Uak+83E2?udyp6e(-u8{K%5MItIjHX|+vxH;s!*_as=#70n+jRw{AdC^fniVbm| zo~n8(HhK5=8$tZd3I9&{bz}w&`7`24aYBF49G>kohrLr;W@Lzq zjFiL5V?rKZSNcUpmKX&4qRC$%l-%!>9pR}V9>aZs*`K^Ql*Nap}RpLVM zrn>gl%cQL$4-?SC6Cn0!S<9VBi1bX-GNWK!6FVMc6s1AjAtcMaC}mY*5UlfuA^C+6 zDG%h{GGf(Hrx!Jc=^%rS{4@sQJSsL=8i(HQS`g+DnJa)>75S|T%KPPgC4pF)5#gh2 zoIl;7W$hc{i5a1s5;B%>z9l|Tf{NJ9?|!8WJXeJvTjfZAI5REaqt~0mJ6qJ0GSv-h0!dmSt20P$=@ z0n20NRli&dVmlIaFOSu~UnG|hqX+7fp$BV>^%Nc0m-W5M-fY^@Y!df7{U_do7zUntqL42wH be|r4`Jxp}pI@Gz`00000NkvXXu0mjf?hhS- literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/latios.png b/graphics/object_events/pics/pokemon/followers/latios.png new file mode 100644 index 0000000000000000000000000000000000000000..553453a311c6bc0c29278f45a134ce57487b425d GIT binary patch literal 1219 zcmV;!1U&nRP)At4DlSpfk7xyjKXaj8L>*&!(@>FN2Isj-2PnZY3;%%88&00009 za7bBm000XU000XU0RWnu7ytkSIY~r8R7i>Kmd|VBMij?Y0v?KwJ+!5#isJ2x9JaXZ zF0FkjhS206DD+}nP$~z?G#er-Nq5=)lGe_lEQ`dGZz9;%qzfseNgT76Yf65=fmj3Bnrqgw4lY=?lgLOoB+GZw8~ zO2@9!7sOJK`MECU`ADQrEQ!Me*nu4f%4G;HfaR!^CvM=x0(q2ryl`PCiBmzl<&Lpd zw4`4FBr()QzT=cBEi(g7->7HAg%U<3e$ivW3u<6RtOQ@8;~iFQK^25DVzC<5)ixJA zzV!KBqm&UhB8(m~hXrnMgXv$#8L<>x-=#aO+9Qw^X_h4RMLxP}?dtm2y-X%Fbzc%& zdXE|E%%SCZF4NZ|tcax`I$OM;u4bCh-A@g+CGm0EvzGg%uD{)Kla4vMfdw&&bhaq# z9~iy*?N7h`s?dzyx|R_SQ^D$)enHXaTKq6Ag5wFEzV({jlmHQqcd#BK~lz|{l4K`MPeoE=%>gEy_2Zg}RLHiRB z=h`%v36MdX4SS}UBW8kJpt1PJYxljc$tZ?yy2=}pcq!dh_Ooxk|LLPAc6!7e0{)O0fRsw{Bb_{WP8#zE& zfOzgo;!}X3*r>K$^}GiF{vi?1iVaD;Bo#itN67E5s%MlVhy&%g84?n&iu)O{Kav}N zq5O;YD?r#4Yk;sIR&N)l|Ge3|yOjwFVr5teEkgXbo~Dwx`)EbZ&~Cr-I=n~ZL6|09 zH}3xS+4Ja{n(lA|<)<}ci}8j%bs;4tM7?qrszbjf7kP$wUEc;c)-waq5>)^J2Ot1a zR}&KAcS%@PmJ}ZlILO_dCf1&?nWJYfYzeXh%XjRY0VghIEz!P! zH7ys@#9Hw{{J*dzwrS>m8>GZpOBjMS5tGC-!CJzI=l_J6OFR>k#Ipu=V44#xnVs>s h`u`ku^7o&NzW@Oraw$AK62brg002ovPDHLkV1fi=In@9F literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ledian.png b/graphics/object_events/pics/pokemon/followers/ledian.png new file mode 100644 index 0000000000000000000000000000000000000000..d8651c2ff6c63884946d39c77bc1149fd62a05ca GIT binary patch literal 1027 zcmV+e1pNDnP)<3NfBw8>FN2=u~Fe6IRF3vTr6#900009 za7bBm000XU000XU0RWnu7ytkRc}YY;R7i>Kl)-BgK@`T9P3eM1K|Dwytih!RLvTO? zO{L1x7|@*bD2PZ)FC}b3XG@#CROlRX5>e(7=t&Sf^%(3WhXlGu(bM)2gCP{=Z}82| z%w{%StQQf)7jk$z^SrWfB{)A{l{-Lb3xd^|N$hu@-%3v)HTr5w z>Dx8a&SxjeBwlM+D>xDXlngmKwCUU%l4+JH#5M1t#c2>sj z`CX62$714!B*ro2vRe%p16l0W^4#G3K4UHD^I9S>94QA76vRT%WYO8)=}EnJ8boI! zCCJx>ph?HINen%8r;w_^dZ%pSva!5Xk%$}0TjqiRC%!KP&D&A5hfdh>N;`_|M6j*| zEx7P5L|_5ji^J!SduOm=;@Q#w5^=+a>dbDVRYBZFtNhuOPw3u_6V|(qRzDgS1r4)M z>vBOxUB2D?(ffQBut~Ed^h6?9Z>l@Uk%PTsAnrBELHqy_xBYb^YCSrLXXXSA1H*9@ z;Ww_v@17k+)nMXx`szd=5g7WRbTlf22;ws7lw!lfu-cCBHEJYRZV^+nGGi$Ls1LFmZ=W8X<)@Oa>Q$KHZ?(>NdNX4h9FkYP|3naM<1{;o3YvK#WZrL zvtS{E5&H(U7RRoAc<4^QwTA!zMeN6 x;}?}qltDaS7lCB%QRegfu#8@CN?r2zl{002ovPDHLkV1hr{*E9eC literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ledyba.png b/graphics/object_events/pics/pokemon/followers/ledyba.png new file mode 100644 index 0000000000000000000000000000000000000000..32e858e2b77cd3cc9188040e5ad28cb6851c4b25 GIT binary patch literal 1025 zcmV+c1pfPpP)FM$D;eq*aG2uBOIXOAu$tmgS`2YX_S?-on00009 za7bBm000XU000XU0RWnu7ytkRcS%G+R7i>KlCf{wMij;m2}CYl=m4E8z-9!)LsGO| zx^yBgve0PA!WfA>Fh+6(gfws+%LGKBgW!Q{vU$iX;92k#g@8|klQ?uCT>>auVQ@1t zWboh6yW^2ZD~W>!Ejlz09PS->@B6;r9YSC0YyEG_T>qB^Iz7F1U9~8=H~y*lCes2X z3aLWr_U_=zNBU>F_DCZ#hok7*|ev-(9<03M{-#Rx@8#MEH#_J5Z>s-NXu))@= zxHTNF$d)6MiCBir^w*mJUcu9uMA9+SNbbdrAOc`HCEI7K?PjyHdbBYwdM=(OQpn8C zcm)7@4W<=}iMZn;l2Wq?K^ywxOu!DER=@}Bwl->Au3!h0QJyFmj;U1a0MIr-un+y* zrbtw9+@Tst37RlyFo;xtAq?^I@9zOleOwE>ykBmxp-9A$)w<$I1ET}ir5xRnLgtG^ z%CmG_K+@iO553_y%FJ+q?dr)J*sH(8p%mEm-89k4W+(*q`)ts<<+g_0l|mNrL_STC zNyh~wZTtp$5N+fL?XbI8eE@r;%2yo8Qi%OD(Pk~=y+K#WD`)5NwfKJH8B)kZB85yk z=18(j2>7t5w~1}7FmF8l82~@yD-p@YSt3XNM2L;K0CpB*!CfMAZ@CSHOgiq5{cK?A z>2(@yU>wfp3Wx+WIi_3Lwb@xB^^1-1)tx65?8sgqJK}=NEJY?AgO5X{U>sBWFsWd1 zf2xerUw%s_{)2bl*m%Yv+@bby7=Si^RiVb2q5yZJV`Fa8KS8~ zOX2p_a*~uQp*+H$U3Y;evg|M&DIHJjT!5c{v1TnU6$I`wYciQT)B<-zA}!$DnON3j zt)>K=E8p`()=zfIEOl)CVCMsgfn&U;pAj;+!rURzi7tyoi%Rf<&8n}HB(A?mkJwl0 zuSFtOS0hu$-=V_5lla6##SM=g==sx$&W vX(GMxf#c8BRHEscO7wZhf4im<{ipR8+F#Rp)L@A!00000NkvXXu0mjf$9v@_ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/lickitung.png b/graphics/object_events/pics/pokemon/followers/lickitung.png new file mode 100644 index 0000000000000000000000000000000000000000..715f9a5b9d81ed3904b32cd88602c462617ab025 GIT binary patch literal 642 zcmV-|0)737P)Km9cKyFc5|{O5*_fx|M4WiL2%JU z7hUxKC|~~_zoZ)5?fD#faXtq@goqDkb68^QI{GZNmj`frE|(G#$Ia(s3D;+GsNly3 zdjXGCX@tGdKjY5OiTC+6hS27DGsLVjtn*-ir6PEb_>TOB88&Q)`RF@h!_7PKxjP`= z8YhEXB=Sm$)7O050#6Adl;*SYSt@6M4cI${n%8C{g)}7Wi36rNc^XH_8ipRrN<(;> z3a|#6Ticg`1k76n&By*%p$uaLy%X`J&*}gI5duc-00$-G0KBw)&D}szy*kK;AqG8Q zboID!S%*UMcmQT6W{QcKV8fMRwLZo7tDgr*kpbwHMbr5KJ~oDrJGosgt|!K@P8Hh$ zLY@Ih>yvzcwcG(gnON%sqTa#&0StEsQZiq{#NlMMaJizqqV-9R#P;s?S^$g9e0Miw z2TAOHru6f4_9=6DzI2(;Vv~^}4)-@es51|!f@NixO=n{#@!Q+!j5+~vPA40uUn#bM z`zFpNb|FEo3Jy!dH)1Q?M9~kdvb^Z`^McxbG^WnNrHV1_{e1*cAEms&XMOpE`&;-; czwqz$3!}ap)px;SuxSMNm&soVL6e}X^Ekc*#Q9oDH$nIIZ?quVE_OC@WVKz00009 za7bBm000XU000XU0RWnu7ytkQN=ZaPR7i>Kl+TOPKoo$7qKuH@VHZUA-yx_b+0sje2uS@9!>AgP zezROCXy3>YCxAi(jOjS+^WFR^F-+3t1W0I+56>kx%zFkx1g!d|rMpnTLfeyFlVxo{ zAyvnfi-APH&z=Aw23DudE!zhJqlOoGU7z_g01^s@TYGVD_kyp_6Bd9c)V<3sFaxT& ztsn8kcAI5F@5)+mw&BeeA|SQ);!nmH7%XivN)C^j=6qplSPOzc%=Q2w27XaTU-z@O zo$YuvO5$!-gM_5*tp>ran12Ueh=B*&NwP1)-^l8G+>AE|og4s!g62I_6h+P^34{gU zwdBF)7B~o0^IvYq*6Zw(AfaFk-qu%?L8Jqr^GAq)r>BfXQ#fRUwZ~Vdt!Or6EM&CS z5S0xf8!|7%zysZW)O9DkAO*M&@7SFg01F9;t~c)2jeN+w5Cf}+{+m@Bo#e>7soeHC z01%S&RLkOqns>V>7&`J!xM(iy^o9<%i1Xjhkg)Yd^9myZ|9&|CxA7CvLtVD}XPn>w0000G?q^5!unXxv{C4aalo0Q2+n{Pz%0X00009 za7bBm000XU000XU0RWnu7ytkQ0ZBwbR7i>K(m!w0Ko|z_(+xK;FfdeNGaf3$83}dB zLMD*-2(X%fE>az5LD)i0J_O&u%7|b>a;3iZ(n>J+I>68jZg)NgZ~oYKXW|Qz1yi2w z=fux*u|voqhaB?XLS4K2ho^S;A2_$WZ&-D1b?=0br#AO}N9?AA)aIZP#NxjgkXOFN zd>jXk#rp?jYrr%M9w%IMdw;^RGzMB`d6DEOm|7NFY-UY;Dy?ODw!lHU`)@%EH^*3X0e_Tn}RIglBPa zs_t)_P09p*c6fZlVVnTu%g8WXZ3fpjyej5rFSUY}J;+PA-ff0mS&9AIKFv{cgSbDN zeK>0N2wPh{Av{hF(QZ%SJ-|~u|F%!FDjXdpRdlb*`1%Tb!p%T!XLGpkALDmYV&7<| z*O@%1;D_gT*jpV3mY2>>v+(sY9!gBx+P{Lnc=+r1nKn2;59j0^uVzX3BNIwtgBLV5rI002ovPDHLkV1ggAA;|y$ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/lombre.png b/graphics/object_events/pics/pokemon/followers/lombre.png new file mode 100644 index 0000000000000000000000000000000000000000..72b9f1badf97c57e34cdac518cc63c439d359e6f GIT binary patch literal 679 zcmV;Y0$BZtP)G^>v5owu00RaK&SwV5B5lL}DnZco{F&O{=00000FWlrs00009 za7bBm000XU000XU0RWnu7ytkQ9Z5t%R7i>K)xT@oKokdXn?TXnbZLhyQb}!S2g3`N zKw||lWb4$SLnos^mvW|eG>hW1t!J$M0flBtp~kC+1U%JH@Ss1S{cn0_66McXPTppHZaq*D$6z95{=0fHMWdM(##2OZ!tWkEohOAbE6-F9B8)c`jIZR@5E zfM5`GD02ynK`M6o1bqg~cznxxLQndf!$45x!e>0-yFEbgeP0ZcyI$MtQ;Q_P;4~pU zn+h@ew%h5M0@-g+mqfIKp64+Ufb(u*6%gL3QzlZP1xZ* zwVmQ6w!LoquKt;qt15d<(t0=iqGg;%*?Pk9&^sPBX}g~1xs(soYY(z0Xj`ZM`q$4_ zNrhkJxkq{YW4L&_C<@wMZ|T$LE39%qUy>ewdGkD+7oE0s>do`mtu!KOr@Qpb6S1vx zbl7l@9@5VGo|h$*>j0iHc*|6EE!%5Z?{o4u*&#G~8Ne&brXL1p`fEwz-s?srwp0bA4m?#BM7{04GDHC(_+qNM-; N002ovPDHLkV1mG&KCu7* literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/lotad.png b/graphics/object_events/pics/pokemon/followers/lotad.png new file mode 100644 index 0000000000000000000000000000000000000000..3e81947f9a22996c3d5dbba6be90101e4afaf561 GIT binary patch literal 532 zcmV+v0_**WP)G>HkS?Re!sd*V;K?wi=00000K)W1u^Koke?K;iZy5IRR9IEJgCyBRuL zE?}pmF^{(BP=wI62qAO9-9?9tf>ZrBbP)d-Um{6*XJ2q}%a<&ld*s~@E-{Qgefsq2 z)29xD^69ehXfpr^m8xnSaV>*!ufrTenMEbqj=C`m0mXAX4oPz%ggYc0rMRDUyCL0% zG00**k4(7lu*oU23&C9znufZ|p)3}bDIn{xNqP*No1#5G-Q^3z6c5$gSRJ-VFTfQp zw-)sQ>Mmbc=PAHun^NX^nxL(tzQzON0=9KS-DM)4=lPb0v@;n{W|K?^FRy3+By1+kB^&;Cb%5GIdt9C*c3mFIG`;-1_@;t`M!T}?{#AaXG?jtJfVH*NNG=x zo4uUka?YEEx~t3|Y-bmC*v1fMdt8nTR?P&JXX*s-wSW5vX(!Tlg2Osm*1mb&IkK2F z#mY~Q$^;4As-GS@Ih+6z_4kEt>g;`1$W_~read83DE$qlZs@1SpX*o!wWR$_|25yC W9=K9&Fd`rT0000EyWp literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/ludicolo.png b/graphics/object_events/pics/pokemon/followers/ludicolo.png new file mode 100644 index 0000000000000000000000000000000000000000..d31ae43665de8e6175e33364c1dbf8da45cb426c GIT binary patch literal 909 zcmV;819JR{P)aDd9fj3NihKd0g=%WiD^;k>G{!t2{9=Ni9rF;u|es{c|k!*y`g@;00009 za7bBm000XU000XU0RWnu7ytkR14%?dR7i>KmcMJ;KorLX1}&K`YMr5U=+ZexiCPFL zgotG7D3e9Tj;trw#s<^k`vXc$mt^cz=$65BNC;#x&d{x;6iO=*FqcjafnY($429m= z`f+!OU1HiTZ}R8fyYH9xB>7HJ?&2=~QK&VwC~)z3I*au%2ZEf;bi-vs6gWSb&SHI| z76@`OE15>nC&OEObK zgtGlQAfzV@L9aB8x%x~FW$U#7A#L1}%ygxM^sWnC9c332hP=pfK4k-GE5~l_D2K*V zk(suXHFVdq^14$h&cL4I7?x!@hLIh~$xJt(GPHKKJlH_R8Q5#Jyo%M%mP(O<#B77P zfS0FC-2hEb3tEwiGyKi=zI}aQSlN4pFh-t zSkS|D#;}gZj+w?_uQ0eMqy`a3BLcj7W?RY3RnTpo6?M(rtONM5ATzW9f>-9fsKyP$ zK_Lv&5k(yB542WeNc_Ygz{>@W6{Tz%J|X#7kQus!*p9go6;ukNk)#hVJ^$6p1 zs1gHqLi$=BBom>AJX3>JTJC>eoW$LFKuGUcnZ)pH7}&K$kQxfCutTEP&mE<_qV@WS zJ5{07>x0IzBd}2;hx|VSH58b>c-q_ne-BZMa|bz1%o}{(5%L+-)pfj zf;~q9Y@K7Q19cq$b`BB1N=Vjg2Kd^&o~#O9M0}_0ibm#!D=A_6paMHgRe(>hs>gz?Im3N_329AgZ2&)zzU#B z#i!)8Q8tuyqiE-l!4(wJK~NQqbj(+rzoWfFhLid5!5Ff8&=>K}A?l=V2tXR&DvP@W zSOkFOb_uKjqz)!UBc1Xt17r(ZhZ00#2IDD!zK!l2vXCJ_4$?q&DVG9{7QWA+twRa* zkVzI=c^{1!6we2!cbE&meKLFk|v|Db#ab0FAf>Z2#=Wlx9#Gd+Z5r1EBT#OX)d7 z7T|ZWi>P&I3N^Qv)|z>u-C=z$DDwi+7Qkr&3{QZ#k4@Oa<%j`H!V@SL#2x^@sVkWs z`aahTAOLPI0eAsv>yT3fn0od6Sg%BaiY-{OL%e{*`P(Y|@+`aPMW^;x3 zuu%n+!J)Axph8@%5yg9!Iw+7Q0BHgFV za^e}rr<8mD{P-~ys|i0K@O{wh9qy#Y1^(c|pUVHHGtq{ps8k#xfK$W^4Iql&2Zuh& z3Mj{TlW5YOCCbB#%WoH#wO>aZ%@1i20L&GKY=Px_#E)a_yew_wEI4#0-n27F!wfsf zpzIHVtzvhpOOE|7R%z zXb2$Xg?cIg{9P4Tf#eXq==^*0`Q6PwP8(th>=4Mu40SpN-shpz0lY)K0F=lp$S1M( z-RtD0f<|7{F-&(>uho-VE{px4i(7 zok$M(6yTR3J5f_03J!_4_=^uUU971Sr_4a>P@g*9VA5_4^m9mnFH~FQZ6!2RX2;D~ z^!e4p6T{>hK=B%Yqo4mpfPB}GKc30}!6EUMVF0Sfxf&+`xmw&h)Thm9FDpNHBnZeM zZvkc+Kwnfd0ys6x3j)ZsISdZ<1v!}?1rQ_7vu%-cR%u_adq?))Neq`)PW)mKMXf{q z-Q@X^dQS7`w#t-`Zbu{D1N?#kFMplt`3ce-{c+D_ tAbG}Dwk)bhR*=d>SnV|px00000Jqvtp00009 za7bBm000XU000XU0RWnu7ytkP8A(JzR7i>KlcBD{FcgL-D*6DBCL|RkJOr8A$R%)t z#ehYkAR{Hg>;|$;TpVwJ-~|Xg1)^%0z6;O^dJcCLTdwQpzMk&?+b#1vhr{7;INs2> zhSLmAvA@{gt2^DZGss7-*SL%;`>)D3fic9cA5bc;>hz{^VFY5=gi1B4`m>CI0_3#| zLM4S6h`n~f&oeMGX4o}-F2^8%OAt8VGAeQ6^IXL55%z-bb$S2=>l79&SXAQ4tjWw1 zC$l#Dyg_fB*TvK|!&ZanZR+>FN2wDM9h+aiO8fQCVrp$;kl$0RR910cCnn00009 za7bBm000XU000XU0RWnu7ytkRJxN4CR7i>KmAz^mITXj$s8tj40tcp&5v0f)WZTPR zK-=6fm2r8CEnTE=x8yAXX&RtTjIYWrR0Sh>#+&Hv`;v=_H@xb+)B<{8>OW8@?5 z=L>83>-bwn;$Opgf&F zJG9*lzAPZIG|to|5is%vO%ZZn;m-IhEIhj?3Fzzm6!7KZ;@qnv7GY*Fq4Ud4XnLg6 zJX(lC4qQ0xYe4RmxluT#CF7V`9HT>B5Pk9LCKoG<`2(&25b)+Jx{!r;S>ZsM+03~~ z-m}b8a;g*JICay98jx6;7fXP!5MCkTRXEG{=|$zH%|eI77tL5M;Xe|)6etR|MeCavy^(oB}(&eDTh49VgSVgX^P6QC?{Gjs z7k{YKLuQ?v|LS+ITtm7BM23Fl)Zuvf8m?ciTd?PzV$TRvdXlDaI{N>-{(J>EF2cwf z!zMt*xtG^3`KlUFIiH#inka0bJe(`XZC97qf1K&DE-&$W-ooWE;DDxcM8Vm542Qxx zGc>#>+QC#$*}_ReWdG)4u=tocz-)GCY`JIP{*NV~a-WtIj8(wH$R(g~pYM9Wk8VAa zk!L+_ct)?#b=-aya$w;(2b_5kSm;F-2GbV)ngeEjP;e(4!YDQjzN6_eg*FTMvvAN! z2wwKY3ok+rEF5xxBHQbYQBgl{0~ATLj~+cf4p}(ER9I1|9|vZ%Sr}j{oa;h9wL7DH z((MA`8`(U6((6@Nc&(4t_PD8MuJsOj+#0RHeL#mWSqk-q%RSO$`6Smje8Kl`(GHFcgLfXyTl;6FnHT7DWW)5^j%? z9wC5NXY82C(IQZ=14g%C2FrP4yA;g@I`l3jMcRI%BO^7?rSQLf?-5U2U~m)#q}ty1A+F;t@OLc7n==d1kp8;AH;g_I8dp z&}Tnky=kAWfE`8;P#rU&1%_o-rBqqLaa1jE&0q1iq#@IKItxz=Okdk#L;O^IKu zm#r_p1A{-Kgw0xfsWB6^kqTI9bh-=+a?exKJxIQh zxxG^((-2s4&r{>i$f#b|#7r8fDBOMBk`SminP+PRKluspjfB8_lX(t4seiF04y^0+ zzPEs>g#P}c&JKZ|RbW%ePp_{M`JRJMu79f*x6O6a_U}NGsrYa;9qj|_vEz*DouAi2 zDC9H8JD+^kyS;cx^bzn%*qsoI(LOLR@<+O6*zXu0dasSrZS=WL7#C9EKrJN0%x!!3 zd_vIz5H-G5M+?{jMMXEh7kJXAEPAmhi+?!L06(gFw|`{6HU3}e4?DMFt->hd&Hw-a M07*qoM6N<$g5In*sQ>@~ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/machop.png b/graphics/object_events/pics/pokemon/followers/machop.png new file mode 100644 index 0000000000000000000000000000000000000000..37f625a5d0e8126b1062e8503b68b8acd5d98290 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*jU)u`SRpUOG`^e zM#h7hjvHqdzI^%9GcmJsEamT z(fM}r#=K?&fwqZfxaTA!`u=8MT5b$K>yj4|UpWQd734?z%zE}NU{S}a zAohQ6KexX>7ty!KH2d0`$j|nRzJAkd*H|mQ*(z_|3}Kt48eMOL?nT}X(yYw7WpcJo zbNcbK#=06muk+qo_c}{SwLK*F_O7>1d0X#oWNUJs^Ih(B>KdUV51Z%seGvKF_ao|l zqRX574X4~ZJeUtY=gt3dlFLiZ{2*`GO-B=pGtyHue@!Wnneped5W@`qKX0$TY@O@( zY0I_QmrqV;s(jE`#qiF3U&Z0s=Ph_zR&I6R?wj+Iy*5WzI-;n<^oDg*LCUYGXP@ue zQ^Csl`>7UVCF|w0%eN#Pd+(VVS5g0!YgOaEm{8u6Z&aDT{Sn%j&U--e-Q1nO?)+># z@o_4{|kc(W3wW literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/magby.png b/graphics/object_events/pics/pokemon/followers/magby.png new file mode 100644 index 0000000000000000000000000000000000000000..aa824e4c4a3578544305b3314e89404b74e7a30a GIT binary patch literal 545 zcmV++0^a?JP)G|=&IZ;_@(J46q0000000000BKw0G00009 za7bBm000XU000XU0RWnu7ytkPmq|oHR7i>Kl(A03Fc5~L$YKXUkq`?~#lT#3$`INr z&ESQh%n=E0hAc=`o}h|u$Rn_H1zrHwMp2RcP{eLS&lfdABqsWAUw+?zXUmRd9d*=E zNBti$m$_Y;O-L4DEm3gMm3^2Pk(6~);03tdm}Sw@@Ca*h$Tv`QV;1Ke(8!dvyci&h zy737BEc5-yl(nk$RYf$1_swnD+QgHZE_!yeIVssL3O4^0Ogj3ypTCMz6R?p z=e*ctEe!q=4zT^<6doFw@^+-iS$jbX3n|3`zIzL$L>}dB!8$3OpoOJ0iZJ(ApN2pQd8rT14aW z{64`iRq+6^oXsTSvEq8YeHI!M+dYR~B8$yO{RIw~j`}H{IN?Q!2T)x5_Gwb$UxVF~ zN#k!ff4Laq!0_QRHT*a;8Y=#!sfTx8v5*EUg^&0as(bi6G#aGTpYI!l>BPk*3l|3K jf}s6NtKTr2tN&0xT*mU>tCYpk00000NkvXXu0mjfgEZ@E literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/magcargo.png b/graphics/object_events/pics/pokemon/followers/magcargo.png new file mode 100644 index 0000000000000000000000000000000000000000..a64af468ebaf3a575f1c458470f6bdeb77fbb744 GIT binary patch literal 1206 zcmV;n1WEgeP)(OKb9NqHF&000000000000000Z>qnf00009 za7bBm000XU000XU0RWnu7ytkSEJ;K`R9J=WmA!AO zP~*R1aYnF}^V+VlvWZYfHR((^OAYldkb*+mbtF$djHxdYy^B=vyXE+Z&O0iKUNsAf z=tU>PD4(G=JRAD}&I$uR$2Hy#zg$>tpZeXkT-1ZxMei$vhIE#)`=d#Hs=vNCJdqBx zGn3MAiVwfN+%^g(+;fJ#!oVN#22x+Qn)!h9VRY5@L;8OGQwPZ_}4X6F+lJlD;K~eI0!9OkR96kPhn^M?m<_YIkwDNu3oXbiay(bt&)b7nHoc880?z^9V zY5)WXFk#?2yZHvx4HyUmcg17BBdCn;Ip37G!Zj#tPjQjZB!(jvD93b zU$w*}&Ge~IN%B4DbK6cwz_M89v75g<+9naaD`$9TIhI|rX95<$ZehTcTo}5u?9b<7 zT|qX50~en{D}YA2B8s7l;y_eoXI=%O`1pmW+9#;>ZPbm+C08xR*t~dn6i>398<<$z ztuZI?JTsuhueKYA2Q2G>S<4DU%E>yY#{n_*?G_hrF_wb;Vh=F3iA_rGTL1#Re0x>N zg&}O+p0pr12e|-wMLrJ#IQS;zXRQFXUXV>bfCi31Ft|M_-_nPIm=NTYh6oDgxa7X% z!jLMe2Y`WAevuI&1i%1f>?YqLg|cQ>787Fa2$G6`jDj`Mih21?V9BMSd%}eSLhK3? zA(0!9jhtNP24rK&$+=B>lz)brC)lq1sgL_HLFKJb(Ih5gRIp3pM8Fy~vxbx5oxRb{!O`jI`FSBh>8VNSVL>r5G08a*>eDGU00009 za7bBm000XU000XU0RWnu7ytkQzDYzuR7i>Kl|N|IP#nh}XtD@_1KVy+4(=%jS$YNE z6+6_VT;AOv_^x_MkHl=LTKzkp7nb7TwRgdfqgYwY zg{!FoDNYC@R^4#;{t2E`S1Ll7X6AEOU38x1|0E%gqq_^Ys(iSx-h|@vnh>U$3D)zb_WDxH+Pq9ju4Kr-xfmSrKz-=BL}Zc!Y>0@gz}xw&IeKkY(;hhrBua#HaSn z&AsD_6D=^!JhX}XUmdVyKB^mWfo@j_d9?P<%1#Le8hun-E8|8(t&~+1R1qw>aBV1t7#8jjkVK3Nf=>JqB1bY_BD=ZX2H1k`@bj zmKp^LXJLW8hLL!!5s{f7YJEY{3wt%IV=5fFg8Ifn6XYx zc>{>T?(4djpVnIv8yoK6J}G7Ot|x@Nfd8;(LX%4rv((m4Vj<&3z^?REQ~Ybs_uN`^ zmqX5rX}{J35(!zs8c>R1uxh)s6bOsusDxd@-3}C?9~ZdyOvgZ`R3dY+98I?k+#{wC zvVtZt`}Ki=6bs#sU&E0wVDSC=w6ude2hR(TpUPs*+c13)LRQcQJU2Sn?<^)@;@gcE zD9PfY1$#c&|De~ZncUuxg{+`co?9LZSzWu1ald9vv`~V#Q5?;A{L#gunf#+530c7% z3(d}xa0SYIZp5w9=m8n9+y)T3QgzDCa?Z+P+C#CB7qn1Cv`b}vBse5qFlR+>WNrS& zR!A1}CRLI8uND+6#|>Wzx&n>gdd}#+R6ygqxoTxGk0eCNj|pOpSZO8s|K$%@ykP}C SMzELw0000ArS!q0r5#8k=r(L00009 za7bBm000XU000XU0RWnu7ytkQ=Sf6CR7i>Kl)Z1$Kp4ioWwNC#5mJ*dGSQK4otXFo z7(rd$NGLfAhIXP7TZYi73@rR3Oj)7~j^*&-hT?M^pia~#*Uc@c$#HhhzKh#ymogyr zl`Z*qAJ6lgeLhXQtGoJ7O6PZ0PIBE|4V>kj8NQ9LTMTfM!A<>|j#mY7&fa4aT2h31j$12{^_(9|Y+=uGuHiRMUk){~98Uzm zt~F~)aTxb<@2Fp{)r*dry;h^%QgH!l#A*qHm_6B$EvapSxz$s1*{ZNh!38qB=r)8} z!jfS;;XaKht*Cj+>R9cDf(=TkWec^0CBt|^i3vs(B^zLw^$t?-0n@Xjz(|cMg$~H5X_E&ei1F#4E~kQeThhpCj=z>IqAN zA)v4k$PAG3mv_fIbW03QS(ksz(ELpyOdWJL;aS%0+b&x8B9vjfGw|)@c;hips0Nu} z%6L!cyY{d5`=n#?AwyVlYB)ref4cDOEP!wMi-(@g$CEK&ccD$vZq7ro&4)1B-T&~C zM9aOU!y@633+Pcq(8V4KMF4`%Llj1Hp83c6HrBj(w!j=SK@22pIH%8+{m+AheQs#L z%thxmU@oXfbC($c4*51Hpvj&Yh{Ofb49&pJm)!z}KiPnHw^m!W7j5E@(h7 zh0v~N<6RipNE>E}T~r<;JrW<87|l{0?un1WITg^1UMCEDb{2qhI(*tV8)Ga4r^DSH zj5EJjpxw9HeOt|yYTd3>RXjQ}(Ha$p19=*aN~U~R804h5Mgq~0FcCcJmy7*u+iH5k z*?6P+=wwt9(~Y0#dW^X>k9 zTwZ@BGu-B1aC(uI$?iSEmjXU!-{7`A&;5(xGf?5>h#c3t?vkTsdT;+Xv{foU+AAou z$inpd=dZ^;U-HxV&1sPP`?LHZrzMkfbXy(;O`DsVndBtUrE_3MrNU;hUB6!cVx3Yj VM{wr3t|y>a@O1TaS?83{1OWY;#)<#{ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/magneton.png b/graphics/object_events/pics/pokemon/followers/magneton.png new file mode 100644 index 0000000000000000000000000000000000000000..75f67de256193522c4ee6cc591ceddfd8cb6d312 GIT binary patch literal 841 zcmV-P1GfB$P)KRZnZ%FdPl!;9RvrVz&G4y=-Co0PDWN zpr>S@hMiQ>R`z_6Nmt9!dDM_oFKh8mh0(b4m)lR0E&c3_FnZag3JBisN$)-DUj~Ec z_S~M(r1;n3(*#F#wL4~~*f-o0pg(uCDgH93SKOJjCqRGhX`ZqjgMM+xa8Cf38%a+E zj}q_Qo3-}(Q&2?5nj=7{25`P4I2!C zi#qaZ!?KI@kffsJk44Q921AVJJq(5|)`DB4HUue*&5Z5KvYhy8U4NNAmD|%`zfzoLT(Ka9#h)E#*nvyL>(cyw})K}Yx*%M>S~i8IUH%j*yAN3 zhUD_c=@esqD)Nd)kJ6tKr4140DIu%K;|vTZEw2Ryl2gS>6`VUPML@%B z5XkXKdwsYu%$Vb6Qz;Lr=a<@$GbD&^(I|bBSL%bqm(|5<8VdP>(&(2F@P>{*SS~T& z8a9F#c{TBgzuwLlvi94|>nlq0>JfUiWje7lWID0o$?|lJd248RBbcJZ?{0esH@W&! zs$#P)sbV&9YiJWEDV-6K61bp_w}zHCf++FyMju>%)p(MYk&I43$t444ZSG^Nmo~v1s_9!I`}m zXXh-&f_KlreAHFc5_ep+K~r5*1V@$$$Z&o6Nzn zw{|GJssIbE$}h;)bQ2{AId`ikdo1!tOH!mIGPV;aNGCsN(02#EM^YjulZ!68=%W9m z=?nZ;dBJ&>k+FQnvPUXAz+s`5_+d4glh!tLSq>OE(nH0MQpj)9X??4<$V zpy#rxg-F_9Bqzld_+ZK|s~Y=0WqCY`y^y5{WDst%(u_&PCpnRrA7@X#L%%$irTkDC zl2iNvWC3oDvYHIQVNYCEhEOn8mfjM+!?k%N-Mx->Bo4PK~^4)$4qmf{r+sEU&KvdqIs)E7f{|n)Vnz>)U3!FfULv9 z1a|z1c8T7S)BpiSTOGL9JXcr~VYutE569XFb<=0FjfEST#6!wWSX zTCZ!m>{sBh&?Dv7lu|H;jp2pfvj+f5Ga!o&uWmKpE5j88jP(D#;91VCbKv6!p6K7m z7(UXD(HwX`Q6DwE*ZiQlYcAn4CH5OKeIZ6AOBvMx8l&H_ZOaw~S}d>`G*^I72?^$$3MyZ&v8Jv9IT N002ovPDHLkV1mZ;4krKr literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/manectric.png b/graphics/object_events/pics/pokemon/followers/manectric.png new file mode 100644 index 0000000000000000000000000000000000000000..effb66258998e83708d4ebed81f62d9f975a2a74 GIT binary patch literal 798 zcmV+(1L6FMP)eG+p`oGa>G?rHNdN!<289j<00009 za7bBm000XU000XU0RWnu7ytkQlu1NER7i>KltF9aKorLZ0(0)^CiY8qiejZP-U}sD}D-f!KL_T@>%S>_g8y02634idSe@jPf)i|5@taA0gOGCn2pe{Mb&^jC2$9?u>C6(s zByStm;s{fV`&K%$#CDPl4RyY@j`7g|gV$riB!|Mfb%Yt?ij~sX;JJo~1;iPu#kkEx zI@ds0E2S~xxiS_ec_*xiRHmv1LO+e!t?lP=K!ORCn;f?Hfyu%h8DV8UPS)Nd@vk%`paTB!2Nw-X0BHGxoP=@DdLvv>^P|AwcD;lZzZ8y z)&sB`Z|Kd=BQ~$}w&_MpNT+BP5t0n>2OR*y`^o2=o*?VpPjKKW zUx2d}h%Y&}^Z?UkWZd+aAFI0RR9107*qoM6N<$g1)Y9r~m)} literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/mankey.png b/graphics/object_events/pics/pokemon/followers/mankey.png new file mode 100644 index 0000000000000000000000000000000000000000..dd57bbd4280666f35c89aa440fc4e181152352f9 GIT binary patch literal 631 zcmV--0*L*IP)Kls{|SFc^mg))zRq(R3(X3qEABTo4Wx zDW!+k+q%Sf3EYS1-hPs97gEZ5Xt``>Zs?Q_$ztPBOy18>$^Rs~xuYC(s^9I=PkLS? zStewxvBnx}tpB4N?>N_kjGfH$xStJKSI9xK;6&zm)H4oQ6_wWjtDDo=M<)!A_x7!s?t+=QXS%|tk0ma#h-*$7#<7y#_>FKD~eV`K}Pb zA;#Gbu*Yf3^bzyPHY2T2@obCPSJ(bhDL%h`i}?}edpyJuqQEfigb`l6D#HDhN0_hh5Yy;75eare8s(R9lJ%aN6Gsn^!aOwRPV<$OhXoh0*+Io^?f_$3W`qs{ zw(bA$XzGjR6RJxnKDSKR=;c8P!JXf0>XId)}e(4Iy93&Dk(0R z^lVT-OIwF#C}aqR`~{}OTU~Gq1*fP1iFk=KR0oD^rpUX8cyNgdwLwG2{ujOXOM0>! zyInHnz*y(^bl>;g-MeQ^yR$pH9W%Q8bF&32SE-fa6^miSKQ}WV?wa`V==eVXmK3c8 zC^g4R0E#37EDMx?ON#82tj^J})x2B?A1jDPSm{S1f~5jjV#AJ?1JK`eODo!_wIHC> zQYAh62=MhCd(_D^S5zjZ07xe#!dMxe=a^iPZYKyJ7-s;QZ>4hpi~7SXs%}|k z0bq2MuMx5fXcs()pAv^FvPtR+#$e?Ne248uHt|>n(JKJ`0)nCl*--?HPaFz>-(CXX zCHUYn#skWj?Tu;i866-dwx)=p+w>QQBUq{;k>AWr+VZ&~T3Lm0iFRHXRcMNUINPnJ zsJtDd0BPXxgiLcqv`etXGfSlep@<6LjDrxj4rwnMumf|pyghy^is(W(A4K4@4#qB# zim*#e+Tw&}gV675jY|;L)db^+xWswRPiqM2F4S;!5?_iUy3m^sX5iBd=-4Gv5q62G zW3GE08m%+K+_N%EKsFv2xzfA6?{ z=fO1KePr}F{~6CPG6ug|_sOLBjr#9>4p8l8T}UbsK-lL+#N|v8k}ybsAy3Xu?&JP| zpVu;1H01$0yYPY35x@jP9m`bau)>6m?Sm%tP{uFIQq4@`SA2Ww^>MA zD#`^Ehab9EDqI8OH2D#fg~Y0@-LN zr|C3vG^t2^r*HxN?E)+SkTn;aR8%naU%~PXSTuhPK&I#>E5+lL07kGn{y$i}65tl? Y54EAbF$x%2xc~qF07*qoM6N<$f+!HnO8@`> literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/mareep.png b/graphics/object_events/pics/pokemon/followers/mareep.png new file mode 100644 index 0000000000000000000000000000000000000000..5cce3787a0e0bccf71d355cbdae6e63d0146cd0a GIT binary patch literal 722 zcmV;@0xkWCP)FMeD;c)?p1qbQTY5A!E+?>K(?4(8KokJ*(^;xIGcdbnY$$_k;Sy!C zCH{0|0A5F{i4>Q1=)lk+BU3wei9EAZa=t;7j}VFPU|_ug#zdlL%l7?AT(tumkLl;T z_ujqJfzT;Vaf(y?SGY&6uN|D@Ht_HFN=Kogt29^re11*d!4mw3y=3H<#s*A?uv;~H zVSZmat_u?fA9Tsu<0{X=EgOOsuc$h!r_9f@Gi?FZuZe8!so2trJP6LCvcGCD9}1*_aH$73Rc1wtljK*_|NCAUsMd3WKk+8>7lkD>Gy%MFZ{71#Y|yqXknxU(LOp@*C2U`gIt8 zudOT0UR-!{6$C{C|9uHFxuUeN|F8?W+jrIl zd$zoR;;dk@jF-!@z%#!egcslFx-dRib?$aMCX@;d6lWQ<8UMDEY7ahyl=43!8HAUm zoAJDn)+;WQ*%qCJ(Yv1a^=gyBh$ey?f-z~(jXNsm#l#rVz9(*HALoP^f;B?OTv~TK zVgfeY4qwMjg8EJIJoAQ>o_<1VVEy0MiL!&O$?3<8KMgk}z>*nwdjJ3c07*qoM6N<$ Ef_t1&O8@`> literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/marshtomp.png b/graphics/object_events/pics/pokemon/followers/marshtomp.png new file mode 100644 index 0000000000000000000000000000000000000000..5b04823a6bf9749da2008436253bea1365825e2a GIT binary patch literal 552 zcmV+@0@wYCP)K(=ltpKoke?3|VgI5TuB!TcAUsU%(+D zWav;Zg!Eeo)l=wFs6%lHHbGC~uF{T9?bJM+FHk3+>jb(y8M#!W;v_wn&aWr=^BSzl(Pw+^Wi&&oK#`4a$M-cgzW-b z^6(ueVVc(Aot9QB^r6eSQ{WI9_VRAjkXxt%@2_rx|~^=kNXx z7LGSAFq?I?@$@<058^cTba5|`8MuM!i*Pc>b#PXn%&uzj3jG9P1x`hCaP6Xo78sox zZ#})m82K>PbiUzyoJ>wlqEb#_UlxM3{p< zZfJ&szK!-gi1Z_=o;b+rtUu~)(4Mm!9&E^epgM+)8w%SnrMqGTLaqlvBOfoOpVI4! qQ_1NXT~L@`Eb@d(pWa#c%X|TGaPn}mH|Ng)0000FN2&SxK?k=>Px#k%Pg&00009 za7bBm000XU000XU0RWnu7ytkRK1oDDR7i>Kl|5@4F&M`s@NyW+DSl~MzkGr&hYTg8 z1e-hPP%vaDX&@dv#CXWksd&hcLfZ@;Y?`0G;zmQKwx9FiaD|NlLYd^!N`<39c@>i<~ZDBWo}@&?fK9>1i1YhYBwKrgJN zh6z(2z`n|h@yu4xGBzsu+z`v)P-24Mts<1nNZIhbwDutfr^dF=08}{M^b3@a>u zUNBicTI`AnYWbee;N3>4F;qVoTX|Oi?rZ`{=n8m*k6!V7ann^X8r{#QZr-?P_Uc@) z5G}8(4iWOaRO4b^1$lP^+z}N}!T=#tNeI0>?{j3-{c%9^jZt@Ca)Z4>S)D-x%>(74Yc*y&>fKb!1Q##2$(plV{J4YL1oR-A95{3Cq>Wy5^f89MCu91~1Z%q{iLR26u2$`TutZj&;oK;g2 z4-X{@T}lXEsn1-eflrk9K+U0rv1MrsG-4JfS>m)j;+v0_LIH4Z4`au#4>+;5Kfb&l z53Bnw;1X+j)FGF*ZBr8K=J3ff#wYrfOQX$*rC_kLw7>s0)=`2kaa(S3Na$G?C#UJT z#7iISRqQtia$+gy;LP$qvQr+HL&D^8Dg>z{!4{racx^nN7-g`1;xlltOB_lmfz)az zB?Q2*+&vB4n8hh#|3v>6>GV5^Dm)v~fB)mfr!4D6uCG=Tx0daA0Nl8fn00000000004!rO600009 za7bBm000XU000XU0RWnu7ytkQYe_^wR7i>K)j@09Fcbh_v6INnrG+lbB_)Fp_5()N zON!YcJLOO){s}t|G~$a_T4HKl20iU0r}N_3x!YK|Y&*=T`cab_E3;fBY(3{)%;#sl zCo7Hwz&`e|kA3_{BxJi=iJoivpX$?sY;!B6TE(UTfWEiWVoX43vCS#vWxadT0M5`y zZ--?;?%z|-Y>24OYXzGI03(F*9hNW6mOSvxhRBU^Z2=$I7xfO`k!`M8mVB6-J+s{c zA+||241?b+K(4L&)6>XgHu{0<#ZxvBfgtObobTug$))+e3tC z{I@~fFmuJ{5TH?Ewv3jWB2;8?Znh}MC|zL>m<(rb`ibDot=6n*8H;I9r1@f+n?1Ah zl+xTOfyw@hps)yjv#JUWJ5dWP;|O0OMWy@KxU%FjZAOI{UhS{CH< z&tJ#S2mH=6dgd-8&L{m+HPGDiM?nGLFMdye$ugGnFSh-Cz|<=1hO`)3BI28Bk#+aR zx50`)zNEzHhbfb9w*9`fR1I{Cf~;#ug45}XLEp0)z1i| zy~=TM8V|Y$bCnY&(rPwIcObSt%rZnweh55rq605xssZde(P3G6Stj`0iOxN>pyGcd ztsZ_hi9{vHht&q(w2b7$vU(*cIF?QpHDbYpB{ezQ9h*a{XQ&D00000NkvXXu0mjfMOS0A literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/medicham.png b/graphics/object_events/pics/pokemon/followers/medicham.png new file mode 100644 index 0000000000000000000000000000000000000000..25f063da4d1d4d58a9c2464eca29a022ef6d8dc2 GIT binary patch literal 673 zcmV;S0$%-zP)4~A~>G}EDS#fb;F&QDjp%IZeS;=96d^)GK00009 za7bBm000XU000XU0RWnu7ytkQ7fD1xR7i>K(=lt?KokdXE!LzhgLe~o@wYHnEnQ4- zyeNZeV!5f3ArzzzX~%MuLYCBDqI5C1L%kRZiiw3prVQOmkV|Xi&8R_Gm1Jn&J?k!A zIu!EXe(&u6J(((O}vTNrXluyQQ|~s`GqaAg4V&#CiJb)GJP%bQ}%Sr*&EW8 z*s;iRjINKjFIa|Re-l`7DRVt`o*)P&B2R-U*GjNT4cL#oS(u)OBFB`jc%IUPSs44? zg4~oc-zv01X$pUG*u~7t3KNfSe;q|@jum>Ib`5v|>pXq?JAD&62G9Q4SJGU(nv^=Y zOWhhM#4ZYNmuY%CH+a6B5kekcPD*{1`fIo`b{_fY_%1mzxmJ3+gs8{muDDv-17+An z_AkuCcP+jvHPTe2atGRlIRaX^&@CIq`g}HG7xrdb|76MBn&3jgIs4MG!N1He($!$#|C?6C00000NkvXX Hu0mjfuWC3d literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/meditite.png b/graphics/object_events/pics/pokemon/followers/meditite.png new file mode 100644 index 0000000000000000000000000000000000000000..69d936343b3f9a6b6dbddd085f29091480beb2ff GIT binary patch literal 556 zcmV+{0@MA8P)FN0Z0000000000XR79o00009 za7bBm000XU000XU0RWnu7ytkPqDe$SR7i>K(lJlMKo|z#COxN)HqnlrP0TqJaA{mx zazgM{aOsLHP8y71_7@Z{A@?sB3Jjf0_+j>r9$Zg*nCQU38^(Ln*khhBFx#|%?Q3V6#WU~JXyXFE8PGzPfyt%?>=5C~nP%~9ir|OA#swM(rjc@{ zTRejZUIg_vEnuT5WUg|inFsWWLgl@58yB#r5HhL`ubSuHX9&^jsLsX(nh+w!cGGq9 zv~OaT;$~E5;{qY?QwnwS#FVDRC#rKh^it+Ee|C5^nf25Gn#C*Q_49a*YaLUTvdRLA z8{_rFSN;LIH;vu%GvznUg`K%{)-4KWc)q(XT*Ci+@s)*ji^7;-5))YfM#7z8X(w@T zN{N$f?{8e*$M3z$pGG$?%m(?Qzm$dGQFyT(FzBvc-&S{WfRhLl=}teY^yw}Nogt-9 zC$iAO!eDzX&-CCVUcNRLAkNXr2u}$00009 za7bBm000XU000XU0RWnu7ytkQ!AV3xR7i>K)IUgDK^zD08!ZO`x6T2FAkJMn9_^Et zNszX8XDwLPR&q)Qm@**yteX?fYDdlp&44FIjcP~xuPwwp0 zq0n1iKKI^zfA{|6N67#2FO0%KKTLWsFt4}$$ADh^T{}#;Fg;y0;w;N66L~mQ0jBBc zA>q|RoD!$6IXAX!8%y@y;Q|^DJjO&0ovoBOUASB5#oCr_4-@5rf!AaT06N6&LUk+t zp@&%>E_e^{_7;D{KuFxaP7hP<(g_b2^a1+GExx6|O|K7nqV3^=GdME>Ow$LL*ACsj zIRt2FYi;KXKn8aGX3GFiL$^=yZlS8eY!3sM`~Bsv-%O6s?L1JOn{dA1>-}>1Uf1tP z25!6k3Cuv-`GSY|){aB3NkaxEZr9rD_&&t=ob7zPkT0$3_td-)0dc$bWgS{!@g?zC zjynzfV?`%^@70UNJ>hoLU2n5sadvdlwjA|+#-p%4E?QrbUQnK$%d**`+qBjWA`Ile zPui9nnpu(`#bU{0TFFX6%w=nC(-dFH#_qwm7h0Bqk1;UN3Yeyq%L4$R6);WkquN|J zfTqvn_zI`CE)t)QB7Ets4X^R)T@38-#BExMGx6r?gW6$yE_Rj46f5%@Q=gITJvP5u z(%O@4e5R|5Pb&H|HjFz8pkow}X4TR4CGq+ZKD1GDv5k*pMVw#0T1kA)|F|m9Hl3-* z7Z}(M+$LmGY-HayweNgrU!bEvw)za)UtoFM3mR;Gu4Fs{Y1JDzizW+1!PrNo;*Q=9 zZIed1wcq4gGvi$BfGR*)$fHOv5b^W+*YpWf9jxdY<4D|_}#%_Fb)*YJFQ)^aExI+KJ_yvTC VG*W;9Kls}3aF%-syKxK-(fuix)sMu!4lVpli z%NENL7&I0}OR5dIz=H7=7Sd@D%PUf*OPOLXFc;Xc_sQ5Z_B;s-8%(C)3-TP9 zvbt+gK1FF@kSYYm6~Eg8su-UjYAla)QfiT!oF8TytS#g|1t5#_B)@{@YR*SaphN!tU}&sac!h^i)+M5hBz&|38CPJnEl!X_Ln{~ z(&ZncmAie3Fl|cE268*H(=ae=-RGaUH2Q3PC@~eizn?d#r2pPa9!guCQ3L+MkI-pAo~2S2R8<6IaJ3T%O`XPvP=O~ zV`EHM=Ab~2Pj7he>fY1*1{y(p&Tu)V3XFrXT7*n!Zt8oKz!Fmrzk*7zrd#nobYQgK zO+pRc3PUE-H1RGuPp7*Xn3{e!=--Fj+gh#h8PiN_TwhsUEmzoJUDbO-ntTw+M-(l- z-OmC8qB+IIkpZW;8g~;i@BeEu8q!=4y2i`P1;#Na1_yXkul8LP2B-t^|4sh@LaErD T#+Ho$00000NkvXXu0mjfR+cIt literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/metang.png b/graphics/object_events/pics/pokemon/followers/metang.png new file mode 100644 index 0000000000000000000000000000000000000000..76bfae1f74fb88b87faeb3995d319abc52e4c3a8 GIT binary patch literal 979 zcmV;^11$WBP)G^pfAprpamX@I@DKSA|d6B{Cnc4CG|NkLDQJEKmO*P1K@@-oau|9E3@u%HsE9z^ia zbLl`a6c3S5y!1CDA?2l0*h`UIZK>8+5Jv)wQ(Pz%ib?P)XnsT^fh{Qxcu{(DW_CB( zT^A7*y!0Ki`|VD?_jYFXB?w)`Ra`|B0JUH8Uq$XNg2C{#hVEta?-cM$&OK}o)`n}R zI}fv2k2eWXHs_^;{@}yxewuS7HdMlon>Vr#k`g>3Z`dcY*6)R!Pcg!U8vl zr4%DvZO^};wA`^CuV*qGkgiI|tpmv5+*0*A=?cMlqh!XX8KDM0*jm}S54*2xS&XkA z6e;b}vbDFU*Eh~sjmWhY=R34Ziq=gtKF!Lo;D6hzJo|oOWig=E{)n#Z(B<*-ni3wu zjA8qU9zT9|*;T?(G@~g-_~`iZX|?mUZzk1=b6yLfX?OQ3`(6RG@X(L(g-O7z%Y9DN z=82Xl!Aj`$`g@hb-g_f#N`K07tP=Ru+f+WSz8sfJ>q@vA=aES;qEf0!Cw`b9$x0}^ zqj!(`o-o4Zn6Z#qQ}M2B-74scyYn|4C7dhHn9T<@suj6LZrjnmOtKaV+h3H$K**>C z%rHQqTvI}83kvriQFSOP;hc!^8@;K3$pS6aOD_T;03_H538|A%h?lqfzGmy9UtiTi z;s{SA6kc5m^Mp^C+bY4vku9XZ37g@XZcdITaW+D5q*^f}#O_IB!&fXT%~RJ1JrIHk z*Wp^2C&h>bv2}&VBl$p_vsSbzk8FE9iLn-*3GpfvVz<|Dz6kMFHdv6L=;_CXTHXk; z?3T|APpGGtv2N34U%1ouiOHDSEXG=RrcOd3f>q(EHwxbo?rJR*nvsDJpOi(&f~tlG zb(<4+)}AqtiJtCR=Sm3?{>;2}J-4Ev3rq|1%sUUh+>*jkpUjrRpV|;^b2;(iy*(vV ztzrW}SK?Iku(S|C8=~#f)=%iTM8*;znAB~V`1wf+^;skc4oRVI9#LsQuL405LSWpE zXG{x!ij?rDz-pT(?x=okWvl))aJsaA`Iq5;#}Cg{Hrx3Ak1GHG002ovPDHLkV1iUg B%zpp? literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/mew.png b/graphics/object_events/pics/pokemon/followers/mew.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae89a52f1eb3a3d0fa0c61b38ff7d73ee873f91 GIT binary patch literal 618 zcmV-w0+s!VP)G`o~saY{m`O)dwp}BEcaR2}S000000000000000>WLFE00009 za7bBm000XU000XU0RWnu7ytkP;7LS5R7i>K)-g}xFcbjbNJUuceD@o;@uUuyZb6D5 z8JUhBP&Eycg-YzOHrG7Qgg9?wIC00nJXa*eFFIQwl?CA?`Re#R=h<=^1fT7*yq^p2b@L3cdw5hB+dU!b_t7Pl6CAr zh`?!~mgM1QPwZVXnIqnP_juN+naivLm6?m64ne;RkP4uyJ+7s@zl2R_Vo8W>Pr%+K zXB~iAxSb|7D67!vu79wERi(HI7}*ZBUDPu$ZQ*eWlDHQ8{#`{DiqETfW42&L2&&A z;Pk}pvV&x9Cum|dnBnO+vmX0^y{9C>5rRqTGs>JgnGY6-+T8D7q4!@>qjSWy*Lpj$ zd|C7LdBLp&y=j6nj=ULl&ye{b3JGR*sw||7s z>El)7^V2Bc*g?Tr=5xuJ_Idh1KmN9GFKp2K^I50s|h|uDx>d;b8=@~=q zMUE~?vDTChnT*5@)e=G>nX|-@r4T429hD`@B3p_|a(}LOk|lk*Sn|-NLk|LZ?xg2^ zPn?Ai`ak}S@k{(^Kic_k$4(R@^zzWk+Y4Z;X;c_T&$qWP_pQ9O0GfSj1}Kcjb`;Kr z?YynP?c^EyR2G2`(L-dl@|FTScVsq!euc%b!zc``cJ3~47u`otsInABQPc=fxvKz< z!n-i77gd&1L<)zk++9Ej$B(35RXG=qqlgSUxT}C8;06d)7DLO0lUD97V2`7akhtES z!czE+c-}Z@=dJ?S^9UiMN~m%^W^X<3gVoBKyoCgt8IL}S!eDy}=X2Q$8D}6fXK)Z~ zvQOYsg^bx_2-8)TQ}#qu3P6dR39SRk&l|Yu22(}|i&5{qg%Nf}Hur+05@MT3c1Fbn zw(!KsG8YyoczpwP7`M>H;uLLWo9TGYmwqJ_|47D$mp=tMq{L5BuM~>Fg6Xh$N=~0o zt={Fu)jEFOWJLF3%`lAq@meSXPb8y6xAN=vJl_bI?yZG%X!{1wbkE!M3xPh;QSbVs z44BdeqfC!c=CkxmAryg6$AV*&8gYKT*f3@Op;HJ&AUkwfV7b|Ry(QNcPh?ODsh0EC zk`oJIeM*hPLMQ^C9KpKSOTiqWDV@@jLMQ`|1zSif4<2^no;j! zg_&dv@p2vOtJJgBLJ?^Dt5g&y))8L@M`uEKT?)C8a}|g*cCff~CY4YdNd`yR4i?uQ zSSOOL^6n9H4ovg3SDu=L`3;trd|oVU_$mkiK(HvK{-(X00000000001Bbqs00009 za7bBm000XU000XU0RWnu7ytkQnMp)JR7i>KmcMS>Fc8KGYSm(8@G6N#S;&hb0woZ4 z>QnR$I-3MaAesXdeT8h!;6m*g%KSd^bUGTL z|MBkxCUr2tURIwf-=O63MGdI(^{@&I|K7kC)cm45&<-+Z}{5lRFhK2w+P^8FrP$N4r83>oE^3yGtg!qs|r1~)N&)&Ot0ex~z0 z%CG^LL6rAh`S^W|5#Ff%Ud{3-uea;nd>7+eSRTw05-=MIr`Ws$_%+Lr%fBt7Id6Np zMdO^V`&nzW`9mc-JX8wZ%>XuQG0YDcovQPdIzi){f+~z)q80N4{OZx$JbW?8w724%q~6F9Ck` zGRBChVj`So!s#R%rsJ+VTj}0N7&{y(As>D}{{V2YwFUtr-Yh1W(>t1CG9|-pQFTJ7 zQg4!tvdKte-b^y&BxF4x#AHHk3Juv43R6LZQjbLwvgw@_!157CxZy>{Ez2U4#NJQ1 zCaG7Ek26B&^y?R~vMC4{%ZxSU)EX>G!U}7MsueA1qskbg^JTT9?n4ySvT_VhGscRO zIODEiP1TSXBQ8ttkPn$oNptF!=?Q5T4(pugk8>z;ReNWmX8iHJo$%^Yp15ZmQNsJz zkr-}Vu1)i_GZJ3AXatel!f}Z_LoJXf_r9zX*YNEDUJGx)K_mD_c!qkn!2%NQv$^Kp hfP>G*a|?JP?g3LzRml>Qd^rFB002ovPDHLkV1kFjXEFc) literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/milotic.png b/graphics/object_events/pics/pokemon/followers/milotic.png new file mode 100644 index 0000000000000000000000000000000000000000..724a2011f6794bf558e8684706bd150531913178 GIT binary patch literal 1050 zcmV+#1m*jQP)Kl|N_`Q5?q~M};04W%Yr*MeW@e;&gbI_PHuH8q#<3cTF4@Vme+!NakbN8n?;5ZEPc z5g^FD1m5}DeotH%+Y9D1PoNVpEGt_EW;6DDmR>`^M5=w_y*_3QJX$kNJu7p8ws3S= zDQ^`B`j4JA%@gz%0ahP^b+QsdCI3c6~`8bh1qX znebp+Xl9#0ytOoXhzlgbMg^fq4QIFVyq?R=;|I;RA(dm+z_tC=3lx3o1aiV51>c6U zG@6>{0*P?VK;e5G!432zYC#oi3nap|0F<`X z+oZ8DvKX`yI4RWH@Gxx2nmaW*V6mAKq72o2K3GfRl`c?_`jl$I}Kb` zyQ&ph)(2OxVywJtEU(+3rO%h*c3?8jgdCIiyt}anZA2nE5Z5_IRqhicPe~BoPfpyWg7-FCpF4LZ%%05O zMpgQ~q{2xiC`9X@0|v)yp$;K~$oFju0)y zh8IFiAQ}hTJ783`{`FXi3;rzgu;@b z@WQYp#;G7ZJ*ydz20B8Q!9oxrsLjl?fgplVy_wTkK4}erUR+FT5b^@A5Qq?k2Y}}O z5HCQyEpqwzn*j&Zo-Akq1A2v+C4L%uwnf9sWJdiZ`-J`jX`a(|^B>f24$!-P0(hwG U*KA1kG5`Po07*qoM6N<$f&*pNhX4Qo literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/miltank.png b/graphics/object_events/pics/pokemon/followers/miltank.png new file mode 100644 index 0000000000000000000000000000000000000000..09393dfbcfe1d0036364453638f8dc4dac9c35dc GIT binary patch literal 799 zcmV+)1K|9LP)FN2=iJ?hhd9h)6@u|T%K}lIDInlX!lRau200009 za7bBm000XU000XU0RWnu7ytkQl}SWFR7i>K)lF*}K^z9~MX)(lh?gD;X*b}Z^b3U2 zLJqS?Y!4yq_%ez&4>qN=pag=qP_Ut=qJ=Ty$su*jr4R$|f|r&i8zdC+1=2uTBwqRn z(pmRyc6CB8z4_qfw|{+x-JL;6nrEJQ=K0sa$>$btZHayNhrcXnmT)yyuCCwW9Yj`y zK7ZzK3tEyE$}5QMq~3^KMWib9IaK`%1T0AiKuRGXLQ~UJWR=oYzAk7fOxu7`kf7@# z(>A3EDsY&s)%Ml-&91Z+kZ1!nu`X~)L6j0TKHE7`Mf?s3ngt^D#W#gOp;hya6oGSO z2T^VZ1Z`$}*l7&+#V!Gs_-rpwgS`>={Y-h1%E{@$hhwo-vrw7s-zP)BZGb78i5%=c z{rdUzLg)f(RFbn@dGfvnp!Z0EHoyO>`>tuEwKM0!*z$L~F;eW;Q{~LwCui<>GSAgn zA@B-=W+~xX^SENHVf*APIJTd1sWa+gj9b`Q5L<3c=3xW-3WH{WYa`I#1NA+pu%7|C z4q7#Po51H8+QC}A;Vx+T(3&SPz=x||UC?Yzi0^Ihzs0Iks91I%B*c`kPHxT)a-(Cj z2>J#dcy&dfH<`oSO+=2)Zf?e#SI$AoTfT7TeJxG2&XwbQUn9GyW6wA7*ci3E!c9CF zwpvn}+encwKOg*Ax_==w)e+Hk-aVSNeaBcr-O(WA6f*bdpcO*=0)>x@i;wti7_g?t zvigzdm-;ev7nH9d(Jy7UP`>V=?4=yz-}5ghM`6Kp()4T3*HC^8%bruFoyQ(Z_Ob;z z>K2BQI_$|&iH{nGu+0CVq#!KuCpW$k^UpV8-aMQKh2@9dG{(q#@&joqzCt)X=MSs@ d;0F1B^B3elf20uJaA5!d002ovPDHLkV1jQ2c)kDt literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/misdreavus.png b/graphics/object_events/pics/pokemon/followers/misdreavus.png new file mode 100644 index 0000000000000000000000000000000000000000..89b91ee032347d41f651a6a6eb20533c63812a8e GIT binary patch literal 891 zcmV->1BCpEP)y6&VaZ8pX@Q|3FG|QYDFFci!9jshahX{O0{{R3A&Mpm00009 za7bBm000XU000XU0RWnu7ytkQ@kvBMR7i>Kl(B2uKorK0faqY*(2iY-h;soatD$QU zcxWi0RA{itVo0VgN0c|5ovF|c-TF7QT}5hF1*siEiUuhf3Z_GH#iT76D*QL}BujUv zEAG@W58L=B-F@G8?+GDvTeo#vRhe_`!s0(0z7}ZB=7*3$`auk4D3r=A3MFIpe#lW-e9b(&$ zs$&|Q$=4(Mu~!=q!VNG~21a~V9AOK}p-jm7a|kRUI3b%oO0b*>7l5aBQ7)}{QgT@L zHQ<4Y&jZzvf64>FRjoK*Y_o?A~oSh9E$)&MNvRdEYf+$pKp2~x0P zPc=a9+ll?*oul!d*aKw=ji6$GDfrPbTk@<6SlA9um) z%bO)P_0b*2^E`Jo8@wZ=vx27>I;V=5&Sgu6VgLQ%-bzN-mSxS+3U&^0l!3Jk6*?7VQl|4;<*gdq=nd)3@u#US#6>vAYSk9bJ*#e6yOfbQMhljY)bIwGY z0W!4bN@w2Jw)*-CUFiFAal4_%*+F_aj`mz>OTw`6dPJ>I-K^!+`L_O9e*giHi{~Eq RZ*c$s002ovPDHLkV1jTyk}&`P literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/moltres.png b/graphics/object_events/pics/pokemon/followers/moltres.png new file mode 100644 index 0000000000000000000000000000000000000000..70d6298ea3f4f35bfcee3262f12810e805970e59 GIT binary patch literal 1158 zcmV;11bO?3P)G?r1F}ZPJ`N?_du~Er^IdMrjC0HmR00009 za7bBm000XU000XU0RWnu7ytkR{7FPXR7i=B$NNkLQ#gLL(;!r@H|uozcu2 zjpeX8EDN1O$aqG-KX2Z=H8QO#w{+3-z`DkOS*-A?O(sIq-!sK@GhIfm%Y9oO)jX@=$-s|Aunv8?t5> zBv!i7IA{_Cp4M6cCh0u2SQAtLlAs2d?r8$&+=7td1sp}t z!}&#`_8>w?lOXWAlWhRk0I={`yLS#-g+)o=D_KG@&i4~FMILE42=LjH?lu5%4FIb( z50Cx=v;7G;Qj#mh_#*y8<#PCCyO~6-*PU$u=?FYqt!0`rBZkruM6gm^=C2^2VK=&N z5RB3wJsp|=!clz$_EkFnTm2t7{kU?36XK4w;_`B?0)ubz^s+%P`}}qK#Sj2!TsgwY z!i7*KOFDrNIs^K(aO5+EC=|E20n!yy{IYzP{<)1Gz4#&h{YQ1v1E-*sBcE>ItXi|> z>SqYi9w{>6h;F>DR@{o`W)p=lK_U-7#|d zz=?$;gTP)dS5pW{6;;M>g`%r!&ol4SuZ-GLIRY?xIOg@ANAK_mj@c593J|;~mrlcx*iO)T}e|V+}n0$OJI{ Y0|$E&pV9HaQvd(}07*qoM6N<$f(L3D>Hq)$ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/mr_mime.png b/graphics/object_events/pics/pokemon/followers/mr_mime.png new file mode 100644 index 0000000000000000000000000000000000000000..ce52c1f03c82ba1a4471b4e5d1df18e5850fa4c3 GIT binary patch literal 743 zcmV?P)FN2YX?e-X>Cr)1X=!P}k&#I;IRF3v6tnKm9c8uKpe)k_=XMw(cr;D27!|YI9f_T zLm*^msR;!ubd%EPl17z=LXrmvcxdMiT}n+#2c;Ma#RLaDb||5Xi#8jX8qr3zo}qX8 z%hpMjtQYV%2>tHl@B8$ZYzx9lE3LE=2$AJn*%QK$9SgYB|DdidjH<*10mSzwq~Kvb|IzpT%nc$OoX z*DoHv?IwmXgQ57v14HqLmlKHa1%9u1$?ax1`hefN+`6)7hJ6oM45G{K)<0ToB<{U& zCk_OLK!i^y@BwLNhT%6d9Fiv?7zXQIU~}AO{7?Gn52hZkye;Q87=p9cQgk#6erpxpc92-{qO< z*!69zRm_uJNjhv4G5Sh;-p#C9ZrWc!G*IP2kpXLS{$TrmiG?rHQCYFs0RaJVX_28x5wWq+000000000000000=*}(L00009 za7bBm000XU000XU0RWnu7ytkPLrFwIR7i>K)WJ%_Fc=5$QN{?~+8vah>`r>MW$m$= zLIqzyZ-Th{NK1MwYiA?AfZ#=oFW|{-zMLj7O};fE9STDKr~L9y^YxTouS=IMUAp|E z^tUm~)e@Q~&f6RLOzEJv9#Hv#(n0^t0GzirDo7?*&>|5o!?tFGBytDM)Aw=gwKPg7 zt)%JDBA60N!tYGA=4q<^|?Gi zHjiUwG@F|HIzJ7)dFh&ujm9apt>=sTbqURb>{s7k?P+b8@w_^=nmt%dP4o6)u`Z#- zh0fvI(mBxDsH?kbR%<+YaYkp${Ii7?Uj&Su$UbH4NOr;8nbzgV9m}r|G!F(l=*A6Y zM*--W_th8C#Fc*-jjuM|3Y5bg_VfOuR8OK)iFy0F%$>zBS?mBeuEIX3=RcXC&h1Y zkbpxaM(%;wb8z!BbP^Epr&ZJ7EKW4kps z6~dNT{Zavg-Rz4U+w1|r1q<5^)B%t9SF0hm&DHGgX{N&#bw^v?_{eE3O-me@>4`i@=Th5r^}D`74fx=8>ev%)ncwn`IyBl3J9B~nQ2z7dD0FAh?)o6P)!&Jfx&S>QE7P*AprpaVNn6O$>G^aS@F?f>FN2gDLJ{BF*#8oOQI=N00009 za7bBm000XU000XU0RWnu7ytkPPDw;TR7i>K)IUqZKo|z_;^2+tXlUL1lOdCjN;?nytI6z2 zUp~)<@oT@>F?1dpT~8zCDIKPR#C@zbq8P_d+1C*Pe@={VnWr|QsXM1C(^aQ`BHs)w za%eLu8&T%$Nj5DCdTJK^mXlfX?hefC4E`(7_rDYUbi$=R9lF>z_Rfw=(z0YNcQ@#*22X`xve8KI$}>FN2YshI!(00000y39sb00009 za7bBm000XU000XU0RWnu7ytkQl}SWFR7i>K)jez5Ko|$`o6d6}Izcir&&l>qnQvt!iB_ZS8Ce}fZ2NF52 z1-4DEMnU8T??+j;O`xMNfm(xx2QhGf@^qe=(35?aG52uqZI8XwO+mxb@3NFJI52W- zTHATO+h>rn!@Z!}RHO`m0rD<~01#g7y|D+ky*=W<41#meXMwpH23@9U4B_bHKo*y^ z?QL;j44k0PG>VNS?>0{Xu1+G)2DZIDt!vkX>!8;PjM-VYl{uS?qpl{K&Q}C0*JXE3 zp9h#i4AmhG56snAA)=I|)7vre3*w_y)MqLbV@&Z*o4}(LN?eXfr}LWmSqfQJ?poX7 z7`2P~H0UyA@Ih-(_StQF+jE@XTh(Qm?R@GM^RqFcLhacG)55z=;E3lE#%LeQwoSmX zUJJ$_QyU07f3?nh%pBC2w$`~bzcA;~qpStyR`mw-?qad#o5i^eJl;9JFXnGW9*Dxe zO0e*a4R~58iPZ~~K3!^EGvRW+*vvnxpGAXJlKV2TTM{9LAW+@dhH7hV=jr@%IT6!x z)9HLR5jd?~1n=8svswCfB-y#V4F-tQ*Jjl=knddHwsf=pF%e7O-exqXs!Wu3F&w^{ zO>6^&ElcfrW36lhQMg>P)Km9cBvKorJxi)Nh)4lY{mB?v?{#n2^F zJY>q!Awx4+M^JF^(oUshEOd^crfR)-@!+*nX%}fw5q^JEPbcf{bdl&#+9?lV`KKp+ z-+QM!o#Q;kQ#{503DP+|=D&`BO1;1v;6E2YXI({$ee}|F78Kq9*M>8z0FxaGVOPJ) z(gX4&$~xF|3@^@bQL6i3m^3t?1!J5v?gEK3TpEU{!m?86!n zm*DlWTVTGQOdi^sZEl{3g&=rCOh${U!j$&18;foxr=wYGU~wZjt>(ql8{~OZmQ^(C zWiFb@j+x5ZEaUmRHGY2Y4YChQzJz{W;QCh<@-RK*Y?fUyCgwfUo{40&SX>IQ1f~rd z9vuYZk5_C2D`n7S*)fd8xcOSJVcoUJl`t+O@`qKTw^@i?VwSwd_m%M({HYA3`2Ns2` zAp@2JJG4wF-Eq#LwHLevgGJo(Pp`A9RVzsDS2Zth+gm8F1)&{7w{{bpv@hjugDVIV zrFR!piOCMhqAbfIC3riRtk+6okhJ-P!#MMGiTns3AXMwpN$x8ySby-`>@Lf`%#|Q% zSj__$YQa!Xf)K`$uRqD0z4bYO668k=>d*!}-0ilYKNTQ3)q*UF7&r0>05c4?RE(My zbT`6X7&?X^rK9P&;^~E8umnvO6&i-l2*fN4m7trZ;tum2OfST*u}9Q@UBghQf!E3V z!c!aEoG`HkYC(E)l9(&m>Fhr}7pX^RH!0Z26IK(miU!Fc=14;X%725N)PdhV0S{2KNBH zfeYE}xYdx3JwexQ!L-mZbnVh><8il4GFgl|hXl6k(^P1CqHkbdUoaTMxHGwz%=v0UAF{jwUe|GF zFq>wh-mo_)=lz7X8=Co!&*E;FRMMUAeJDa-pmLxH%j_~U)UFF2iLX~eAplkWS1 z@8bqBcbd|j@Cwq@#A{$;*VA13YcqJZ1+~`hfT7#4w|i@vI_o!l`QsL(yXWv9G6lkc m^C2Art%>#uYC2Nx-|`EtCT#bc(REh<0000KmBEUfFdW7M<^}dv*jrQ(da)B-WO|Vp zVa}QSsdR38+H+4mYlOT&DfHa#18m#Vyj+uU)aV*$>2*E^nV#1@?iJfcOt+QvF$Ty$<{&-H zNVafXvu#w+V$pEHK@2sRPq@vPg~xQUfF+wVr{A{GS$Y`lpa1Wtl8?_eFM$uF7+{H){vu3u0fvee&&SI({LubSW90$g|?edGLF?_|t{H0M<`WWRgKe}%S07I!$4@397bM7tm9SdK1G(V3#KFj*@HMt zoYZC)l94Z|Bx}{qIl(N?n*|fSEA-4kVz?a((5wy_kSU*LT;w8h?vOFmG<$Y_#E0*+ z7#m&;RjUr&%$m1q4#c|S#NE3GZC*#NzcDNkbvQ^7cLD=l>8^4LP{VUz@K^@VoiqLr z?Vpx!qhN`HiTk~zt1D>g1X6p&!Y=ryf204>A7^#OBu3va3;+NC07*qoM6N<$f`HR6 AfB*mh literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/nincada.png b/graphics/object_events/pics/pokemon/followers/nincada.png new file mode 100644 index 0000000000000000000000000000000000000000..1a55d84f2bfb52ee092af2e418bad43dec403a28 GIT binary patch literal 681 zcmV;a0#^NrP)FN2ovB6K(Z7q+U>FDRXDH3!%WbEta*M-lDfNm) z3RY>MlTfl&8gq$us6woj!zHD@#hbK*1{_5}>Ut`5NIAGmO6ngVTyb&`{2zRi=6&;~ zCWjzyd4|HLKfd2QPXV&YCYx-s$tId=<$V9s2wkY+K?Qm#{+kC7dgoY>aubZlf|O!E z&o6{@gDye3g=XJUG>g6Whr78wj0@a`af1TF>?0SrX<@ss;Gw2pO0)FFs@BKvq!cS7 z<-+8(9p!Hrkbaw-#JqKoVxjp|#)JFZhB4>KIaS;{qH&uBIKC#A@Tjm~rUjuzn{M>j zFXT3ixrVW&K5zD0kZe*=Zp=Q-zBFjyra^BTqG;UfLZWL}v{ZeYD~Ovsu{U>K;JFtS ztnJY+$Qt=mOL8mGIkkAP^!eeP9TO5A%$1XgIp3v$$P0X#9d**i7#pgY=(=(DwCp~* zS}X#y=)E-B#V8+nPaNmj8NCQBSHuTwfxJ=0;@;pU4p&e^57!qd?4SO6dtDudfxd5i zQ!rn!Tsf}eeTWLC#9vvVdYB*Mfr&<8ffjmQsMNgOvmdh~qq6>#cxSnKpcdFg{Xk9D zT0dFA;yZDN6>5jzT9%!E75=1c2Bw9sjozOq9gzkSFQ&>dw*U#;f-PVt0c87Tg(MKw z8|0AeqJe240yHJBw4N9iHn@BNvLRtup`YAo#XlrQ9{*KNL7G`>#X_0YB>DifyIXM6T00000000000000000000S`>Fh00009 za7bBm000XU000XU0RWnu7ytkQph-kQR7i>K)xmDtAQ%U5B=Z81r@p|n!)~^)7)L52 z=JVcQ0)6E;sa5&_F!$?yn)9X$^D^c-CN zpG*HSU;7z@+St$8I`WY*-CZ;-mR!kVf@$)IVv=VI^msNIInFE_Rd@<%k{44{tjipK zh=Fl}aKVJm6QT~}f>jEf(4MSgckXzBiGj=oSvQ>mA_hDaqOihy!~v9+XB&Dpp#ep_ zWg$YSn&>s~G-7Ltv%5Fi;`)CU%d-hN#=wB-WByiitk`qlTC>8jTHbeB<64u&Hjq~`d`!|}6Y;zr-E6BHh2VE||2xUZSw_;5=> zTXibg)@e~Tfz=0D^D-noIOqI|0WO+arx7|O*JFV? z7h?Heyfm)22bAD?V?J(Ac`;`F$|?p~cicgcpNGqUfoA^8^AtCAM`C(ac0RaJ#VG%hoN%7%H+1cR$0000000000_|@*h00009 za7bBm000XU000XU0RWnu7ytkQWl2OqR7i>Klrd}DKp2L<&9XOdO}hzVhv22538i!q z_29TmX$fRjK{1_-p_U05WH+(Ss)vLYYB`IYhFG~wp&4AXxkHW7kLum&?sN@R3hB_r z-*S5V-aW5mkN}pmoaHR%UV|}Pa(HyV{BH*|%c|40Y1Ptlc5xwcHW~YOsa=B>6kqC-Qh2dR-yN=*6Uf2z!uqrEtTv2zO2MsTBH<9j4^~{xK0Mw@kR9 z7HpWcsXv%XVZmCXOcp6@`zKu`FHjaa_+h2+4;eA#%^;RoPD#JK;%5xHKw3QRr8XOttJe-2N- zyG2u9=Q_qpAvv&MLQe>DUd$dO!t+E3n#Xv77-gJh@%URs2oKg`F4Yqu#zF|t z*MAN%{xU1ECmOWF8>4E@^jC4pSr$@ZY3m6--+C^DjVR_>T?%{UZI=rHIuW`oZwLJu z}em@isaWFB)fA zNQIsEz5L2i!xcYpb|4Yj`$9-&(xPmSVnUny!T8}sekx)a8vk@NO!K7332bz=4piKgG|1IvcwDtohotg4q hn1F`v;N|?^`31)AOLz^(^Jf46002ovPDHLkV1j5WRTKaK literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/noctowl.png b/graphics/object_events/pics/pokemon/followers/noctowl.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fc38c3d95c4c353c166148ca5a7b1cab65c5e3 GIT binary patch literal 1114 zcmV-g1f~0lP)w!QCZ=ssc9)G(V=n4adGMC`Qh22VM#fGVNn4A0jV)D6#Pja00009 za7bBm000XU000XU0RWnu7ytkR&`Cr=R7i>Kma&T*Hx$N&np7Fkfbl}&V@KS=z@DZ{ zo8q|6#E_7y?yrb(Y}^EHs;Ra}k#y-&hb%D!2DWhR1Wr|oykWg@5!f5Kca^87C$09f zXS+|-%+BcPec$grt!9MyfBg4`oaT2rd#2y9FwMU`u&|ke9_TV}{KR~En*n-mY8NAH(hIb=3v``fqOs<C%n5sA1eLQ?)RL~Cyx ziAsN6N5?G+gn!+WN2d<;n@qqoulm0K#hFlp>L?QN5RqGLZ!p2rpP^Dlg( zoQoA2li+*w4?rD|Tx=IUa7l7M4$HB4WGf zz>HpCG_X6!P4-?w$L9*`Rb*R#+_^Qew1Q7Za)3l)_tZJlxXmt-h^AtfZ}w$&$E)~t zC~{wE5fQ~u{||SV8v7irc!716PtL#H7bqZYI>=s;smR$d5zE7JC=ulXH@*eDfMwny zOIjQdD8Qslqe=7o=?{z%Gz-`)baO}`|1>#3c*`h8Ubz1a5U%)G@-x(xs g|Im651^RgT2mh*D-Pz^A&Hw-a07*qoM6N<$f^Cct00000 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/nosepass.png b/graphics/object_events/pics/pokemon/followers/nosepass.png new file mode 100644 index 0000000000000000000000000000000000000000..c407b389206da75b8c0f9e7a0b695b97b2bb3216 GIT binary patch literal 705 zcmV;y0zUnTP)7m000000000000000RdY%{00009 za7bBm000XU000XU0RWnu7ytkQH%UZ6R7i>KmA#MCFc`*@F5K9+CmpU?NGEg~>TOJ@ zNH?>xWpO^X4kQv&jRbOU3qw?AJBFzBN~hzW!>;3x1lkS=iJ|ZIdmra{9Lpa;aH&gO z>QetrF~(MZ!vKB1Az#(J-kjnc=i5`<@^Ns2&j)bMPw{%k5`V1`vrBZb(sGwWk7C@ zu3`X@dq){J`F`>4DQ~QyW_w{BmMFLTBJ8-+VV}ku*4jM=`*_Er);r2!^>DpdVDBJl zb^}~w%x)Vq2BMg8j<2>@7mh5&dw_VrohKOrH^ZasY@n3w*i nMmTtYhOKk@@B#b1@$c#vnAR%3PJjP`00000NkvXXu0mjf#RocE literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/numel.png b/graphics/object_events/pics/pokemon/followers/numel.png new file mode 100644 index 0000000000000000000000000000000000000000..96307f1364bc85bcb91c0a7512767150efa575a5 GIT binary patch literal 848 zcmV-W1F!svP)K)jw<7KokJ*8v@qQ#e~q1cGA?Li@An| z8cHGl0wn}GcW_H-Af04n8-(-kBHQ1fi+v4bDj@RM}!N$*Z40G6?gW&9_B_)oL4{r6ZYmHuFj@?_0^ra^9BPNy2IY(rSe zwoT7Ljt;CWgZf0yry6X--5vNO(>&qTg#jscg9E*G?*!Bn}9l!ZB^>A;sEn-V~50|4Vqn{$%LxINAANdsRgn@%|)o2m^j%!X;PQ3i!4V8 zjfz}AGN>Fth!O=PYXfQzT)r+!>E=^ldk%Iye3)SXj`*Z+CZ1ZdK@AhT+nc-dWuclU z>|-1r`;cLv?eIy5&p@hk?~G3){B`y5HGGifuw?PX@f@f5aPHi~q6rYLt-`IiK+>j8 zY0$OL3Qu9dN->Yt9kWWQS-m|^Xv}?g(S#!yM%*LG4gK67xFZUCFq$>hVF9OG_5GUD z%`j;8U=hN2=}B(r=8$5O_KNiVdWyq@uJ8C4-lZs@7`!P$e*Gh{j3hU7e>lLl*DDq~ z>nRRf>Uu+?M%}o;%!@Zm>uh+C;(WR_{o7kiY)t9wT~r+v`1lKVfA&QJ)dBA0H*kKE z?vw9(WWum`*;Vr}Ph0x^Q(Lq^akx|D6MKVdWS}++cN6AHCc*p)4Y$7N`jsv2Sn;iT zbUUP$VLswD9%DR>Z((oL4akUy0`7BNf62sYHVGZ?ZmlSxnDZM3V2r1X@jr1zK*rO6 zd|o7+BK=;AT`mfYXBOL~-Nxlt#I~}`H*hv7m+SEejj`hw;;W#I**>zgcn?PiAgeA4 z0(){?E~CT~xS<2NK;@(@6+kHd>>vbgMxtPgR1m75#3}B2vPIFwi4jrC)U>IgrQg6m ajr|SB5)U{l>!t?)00006Gi9w-pG3m*9Nii9DQ7Hfb00000?=$W?00009 za7bBm000XU000XU0RWnu7ytkP=1D|BR7i>KlRrVoZJI@R8Hkvr(0d+{zvq7yF*zxT;K&vQ+y zY1`S(cK&gSS5j6;zwp0qNx670IznEnLi4sI<>KvKLpTmt*)Exj^M;(SPec*2s@-z* zvz>;Vo4co?0bpgjrC}2(SU@ zGsK8%j99qfXq;+#s{e33(xt zS1IceGYlm>!vs?=bA!wd?3sk@mE}z7ETEx;XN0^70f4z-l}wJxa;7w?eQYFrxsd0ZdMW%gt;A4| zIOiTwy+l7vCowd7obB{R&R8hC!kShigNNtbBjQ{EdS>X0dcnoQBQIEE7X;}2(!RSf z7u-k;a8?7lxp#)&p=!6+*KJYMJX`z>*a5iE^ve1=@c&`)hw}~Y+A^sEbtuUI0000< KMNUMnLSTZP%ok|@ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/octillery.png b/graphics/object_events/pics/pokemon/followers/octillery.png new file mode 100644 index 0000000000000000000000000000000000000000..261f3a46af5582ab4df428f27959c6d84a9a1491 GIT binary patch literal 691 zcmV;k0!;mhP)FN3T*;%nE0RR910000000000000007)bf>00009 za7bBm000XU000XU0RWnu7ytkQDM>^@R7i>Kls}8xFdRTdu|B|cxwSQvgY37PLsEh# zU$LC4ryDF8JRXe&+1sJxEyZiGeV|WSDXFEO6<<1(c4@RE4@vJS{u6{Q<1#Me{~7VS zzbkyxJ^x|wyb!OIqG#p_ncG7Ct*}t>O`E+sPoBCDGk?IR!qN!$K)8MCo)zGEFzVuN z1!hBD5Y|@s==(30hu4C4-AxShA)g8(W%;uYXnO!3m<2Ik$4dEp$VzyJv5s!>w;*^n27s@5;{?p(lgu1BUC5D0it*tDwM3)fE? zD|~bh_bh-5xoLXsR)@SGMELfrYQNl0$db|uGnOm{aj|*mrGIKdJ{2PLVBU+3Tf!=8 zjDpByIf$!o3?4Y-6CsLdP1nL*5hfXt6=NVS{pz2y2dj6>r#ak zZg-Aza|tTPs2rL>3!QmRdrc?a?wHmj)d}2A;4k|0{V43Ri3@WNN5=~Rz_{CKv%Tku z)0Ly)+z0Njr4`m!*~C?9&g2+N%7&4;C&RD}{9=67+Vihm|Ngq^(;x6nD|Bv!<(N&J zVa}0b%;@}@0`PGdJma%B2l8QE1m^8m%F#a> ZKLHA#KTcAMl;8jW002ovPDHLkV1fZhF@pdA literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/omanyte.png b/graphics/object_events/pics/pokemon/followers/omanyte.png new file mode 100644 index 0000000000000000000000000000000000000000..c20f2bf69c123d6314df1afef1afeb622409f830 GIT binary patch literal 603 zcmV-h0;K(kP)G`Rtv1w^(F-cJX00000000007@AxX00009 za7bBm000XU000XU0RWnu7ytkP(Md!>R7i>Klrc*yK@^1-7Pd+wNUEtukhKeM$zzMx z2%;!fK1M88Uvi&fenmpUZABEte;}`ZwL(~k%#U*JX5E>&agxf)oGRa(-E(e+or$8g z)>><=@1rcsI?H&~^Q#n}A^u*%JaEBZSum7xw2b)xz8`1c$1#qgt_e_`F!RDZMNAt% z{(Z9VUtfpAK%TF*GERaOhEtu002ovPDHLkV1jj!3sL|8 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/omastar.png b/graphics/object_events/pics/pokemon/followers/omastar.png new file mode 100644 index 0000000000000000000000000000000000000000..5f32df5ec9050d8124f7dc43740668f76b1572d7 GIT binary patch literal 837 zcmV-L1G@Z)P)Kl|5_QKp4jlG#=Ump^GLLBQU6ui#--f zp&vux4wTWL18HifgpjR6O6g><;JheuV!J-H&n*__Uojq)AlBgm)Jb9(s&1NLG;7t4CO%UlrCB@LZ^ zM*h5Gpk~doDdB!*;4qf~34PdwK`(1AJ)2PHFhlCmkWzOZ9p-8b`@0>v=x3k0E)9B^ z@rH0gf7!!jf`>6iK|f&~Jc21&{t5x?!Q;zF(3!-TXA)U53&M#RHt zbeI9y-f%(QH6>UTELp#-Sm(SzsAWKKQNk_^Jwk}5wr!XB=Sfb=B`ZN*P;em*i*E9k zP|90U09jD5ZdU1tAkV@COTjMlgn=D;6PqmF3qiP5Y>J;2=VL-cG8KYlLBScT46QM9 zuw4sw8Ds_X!-owG5+$HGORE)`D`!lI<-|ge#gdaj$=dn!Dqnd-?cy#2P{8l2kAe5$ z*AF3><%;!+VZ2#8mW4J#kQbC3S1Z21zrNkB@%~^{e2tq2EgyV)MCXsULm^l|#i{J! zCa@8jl32DdmYj$VK3)AZ5!!d8;&shD-$=gPTkq~}Vkwv@HkAVsSW^FN2Ak&yub0YPbz;n7KnX&H%$nK4OmFh2US00009 za7bBm000XU000XU0RWnu7ytkRY)M2xR7i>KmAz}*Kp4ga0T0SxMB`HY2Q<(Qi7}>- zt#EaO1{YIQN+-1#BRsTV0t(3>D8hL$#oaQ?wbPn&s5@jz29t(RC>jcd&_5sqkHG{S zl0iM)hb)2#5#+q$j)w0!^gFNXd}k59HN+m8=ngf#bxCD-V2 z`=k|AERbw1A#3IGCD-T^iHU&;pk0&(1M&8KEVl zjpt7g(ZurVhz`ij)OTm#Oc>PPeXG}a93Ko$WPTXg!T^N^cuYjMlPB)ltF-B+=k0a| zjutbhG~RoSx5i*4Vo`op0|gK zoJwwSB603ssQ?3j$8<$`7Qm!LCam2zMB=u1NgH}l_nhcKYU;)8UPc!N6GWsZK%)WT z+bOHi2!P0syb&fYA%4u6ff+SOG*fypqwC72i-{ytZJ6)|RL)EsC=u;1fR zJU&;g6s-xDpju}y%?Kw4=L3xu+m#G2NBi~I)Q)s2dYY{}; zz;sFoz(FP8dbUG}TJvGzXNahL`UW*X?Q{qLg(fxlA|lG1Na(c^ev;DKW#D>(5p;y?_v zK7X8^J284Vqb&5?lK+r3U_|VlPunMMj~cjbf0b`4B{If|^`fGLiOJr2V%kc~1T)?h?*x!cNiG0{g%=Y~?$VWBULtGl(eBjmH-N+y?PlKdL2@CJ-% ztYh|nBGh9BBylT?&%?*Sz~)yURmbDvZ%)K2s`EvhC{{wFwL=WPN>>yoy0q{_!^x6+ kcJB)L21>@)&$*fU1Ixed$&Iw|UjP6A07*qoM6N<$f~g|XfB*mh literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/persian.png b/graphics/object_events/pics/pokemon/followers/persian.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec83aea565c1bc8ae09d9bfaf72a42c249cd621 GIT binary patch literal 717 zcmV;;0y6!HP)En`N64q@!5fqX;GnpX+b$L000000000000000eBX&_00009 za7bBm000XU000XU0RWnu7ytkQLrFwIR7i>Km9fs#Fc8Nhd*lTeqZla>U7~o11sg)5 zkHC(Qy3!yyjE!6Q{|4yOx6zHU%O}*A!zN9A4sz)bCb&vff3kh|zw@1&W&iD8HCZq1 zP)5jMmi5npNHX8AmrcPrj3jeZ%cj5~Vuyk+TqD6|4kLbccDL@nQhbly4DbY@yUOM% zzQ@Yp2A3GzCpet*9VV;U?oyC8DtikHou~NE#(RjUFD0rj5PJ(?|0c-^r)0KTcYqe% z1%#z3xOG~Qh}q=mGX4`QGF!?Wprh8#c)lL-N{_#$@t?Q~!^#RsH56HjeL_H&;MZR- z%J(Mb5MXt7ZMQn-DbAFWtY`*=IVLGDOw8fL>fwap$77!2Uy{kCN37tb_}8*Ef!z&r zlEH&J@P!75IpapgP2fs6@p~slNOvWCR6Mdm&VwZO%^d%>cZs?{eY11oJVVR*bQ}(d0(kGfakFUtkr{8Y%fpK#PL&A zu7P)Xn%k&ewQ==L){R}vLaLTABVZoq%|!&za{8vtUz&H zXI30veq*2>$?o7Yw&La@r^^M)o1Fjd^RL)X>ERSMf4=7^00000NkvXXu0mjfjC)Go literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/phanpy.png b/graphics/object_events/pics/pokemon/followers/phanpy.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f9fb8f3bfdc2b059f5db81af0507ae2fc033bd GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*vQDpsA!qF^W@D= zM#jL#jWZP$fByX0x$)vfLqnh{G*B1Dp9B=*EbxddW?o@Ehdg**1G^}Kmk&6)Yu z(dd7d4x86M_g8Nbm^1|hOuSEd&q!U^eX}mVC+7T_7Yc&LidQ01vu{px%e0H;6u$QF zm}r#T=cU{+rHKm9E+5HwcK@@>Vy??JWlJw!-IXJIf0s?e=I)!mHapt9)+hb?Yg)Ff z<+6Tq*{+N7$M$sDohyqz&e47NaJK>T3hPZLf}I!N`)>38F;AG_vjaN~@)?dhobjs+ zmbGi&)A?Cs$C)Xf0>A6-DIE#!J$+n#Dt)|c-p(6k%K5hY zL-&068};$io8XMMkLS)3N~!2Nu}tjOz5QJ4TJ^T=(@%ZjZTY+8xWw(svV}L)BpNRC pJi4v9B0>D>jgMc~EbaS$k^istmK4VlhBu%f_jL7hS?83{1OUv>$5j9T literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/pichu.png b/graphics/object_events/pics/pokemon/followers/pichu.png new file mode 100644 index 0000000000000000000000000000000000000000..67d6c4b6d79f1bd90c14f672cac2d3526952263c GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*f_D$GB7akVdX+Y zLqkSJ#>7a?gDV{m26n!D`Sa(^Oh-pYpjtR^WyvuDaySb-B8wRqxP?KOkzv*x2?hp6 zcTX3`5RcBcSN3}!b`W9zAYCPUr+LBb3;P{d+}qPGKK=7iNyWR>tTD&ww!>W3kNX9B z+~d>^>g=sQ=dJPO(+Ad`9Z#h>YCaX+KQPgyL(#d7N75)ooS}Nsf`2Kuo~s#UmA^{0 z{2E<)<=eenf#VB<9dg$wUn{t-w`3c)!FKnR5z?#UjMGI+qV6@ znSA6#$Zw-pRz?m-_+LC{K63h!=90Wgw^%J+KNq=wQFlq6kXXcmR|T;rEOZ65)7|bq z`Ns1(_~`F@-!hMR_Eo(t2{fO$KL5v^rz~HaK2{XZJ3B|RRQNvkf!7bR z+phl5apKOT=SGoT*VxjE8J{pt+854LXSh80m+{~0HOz5YSKqt!=}iI!x~Hq3%Q~lo FCIBEw%W41s literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/pidgeot.png b/graphics/object_events/pics/pokemon/followers/pidgeot.png new file mode 100644 index 0000000000000000000000000000000000000000..cdcdce3cdd81eb872d5065201498aebbdb7f3727 GIT binary patch literal 1177 zcmV;K1ZMk*P)G|=|arwb9Q8^jmadF8>A)%q6G2&_w00009 za7bBm000V|000V|0Vb6__5c6`4@pEpR7i=vmN9GOMi_=w2(FoC$#uK9y)F`N1pAK+zfSr!7$C4WH1Ori41bXmkPxDi+CIA*aBy7gFTQrbnpkRtY$sZwM# z-^^&_i!U6(nZ}Yv`kwcFzZuUujvRLJd%CDz@H?nZ{r z`-Whl?rj}k=lL5Of!2dN!0v6G_ur}~=oA#T*Y7Ll{XFaSdX`EH0IC3B6beC^2Bge5 zDm7r#Q7r3o&MlP}>%pbEtNxe6WTle#w z0a-;4`!gOSa7{F)Qt_Hk{nR0YSC~FlLQwo4y{$?9-esS3WyjB2&=S(|7ClG-E zth3tJ5s?u%LIG*!mE!9ug*VpytiE=-TW3=Dvzz1l0cXzyV2`PY2q~naipYpSaWNs@ zN&yDfdz}V!0Vz&&WEGYfi>MC1$POmZ@l8rd(g61fIcXx2iak+(0c&cVi>W(+=&yeE zOQakC;I#yRg9-rf6~ctX(vbixwc>(!m_pTh=Vn5VL%TjIe){9>yM3k{1PmOZSUC`Y z;_-zBP>~S;iPS6=7vfz2Jo=Qs6jL2S#lQP)=TBJlh~gjtKox^1MB)apMlHS)Y^!q;OME`xl%D{64H`g`m<=l#N*rm#xz~f znF3I}gvd%v6`=TDlz4Hb7oWQ?9Yw8T(GG0(6#$OC`bxcDCF2F9>8#QjFG&*_DHpJF zs*~cIfDFGb&FXfgqqZO=qJFD*vl0m%?{06I?(rU`6#J^nE?ovqWN`@woa)pWpLu17 zUKxONWC5tC-zrA4W)&6Nt4j@VON^Icr87>4O=O1)m4N`b;(v`}0i+|-#Ek%8&nOoA zN-k5r)d1#xi}4R3(h)>u6WLN{ERL0fZG9WcqXvd_WB_Q9VvLPq2l>LFm{vyuS}^n^ zijG)Y03tKrpE}Xi!LMO^0)wM=aQuACjbZ^125mlTekpLL1wdpLz=_0?v;fkPP5812 zOdnzbfM?e1Mn5+NAhPyzHP6fw>BuVKxb_|LDPDaL0FgN#7*Q17KZ#~^(E+mVU(o!K rKjpfBboTFW{g+Xs;ll!)$Xxvme`|!V|7a@-00000NkvXXu0mjf8!{AX literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/pidgeotto.png b/graphics/object_events/pics/pokemon/followers/pidgeotto.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf9865eba7d3c18059768afe3ca99a4c408394f GIT binary patch literal 912 zcmV;B18@9^P)FN35adGj{aq)@a$w?uhA)&#UK>+~)u~8ua0000000000F2s+r00009 za7bBm000V|000V|0Vb6__5c6_21!IgR7i>KmA`A-KorLhZYr7%Z?3kCU1W|JV{7Y} z(HI1of{CE=pW#KtW1*(aR18PBXmBu1O{7H#LXqAd)syarlv7#=B%Si`p!=cs{eIrP zlM#B0w|J?*-fIi2UoaV+Juznq*hKUh`SIy_e{MauC#>PWN@zJg4fcJ3*b=aaCTokZ zOH@0?)HuM4O`7%vf=3o@qDc^2>z$!+jD0W@r{~8wwizZtD^QnT5*eF#5X=W%_YILc zr^YdK1dj2hN6;1UJx%26IXqaj0(hzR*ALopR+!~Qyy>4oS72J`1f`yHieO%K1f-xA zs2xM94*>_8tfe&q3nPF-Bk-_PbF(5ouk?m7^JK}ygL0g~!386b<~;#iEasXK^W2jH zqjIO0Vd58h!6OM%*P<(8omc(*sYYewX~(xES7y-m=EI0QM!F0W0&*RvBPg&|98AFZ5febd_hP^^Wjn< zxHZwR0YKx3C5M92B4b>3ijy^hkQ&FpY3taZ5%9sBiD*mWO~WvZywOnB$VnTbN+!T; zm7<@QmwP7-Ri`+jT%hwKhg|@jw2tY_g`$|4ujBYfg=RdAZagPva+A{#>2I*OqWE}y zeQ2IkPC;aDHo6bRDYlLU5)@whhjO>tBWIibxLF z@ibHfKliHMa^!hSY)!n&-rGxqR^5)|Wp!6w=im41(gp=)A9va0*d)^<+FvKeO!u>O z(djDv^z2)scjfC3ih%a=b5 z4Gn)@44heL$;ilfGSYIQr6f=l8u%jr*aaxWS>O>_%)r1k7lawrrrLgEU|^i%>EamT z(fRi3LBAFQ0fq~00+##}pK7^G*Z;6j=Afctpti&-4kU|4US!#=Fn%IdA!2>b4{!F@gX1{CQ k{PJT`Kgyo5|1;XhkfE`%ZVlHpMNoWty85}Sb4q9e0BA_*>Hq)$ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/piloswine.png b/graphics/object_events/pics/pokemon/followers/piloswine.png new file mode 100644 index 0000000000000000000000000000000000000000..00942dede2d2e0867ce1b4a9bba04c1ae38a6494 GIT binary patch literal 640 zcmV-`0)PF9P)4~A~>G_#yL6Ipz000000000000000->Jj<00009 za7bBm000XU000XU0RWnu7ytkP_DMuRR7i>K)V*%oFc1fD4&(#SP!~B;_SK@NYybaWTCa&RY=l{_l1*TntRGWO~JO~U8 zfp)@j!Z_v-$fKT3IWIRLTEVH&&4lp^^7JVhw+V!SRIkCn%MJ3V4OH%61U83qP1msx z3~hEq!@)K8U5>j_Ht;xVoIqfz-PNJnK)Ir;SauDDCbiuXfyVsh2L!HsU}#fyV{Tee zb}Gk>_9+A=85;Aa=lr-f8|nhR58X4UE2(u=iwWbz25v@u`&{KYHM@5H+I!y(lnDLv zS5vzYL*vA5iEA+2BK-Md#q`!s?7j63SabF5&(r;`IjrFQP4B(Gu>ikC|Hy`e_ zkovSmLnrG%DPIXBk+<-@s5Q_1~AqBXMtHxE0lG*_E*e`}@ptapsQK8ouH z=@tmLWaR<4K?@G;q;Bn;R&^S>O>_%)r1c48n{Iv*t)JFfdAax;Tb- zbiSRqG3&5_h->r53!!ndE{ZMtc5CT`vq3IvZ2t<1H*VS{G3k7s4(q2sM4Myvn`#;5AdPxo_97 z2?hPi(O(eHY1qAeT93M6ruBpi8Ap~R@V78_Z~G%&8!q~LVe8XN=NGU$oq44DU&HR+ zJyl&Dm29mG&WQ)Ot{EQK_2svJ@fB0eH%Gr60qUyw@N~oGFlEQ=n_sftF-P3EmG%lK zx>uTIjpe#+f0B)(E*?6#)!@y0C!3DQ|Dr(#D>F5&EsvNUbpF+%jKnqkPx@S&noO_n zXL}#EHh-7@#(xt}dwn|oPNdpG_%2aq-DX0~Kdr00009 za7bBm000XU000XU0RWnu7ytkQWl2OqR7i>Kls||QK^VnX7|23wgbP?)Wp({*G{vzb z>;$)14#K$*B%F=yiN!&RfGk|}0^xG4jW%8(2SN%#A&syJT(P7Ov9yVL0d+bdr8BdC zX1>WKQ9-MGRes;gdvE^?YZ&WU&wBpXDFRiUT~}x9M2WFuO3jk|B|FPkZ?KGJrVdl(-V&M z!|Ag#ie;eA+z?jxY}G=Qv00000n?{iC00009 za7bBm000XU000XU0RWnu7ytkPgh@m}R7i>Kkuht7Kp2Lz?!=U)bn~5jzL)QP@6JxA zRjXF5TD7WVny0gAD4xRk3}f?DHnDEVo?dI{VkYA>K78v+mdLrrSf2id$4a@%e=X=m zdEi+B7O@8q0dQHE3u(L6von}B@`xS+E5<3!fO{_v3%u0>2m~$*`NHC6{rWhZHnR803Pe9$ zX27U_%`WF!Vc~Hu3t{1o(ho5}Vb7=0kW@@q0Wf;#V@%vK54bGknm;AUm)p!vundXl z$9`6D|H>!Cs{SeGP`m(J2+uEL_Xx+9T;OejJ@9?#6W6Ic&T@XIJ9)pD8O@BGO|Y8^ zY{yo?DA|ivjd>ukZCe~LB!=wIM1Laqb5A}lntN(K3;bbp%tz{ZYlDB)Hvmb|;m5a3 QkN^Mx07*qoM6N<$f`G~Bm;e9( literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/poochyena.png b/graphics/object_events/pics/pokemon/followers/poochyena.png new file mode 100644 index 0000000000000000000000000000000000000000..2c92a6b8f4cb1be745e76dc2b9fe5145832f5ec4 GIT binary patch literal 551 zcmV+?0@(eDP)JNR7i>K)Im$bFc=2lu(C^UacdB73cIHUO6foF zrYoECC}E-WEO^#o3B3t=uM9`&uQYAhmVENm0X|Y@%?lHf|p@@z$x53yE9F_Jg_6 z!l{F93z<@Z#9b(p4Pw8L?JYg-54cU#Uchn3h8gBsMN3YOM-JT=GUiU;I@T)Fn3wEv znfT>l5V}psD5D&AtW6O6lqt5W<$f5tFZ`szJIC$mLfcP{}}&cL!4gj5x~ zdVkNL`xS}%)L9{LTxY80h{Z0{Wmz^2;;!&Tgs+xI#@g9I4R&B#T$*RfS}$~4c#&Ms zZO@bB%(AB=>5Q);X*JBw7f#`ovHM3G&AI11w}OBPBjJum!Wti?_3S6+|&TrxRei!~%egK(JzTgV%)2;vj002ovPDHLkV1h|x_yYg{ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/porygon.png b/graphics/object_events/pics/pokemon/followers/porygon.png new file mode 100644 index 0000000000000000000000000000000000000000..04115d119ac348ca23b89893617dd8e9fe11fec2 GIT binary patch literal 612 zcmV-q0-ODbP)1mG>(S!C@IOp}EP?L5TnW00000$endD00009 za7bBm000XU000XU0RWnu7ytkP+DSw~R7i>KlDkR+K@^6kShm?}LGu84g$RmOB9oxI z+U-EV6t0(5BG!|P-a6YGx@U$$^usVw4_-&5Rdg1(arqJR-!0Ap+oN0nC z=e!1Hbm7xLh#~Beup7EOgof`{Bv z8+=h91trM6!WQb?f(v@nW~>DEDK1Qf>L3#Z$L$PYC4}7bPv)?1mrh2&pD_FYGxTk{ zdJ9+zA0fAb1H@7Qcy}Rej=;Wzfsh#CS~lx60V^ToB4emm!cR7x(1t&m&ho-OrD&lp y)O#!>&NY1TuS}@A1&*jeDdHb`iD;kB|Cx75GVvEr?p{{_0000KlRZnrP!xs_mt=HMx^xiQM2Di8TsyS( z4n-3vLct~Ltst)c01>wibrT%@1yXb<4#q4(9a@qi$o((gen{S%8ZB-@UXtPAoSf(6 zizrW?JbC_4+U>trS7~W?&h-YZ-xp^;R96^4##QJ1q?Xlh3Lzv`mxR9zQ1yurXSJ;U zwUl5<_}c&?PpV6z@B3NhMw~ukH7!&*coO2{E?ekHl?XWz+I!W>V31Uog(`;wDF^** z;j$oMW)0u^QvoaK!UfL-hez9e5Tu1hH}c-KJBqwSXgQ}3>XF!?E?n?@!2Rv(4h%>O zso4lG0gY}W1femtvEkRixiH~r_{)&vfRvC-H*5h?)76Bg-y-&0(1i(4JM2IkkP?zv zFSLGOQ^u|Oda}_>2&{gM-5}Nmq=dd@>2=G(`mvO85jL6$aYN=uUR**}LSVxmJ8>v{kH!nzM6p|hEigtiJ+C;8za9%DT zONq=H)q=LLVib}aaK4KhhP|Q-%!(z}D1KIqEP)KlQE0iFcilH&Ty+CQ^uQa49J(km%+wL z3dUQ~Phg|A*khp-I+ao~T({EBA)d5e2o$GNf|s~UuVeFF`Xu=|wl6v8m2P>Hf0F(C zKRqRcoa2ADmg0mJILw`H}JHKmzA*1Qn**|f4@JM zl@>xEvRIVDY#(jv0d-zGy{v+~G^zItPbBN)k-{Of5oA{DTxM)cfv z;6f7Fa>)C5K}`nV)RaetjJ7W>?Le zYhf9lK(l0D?ti+x{kme5MzID^@M$(a&FeL&^>v zOo)f(n73ajoXHsx#_+WnIp1Vs_}rwZ zdz9MZAWW_8);dUh&A4ySv~~bEpv}C7pD1_d@REA01^S}zIaYli*scOQX4>>UTwvs3 kwF4j7#~;J#h5uN80Nb6+hDsII1ljwEP)G>HsNhxu8`O#syF);xF0RR91soTi100009 za7bBm000XU000XU0RWnu7ytkRoJmAMR7i>KmCbA0NEpUNU|=ywARpR8OGtFdp-T^a zo3KcmoF+x27!0vNZE#s|lfxDYX%D`YJ&a&jP@$KeOGQi9*`8d7P_cXIp%=G=+6J?r z;y5(@IOuQajAYM@#ikItJrs5@*pJ5Zd!BjcLz?z~`(B&=tqp4BZ*1UwwZZhv+@bw@jK^#avp}%7sC=Lj#2F54ob?xMMU~Y>sV2p#F1jfC!%WI`rsajIG zrX(&vebBAj5?7rDqH^vWGT@~(EP;A$$8nz4j!j$uSO%CFpx@ABdSilDR?EwQZ=9#$ z1^KYB0gK>VRTD3ROsr`ku=YS0c;gk%c1l_EYNcs|LJKPE@LcGf7Sz@udLa5a4-|u= z7QpUsEIgmO>FiNvP(`G|4NzGHR#YIkfm+l2_S`?k4f;Zw1ikZepetAfLemsGAmDVzDBLc=C4?5Uzu4_wz&1O?Lr1{HXyz zY;!3uL<2Z*MN{-Z(RzRh#-ud4OIXo)bF+XUEJ3%$4SsT~nPGj|Ve+DwfM(e2WZH_s z64OgUR|nK1u1EXh0cb!xOe-{7gV6b-o}LpYD^UTS-_N9+!OX`)fR7{XIQ_xjBeYG2 zA^>H2?`|gke0AmQ3l4mSOX&D_?eX1Y z{MdQfVEl+uD}6BPbQ-rI+M~Wa%I7=q^XoZjFw1pOmh32MN4xT}V+XA*51NsfryJX6 zqR3pxA|wZ9qhUrxOAOEslFsXcq15wS&nf-IWMr!ST+4pTEL!uXSsWW^GuC|3H0STg z0mdj9sqc^Xw~|pq0U8Pa$hL4tGaABRrZGEYP|Mn$3|ZJtEK3FCo5A|N@WRUXCu5X& g#M8`t3Gg4b&zrV|mCx|>K>z>%07*qoM6N<$f?`tg6951J literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/qwilfish.png b/graphics/object_events/pics/pokemon/followers/qwilfish.png new file mode 100644 index 0000000000000000000000000000000000000000..97f77749593a37487ac50f3b208af8ed134cecdf GIT binary patch literal 633 zcmV-<0*3vGP)K)iF!MKokJrgK~%HREjQc4@`wPqy#!S z7QrnIv=r(PQ$2?`Iq2Xbf>T#P&>tWj4K!4)lcJ0HQQoyp?=I$wgAPg`6#A9id%2g_ z3qs3S#xnj-;Fj)|_rnD`BP}ED-~4ca=96AvbN#OsSll8KP)Y)`zY%z-yQ|eB7C;!7 z{f(e>kqPh!jLuEq7xNjV08~z9-pCgTw~)!chqVpojc_6sM4rin3e&*gR>*ucVctAK zvA{BV(h;R6nsGbkyO9a=o+cD6v5a=7EpZEtZJ=PwM>e-|I1mW^Ela&a-L<$6FtRJf z_9s`%yPFwznd~u$1!@7^B_@_Ir_dziSI0w-%$`Z+?)YOq`gQvZpc?l~MiGr|nxH}x zo41Q~S`ixts#8|ZR+KiXCjjSXhfcA1LdHWapm>E(ggxp%rR-z!%i7H4vMk_+7taqD zmg^LoH$6&{q#_H{qA1EdV3#&8N3(>P581lx@e$k)V9zlbxhrkUn-38;4v(*99^9RX z?Kn+V9;znte}hW(#{O-i=a|gnU`Ia;U*58>tB;qAje7_;H$Bx_kXoZr3Cvzp0G+06 zoW9Gs&#V=ArF1tin;+-fdVypw@sO#H2 TR1qMv00000NkvXXu0mjf@!=D{ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/raichu.png b/graphics/object_events/pics/pokemon/followers/raichu.png new file mode 100644 index 0000000000000000000000000000000000000000..1887d9a74621bb5f563d79e33fe53b5784c7b1a6 GIT binary patch literal 805 zcmV+=1KRwFP)Ct&p000009&AD100009 za7bBm000V|000V|0Vb6__5c6^n@L1LR7i>Kl`(4@F&Ku$70eA<)(+)8N66H_W#gL?E3ItlH|4Sv^Njf_@+#1>` z@8IK+zVCfc(jf!ztYAF#w# z!MK1KJ@-7EGgRzlSekn%R}4z`6@(7*{=nLv&wrJR86s5n z{65q3g7wW&3VO)Nxs`%>&sho(*KdAJ9%nx{kCWa0!hEuu`@eaQ%L{&8J^&Wwfk(33 jKcDy9rO8JF|4zRF=C)~SaP%|M00000NkvXXu0mjfUC(7L literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/raikou.png b/graphics/object_events/pics/pokemon/followers/raikou.png new file mode 100644 index 0000000000000000000000000000000000000000..9f092fbc5170a10abf0ac75d1cbc1f89d409b48a GIT binary patch literal 1010 zcmVFN3Dxj~^>xk*`BaXFD$K`A+5VVTLvBKjg@00009 za7bBm000XU000XU0RWnu7ytkRXh}ptR7i>K)<0<5N*Dm}!w@tW51m{S0>-5Xf|foF z3TQQWE7>x7Y~OaaQodML78QzuP!ZQ?FYg4JMO;kPUn+@(9ig>sCC+p`pL0R=8yWRQ6nAFe#B3X4k1GRp_Gm6 zmAyib_&ZTs?h`?sGmW@|sUab@ANq!DYlH_^U1F9ICr_t^0wqTwxNW92N6NdwB@f5q8nOJ4P$e6tg+C6o6FJ*b*@`%H9Yw?}qxuSQ zge==E*OaTNVP%I>wk6RmZNwGJ$g&ZiPgr(iECGn`)A0?3T25UTf7t*yqRcRYi7|B5 zMY`p(5rFRbkR3|Nbx}|W(O$?5gYOyO@S1}TOHP8O)9D{(xGn-AWTD8_=6u};sUvJ) z=f3E;AVQu`6Z+m)#PE7S=47#0Ra*zY>(Nuu$jjic==*p@XTE>u``#2)8>s|Tq7qzb zPWSJ+%COT>$)6!E__tuYg)8I6@4fau8}X8^P9OYNVx;XmWd6I5UBtXO@2=ZB)d)RR zCn!0@al((fuAh9!3KWe%aA2eH*_S||bYtt#1;ya$z0#aME;`tbx6b}~)9bzUPFL0D z=0kTf(S{3@Sfg}f>vv#2H^yttb>9WJ=>B#MiWGX?-oHU|HOuCf!1wz{T3TQUlzi;t zFDCZY|3RP4^@%= z^ZX$9t|_{qSW-Vcvfig&Q;M;7`k`_lnKa=Au5uJNlas;81g;rwD6(|_cOYg3BFeFM z&hABdWYRdVbQHI618_6CX1LL`CGcRqmwHVpCqC@M$ZVPC<|mvOTD0R+R)Cu|5!cGu zq<)rpG_xe-(oA=JJF`H%G?NAF9Ny08>(R8&6Vn-zY2!k|fqj{FMD2XRk-2Nzt?ZG0 zF`LwB0lJtbeKU?|mNdg2v}Rd>DB)O2&m2YVe8Kv|jQU^LL}6+@P5sFnE>~ zh!S!bvIMl9FBpv<7Ygj+d_iRoZ$Hujuhvx8*@Rs3s=g>8Vep_lfd;kCd07*qoM6N<$g6ZJo(f|Me literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/raticate.png b/graphics/object_events/pics/pokemon/followers/raticate.png new file mode 100644 index 0000000000000000000000000000000000000000..691a58a6611b0599635a8626cc8da6a539bd01ef GIT binary patch literal 589 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*!Xaw<-?OJBON7o zt}J}{@@J=E<;jyLHzry#GBN^Hp#eS1J4xx2M2|?OPwuxWVQe zczdC!dC-#2P48>X>h|7?Ex-FU|4HI*r#g#-nzbKd&wfb#$ISS|Nct0pTFd^t59%F4 z=C|7fpNM?Ce*LfQvDUdc(p4AOIUcmhx*Ren-<10z_<_^WkL=$v=gzq|wL$o>t^R_o zUB_9T{`#gXrrM^l=A0*#m)sV-Tryz&={Y!1I~ zaDR*xTb0Rh!F^^o@8PzUIYAlBhqV}74t=c5v#JxTf3&J#W8w`N#r>fkatrx4JQQbG zs(f?9*-aLLZJ!Sv-Ie%x?%5-z8cQC2P-IM4U6z+Kjmx#Yb8@NkY;%Uy%NN|9e>Ug| zbArR18mS5WqSFmLINwJ|-qPt$_|){GtZ%LkZ>is+X{Sr9~j@%+z;-R6fr{WWYT7Tf3* zedoxr-Kk4cr`^np^e4cx%OlBA*E)o(>$hfPd>7EbGz@g@EKS1wlmlH Z&bR!r&(inK15o;4@O1TaS?83{1OV2E{$2n8 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/rattata.png b/graphics/object_events/pics/pokemon/followers/rattata.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b389ef618ba5fd8fc4ea2e642fb665b670f19c GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*toDWaAo67OT);Q zH#hDCvTojdXsMVPIrHVqpNx!*K!wO4<+z3ekk47*5n0T@z%>_y8P%rReq&%@oagD{ z7~;|ScFM-QW&?pX-Mh!aQcqWeNliJqb@HjRQu7otr}s%3e-lh_?0L&A5TJY{Sj^e$ zUB-zC%YxYb3~Dyk&Nr+VNLsP5P3qPEDS}#^fyjBmhtJdsFQGPlCI#&1==Otdf(YyN*i^(vx2*;)BS^pVZ0^b<>#`fphALu1XoX?12?e(Yhz?hH~B>tyN*#5Vso zd${VM%8DRYmcGX2LN!MMzHXlW`#98aMs~>%g;!!SFhf7`0Emd7*3tr zmpkRl^<8CdmK7cDd=XN2Lw99C$qn0pgXxj`x;FD<$xnS6Yb_aKsrCKwI)@6)!*{$_ n22A-{I`8hKa|z3D&%Y+V_;*W=?+tNTP;`2_`njxgN@xNA(B9~F literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/rayquaza.png b/graphics/object_events/pics/pokemon/followers/rayquaza.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1a1e547c83d3c15f85bc2122ae524d97a9049b GIT binary patch literal 1648 zcmV-$29NoPP)*xp6TuG4aVU$=UIl;gP|iDUo>@$tfujK^a*Q2>}5C>lL=V00009 za7bBm000XU000XU0RWnu7ytkT=1D|BR7i<^md$G%M;eFg zzaW?$8sDsD#CCiNmK&#cFWx}{N8m+=-9xUyx%m)G29kimEaZ?Jg781!gVnKRVo`3b z84P>ysJlGse9`l!K6+*}BPERx^K`%Ud#b9dtD6vt88OG?$NVw9fOyvBO#l4}-*pH9 zASAz=&BRTA*owEw`TyUWi9Ua*|I3Wz*_k}BWykAe;k$o5Car5{3T*{l3>|WQ%?x2; zwk$KsD#03^;r^kiRCsXf>hAdLywFxWzZKqoJo5JV%!o8o$Y`y6tf%h;r@9+2Ma^X9 z&Po_=10Oxg*?L-opc>JmM?Zb(7?zwv&Q^Ox48fG)K98fO)E%OY&Kj+1Y1A!j}Lxnt>4?d)(AgPldkT*6%H+v zg)f$tbr->tX5miRJQNLY4?H0xqU2L9Q;rBmpwPf}p@dM^8z`M8a`Lnhw!*T!`Pg6YpcIxZ2q`DRecT+mC>w@0T?tPzi>q z@8{`}-ZN<9X&r#8)!E=_N+wJ}*2>cC6iD*X_4?84eax4_4J|CS@HMs!$E+TuBgADm z+Mt)nl$B7i3XHFS+8&@xODoVkQbvKo&Jm4<@Ba{t2F3NIu&#tO(!$X|3+v~uz+dYH zf0=mi$(s>mmPfFsgqn}N&bRHd;UMzlHx;Pa_cY6r@1{m@J>r8wQAZN7?XL`LVa4aX zX4@^?kq|Fsw4YqEY=xSSJJ-H#`GFCLC{`;tb_IzW>|>HD z) zT`pr-b?G~~Vl8z3Qz%w};5AV_vue?$NGdi$&6K?k`q;)dKV$jeL27uYxV-c!K7XzR z^qnHkW9YhZR|WQ5>Frm1GvSJLVA9M=As*W2(r_g-JL?ep!*H1+70)59xYbEewdr{o zQGq0{$I>M>u>9mw#c%$RDyA}yl7I?vV3&ktG7(ZIp#3~dnra{I^-|5F02V(4KclOw zN?-zOUEpyQm|?}prD9Tu{U?KgNG{qHG3K$5yvgWV5&J4nZf&9F;St0))V_)@kmpW`pb0<7T@Vxz!1|$l}O{%TT?sXcw{9P5^@V zG%u{MIQ*OMjs^3q>w(pxHh4vMENC#d36RF)8g@?FARv!#rx_q2g@d<&R zHre(>noW$ro9d-7`A#cEvf7JaZz`BFy}wx>sO^8!xMEIb1y_V<9G(=YN98Y*F$#eD zo?yXQELYSE5ca2OmS?^WzyC(Pq7yb2kl()NHxv}B->FJ3nNnzQ^ae1lH0RaI)X_1k+;mPs&000000000000000>|J~&00009 za7bBm000XU000XU0RWnu7ytkQ$Vo&&R7i>K*2_-YKokbx*;pE0V~|zHyD|c#=mWAG5?d!U=B;^k_gYw4Lje+a}FKC~(8ca^G zA|EE*&F;&TAD)8zPBt6I^@z*1IJ;`{$wHU=rtEHZzk`9y>nsb@tQIv&xe#Z~p1wQk zv+D+b;tLTQB61r{2n`(mB*Zy1SOb_I^=9C2w6@!6V_#D=8-yHn(#c}%2j!mEodrclxt9f6jFn~>Ky?hfQ;snZI}SZo znuT}^gA@Z}&nTZt<+x%DG=f`oK?Ew0covlQdv0Fv0{xH|Bm*4^gKuD)^foKdS_YyS zTUiA{G{*C1Ss<}Ox3C-f7!X=OZ!VOnKUACUlfuRSzRy(0voa42%%~UxeTbrH=I4O~ zmd>7Y%X5Rwf$RDCjV)cY4A^mr%prsoW1w1uY9HLyqVnbZ$vkag$CY;&+Jp6X8kq5H zDwf;wxAw5(YM`f9zgB=+0~f5pwx-x|HIP=%%}0Qb(^b literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/regirock.png b/graphics/object_events/pics/pokemon/followers/regirock.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7985681f636f1c9bdb9ae8546f50b28beccc19 GIT binary patch literal 1074 zcmV-21kL-2P)Oqf*~zh4IkBOUVJRU10000000000ziMr400009 za7bBm000XU000XU0RWnu7ytkRs7XXYR7i>KmN9SJMi@Xp9AIeaLc%f!Eyt5-s+N|7 zNedKQq+T2p$sjRiwRDl{oDsA`EXd%HPRXJcSqcPbXm8e{c#ELa2)L0*fExT!{f?3- zQW4uUK)0M0zN7RW#XAB7_&h$3j~j&k0~3}%_^&KSHOvQc+!!r#wdeFx_+JB6`~hKj zHMM8-Qy73TJER$7p2@Qbg}Q%Ep*DV6$l|9W#+kRjH)>B;{x#koT~hL$@3&xo@*6GS z10jkSVAns-1=e_fG@|6K?@ysNnhQ3tV0--n2Kjf@Q6`XQ5>1{{^QHgt584=w!vgM4 zE{-=dj=z4*2l7m;C<yg-2&+XD|AZ9fh0u z;OB2_(b~uW-@kfwUdsg5n8dLiibuXL`mr5{1$;k_4>mIp;rspT(Kvnl))*RbsEZ%* z(_?W=3mEUldt`>p8Y`CPiFou?)f!u28pyMJW`?-ygx~}D^lapvh*jTj4_JW0`gFx? zF631!jx&KA1G&=bGxQx%n1Dom?o~d6EQzlusm+KWDsQ+pEAD zC&Ga9%geF(Ylf{nC&F$euq;YCqK&((=Rh6#YbOaN z!fu7tH43^S0}2IGvXcbSXlg^o(oHjLnwp2)PPc8(*(-DYt>u6&9>SLBVTp6=_70Ol zDXhPlPA;w-Fx&xKfRW1V2g@Ed2Y52|tbAZR0A-Abjb+M&HW6Hi1Iez5C#Xf zl;vV4WA~n-tL;o+ZNi~oc+7QBn117~<2vRkg~e7dT-I??p$s}5$8eW{reYYmfSiEr z(B*HXa4`&zE+*%r>ruCz3S|)4^x8|G>MH3bnondA7VjT=_6lk4r6f5_g-I~?_Ch<_ s03h>qJ&QTZ2ZtYbe!kj8`2UW-0mRGmqRg=|ga7~l07*qoM6N<$f)!`#hX4Qo literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/registeel.png b/graphics/object_events/pics/pokemon/followers/registeel.png new file mode 100644 index 0000000000000000000000000000000000000000..ad188426fe12e4774614c328b06cdfe9c5df8dfe GIT binary patch literal 845 zcmV-T1G4;yP)K)W2)nKoke?BOKn(5sJZ+RpVq$FW9AC zBw0}e?i5P#Xgi7`(4@vhflhLSbNLUtXUk?Bf6i{roSdX4S0it!Z*0jW^uyboIWqtyMzm`9$7u92x{S{qc6j4a>5EER1(F5Tys~ z1MO~S!@8tbb~ZBaXrKpbumMd+eC`6QrJtn^2p%qxs7 z3W2VfHsB0b^j&&HhyV|0RTjXz<<^}Qg+MFW32%gkpB!os(irsZzFg*>vkB~9l=<0) zz@956fxHpEymyvSpc0Z-e128<+uykR8G_teqP(-Sw)stg?!uiV(XYF-OO$Tm_mTru_5Y$};< zM>ETuEzm?{~* zymR^+Cir!l7*FMwdSl-^AQi3=eOlOvW?2P8Aa3X#LqN6BSMcat;!Q(ILYUOQ!!tDr zc7ms!#5+M2_hn!Ug_Ky|@yd|MvU= X`Kgag_@>}l00000NkvXXu0mjf?s|W6 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/relicanth.png b/graphics/object_events/pics/pokemon/followers/relicanth.png new file mode 100644 index 0000000000000000000000000000000000000000..10c4c9943484b306dc773121761a78465e2b0c6e GIT binary patch literal 864 zcmV-m1E2hfP)BX#fBK!WLX000009 za7bBm000XU000XU0RWnu7ytkQ)=5M`R7i>KmN9GFKorLhAKtP!E=~py^@+GkFee?A zOi=|{GL@1hO`V}FjSM0~D6}R~pkN3lwT9v^(7BMMS+lw}Xi}#ToT1HN(>M^~&rn&m z@AL$68pu+}0}Vgj-TyB=-Fqj5?&CiGqnK$z_U=|5qZ|dCNQ3cYWPX%y3`5D30m~LJ zEUm!#QNA&XvIPu^>Kz-X@_Qhts=cX#w>MC$&_DwQNqYxP;~OKfAXm$PwTrM}sbYgi zjxzHvOye0PO0p#ZR?W~j{%9x_G=*#a^`sWd2$7OpmH?{?Fes|f0CLgKr_wlyWrP+Q z2W1MGg;2{I?jst@tkFYwbFLT1{x=&Mpm;Wx4fi>XW1~|Yc&=5ZUWCJfN8d~o&-$|J zKBF<5ymn649k)$qvXDdFCUJIj_$wqBW&J{R7ikQ?J*&S+%{zIuW%+_t=lkK8 zkU+pzJL^}*79ieyH`&pDM5S=_t63>O+?JX`J((ldGclLHE{{A5IK%tVIevd9sgv!y%6ilXcs1UTy6=yM+qm z{D5*n+Ycc)8?eHkn57j`P|}neD$M7xVe#^-b6{=Ncg>MOl!pt_onzZRKA8w&X~ewp zFv}885rx6ha?6_-7OxzqMhbq?NDs0wknAh_Q@_Fm*@#8XYY4QiFjY5IvGMw@C#*U&8o#{B(xq=gf@|?dp|6Sra z$N7L&(VTEK-1_{`x`NlWHCJj$*c-poy7t=C3Dw(pQYtua7^mlk5M%)}p@Bg!9~y*D z3r1bZKf?KZrkgZJF+=>Tv7e6zf1ZZ29B@-e$S^|)!vh>CS*(YLb4}KS3sx9io5K1w q%n)`X>)|kB=$0|lj@FN1NNl5_#0m0Gf898ZjnaL?pfsw)K000000000000000`44|u00009 za7bBm000XU000XU0RWnu7ytkP%}GQ-R7i>Kld)^UKoo~>@whc0A=a%}5jr|`Y_UP= zA_bk3szK>mGRKw%#VJck+FfY3EE0MDT;pjj_iVikg--cR`R?A`cbDW5Ql?CqGG+2u z1zZ&7sR!tqD7jc*91YB|U=gbMuL2fDp^A$`btTgecvEq4R&`IsD**5mTo?wBD0olFi{6H$`WAfon-3P;{bG567KjQWC>X;(qh}hoC)_E#x@opt_(lpV5<*u zA?Jh8iKicsc(iI^&V*cA^EXT5G?Q7pT3WfVKTDFWwHH!IUl+i}?pTOlh!ux(E=>DQ^JIaf_ zFm8zxGG{T@jMq+6uy3b)e}nEYY9su?6kmXhrD@h;X=6Qf#EqYKjYb={Xal+Jeq-z- lXnL?;Ap{lv=Uxj{J@iHV8X+1Yt%If)@T*|Avx0RcflLFwuF0000000000000005%7_R00009 za7bBm000XU000XU0RWnu7ytkQj7da6R7i>KmA!7QH7$cpUXv2;%?zT<8tpvgx0SzbS&4n@=n=#z!?{1kV>lB zuQJF66v*RjtwCyKNJ+^#nyZDW>&+^+H9!q3+yV%W2Ge%VQPY4x5MyC-E)1}V>5T=K z?6D0_jpxgF_a$2IkV;&z&V`BHEyFEe>O+Cia}N%u@x?_v4Wb@$l5=;a%lp$O@t}5VELvSRMjqvNkLS%>s1ZZocsX|g zwO`&ps=IWt580w}sOF5;4E*ZNdGi2-NPWmT$AG}Vhu4j0hY$~0V{1@1GgggB{H>99 zpxv1BoQq;lKP?KirTy+0mx4%<;gG1`j|Frxa(9H1FSYWZQbuQ7b^Tm{B#iCnp+3f? zP^2^qc$6bEBrZz3H7zLANnzk%sdsR7&2O{WQDES!>yFVc9CiZ4ik|e4gMi8e)Y65- zUK8qi=p^e{Es&~vhvn5r*|8p4Ie0XIbEJBQEQm&vM-|ewB2;{Dv=+mFrHIUWC<6)m z^~APmHt?i~Y(#qBq2pVJ%==M* z9fqL8w67_!9!&zb>Nk&2N;A6p%xK6@4&A4d+qM};K@)ikxM3xWG@$lc3QXYd4F1=DEOjyh2G~i?dNtF8+QFSO2yjpEn1)`N}`CKM=Ww UiAokZPXGV_07*qoM6N<$g5W)Bk^lez literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/roselia.png b/graphics/object_events/pics/pokemon/followers/roselia.png new file mode 100644 index 0000000000000000000000000000000000000000..5c067a5ee2452e3c03c36a7e127667700884aa72 GIT binary patch literal 623 zcmV-#0+9WQP)+~)SrIYGL2;>pIXPhwkttE3$&mm600000=ql5R00009 za7bBm000XU000XU0RWnu7ytkPZKo|#bAp~d8^l69(A+WS4ATlMw zYpDx)fYjt6y2v6yPL#o&T4)}?2JKxfQ)=kpJq0hxlELU*a*ieW?(>~Nbm*f0_S0wG zUv~&u)7rFY)22I*?+YnBZ=`;hlAXrA?S@1C$g#_?eT^)+@3PcNV*B)3&R70+WMDEVZ+!}$oO|pX|hPf zAID44$L6W9F8fTW{taW%I^S{d%+XN_7ZNlg(gToO$2b0$yaCmx@0X+n-e&*+002ov JPDHLkV1n3+BYyw@ literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sableye.png b/graphics/object_events/pics/pokemon/followers/sableye.png new file mode 100644 index 0000000000000000000000000000000000000000..97f7ccfc2d88b4fba2796be0c76c4eff16c74a6d GIT binary patch literal 554 zcmV+_0@eMAP)K)V*rMFcbw~qfK<{6BrGpu{#z*-=`#C zI)*+(CJ_p4WGyu`AX$?)J6neoJNKa~I}l5%6uJ~T_zVf3e~uK#+$fqdWy+K(|0dhZ z#_{kq3mKhELXL3l6uNFBMEcKwkr-SAo!f=3brniWVlH4C36yliT);9(_cb-@TeWy=^!Eu=BPo<4$z~#zNP9W)gH^C*pv4uKVD4 z-j?MnedS#@7P{_}$_1!HR>lGIQt84{QJ))t&yI|Ru7|>#)suRBPUC=?lnSJj)MpM0 zDU0#NcRduo&a-AY&*OlZZq#AaXMR{^Ql9^>AMS(jJ!@VbP{ z+S0aZYDR;mZ@jx_W}oZf*pY0iP1*)s?BBlfO8Cu0BCpNeI*x|XFx$q~sIXl} zY)5hBH>UiyFxwnQ{qRC^U75oSHS5Ciy9^scva$9HiL-#dr6Sggg*T-7^?BUp)-%Vg sJ5BqaKmQQQjNEpV4r31#d7ezGd?xA)!hp;Cx z7>dbpOvOS$Q+d)@>wJoAsgDYkiD>bm0Uyd<>`i$a3xV`t~F$*vq?Nndx(ESzGHHCD<*qiu%WBUMh2CuJLDsHg)Qf z9=+sdndz@Q6c?M--TCQ%{8gD%{L#RKhUtuQjM*Bn6C9C!)Z^SOG2WibtKsTw{*rTU zl~@gUp-*e$bP9P!!S1aZ(VHcY4RVZv&xFQq8T1l^9II0S18bX;XhsF@@nF6fZ&u;? zGPsTeip=>)V~puuVvu7(J#)0M$b<16T32w73lI;7tJffKOjZTslo}dq=zM38Wnzcn z08sGa9`5n(Oy3_q9qKUO3KSW`0ciA6gDlg3!;PU&$pep@UIk+Ze*};Gr|&@by-1+Q zrtg^m`*?DA1rPolGC)C-n{Lf3GojqAJI6LVb{yh$tJoqwKNp^f3tqv4)w=~8=vaqh zHMhisc8P5W#_+Oew~`5cJ6{H)xLjaybPPY-3hDj4Jp)B1L=q{b#&jtyYE?3E0u&4| zzZFaYVE&KLj6l`{Qs(IO20|D@=;R(I4v2+lSk?UE!vqF1+_;7ef(ll%GGHXn!AKN} zjDtc!$P6II@&H}JPw~O~!^bf<=GT0_6I6!C0b~qp z*8gC$o|#k}u=a$t`IhC)4QaI=(?k#rBfh!W=AaLaQC2WEd<)<2a@4nt7p+U<#7!1u z!t}!@dh+2RqlP;{Wtdju6Sq9R_I843=py4`NLTq17o^`z7p33S>18^@tWUO(u*7{q xc7n=~swykjgk(Ql@JCvd`BJ1E3ZFoqjZg1CM&9dp_FVt~002ovPDHLkV1nUvq2bx7VL>6esfhsr0U=>|*{M0{>G^qSSpfk7000000000000000ici1R00009 za7bBm000V|000V|0Vb6__5c6@e@R3^R7i>K)Ui&(Fc1LH3{i$|CxUD70o_prbAzlZ zuvN5TjoUPe*g7D@XbDBf7nBd69rBgLO=&KU-2sUKDL3_pL$!|oHtT;UZtoas8`264#FSU0pgR>KY5i|IP@ zH-K&7cA!s`SS?|@q1S2pSn$NvOX9ZFch0O1#;*&>n}(*31=H(`l)0TkfiSf@UCfaV zH+`5IsnsoSe!U%Yp65zAoZYK9BwIGE3yP1?@-t7IM%@q{Ufl@{Nk`MV0J6uMta*wZ za|Wz+0_vUMDk7J%o42h)UXI5z^6z-orq6`&0$d(c-6D3H?hWPulK9YYRF)Y@1zA}x z$w0~0v-bLWCQk#G`;@*3y{fcjUC^G_$puM}8LL^d-l?{=`?L54K|7z0_>g@#00000 LNkvXXu0mjfa=h!D literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sandslash.png b/graphics/object_events/pics/pokemon/followers/sandslash.png new file mode 100644 index 0000000000000000000000000000000000000000..7977fb8fc91d427b88177ff1eeb30954e46960e5 GIT binary patch literal 729 zcmV;~0w(>5P)EW4KSy{2MvB`-s0RaK&>G_FaDKQ}tDQSV>sX@V^iJ@sBzBqal00009 za7bBm000V|000V|0Vb6__5c6^Pf0{UR7i>K)G><_K@PSq>o}mZ6 zUtnsngRm&bJZF=9p_^)A$UYTmg*Xj9! znRxWDqq{B`;!asAqq4$SYlwQIAJs@(uY`wv#aFm0wSTuL2s_pB+NX@fgWU|8#LKmcMV)KorMM7AF>#OR-SIk~`NzHzp?! zsTg6m9bQ_ebJUfk0x|I~B$WrxC`Fb&EjsB z7yScw<+&V;S68Yy{#YBdxQx>;Xd8DkFQi-y?&d(LY81Y21S~_D z2LeoT-!U|-Gg$KxoPKAsGh3536B?1H^Orw2{+Si5nMP$krrPypx zaMkSV7E=`iW7r2)kkCZ4A5ThF8JwZu@!SY%L&Mp`td+wzjJ^6auN7M?E?~T17=;y# zGsDqjiFNicUzQ}xtYKyt^Ho)N&xi9owUWq?%q`=V3L#}Z$c&&iEExhN^+ZY)eghHC zRz?sFBg4Vi&O7%f(N{5wtOEy?)a(J)gmLauBd85a#$u#8UkG}crs>oQqM>0=F0Ejy z{10L@wgzD^Od7_6DdRmR<4O<>4Vx3oLlsztB9DzA8dhAU%&J;MiC8RHubS5E09eB! zBJz+umxJmE#4p2CSB!YrOfw;;m7s1aCZejj%8LYNjaM9uvz$2$v{-Jg`?(QBLt6AU z*F|2xvgiv~=EuGfM8lfxq(&(!a+y|h5G_eFu~`ubX>p06At3+&00000e}i@500009 za7bBm000XU000XU0RWnu7ytkR21!IgR7i>Kl|66MKp4kwIEBG`zX3>mfzBST!L55+ z8X?rdMTr$Pjl={CqlpehUQm(v08NL|A*iOZdUzusg^WiP>2%+P=lmAiy@rX2K9M5- z?wg|0MWd7{Z!u=8a)VOg6DrizgM$ChKS#Ryh{V1Z`l111;#-_c2V_ zsu|YV3LG{=Z`SoT7zCLePvGx91~02-SYsscmBNQ4+qm_)*9;89a&F zW$aXy+wNyfGCj1vq#{&-+F#lxwg_SS7yi27CZjl{!U%H@Ig0$uGY2M=~FvG9HX)sR1Dp7yAVf5n5yT@*LS#yEkhM3WKqy z8E@rZn=ga@l!iOgOi&xezc;u)34hw1JcEGRzs(yR4MIw}uo3N0Rqyfu0000K)jw<8FcbiAfi-0_5;#Y`gnbg#rCF?4 zAZR{CDQ$*MM%NSJrqV)t*+P~m(}fJZ%NDMrL%v*PTXJljlR`s>Lf-cCJH7WL|2Y6& z;wAo@fY0rwM#UON!~W-8LSP??6s1PT!YX$Z3?oJLDxW>Xm_BY z!Hz-kvDR#OYKOLjR>9EaNrll-1b2(&tBF8!w z%w@N1WA&A(1ZnzxIqZGAC6=L)Nrw#WEILLfrWt3;)kq8__SBNsk2o@)GZbfw^FhO8 zqf5-pg&QZd4aug3Rzg!}=*;rQV*iYCk(oB{-Q){aA~JdyIJ9l>lkSoUrim*kapPak z9IX&WyVvm}j!0HsoIVU38qPL6vp25r1*P-dw8_Wo)9X^*EUtV5Z`|a?N~)Vxdrw2# z2E^`(#L5?(Z5qFFM&^R*>BOAlLGzdpIx+sKgn{jj<|&hlZ*uGl&c?OVgXU`!?GYk{ zEXaXt&>A`F7~?lLt{mUnu(D%Yz<$;2MA@M)I3L%}BWL9DN60libottRqwhDFzkjyh zJ)3vjG!U8K6#Ie-;>x}OAU^LJAfK<_1J3R~Qa)`D92fHsx4id{LttFQh<6$|`wxC# z|NBP8{2hU~{W`;(-4R-(-3GQmPSPXP7Krw&eF2~6=wZ)sCm$)hO!!CE1|vN-r)nK_ znpX21^$Kq1eZ%_tL8l_=vt1BISn#R5eYg6#p#}daegjVOPa+cd12_Nx002ovPDHLk FV1hmAfT;ig literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/seadra.png b/graphics/object_events/pics/pokemon/followers/seadra.png new file mode 100644 index 0000000000000000000000000000000000000000..64c61f85ffd643510743cf55b6937dc965390e50 GIT binary patch literal 813 zcmV+|1JeA7P)FN1FK}o5((MgG^`O%>>@c;k-000000000000000bfRQ)00009 za7bBm000XU000XU0RWnu7ytkQqe(KmOX3RKp21zjtm+dQ%c6Z3J7UZbh!5E z2Xv0=iY6V~Ur>qkP_{G_GTJACdl{WV$^FVoitf{OhK6o=2g4(Y_jx~jLI}OYOT2`N zcJ;jbPX|s>o+7e0VX*4&i+>m5`z}HEvrib@qb$V_PYJO@KI5&(DYpc^P^Ns98}@|= z5gt4FJ;urWZj*<5g(!z;if!n_ketDnEKg+ZGo5}?-odORdJmQwyQOZJ2)7%DdZ3r9EykPJXC$mcG~_s5^4 z`~csM>zGbtU@zP=xo{e0tvg(dk>8&bY z^(cH~OySFC=*k|S_PM`wQZtC^uWG4y6ke+W&P5gi6-u}`AB0qK2HnORvm&2SSu&D@ z^9wzq`LY*&oQ;gHqBbL&H%f@F2H{#WftK0F$YWHz7HtxW&E!<^AY>CQtblW1GtJNm zd88N}5So!vZ*1UMX#|*xXWgklh`6=O;mV>LAe)Sa+x^g%3cju^Av_C443K_hs&X{R_f+zSmC%cf~+tAIgx zqBsx}poQ)SiFMDfkR8M|;wh`A)?FloSlI>iLd_h0!tGRVB!Kukte4gf`iu}dOdzy{ zNU+9v|Mo%+obv{o{(?A$2D=UH2zHn`?-tau+6XcM4Kl|b$Gl^=0fejiY2LK^83S|L r%_3*sk3rIBFmb*Yx`Vcx|Nq4wm6Q<;${Sc{00000NkvXXu0mjfaMotW literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/seaking.png b/graphics/object_events/pics/pokemon/followers/seaking.png new file mode 100644 index 0000000000000000000000000000000000000000..6277a92913ad1276f19a6bb7272a711df435b8f4 GIT binary patch literal 1038 zcmV+p1o8WcP)G=Tx0byZb!9i&N0000000000v!Cws00009 za7bBm000XU000XU0RWnu7ytkRgh@m}R7i>Kl|PT1Mi|Da&C$n!RkZ0m5;9C> zDV58UW_7o2(4ifL+Yb4gRb-}wd_C&(x)UmzbV!!W}F*^O-}?mPv< zk7b@`-ak8N+Sl=Qe2Jmc;q*TY>W$|h@CMT-5A*$zAM_|1%~}BMjSld62Bn)G_R}F6 z%~~Lw^yu>pOvK`mAKn|NlqiEn7$o(;z?jGl*=+Lm>VjM#*hJWn5h8En5fm&@8IasZr0I2J)H@w2mE|?;>Rp{EgWz#P>uR-S zT^INO_boHEBLh{}SA@3XS9SR@tvI_5lAf+uHWwW2uyny@m| zp%gj2t)qkNV~Ee!S4&8wf{z4;0*$;NWJMMkgd(6lqdp_yQ$l^ZxU4ufu{?)ru0Gz{EI^j50tV5^=Fk}-d!!defEKnYBnon zd_AiGc*vU-`GecudWV^f1U1ulI!1-qa&txqv1W}lP~2xoGph}G@$Gkn{MyKn6wBW; z0GD1n5EdQVNO0(4SyMvJujZ(+wIMgE#=M9dvi$KmA+NeUnC~UubcUvj5EtYZENi?L zj5G26yUpbrVp((KbZy^r|GxwD%Nz3cp8R&}#GRpJY3Spk#IqkzQ*=z%e#04;g*cnu zy-b*8ou)pL29irh8RU@FT=24FaV`u)$r%Vk>Sg#(%W6<6KY0d1oJ-_(^mm+HSuXDl zd%!jiRHaCJ$QW6Y%j_ZT45{Mlyjy~s)}V3a`xAaVeZqUr>%X{yz0oJ#cyhMgSne?{ z>d?1NeQ46de3xekrF*%S2iT7M`=4LV(__rQKG|;hnUo%8aej^zGiPF;<*)D3qs+u1 zprhVk!tJBc=Xi=jaT?Qr4cSfZ5pEximrwAcBcH6A@_&tg00Y@wusSF>#U6+3B&l(Rp!E>FN1VQE34I0RR91>(!B%00009 za7bBm000XU000XU0RWnu7ytkQs!2paR7i>Km9cBvKorJr(G+r!p+lAq!X^L6Q&EQq z4_46R$vHA*DtKy^o{XU2U4axbcIc88TF4r@x1g!Ku@{3S?52-2*U?_!`6HSzWo zR0We-#x%W^%@*Std|>PuN-U-v@Yq9A$I~ZgG7m3j-)33!G~Kzq z*-gtSv6up@d^id?1m>PU-lXXn49clnVaGhy?a}G@%XpklNj-NL2JJc?Pj+{%aV0~+ zCFfCW677zD^`Fg0<&;<)a-BHV24T##L5vIA^wl{E_F@#&takXZxq?WHZu|ZDv@i)B z!@1E$P>{xvF-$`I3iSMSOE&bt2qLQmp9d!33(B{yF@I;N^OVkVhS%F0mulR5hNFG3p~kA zN1y26_}g2l*LovZR~tUptPNGoyraYAJ0m1lh9z%xILODh7GLnPa z@-m%J8fKccp*mC|{Gf=J2314H_X7YqqDGKhp7_33{fiVrl>O?L=JHAeDYC`xKMg5Q y^6FpgWxz2!bo~Z}bmGeo2S1Gf00003K{+{radBBm2>}5CVOdcjAsOk(d3jMOK|x80c_{z@00000$^SVm00009 za7bBm000XU000XU0RWnu7ytkPFiAu~R7i>K(J@QIKor37;&R*=*Dm7XP@J9IP7JvA z=(!1gfkQ3VSjUtmTM$q5BVGoc4QsY0QqDPi z*|kS#NDW)pQM3v5)3S?C*D!R~JJvh>`s_99*^}Da5<|CN_5aS2&zpVc{G2?GpPn@q ku*R9p{&PczjSGL-H~Sd8>GSk`W&i*H07*qoM6N<$g5J!>m;e9( literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/seel.png b/graphics/object_events/pics/pokemon/followers/seel.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d2cca52acddbaef5bd6610a791da443852a862 GIT binary patch literal 669 zcmV;O0%HA%P)jQ2_w~;oB(VXVPWa%`2YX_-wAx-00009 za7bBm000XU000XU0RWnu7ytkQ6G=otR7i>Kls%5yFc3xs1f~vNyOGxh6j+Xxk@gOCUEWJgrxpvXv@JCK^hZq@g$P(^N^Y#xR3j|kNfy< zL!=(A(sX8OHx};{WU!)G!J&oxmN0q!i_nWKTP{GvmI!=du*QZhxDfi0g-R)h`>;p~uohLdryF zH`~J$*|Ii2R`P6Fsbn?J!rUr)C{(zx^&pXZMk)|BBuQP*u~;vS0Hf(sqCx?!t&u)5 z)?BbR)~25047)MibSLaTwMSbLv*93cERo%rg*&wM97~8xRhG$k%nQd+2hZ&pP~w=l zXDSe~Is=^5Sb~M)-S|GL;Ml_M`!wHjKmYmT78{&4?3vwiy{!PYYB(k#J069hYaQdg z&d{;yO7`L9^b}z;_NIWSe0%)-@^uho+VRtLQA^u8#!M0%SAEHTKJ2g|UzKCt z7xd=z`}9i=r<%dhGHE9Knu=1|L*5kq|Jz|pdv%x#&H9K57`%OY$iu-ZbYZwqWLAL( znkiI>Q|3_9um0Kt>!9mP$6-GA-nQFv{^gYi|8V>P8YMM=K)%QP00000NkvXXu0mjf DYBe(O literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sentret.png b/graphics/object_events/pics/pokemon/followers/sentret.png new file mode 100644 index 0000000000000000000000000000000000000000..0c51731d0780e63c9060f4d309e4511ce4bae1e0 GIT binary patch literal 608 zcmV-m0-ybfP)wae-k;*};J^AsOlE`H3Mh(W!x1NjU%j00000Jm73500009 za7bBm000XU000XU0RWnu7ytkP)=5M`R7i>Kl|M_vKp4hvNbS_&prHgb7_Hv0r^@E*2XN|LGK+# z86H*`&^wjA@|;ZYybw9Ei17et?sZk%W4VAF#{nNVw_yPjuX!?4@uS?%FB}`b&lh0< zR{>zH;)kccwC7TmHllWUx3CM?5QctB!R~MxV6%idUt$AcXtmVbfq(;Mfjh4HLx6zP zb}LS}w#5NjXANsGkwL`Ba0E_ZU1j4(PB8GtsUZwRJ$!GN@OI1VC;%d5iCQz_Y=B1f zErf_8q$yA1$<2L0!gPaor3NqJS*n@pJdgqe?gBdZi6NI*m;NISp2f3Nv!P#e7qzf0 zkhW68s3X41c8&>W{Y+lM3Q*5Qi&nTr+2n8gg2bMs6LdJ5!e2fsg@HX8;~(5wPR2fNqRninrxVt9_dv&{fgMe1 ui#`DZO9jWsHfGiU0000KmCs8XK@`Ua_7a$0)*pltJUChpje%@7 z#nLnf<46xZZK>qagY*yt=^@at2R(=dDb{2E0#88^HW9US+)FMMj2BaSaGn39Z#O^Y z&889rd-I+0-JSh>=FPq&ggn+`^~%UT1m)}9IluG(e7SaKHaOQ?xOYeJfIqjTUBWrf zx!%IPJIXK7Oa%#yEY8L(=Ow)7p^iosyl!4-$aTM>)r! zX4LJWjz$#?A2?l)2~{2v#5)=(;7~&7LX>k%N+l3OLff_pN%W`MufDi-L%Jz<4{@qSLUgw~NUx#CX1esb+- zPu5Dg%HNWKFaj>t%1<=`76MQgv{?anv=9;jY0QUj&8UUCu>YPgtg~vZoZRq~AQE~y zP~G19$b2Ow?XK6Qmrox91Zd#MOrVSs?g;cFb^$_y4Pn(k)? zL@L(+kvEfWiG}TVg;6~@n{+lV2Ed*$K)@5HqXegw^o*VBKb+@p+;*I!;<6_5agp9&rV1_Jp=E{*fIhACvjIZ4s*QbL$1Kd>BI zkVqJnf4f`13KY=41)&D)tRO#S>=@-8DvGi(_97KI6RYA_O3Sevj}DgjY`e}7(4XI} zw=`g5WxSyBbq41hIPDH&Rwp{O#40f|(i*dztZEVn`|6FrTfN?{XFLo%HajRw*)cl< zL4q_He6eLwMoYH97sjcAnhSdUd>;WJGn{Er0utT#WBDh{fK+2(?8|O>if|)4cnpg- zM;HKyD(zU-?jK3mzv8`uFN1_iIG8Zp>Y{8`O#6Ksj(qhiAhme*5qyi00009 za7bBm000XU000XU0RWnu7ytkQU`a$lR7i>K)iI0IKoke?@kp?+IJU6RR_tt!w`qp3 zEM$T>g#?ly<~TcRudxv<_X8Zb99v2H&B+#W*lca1m6K$5FEdGI zIZnHK-ETJezn4iiA>^iR>Yr7x#aqf6noTUn>}}-*W?#2~1%c6o*pAs-w$MYfw>L1` zq8Tw+uJ{hSiW?0?U@{?GI5;%en>(|*wT2;L5F1Qv7!1HMIGu}`P#TJQLm3$Rq}wC` zN`VHQw%obM`<)GaikYZQteaS25eQM2i3g4ka5*w_=YHN_+j1xho^5{CO&Iq8QUK0| zttOUiAOJSIu6pMIMMOr|SESowxRimi_%dTn7Z*@nfw!JX^`jZcKu*_>zV1*?TLpS@ z>Y(9OpwJp@ypzw$qbc4cZ6-EPQ|2l-p7T>Mjy5IOOh( zdP~2}76%S+0o0?c#fcn-$>LcRsJo~)JauzGe%NN)>qCOYNMRrRrjw7r*->ubbPyb ztsD@?fx&kC0tTA}i}{MHu2bdxEl*KMZXX-{d;CZF3hTadpzhtVt?apOS%>6Wj)}U5 cy8mDO1xET)n@>z2S^xk507*qoM6N<$g3OFq#{d8T literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/shedinja.png b/graphics/object_events/pics/pokemon/followers/shedinja.png new file mode 100644 index 0000000000000000000000000000000000000000..34c74185d9305b143c13dfc8afd561abc42cb15f GIT binary patch literal 693 zcmV;m0!safP)FN1-X+gQM!Fh3sIWb8A0RaF200000K(!Yz_Fcb%H;Ul*M4>m`$)L;vNmKq9O zO1A`+Oo7ri*A6$dOW=kMF)nZNR0{bE0vQ5@ETz-IjhQ-h%V3)jb8zo}shnSDDRRgk zkT;loZ29~2nSdOTCN(Xm_=ln(`9PKzS#*uO2gEyvBfC~y!0twGs#7G z)k}oOI%$pbZUIGSX|~0q9tmXEeZFc!Y|)EFEE3VHbLXmu!mTkEtev~veV}e)QO1P~ z>@rGCCNvQ1YE$1}D;A>bGRWy>KHc&T3@MX=G=Ru#5aMlLzGk!~TY=m#z_x*AIdKjw z5^*Qy5!M*Q&EliXGnt9D14H1j{ZHvG-zf4nz_3%G*%kuaEIvV!o6JN@@JOytcMVjR z6=VplB+GoWZN3SF&}1f_4|%ek&fs;R`^Z}_a>qA2fCRq(lNay}wz|0BI1IwwC)Hf; z$O*m7K`-#kM!srge~V{Dm>O)iLh4O2$Jriv4vyQ_ccd6s%6T04 bT*vA^P;yOVVc|Su00000NkvXXu0mjfCg?&Y literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/shelgon.png b/graphics/object_events/pics/pokemon/followers/shelgon.png new file mode 100644 index 0000000000000000000000000000000000000000..5d959acdadeef4b37483645686ce427e556b07a0 GIT binary patch literal 596 zcmV-a0;~OrP)iGe98xw*;d>G@e%X#oKN000000000000000Z_Pnp00009 za7bBm000XU000XU0RWnu7ytkP%1J~)R7i>K)z50%KoACSgKpJZY)UBPqGUp#@hx6N z zWtaab9=yUH1Z3E>&E0je)yo^Vz4zGLY^1i)366`u_3;^FvyCCOiT^fM@xeAH=(PVG z5zp6;Ol@tPs1Y0v2t!%38;t@baNd15xG)>D@^ z@N5#|yyrA#lL=;NtNq0E;muXOfVh0)Xl~v(5r=~x%m3a zZ8@BcTwZ`Fgl;{A($M(&YCV$Ur;P$@UHsX6)jeW+tM!7JHrBJ|=e+|EY!((k{xi1B ieeIE1r;P)DKY7p**Q5$0RaKQS+Sv^@kt>;000000000000000LP`1$00009 za7bBm000XU000XU0RWnu7ytkPw@E}nR7i>Kld)>UFc5~b*^sG2plgG`CR35zq*9c$7B)Ip=(7{A%dozH~Tmj-`*|)^ZoL07koVgsPbe z#2e-Lw#26}P<Yw4h8C^1o8$T+%P5)zz$4+0z~b7HF1ss0!&}YRr!j5HmU+N(4`7MLwz8we1s-O zPr^-sWEQ~LT(QYO@8zDZOb6Nk!>fsjz;BL8>KSiP0bcIe^cDe5SB3(CP$2ET|B(VE z>3QV-elie{nkzW#HJh#x;HCol+6&5K&{ya}FN2QvALm%K~Ygz>B)H^ISHY0F#rGn-7?X?00009 za7bBm000XU000XU0RWnu7ytkR21!IgR7i>KmA`M=Koo#)uvkzA6x5ByLRF(o5iYX> zXJd;RDZ(UEDIk9%@5>-^fjnpZBK#L-EVreO3{)Rr=cLzAQ znJRV2lMw#6_r7;OY=h8aJjP@EH*x&{KOFh1Y(7QE0L*nWczsh(|Iw{|r(I zxeyCTF@&Uyq8TfhOyaoM&UxZvn-IR-dmR0g%&3{ge{V1)&n5=(#Auo$;W*0o$60J7 zLNTdLp2F4C^TcSHA5f?`MbzqLgkIyIXU~NYSbuKKWSKW;92Lu&z3AX_ zB7}yF3nyGCLzH0x(JT*(FB!)T;nmc}zn#L23xQk5hb39wXWVcXeY;XuI!+>lhKv`( zO<{2!v2|N=)*GT;-NE(Uk`VTls(x@VlQCoK*6knnDyLi+HB8uL!lEgUMtfz4RY1UsNDfFs>^S7rF@}F2ppXBU8NVq9>Emav;V#6>Bl9 zt%O>;)o{yrl@I?AU1%c;;;UYDH3PWou+&}UW0MA|DzNVCxEQa5QoVuK9^|+J-3w_w mBb_hd^$M(}1nKmD8GiuxGpc)naq$oU0000Z@NWCW^018WqHUj_e$1S7M9G@owf{8N0IPZrHtR+n)=q zU%oA~^2~WD|IO^Bi`QK&OA4RGt+9FO^4l&=4&lqncsnDyYi<>NFD|gVMn+0X-}v6k zMf>#%!!OtH-l@2yu_OG&(*}K4&e)RH#=TGyWKU->6F>fR5rx2Gfg-WV! k`|a(_?T_`={Ez?1q;zffVWYHtMxfyKboFyt=akR{0Li4o2LJ#7 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/shuckle.png b/graphics/object_events/pics/pokemon/followers/shuckle.png new file mode 100644 index 0000000000000000000000000000000000000000..01fe3ce737826022088c92c99cb292f92193cb3f GIT binary patch literal 594 zcmV-Y0Kl)p>EKpe$`=aNlr1>Gc(2z5ysLQ}hG zaj2sl=qeH+V;qV&Nh#E=8VbF&6a~8#LC}BByQaAxUz<}92cd8K+`GJ&yUWEemRf45 zrT&iyS<~`wWnz4<<8OsrJr6O){URoPbuwg@H#m27Yy>pWEntFA)qKG7`KLN&1844H zMqRZV@=ODa&vneUBrRYBb`LTWJu;;gG9Brj^$VEoR!3c&!g;A22${Vy_-F(N0VoI- z6l?~8yv2~U1z~`Dr6b`$&IYNfJH>2N!p_K8%&6D#$}hHfJHYwi@NrtqE7#M##!dnI zu3dH}!i7vl_WcHVJrn~OlN`;H_p94jT0+M8F|Q{3PAmmNHVm&7oqV*$Jdk8u;{I_I zKgDDI9hn*De)BDf;<1Q>Om}4DTsEzW2+Wutb2@UOSoIm#=XEX1iL6~w5145$iAL>& z2cp`Hp{{jdrpnO-toMmsb0`sMwxc{vA6Rc3OuQanL3qb_ z!V(3SzF@rhW9CR<=dQo`TH?Rfm+}6*%W?2 g^VxoV(KCObPg+jBUN!N3*#H0l07*qoM6N<$f)1SlPyhe` literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/skarmory.png b/graphics/object_events/pics/pokemon/followers/skarmory.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3183449d7b086385b0af23057705716a57172b GIT binary patch literal 1071 zcmV+~1kn45P)KmcfeaHWY@9L6AN`>DI{C%{AUxm?304 zQ?fMn)o6m(W3o;WDtHsxBpA9&2sCun#eD$>leT)f%C?Rid&-@L(p|NfSc-K1|2s!H z9?SZF{Oz!vdrzSIwomUCVDT5f9yvzhUki+gMvmG20@+AlC^&Y^*7wG@f{~@6KOYkNmt_L_|gc1ESWkEh|06590ebIWhu>b|1GB^)-1I zCVfDp9LH85wI&wL7$fuof|@yEkV|&C#$bRNqVBnM%f{vG={E`KG9#PMwZloyl-X7=yFRaA!_t(%Rtio-G!;D2jt?FsDt@_Xci=!$YdBCb zpF_IKS5dbD=*m|cy@-7S?Gh~4ipVZ1mpI@!iNp{4TyLjK=ZuE}LS8u#l&o+XqCmXt zH36<>VWkx)Q3}p74pjUo2FG@$;zL5M7b z>9?*TGWU#ef)C5&;6|o%AQf-WUJ;q~jvG(wDuVN>AuN7MvotNA3dmuqhzLYuNpuR+ z=1thf5AGXju?MM+tut5pLP8vJ37qA!xXA`tNGxNCk1f*7_U>MPvEyj?(RnVE#K=hectE!&-^zXO4WXb@ri&VKufz3pyOufCb}Eo7pVtd?jT p;T?g282a)n{vV7x|CRg?$6p9`LNL3+1JnQj002ovPDHLkV1fs_>k0q> literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/skiploom.png b/graphics/object_events/pics/pokemon/followers/skiploom.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ac8a5d941a196aeea12d7c87a4b29d24574da8 GIT binary patch literal 581 zcmV-L0=oT)P)KlfO#CP!xybq@k10rEegP4mE4xE~R;d z&Z*GFL7IX~QD_S;5we72DQ?oCLMeokB~XW$^HAP|COP*uH5Ji8a<+Rv&iQ>Oe-x#z zy6URyZ)!gI-T7ww`u5vRRZ@hX8V}O}WoMK5kEJNzJifk6R|PvA4GdFmkV31Z1isNO zFWMwvbaSN{lAat|B_(iktZ610XmU7{0;EtimGY0|t}&YqEs`#6R1#{BxzzZsXu9Y8 ziSSf<$5kDSVGxr54o6~uWUOMGNMUpoKS6{5Nr1Z<7(g~kjMC6`cIojJE`?|v!}%#f zbP8KNUV}~oQ==p_H?}ccLa@NCb&zxEaL2t5L>IdGG`w>#EB z&JVcb-a8^=T{?|#&;z+0<$$?`@e#{2>Re9EbD zG6a44oOCFv&?6Wp7fM6=S1A-WDl^_I*|@44Ywt!h-k18y_@CD&qS`o; Ttp_yY00000NkvXXu0mjf7PIjP literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/slaking.png b/graphics/object_events/pics/pokemon/followers/slaking.png new file mode 100644 index 0000000000000000000000000000000000000000..da2a67f1f70839a1cd33eaab38a017a283707157 GIT binary patch literal 1015 zcmVKmc47+Kp2OQa*$Ej4TKCPB!qy64z0Qd zY^wMRoc;kVGy!qiLK2L$l@1{!Swg{s&x>g=AwFm`btvuHu|w;033w|ubWj}d5W6(# zE8XeqDy2i04t=r3J-W;Dd+#Jn5c*&LNZlZ$3~%ATuF25(B=esdkh}SC^K|?wHG}iiIttvAxdPdl{#Ue%y5StEwFYn zqf(PKa!HJ8#s(-+*Ow& z-AL>Rn^m>DTxlgSI&g(A;+YGB{mBfa)m62tKCI^w7*ogB@!zW`S5;L#XLZXzA&H^J zi(L?&WrqojDHuC66cA=t*lCbW6wk2!q?+pWK4(hpcvdRZt>)ucuHH|nvy|2cUVy|P ztmK#PW$xXtXgsv$vk)@c0bi$i8prt4-Q~bAeMb78ec*2Irz+9)R=dR$bSL-4|yhF$izQw6RC&jR;tc z@)Rj-xI&`y0G$Ztfy$1yTOdwxq0At(bqcRteWT9<3Le`zAtb~(@gN|==;~@jh`Hno zflXp8nSMaQHnh3cbdmV4A?J<08-Qv=R49NmZ%9#KoSz{?{QM}20doO^km&1|x)}tJ z8ZZelu`H`Vid^W7EX(xg;Shd(ew3%8?+|aD)qE+()kt@`_6LGen z8&06N-Yl3#Q8x_##n%nu@EQt)aNU~s65SE@1Gz9y){BCjVJHycvl-pFEPBFfz6RfI zuK}UPn#X+P2RgzWno6a;2DVc(2nB%%r_(up5tW}`biYxdT)|yeh_p}xpb7=@sbJn+ lfaQOUZmIaST5MZ#{Q_{ucuNtrxC#IO002ovPDHLkV1imp*2n+= literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/slakoth.png b/graphics/object_events/pics/pokemon/followers/slakoth.png new file mode 100644 index 0000000000000000000000000000000000000000..c116006819e1d275ed05b1b9568efbeed17f78d8 GIT binary patch literal 652 zcmV;70(1R|P)>G^pfA<Klrd}EFc^k~Ky$Id+qri!WIG2s^dDpk z1ou)wOXA#?De2a^h2wrgmky;%hqlluU3xUoQf`ti*lD1HzXU>3D7lziAlrd!=@LtK zm6I-Air-0(r0;$8N!SQgs#K{`rT<45;~V)_-N~|ZowF>PTKAiN<0igM*awKU3J(B0 zeSO5fT$J)(wCBgR4Nif?6|4o$B}o#Ma^6lb0tN?8Ci&q^GSB85+_^) z&e?2Z^Q+Y`GG^(J!;`)Wm}Y5skg`F#U&?q*ocMtXkldQU>OpUr!+;I910zer=dR^PilcF)f4GP^t4mANDdi9xO8vbeU+KZ<FN1#F*(6OLBYw<*>Pb30Rho@fdBvihMSP800009 za7bBm000XU000XU0RWnu7ytkQo=HSOR7i>K)jw<7KokJ*BSS%h2a|ZnQiK+_n07fR zF(HC3g)RjTf{uX}6%Y2{p(>ax@lZhsxOVMw1nWb%LtG9Qx@Qm$*mc7hS`~vRzR%D* z>yOX!$r(B}Z}RWNdr!JM-vMwJcX1d0Paw42|5^Y+h_*Q6u4gBGYXRaxsFPIp#^tqY zNwWmVf}}bFUqSc;x+$JQ*b}QI%@g<=i3O5gMvA#~SFE<~TMGc7%sHz~xv$yRIEz)a zqt}dvXuVGc@py2mh>0E4(FkRFxXKM{s?ijXR9Me%97hIW_ z34d(Eu)ls%V-F1DY-Qk#-dz$O0GT_vmkp@XiH7?`W*%s6u&DMbv3*DgzQ4fZzs<0_! z_PsBm7g!sdX*evnX|oNx=A-wc=mX2JXbNU6DG&cJJVBJtv*iGZPLx&wYi!LPM+JWc zei-Fv+t4v5HV$W0*@s0cn5_%_X&Cn@iUvqv5?Rr(jjKT+3Rffg|P2?6U#c8rdsKm z6*n_l8L6i*1BGlJ0Dla<+1f`l`E$}QYT6EkszB?mGDY=qcwTt=uTzQ7cr mZe>fptl+lTykq5KlK2aSx58`yz@R1o00005fOP=5$Wmq>B(X7sjK)-h|_KokIAK`#(8cglD;Cg7!Dk+hSq z)>%n#sY9^5XmjO*R?x)(WhosJsKILps9U!diicpifg`^l!D|YkQ=vm}-64i{yZY?d zI$iFRp>%5B_TBltcRKu#4C8~Xrm+@XB1XRecs^4VgnFvbWbnKyCKqf9YctlYCkHYygal8F8PnlK9H3G8XR_SN9X&IQinL vX(U7S86~a(l$VZ_&&T^9Ik$?1zZt&)hAgR@|3CZZ00000NkvXXu0mjfo^*SI literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/slowpoke.png b/graphics/object_events/pics/pokemon/followers/slowpoke.png new file mode 100644 index 0000000000000000000000000000000000000000..c57aeaf7db67e244a600643c47b96f86718362ac GIT binary patch literal 634 zcmV-=0)_pFP)G`3lvBAN?VJR`0Sz+;+p#cE_`N6RO0000000000lLfbF00009 za7bBm000XU000XU0RWnu7ytkP@JU2LR7i>KlRt~wFc`))+#vAuLOJqhbLi5oSNZ{Z zbs=*hkReN;L!on_qeZzxj+bW39 zGE7#fleuAMGNFKo$-v28B6;s(3hm99EIM8ec{DyY6^eh?W!^>@ruW3ol&?em)tD?4 z;}hc3K6G(s3+Xo5+~F=Hr$aHhGL+H-+Dvl5q!pks6Wv;g4G}uGvI@;*Pm9{{R7Q3x7Os!lQ zeE8`5vv;)tQ#@?~0S3sLQ_dBS)%fSj1IFsvgjTL5eD{5S!ZIfVFv!8moG^SCA-TDU000000000000000Ng<*D00009 za7bBm000XU000XU0RWnu7ytkQEJ;K`R7i>Kl+B77K@^1>gf5p68ORglZ>3DY7jUKn z+0M0tvvHwzhHQk4Ug_RUAcIZv07CYeYO7Z+oR-wfrK;?os&WiL2xQ@1^;doGIj739 z9p_Z1I@PKEpBm2wN3$D@jdwPye&6p6j%0T+&09`I|xy%J>O_QZygcyZ;{JG`G z-{a+vIV*R!$1*XQzh?c_E8JnbX|fE!MP)ldotsi{vwA}rtqd%diJdz838iVf(K1+^ z`9cZCwWh_5mb^86#=}a`W|??*@8(5>vmUuOZl$;xLU7_JL54_4hpHl>wQr*Kr{z4Yps_TO8*n-2wCr13xlYCcgE$@jzSp_|@y8 z!JTd?C=74Cw^hH3m-?)DYw|AQqN^_sz1Z0G&~pqX6H@iNUGu}Rzo5zzumbE);FFIB c7XD%V27bUjU}ofAy8r+H07*qoM6N<$f+O5CQvd(} literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/smoochum.png b/graphics/object_events/pics/pokemon/followers/smoochum.png new file mode 100644 index 0000000000000000000000000000000000000000..973d42d240ddc2e6cd1fa8eed876542e0ede79c2 GIT binary patch literal 541 zcmV+&0^FN2|L20qM!I@zx;h|}nF;U5ZIRF3v7Hf>k00009 za7bBm000XU000XU0RWnu7ytkPlSxEDR7i>K(mzhaFcb#xNLbmQh?<=Vv7s_CphUQ& zDu{v9sADX^nIlE<1zL#%bYWm&>H#CaF7UjEech71`p z{ZJVYidQSx|H=5aRA$@Bnq+ z0wTg9ETDNN+H!AobjY5Mj#p`b8T3nqZj%$L{&darbFB*(%eT$cSl}2`BS5#en;GLq z;dV2%tP-Eom-Xy4LJd0I-Y%ysHWxTn@gL@|>r|j7x{-GKV6jSLV_17`dUyCuZ$5iW zXdTStv fyft(m(4Xc9hmOAh<5%6K00000NkvXXu0mjfA@KFu literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sneasel.png b/graphics/object_events/pics/pokemon/followers/sneasel.png new file mode 100644 index 0000000000000000000000000000000000000000..d512ecb6672123eeb838afd39a1731924bb02d8e GIT binary patch literal 741 zcmV`2hg|8Bux3F-fVp$?>s4IdO@Bk*S#p0~uLy#!yKs00009 za7bBm000XU000XU0RWnu7ytkQTS-JgR9J=W)-j73K@|^onPSYER--{b6-KYY7r!8A(-9hIy285 zQzpg!tNYFD%$wPrT`!YKlO|1?G->{$IOm6L4dsU&CF>k=cNR7E++=UA%`MHb${8&sOZ6XA31a7iPuQC&2bsG0#)A`t#8+%hQQ2X0=Ef0{dmMtd1=Q99LEx>fn zp9rGeQ0#3g>`}~Y_J#m+?Y<#jJ03uBWU&u0YJ60KvEyZf2V{e88 zl^S}^>^QUd>TO~0NxuWgEeRk;$@bt4th9%Vy(=i;seT9ylm5j?Q+vkP zREFWnZoRlXmfFPFak}#U^2^BP`mos1zfGpIOi0;Ly@qN3+p*Lai@e*Eyno*07E`}d zAAitJvNW6xT0%(mTuq0IVOj0aVQ`F%AgvefK2E4lp1EoO{Y^@7-& zf>X+v)#Cfz(R(qqIUBH7a?N5s`f{k6y5rdnBPTRu#T0-Cfil^vhp%+S-ROtXQrux#{)Jti3QkJlLCp)%JqfU2=(WaEVK9 zbkk+V__k0^)dEY4YxB3K^lSgODC4}oF&zB00000NkvXXu0mjfGM8E7 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/snorlax.png b/graphics/object_events/pics/pokemon/followers/snorlax.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c911a60272c6eb260b125cfc4b6b82cd7f8e97 GIT binary patch literal 892 zcmV-?1B3jDP)G?rvdBMTS*}-`!Nl5?z00000mIw^W00009 za7bBm000XU000XU0RWnu7ytkQ@<~KNR7i>KmN9GFKorLhEYO?`8A|5Ph0;zL+(vDR z5^uc_jJq_gLpymeNVsHkh)};mMzt2t)mCWM45kp2Az*4Sx$n~VPCDsymXZ?aQu+)w zzk9m>|K8m@VaEQ)KN8*@Y`5`i=l*PkgNmNX%#S>87!U5t_N%exw#qmmbioY<_hm13 z$NG{@W^5E-Xl0q~2Qhw{*bc_=c%l_x@E;i5&OX8fbo(l!C7cAoNjPa{DcHn5Hw?IG zV8#3(;0IA7LyUsZz}5@}0SbGQY3K{*C!9x(45$duz!vA-P|q5Shdx9>j7U|b*vkg& zA;>86IcL|&dd<6_8yL(yNcOhh^TWN)BvbGdgB-9&i7N%me9j;p?DPc*ilV7Z4nnw| z;es!ga4H8%4rss+A(9J*BCl9>>eh#p1eZ$CWcwVqbMq`cdjMH$`x^hiJZ-mw;c9us zc#^Hzeu{dDI#rVy`xGYdb!}~fPVST{LIKGMd>&9wVm=QNwBsf$C?OZY}j(*tLU z6Rc_E<_vSnJ4z3oD37`-hHWXh4DO?7PPtd94{K$L@~b0%Eq()+S?93x SK=^?G0000G`Rtxd8zI@o8BxF+o8=QNd9`p!(g>00009 za7bBm000XU000XU0RWnu7ytkPS4l)cR7i>K(=kiKKoke?;?U)$=i)(y)GYl%P7Zzn zhZ2_?dP_E;gS+5&xT00zpdbzzjGJ`P=+>oJ=u|;Vyj+Ily>I~o4nqE!e(&YpO9JV1 z+O%oYrp-T!-*4_6ANQzjO`JCOK;Z4vSq?YFuA8F5RNH^));cha-3y8B!yyv6C_o7%ac;<4L zT@Tj)rR~J_!1?y#G7Xi}p?M~7c)BzLc`=aME)A!P_-3V)d& XgP7%C()KKl)sDAKorLZ390T13uQqIiHjiD$zr`^ z$Kaakj=N&HX4NndlK;SJVLLmyU7Vz~+0x@K5N9oH4q@>RIP{Nk-u&2k$+;&8c6n7k zc{88yn?+$BZ)I$^>4^Yb*pl#z*o3Uc!c&8v`9{J~M&d z3$E(eZ1VaOz(uHdA1)IoRGfZ5i88>H4rnt8Et^f=SmW6?fO98oGfZ4x%8~2SlG;Gc z+kmI?bn=vTQ^+;zz?7dzc0$GC0zD!U9;Cc3`SRQ>qC&Hucp>9T zCsb@_GlC~YU6YF z>(cfK)vN>4FLE&wDz@K;HS*Q@LBWT+m}DTV$RF8%w`vF#FG;iF#j2QG>}EKEJ3xyw z`3iC*Ycs5`s1OwWbQy5wjM;t0UgH2@bAr8jEZ9TWYqMIP_vSBWPUu&_SI)?Kv)&9p zB49Jn-uF5EwsC9Qtc~j*zcx2KR`vLK5@AlFx6c~=K^R~T`lD^%9}OD+)?PFkVAePP ja_83mjpohO|FM1pxp_X$CKj5&4Oc>3LZ}K|#qm8M&!(ktq@B>G`2iX@OZGiFrW*0RaF200000TJj+m00009 za7bBm000V|000V|0Vb6__5c6@O-V#SR7i>K(m!j1Ko|yaaq4oz-5P`_g+hW;wuWvc zTSv!kB3b+f4LFo;{UU`7+M$HQk5JIW*w*rXm!5w@&eM}3w9`G??@ph457jgk6%`c~ zm4A$-Pe)tW>bP2)%*j~mbF1AYxLPwY#@0xi7P0v<(e*$WPsorBkXgr=8hn@F=2SM( zbjSdy#O0%(LHkwSRZuyxA-9fMA?Y_OjA4ELvZCw4T^R0Sxpe~oNU!xJrW7DCn@=LT z&QtomO!GkM%sx7Bne_Sa@Jnj{8OLkIv4)tX0w(Xd1;vY5?fK^d0e09D$iFRb}-<4ALWV6 z@bC_NndmYF`zv@OfPybX+s^*>j9GhL1T*mh8tSZQ@caGFyq$$V%nz(7y(a4dIJy7; N002ovPDHLkV1gwb)Q|uG literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/spheal.png b/graphics/object_events/pics/pokemon/followers/spheal.png new file mode 100644 index 0000000000000000000000000000000000000000..94699cc83b064e6bf21207507a19cbd77c69b41c GIT binary patch literal 582 zcmV-M0=fN(P)FN1VQE9=ki2wiq!z}%v00009 za7bBm000XU000XU0RWnu7ytkPyh%hsR7i>Klrd|ySt~iqNrBphM}}FJiYsKSS>&Cb=A*gB_dy_IvN$|9`n$qG`2i z)v8tNzo_9HXDm_r2Oh4gZZh+E4}hM`6o83tGILFVYounr1Oi9F4Gz9AEHjp3G>nvN z058N#1$z*9&@J6$#?p%Wt-w*S(Zj%UO_e=}1F*$_Dq|^K&~sEgPMM4jGCvVNAZ1f# zRD|;oJgIp6fX6BXh>V7z6c9=QZffW|N`6C34zm}3`h*ZCzc@0dJG$Z5=2O_A#4dT{ zCqnW7{VU_$em9K!kwHE#GiuhI#xc7dDOmqbaLM~F=d+BP*^v<9_7gIE-jB6I*JDyspI5*9$$QXKIa^08wvoX!rT{$ofAP~RoG%#mlYtEvO6ff1-G|h>?sUc6e5)2vV zj`)ZSmf`{r1B(-7tqEm9o4vFqtok=%mSu^Cnr>NIbwcb)fercBM&-f@ssFTT(A U#au7kdH?_b07*qoM6N<$f`u&xG?rnS*f|vq1j>4L1_U20dWx-!HEIk!3iNzApigXTv^jz00009 za7bBm000XU000XU0RWnu7ytkQ5lKWrR7i>KlQC=CKp2J(3>j1qHMk%$iV{qR61d<& zm=0+$qJ^wo9ny+o)c%JE4Idf&8w6(wbI78r6DX8IhS0f#CI_1mH0U??bpxXZ|7z95`_com z??2zoIsi=3ZbsdFdtaR&*#TG+K^?+b8RBm-2~f%vSz(=Mc^zc0^$$ITdUf z#hn~h0)hv8et7}#=zHErQCRRsVYYzc%y?lOuA@{eBqdu^@V$L%n)bUpDIl58-`cDY zU?dCcT!e(5efShlL?LxKlRyf*IW@sE&ntnXV zd=Y4AingK!bT=2pwZA@RxsZL+0;C>bpY6W?n7?0WE$o#llgK)G=$@Koke?!?}P~2|FFS$i{6zQwyTd zO|~ym>@Ic5l59!Ex$Tx<{J>K}LqT+m3YA77*Z4XWx|Dpm=tLu(PP!HXU5elKySw*) zk~oCWwzjpcZT%;ukv|*Ze1SL*^~dLzl|0#KM6(5r+A0sgM5qOAl|S3XtVSdE`W-@_ z4t)~N$L&YwgRrgintQ2m z%SuOQV!q_8@Z$u)`r#<88vtEh;eAL_qu8sPH%!+6%Z~FP<277-H(r-vlJl3EPym>l zYG;JB*}DMex|I}Rvh#*-bOwtLrqT=+Ghog3_{*>|P&;)-rpow)MG;#$jot+^jyL7Smz~$dousL+_JD0-)^0XVe}(btve=W& zOCzsVCqJEX0do_f$zm)SJ-g?Q&3%8Kq+u)!ubKDLaM&OFMWE(#(_-Sz%P-T;aa0&b z+&8}m;#<8hJY3EB&_LI}mVuaZm;YQG1)Ztj?0n{8;8k!_xiqqQ!d?`;5d)q?(WxUk z-kgdJd-0|`AB1O>PZB&GN}mX!?h!FXx5$A}c>*h`xN9Zl`~zd?h@09_`cv?LzpdbE i1{S|^t+}4|59mL9#$;qZo5J>I z>Qvh+m!_^=xbVWk^6FhbWW1Sfe{SQEGDH~ z<_?E+{sR}I3%0P4L(cewJVoKZ?)M`)Z-pi;GG|!et(3`ozX?K1)%cNC@v{%gMsJCx__HNBi j&b?{Jw732@ub+|M_@${_&!%KIC~7=i{an^LB{Ts5?3Ke7 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/squirtle.png b/graphics/object_events/pics/pokemon/followers/squirtle.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf56fd5af8857eeb2176d5e2dab98f8933c67b3 GIT binary patch literal 439 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*m$y1(z0{s&6S2P zU;b3|Ox(G1CnF={LQdw$ogY75ECeb<232-toIpNjfk$L90|VDw5N1@HYWt0Wfl=4f z#WBRA^X=u0euoVN*dFMGrL}e44V6mGRgqip>QI{G%oE9731)65tfjMCRP)jvYZ~s@ z^3C*{z`=))`eDTM# z&gL(^e)VU?z1Zn(M{n#~_;T^gW!HU=U93DLEi5Ly>dejmBK9KJouA6gb$`3+bK3uz Y`m1f0pPlNM@&gpQp00i_>zopr0C*|B!~g&Q literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/stantler.png b/graphics/object_events/pics/pokemon/followers/stantler.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c5e8a826eca62051f47231175359512e7c09bc GIT binary patch literal 745 zcmVG`=~F^M5DaamExv2g$Z00000n%a=!00009 za7bBm000XU000XU0RWnu7ytkQUr9tkR7i>K)jez5Ko|$`!;6oSB}2@OO{RQ-e1oS* zI2~#lxu%ybPG9rc(Nb;e%Q?qn1Slrwtbm`U*x*PmydXi0acfLnkm(mAh^t+e8 zPUkZw)lk>Z<|cdYo-S%0pm?_;`c*^6L6^s>?)_jB?7eP&iG+ ze5Rf#CWy(UC_|y;*(T-vsN^)9PeZ5aVsfqmvvb4)7A~gRl5IEd8q7Hz1&5tEby-Y4 z5Hi6$VBJuc)yuMvQ%>)1GT}7MiW^4g1?BUjoRy#;w-mkGaznHe(rg zfwtSWN;N{wdkioZ#Ayn*U*)pf65DOPc?5X+hI_aH*b=vk&5tk5{qLV{AD;U7{q~9D z9;Q<22Sayp*FNkF-n)H#t#^08ag#JjwNq-i_za#*)WJP|C$^7)K>$4-ZoxCQNHbll zKq)Jb-08!FJP7=#&+3OoFblO|`&zyR+HNM)#jJ{O#}$lo)I+u4{Z7`H+os)0M!54z z%A8|9+p9$FWZG^jUG26#u9mV+IqDa=O7#t~-2^U$`2exjO}AoQe{$j^(CDY!=vTAbOKUJl%-N16%6t2TogiF+ bf2sZevL=M$E(Wre00000NkvXXu0mjf*6Um3 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sudowoodo.png b/graphics/object_events/pics/pokemon/followers/sudowoodo.png new file mode 100644 index 0000000000000000000000000000000000000000..419eb917e37117b596b509ba9346ab300b6e12c1 GIT binary patch literal 672 zcmV;R0$=@!P)G|P#d09ab;lTj_00000000000$rvF00009 za7bBm000XU000XU0RWnu7ytkQ7D+@wR7i>Km9eVZFcgLlXVnyw2at796zVy2Eupl# zgSn-?OI{&hQplF2zGS{H(J6?U44(U5l^k0>N4}+(K$nuUefstPzibj2;6C@c&wn%G z4DIclMQJg+F-P@X-pV4U(v-W-`rAp~%D6wVu$a5GWvu`u=P)YbST{#v1^i%+lLEjT zV3CBtjt3WRWyhqD>Ml?QEBF{AY2npi^E0H$80dL$;q1z^km!p<%ajzPj%i_M5U28l zYZ(GPheA;6j!7Za(`91^t5-iRn>OVI&QRB<#oWpe=r|OrpWDnaD;#wfSdUisK=Wmt zlfu!ECZ7@-IJj`To@K8T_PP%YR{ubAUf3I+pO0v+N9+O}4=$V;g;Ajz599-LGrkl2 z%nSR#{FsB;$stfU9tuJ2C4Q+(R_M6bUEoWhcjJl0@`V=mhOa+zY=&2GIatR-A%M16 z6ui)}*k7MWywj=~^F3z`DeMBY%Vztf4exY3(i345an&!Iz zx8>K0+#t#`aa}q5cis8ve*MHRAN|A&y+f^5Y?EgtBPPi9KWzAcA2uz205_uA9ByV) zyk~(i`_WZV$y?bJk5K{VZmlfYV$AwbR)6HIWH&8fR!$0VXYHA=wRZOx-3Abbf5O_< zOulIs3;e#9csajS$2~g?2pcT`Ky-imQE%5(tWFmG;rs?i49^HxIE)wo0000KmCuXYMij>fg&cZF|AGDwd)iWmr9$bpV3pVh-7*ZibSW+-Ciql_!LYj&VpLB+8kpEuN;V)Nq29EV^+n#V?^7a|Z1@!W690ZsjpPkQ-WMx!`8}q&pb<04kDyiE z%L8eBk@rOj2TcppKxKkOky^!lsu&a)-bp`VFI9ezNd|D_m29wO$>4x56@vmJukzst z6O}2>9UDi_o?5wH!m_~~B}>`hjw$R_4&S#VgM@Q~R>NX}MIx0k7aMeFfr%ujQ%ofe zD~Go~d_-7HVNB{Nmz{}40&8;q4u+v1jLBVFQrNpbylq;HW{sUNB{W;oK85lpR?xP0 zGt4GL-qc$da9uy=EtLva|Ji;V3?tY)UqubT&)V!|+Z_=00Y znx0Y*j$a=iEv>9g3#>b^IyRU)37_k59~2C>eDAu_e1qcv4?p2MGX_k?$y;czpzWdY zMTIKI1|%*>7_7h!`YJIvdGRY}W~>jFUQ2mwZm%eL?fTU!s8*}@@qC1KG2#U3^=Z(K z5?+7-!zNyAc`^LrQ)U>@1q_b`gM+~+**3=dy!8Ba^JwXpFQQ$H7G`WfqTGPSH#SLF zpLf1A!n#ps26uBF8^F)D>(@4F{M0-i)zC?_i}isC<@yuUPER;^7#sMLlu_%|qwt0? zV>pNe|0XdA_J8Dmj@;Zp;l))6!yq)G@*rgxJhqk;XQ+Mo%eFeNb{sM1Zn8|dKxwilS002ov JPDHLkV1g!X|I7dY literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sunflora.png b/graphics/object_events/pics/pokemon/followers/sunflora.png new file mode 100644 index 0000000000000000000000000000000000000000..defe0b6fc0667dd1c198be03817daf978e9d8434 GIT binary patch literal 605 zcmV-j0;2tiP)A@j+(Q)CSDS=4=000000000000000Lbs=i00009 za7bBm000XU000XU0RWnu7ytkP(@8`@R7i>K)xT@PKokdXhd8X=zElR16O{Ej&=P27Q9pI60 zS)uvNX|kX+i9)3v*6;~uyGaL?hR_h2FVGu4^@q5mv_l_R!)!PGa!K4V^m<2cbQp*` zgnsFDRBkT59BBYB4|Zn3_#2x_yRVbacZFSg4 z>j=qp=1tv0)~>_{P7FAJog`Fi3#Y*3KDM5>4e4{F5!-|PwHmSI|3qx#*t%6MN}I`h rsJJ&^@4CxB9jt5cbDD=g{A+#z#jz7|-j>lY00000NkvXXu0mjfPRA9` literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/sunkern.png b/graphics/object_events/pics/pokemon/followers/sunkern.png new file mode 100644 index 0000000000000000000000000000000000000000..f19116651a5c58e4d3099676fba2e324f1e7cbb1 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*toNk^X1E*k&cXo z2LnA53mF+1XJ&GKyjiGdXqmat^5#xM%|Jn*atK&Ze8vpO;wGbt-fH|MdX+E2^xf z-?=TPY-)^+svf5V{=50(mB{^u4?Dy7<>JKD4;z;-p9yoyym<0(wfyqcIgd-W|0s82 gDb^~Gds=@@JU?UI6S;YMJ3yi9>FVdQ&MBb@08R6k literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/surskit.png b/graphics/object_events/pics/pokemon/followers/surskit.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebf3a22e0a2f65277a5cb901a5af3842c7fcff2 GIT binary patch literal 466 zcmV;@0WJQCP)F6XU=)mkQ7{S+fQcf$0-7v39|*b| zDByGKK$S%2gB;Y|L;+u82deexe4u(2X%QuSd~FeF-29-88=V4>WYPIR(B!gvi&Fz0 z{_c&tH{s&5T1#&cHbqFH^MPQ-S)hw`PfWng*Y@?s$&a}t?c!vEa56fdfq^r^_L7p) zU5iLOd|ll9*t<$f%Ek!)q4OCSCU6+vy?ghv1q0McoKQX|QSzLy&&jc(+1U65%)3DU zg82;a7z2W-5n0Ao8KDz!^MP7AaPr%7&Kzw;G7iW;iOgr<3}E2s=wM)oB#+NIHKL<6 z65(KUK2U@*dMcQN*^bF)K!g@7m7p0!Kz;&>Af_%lSU^(%01Kh7oBB&;<^TWy07*qo IM6N<$f^^iydjJ3c literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/swalot.png b/graphics/object_events/pics/pokemon/followers/swalot.png new file mode 100644 index 0000000000000000000000000000000000000000..31f2741f0dd5346f8cfd822e724922f9f63004a4 GIT binary patch literal 821 zcmV-51Iqk~P)A68UNl~GJ!C^^xp&1zg0Rh=*X}OWvd0CMF00000000006rU?900009 za7bBm000XU000XU0RWnu7ytkQt4TybR7i>Kmc5GGKoo@yDi)Oqd4kDeVNhXYuratv zioAhv`N!`amFfD+{d<+=t4YAN|daEs~Hb8LWXb=jwd- z$|}@q{a^pg>h-#R*@E;j&ExTT3~~(1zP>%u}-j#xW1haZ1DBKH7{RP0r$uH zksjFKYk{_?zN_ThGwnzVZ1D9!>AtUwAS;eP&ILC3df+E6ztalfAOjv&X9631EzqW1 zQ<{~4o$RP6(E~60df*kEA&$~c3FyO>|D%Y!HNd z=nZq5ZGwPBaiL|A&3<3oY=ysy%~-3Z|K|D${_2Xvqm10^00000NkvXXu0mjf9-w!& literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/swampert.png b/graphics/object_events/pics/pokemon/followers/swampert.png new file mode 100644 index 0000000000000000000000000000000000000000..11de991d473dc1225b6c8a272651a61476108192 GIT binary patch literal 894 zcmV-^1A+XBP)K*1u}oKmZ1CQCi{2U_4}Mpx2;yXagaI z%yADpT>>4uDXKZy;0Tfyou^>jAgf?H6;Ul-GW8LPGi5M@2n~G#Cjq4b_nx75(#iT` zDMLz!LT)hr`SX2epU<)d;bAN zm~}9r1!1Zn?M}F$obO+TYqLT!%Qqe6ppX>06D}y{yVV$vZF+3x?kv}=aBm75?w(L& z(W9Pv`4(Zv{|b9DEp+qD`feK*Y*@`Nk%ys4Y*v`e6Mjq!A#AcjXO?3+Zf;+Hhi^`s zH-(0DOIihPHS88EEIaeyaAr*hSvgc-eIKvRii{zhQs7qO6vEe}PYZ*Cn>BsMmCX+; zA93|?bG67ABa92Iz!1$R8n4hplT9~uBIA?Lu1<_|(YkM2j1X0@-FCm(p8-oW?in-f#W#m;2EEA1w!vcdtL{}wy%JfJpTIA=ZhS$O9WZrwd$d)2rX8V@C^AandJi#*4{hawf%vp-0RHd#ko3^4}MA{>JxjqARK^=MZYkp^^q*b zzoQ7z{{<%KFLEF+=SrNbhBz2Vi#m~BN>dN83Ckm0cxNus)ssK-h^5)TGXHA)0o8~| U6m+8J@Bjb+07*qoM6N<$f?zq9c>n+a literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/swellow.png b/graphics/object_events/pics/pokemon/followers/swellow.png new file mode 100644 index 0000000000000000000000000000000000000000..2412333810765a4996c967fd52c17d411fd2ab82 GIT binary patch literal 1050 zcmV+#1m*jQP)KmOX3RKp4l560{sO^dn>}p-^~?AxH&- z6fbtRcqttOG8!tU(50ncAcS_zEPaVXrY^<#0?E*OkDN3l zOQD54#BjMgKmY&lx#uoH=q~Q!KZ#TJshs@l0#eUpHRc#e&!;5dnz7{Z9 zOGB2w=v0-0>Qb)Wf|V*aXc- zlaRU^Mh9*ziISB<*-in#QDQ?bAczvE#l~?b48V@10Nb2LV)Lm^nk)lR$+`z?wjjdQ zHdS-O3?NqmX$H0+VigjE(s2{O^Td{iOrRDHSx@29V_g+>=XqfmPKo>yrqJ7R)PY)b8w62M-O~cKBnXC&k=_h~ zC;|Bu={P-H^P1f8hgbGFr4x?_=}CcRnof^WeF}rN%ZVUaS<|K=&+|-o49hNv5?M9r zI7-`XDjeenxF`ztv1gK)u@A=rX*U~RsyVXXr@~R;Ry&Ls0sk-I6Z88 zp>&K#Q_6xwAyvK9rRmw?(s`er=T+p5Nvw?DqN1t+s zRjH+WwUe#BfBkagPL##xyOOA{eow$={tMCnA_2)bQK9v@}M|WZ< zh#CeUE4tuBSyo0c0Maq9dSNEeW}hQ8bxEt^{pt7dz|k)Q5=7cy0e7oJbdd=Srh)%(9xdjS=~%oUc!dae0ClR^4oN zaq2iGF+r}rYe*28OHeH;c|82g+S3SdqPcvV8|z=^XUyBw&8li@0ra^^B2^*Bsn32P zJUeMQrbe6y%}3?ur3p*Du0i>IR|1kqM!=3{#IlWI*8gf<5TP4G{C&Wtz4>t#S2kgo z6i950@kBotlIUgynIO6t2lmxq29X&NUS2lVwGBUpGTnJQ!2Hf+wBY{Gk1s;*b3=G`DAk4@xYmNj117o_Ui(`mK z=i4hA^O_ArSOcbo#5u2O`Kjo5{fDQb{Gm&_DnhBe6BQQU4tc=;;?n-LjW;CN@2vDb zde<+fW+Su3xjB}_&(6&J-0x(u{gzo(W;JLD-w^d^wYZ(dTLpYz5)lszkT-`5(^iEx=eK2?Il_grY*Ezv*zXW53^;x z<{xnH;WEvN5~-N7E@oG}clz9`|2-T;g4QNHNWLNCxg_uS7LRF%Roh=Xik3}l<$K9B zH&DMQL-~9Dueb-!@gEYLW;^Y5D2_SAS|~lOy>Pqu4n~#-zQ3-Cee1t^V154cZyuX| zH(i<+_u#5PQU0Y+K_>~3oGTl{r>9oNoqjp@bn2pI-Fxio>veA~@!Z?&Q2p5>)FI%` zUXN*y+OA7m-l?1&^Ofn7II&fvaQj0abG7i_*B?L3R`Rd7GG}uS h@0s~$)?b|el%1isXSv?T$YxN~c)I$ztaD0e0styy)iMA8 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/taillow.png b/graphics/object_events/pics/pokemon/followers/taillow.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a8afac0cda41aa3d5b2679993e4c69f77c4cc2 GIT binary patch literal 465 zcmV;?0WSWDP)FN1-d4T}|0g*9LNokp>sj)#pLGfv6o=Lkz00009 za7bBm000XU000XU0RWnu7ytkPM@d9MR7i>K)G8C99-O79b8Vx5{Sh? zC@v08?hX}cpn*W~8(6=?m0AkV*0FRD92^SaX3^poXum>-^Ugq_Ge+Tv3)cQTQ9vZHrdpE(;SYiv&CX|Xf>nVG>5NQXAnyn zaf?+$%9Yq`h+S-Wmhy>PtX_#AT#;rCyV!8sxN38Yg$m(7E~0V`yV&qH8h>z$EdzRu zvA$n^SL|ZybZ2*Jv+9==n!UcyZLX=14rZC?8@o;G zbPm9r__)W7`aT#2DA!fhc;I;l@XsRPXu*SD)Yq!u{a-!-N_^W}H$MPG00000NkvXX Hu0mjf&WX?i literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/tangela.png b/graphics/object_events/pics/pokemon/followers/tangela.png new file mode 100644 index 0000000000000000000000000000000000000000..a20ce784c54aae25fd24125bbdd15483a98d9707 GIT binary patch literal 656 zcmV;B0&o3^P)@~000000000000000E98P!00009 za7bBm000XU000XU0RWnu7ytkQ21!IgR7i>K)G@D{Fc1J>Pk6Q}`6A}(?NzJ(fL3~H ze*l@|q&W~1UVO;gQzf8#)t#lT_?5-civfouQ>6~MDWA_i@No)bk9fo*9`XMK-SPbm zw}ZReX3SQ%eeVI9sJdYySQK2CIPt~i$bLyXJHWKMG_NRi7D7`Z^OOcXD;V1^2~#?> z;ntD48(~0%^wJ6k>Sq^8 zwRY#XS~}?oY@dgMv37ALyv3RF~BiE6_Tn6xo^+ zhhS0{Mj-a7Yk5k7C_FVXcc~k{n>pWlX{!bWxehIf?GOCXMi_zTvAFQ~lLXe~s+Gw> zOMq~_$o_y7IEKitn3>J^xLSmkEu2VHc`0|HMUj2MH~8uK+uOr=?k)_nL($;Ny7$jY zIUOeA!sCJO`1G{j@0pFjL8;F{~Y5k*r}tL8tx z6x7z!m_|OWZQhSPFGAb6JRlx6Q(M~(+kE=>OIpIVZeLwv+ZD}JEw*1G^CGitC|Dme zHTF1|Vcs>_whcaJMVHsFre@4edl_|2KKB^rnBi_#&mbn4ZKn;VJcg-a$tj=Dvh#9y q%$D{20d^7dL$~u6*|qKeEdBzbdlzpMd1hV!0000}9Spfk7DIpP&k&)@?`B716;i*Xg0000000000J1@_~00009 za7bBm000XU000XU0RWnu7ytkR14%?dR7i>KmcMVCKorMs<5r|dFk6xQ2Uv=`y1Iyq z;<1$#wOcD-=l~e=h@1hEt9@0nRvEHZ>e3;Lp+LB_O}#z{!5~H3Hqn0Hd0>PlJ%ZY#3n5F86DYKrHKXs&)2iz)eh&8W}Z} zn*3dOn4}D7#d(5KP7*C?f8~!t>oOQHFDUi!rH2P8r*#!p1(#Q(^6v~f76L#)w_*=* zj#yoV$vsaNQcYA|PfK-_2EgNlCR$ZyKr5~v(9XDSej1@R-V8o^?E{!VNTquUYq!1; zo3|3{kV?FXYfsra*EObKJAQ&%8M>jxB@TeZGH-0H>9R4vydnpH4V%v#vz&m+NOL-r zMZA^@4!LF5oacCLz?U*(t4z`)j`#_k#gjr%Wfa*EvB<8b968`xyk_mQm#+s~*iyJi z()kEPCZ6D|5L6k>7MP;BccCCLM!a9}Loz=({--Vse`c zl58HHE*nhBzKxubcp6DvqOh+Yg^4+?`VUe{^dx1C^aH jSbZLL2<-E(7hB9VIk@1`N`4Y*~y6j0000000000+)A?(00009 za7bBm000XU000XU0RWnu7ytkQDoI2^R9J=Wl|OHrKp4iExcQ{Y;4urT#|kM)$4D8n zc8HV_Y6+8#Q&iufOfrZgm2Ivfs)dv_@Y~ma@*4cEvV|#V6{`n(A18D5R zZ%qc7+^`LPxH`AzA$HcuFo*8C?neXZ^_bR}8CXDBw?YfkSgIatyUvH%hI+-&y*fR1 z@eR=U3tWOgubs|Pab6oQ!%X0CeRJrh>vJOm3wW2|K%Kil_X71$*mmb1{TQ!M<)Z`4 zzhwowJ3W>PA$1R@1`d7S{}3Qk=jNFkn4F#iAW!FZRR9n3WSDJl?)wokmkoPetyco< zvEQ)t@6KUgAXDepxzbyBI5V*QM5`S|fhP@r@A!#wrusEYpHz?w^l)|lBasWJ5)&_W zlrkL1C@q4ndf|Yh_#7NZ`ow{Gs=TVQyArl{q#qEjWXW;`x)P~hu8RQlu* z1VbM_d7rzi_ea2-9A-+(OnhybR8{4nYI{~ycuOM_I#GO&PPz#GJXLn!`*hmhkqO`3 zbCru{6v&qWE{}Ms1fE2Z>PI1ZC1wjX>+@cZZ?t?=T3ELpnliF<*=pcXUw74OO=X6v af307m3NaIzB2SF~0000>G?r1DbcB60RaKg(b3^CVL3@*p2BK)00009 za7bBm000XU000XU0RWnu7ytkP@<~KNR7i>Klrd}DKorNNRT!=*HrZPGdP4_+mwtg9 zZ#*a-LYK@LvX?BSpP&$EDOo&t@*ro<;4a}fLjzZP=qJeF&4^$$8eA!E{O(>WVG5n< zHwd17r~mIgBosya+Sk7J^&i!GegF6T;7QoW2frVY_#!yP0vq|-t%ESJn(=Ak<2H7B z^?{9Cq?g}!o;DJs2S$jJ7 z1@WEEkGY_e+wxd_U?(@Kj(6JA`~+@D(9`+cq@iH4IJ(nwI>d#Og;F6WVJvlSJVEpn zrwd?$l|AaAqqVqjWhKghlTaW!kZ1w@s0Jx;pti@VGFeZhs1rMP`A!WO=(5icV;`xrkqs<-S!?AmRviZ`@+@?Kx!|~ zEdkI)VYO^FN1-!SSi7sgW63nR!_$X?eM!c~P0E;W1(Pp`kfRVE_OCzgE$N00009 za7bBm000XU000XU0RWnu7ytkQV@X6oR7i>K)iG<^Koke?%V{rh77b3}I7NvfQ4ms7 zg!%zGb+F-4j3D2^A;pxM4$@+}wU8lXQbfMLIyT7TQSRS00d3B=~kF25pi)`qt1V&h%@HZMCh|SLYP-s~lT|P9Ed7!L*zkK*u8a;jKHs5)T?oBFm0^UeuOhNwn zc#%ZK{F>1-=v?3TKipsEzsoYm074sAAWtS2Ns=E~-3S9D$%&D~&=wm!kuh}QEO1_~ znk~vYBK~u z$P&F`lUTn2RqAJwM8*C@=xr2di zu2IL{opMAewUYctt~qN6{5T4VK>gNHxHWr7)~I8TV3wzuMlqo3tU%Qx_ls(Oi@Hgc)2+7QOgHZ+| ze!-bhe$iLdCFF*>uIYq5&CE8WTTM5m;uh5cvt=wiuc~9>gc=POH;`W0;Cl#dVN5Zp f{>}fh@!!^85p96jPk|7>00000NkvXXu0mjfz`t8B literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/togepi.png b/graphics/object_events/pics/pokemon/followers/togepi.png new file mode 100644 index 0000000000000000000000000000000000000000..d588b9b441ba0b19a2d77f256f4bda7bd0149869 GIT binary patch literal 553 zcmV+^0@nSBP)FN1-$?;K9Q2_w~Am}_}00009 za7bBm000XU000XU0RWnu7ytkPpGibPR7i>K(7#IpVHgMS8*bJ?g$6-zaB7M3AP~+A zZwQJ#a=cpF^nX_W|&mmK4J6n+gVPMI1%HjtZN$HdvSozFpmBfH9|4}W!(AM{wU*H~2cntd zE`K@(U8rKLb=*B|^BDK;i3{vD^MG&^9l(CpFs=gj-G#MkZ(#LkoB7BeUUg~sN!e8bK-1P$9Auosp00000NkvXXu0mjfzcKxM literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/torkoal.png b/graphics/object_events/pics/pokemon/followers/torkoal.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5835f1fd392c88798902aac49a81bd7533777f GIT binary patch literal 731 zcmV<10wn#3P)IZ?T}xiL9G000000000000000OgZzd00009 za7bBm000XU000XU0RWnu7ytkQQAtEWR7i>K)je<8Ko|$`N2+Y8@`NSK9IKFlrBXUj zW#ojAyiinNbq$<}JW(mR4-nV7$RkS_6RA@dT8wk)eYu`pY>In!hIZsZviw8#|K98~ zz^P7ks#E>9QbyJO=lpZhtn$mny-k%JLO$CSemTDvTbl}hFwL_;nekj4v_p@IPUNEq zh2>U>sGAZiWNCvI6a3d#Z!f>Nz1z z)j|kyTjn(If+4@Zy)1L(8mT&2np4EZ&z3o<>B?f1cUN|aE7!HABWlfW+f(jaxZwd96ZD=YHFh(Ko7onYgt zLp$`YvynIn?1y6IiAOED;q^VTIO?xKW_38OwF0(XvD@1A2$Fsdg1g2jooOM8)2}2oA}|mH!=?wlW9j&8EcrOVz`irKcsalKOq;;r^nl>K7~2X|oX#jR*h$ N002ovPDHLkV1kIuOdkLM literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/totodile.png b/graphics/object_events/pics/pokemon/followers/totodile.png new file mode 100644 index 0000000000000000000000000000000000000000..7973715de3f3fe98bd5e35a2b1b93a1a4e697dd6 GIT binary patch literal 574 zcmV-E0>S->P)G^T7=|N$Md1)!3Avpj500000xI@)W00009 za7bBm000XU000XU0RWnu7ytkPv`IukR7i>K)W1r@KpY3~EXCVh1V`V%UnB8Kw}RG5 z2!YU!zJO!tloA4I;--V(7)#18bdVy{*gJ>EHE&crO_cS zlmT_~4zw(?z+}Wmk0} z#PW3489mT!xM;T9&!_M9ekUc)PcEbhG}ke{W9~ekP8*!!>F}g0in{CgBbv!OPq-uD z@oM$)A=kNIzkkQ~0NvnnThm;(;aliDEk#4ZEzThUe7-_?54hpGPCOUrKy0gS-V}OA zGf&(cl5so2QHfZ9FmU@nzB^pdd?FU8nsMhlSd;mk!> zxtHuz*j44)Cg;;;r^yCD`u3%pA_V2z$S#NH^{x$uWLZg%M5<&7+j_@OUp;xWaa?Iv zxx*HuG{tP=r3nc7fm$b#^bWj8o}F1A-?DZZEPX;_ov3xP=kNcPPmsXx6`}mWvH$=8 M07*qoM6N<$f)Yv%MF0Q* literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/trapinch.png b/graphics/object_events/pics/pokemon/followers/trapinch.png new file mode 100644 index 0000000000000000000000000000000000000000..4a27dff4060a3695d7a84ea5c14b364ffc5a4b34 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_Cg&9b0+m^KrNErn9gt#u;*!XZ};mSzQla+y* znwmd<{$yli%*@QJtgI|FGz6+b1J-c|Hvxq>3p^r=85p>QL70(Y)*J~221aL37sn8f z&bN~ty$>6R9B*!S>ffl|@4aBg<7t5}b8q;4c*oxH^2D{(O;_~|%I4^X{L1xRyv6fc zNfU?MFYB+zPygP}?#Va<41TzqoGrXkFFnDz;%H19_ui6M>C6lt(gY4&c*xr_apUZ# z>C7tsVybN3ye&U)X4bo|?rn(=%luL=H}O`f_OsnOwXNQCg~PKlt->FRMKg9MUC!H* z;`cm)ZBgR+6ouYd>(X{7%{^imyME3&L#G=O7plL>shAwPyLfYKVZY`16Q^F<%{-sP z#Ad60n%yhlyGl-Yg{f2G+p_uWKaAwd_(M4#{hht}Z*@+ml-VO|q4?b~CsGaGuD@D# zv|Zr#&H#g@4Y$8m>Rg}g>=`Vic8F=P4*hU%B)&_^>psi`QHvd r^8KwF%4~5k*?v9u=LQ|gyY;8kpWQDIv={ur4+?fqS3j3^P6R0{{o0t2#u9L@rd$YKTtZeb8+WSBKaf`Nh2 z%G1R$#G~`=m5q7L1_EpkI?gT*6tDI&3R#pN@GNhxamjisgYZ+@Eoa+89^T8euciX;1LCH|``KRlauc9v=OwLkOUn4c`$DETAxiW#TYW!-JhPGv7HldgI* zZPv%VANU+Y8{Per6Nkm!2T<=TKCVz3yT;Gmn?z0q$%z9y!b9=l+^@%Oi62 zhOKY2nf;>bd#g0oe0;^La7`v!ZbRnpnkWxjn=^vNqT8OCF-q5*vFz!-qUR&l+Hvz+ zYfhK8xUVIjLYZenw^ovxNk>EEs@#V^J_qr;?>peSy2Cz>&oO)sv&^y3tnClq{diZK z{OU$S>@>5dOD5csef{~RWRlqOpq4Xzdn|qLEi2nu-}?5-&7WsK^PRAIk$-zP`<{JW phu_$xZvM?*x6dwncKr4F8Tu_%=aO6vq`W}k?CI*~vd$@?2>|#8xQ_q; literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/tropius.png b/graphics/object_events/pics/pokemon/followers/tropius.png new file mode 100644 index 0000000000000000000000000000000000000000..d052138683fe802e4d6bb8ae6a85fd337cec5f61 GIT binary patch literal 1065 zcmV+^1lIeBP)G}E5A)$Fud0|Nb0RaF200000rKGab00009 za7bBm000XU000XU0RWnu7ytkRpGibPR7i>KmOpRfHWKS_;mq$+{?RMTse3ov zRNy$+`ia!@JS1Py_PkH+Q~TdEKm0iUp#Jb8{1|pO)qi76=@hR?i0qSN{m0lT=EqSB z2180O%2qHUSB?iHZHELCN|SQ`>=O>$1N-ue76IXPm9IG)k{SP`!5*h<~z_CLsI5BIUI6)s6GKbJ6R%}D*iYuE~KOZ}; zDE(G12&G_?jUEozcjyGEsS4@@2Nlba^Q$)T_3z)@w274=5_Xr>i7upyjp%0Yd|0nElB3g*|peSOoQL4a%nn8Xkl zMFnl70GMMAr7e<-!g;YB)XWwga=-xE83gM5qt#CJa{b@IHzlL5KK283vGAs|O)hIz~H-e#|Mn_`-AYq)28 ziwLm0UrtW{e$K%;5M+W&<_tu6lmm75rILT7nTSVMPuP_yA@T0ybXyT(>z)8|Yp5DQ zbQ3uqkH{^4c6wIsZb4+btuO*#>^U=rRVJeJ{$-SkQCwO>WM`;gT9Kk4aShHvAuHU& zU%e^u(_a?k~MXc9*pwvNa6A#0B?hcNLHU9ZF9Cq=HJ-<4jz(?D_0R zfLA=kK*-KeiEIQ#0oh0>XQ-#9*?e_JHs=75piAV4L&|2CE&JcEqIB~*#NI>piPA+; zthS1{1rTcCSagN$MY`$<2z+-9vxv=FgW!6#Sj%}gI+)AFdULbqh15rbEYUEK`lyiW zl5~;0S}y0?8nDnbujjYGmYtwdk7s+qv!zmfL%EQ0Cwsh=a=mAFOR4$m?niTH_)#o7 zK@WePY%^2u8_MnDa<}fy$nc@Ti>>$hi)DA~exWaa=rXGQSbSt}s0IHWpl67;dNOu& jaQHXlJ?#Sl-q-#CS{jm_jR6va00000NkvXXu0mjf_{{CB literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/typhlosion.png b/graphics/object_events/pics/pokemon/followers/typhlosion.png new file mode 100644 index 0000000000000000000000000000000000000000..9a836bf5616f2628ed942402bb8231ba0364dab9 GIT binary patch literal 1101 zcmV-T1hV^yP)G?Tfc>w_dX<0eBF){hkVE_OCA+eVa00009 za7bBm000XU000XU0RWnu7ytkR!%0LzR7i>KmA{J{M-<101#Ppq7(uLHr8q546o^qX z_y`Jd5jJ9)gA2zVVcp1yGHkPj1kMzO5S-0s8&!dn2aeGl>^0III)OGR;v!949OMv! z;KB*y3WNTJ%-tecsG|zwf;nApri5|3=ux=j$;z=bvQVam}w=y#Kwy zu;Xt z&YpEdA}V>IDmYz!9{xTyc=7m9GXVbn*C8Q##;iZnus1wyqc-|E7CBq6oS8i&7vIE- z$Y5ru8C0_UBu;VHVA3N*Fd@B8zy#a-p2*p0!JjIDCB8`FB|cZYx@^Q(XvS~shFUDTHqiTxMn7xLwVjrQy*wYPg?it)mq+mIt zFp-97*-(sQk3}kKWEEU+!-W_+)61tlFC|)^bD|7vuXFSmp`$~uBU%!SMU#17&T#u$5Q=8Sm=ZoN2Iv4MKBV!=2i+F|+83-rOCc+nLzmP};D zc)0yxYIKltPD^h6eXx3t*wn+i$Ih1XRFHwRR+y|b9FhPGGSdmWrFDJi7e>XlB=Se)$=z~945!W;3Vxx zW*OS3(?N~OiY-d3^Z{%Rq@!C1o>b*}wPdvnuZQtxVKz3H{iYNHX9{6HsnZ9NnR-5f zZ{%{rG-G=0AN2?e9w`C0_GLof$?h6_Z$LDI0P>hgL1#AMd}CLx&olPB$aF<7GaK@~ z+WqX<;3nNS_!CHJAJ(S=D>*C@(x5WWikNO-E;zWnpN)L^gf+PA2bwF7DCL6E(Rl=m z#7GL3df6uCL#3^^vynxv@He!tOgiH$)(t~o<@rlnoct=y*Af2!;b-aM Trp3Uo00000NkvXXu0mjfUZNA- literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/tyranitar.png b/graphics/object_events/pics/pokemon/followers/tyranitar.png new file mode 100644 index 0000000000000000000000000000000000000000..ec13b289dcb6ba3b5f840f9af518fead6263369d GIT binary patch literal 940 zcmV;d15^BoP)L=X{qVy`LWq~0RaJFiNP^JK>z>%3@&9J00009 za7bBm000XU000XU0RWnu7ytkRB1uF+R7i>Kl`(JAKorLVF4k@yffe_wRH{Xi)FpRC!w^*&`CBB!mY7#Y@BS_Q}f~`9Fc6BiLq@Dp@f0j362+Uh6eIAmWS2y>U0Y;CrUFVE~&kGxSMSkiIcp6U9S4h*b*e zr2=1dvgo+%8dk_NYNkfA()&7M4VT`{g<*Mr zl)&WJS@U`fv$NNfzdbgF7)d|;_4839SP|qWWUlL+B{WQ^;Vhvy4TmyG;lT-y`gI~J zF4NJQm}^6IsPQD6oDzLExP&PNBe-DsU_l7e8$iq=vek1YClvg25lwlWn4DG$BW{abrN#9L3SB#(N!ey1cY^LNTa?%(QlAZe%G4+BLFiVV~!_Npc{lN8z4!15;6kMq> zZZfJU8^hwzk@CR$;C$=J)qyc|df)BuYa6v-J1oOqXWdG+>RrqKS^Ne`(xO~7a|7@I O0000; literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/tyrogue.png b/graphics/object_events/pics/pokemon/followers/tyrogue.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa25a19b8078015b238866860265f33536591e5 GIT binary patch literal 515 zcmV+e0{s1nP)G_Fa3CW?^ktr#0QGoye00000;7cV|00009 za7bBm000XU000XU0RWnu7ytkPc}YY;R7i>Kk1=b5Kp2J{4&s_6KOjpxWJ{ZbP7VeF zhnqG5>DawX>5@T$k}J9v`WL!qkbXGVF@u8;{4b3cXzn|6R)kLV*`9mv-tRk2>*(m{ z_(v>^_D+19$<7JA*6!;u5mVVYX6PGro`wEiFKo+b0_-jZM z9wyW@!TSkiKNa4==S{43+Xb*!mpy#70OrB~$vMG0#BZM3eaCTZh3g*=01IJT$xnxY zIcK%*I7&C2A{Q5yy@ce98REf$v8-{<819q(NH8mMTv+6{UelapXt+i!>}A1ye}D=n z{ej~(&Gp9_Zktqopl`=hRJa^ZS>t^3ywXI1<+VIO+gz=3VUnp{DCK*u;zIstls`Zz5!Mv@FAG^AfW&N002ovPDHLk FV1iQP;#&X! literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/umbreon.png b/graphics/object_events/pics/pokemon/followers/umbreon.png new file mode 100644 index 0000000000000000000000000000000000000000..d15f9abcfa342221af91ab49b19311861fd700e3 GIT binary patch literal 739 zcmV<90v!E`P)FN35u_+lTIYCKL0RaK|*;#3Ed5JjzDLFv^0000000000B*hr>00009 za7bBm000XU000XU0RWnu7ytkQSxH1eR7i>Kmc4GXao&vBsCodq-1w3_Op=3OFq1aU8dQL zXG~cFTpmqIKdG2Sb~G{Q%LFSdJ7a_vs+KnPto^&>G6l;srrZfCW?;29 zc$I>I9csB)3Cq{vW&K0O&cIr3V7-B^u&aCU-t<>S)^Hj!?WWuwWbCXh-8_(d0H25D z(9mxNfhSbpBxM2-Z&5GH38P~(uz?30x>7I*dTxS%Y@n(ddyqw9(|Rrl<5n_GP=9~x zR;U>TM{dXmK;GR~)q_3AXz=5dB!)b--k`mQHO8`35!3!(-k+rJ!WG%^Ds(8_8jy%e z8=e8F@u|TYn`7>8_y%`$^No1}nPvva^~g!#2Hg1Op1HvsenLAt%-hDSYjVd1j0uX; zOwGj^Y0jo*+7K4vV_{a8geCG{M6@6d})Z{F=A?v@z^MopH^Mo6SLc|q+(c=Nc#M+C$`$OKl`)IkFc^jf^`P~j9W&*&+fFx_8bcZj zE|Bxkxntp=9NGE<3^v6OG?#0;b?y}R2nhdxj)#t*Yxw?4KgE`<2)j2GI^358@<{Ug zetIP^AhmQE_ON3_I-oRrMh*o#se%-{P8fKC!z)~t3 z;!mG1aX)>>KAY6UX7~2hD$=}RZn@1Qs0Au2u!hI{;=@SfkerzE9f(Y5Ox47$gP28 z$QtIk5ro1TaB(<;B5mhc9Epcs(B~l5sD_%N5u{*QHEpCSJ{T}-*l{yI5lmH%;6y}G z>KaVrMo=|^L2UWFHP8n=+^FToKsQVuOI7h+kUola;Tn*+fC<1o=teM@T0U(%XcDr5 zouMjP!3Umdd*uulTtm<1nxYzNTEV$xyCy*~hCh3YEI0FXr`NSsUCVSQqz2_~0XsZ7 z!3bu3#|Q4_V_4UCb+bXH@58e?k9&jnXA+OeHAq4XRpl3>%wiN|Y&Og}n`@SIt4TiJ zDwoYWv}E|r#+jv%uFN1NiLs%fp)qNRfmsY$00009 za7bBm000XU000XU0RWnu7ytkQ+(|@1R7i>KmO*RVFc^k)CzVcF zYGBGxECa5pH&tP`M65Wpvy_y(St`;?Kn~=5ATo%%r3e&Wc!lFQ4m&#qjCAAJmjXFM zi|{GHp1Vn;e3cjWsw9rOb|%=XF+t2(V|k}fM4;gMDi;j)-L5D7g~5IYNlZpd^q?B~ zf)gQUS3f>|{mjn-1&8T6qb=`cr{8R6H!;TmN0x2bVJ5&=Le6er?4qU!%otpxPl{VY zdJvSPo2W9t6I`XMFl0i``2M>2V!0jKX&~pCB?P^VhWTh?vyj16 z6 z{FnX8B!k*Az&Oqnmgp9t|K!dq0HLE-&TI#cBmxKlGSfGN=HK(4>T1M wg+dKS9f8!mV!Z07*qoM6N<$f}}Bxxc~qF literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/venomoth.png b/graphics/object_events/pics/pokemon/followers/venomoth.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7f1ff73b618eb926357a1fa3be5777831c1d67 GIT binary patch literal 1087 zcmV-F1i<@=P)FN1NL0JI-0l~q+p=t4PadGLn`PsRF000000000000000_>5MQ00009 za7bBm000XU000XU0RWnu7ytkRwMj%lR7i>Kma&f8I1q-_khs=Gwn;Zw353csb~g`@ z;!2+Y8$v2CH&O_v4A!}N0uhAjLmoiD8V0)*SMAH)kRmC`mu!*ha5ycn_Ha1!e>0>> zW!eAFfArbB;NwmD%G#gI&$^`<^tS%LH13nT@f!Ev0r1nf58O?|+d1@wK%I}H!p-5< zB7I6qUG?@f2}ckqobCLqh6KROl(Wt1Zq^4%M45@G1}^|0a-V<+fWpN(K}TG5-v{uJ zT^sw!3s!d$XB8cWjSHyk-X|Dr*OJYfe((txbfX~V5nxL;+Xet4rUEJx%i%@cYGY>t zk}^;Ljx!FWMY*pwQuekSB|}B!DFC3{RGUf$03zP7PS~Lc>2h7{&@L+Q#L`!gNo&ti zqef-z-~~W<;(Fxu0NQ9w07P6@2(e!>mqiUQ7brdP!B2NhKC2u%K?0|7Kva&n_7!-5 zA~#(j0)QhX0Si%}KwVF(;}*zz;=|dCawx49Xo}vB$b1+y5o;Vy5ugxXj1xFT;!c#- zjxFL)Lt_>Ktn|c(Ja(+qh^TuQdzQVk+7b6-TN#vRlWfij)Ei1v>o<}BHi1~tj-3QRG(F4(xGfxUd5We!{t4G# zk9}-vc_w0IAr>^4Vtp&n1_5*eP!6MjgttcFqJpd%iNm_Hb8&nR*X>a}#R|_vtcGY> z90mHPMC{apTV8*Cq-qz(-EJg~V-su_Nz!?PD21Wo!+_*JP0_~%M z=@1zOJaH6YP$&>B*b*Awb0S)DgYEfBv>_XBi!F@>f{={`_qR@lN4)_chK>PySr#r2rD~bO-T$##dMV zB8dWycn-i;ud)fCUHv5%8~^^QUMvFBMBL7c%-Z?<3dz3!@OOLy;LbY_;CntdolV3) zen(-NhVp6P literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/venonat.png b/graphics/object_events/pics/pokemon/followers/venonat.png new file mode 100644 index 0000000000000000000000000000000000000000..ce572706871a2d8b6c93025d4d2c260485c3c1b5 GIT binary patch literal 589 zcmV-T0K)GzTW-nL!4F`dSPmzlgR9W} ztQ^+bPa(KD6)f?HlTdIA2ikg`ql<0@A(SU>Vuud(L%0bhm8MPZUg_dw|JyGwc}cFJ zp100A>#XyCl6oEyOWafraT8(9&N&sC@G_AK)Gg((*t%6iWM(_pI`@y+kigBe!2HyT z32zp=cN%()8)+K4*6|M-11b+9%%qnL=%AMtnjAlpc57%piR<5vRmonexJke&ae!DI z=Ny7~@wk?C`n_$~>I>8vQ{kBXDnKUZRoCi3ynO~IJjN|mL%`fW;|?0 zBm)>C&e~u#bgj0OdPJIAIV zIWD$;rOv{bneAE+ZGHwRos>~m^t)$>Nt30lLQU1RPCcQNCgBpRE2B>0NwPTGwLVgf z*2}eJt~79~FSG^3PDPgG*p`oDx0Rcf_G5O&M^??(900009 za7bBm000V|000V|0Vb6__5c6^_(?=TR7i>K)G=t=KokH_%?23^oomoyk)=aMlR%+s z#?xeLiVs?F1~2if#fQLTYKBfBlPhRDc>GvfI|f1RU}~R83HBl+NT<@Nr#qdj$me<} z9SS)-_!xsKcU1jowAA?il8k+M4!lWSFF3dV$*eI-C>l`r(H+B7xd0 z!tR)#8+oAQitNZ$TlXA;I6e1+rnZ*M`;Fm=WA?*4rFGd6)zl`9-f++}hnm_|m=H33 zHYY>yl}=?XnO|Fb!3{Z%$&~Q4EK7TdrE&ag#QE7)MchWM!wJn`yTRJ{+CSY;GhS z-iSk;MQK4;$wMx>iZP{l;R7syH(WA*EvGna!tt$4c#}JOO|5%AvbC*kdyUz8wSZ_W zCR#SX0a<5>pJ3D$3FF+^b)1c?tMD3kFh0G9alE2|!lD4iX9>ogw%Ri+Mph^w+zEKX z*BIMTvPS&zHtu9+oSw_2#rm=?ZBa7JEenW|@q}fwnZIY7lXZ4=W1N4A!r8lYaBtqu zvINp$W~*bfky(WTsS!p&dLTGk;_Akm0<#$L4eeE+HbTfwkVq&BawBfqvaq!&urY4u z1=>ri)4{D}OKe%TglU#gN9`5M79&|eT4bO!S>dxa&IX#=!uBdZ!ZabJ2(>AdUq>n| z3u-h>L)HAPLN<5)mT3By&&!r9z!~U;fKJo0`R?p70v>-93(9{A+x22FeN=sW*FRam Y0jaAA*XSELIRF3v07*qoM6N<$f~)bV0ssI2 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/vibrava.png b/graphics/object_events/pics/pokemon/followers/vibrava.png new file mode 100644 index 0000000000000000000000000000000000000000..466a1de0d12adac8e3064c07a2c40443da7bb5da GIT binary patch literal 916 zcmV;F18e+=P)KmA`A-KorNXi!R`$Uc3Yky(L5Isn7=6 zu5IbA3?_rXaDvc+V$-|yVnZN9I8PZH@1x+Ry<}bWcpIA zR-9C3D1hFSP9*s9ODc$mifhJVm>G=6XN5^+h5}rPsv{N*Qb9bl)d8>=+S!!-bFVO| z%us-kg+wPK%eRu5 zjiK%VaF)N4gLysV=?ZZ60hq>y&G{xFkC-q8#7spXd(V=Lw8Pi%gk>8~UEq|&u998C z)oI%^hOA3iV)&pL64GK~r#}-;$_*iVPt6u0%Zb`9?Xn_6dj+%0)z9E6ITzZHuZ-d5 z$cGJCzGKwgb25GdS??JG7xi`9;cABMgZA!62+`}! zM;v-eB!Xo|9_n=$Jr8-63{B=RpImq}YO}~tGm8!595BLgP1c~y`c~I3{4Vkgy4b0$ zk!!_$tUogm!-I4J^H|~ARAw|7-^SSLbSTalMr>sV2Ya|Mzszt4-^!if{ltiA*_d;m qKlreAGKp2KkvQAl8PBI(GfW*=+Rtc$F z6(Xz0Mk*70fvABCz#}*hY;PBf(~MAzi8-3t@?hm#9+5o{jB0 zJBAKbruG)}obP*|`)uw2_&@%cA>DJnz5UEuxd7^amya6NOvDiH$cPD63T-Pkk-|7F z))B@&i;IAMMx~0fE z>;qwJ^^E#4SH?R61UHN_e}fUB7pPecg+H`0&OlKhbxqT}cqIsra9I$pb%|Q2cR72) zdKg$4VnIMikA3E-;EnmwG`WBYjhBLOt@$oi30fW z)HF|XONC&sqi%KdWPZfD|C9q^p!ASUv~{2gUm3Q~O!NKgr9x0(J0?mp?|wGTw>2(s zi!X8t7uYuYh}mp5r?VqsB?>{wQA>`J%zF=d?c7ulv_BkYTY_MSZSaH;vahfcW8D?H z><1DzZST47E%GgW}maohZ_6AaGd}Kz3@Ilnq1k&dwbn8a$u7 zfm3aeNnlX?#)?IO$AC`^v21t(+3Pqigea4~b^~V_lulqUr<62>9s3MJK^1GRV2Azc z2|_SHqiZ_u)7b!tyyLUP@^D!JhrS?Scq`=>Q*eNqo&b#!g=~KA2L|jge&Mr3zak`C zOpwn5fx%&u`c6pZ^or7%f4h0YD=vhC^deB;^>N?vd6QOUtW^N~$^J_M14w7VOM=c0 zr4x>1!NGM3N6tD`^FKxb+s=j)G7DtaDGO{)^aukIUM>;~pw1L5W5@!xsc;vy9L~k7 z?>J2k+fkE6v60k&u94lTN1M+8Bog pf8bi77A*;xJyT+9;|<*B_zl?3>6fzxXodg)002ovPDHLkV1i_Vtr7qL literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/vigoroth.png b/graphics/object_events/pics/pokemon/followers/vigoroth.png new file mode 100644 index 0000000000000000000000000000000000000000..4aad2e9b6ef2cab6134a1f234c117aed3bc1bd7f GIT binary patch literal 759 zcmVK)IpEZKokJrNlBXUFPcg=k;cTZ4F|Zv zlLK828skZm3bmV*y$Z`85V&nT2%C+Uw&|fq7@O#LbK^z57(AFw|BD?eo!M@Oc=5(N zG<<#SdymO<5IV#m4snQokBj{-qkTTkW%EWzx<6O;dhu55i;{PHwww`??doFg+NRhV zAuEyPHv?kx)pDk{)?_)mYMMf~NfNri%h?b^mb+{Eg7I-Sy~3u@KnsGv%Q;!;0oNdB z8qLLQI$4XY8-(C?vCFd&XgXWrg$}n- zYQF#df$eIG|6J88k7(DLcowGV#pE3yksqxK7r$Ht3$LZ?eo?3a^A z*Ij_#57RP>yq&lgO%}sVB(M~EIF5~myUSNohuc*+efI%;9Zq_G3sQT)Or!qb+2hx* zehvhdLM=M`ezOXdBFl~EUs^aBxee~l8ZgsnuHf<#w6(xeU_?<&u%i_E$@*!FwBV%G zb$8Zqg_#z_-{SbQ5#^jURE_A9eS>!!L#m`!Q_6NjBP}c2x3XO$SiQBcEfT1zLpnl3 zL?Qx0S2Y|EfTL_60+xZ9lY*UwXOV|Hmr`>Dll1~%+cb5SS1Vv8Uv@TdA9r;AXhAaR z*aL_Ekb=5x5oYkZej{LZsJXMrZ(9WFSv|*Z>jr<(TtlhrD(HwieosUX>_vFB0U pM0bL3Xcy&e{G_F?nJFnT;cKlTS$7P#D193X?z%(#tFxSoa)TvByqio+JRiM4}z>BI=VBfaPmLn16ks2skCrQmHmZgzm!U0 z+V=`AAdR0~1j{_yaSMgZb-_5Ez~{2RP*F+=!-y*i?Y9UmATx2JfHRZ5jDUOkVAU`R zP-r9MLYYHRG}0m9FSLNn#Fs+-;;=fvoDs$+x_*r1HbQV=@ZK)5J|_L=b?wE!>3+kWT!1 z~UfXygCXu!w10SIaBolLJXe(h%JFA|dofm4haK|6W;gYiOHS1i%CSVQEkB%;`tvChU7P?oHgO9tz zFygN7w}nv(oSS8V>s`6UtUzoH@A|yN0(lAI z`7=fUN-u)Jl)FbB+d_9op#NKU=(L9dT7`hmVyOlA<@aesW^$lLFosN}RS3XR6t6sD za*yx|kk_Lve88K>tuwh-=FN1-NjX_LF#!Pqxmh{!$(dO}Nr^c*000000000000000()cP=00009 za7bBm000XU000XU0RWnu7ytkP=}AOER7i>K)iICSFcb%HPxkEUgpt@B$=)3)`6ykJ zASE4*5q_yUWjS)=Z7?ErsJeAxxGz_em^yYsh4Ai3r6O&lDudXwj+d&w2WMf6Z?wPpclNpU&DYtQ*R3W>TDKkm|O9Mtk z#%Y|6W;8Zdr39>sIN)yopOTCGECWU+jb)T7?X`(S&amK-%DnCl^|nxAb5MX#1r1UNA+PW0*f~2< zR+hp|z4E!ww+*Fr7BsO?R2IC(Ii(F{Me#m^nTLY=1#7dg>lW%(`;CFR*n$rQ=k6cr z1-|c5*tl)m=a6wjmsFGT{ig*t%Za;!?ePGk0;E13rVWmV@gD$o>(>Ua&x>Y{K4#ik zqw$Op+QGQK>i|3b&+9u|!dFD})sBIm N002ovPDHLkV1gUt8h`)* literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/wailmer.png b/graphics/object_events/pics/pokemon/followers/wailmer.png new file mode 100644 index 0000000000000000000000000000000000000000..ea637a5e275728804b149798a9e517d603044409 GIT binary patch literal 718 zcmV;<0x|uGP)K)W2)nKoke?x734&gV3Rn!G(5gr)qMC z;^8>FSaU`X;u1>gzrr?}0O9pog-5f5hVw8Y2woAZ$?|w-ZQK2q{ z4t`$rIZp5UbVvr+)vk86tN*8@?EZx%7W~Gz634^t)<*St29?$;JS|-pL10!xaYV$6Ls9@Q`z_#w^8kP;|koyv` zvVm@)WgFVUhDB1~wY#(porMob`-0PRCxXYRqCjs7Og0)Shzb)33}B07qaj&ud1C`= z>G1f6-f<`6r4DqCC=hc((=Nmt71Wa49QVU&ak0@5-RtW__hH<=J(uXi&y&mqezRUu zAdC3-_qyRMp|=KB9p@Fj>a4L^T1xj%uWL{F?a`iS>tLS@~YEBlWMaM!L0eI z%50=3R^F$3So`?{=yT1o?Op$fRGYrt=>HGv7a}GC3ahe5NB{r;07*qoM6N<$g8w&M A5dZ)H literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/wailord.png b/graphics/object_events/pics/pokemon/followers/wailord.png new file mode 100644 index 0000000000000000000000000000000000000000..a27912ba77b83afc272e69b47633439704dea31f GIT binary patch literal 1151 zcmV-_1c3XAP)G8cr4sZp^A0RKEAblhsNl6X@A0Hnd zA0HndA0HndA0HndA0Ho||9j-OpJDvFCyIk0PKWbANO?ltfaAv|1S#R&a4sT%lrZG@ z(GgDo*OUOwMRZe^FK$DQzd@wdWQo(<`dP!F{4Fxw4CeyMD&Xj1j=x3X=_Ve`jo{y9 z`6tx?lD|RZ_IY_hEu$o_E5uzR96vrn>*uA`?ny{&n>BXZ zG`@Eensb5|Ck+={mte(FK@m4RMjK%L{!+_$rx@@Hh~RkB@F~*8 ztl+reXbFXOll!Vp^JQHqT|thIHSC{NKqGgEt{eV@6&X`P)g0MzbdFq>RS!R?)2sQ` zbaMjPt9X>cey4;85frlF=vzq$-{M+@NPbyAXF&e&Ucps%{*)Y^$MIUQ+9`2C(Qvec zxgO>wxqZ^J!wYaVhkO~O;y{DrR-mi}OH3eq*XAK|M%2_eR$=unQgf^a#LeEXa=h+t zmmCk{wqV>746`;*`VHV#p{PB{krqZ!?-9FP>&@$U2xBW~YrKT>{uqd)&9lB?Em)Tb zCOB^I1K1(~2SFM@bCFd0WIa!yFK8>E;YbaP(_(+|BEpv0HpfP&E7++KjtfYPVD-lI z0vRG0wK=v*eV9C$+O)_0Cv29-4aYX}j-b|xY(S3()jqac=TqdZD{OOYnTaQlpRC}A zJ5(?T8jjJCxolhTb4QTlbrW|J9eo($c<{sM@yU$s-RvWZ8UEAiutK_m96uN%X9Fl6 z2zBh59&5b7N>y{iqpo8pi|iKma&W5NEC;s8F1ky#r^{}!Z}doiC0&+ z3j}hN)@F8x4U7GEDVZhWq&+W|^00!;NIo^dOK3;Ed zYgm6Bw&+rWZ$*seBlTnFeN2qM(c5XpcBYV@xSX`5#bys(1Flu)uvZHNh z)5xWrJAy+yFPj*T#C1u=d!fmd(3TJ6b-*bX{Vs7JB>nENiEjgd1(ZF|Gcj2tP6(-X zMYeKoCZl%OAytKa-M}f|G6;*gv)gxUG8);tahCw;4;H!Az^KSU3c=PpIOW?k?20o1 zz5NahM!2&Z|Mq?K%XfoC$8BIVB2FlL;=@7>><68D#}QN2Et`z64U6C7Bzv)g+->5n z1FFJ)BYT5;5<10PcWg3hPYU>ZmCWv8xZN}`Ca^E!HZYpx1tB&e11&T;A9n#F76J4J zb_1gc^rUVMThzo?7yWKgkUr5Zo19zYo4YNY+}sUDb^{}P=k(^#n};{*36rlbNI4Wf z8lgtUxn*5FW3MhoBin6YDkiRE zV9hEJV;KAuGRA^T3XeEtY6ef<0fFaF^#ly|=rwySd=G3YXXNvmWuP!}4wpj6xe^|j z%c{!#4h%-uOc);+o7RDv^-F2}3YS4DeNuSf?m#v0=||DgpFioBWO5ZC zO9h}-syTRbxDi+OObJ_@v024&yx)=dvv)$i5AZdw-THa4x)!c79T3m-Oe4nDLdP>D zMDdCRe#ZHdsuB4j0fb)*y;O6s+zaD}k0U#<^A8F={7#c{gwqGh~4hREZyY2;-(;O%=CQ%YT|g~B6Q zeCqX79GoeowNMAvjOc9Y9{(qTuU8b+4;&ghD9oaip3rIFk>lT0|E*2~zgGVM+f#Xh Txw)G=Tx0YQ1$p;;NB2?O!badDa9K|w(P0000000000urggf00009 za7bBm000V|000V|0Vb6__5c6^FiAu~R7i>Kl|OIVKp2NDfjqHTQThSgTo~#hjZqh8 zNZlij#Ab075)24}J$NeN&)_cIn7ek(loeX5dNWv&n8JtZ*%;sJtD!^HrQ$ar9^ZSv z2iqs1D90Rg%rXB*Hhdt`XM)xMW5dSK!IjQK8IPApm^G z0*Q4l9G7zimM(ti85d7dt2 z_y+KGBm^lB1lxqPv%=J;ySYH+@7wG>=Y?C=#ojbGVHnPIAw5sHiSCH#&g?=6T=%U0 zF1sUjXii_D!jz>OsKRi5@6+@Ag2OpjiJ>NIpIR$1&)ECZFcVa)sH2Tgp($~)p*#2d zaFsuUDkR(%LN3s{MM2JL_jBh9E({{heWeiEczg&yBH`rmp<#<5ld;>gYq8FSi`P4$ z=XVwZR5+RyIZ5l2rZq%?Lf>jycq7;uvD-RY|3HvXh3UdWWol65RIt=e&?!;;d+h{J zp+6%wKBkVxc{i`ZxX_nyED8JxrG+1HM=2JncV2=0iHGKgc!|IDx%b;&j@p;6@JD-q grFm&o-uZ9y3lseRDgaK+I{*Lx07*qoM6N<$g4neG^pH1*t)CL0KvB;YqonF@a$zZ}b9F00009 za7bBm000XU000XU0RWnu7ytkQFiAu~R7i>KlCf*sKoo}$4m6l9Ub1!ZkfB}z0d-2C zAT(tzbW@#hjWL$DdhAdzftG9;Iv9!v4f20bVQ8UaJBWh8!wHH(xNUr6*Y@u0yL)$5 zGz7BwZJ(a*dq2GsLi^g+zV>zR!bcA*eEPcn{o@*{EJx_QiE3Z>hA8Sl=+$4RySrdlh{@9K5A7p(0G$JO!0v)wp}(Hn#({mrFV8{WkL`FB3wDHfP5RbE zJ2Ao~EkQq~&H!g0B-#i`r1+HPv^XN>H9IlFl=Odqal~05DXn?U11a>I2Zm{`c_*<5 zKurMrlQMe%SYPFt#-v$U}pHY3WNqclz270y}Xtt>i z{NchjxR}WyA+3)ZJt-^!Gg`0>r=8XHZPRQd?Tjv&-sT-bG)dER0yq}J2r{n?Pdkh) z%^h=IT{E-IZS}Zt3Ix4RX_{3FU2aSn1AfWOcRm1ly(}Yj9NQMaUS@R!FRcgL$AsLM g6GxXgzvx5PeFN2gp-Ew(*&$(}VNoFg0Rb^ViP6Dfv9ZBvfx$^(p$P>E>K1Ky00009 za7bBm000XU000XU0RWnu7ytkQiAh93R7i>Kl|PFbK^TYMumpB050c`z(jwuSC~TVB z;woDq&4CcOB87)lO3NrjFsb%b*6c#u!v$d%+%8qP50K_QKxA$7;37C222Lz;X4aV< z$2kol!OoX0d}hbzH~*Lg*wwCfwX3aFV%x&b#sBH%xAXZ%VHE&%JOH)y&%$Xkm3)4? zL8$JPP^%MIP}=|NfNAnj5CYT)Ck+O&u&ja|cDmmU^%0wbS_Mng$s7sI8W%>KG9Avc zumY${IP~B#3n;^fyfC~6ED1>=$8`7@WMKuAaoFyLgE&CdG_z0;CLpmajLJ4`o+k^{ zS2hmYzxpF1M>|*{p5+Ch%w+FSaCh%5c5@xe!m^F=h&<6UEO&h@aJsSQvAnIHTS7N@NL04d^kE89>pgP-8<>v>;-aGP;a} zBiCa>naK*k@j{5xkXyq5x=V$Ang-~eALV(J(d)~QkncMzAm&=i-~qVT>-B{IkpbKz zD%37$fSa~`GDL&2dA*pP@3*ON$;m@@N|bT-`sK zxa#{8D&#zk1JslE8GL#=%v5q~ITG4|zjBPNz>D*oH^U6RIr(TesgSc(jJqgL8)Q<$ z#uLU>#{2OE0NweWncx>WVZLnKRNMm(Q6cB$b)mPu-D5nvve_mojO$!z=1B=lw8GQ+ zRrx?~{fLDNb_w%xwdq^SIr|xJqV7_TPYpmbU&x;c0V_P2o!i*5_-n!zX%M=TyNC>_ z##`Jpbj}8`_v}0xDrIM{P9X0w?o2{0%yT`lPJMy+{zS||zovd);^2VYs zPlKy+9p0}izgcps{TgM(%G}k>Sz+@sbtgI936G8soPI)h}U}&Y3q9C#(VCvN698E3l<#`$ezB| z>ZpuE<%(seJ2iQo10SZXzgcWC^>EBeb%UCm0GF2<#j|tt=i3YIX7;)r{dC$4y?TR) z?VFbz+Pv|Gh0l@aaka~qolfJeWma6XKhQSM;O+gB5&zQ#za84z_e%1X`$Hx0Rcg2k?HCAQIWYZNpS!G00000*~8Q@00009 za7bBm000XU000XU0RWnu7ytkQ0!c(cR7i>KRJ%$8K@^=r7DlkMvlEP{KOkCZA@~6s z2sTT=g>`=t1IB}6(UoP4FQ562$?33b127YBouCtcRO8%uFOyDMW?< zvFqdGvti6nlt$9Q$RcQRO z5~|9r41DaC_4;Iap6_AfWYxTe?nD$=PdY{zFjTj;11m+DdX!iPkzdK`O*r1EAdgz_ zqb8CP(y{#-cxO#wZ!O0PjkP874Um~#xT_iY;zUCni?$@UwH!;#z2L)}UH=$-GVVk} z9gDWSfaO>TeAW*8cD==Uwp0@#Ck`CPgywby$8*riwpVk~c*Rg|w<8iS5GMR;+ mZ*U!t1LcK`{uXXz{~6y*oDw%N&apZG0000*IjO0!@o8!C*=hOFxw$b(v5|psSy2E000000Qm~iT00009 za7bBm000XU000XU0RWnu7ytkP_(?=TR7i>K)W1t3K@QwbjUQI66*(*p^1AQ7 zxAWPV3}I|ggBsMJ{-5ICy?|HzNAR-+?7p493|QIm$|-&OYu>@r7htT>gw>Ddtzo|P z7VtK~7_vYI8ja@1;O78`{Iv1Z0v(WE)5sL$kqO9mfW0|yHwBci1)8ivK`y)~5J^u6 zt%WHvR;dN&HS*8~WdwkvPr=N74w^yI%kNBsdIK!sMTI=HL8%bwO9nVM3Yq|XI5Iw_ zTh)WdhrblCK&}yuBctF{cfrYCFC)8NW}E{2`lQuP0e{E{C7mar1F(ldCfDmVU|YxF zgaJ6!yE}R>ZIElwbO#j7wzg~N*MIiD=i%u0Vd%37^1H{tFR|dKfUW|)PIhE~i^r84 ztoKipw|4(v=ugp0!hCmSxx7m9D@d|451R%UXScuN(inzezVD068&s-p0BYg(N|FUt z4AShL&*aa@4xBiL$$rWbaV;4aJ|c$3Ux8Y?Z7T{`Ag|;`=$X24?(cwQuQq}pOvaz? zB}z$;oDCJ8JF_X7%?GDs1B}O+fKR1TiNx%4yHF_5`S@OnYB4SIqH!s#%tfa|yID~+ cU;oZ}0iPAdj@!J-b^rhX07*qoM6N<$f=4(cumAu6 literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/wynaut.png b/graphics/object_events/pics/pokemon/followers/wynaut.png new file mode 100644 index 0000000000000000000000000000000000000000..e90e1c8111dfd469092533b3878a0f4d1737f002 GIT binary patch literal 564 zcmV-40?Yl0P)CRu00009 za7bBm000XU000XU0RWnu7ytkPs!2paR7i>K)jdnYKo|$`GoWzeMQqKMRElPF(8cvc z+-xP-+w4>vBdteAh3-jcEQjl~<}|SyEhtZHZYWIYrOgN(ay1b6FNaqIo+lQg?1sm_*;reP z?y{UQolGpoZO(~r_MFl#%+g&277g6DxFGk;UQilDAWL^y+d=x@M>23m(IJ zHCMAvdYn(|-IIZPW@Dl*Mt2n`8>Y3!ZgFIBkQlwyX)C+aT{W~gAHo35Ua=~Yn(b)E zr@L%m!_h-4PwJeqM?&^<&uAHVul)g_Wd-c|c=sfC>zpz{h=3CSJMB^I!U;524KHVJ z?=V2OBZOaL=d|S!@Kow<43Is3HkgHuZ}!252Oq-9JGXEG$Ik~d1_M+hlt&SR9ne_x zi3b8p|9q-@5K$y-#v>qLPPD82kvCkRFM1btLoP;OYRlw-xq71&OgGZ-kk zIm2tORQ1Z*`17ke{&fd$mOn5m*5eyX|HS?Ii}?!*io~P~+-9x-0000QDLyg-gyxr0RaK&>G|17Sz%ED@zG(iDLJ{BF*#8oZ#THC00009 za7bBm000XU000XU0RWnu7ytkQT1iAfR7i>K)jeq2KokdXK?mPv4#!keJ7=pXH3`K9 zg9b09m?G-kOS%+yvIq!dV%2BI9^yc8hRiVn58Vvu91Jxb>VnjO)-G*B3fbK|=_EZ} ztdzJPlOJAw_jK>ClVvPP>sr^k{#z{;f8gxmGSL*xu2R_5ouod&H3vhDXRa`?J}^s7Lz)JJG4VJ&dI*VTGct$z}7tTVUmaG~p1gj9`)W1~FI`em#9*1f@OV46|k_(vi@FsshyurnB@o4z#kwMj7=96iMMK!9NXjy4as z2X4CeFKA6tj6NMbx%dVG1hcY?dC{q+yLn1WPBD7nJwAO00tEYO+Ve-+UhFMqa0z0M z1ooMuzNIM`{=tZ*RhSc6v6+gs*u~oQeqkQP(>ASc)_&8!)?Rk~zp7uU WCt5^VV}Q>90000G|17F#rGnNg%>Y00009 za7bBm000XU000XU0RWnu7ytkRgh@m}R7i>Kmd|SwK@`UqS!@G)S;%!EgnH^p40>r{ z(+=3nUWz?v#e>LNdJqq_wKQDB#Ew!d*089%&A07u@LZbv4AZ#rwRlJfo9Mv z^Sa3>AYvo>H9`}NBjoSbeImA>DIRu-9*8T}FkWW9FHt5cl4i}va$aL~G}?$0$$9>i z(N2#*0;F3YQ*5}MFhQ?@@urp2rT!^L;?HZO(!+-vghwz`4N)Q)209l& zIydI7kv10~w^cU_2?pRhQ2flLL#DU{$AjzGf`ta}#8HG0U>4sXG^*2rNZei->f#V+`0?Y$~e)cShaL*kbCF--Nm|xC4D{XB=L0C^jQP zye|<_6sOc(Y$<*p!#pEG%ncPkoM(#rj>{7R25ZyR;D?}8fAsLtUN!JroG7~Q6lv93 zQNkaN!iieUVTz4Nao>D4s~FMMLCvYI?|61~B?uT21shV8f;V4@68J>SVTuV;{4U%u z+%e(_%C@}~B}fuUYc<^H;^;0CiKyb_-P63P=2boNTd9c!@5$}3BuOGEwF_ArlrkNdyshU+xMD8IczeeIxOj%Y+!=<;2aJTKqi`SS9v` zOb{teg5vRn7tm>zBsyscA_++-w*IGAXoBbztDN&+%ztFR0B3juA7#~xB>(^b07*qo IM6N<$g4XHMdjJ3c literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/zangoose.png b/graphics/object_events/pics/pokemon/followers/zangoose.png new file mode 100644 index 0000000000000000000000000000000000000000..323463b6766f133d6d6cc1250515766e1fba9f5d GIT binary patch literal 912 zcmV;B18@9^P)Kl+Q~WK@`WQ1h&aBLA^w?7+eC2IrdUY4@tI)jD-e5YH&|2RYCH<^v&+h{)q0e zm*P7t`+4)``<;0+yM#Q%Lp;QP5;2)SKSXl8$)83fyNPJ740!T}M)B4SJ`%l1CM|z4 z_wwc<*6tqAC@#0~wK^Bc@#~xL24Ispi`_bIEA`&Y`^5eP|(wk)>LGM}XdOw=$ z(|2vN7|923&O(Z_j6GqCe@1qBjfjE|gUiH4ateZXP}E_jwnY^BKSZ?D9LbS1=Camy2fDh;!A zVgtTfe8l}OJocxP)A&YVG)gCAnH@Z=@y zZ!1(7YR@_Ec?FuTGE-yed2dN7W5sH3NbQa+nNUbv!n)yhXo;DHgwZ|o4Ycf+KKrc7 z?(|Wvg#1+)5~7y?QY@X9Jwt#@t~W~Av-{gPsaZ~6sXQ=tI#_EsA9#FPFCd%3FkY`0 zMvHhg#=hYM*<9apmJF5-#|%oMA+SC{7KX0i+j_11qUj`B%bUo1!jK#+?@Uk+mS1~@ z$P5&x{=Icv0&JSldv8rt9S!|MM!~gutv2qsJyAL%&Yt0sVhvRWP;PpLHotPQ(YhMx z-Ug5_rkeq_1?y`7KNQh2*=El$CU=Jbkk81Tp=Gm!tBsa|O_~U~)yBo|od9#eof?2e zsYpt&Jetd(dbl8L(_GP$~Gs-AH#dEmYsBv_1b!I~7uEr!wSj mNLm!!!!s$3hK6SFAID!ZVv;30jR~j#0000w_d0YO1Q`OyL4sTr}c(V=lkIVlG|Q2N%`49Sy4d%0000000000T(64>00009 za7bBm000XU000XU0RWnu7ytkRr%6OXR7i>Kl|PT$HWt< zF2u`!&+mCi%LsjG|E-M>4*tjE#L38Ie)pun=K_tp|4>|22uT%?3~ z2Jy0fw|fQk_EoyC>p%)_Y-HzmTCm~-ZU$UCEbI5Jqlay7iBZwF2~7cp{Up)?XUVjN z&5w2cQ#q|urUdsUvdx1O#I?xf2>^o(2}$fRc!#y4^X+Y7iE)dJMN|W%{Rqr0FbXOE z?XT_c8KmJ=BWNPKYy``CB8oY{Oo*u>4%sx;jxKLm&=Lm)Gsx>dfBEhM0EPBxoh1>_ z^q*ZSJ9RNEf>cKaAO$_fz5yWx79}tyiRD159o?$Z5+??k($`;qn9vATS4N(-I7)&8F<4~eWlJh+qd+OU_W84TL0CfN1{!m&Bja4vF_)PPVBBXc=ITHiwvK4v z5L;xmWH6Jv7ws)GvZ7fQ7JZG7#BF3$dG^AD^@{my*-seN+e7W3J-;F52W07*&-g;L zKW&!y-adY@!##G@=&@lF8Ih!#;F=Bxgbqyv-XXGMVvCH>h7Y*C5;V-u@8i*HR2U*k zbYwkKhdpmM=8OxhYe5k^$Ov!#_W8oz2}RG>V!aN`$HOB&Q<1$SJp&Nn zKZfDG?3;2V#6~)LA%tiJB(cvOWbb}Q1V7vfqJsEKizB}cDl*g(QMCS<^nT4fyQ6V* z*sh4>fd^#o*+?v$OP625Lio-G9oeCYxT@U$1MTS06mjk%Q&h~{1M#X@xqo{)GUtHr zt5xRAYe&w!B1SGUDyqsY&+wU39Y@vxR7U_^M<>Jx$sIX*v~?rv0(2dn5_flW1v-(P r&R5;}r-@J6)A}Eq|J05z?a}rx=?!BBcf(b500000NkvXXu0mjff0XRp literal 0 HcmV?d00001 diff --git a/graphics/object_events/pics/pokemon/followers/zigzagoon.png b/graphics/object_events/pics/pokemon/followers/zigzagoon.png new file mode 100644 index 0000000000000000000000000000000000000000..78759aa8b4ce8e5a7aef46f50a77514c6d69af14 GIT binary patch literal 769 zcmV+c1OEJpP)G|2wnMpAj$+3BPNhz6$SwS%=G*%Q800009 za7bBm000XU000XU0RWnu7ytkQcS%G+R7i>K)W3_`U>FDR7s*Xd0f&G~2se3$W0yjS z_8o$W(&eQTIXd)j=pPWs@PZuu3vLmooP)Lzgx5Goh9eh*f(OMI3gYJBR_Ib_)ckmJ z=gWc6rTBIFBu}2_O?(poPC4b2|0j|tWtfv#l}D!3Zf96(vnr2EuGBR}il*BZS+z$c z@0r~mMc4Ft?CK+82VOuA2V+*!l9(|ykgKl8WO^<$%we)^NU(g^ zfDFlfI3U@Fk&}VIDv+W;Dk{rF(RD#E2*Xe(qczN%@qoRlfuOHfc)lPMS?2IA@?oES z=L=e3sB`x`<76PotBmbGcs+dRT#TWO9q-8kCb zd87}8)(FqXft<1JCKp`bUkH7~Us;B$T6wwbqzhQJH|0`e?+O~?*61#5Xk{G@+@{>T zLFi_%WI1om-CFH7{Zv@pPRCSxQNw0yNWANKe&WE2>jC%RBjjJnOdAW+?fyu8?R8Br z^6UjX6hYR>4TtYs9sT)0f}Z{gu?&-0mT0byZ`_I diff --git a/graphics/trainer_hill/maps_expert/floor_1/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_1/metatiles.bin deleted file mode 100755 index a89a14c69..000000000 --- a/graphics/trainer_hill/maps_expert/floor_1/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -1;;;9989:;;;‘FFFFFFFFFFFFFx‘F›|›››}›|›{›z›‘F}FFFFFFFFFFFF‘F›~›››}›~›³›››‘FFFFFFFFFFFFF›‘F›}›|›{›z›|›››‘F›FFFFFFFFFFFF‘F›|›}›~›››}›~›‘FFFFFFFFFFFFF³‘Ö–››–ÖÛÖ–››–Ö›Ö–››–ÖÛÛÛÖ–››–Ö–››–ÖÛÛÛÛÛÖ–››–Ö–››–ÖÛÛÛÖ–››–Ö‘Ö–››–ÖÛÖ–››–Ö› \ No newline at end of file diff --git a/graphics/trainer_hill/maps_expert/floor_2/collision.bin b/graphics/trainer_hill/maps_expert/floor_2/collision.bin deleted file mode 100755 index 891a7f2c1..000000000 --- a/graphics/trainer_hill/maps_expert/floor_2/collision.bin +++ /dev/null @@ -1 +0,0 @@ -�áñù>ù>}~=x½=x}~y>ù>ñá \ No newline at end of file diff --git a/graphics/trainer_hill/maps_expert/floor_2/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_2/metatiles.bin deleted file mode 100755 index 7164f059d..000000000 --- a/graphics/trainer_hill/maps_expert/floor_2/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -ÑÛÛÛÙÙ˜™š›››ÑÛÛÛÕÕÃù†Ž•››››ÑÛÛÕËËËû‹‹‹•›››ÑÛÕËËËËû‹‹‹‹•››ÑÛËËËËËû‹‹‹‹‹››ÑÕËËËËËûŒ‹‹‹‹•›ÑËËËËÌÌûûŒ‹‹‹‹›ÑÌÌÌÌûõûõû‹‹‹‹›ÑÕÕÕÕûìûìû‹‹‹‹›ÑËËËËõõûûõ‹‹‹‹›ÑÌËËËËËûû‹‹‹‹Œ›ÑÛËËËËËûõ‹‹‹‹››ÑÛÌËËËËû‹‹‹‹Œ››ÑÛÛÌËËËû‹‹‹Œ›››ÑÛÛÛÌÌËûŒŒŒ››››ÑÛÛÛÛÛÌû››››››› \ No newline at end of file diff --git a/graphics/trainer_hill/maps_expert/floor_3/collision.bin b/graphics/trainer_hill/maps_expert/floor_3/collision.bin deleted file mode 100755 index 3d25428f1569114f61521dfb75a0b10efeaee5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 kcmZoFHg#WXcI6&M*f6*M(2iYam&WCO_n09tVcFaQ7m diff --git a/graphics/trainer_hill/maps_expert/floor_3/metatiles.bin b/graphics/trainer_hill/maps_expert/floor_3/metatiles.bin deleted file mode 100755 index f2200b713..000000000 --- a/graphics/trainer_hill/maps_expert/floor_3/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -1;;;9999:;;;–ûöýööûFûööýöû›û›ûöûûûFûûûöû›ûöû›ûûFF›FFûû›ûöýöû›F66›66F›ûöýöûûF›FFÛFF›FûûööûF6F›ÛÖÛ›F6FûöûûF6›ÛÖÖÖÛ›6Fûû–››››ÖÖ–ÖÖÛ›››–ûûF6›ÛÖÖÖÛ›6FûûöûF6F›ÛÖÛ›F6FûööûûF›FFÛFF›Fûûöýöû›F66›66F›ûöýöû›ûûFF›FFûû›ûöû›ûöûûûFûûûöû›û–ûöýööûFûööýöû› \ No newline at end of file diff --git a/graphics/trainer_hill/maps_jp/floor_0/collision.bin b/graphics/trainer_hill/maps_jp/floor_0/collision.bin deleted file mode 100755 index 817f4f54c..000000000 --- a/graphics/trainer_hill/maps_jp/floor_0/collision.bin +++ /dev/null @@ -1 +0,0 @@ -�ÁoAcA`ADAUAUÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/graphics/trainer_hill/maps_jp/floor_0/metatiles.bin b/graphics/trainer_hill/maps_jp/floor_0/metatiles.bin deleted file mode 100755 index 8d1787efd..000000000 --- a/graphics/trainer_hill/maps_jp/floor_0/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -155;&&%9:;;;1++;44++43????;1++;;;44;3???;;1++55555;3???;?1+444+44;,???;;1+;5;+;5;5;???;1+;+;+;+;+;???;14;+;4;+5+;;?;;1;;4;;;444?;;;? \ No newline at end of file diff --git a/graphics/trainer_hill/maps_jp/floor_1/collision.bin b/graphics/trainer_hill/maps_jp/floor_1/collision.bin deleted file mode 100755 index 58f80b49bb1ab2c9e27f9e8c19f3cfa17b6dcdfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 bcmZo?HC#Uv;AiWLNEXT<6#hZ diff --git a/graphics/trainer_hill/maps_jp/floor_1/metatiles.bin b/graphics/trainer_hill/maps_jp/floor_1/metatiles.bin deleted file mode 100755 index 951723792..000000000 --- a/graphics/trainer_hill/maps_jp/floor_1/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -1;5;9&%9:;5;1;+;;+++++;;;+;1;+;;+++++>>;+;1;+;;+++++;;;+;?;+;;+++++;>>+;1;+;;++,++;;;+;1?+;;,,;,,>>;+;1;+5555;55555+;?;,,,,,;,,,,,,;1;??;55;55555551???;++5+++++++1??;;++++++++++1;;;?,,,,,,,,,, \ No newline at end of file diff --git a/graphics/trainer_hill/maps_normal/floor_0/collision.bin b/graphics/trainer_hill/maps_normal/floor_0/collision.bin deleted file mode 100755 index 80213aaae..000000000 --- a/graphics/trainer_hill/maps_normal/floor_0/collision.bin +++ /dev/null @@ -1 +0,0 @@ -�å?í½%„½ß!~A } ÷Aùyÿÿ \ No newline at end of file diff --git a/graphics/trainer_hill/maps_normal/floor_0/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_0/metatiles.bin deleted file mode 100755 index 658a5ace6..000000000 --- a/graphics/trainer_hill/maps_normal/floor_0/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -1;55&&%&:;5;1;,,,+$$$$,;;,;-;;;;+;;;;5;55;3;2!0+;2!0+;,+;35;;;,5;;;+;;+;4,;2!0+20;+20,;15;;5;,;;5,;;551,20+205;+2!0,,15;;+;;+;,;5;;;1,20+20+;20+20;1555+;;+;;5+;551+,,,20+20,,;,,1+;;5;;+;;5;;;;1,20+;;,20,20;51;;;,;;;;;;;;;, \ No newline at end of file diff --git a/graphics/trainer_hill/maps_normal/floor_1/collision.bin b/graphics/trainer_hill/maps_normal/floor_1/collision.bin deleted file mode 100755 index fb3f6aec0..000000000 --- a/graphics/trainer_hill/maps_normal/floor_1/collision.bin +++ /dev/null @@ -1 +0,0 @@ -�ûs @ @ëQ‹S»Q‹QëQ‹Q»QPPÿÿ \ No newline at end of file diff --git a/graphics/trainer_hill/maps_normal/floor_1/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_1/metatiles.bin deleted file mode 100755 index 52af9cfdc..000000000 --- a/graphics/trainer_hill/maps_normal/floor_1/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -ÑÕÕÕÙÙÅÆÎÕÛÕÑËÄÄÛÛÄÄÄÌÌÌËÛËÑËÛÛÛÛÛÛÛËÛËÑËÛÕÕÕÕÕßËÛËÑËÛËËËÄÄÛËÛËÑËÛËÛÛÄËËßÕÕËÛËÑËÛËÛÛÛËËÛÄÄËÛËÑËÛËÛÛÛËËÕÕßËÛËÑËÛËÛÛÛËËÄÄÛËÛËÑËÛËÛÛÛËËßÕÕËÛËÑËÛËÛÛÛÄÄÛÄÄÄÛËÑËÛË››››››ÛÕÕÕËÑÄÛËÛÛÛÛÛ›ÛËËËËÑÛÛËÛÛÛÛÛ›ÛËËËËÑÛÛÄÛÛÛÛÛ›ÛÄÄÄÄ \ No newline at end of file diff --git a/graphics/trainer_hill/maps_normal/floor_2/collision.bin b/graphics/trainer_hill/maps_normal/floor_2/collision.bin deleted file mode 100755 index b3ccacdd4c25fee4cf227fac1346ee02b189d8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 acmZoeskKr|x*BLe_r>jg#t diff --git a/graphics/trainer_hill/maps_normal/floor_2/metatiles.bin b/graphics/trainer_hill/maps_normal/floor_2/metatiles.bin deleted file mode 100755 index bf2b52c32..000000000 --- a/graphics/trainer_hill/maps_normal/floor_2/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -1555&&8&.55;icddddqqqrdddcsicssssssssssscsicssssssssssscsicCA@ABAAJBAAcsicsssssssdssscsicACKCCABB@A@csicssdsssssssscsicA@BBAABJBABcsicsssssssdssscsicABACKAAA@CAcsicssssdsssssscsicA@CABBAJBABcsidsssssssdsssdsiCCABBACAA@BABsiBsssssssssssBs \ No newline at end of file diff --git a/graphics/trainer_hill/maps_normal/floor_3/collision.bin b/graphics/trainer_hill/maps_normal/floor_3/collision.bin deleted file mode 100755 index f4c47254c56adb7e19d0d6ed491a13178b73c526..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 ncmZoUbL@H$@m!0ULkk4!I2@pp3%k8wKCK(G#-c@Lu*4B1sMhZ{|5lD4+_)( diff --git a/graphics/trainer_hill/maps_unique/floor_3/metatiles.bin b/graphics/trainer_hill/maps_unique/floor_3/metatiles.bin deleted file mode 100755 index 66840137c..000000000 --- a/graphics/trainer_hill/maps_unique/floor_3/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -ñûûûùùåæîõûûíõõõûûìììëìììûûôìììûûûûûëûûûûûñõõõõõõõûëûõõõõñëìììëììûìûììììñëûûûëûõûõûûûûûñëûõûëûëûëõõõûûñëûëûëûëûëìììûûñëûëûëûëûëûõõõõñëûëûëûëûëûììììñëûëûëûëûëûûûûûñëûëûëûëûëõõõõûñìûëûìûëûìììììûñûûëûûûëûûûûûûûñûûìûûûìûûûûûûû \ No newline at end of file diff --git a/graphics/trainer_hill/maps_variety/floor_0/collision.bin b/graphics/trainer_hill/maps_variety/floor_0/collision.bin deleted file mode 100755 index 24fc2ea1e6b203d760a554f6b02de209bdeadb1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 McmZo+m diff --git a/graphics/trainer_hill/maps_variety/floor_1/metatiles.bin b/graphics/trainer_hill/maps_variety/floor_1/metatiles.bin deleted file mode 100755 index c5a9aa5d4..000000000 --- a/graphics/trainer_hill/maps_variety/floor_1/metatiles.bin +++ /dev/null @@ -1 +0,0 @@ -1;;;9989:;;;‘›œ–@@–›–@@–›œ›œ›–@ÛÛ@–@ÛÛB–››‘–@ÛÛÛÛÛÛÛÛÛB–œ‘BÛÛÖÖÖÛÖÖÖÛÛB›–BÛÖÖÖÖÖÖÖÖÖÛB––BÛÖÖÖÖÖÖÖÖÖÛB––BÛÖÖÖÖÖÖÖÖÖÛB––BÛÛÖÖÖÖÖÖÖÛÛB–‘–BÛÛÖÖÖÖÖÛÛB–›‘›–BÛÛÖÖÖÛÛB–›œœ››–BÛÛÖÛÛB–›››–›››–AÛÛÛB–››œ–Ö–œ››–AÛB–›››–֖֜›œ›–@–›œ›–Öœ \ No newline at end of file diff --git a/graphics/trainer_hill/maps_variety/floor_2/collision.bin b/graphics/trainer_hill/maps_variety/floor_2/collision.bin deleted file mode 100755 index 606249b2a0085c18fc9fea19f02a98713c93233a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 RcmZodata[3] = gBattleAnimArgs[3]; sprite->callback = AnimOverheatFlame_Step; for (i = 0; i < 7; i++) - sUnusedOverheatData[i] = sprite->data[i]; + gUnusedOverheatData[i] = sprite->data[i]; } static void AnimOverheatFlame_Step(struct Sprite *sprite) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index c590572b9..d460b9236 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -128,7 +128,7 @@ static void AnimHornHit_Step(struct Sprite *); static void AnimSuperFang(struct Sprite *); static void AnimWavyMusicNotes(struct Sprite *); static void AnimWavyMusicNotes_Step(struct Sprite *); -static void AnimWavyMusicNotes_CalcVelocity(s16, s16, s16 *, s16 *, s8); +static void AnimWavyMusicNotesGetNextPos(s16, s16, s16 *, s16 *, s8); static void AnimFlyingMusicNotes(struct Sprite *); static void AnimFlyingMusicNotes_Step(struct Sprite *); static void AnimBellyDrumHand(struct Sprite *); @@ -4343,7 +4343,7 @@ static void AnimLockOnTarget_Step4(struct Sprite* sprite) sprite->data[1] = 0; } - BlendPalettes(GetBattlePalettesMask(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE), sprite->data[1], RGB(31, 31, 31)); + BlendPalettes(GetBattleBgPalettesMask(1, 1, 1, 1, 1, 0, 0), sprite->data[1], RGB(31, 31, 31)); if (sprite->data[1] == 16) { int pal; @@ -4998,7 +4998,7 @@ static void AnimMoonlightSparkle_Step(struct Sprite* sprite) void AnimTask_MoonlightEndFade(u8 taskId) { - int a = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) & 0xFFFF; + int a = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; int b; int c; int d; @@ -5279,87 +5279,79 @@ void AnimTask_MusicNotesClearRainbowBlend(u8 taskId) DestroyAnimVisualTask(taskId); } -#define sMoveTimer data[0] -#define sBlendTableIdx data[1] -#define sBlendTimer data[2] -#define sBlendCycleTime data[3] -#define sX data[4] -#define sY data[5] -#define sVelocX data[6] -#define sVelocY data[7] - static void AnimWavyMusicNotes(struct Sprite* sprite) { u8 index; - u8 x, y; + u8 a; + u8 b; SetSpriteCoordsToAnimAttackerCoords(sprite); StartSpriteAnim(sprite, gBattleAnimArgs[0]); if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; - sprite->sBlendTableIdx = gBattleAnimArgs[1]; - sprite->sBlendTimer = 0; - sprite->sBlendCycleTime = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = 0; + sprite->data[3] = gBattleAnimArgs[2]; if (IsContest()) { - x = 48; - y = 40; + a = 48; + b = 40; } else { - x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); } - sprite->sX = sprite->x << 4; - sprite->sY = sprite->y << 4; - AnimWavyMusicNotes_CalcVelocity(x - sprite->x, y - sprite->y, &sprite->sVelocX, &sprite->sVelocY, 40); + sprite->data[4] = sprite->x << 4; + sprite->data[5] = sprite->y << 4; + AnimWavyMusicNotesGetNextPos(a - sprite->x, b - sprite->y, &sprite->data[6], &sprite->data[7], 40); sprite->callback = AnimWavyMusicNotes_Step; } -static void AnimWavyMusicNotes_CalcVelocity(s16 x, s16 y, s16* velocX, s16* velocY, s8 xSpeedFactor) +static void AnimWavyMusicNotesGetNextPos(s16 a, s16 b, s16* c, s16* d, s8 e) { - int x2; - int time; - if (x < 0) - xSpeedFactor = -xSpeedFactor; + int f; + int g; + if (a < 0) + e = -e; - x2 = x * 256; - time = x2 / xSpeedFactor; - if (time == 0) - time = 1; + f = a << 8; + g = f / e; + if (g == 0) + g = 1; - *velocX = x2 / time; - *velocY = (y * 256) / time; + *c = f / g; + *d = (b << 8) / g; } static void AnimWavyMusicNotes_Step(struct Sprite* sprite) { - s16 y, trigIdx; + s16 y, yDelta; u8 index; - sprite->sMoveTimer++; - trigIdx = sprite->sMoveTimer * 5 - ((sprite->sMoveTimer * 5 / 256) << 8); - sprite->sX += sprite->sVelocX; - sprite->sY += sprite->sVelocY; - sprite->x = sprite->sX >> 4; - sprite->y = sprite->sY >> 4; - sprite->y2 = Sin(trigIdx, 15); + sprite->data[0]++; + yDelta = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->x = sprite->data[4] >> 4; + sprite->y = sprite->data[5] >> 4; + sprite->y2 = Sin(yDelta, 15); y = sprite->y; - if (sprite->x < -16 || sprite->x > DISPLAY_WIDTH + 16 || y < -16 || y > DISPLAY_HEIGHT - 32) + if (sprite->x < -16 || sprite->x > 256 || y < -16 || y > 128) { DestroySpriteAndMatrix(sprite); } else { - if (sprite->sBlendCycleTime && ++sprite->sBlendTimer > sprite->sBlendCycleTime) + if (sprite->data[3] && ++sprite->data[2] > sprite->data[3]) { - sprite->sBlendTimer = 0; - if (++sprite->sBlendTableIdx > (int)ARRAY_COUNT(gParticlesColorBlendTable) - 1) - sprite->sBlendTableIdx = 0; + sprite->data[2] = 0; + if (++sprite->data[1] > 3) + sprite->data[1] = 0; - index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->sBlendTableIdx][0]); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->data[1]][0]); if (index != 0xFF) sprite->oam.paletteNum = index; } @@ -5475,7 +5467,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite) static void AnimThoughtBubble(struct Sprite* sprite) { - u8 animNum; + u8 a; u8 battler; if (gBattleAnimArgs[0] == 0) battler = gBattleAnimAttacker; @@ -5483,10 +5475,10 @@ static void AnimThoughtBubble(struct Sprite* sprite) battler = gBattleAnimTarget; SetSpriteNextToMonHead(battler, sprite); - animNum = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1; + a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1; sprite->data[0] = gBattleAnimArgs[1]; - sprite->data[1] = animNum + 2; - StartSpriteAnim(sprite, animNum); + sprite->data[1] = a + 2; + StartSpriteAnim(sprite, a); StoreSpriteCallbackInData6(sprite, AnimThoughtBubble_Step); sprite->callback = RunStoredCallbackWhenAnimEnds; } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 9764d5522..101b255df 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -3116,7 +3116,7 @@ static void AnimTask_FakeOut_Step2(u8 taskId) { gTasks[taskId].data[11] = 0x88; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN); - BlendPalettes(GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), 16, RGB(31, 31, 31)); + BlendPalettes(GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); } else if (gTasks[taskId].data[10] > 4) { diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 3b4f6729f..f73393de4 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1213,7 +1213,7 @@ void AnimTask_SmokescreenImpact(u8 taskId) SmokescreenImpact( GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + 8, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + 8, - FALSE); + 0); DestroyAnimVisualTask(taskId); } @@ -3717,26 +3717,6 @@ void AnimTask_SlideMonForFocusBand(u8 taskId) gTasks[taskId].func = AnimTask_SlideMonForFocusBand_Step1; } -#define IDX_ACTIVE_SPRITES 2 // Used by the sprite callback to modify the number of active sprites - -// Task data for AnimTask_SquishAndSweatDroplets -#define tState data[0] -#define tTimer data[1] -#define tActiveSprites data[IDX_ACTIVE_SPRITES] -#define tNumSquishes data[3] -#define tBaseX data[4] -#define tBaseY data[5] -#define tSubpriority data[6] -// data[7]-data[15] used by PrepareAffineAnimInTaskData -#define tBattlerSpriteId data[15] - -// Sprite data for AnimFacadeSweatDrop -#define sTimer data[0] -#define sVelocX data[1] -#define sVelocY data[2] -#define sTaskId data[3] -#define sActiveSpritesIdx data[4] - // Squishes the mon vertically and emits sweat droplets a few times. // arg 0: battler // arg 1: num squishes @@ -3748,20 +3728,20 @@ void AnimTask_SquishAndSweatDroplets(u8 taskId) if (!gBattleAnimArgs[1]) DestroyAnimVisualTask(taskId); - task->tState = 0; - task->tTimer = 0; - task->tActiveSprites = 0; - task->tNumSquishes = gBattleAnimArgs[1]; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[1]; if (gBattleAnimArgs[0] == ANIM_ATTACKER) battler = gBattleAnimAttacker; else battler = gBattleAnimTarget; - task->tBaseX = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); - task->tBaseY = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); - task->tSubpriority = GetBattlerSpriteSubpriority(battler); - task->tBattlerSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - PrepareAffineAnimInTaskData(task, task->tBattlerSpriteId, gFacadeSquishAffineAnimCmds); + task->data[4] = GetBattlerSpriteCoord(battler, BATTLER_COORD_X); + task->data[5] = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y); + task->data[6] = GetBattlerSpriteSubpriority(battler); + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds); task->func = AnimTask_SquishAndSweatDroplets_Step; } @@ -3769,40 +3749,37 @@ static void AnimTask_SquishAndSweatDroplets_Step(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->tState) + switch (task->data[0]) { case 0: - task->tTimer++; - if (task->tTimer == 6) + task->data[1]++; + if (task->data[1] == 6) CreateSweatDroplets(taskId, TRUE); - if (task->tTimer == 18) + if (task->data[1] == 18) CreateSweatDroplets(taskId, FALSE); if (!RunAffineAnimFromTaskData(task)) { - if (--task->tNumSquishes == 0) + if (--task->data[3] == 0) { - // Animation is finished - task->tState++; + task->data[0]++; } else { - // Animation continues, more droplet sprites to create - task->tTimer = 0; - PrepareAffineAnimInTaskData(task, task->tBattlerSpriteId, gFacadeSquishAffineAnimCmds); + task->data[1] = 0; + PrepareAffineAnimInTaskData(task, task->data[15], gFacadeSquishAffineAnimCmds); } } break; case 1: - // Wait for sprites to be destroyed before ending task - if (task->tActiveSprites == 0) + if (task->data[2] == 0) DestroyAnimVisualTask(taskId); break; } } -static void CreateSweatDroplets(u8 taskId, bool8 lowerDroplets) +static void CreateSweatDroplets(u8 taskId, bool8 arg1) { u8 i; s8 xOffset, yOffset; @@ -3811,7 +3788,7 @@ static void CreateSweatDroplets(u8 taskId, bool8 lowerDroplets) s16 yCoords[2]; task = &gTasks[taskId]; - if (!lowerDroplets) + if (!arg1) { xOffset = 18; yOffset = -20; @@ -3822,54 +3799,39 @@ static void CreateSweatDroplets(u8 taskId, bool8 lowerDroplets) yOffset = 20; } - xCoords[0] = task->tBaseX - xOffset; - xCoords[1] = task->tBaseX - xOffset - 4; - xCoords[2] = task->tBaseX + xOffset; - xCoords[3] = task->tBaseX + xOffset + 4; - yCoords[0] = task->tBaseY + yOffset; - yCoords[1] = task->tBaseY + yOffset + 6; + xCoords[0] = task->data[4] - xOffset; + xCoords[1] = task->data[4] - xOffset - 4; + xCoords[2] = task->data[4] + xOffset; + xCoords[3] = task->data[4] + xOffset + 4; + yCoords[0] = task->data[5] + yOffset; + yCoords[1] = task->data[5] + yOffset + 6; for (i = 0; i < 4; i++) { - u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->tSubpriority - 5); + u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->data[6] - 5); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].sTimer = 0; - gSprites[spriteId].sVelocX = i < 2 ? -2 : 2; // First two travel left, remaining travel right - gSprites[spriteId].sVelocY = -1; - gSprites[spriteId].sTaskId = taskId; - gSprites[spriteId].sActiveSpritesIdx = IDX_ACTIVE_SPRITES; - task->tActiveSprites++; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = i < 2 ? -2 : 2; + gSprites[spriteId].data[2] = -1; + gSprites[spriteId].data[3] = taskId; + gSprites[spriteId].data[4] = 2; + task->data[2]++; } } } static void AnimFacadeSweatDrop(struct Sprite *sprite) { - sprite->x += sprite->sVelocX; - sprite->y += sprite->sVelocY; - if (++sprite->sTimer > 6) + sprite->x += sprite->data[1]; + sprite->y += sprite->data[2]; + if (++sprite->data[0] > 6) { - gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--; + gTasks[sprite->data[3]].data[sprite->data[4]]--; DestroySprite(sprite); } } -#undef IDX_ACTIVE_SPRITES -#undef tState -#undef tTimer -#undef tActiveSprites -#undef tNumSquishes -#undef tBaseX -#undef tBaseY -#undef tSubpriority -#undef tBattlerSpriteId -#undef sTimer -#undef sVelocX -#undef sVelocY -#undef sTaskId -#undef sActiveSpritesIdx - // Blends the mon sprite's color with a rotating set of colors. // arg 0: battler // arg 1: duration @@ -3965,26 +3927,6 @@ static void AnimRoarNoiseLine_Step(struct Sprite *sprite) DestroyAnimSprite(sprite); } -#define IDX_ACTIVE_SPRITES 10 // Used by the sprite callback to modify the number of active sprites - -// Task data for AnimTask_GlareEyeDots -#define tState data[0] -#define tTimer data[1] -#define tPairNum data[2] -#define tPairMax data[5] -#define tDotOffset data[6] -#define tIsContest data[7] -#define tActiveSprites data[IDX_ACTIVE_SPRITES] -#define tStartX data[11] -#define tStartY data[12] -#define tEndX data[13] -#define tEndY data[14] - -// Sprite data for AnimGlareEyeDot -#define sTimer data[0] -#define sTaskId data[1] -#define sActiveSpritesIdx data[2] - // Makes a series of dots in a trail from the attacker to the target. // arg 0: unused void AnimTask_GlareEyeDots(u8 taskId) @@ -3993,25 +3935,25 @@ void AnimTask_GlareEyeDots(u8 taskId) if (IsContest()) { - task->tPairMax = 8; - task->tDotOffset = 3; - task->tIsContest = TRUE; + task->data[5] = 8; + task->data[6] = 3; + task->data[7] = 1; } else { - task->tPairMax = 12; - task->tDotOffset = 3; - task->tIsContest = FALSE; + task->data[5] = 12; + task->data[6] = 3; + task->data[7] = 0; } if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - task->tStartX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; + task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; else - task->tStartX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; + task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; - task->tStartY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; - task->tEndX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - task->tEndY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) - GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 4; + task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); task->func = AnimTask_GlareEyeDots_Step; } @@ -4021,122 +3963,103 @@ static void AnimTask_GlareEyeDots_Step(u8 taskId) s16 x, y; struct Task *task = &gTasks[taskId]; - switch (task->tState) + switch (task->data[0]) { case 0: - // Wait to create next pair of dots - if (++task->tTimer > 3) + if (++task->data[1] > 3) { - task->tTimer = 0; + task->data[1] = 0; GetGlareEyeDotCoords( - task->tStartX, - task->tStartY, - task->tEndX, - task->tEndY, - task->tPairMax, - task->tPairNum, + task->data[11], + task->data[12], + task->data[13], + task->data[14], + task->data[5], + task->data[2], &x, &y); - // Create dot pair for (i = 0; i < 2; i++) { u8 spriteId = CreateSprite(&gGlareEyeDotSpriteTemplate, x, y, 35); if (spriteId != MAX_SPRITES) { - if (!task->tIsContest) + if (task->data[7] == 0) { if (i == 0) - gSprites[spriteId].x2 = gSprites[spriteId].y2 = -task->tDotOffset; + gSprites[spriteId].x2 = gSprites[spriteId].y2 = -task->data[6]; else - gSprites[spriteId].x2 = gSprites[spriteId].y2 = task->tDotOffset; + gSprites[spriteId].x2 = gSprites[spriteId].y2 = task->data[6]; } else { if (i == 0) { - gSprites[spriteId].x2 = -task->tDotOffset; - gSprites[spriteId].y2 = task->tDotOffset; + gSprites[spriteId].x2 = -task->data[6]; + gSprites[spriteId].y2 = task->data[6]; } else { - gSprites[spriteId].x2 = task->tDotOffset; - gSprites[spriteId].y2 = -task->tDotOffset; + gSprites[spriteId].x2 = task->data[6]; + gSprites[spriteId].y2 = -task->data[6]; } } - gSprites[spriteId].sTimer = 0; - gSprites[spriteId].sTaskId = taskId; - gSprites[spriteId].sActiveSpritesIdx = IDX_ACTIVE_SPRITES; - task->tActiveSprites++; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = 10; + task->data[10]++; } } - if (task->tPairNum == task->tPairMax) - task->tState++; + if (task->data[2] == task->data[5]) + task->data[0]++; - task->tPairNum++; + task->data[2]++; } break; case 1: - // Wait for sprites to be destroyed before ending task - if (task->tActiveSprites == 0) + if (task->data[10] == 0) DestroyAnimVisualTask(taskId); break; } } -static void GetGlareEyeDotCoords(s16 startX, s16 startY, s16 endX, s16 endY, u8 pairMax, u8 pairNum, s16 *x, s16 *y) +static void GetGlareEyeDotCoords(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y) { int x2; int y2; - if (pairNum == 0) + if (arg5 == 0) { - *x = startX; - *y = startY; + *x = arg0; + *y = arg1; return; } - if (pairNum >= pairMax) + if (arg5 >= arg4) { - *x = endX; - *y = endY; + *x = arg2; + *y = arg3; return; } - pairMax--; - x2 = (startX << 8) + pairNum * (((endX - startX) << 8) / pairMax); - y2 = (startY << 8) + pairNum * (((endY - startY) << 8) / pairMax); + arg4--; + x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4); + y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4); *x = x2 >> 8; *y = y2 >> 8; } static void AnimGlareEyeDot(struct Sprite *sprite) { - if (++sprite->sTimer > 36) + if (++sprite->data[0] > 36) { - gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--; + gTasks[sprite->data[1]].data[sprite->data[2]]--; DestroySprite(sprite); } } -#undef IDX_ACTIVE_SPRITES -#undef tState -#undef tTimer -#undef tPairNum -#undef tPairMax -#undef tDotOffset -#undef tIsContest -#undef tActiveSprites -#undef tStartX -#undef tStartY -#undef tEndX -#undef tEndY -#undef sTimer -#undef sTaskId -#undef sActiveSpritesIdx - // Moves a pawprint in a straight line. // arg 0: initial x position // arg 1: initial y position diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index b523a3771..8ecb60713 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -26,18 +26,18 @@ static void AnimFireCross(struct Sprite *); static void AnimFireSpiralOutward(struct Sprite *); static void AnimFireSpiralOutward_Step1(struct Sprite *); static void AnimFireSpiralOutward_Step2(struct Sprite *); -static void AnimTask_EruptionLaunchRocks_Step(u8); -static void CreateEruptionLaunchRocks(u8, u8, u8); +static void AnimTask_EruptionLaunchRocks_Step(u8 taskId); +static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3); static void AnimEruptionLaunchRock(struct Sprite *); -static u16 GetEruptionLaunchRockInitialYPos(u8); -static void InitEruptionLaunchRockCoordData(struct Sprite *, s16, s16); +static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId); +static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y); static void UpdateEruptionLaunchRockPos(struct Sprite *); static void AnimEruptionFallingRock(struct Sprite *); static void AnimEruptionFallingRock_Step(struct Sprite *); static void AnimWillOWispOrb(struct Sprite *); static void AnimWillOWispOrb_Step(struct Sprite *); static void AnimWillOWispFire(struct Sprite *); -static void AnimTask_MoveHeatWaveTargets_Step(u8); +static void AnimTask_MoveHeatWaveTargets_Step(u8 taskId); static const union AnimCmd sAnim_FireSpiralSpread_0[] = { @@ -355,7 +355,7 @@ const struct SpriteTemplate gEruptionLaunchRockSpriteTemplate = .callback = AnimEruptionLaunchRock, }; -static const s16 sEruptionLaunchRockSpeeds[][2] = +static const s16 sEruptionLaunchRockCoords[][2] = { {-2, -5}, {-1, -1}, @@ -770,43 +770,22 @@ static void AnimFireSpiralOutward_Step2(struct Sprite *sprite) DestroyAnimSprite(sprite); } -#define IDX_ACTIVE_SPRITES 6 // Used by the sprite callback to modify the number of active sprites - -#define tState data[0] -#define tTimer1 data[1] -#define tTimer2 data[2] -#define tTimer3 data[3] -#define tAttackerY data[4] -#define tAttackerSide data[5] -#define tActiveSprites data[IDX_ACTIVE_SPRITES] -// data[8]-data[15] used by PrepareEruptAnimTaskData / UpdateEruptAnimTask -#define tAttackerSpriteId data[15] - -#define sSpeedDelay data[0] -#define sLaunchStage data[1] -#define sX data[2] -#define sY data[3] -#define sSpeedX data[4] -#define sSpeedY data[5] -#define sTaskId data[6] -#define sActiveSpritesIdx data[7] - // Animates first stage of Eruption where the attacker squishes and launches rocks away from themself void AnimTask_EruptionLaunchRocks(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->tAttackerSpriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); - task->tState = 0; - task->tTimer1 = 0; - task->tTimer2 = 0; - task->tTimer3 = 0; - task->tAttackerY = gSprites[task->tAttackerSpriteId].y; - task->tAttackerSide = GetBattlerSide(gBattleAnimAttacker); - task->tActiveSprites = 0; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = gSprites[task->data[15]].y; + task->data[5] = GetBattlerSide(gBattleAnimAttacker); + task->data[6] = 0; - PrepareBattlerSpriteForRotScale(task->tAttackerSpriteId, ST_OAM_OBJ_NORMAL); + PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); task->func = AnimTask_EruptionLaunchRocks_Step; } @@ -815,102 +794,102 @@ static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->tState) + switch (task->data[0]) { case 0: - PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x100, 0x100, 0xE0, 0x200, 32); - task->tState++; + PrepareEruptAnimTaskData(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 32); + task->data[0]++; case 1: - if (++task->tTimer1 > 1) + if (++task->data[1] > 1) { - task->tTimer1 = 0; + task->data[1] = 0; - if (++task->tTimer2 & 1) - gSprites[task->tAttackerSpriteId].x2 = 3; + if (++task->data[2] & 0x1) + gSprites[task->data[15]].x2 = 3; else - gSprites[task->tAttackerSpriteId].x2 = -3; + gSprites[task->data[15]].x2 = -3; } - if (task->tAttackerSide != B_SIDE_PLAYER) + if (task->data[5] != B_SIDE_PLAYER) { - if (++task->tTimer3 > 4) + if (++task->data[3] > 4) { - task->tTimer3 = 0; - gSprites[task->tAttackerSpriteId].y++; + task->data[3] = 0; + gSprites[task->data[15]].y++; } } if(!UpdateEruptAnimTask(task)) { - SetBattlerSpriteYOffsetFromYScale(task->tAttackerSpriteId); - gSprites[task->tAttackerSpriteId].x2 = 0; + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + gSprites[task->data[15]].x2 = 0; - task->tTimer1 = 0; - task->tTimer2 = 0; - task->tTimer3 = 0; - task->tState++; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; } break; case 2: - if (++task->tTimer1 > 4) + if (++task->data[1] > 4) { - if (task->tAttackerSide != B_SIDE_PLAYER) - PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xF0, 6); + if (task->data[5] != B_SIDE_PLAYER) + PrepareEruptAnimTaskData(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 6); else - PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0xE0, 0x200, 0x180, 0xC0, 6); + PrepareEruptAnimTaskData(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 6); - task->tTimer1 = 0; - task->tState++; + task->data[1] = 0; + task->data[0]++; } break; case 3: if (!UpdateEruptAnimTask(task)) { - CreateEruptionLaunchRocks(task->tAttackerSpriteId, taskId, IDX_ACTIVE_SPRITES); - task->tState++; + CreateEruptionLaunchRocks(task->data[15], taskId, 6); + task->data[0]++; } break; case 4: - if (++task->tTimer1 > 1) + if (++task->data[1] > 1) { - task->tTimer1 = 0; + task->data[1] = 0; - if (++task->tTimer2 & 1) - gSprites[task->tAttackerSpriteId].y2 += 3; + if (++task->data[2] & 1) + gSprites[task->data[15]].y2 += 3; else - gSprites[task->tAttackerSpriteId].y2 -= 3; + gSprites[task->data[15]].y2 -= 3; } - if (++task->tTimer3 > 24) + if (++task->data[3] > 0x18) { - if (task->tAttackerSide != B_SIDE_PLAYER) - PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x180, 0xF0, 0x100, 0x100, 8); + if (task->data[5] != B_SIDE_PLAYER) + PrepareEruptAnimTaskData(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 8); else - PrepareEruptAnimTaskData(task, task->tAttackerSpriteId, 0x180, 0xC0, 0x100, 0x100, 8); + PrepareEruptAnimTaskData(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 8); - if (task->tTimer2 & 1) - gSprites[task->tAttackerSpriteId].y2 -= 3; + if (task->data[2] & 1) + gSprites[task->data[15]].y2 -= 3; - task->tTimer1 = 0; - task->tTimer2 = 0; - task->tTimer3 = 0; - task->tState++; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; } break; case 5: - if (task->tAttackerSide != B_SIDE_PLAYER) - gSprites[task->tAttackerSpriteId].y--; + if (task->data[5] != B_SIDE_PLAYER) + gSprites[task->data[15]].y--; if (!UpdateEruptAnimTask(task)) { - gSprites[task->tAttackerSpriteId].y = task->tAttackerY; - ResetSpriteRotScale(task->tAttackerSpriteId); - task->tTimer2 = 0; - task->tState++; + gSprites[task->data[15]].y = task->data[4]; + ResetSpriteRotScale(task->data[15]); + task->data[2] = 0; + task->data[0]++; } break; case 6: - if (task->tActiveSprites == 0) + if (!task->data[6]) DestroyAnimVisualTask(taskId); break; default: @@ -918,7 +897,7 @@ static void AnimTask_EruptionLaunchRocks_Step(u8 taskId) } } -static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesIdx) +static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 a3) { u16 i, j; s8 sign; @@ -928,12 +907,12 @@ static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesId if(!GetBattlerSide(gBattleAnimAttacker)) { - x -= 12; + x -= 0xC; sign = 1; } else { - x += 16; + x += 0x10; sign = -1; } @@ -941,18 +920,18 @@ static void CreateEruptionLaunchRocks(u8 spriteId, u8 taskId, u8 activeSpritesId { u8 spriteId = CreateSprite(&gEruptionLaunchRockSpriteTemplate, x, y, 2); - if (spriteId != MAX_SPRITES) + if (spriteId != 0x40) { gSprites[spriteId].oam.tileNum += j * 4 + 0x40; if (++j >= 5) j = 0; - InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockSpeeds[i][0] * sign, sEruptionLaunchRockSpeeds[i][1]); - gSprites[spriteId].sTaskId = taskId; - gSprites[spriteId].sActiveSpritesIdx = activeSpritesIdx; + InitEruptionLaunchRockCoordData(&gSprites[spriteId], sEruptionLaunchRockCoords[i][0] * sign, sEruptionLaunchRockCoords[i][1]); + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = a3; - gTasks[taskId].data[activeSpritesIdx]++; + gTasks[taskId].data[a3]++; } } } @@ -963,7 +942,7 @@ static void AnimEruptionLaunchRock(struct Sprite *sprite) if (sprite->invisible) { - gTasks[sprite->sTaskId].data[sprite->sActiveSpritesIdx]--; + gTasks[sprite->data[6]].data[sprite->data[7]]--; DestroySprite(sprite); } } @@ -980,71 +959,46 @@ static u16 GetEruptionLaunchRockInitialYPos(u8 spriteId) return y; } -static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 speedX, s16 speedY) +static void InitEruptionLaunchRockCoordData(struct Sprite *sprite, s16 x, s16 y) { - sprite->sSpeedDelay = 0; - sprite->sLaunchStage = 0; - sprite->sX = (u16)sprite->x * 8; - sprite->sY = (u16)sprite->y * 8; - sprite->sSpeedX = speedX * 8; - sprite->sSpeedY = speedY * 8; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = (u16)sprite->x * 8; + sprite->data[3] = (u16)sprite->y * 8; + sprite->data[4] = x * 8; + sprite->data[5] = y * 8; } static void UpdateEruptionLaunchRockPos(struct Sprite *sprite) { - int extraLaunchSpeed; - if (++sprite->sSpeedDelay > 2) + int var1; + if (++sprite->data[0] > 2) { - sprite->sSpeedDelay = 0; - ++sprite->sLaunchStage; - extraLaunchSpeed = (u16)sprite->sLaunchStage * (u16)sprite->sLaunchStage; - sprite->sY += extraLaunchSpeed; + sprite->data[0] = 0; + ++sprite->data[1]; + var1 = (u16)sprite->data[1] * (u16)sprite->data[1]; + sprite->data[3] += var1; } - sprite->sX += sprite->sSpeedX; - sprite->x = sprite->sX >> 3; - sprite->sY += sprite->sSpeedY; - sprite->y = sprite->sY >> 3; + sprite->data[2] += sprite->data[4]; + sprite->x = sprite->data[2] >> 3; + sprite->data[3] += sprite->data[5]; + sprite->y = sprite->data[3] >> 3; - if (sprite->x < -8 || sprite->x > DISPLAY_WIDTH + 8 || sprite->y < -8 || sprite->y > 120) + if (sprite->x < -8 || sprite->x > 0xf8 || sprite->y < -8 || sprite->y > 120) sprite->invisible = TRUE; } -#undef IDX_ACTIVE_SPRITES -#undef tState -#undef tTimer1 -#undef tTimer2 -#undef tTimer3 -#undef tAttackerY -#undef tAttackerSide -#undef tActiveSprites -#undef tAttackerSpriteId -#undef sSpeedDelay -#undef sLaunchStage -#undef sX -#undef sY -#undef sSpeedX -#undef sSpeedY -#undef sTaskId -#undef sActiveSpritesIdx - -#define sState data[0] -#define sBounceTimer data[1] -#define sBounceDir data[2] -#define sEndTimer data[3] -#define sFallDelay data[6] -#define sTargetY data[7] - static void AnimEruptionFallingRock(struct Sprite *sprite) { sprite->x = gBattleAnimArgs[0]; sprite->y = gBattleAnimArgs[1]; - sprite->sState = 0; - sprite->sBounceTimer = 0; - sprite->sBounceDir = 0; - sprite->sFallDelay = gBattleAnimArgs[2]; - sprite->sTargetY = gBattleAnimArgs[3]; + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; sprite->oam.tileNum += gBattleAnimArgs[4] * 16; sprite->callback = AnimEruptionFallingRock_Step; @@ -1052,51 +1006,47 @@ static void AnimEruptionFallingRock(struct Sprite *sprite) static void AnimEruptionFallingRock_Step(struct Sprite *sprite) { - switch (sprite->sState) + switch (sprite->data[0]) { case 0: - // Wait to begin falling - if (sprite->sFallDelay != 0) + if (sprite->data[6] != 0) { - sprite->sFallDelay--; + sprite->data[6]--; return; } - sprite->sState++; + sprite->data[0]++; // fall through case 1: - // Rock is falling sprite->y += 8; - if (sprite->y >= sprite->sTargetY) + if (sprite->y >= sprite->data[7]) { - sprite->y = sprite->sTargetY; - sprite->sState++; + sprite->y = sprite->data[7]; + sprite->data[0]++; } break; case 2: - // Bounce up and down on landing spot - if (++sprite->sBounceTimer > 1) + if (++sprite->data[1] > 1) { - sprite->sBounceTimer = 0; - if ((++sprite->sBounceDir & 1) != 0) + sprite->data[1] = 0; + if ((++sprite->data[2] & 1) != 0) + { sprite->y2 = -3; + } else + { sprite->y2 = 3; + } } - if (++sprite->sEndTimer > 16) + if (++sprite->data[3] > 16) + { DestroyAnimSprite(sprite); + } break; } } -#undef sState -#undef sBounceTimer -#undef sBounceDir -#undef sEndTimer -#undef sFallDelay -#undef sTargetY - static void AnimWillOWispOrb(struct Sprite *sprite) { switch (sprite->data[0]) diff --git a/src/battle_anim_ghost.c b/src/battle_anim_ghost.c index a59e54900..02b89b965 100644 --- a/src/battle_anim_ghost.c +++ b/src/battle_anim_ghost.c @@ -653,9 +653,9 @@ static void AnimTask_SpiteTargetShadow_Step1(u8 taskId) startLine = 0; if (position == 1) - task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE); + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG1HOFS, 1); else - task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG2HOFS, TRUE); + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, SCANLINE_EFFECT_REG_BG2HOFS, 1); task->data[15]++; break; @@ -1004,7 +1004,7 @@ static void AnimTask_CurseStretchingBlackBg_Step1(u8 taskId) right = DISPLAY_WIDTH; top = 0; bottom = 112; - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); gTasks[taskId].func = AnimTask_CurseStretchingBlackBg_Step2; } diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 2fbe858d7..a03196ee1 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -908,17 +908,13 @@ bool8 IsDoubleBattle(void) return IS_DOUBLE_BATTLE(); } -#define BG_ANIM_PAL_1 8 -#define BG_ANIM_PAL_2 9 -#define BG_ANIM_PAL_CONTEST 14 - void GetBattleAnimBg1Data(struct BattleAnimBgData *out) { if (IsContest()) { out->bgTiles = gBattleAnimBgTileBuffer; out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; - out->paletteId = BG_ANIM_PAL_CONTEST; + out->paletteId = 14; out->bgId = 1; out->tilesOffset = 0; out->unused = 0; @@ -927,7 +923,7 @@ void GetBattleAnimBg1Data(struct BattleAnimBgData *out) { out->bgTiles = gBattleAnimBgTileBuffer; out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; - out->paletteId = BG_ANIM_PAL_1; + out->paletteId = 8; out->bgId = 1; out->tilesOffset = 0x200; out->unused = 0; @@ -940,7 +936,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId) { out->bgTiles = gBattleAnimBgTileBuffer; out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; - out->paletteId = BG_ANIM_PAL_CONTEST; + out->paletteId = 14; out->bgId = 1; out->tilesOffset = 0; out->unused = 0; @@ -953,7 +949,7 @@ void GetBattleAnimBgData(struct BattleAnimBgData *out, u32 bgId) { out->bgTiles = gBattleAnimBgTileBuffer; out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; - out->paletteId = BG_ANIM_PAL_2; + out->paletteId = 9; out->bgId = 2; out->tilesOffset = 0x300; out->unused = 0; @@ -966,21 +962,21 @@ void GetBgDataForTransform(struct BattleAnimBgData *out, u8 battlerId) out->bgTilemap = (u16 *)gBattleAnimBgTilemapBuffer; if (IsContest()) { - out->paletteId = BG_ANIM_PAL_CONTEST; + out->paletteId = 14; out->bgId = 1; out->tilesOffset = 0; out->unused = 0; } else if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) { - out->paletteId = BG_ANIM_PAL_1; + out->paletteId = 8; out->bgId = 1; out->tilesOffset = 0x200; out->unused = 0; } else { - out->paletteId = BG_ANIM_PAL_2; + out->paletteId = 9; out->bgId = 2; out->tilesOffset = 0x300; out->unused = 0; @@ -1365,14 +1361,14 @@ void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite) CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); } -static u16 ArcTan2_(s16 x, s16 y) +static u16 ArcTan2_(s16 a, s16 b) { - return ArcTan2(x, y); + return ArcTan2(a, b); } -u16 ArcTan2Neg(s16 x, s16 y) +u16 ArcTan2Neg(s16 a, s16 b) { - u16 var = ArcTan2_(x, y); + u16 var = ArcTan2_(a, b); return -var; } @@ -1405,7 +1401,7 @@ void SetGrayscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) } } -u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, bool8 attackerPartner, bool8 targetPartner, bool8 anim1, bool8 anim2) +u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7) { u32 selectedPalettes = 0; u32 shift; @@ -1413,7 +1409,7 @@ u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, if (battleBackground) { if (!IsContest()) - selectedPalettes = 0xe; // Palettes 1, 2, and 3 + selectedPalettes = 0xe; else selectedPalettes = 1 << GetBattleBgPaletteNum(); } @@ -1443,17 +1439,17 @@ u32 GetBattlePalettesMask(bool8 battleBackground, bool8 attacker, bool8 target, selectedPalettes |= 1 << shift; } } - if (anim1) + if (a6) { if (!IsContest()) - selectedPalettes |= 1 << BG_ANIM_PAL_1; + selectedPalettes |= 0x100; else - selectedPalettes |= 1 << BG_ANIM_PAL_CONTEST; + selectedPalettes |= 0x4000; } - if (anim2) + if (a7) { if (!IsContest()) - selectedPalettes |= 1 << BG_ANIM_PAL_2; + selectedPalettes |= 0x200; } return selectedPalettes; } diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index a92428f83..ebf9a588f 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -304,7 +304,7 @@ static void AnimConfusionDuck_Step(struct Sprite *sprite) // arg 4: blend color static void AnimSimplePaletteBlend(struct Sprite *sprite) { - u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]); BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]); sprite->invisible = TRUE; sprite->callback = AnimSimplePaletteBlend_Step; @@ -312,23 +312,23 @@ static void AnimSimplePaletteBlend(struct Sprite *sprite) // Unpacks a bitfield and returns a bitmask of its selected palettes. // Bits 0-6 of the selector parameter result in the following palettes being selected: -// 0: F_PAL_BG, battle background palettes (BG palettes 1, 2, and 3) -// 1: F_PAL_ATTACKER, gBattleAnimAttacker OBJ palette -// 2: F_PAL_TARGET, gBattleAnimTarget OBJ palette -// 3: F_PAL_ATK_PARTNER, gBattleAnimAttacker partner OBJ palette -// 4: F_PAL_DEF_PARTNER, gBattleAnimTarget partner OBJ palette -// 5: F_PAL_ANIM_1, BG palette 8 (or 14, if in Contest) -// 6: F_PAL_ANIM_2, BG palette 9 -u32 UnpackSelectedBattlePalettes(s16 selector) +// 0: battle background palettes (BG palettes 1, 2, and 3) +// 1: gBattleAnimAttacker OBJ palette +// 2: gBattleAnimTarget OBJ palette +// 3: gBattleAnimAttacker partner OBJ palette +// 4: gBattleAnimTarget partner OBJ palette +// 5: BG palette 4 +// 6: BG palette 5 +u32 UnpackSelectedBattleBgPalettes(s16 selector) { - bool8 battleBackground = selector & 1; - bool8 attacker = (selector >> 1) & 1; - bool8 target = (selector >> 2) & 1; - bool8 attackerPartner = (selector >> 3) & 1; - bool8 targetPartner = (selector >> 4) & 1; - bool8 anim1 = (selector >> 5) & 1; - bool8 anim2 = (selector >> 6) & 1; - return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2); + u8 battleBackground = selector & 1; + u8 attacker = (selector >> 1) & 1; + u8 target = (selector >> 2) & 1; + u8 attackerPartner = (selector >> 3) & 1; + u8 targetPartner = (selector >> 4) & 1; + u8 arg5 = (selector >> 5) & 1; + u8 arg6 = (selector >> 6) & 1; + return GetBattleBgPalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6); } static void AnimSimplePaletteBlend_Step(struct Sprite *sprite) @@ -350,7 +350,7 @@ static void AnimComplexPaletteBlend(struct Sprite *sprite) sprite->data[6] = gBattleAnimArgs[6]; sprite->data[7] = gBattleAnimArgs[0]; - selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]); BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]); sprite->invisible = TRUE; sprite->callback = AnimComplexPaletteBlend_Step1; @@ -375,7 +375,7 @@ static void AnimComplexPaletteBlend_Step1(struct Sprite *sprite) return; } - selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]); if (sprite->data[1] & 0x100) BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]); else @@ -392,7 +392,7 @@ static void AnimComplexPaletteBlend_Step2(struct Sprite *sprite) if (!gPaletteFade.active) { - selectedPalettes = UnpackSelectedBattlePalettes(sprite->data[7]); + selectedPalettes = UnpackSelectedBattleBgPalettes(sprite->data[7]); BlendPalettes(selectedPalettes, 0, 0); DestroyAnimSprite(sprite); } @@ -442,7 +442,7 @@ void AnimTask_BlendColorCycle(u8 taskId) static void BlendColorCycle(u8 taskId, u8 startBlendAmount, u8 targetBlendAmount) { - u32 selectedPalettes = UnpackSelectedBattlePalettes(gTasks[taskId].tPalSelector); + u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gTasks[taskId].tPalSelector); BeginNormalPaletteFade( selectedPalettes, gTasks[taskId].tDelay, @@ -721,7 +721,7 @@ void AnimTask_InvertScreenColor(u8 taskId) u8 targetBattler = gBattleAnimTarget; if (gBattleAnimArgs[0] & 0x100) - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); if (gBattleAnimArgs[1] & 0x100) selectedPalettes |= (0x10000 << attackerBattler); diff --git a/src/battle_anim_psychic.c b/src/battle_anim_psychic.c index aebf76cc0..a7faa7658 100644 --- a/src/battle_anim_psychic.c +++ b/src/battle_anim_psychic.c @@ -583,9 +583,9 @@ static void AnimWallSparkle(struct Sprite *sprite) { if (sprite->data[0] == 0) { - bool32 ignoreOffsets = gBattleAnimArgs[3]; + int arg3 = gBattleAnimArgs[3]; bool8 respectMonPicOffsets = FALSE; - if (!ignoreOffsets) + if (arg3 == 0) respectMonPicOffsets = TRUE; if (!IsContest() && IsDoubleBattle()) diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c index c7be8d41c..0819796d2 100644 --- a/src/battle_anim_smokescreen.c +++ b/src/battle_anim_smokescreen.c @@ -7,13 +7,8 @@ #include "util.h" #include "constants/battle_palace.h" -#define TAG_SMOKESCREEN 55019 - -#define PALTAG_SHADOW 55039 -#define GFXTAG_SHADOW 55129 - -static void SpriteCB_SmokescreenImpactMain(struct Sprite *); -static void SpriteCB_SmokescreenImpact(struct Sprite *); +static void SmokescreenImpact_Callback(struct Sprite *); +static void SpriteCB_DestroySprite(struct Sprite *sprite); // The below data for smokescreen starts and ends with some data that belongs to battle_gfx_sfx_util.c @@ -48,12 +43,12 @@ const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] = static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet = { - .data = gSmokescreenImpactTiles, .size = 0x180, .tag = TAG_SMOKESCREEN + .data = gSmokescreenImpactTiles, .size = 0x180, .tag = 55019 }; static const struct CompressedSpritePalette sSmokescreenImpactSpritePalette = { - .data = gSmokescreenImpactPalette, .tag = TAG_SMOKESCREEN + .data = gSmokescreenImpactPalette, .tag = 55019 }; static const struct OamData sOamData_SmokescreenImpact = @@ -115,18 +110,18 @@ static const union AnimCmd *const sAnims_SmokescreenImpact[] = static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate = { - .tileTag = TAG_SMOKESCREEN, - .paletteTag = TAG_SMOKESCREEN, + .tileTag = 55019, + .paletteTag = 55019, .oam = &sOamData_SmokescreenImpact, .anims = sAnims_SmokescreenImpact, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_SmokescreenImpact + .callback = SpriteCB_DestroySprite }; const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = { - .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW + .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = 55129 }; static const struct OamData sOamData_EnemyShadow = @@ -148,8 +143,8 @@ static const struct OamData sOamData_EnemyShadow = const struct SpriteTemplate gSpriteTemplate_EnemyShadow = { - .tileTag = GFXTAG_SHADOW, - .paletteTag = PALTAG_SHADOW, + .tileTag = 55129, + .paletteTag = 55039, .oam = &sOamData_EnemyShadow, .anims = gDummySpriteAnimTable, .images = NULL, @@ -157,12 +152,7 @@ const struct SpriteTemplate gSpriteTemplate_EnemyShadow = .callback = SpriteCB_SetInvisible }; -#define sActiveSprites data[0] -#define sPersist data[1] - -#define sMainSpriteId data[0] - -u8 SmokescreenImpact(s16 x, s16 y, bool8 persist) +u8 SmokescreenImpact(s16 x, s16 y, u8 a3) { u8 mainSpriteId; u8 spriteId1, spriteId2, spriteId3, spriteId4; @@ -174,58 +164,54 @@ u8 SmokescreenImpact(s16 x, s16 y, bool8 persist) LoadCompressedSpritePaletteUsingHeap(&sSmokescreenImpactSpritePalette); } - mainSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_SmokescreenImpactMain); + mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback); mainSprite = &gSprites[mainSpriteId]; - mainSprite->sPersist = persist; + mainSprite->data[1] = a3; - // Top left sprite spriteId1 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2); - gSprites[spriteId1].sMainSpriteId = mainSpriteId; - mainSprite->sActiveSprites++; + gSprites[spriteId1].data[0] = mainSpriteId; + mainSprite->data[0]++; AnimateSprite(&gSprites[spriteId1]); - // Top right sprite spriteId2 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y - 16, 2); - gSprites[spriteId2].sMainSpriteId = mainSpriteId; - mainSprite->sActiveSprites++; + gSprites[spriteId2].data[0] = mainSpriteId; + mainSprite->data[0]++; StartSpriteAnim(&gSprites[spriteId2], 1); AnimateSprite(&gSprites[spriteId2]); - // Bottom left sprite spriteId3 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y, 2); - gSprites[spriteId3].sMainSpriteId = mainSpriteId; - mainSprite->sActiveSprites++; + gSprites[spriteId3].data[0] = mainSpriteId; + mainSprite->data[0]++; StartSpriteAnim(&gSprites[spriteId3], 2); AnimateSprite(&gSprites[spriteId3]); - // Bottom right sprite spriteId4 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y, 2); - gSprites[spriteId4].sMainSpriteId = mainSpriteId; - mainSprite->sActiveSprites++; + gSprites[spriteId4].data[0] = mainSpriteId; + mainSprite->data[0]++; StartSpriteAnim(&gSprites[spriteId4], 3); AnimateSprite(&gSprites[spriteId4]); return mainSpriteId; } -static void SpriteCB_SmokescreenImpactMain(struct Sprite *sprite) +static void SmokescreenImpact_Callback(struct Sprite *sprite) { - if (sprite->sActiveSprites == 0) + if (!sprite->data[0]) { FreeSpriteTilesByTag(sSmokescreenImpactSpriteSheet.tag); FreeSpritePaletteByTag(sSmokescreenImpactSpritePalette.tag); - if (!sprite->sPersist) + if (!sprite->data[1]) DestroySprite(sprite); else sprite->callback = SpriteCallbackDummy; } } -static void SpriteCB_SmokescreenImpact(struct Sprite *sprite) +static void SpriteCB_DestroySprite(struct Sprite *sprite) { if (sprite->animEnded) { - gSprites[sprite->sMainSpriteId].sActiveSprites--; + gSprites[sprite->data[0]].data[0]--; DestroySprite(sprite); } } diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index f329ea210..6b14d3863 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -135,12 +135,10 @@ void SoundTask_PlayCryHighPitch(u8 taskId) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) species = gContestResources->moveAnim->species; - // Destroying the task twice (here and at end of function) - // results in an incorrect value for gAnimVisualTaskCount - #ifndef BUGFIX + #ifndef UBFIX else - DestroyAnimVisualTask(taskId); - #endif + DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice. + #endif } else { @@ -183,12 +181,10 @@ void SoundTask_PlayDoubleCry(u8 taskId) { if (gBattleAnimArgs[0] == ANIM_ATTACKER) species = gContestResources->moveAnim->species; - // Destroying the task twice (here and at end of function) - // results in an incorrect value for gAnimVisualTaskCount - #ifndef BUGFIX + #ifndef UBFIX else - DestroyAnimVisualTask(taskId); - #endif + DestroyAnimVisualTask(taskId); // UB: task gets destroyed twice. + #endif } else { diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index f56d04ccd..9be3d65dc 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -248,7 +248,7 @@ static const struct SubspriteTable sFrozenIceCubeSubspriteTable[] = {ARRAY_COUNT(sFrozenIceCubeSubsprites), sFrozenIceCubeSubsprites}, }; -static const struct SpriteTemplate sFrozenIceCubeSpriteTemplate = +static const struct SpriteTemplate gFrozenIceCubeSpriteTemplate = { .tileTag = ANIM_TAG_ICE_CUBE, .paletteTag = ANIM_TAG_ICE_CUBE, @@ -389,7 +389,7 @@ void AnimTask_FrozenIceCube(u8 taskId) x -= 6; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); - spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4); + spriteId = CreateSprite(&gFrozenIceCubeSpriteTemplate, x, y, 4); if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) gSprites[spriteId].invisible = TRUE; SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable); @@ -549,7 +549,7 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId) gBattleAnimAttacker = battlerId; gBattleAnimTarget = battlerId; - LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, FALSE); + LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, 0); taskId = CreateTask(Task_DoStatusAnimation, 10); gTasks[taskId].data[0] = battlerId; } diff --git a/src/battle_anim_throw.c b/src/battle_anim_throw.c index 2f095a043..bf95a319c 100755 --- a/src/battle_anim_throw.c +++ b/src/battle_anim_throw.c @@ -690,7 +690,7 @@ void AnimTask_SwitchOutBallEffect(u8 taskId) priority = gSprites[spriteId].oam.priority; subpriority = gSprites[spriteId].subpriority; gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId); - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); gTasks[taskId].data[11] = LaunchBallFadeMonTask(FALSE, gBattleAnimAttacker, selectedPalettes, ballId); gTasks[taskId].data[0]++; break; @@ -2018,24 +2018,24 @@ static void DestroyBallOpenAnimationParticle(struct Sprite *sprite) #define tPaletteHi data[11] #define tBallId data[15] -u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 spritePalNum, u32 selectedPalettes, u8 ballId) +u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId) { u8 taskId; taskId = CreateTask(Task_FadeMon_ToBallColor, 5); gTasks[taskId].tBallId = ballId; - gTasks[taskId].tPalOffset = spritePalNum; + gTasks[taskId].tPalOffset = battler; gTasks[taskId].tPaletteLo = selectedPalettes; gTasks[taskId].tPaletteHi = selectedPalettes >> 16; if (!unfadeLater) { - BlendPalette(spritePalNum * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]); + BlendPalette(battler * 16 + 0x100, 16, 0, gBallOpenFadeColors[ballId]); gTasks[taskId].tdCoeff = 1; } else { - BlendPalette(spritePalNum * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]); + BlendPalette(battler * 16 + 0x100, 16, 16, gBallOpenFadeColors[ballId]); gTasks[taskId].tCoeff = 16; gTasks[taskId].tdCoeff = -1; gTasks[taskId].func = Task_FadeMon_ToNormal; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index b5455a19c..e2c674c57 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -47,7 +47,7 @@ const u8 gBattleAnimBgCntGet[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFS void AnimTask_BlendBattleAnimPal(u8 taskId) { - u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]); selectedPalettes |= GetBattleMonSpritePalettesMask((gBattleAnimArgs[0] >> 7) & 1, (gBattleAnimArgs[0] >> 8) & 1, (gBattleAnimArgs[0] >> 9) & 1, @@ -62,7 +62,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId) u8 animBattlers[2]; animBattlers[1] = 0xFF; - selectedPalettes = UnpackSelectedBattlePalettes(F_PAL_BG); + selectedPalettes = UnpackSelectedBattleBgPalettes(1); switch (gBattleAnimArgs[0]) { case 2: @@ -105,7 +105,7 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId) void AnimTask_SetCamouflageBlend(u8 taskId) { - u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]); + u32 selectedPalettes = UnpackSelectedBattleBgPalettes(gBattleAnimArgs[0]); switch (gBattleTerrain) { case BATTLE_TERRAIN_GRASS: @@ -594,7 +594,8 @@ static void StatsChangeAnimation_Step3(u8 taskId) if (gTasks[taskId].data[6] == 1) gSprites[gTasks[taskId].data[7]].oam.priority++; - FREE_AND_SET_NULL(sAnimStatsChangeData); + Free(sAnimStatsChangeData); + sAnimStatsChangeData = NULL; DestroyAnimVisualTask(taskId); break; } @@ -606,7 +607,7 @@ void AnimTask_Flash(u8 taskId) SetPalettesToColor(selectedPalettes, RGB_BLACK); gTasks[taskId].data[14] = selectedPalettes >> 16; - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) & 0xFFFF; + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; SetPalettesToColor(selectedPalettes, RGB_WHITEALPHA); gTasks[taskId].data[15] = selectedPalettes; @@ -922,7 +923,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId) if (gBattleAnimArgs[0] == 0) { - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); while ((selectedPalettes & 1) == 0) { selectedPalettes >>= 1; @@ -949,7 +950,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId) if (gBattleAnimArgs[0] == 0) { - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); while ((selectedPalettes & 1) == 0) { selectedPalettes >>= 1; @@ -976,7 +977,7 @@ void AnimTask_CopyPalFadedToUnfaded(u8 taskId) if (gBattleAnimArgs[0] == 0) { - selectedPalettes = GetBattlePalettesMask(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE); + selectedPalettes = GetBattleBgPalettesMask(1, 0, 0, 0, 0, 0, 0); while ((selectedPalettes & 1) == 0) { selectedPalettes >>= 1; diff --git a/src/battle_bg.c b/src/battle_bg.c index ed32c009c..f739a002f 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -159,7 +159,7 @@ const struct BgTemplate gBattleBgTemplates[] = }, }; -static const struct WindowTemplate sStandardBattleWindowTemplates[] = +static const struct WindowTemplate gStandardBattleWindowTemplates[] = { [B_WIN_MSG] = { .bg = 0, @@ -380,7 +380,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate sBattleArenaWindowTemplates[] = +static const struct WindowTemplate gBattleArenaWindowTemplates[] = { [B_WIN_MSG] = { .bg = 0, @@ -594,8 +594,8 @@ static const struct WindowTemplate sBattleArenaWindowTemplates[] = const struct WindowTemplate * const gBattleWindowTemplates[] = { - [B_WIN_TYPE_NORMAL] = sStandardBattleWindowTemplates, - [B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates, + [B_WIN_TYPE_NORMAL] = gStandardBattleWindowTemplates, + [B_WIN_TYPE_ARENA] = gBattleArenaWindowTemplates, }; static const struct BattleBackground sBattleTerrainTable[] = diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 954192f0a..5b69030df 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -96,8 +96,8 @@ static void PlayerCmdEnd(void); static void PlayerBufferRunCommand(void); static void HandleInputChooseTarget(void); static void HandleInputChooseMove(void); -static void MoveSelectionCreateCursorAt(u8, u8); -static void MoveSelectionDestroyCursorAt(u8); +static void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); +static void MoveSelectionDestroyCursorAt(u8 cursorPos); static void MoveSelectionDisplayPpNumber(void); static void MoveSelectionDisplayPpString(void); static void MoveSelectionDisplayMoveType(void); @@ -106,18 +106,18 @@ static void HandleMoveSwitching(void); static void SwitchIn_HandleSoundAndEnd(void); static void WaitForMonSelection(void); static void CompleteWhenChoseItem(void); -static void Task_LaunchLvlUpAnim(u8); -static void Task_PrepareToGiveExpWithExpBar(u8); -static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8); -static void Task_GiveExpWithExpBar(u8); -static void Task_UpdateLvlInHealthbox(u8); +static void Task_LaunchLvlUpAnim(u8 taskId); +static void Task_PrepareToGiveExpWithExpBar(u8 taskId); +static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); +static void Task_GiveExpWithExpBar(u8 taskId); +static void Task_UpdateLvlInHealthbox(u8 taskId); static void PrintLinkStandbyMsg(void); -static u32 CopyPlayerMonData(u8, u8 *); -static void SetPlayerMonData(u8); -static void StartSendOutAnim(u8, bool8); +static u32 CopyPlayerMonData(u8 monId, u8 *dst); +static void SetPlayerMonData(u8 monId); +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void PlayerDoMoveAnimation(void); -static void Task_StartSendOutAnim(u8); +static void Task_StartSendOutAnim(u8 taskId); static void EndDrawPartyStatusSummary(void); static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = @@ -1507,11 +1507,11 @@ static void MoveSelectionDisplayMoveType(void) BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } -static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) +static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1) { u16 src[2]; - src[0] = baseTileNum + 1; - src[1] = baseTileNum + 2; + src[0] = arg1 + 1; + src[1] = arg1 + 2; CopyToBgTilemapBufferRect_ChangePalette(0, src, 9 * (cursorPosition & 1) + 1, 55 + (cursorPosition & 2), 1, 2, 0x11); CopyBgTilemapBufferToVram(0); @@ -1527,7 +1527,7 @@ static void MoveSelectionDestroyCursorAt(u8 cursorPosition) CopyBgTilemapBufferToVram(0); } -void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum) +void ActionSelectionCreateCursorAt(u8 cursorPosition, u8 arg1) { u16 src[2]; src[0] = 1; diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 369f735f2..7d2717e2c 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1168,13 +1168,13 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4); } -void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder) +void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG; - for (i = 0; i < PARTY_SIZE / 2; i++) - sBattleBuffersTransferData[1 + i] = battlePartyOrder[i]; + for (i = 0; i < 3; i++) + sBattleBuffersTransferData[1 + i] = arg1[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1309,12 +1309,12 @@ void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3); } -void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16) +void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2) { sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES; - sBattleBuffersTransferData[1] = ret8; - sBattleBuffersTransferData[2] = ret16; - sBattleBuffersTransferData[3] = (ret16 & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = arg1; + sBattleBuffersTransferData[2] = arg2; + sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1329,20 +1329,20 @@ void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battleP PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5); } -void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret) +void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1) { sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE; - sBattleBuffersTransferData[1] = ret; - sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = arg1; + sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret) +void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b) { sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE; - sBattleBuffersTransferData[1] = ret; - sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = b; + sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } diff --git a/src/battle_dome.c b/src/battle_dome.c index cbd9d0b6b..aadd85afd 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -73,43 +73,40 @@ struct TourneyTreeLineSection #define tMode data[2] #define tPrevTaskId data[3] -#define EFFECTIVENESS_MODE_GOOD 0 -#define EFFECTIVENESS_MODE_BAD 1 -#define EFFECTIVENESS_MODE_AI_VS_AI 2 - -static u8 GetDomeTrainerMonIvs(u16); -static void SwapDomeTrainers(int, int, u16 *); -static void CalcDomeMonStats(u16, int, int, u8, u8, int *); -static void CreateDomeOpponentMons(u16); -static int SelectOpponentMons_Good(u16, bool8); -static int SelectOpponentMons_Bad(u16, bool8); -static int GetTypeEffectivenessPoints(int, int, int); -static int SelectOpponentMonsFromParty(int *, bool8); -static void Task_ShowTourneyInfoCard(u8); -static void Task_HandleInfoCardInput(u8); -static u8 Task_GetInfoCardInput(u8); +// This file's functions. +static u8 GetDomeTrainerMonIvs(u16 trainerId); +static void SwapDomeTrainers(int id1, int id2, u16 *statsArray); +static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 nature, int *stats); +static void CreateDomeOpponentMons(u16 tournamentTrainerId); +static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 arg1); +static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 arg1); +static int GetTypeEffectivenessPoints(int move, int species, int arg2); +static int SelectOpponentMonsFromParty(int *arr, bool8 arg1); +static void Task_ShowTourneyInfoCard(u8 taskId); +static void Task_HandleInfoCardInput(u8 taskId); +static u8 Task_GetInfoCardInput(u8 taskId); static void SetFacilityTrainerAndMonPtrs(void); -static int TrainerIdToTournamentId(u16); +static int TrainerIdToTournamentId(u16 trainerId); static u16 TrainerIdOfPlayerOpponent(void); -static void Task_ShowTourneyTree(u8); -static void Task_HandleStaticTourneyTreeInput(u8); +static void Task_ShowTourneyTree(u8 taskId); +static void Task_HandleStaticTourneyTreeInput(u8 taskId); static void CB2_TourneyTree(void); static void VblankCb_TourneyInfoCard(void); -static void DisplayMatchInfoOnCard(u8, u8); -static void DisplayTrainerInfoOnCard(u8, u8); +static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); +static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId); static int BufferDomeWinString(u8, u8*); static u8 GetDomeBrainTrainerPicId(void); static u8 GetDomeBrainTrainerClass(void); -static void CopyDomeBrainTrainerName(u8 *); -static void CopyDomeTrainerName(u8 *, u16); +static void CopyDomeBrainTrainerName(u8 *str); +static void CopyDomeTrainerName(u8 *str, u16 trainerId); static void HblankCb_TourneyTree(void); static void VblankCb_TourneyTree(void); -static u8 UpdateTourneyTreeCursor(u8); -static void DecideRoundWinners(u8); -static u8 GetOpposingNPCTournamentIdByRound(u8, u8); +static u8 UpdateTourneyTreeCursor(u8 taskId); +static void DecideRoundWinners(u8 roundId); +static u8 GetOpposingNPCTournamentIdByRound(u8 tournamentId, u8); static void DrawTourneyAdvancementLine(u8, u8); -static void SpriteCb_HorizontalScrollArrow(struct Sprite *); -static void SpriteCb_VerticalScrollArrow(struct Sprite *); +static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite); +static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite); static void InitDomeChallenge(void); static void GetDomeData(void); static void SetDomeData(void); @@ -133,6 +130,7 @@ static void BufferLastDomeWinnerName(void); static void InitRandomTourneyTreeResults(void); static void InitDomeTrainers(void); +// EWRAM variables. EWRAM_DATA u32 gPlayerPartyLostHP = 0; // never read static EWRAM_DATA u32 sPlayerPartyMaxHP = 0; // never read static EWRAM_DATA struct TourneyTreeInfoCard *sInfoCard = {0}; @@ -2082,6 +2080,7 @@ static const u8 sTourneyTreeLineSectionArrayCounts[DOME_TOURNAMENT_TRAINERS_COUN {ARRAY_COUNT(sLineSectionTrainer16Round1), ARRAY_COUNT(sLineSectionTrainer16Round2), ARRAY_COUNT(sLineSectionTrainer16Semifinal), ARRAY_COUNT(sLineSectionTrainer16Final)}, }; +// code void CallBattleDomeFunction(void) { sBattleDomeFunctions[gSpecialVar_0x8004](); @@ -2593,33 +2592,28 @@ static void CreateDomeOpponentMons(u16 tournamentTrainerId) } } -// Returns a bitmask representing which 2 of the trainer's 3 pokemon to select. -// The choice is calculated solely depending on the type effectiveness of their -// movesets against the player's pokemon. -// There is a 50% chance of either a "good" or "bad" selection mode being used. -// In the good mode movesets are preferred which are more effective against the -// player, and in the bad mode the opposite is true. If all 3 pokemon tie, the -// other mode will be tried. If they tie again, the pokemon selection is random. int GetDomeTrainerSelectedMons(u16 tournamentTrainerId) { int selectedMonBits; if (Random() & 1) { - selectedMonBits = SelectOpponentMons_Good(tournamentTrainerId, FALSE); + selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, FALSE); if (selectedMonBits == 0) - selectedMonBits = SelectOpponentMons_Bad(tournamentTrainerId, TRUE); + selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, TRUE); } else { - selectedMonBits = SelectOpponentMons_Bad(tournamentTrainerId, FALSE); + selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, FALSE); if (selectedMonBits == 0) - selectedMonBits = SelectOpponentMons_Good(tournamentTrainerId, TRUE); + selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, TRUE); } return selectedMonBits; } -static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom) +// Could probably use a better name once GetTypeEffectivenessPoints is clarified +// Personality seems to be used to select a different weighting system for type effectiveness points +static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 allowRandom) { int i, moveId, playerMonId; int partyMovePoints[FRONTIER_PARTY_SIZE]; @@ -2634,12 +2628,12 @@ static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom) if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY); } else { partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_GOOD); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY); } } } @@ -2647,8 +2641,8 @@ static int SelectOpponentMons_Good(u16 tournamentTrainerId, bool8 allowRandom) return SelectOpponentMonsFromParty(partyMovePoints, allowRandom); } -// Identical to function above, but uses EFFECTIVENESS_MODE_BAD -static int SelectOpponentMons_Bad(u16 tournamentTrainerId, bool8 allowRandom) +// See above function, identical but uses MON_DATA_OT_ID +static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 allowRandom) { int i, moveId, playerMonId; int partyMovePoints[FRONTIER_PARTY_SIZE]; @@ -2663,12 +2657,12 @@ static int SelectOpponentMons_Bad(u16 tournamentTrainerId, bool8 allowRandom) if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID); } else { partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), EFFECTIVENESS_MODE_BAD); + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID); } } } @@ -2741,7 +2735,7 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) #define TYPE_x2 40 #define TYPE_x4 80 -static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) +static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) { int defType1, defType2, defAbility, moveType; int i = 0; @@ -2757,20 +2751,11 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) { - // They likely meant to return here, as 8 is the number of points normally used in this mode for moves with no effect. - // Because there's no return the value instead gets interpreted by the switch, and the number of points becomes 0. - if (mode == EFFECTIVENESS_MODE_BAD) - { + if (arg2 == 1) typePower = 8; - #ifdef BUGFIX - return; - #endif - } } else { - // Calculate a "type power" value to determine the benefit of using this type move against the target. - // This value will then be used to get the number of points to assign to the move. while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) { if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) @@ -2782,30 +2767,33 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) { // BUG: the value of TYPE_x2 does not exist in gTypeEffectiveness, so if defAbility is ABILITY_WONDER_GUARD, the conditional always fails #ifndef BUGFIX - #define WONDER_GUARD_EFFECTIVENESS TYPE_x2 - #else - #define WONDER_GUARD_EFFECTIVENESS TYPE_MUL_SUPER_EFFECTIVE - #endif if (TYPE_EFFECT_DEF_TYPE(i) == defType1) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == WONDER_GUARD_EFFECTIVENESS) || defAbility != ABILITY_WONDER_GUARD) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) - if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == WONDER_GUARD_EFFECTIVENESS) || defAbility != ABILITY_WONDER_GUARD) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + #else + if (TYPE_EFFECT_DEF_TYPE(i) == defType1) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) + if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE) || defAbility != ABILITY_WONDER_GUARD) + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; + #endif } i += 3; } } - switch (mode) + switch (arg2) { - case EFFECTIVENESS_MODE_GOOD: - // Weights moves that more effective. + case 0: switch (typePower) { - case TYPE_x0: - case TYPE_x0_25: case TYPE_x0_50: + case TYPE_x0_25: + case TYPE_x0: default: typePower = 0; break; @@ -2820,24 +2808,22 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) break; } break; - case EFFECTIVENESS_MODE_BAD: - // Weights moves that are less effective. - // Odd that there's no limit on this being used, even the Frontier Brain could end up using this. + case 1: switch (typePower) { - case TYPE_x0: - typePower = 8; + default: + case TYPE_x1: + typePower = 0; break; case TYPE_x0_25: typePower = 4; break; + case TYPE_x0: + typePower = 8; + break; case TYPE_x0_50: typePower = 2; break; - default: - case TYPE_x1: - typePower = 0; - break; case TYPE_x2: typePower = -2; break; @@ -2846,9 +2832,7 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int mode) break; } break; - case EFFECTIVENESS_MODE_AI_VS_AI: - // Used as part of calculating the winner in a battle between two AIs. - // Weights moves that are more effective much more strongly in both directions. + case 2: switch (typePower) { case TYPE_x0: @@ -5863,7 +5847,7 @@ static void InitRandomTourneyTreeResults(void) DOME_TRAINERS[i].forfeited = FALSE; } - monLevel = FRONTIER_MAX_LEVEL_50; + monLevel = 50; for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) { monTypesBits = 0; @@ -6006,7 +5990,7 @@ static void DecideRoundWinners(u8 roundId) for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++) { points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].moves[moveSlot], - gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, EFFECTIVENESS_MODE_AI_VS_AI); + gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, 2); } } species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species; @@ -6029,7 +6013,7 @@ static void DecideRoundWinners(u8 roundId) for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++) { points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].moves[moveSlot], - gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, EFFECTIVENESS_MODE_AI_VS_AI); + gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, 2); } } species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species; diff --git a/src/battle_factory.c b/src/battle_factory.c index a68ef8180..d88ed37f9 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -12,15 +12,15 @@ #include "constants/battle_factory.h" #include "constants/battle_frontier.h" #include "constants/battle_frontier_mons.h" -#include "constants/battle_tent.h" #include "constants/frontier_util.h" #include "constants/layouts.h" #include "constants/trainers.h" #include "constants/moves.h" -#include "constants/items.h" +// IWRAM bss static bool8 sPerformedRentalSwap; +// This file's functions. static void InitFactoryChallenge(void); static void GetBattleFactoryData(void); static void SetBattleFactoryData(void); @@ -212,7 +212,7 @@ static void InitFactoryChallenge(void) } sPerformedRentalSwap = FALSE; - for (i = 0; i < ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); i++) + for (i = 0; i < 6; i++) gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF; for (i = 0; i < FRONTIER_PARTY_SIZE; i++) gFrontierTempParty[i] = 0xFFFF; @@ -310,12 +310,11 @@ static void GenerateOpponentMons(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u32 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; - u32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; + u32 challengeNum = winStreak / 7; gFacilityTrainers = gBattleFrontierTrainers; do { - // Choose a random trainer, ensuring no repeats in this challenge trainerId = GetRandomScaledFrontierTrainerId(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { @@ -325,32 +324,27 @@ static void GenerateOpponentMons(void) } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); gTrainerBattleOpponent_A = trainerId; - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = trainerId; i = 0; while (i != FRONTIER_PARTY_SIZE) { u16 monId = GetFactoryMonId(lvlMode, challengeNum, FALSE); - - // Unown (FRONTIER_MON_UNOWN) is forbidden on opponent Factory teams. if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN) continue; - // Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player - for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) + for (j = 0; j < 6; j++) { if (gFacilityTrainerMons[monId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) break; } - if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) + if (j != 6) continue; - // "High tier" pokemon are only allowed on open level mode if (lvlMode == FRONTIER_LVL_50 && monId > FRONTIER_MONS_HIGH_TIER) continue; - // Ensure this species hasn't already been chosen for the opponent for (k = firstMonId; k < firstMonId + i; k++) { if (species[k] == gFacilityTrainerMons[monId].species) @@ -359,16 +353,14 @@ static void GenerateOpponentMons(void) if (k != firstMonId + i) continue; - // Ensure held items don't repeat on the opponent's team for (k = firstMonId; k < firstMonId + i; k++) { - if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) + if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) break; } if (k != firstMonId + i) continue; - // Successful selection species[i] = gFacilityTrainerMons[monId].species; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]; gFrontierTempParty[i] = monId; @@ -414,15 +406,15 @@ static void SetPlayerAndOpponentParties(void) if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_TENT) { gFacilityTrainerMons = gSlateportBattleTentMons; - monLevel = TENT_MIN_LEVEL; + monLevel = 30; } else { gFacilityTrainerMons = gBattleFrontierMons; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - monLevel = FRONTIER_MAX_LEVEL_OPEN; + monLevel = 100; else - monLevel = FRONTIER_MAX_LEVEL_50; + monLevel = 50; } if (gSpecialVar_0x8005 < 2) @@ -626,9 +618,9 @@ static void GetOpponentMostCommonMonType(void) // Determine which are the two most-common types. // The second most-common type is only updated if // its count is equal to the most-common type. - mostCommonTypes[0] = 0; - mostCommonTypes[1] = 0; - for (i = 1; i < NUMBER_OF_MON_TYPES; i++) + mostCommonTypes[0] = TYPE_NORMAL; + mostCommonTypes[1] = TYPE_NORMAL; + for (i = TYPE_FIGHTING; i < NUMBER_OF_MON_TYPES; i++) { if (typeCounts[mostCommonTypes[0]] < typeCounts[i]) mostCommonTypes[0] = i; @@ -773,15 +765,15 @@ void FillFactoryBrainParty(void) if (gFacilityTrainerMons[monId].species == SPECIES_UNOWN) continue; - if (monLevel == FRONTIER_MAX_LEVEL_50 && monId > FRONTIER_MONS_HIGH_TIER) + if (monLevel == 50 && monId > FRONTIER_MONS_HIGH_TIER) continue; - for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) + for (j = 0; j < 6; j++) { if (monId == gSaveBlock2Ptr->frontier.rentalMons[j].monId) break; } - if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) + if (j != 6) continue; for (k = 0; k < i; k++) @@ -794,7 +786,7 @@ void FillFactoryBrainParty(void) for (k = 0; k < i; k++) { - if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) + if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]) break; } if (k != i) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 14c63b7b8..787dc4740 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1131,7 +1131,8 @@ static void CB2_InitSelectScreen(void) switch (gMain.state) { case 0: - TRY_FREE_AND_SET_NULL(sFactorySelectMons); + if (sFactorySelectMons != NULL) + FREE_AND_SET_NULL(sFactorySelectMons); SetHBlankCallback(NULL); SetVBlankCallback(NULL); CpuFill32(0, (void *)VRAM, VRAM_SIZE); @@ -4220,12 +4221,17 @@ static void Task_OpenMonPic(u8 taskId) return; break; default: + #ifndef UBFIX DestroyTask(taskId); - // Accessing data of destroyed task. Task data isn't reset until a new task needs that task id. + #endif + // UB: Should not use the task after it has been deleted. if (gTasks[taskId].tIsSwapScreen == TRUE) Swap_CreateMonSprite(); else Select_CreateMonSprite(); + #ifdef UBFIX + DestroyTask(taskId); + #endif return; } task->tState++; diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d547dec0f..2a690d129 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -353,12 +353,12 @@ void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite) } } -static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 pointless) +static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1) { sprite->animPaused = TRUE; sprite->callback = SpriteCallbackDummy; - if (!pointless) + if (!arg1) StartSpriteAffineAnim(sprite, 1); else StartSpriteAffineAnim(sprite, 1); @@ -590,7 +590,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + battlerId * 16; - LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); + LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]); LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20); } @@ -653,7 +653,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (species == SPECIES_CASTFORM) { paletteOffset = 0x100 + battlerId * 16; - LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); + LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]); LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, 0x20); } @@ -783,7 +783,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) return retVal; } -void LoadBattleBarGfx(u8 unused) +void LoadBattleBarGfx(u8 arg0) { LZDecompressWram(gBattleInterfaceGfx_BattleBar, gMonSpritesGfxPtr->barFontGfx); } @@ -973,7 +973,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 castform) if (targetSpecies == SPECIES_CASTFORM) { gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonFrontAnimsPtrTable[targetSpecies]; - LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette); + LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[CASTFORM_NORMAL]); LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerDef]], paletteOffset, 32); } diff --git a/src/battle_interface.c b/src/battle_interface.c index dbcab4a9c..26209fe2d 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -158,36 +158,36 @@ enum HEALTHBOX_GFX_FRAME_END_BAR, }; -static const u8 *GetHealthboxElementGfxPtr(u8); -static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *, u32, u32, u32, u32 *); +static const u8 *GetHealthboxElementGfxPtr(u8 elementId); +static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId); static void RemoveWindowOnHealthbox(u32 windowId); -static void UpdateHpTextInHealthboxInDoubles(u8, s16, u8); -static void UpdateStatusIconInHealthbox(u8); +static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); +static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId); -static void TextIntoHealthboxObject(void *, u8 *, s32); -static void SafariTextIntoHealthboxObject(void *, u8 *, u32); -static void HpTextIntoHealthboxObject(void *, u8 *, u32); -static void FillHealthboxObject(void *, u32, u32); +static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 windowWidth); +static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); +static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth); +static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2); -static void Task_HidePartyStatusSummary_BattleStart_1(u8); -static void Task_HidePartyStatusSummary_BattleStart_2(u8); -static void Task_HidePartyStatusSummary_DuringBattle(u8); +static void Task_HidePartyStatusSummary_BattleStart_1(u8 taskId); +static void Task_HidePartyStatusSummary_BattleStart_2(u8 taskId); +static void Task_HidePartyStatusSummary_DuringBattle(u8 taskId); -static void SpriteCB_HealthBoxOther(struct Sprite *); -static void SpriteCB_HealthBar(struct Sprite *); -static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *); -static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *); -static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *); -static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *); -static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *); +static void SpriteCB_HealthBoxOther(struct Sprite *sprite); +static void SpriteCB_HealthBar(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBar_Enter(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBar_Exit(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *sprite); +static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *sprite); -static u8 GetStatusIconForBattlerId(u8, u8); -static s32 CalcNewBarValue(s32, s32, s32, s32 *, u8, u16); -static u8 GetScaledExpFraction(s32, s32, s32, u8); -static void MoveBattleBarGraphically(u8, u8); -static u8 CalcBarFilledPixels(s32, s32, s32, s32 *, u8 *, u8); -static void Debug_TestHealthBar_Helper(struct TestingBar *, s32 *, u16 *); +static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId); +static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5); +static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale); +static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar); +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale); +static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *arg1, u16 *arg2); static const struct OamData sOamData_64x32 = { @@ -814,11 +814,11 @@ static void Debug_DrawNumber(s16 number, u16 *dest, bool8 unk) } // Unused -static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *dest) +static void Debug_DrawNumberPair(s16 number1, s16 number2, u16 *arg2) { - dest[4] = 0x1E; - Debug_DrawNumber(number2, dest, FALSE); - Debug_DrawNumber(number1, dest + 5, TRUE); + arg2[4] = 0x1E; + Debug_DrawNumber(number2, arg2, 0); + Debug_DrawNumber(number1, arg2 + 5, 1); } // Because the healthbox is too large to fit into one sprite, it is divided into two sprites. @@ -1420,7 +1420,7 @@ void SwapHpBarsWithHpText(void) #define tIsBattleStart data[10] #define tBlend data[15] -u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart) +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) { bool8 isOpponent; s16 bar_X, bar_Y, bar_pos2_X, bar_data0; @@ -1429,7 +1429,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 ballIconSpritesIds[PARTY_SIZE]; u8 taskId; - if (!skipPlayer || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) + if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { @@ -1442,7 +1442,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { isOpponent = TRUE; - if (!skipPlayer || !IsDoubleBattle()) + if (!arg2 || !IsDoubleBattle()) bar_X = 104, bar_Y = 40; else bar_X = 104, bar_Y = 16; @@ -2383,7 +2383,7 @@ static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *c return ret; } -static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *pixelsArray, u8 scale) +static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale) { u8 pixels, filledPixels, totalPixels; u8 i; @@ -2397,7 +2397,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 totalPixels = scale * 8; for (i = 0; i < scale; i++) - pixelsArray[i] = 0; + arg4[i] = 0; if (maxValue < totalPixels) pixels = (*currValue * totalPixels / maxValue) >> 8; @@ -2408,7 +2408,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 if (filledPixels == 0 && newValue > 0) { - pixelsArray[0] = 1; + arg4[0] = 1; filledPixels = 1; } else @@ -2417,11 +2417,11 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 { if (pixels >= 8) { - pixelsArray[i] = 8; + arg4[i] = 8; } else { - pixelsArray[i] = pixels; + arg4[i] = pixels; break; } pixels -= 8; @@ -2433,7 +2433,7 @@ static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 // Unused // These two functions seem as if they were made for testing the health bar. -static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *dest, s32 unused) +static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s32 arg3) { s16 ret, var; @@ -2441,31 +2441,31 @@ static s16 Debug_TestHealthBar(struct TestingBar *barInfo, s32 *currValue, u16 * barInfo->oldValue, barInfo->receivedValue, currValue, B_HEALTHBAR_PIXELS / 8, 1); - Debug_TestHealthBar_Helper(barInfo, currValue, dest); + Debug_TestHealthBar_Helper(barInfo, currValue, arg2); if (barInfo->maxValue < B_HEALTHBAR_PIXELS) var = *currValue >> 8; else var = *currValue; - DummiedOutFunction(barInfo->maxValue, var, unused); + DummiedOutFunction(barInfo->maxValue, var, arg3); return ret; } -static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *currValue, u16 *dest) +static void Debug_TestHealthBar_Helper(struct TestingBar *barInfo, s32 *currValue, u16 *arg2) { - u8 pixels[6]; - u16 src[6]; + u8 sp8[6]; + u16 sp10[6]; u8 i; CalcBarFilledPixels(barInfo->maxValue, barInfo->oldValue, - barInfo->receivedValue, currValue, pixels, B_HEALTHBAR_PIXELS / 8); + barInfo->receivedValue, currValue, sp8, B_HEALTHBAR_PIXELS / 8); for (i = 0; i < 6; i++) - src[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + pixels[i]); + sp10[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + sp8[i]); - CpuCopy16(src, dest, sizeof(src)); + CpuCopy16(sp10, arg2, sizeof(sp10)); } static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale) @@ -2546,9 +2546,9 @@ static void RemoveWindowOnHealthbox(u32 windowId) RemoveWindow(windowId); } -static void FillHealthboxObject(void *dest, u32 valMult, u32 numTiles) +static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2) { - CpuFill32(0x11111111 * valMult, dest, numTiles * TILE_SIZE_4BPP); + CpuFill32(0x11111111 * arg1, dest, arg2 * TILE_SIZE_4BPP); } static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 windowWidth) diff --git a/src/battle_main.c b/src/battle_main.c index f61d5eaae..9a0de4199 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1498,7 +1498,8 @@ static void CB2_PreInitMultiBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - FREE_AND_SET_NULL(sMultiPartnerPartyBuffer); + Free(sMultiPartnerPartyBuffer); + sMultiPartnerPartyBuffer = NULL; } } else if (gReceivedRemoteLinkPlayers == 0) @@ -1506,7 +1507,8 @@ static void CB2_PreInitMultiBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - FREE_AND_SET_NULL(sMultiPartnerPartyBuffer); + Free(sMultiPartnerPartyBuffer); + sMultiPartnerPartyBuffer = NULL; } break; } @@ -1542,7 +1544,8 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - FREE_AND_SET_NULL(sMultiPartnerPartyBuffer); + Free(sMultiPartnerPartyBuffer); + sMultiPartnerPartyBuffer = NULL; } break; } @@ -5206,6 +5209,12 @@ static void ReturnFromBattleToOverworld(void) m4aSongNumStop(SE_LOW_HEALTH); SetMainCallback2(gMain.savedCallback); + + // if you experience the follower de-syncing with the player after battle, set POST_BATTLE_FOLLOWER_FIX to TRUE in include/constants/global.h + #if POST_BATTLE_FOLLOWER_FIX + FollowMe_WarpSetEnd(); + gObjectEvents[GetFollowerObjectId()].invisible = TRUE; + #endif } void RunBattleScriptCommands_PopCallbacksStack(void) diff --git a/src/battle_message.c b/src/battle_message.c index 2776c952b..9d1b88ba7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1035,7 +1035,7 @@ const u16 gFirstTurnOfTwoStringIds[] = }; // Index copied from move's index in gTrappingMoves -const u16 gWrappedStringIds[NUM_TRAPPING_MOVES] = +const u16 gWrappedStringIds[] = { STRINGID_PKMNSQUEEZEDBYBIND, // MOVE_BIND STRINGID_PKMNWRAPPEDBY, // MOVE_WRAP @@ -1253,7 +1253,7 @@ const u16 gCaughtMonStringIds[] = [B_MSG_LANETTES_BOX_FULL] = STRINGID_PKMNBOXLANETTESPCFULL, }; -const u16 gTrappingMoves[NUM_TRAPPING_MOVES + 1] = +const u16 gTrappingMoves[] = { MOVE_BIND, MOVE_WRAP, @@ -1261,7 +1261,7 @@ const u16 gTrappingMoves[NUM_TRAPPING_MOVES + 1] = MOVE_CLAMP, MOVE_WHIRLPOOL, MOVE_SAND_TOMB, - 0xFFFF // Never read + 0xFFFF }; const u8 gText_PkmnIsEvolving[] = _("What?\n{STR_VAR_1} is evolving!"); diff --git a/src/battle_pike.c b/src/battle_pike.c index 433dd0a08..dcdabb5dc 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -573,7 +573,7 @@ static void SetupRoomObjectEvents(void) objGfx1 = OBJ_EVENT_GFX_LINK_RECEPTIONIST; break; case PIKE_ROOM_NPC: - objGfx1 = (u8)(GetNPCRoomGraphicsId()); + objGfx1 = (u16)(GetNPCRoomGraphicsId()); break; case PIKE_ROOM_STATUS: objGfx1 = OBJ_EVENT_GFX_GENTLEMAN; @@ -684,7 +684,7 @@ static void SetBattlePikeData(void) static void IsNextRoomFinal(void) { - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > NUM_PIKE_ROOMS) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > 14) gSpecialVar_Result = TRUE; else gSpecialVar_Result = FALSE; @@ -1117,20 +1117,20 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) { monLevel = GetHighestLevelInPlayerParty(); - if (monLevel < FRONTIER_MIN_LEVEL_OPEN) + if (monLevel < 60) { - monLevel = FRONTIER_MIN_LEVEL_OPEN; + monLevel = 60; } else { monLevel -= wildMons[headerId][pikeMonId].levelDelta; - if (monLevel < FRONTIER_MIN_LEVEL_OPEN) - monLevel = FRONTIER_MIN_LEVEL_OPEN; + if (monLevel < 60) + monLevel = 60; } } else { - monLevel = FRONTIER_MAX_LEVEL_50 - wildMons[headerId][pikeMonId].levelDelta; + monLevel = 50 - wildMons[headerId][pikeMonId].levelDelta; } if (checkKeenEyeIntimidate == TRUE && !CanEncounterWildMon(monLevel)) @@ -1158,11 +1158,11 @@ u8 GetBattlePikeWildMonHeaderId(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; - if (winStreak <= 20 * NUM_PIKE_ROOMS) + if (winStreak <= 280) headerId = 0; - else if (winStreak <= 40 * NUM_PIKE_ROOMS) + else if (winStreak <= 560) headerId = 1; - else if (winStreak <= 60 * NUM_PIKE_ROOMS) + else if (winStreak <= 840) headerId = 2; else headerId = 3; @@ -1392,10 +1392,10 @@ static void PrepareOneTrainer(bool8 difficult) if (!difficult) battleNum = 1; else - battleNum = FRONTIER_STAGES_PER_CHALLENGE - 1; + battleNum = 6; lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS; + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; do { trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum); @@ -1409,7 +1409,7 @@ static void PrepareOneTrainer(bool8 difficult) gTrainerBattleOpponent_A = trainerId; gFacilityTrainers = gBattleFrontierTrainers; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; } @@ -1418,7 +1418,7 @@ static void PrepareTwoTrainers(void) int i; u16 trainerId; u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS; + u16 challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; gFacilityTrainers = gBattleFrontierTrainers; do @@ -1433,7 +1433,7 @@ static void PrepareTwoTrainers(void) gTrainerBattleOpponent_A = trainerId; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= NUM_PIKE_ROOMS) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum <= 14) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1] = gTrainerBattleOpponent_A; do @@ -1448,7 +1448,7 @@ static void PrepareTwoTrainers(void) gTrainerBattleOpponent_B = trainerId; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_B, 1); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < NUM_PIKE_ROOMS) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 14) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2] = gTrainerBattleOpponent_B; } @@ -1456,7 +1456,7 @@ static void ClearPikeTrainerIds(void) { u8 i; - for (i = 0; i < NUM_PIKE_ROOMS; i++) + for (i = 0; i < 14; i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; } diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index a885f1c8e..9039f60f2 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -83,18 +83,18 @@ static void ClearPyramidPartyHeldItems(void); static void SetPyramidFloorPalette(void); static void BattlePyramidStartMenu(void); static void RestorePyramidPlayerParty(void); -static void InitPyramidBagItems(u8); +static void InitPyramidBagItems(u8 lvlMode); static u8 GetPyramidFloorTemplateId(void); static u8 GetPostBattleDirectionHintTextIndex(int *, u8, u8); -static void Task_SetPyramidFloorPalette(u8); -static void MarkPyramidTrainerAsBattled(u16); -static void GetPyramidFloorLayoutOffsets(u8 *); +static void Task_SetPyramidFloorPalette(u8 taskId); +static void MarkPyramidTrainerAsBattled(u16 trainerId); +static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets); static void GetPyramidEntranceAndExitSquareIds(u8 *, u8 *); static void SetPyramidObjectPositionsUniformly(u8); static bool8 SetPyramidObjectPositionsInAndNearSquare(u8, u8); static bool8 SetPyramidObjectPositionsNearSquare(u8, u8); -static bool8 TrySetPyramidObjectEventPositionInSquare(u8, u8 *, u8, u8); -static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8, u8, u8, u8 *, u8, u8); +static bool8 TrySetPyramidObjectEventPositionInSquare(u8 arg0, u8 *floorLayoutOffsets, u8 squareId, u8 objectEventId); +static bool8 TrySetPyramidObjectEventPositionAtCoords(bool8 objType, u8 x, u8 y, u8 *floorLayoutOffsets, u8 squareId, u8 objectEventId); // Const rom data. #define ABILITY_RANDOM 2 // For wild mons data. @@ -279,9 +279,9 @@ static const u8 sPyramidFloorTemplateOptions[][2] = {100, 15} }; -static const u8 sFloorTemplateOffsets[FRONTIER_STAGES_PER_CHALLENGE] = +static const u8 sFloorTemplateOffsets[] = { - 0, 4, 9, 14, 19, 24, 29 + 0, 4, 9, 14, 19, 24, 29, 0 }; static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = @@ -406,7 +406,7 @@ static const u8 sPickupItemSlots[][2] = {100, 9}, }; -static const u8 sPickupItemOffsets[FRONTIER_STAGES_PER_CHALLENGE] = {0, 9, 18, 27, 36, 45, 54}; +static const u8 sPickupItemOffsets[] = {0, 9, 18, 27, 36, 45, 54}; static const struct PyramidTrainerEncounterMusic sTrainerClassEncounterMusic[54] = { @@ -963,7 +963,7 @@ static void SeedPyramidFloor(void) { int i; - for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.pyramidRandoms); i++) + for (i = 0; i < 4; i++) gSaveBlock2Ptr->frontier.pyramidRandoms[i] = Random(); gSaveBlock2Ptr->frontier.pyramidTrainerFlags = 0; @@ -977,7 +977,7 @@ static void SetPickupItem(void) u8 id; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; + u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7) % TOTAL_ROUNDS; if (round >= TOTAL_ROUNDS) round = TOTAL_ROUNDS - 1; @@ -1016,8 +1016,8 @@ static void HidePyramidItem(void) { // Rather than using event flags to hide the item object event, // it moves them far off the map bounds. - events[i].x = SHRT_MAX; - events[i].y = SHRT_MAX; + events[i].x = 0x7FFF; + events[i].y = 0x7FFF; break; } i++; @@ -1063,7 +1063,7 @@ static void ShowPostBattleHintText(void) case HINT_REMAINING_ITEMS: for (i = 0; i < GetNumBattlePyramidObjectEvents(); i++) { - if (events[i].graphicsId == OBJ_EVENT_GFX_ITEM_BALL && events[i].x != SHRT_MAX && events[i].y != SHRT_MAX) + if (events[i].graphicsId == OBJ_EVENT_GFX_ITEM_BALL && events[i].x != 0x7FFF && events[i].y != 0x7FFF) textIndex++; } i = 1; @@ -1071,7 +1071,7 @@ static void ShowPostBattleHintText(void) case HINT_REMAINING_TRAINERS: id = GetPyramidFloorTemplateId(); textIndex = sPyramidFloorTemplates[id].numTrainers; - for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) + for (i = 0; i < 8; i++) { if (gBitTable[i] & gSaveBlock2Ptr->frontier.pyramidTrainerFlags) textIndex--; @@ -1326,7 +1326,7 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId) { int i; - for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) + for (i = 0; i < 8; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= gBitTable[i]; @@ -1345,7 +1345,7 @@ void GenerateBattlePyramidWildMon(void) const struct PyramidWildMon *wildMons; u32 id; u32 lvl = gSaveBlock2Ptr->frontier.lvlMode; - u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; + u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / 7) % TOTAL_ROUNDS; if (round >= TOTAL_ROUNDS) round = TOTAL_ROUNDS - 1; @@ -1488,13 +1488,13 @@ static u16 GetUniqueTrainerId(u8 objectEventId) int i; u16 trainerId; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; - u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - if (floor == FRONTIER_STAGES_PER_CHALLENGE) + u32 challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; + u32 battleNum = gSaveBlock2Ptr->frontier.curChallengeBattleNum; + if (battleNum == 7) { do { - trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, floor); + trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, battleNum); for (i = 0; i < objectEventId; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) @@ -1506,7 +1506,7 @@ static u16 GetUniqueTrainerId(u8 objectEventId) { do { - trainerId = GetRandomScaledFrontierTrainerId(challengeNum, floor); + trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum); for (i = 0; i < objectEventId; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) @@ -1523,11 +1523,11 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio int y, x; int i; u8 entranceSquareId, exitSquareId; - u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); + u8 *floorLayoutOffsets = AllocZeroed(16); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); GetPyramidEntranceAndExitSquareIds(&entranceSquareId, &exitSquareId); - for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) + for (i = 0; i < 16; i++) { u16 *map; int yOffset, xOffset; @@ -1535,11 +1535,11 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio const u16 *layoutMap = mapLayout->map; gBackupMapLayout.map = backupMapData; - gBackupMapLayout.width = mapLayout->width * PYRAMID_FLOOR_SQUARES_WIDE + MAP_OFFSET_W; - gBackupMapLayout.height = mapLayout->height * PYRAMID_FLOOR_SQUARES_HIGH + MAP_OFFSET_H; + gBackupMapLayout.width = mapLayout->width * 4 + MAP_OFFSET_W; + gBackupMapLayout.height = mapLayout->height * 4 + MAP_OFFSET_H; map = backupMapData; - yOffset = ((i / PYRAMID_FLOOR_SQUARES_WIDE * mapLayout->height) + MAP_OFFSET) * gBackupMapLayout.width; - xOffset = (i % PYRAMID_FLOOR_SQUARES_WIDE * mapLayout->width) + MAP_OFFSET; + yOffset = ((i / 4 * mapLayout->height) + MAP_OFFSET) * gBackupMapLayout.width; + xOffset = (i % 4 * mapLayout->width) + MAP_OFFSET; map += yOffset + xOffset; for (y = 0; y < mapLayout->height; y++) { @@ -1553,8 +1553,8 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio { if (i == entranceSquareId && setPlayerPosition == FALSE) { - gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x; - gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / PYRAMID_FLOOR_SQUARES_WIDE)) + y; + gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % 4)) + x; + gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / 4)) + y; } map[x] = (layoutMap[x] & (MAPGRID_ELEVATION_MASK | MAPGRID_COLLISION_MASK)) | METATILE_BattlePyramid_Floor; } @@ -1563,7 +1563,7 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio map[x] = layoutMap[x]; } } - map += MAP_OFFSET_W + (mapLayout->width * PYRAMID_FLOOR_SQUARES_WIDE); + map += MAP_OFFSET_W + (mapLayout->width * 4); layoutMap += mapLayout->width; } } @@ -1577,7 +1577,7 @@ void LoadBattlePyramidObjectEventTemplates(void) u8 id; u8 entranceSquareId, exitSquareId; - for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) + for (i = 0; i < 8; i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; id = GetPyramidFloorTemplateId(); @@ -1633,13 +1633,13 @@ void LoadBattlePyramidFloorObjectEventScripts(void) static void GetPyramidEntranceAndExitSquareIds(u8 *entranceSquareId, u8 *exitSquareId) { - *entranceSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[3] % NUM_PYRAMID_FLOOR_SQUARES; - *exitSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[0] % NUM_PYRAMID_FLOOR_SQUARES; + *entranceSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[3] % 16; + *exitSquareId = gSaveBlock2Ptr->frontier.pyramidRandoms[0] % 16; if (*entranceSquareId == *exitSquareId) { - *entranceSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[3] + 1 ) % NUM_PYRAMID_FLOOR_SQUARES; - *exitSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[0] + NUM_PYRAMID_FLOOR_SQUARES - 1) % NUM_PYRAMID_FLOOR_SQUARES; + *entranceSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[3] + 1 ) % 16; + *exitSquareId = (gSaveBlock2Ptr->frontier.pyramidRandoms[0] + 15) % 16; } } @@ -1651,10 +1651,10 @@ static void SetPyramidObjectPositionsUniformly(u8 objType) int squareId; u32 bits = 0; u8 id = GetPyramidFloorTemplateId(); - u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); + u8 *floorLayoutOffsets = AllocZeroed(16); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); - squareId = gSaveBlock2Ptr->frontier.pyramidRandoms[2] % NUM_PYRAMID_FLOOR_SQUARES; + squareId = gSaveBlock2Ptr->frontier.pyramidRandoms[2] % 16; if (objType == OBJ_TRAINERS) { numObjects = sPyramidFloorTemplates[id].numTrainers; @@ -1682,10 +1682,10 @@ static void SetPyramidObjectPositionsUniformly(u8 objType) if (gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3]) bits |= 2; } - if (++squareId >= NUM_PYRAMID_FLOOR_SQUARES) + if (++squareId >= 16) squareId = 0; - if (squareId == gSaveBlock2Ptr->frontier.pyramidRandoms[2] % NUM_PYRAMID_FLOOR_SQUARES) + if (squareId == gSaveBlock2Ptr->frontier.pyramidRandoms[2] % 16) { if (bits & 1) bits |= 6; @@ -1709,7 +1709,7 @@ static bool8 SetPyramidObjectPositionsInAndNearSquare(u8 objType, u8 squareId) int numPlacedObjects = 0; int numObjects; u8 id = GetPyramidFloorTemplateId(); - u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); + u8 *floorLayoutOffsets = AllocZeroed(16); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); if (objType == OBJ_TRAINERS) @@ -1775,7 +1775,7 @@ static bool8 SetPyramidObjectPositionsNearSquare(u8 objType, u8 squareId) int r8 = 0; int numObjects; u8 id = GetPyramidFloorTemplateId(); - u8 *floorLayoutOffsets = AllocZeroed(NUM_PYRAMID_FLOOR_SQUARES); + u8 *floorLayoutOffsets = AllocZeroed(16); GetPyramidFloorLayoutOffsets(floorLayoutOffsets); if (objType == OBJ_TRAINERS) @@ -1900,7 +1900,7 @@ static void GetPyramidFloorLayoutOffsets(u8 *layoutOffsets) int rand = (gSaveBlock2Ptr->frontier.pyramidRandoms[0]) | (gSaveBlock2Ptr->frontier.pyramidRandoms[1] << 16); u8 id = GetPyramidFloorTemplateId(); - for (i = 0; i < NUM_PYRAMID_FLOOR_SQUARES; i++) + for (i = 0; i < 16; i++) { layoutOffsets[i] = sPyramidFloorTemplates[id].layoutOffsets[rand & 0x7]; rand >>= 3; @@ -1931,7 +1931,7 @@ u8 GetNumBattlePyramidObjectEvents(void) u8 i; struct ObjectEventTemplate *events = gSaveBlock1Ptr->objectEventTemplates; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < 16; i++) { if (events[i].localId == 0) break; @@ -1959,7 +1959,7 @@ u16 GetBattlePyramidPickupItemId(void) int rand; u32 i; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE); + int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7); if (round >= TOTAL_ROUNDS) round = TOTAL_ROUNDS - 1; diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 66b4cd97d..d1b946146 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -1410,7 +1410,7 @@ void TryStoreHeldItemsInPyramidBag(void) memcpy(newItems, gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); memcpy(newQuantities, gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); - for (i = 0; i < FRONTIER_PARTY_SIZE; i++) + for (i = 0; i < 3; i++) { heldItem = GetMonData(&party[i], MON_DATA_HELD_ITEM); if (heldItem != ITEM_NONE && !AddBagItem(heldItem, 1)) @@ -1426,8 +1426,10 @@ void TryStoreHeldItemsInPyramidBag(void) } heldItem = ITEM_NONE; - for (i = 0; i < FRONTIER_PARTY_SIZE; i++) + for (i = 0; i < 3; i++) + { SetMonData(&party[i], MON_DATA_HELD_ITEM, &heldItem); + } gSpecialVar_Result = 0; Free(newItems); Free(newQuantities); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4f31f0f01..3c8bbfdee 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2596,7 +2596,7 @@ void SetMoveEffect(bool8 primary, u8 certain) for (gBattleCommunication[MULTISTRING_CHOOSER] = 0; ; gBattleCommunication[MULTISTRING_CHOOSER]++) { - if (gBattleCommunication[MULTISTRING_CHOOSER] >= NUM_TRAPPING_MOVES - 1) + if (gBattleCommunication[MULTISTRING_CHOOSER] > 4) break; if (gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]] == gCurrentMove) break; diff --git a/src/battle_setup.c b/src/battle_setup.c index be2f7e859..ecb5ad9b9 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -611,6 +611,7 @@ static void CB2_EndWildBattle(void) { SetMainCallback2(CB2_ReturnToField); gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; + UpdateFollowerPokemonGraphic(); } } @@ -629,6 +630,7 @@ static void CB2_EndScriptedWildBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + UpdateFollowerPokemonGraphic(); } } @@ -699,22 +701,21 @@ static u8 GetBattleTransitionTypeByMap(void) PlayerGetDestCoords(&x, &y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (GetFlashLevel()) return TRANSITION_TYPE_FLASH; - - if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) - return TRANSITION_TYPE_WATER; - - switch (gMapHeader.mapType) + if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior)) { - case MAP_TYPE_UNDERGROUND: - return TRANSITION_TYPE_CAVE; - case MAP_TYPE_UNDERWATER: - return TRANSITION_TYPE_WATER; - default: - return TRANSITION_TYPE_NORMAL; + switch (gMapHeader.mapType) + { + case MAP_TYPE_UNDERGROUND: + return TRANSITION_TYPE_CAVE; + case MAP_TYPE_UNDERWATER: + return TRANSITION_TYPE_WATER; + default: + return TRANSITION_TYPE_NORMAL; + } } + return TRANSITION_TYPE_WATER; } static u16 GetSumOfPlayerPartyLevel(u8 numMons) @@ -1339,6 +1340,7 @@ static void CB2_EndTrainerBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + UpdateFollowerPokemonGraphic(); if (!InBattlePyramid() && !InTrainerHillChallenge()) { RegisterTrainerInMatchCall(); @@ -1360,6 +1362,7 @@ static void CB2_EndRematchBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + UpdateFollowerPokemonGraphic(); RegisterTrainerInMatchCall(); SetBattledTrainersFlags(); HandleRematchVarsOnBattleEnd(); diff --git a/src/battle_tent.c b/src/battle_tent.c index dba9e6e8a..53c91c871 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -56,8 +56,10 @@ static void GenerateInitialRentalMons(void); * */ -static u16 sRandMonId; +// IWRAM bss +static u16 sRandMonSetId; +// const rom data void static (*const sVerdanturfTentFuncs[])(void) = { [VERDANTURF_TENT_FUNC_INIT] = InitVerdanturfTentChallenge, @@ -355,7 +357,7 @@ static void GenerateOpponentMons(void) const u16 *monSet; u16 species[FRONTIER_PARTY_SIZE]; u16 heldItems[FRONTIER_PARTY_SIZE]; - s32 numMons = 0; + s32 monId = 0; gFacilityTrainers = gSlateportBattleTentTrainers; gFacilityTrainerMons = gSlateportBattleTentMons; @@ -364,7 +366,6 @@ static void GenerateOpponentMons(void) { do { - // Choose a random trainer, ensuring no repeats in this challenge trainerId = Random() % NUM_BATTLE_TENT_TRAINERS; for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { @@ -375,53 +376,48 @@ static void GenerateOpponentMons(void) gTrainerBattleOpponent_A = trainerId; monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; - while (monSet[numMons] != 0xFFFF) - numMons++; - if (numMons > 8) + while (monSet[monId] != 0xFFFF) + monId++; + if (monId > 8) break; - numMons = 0; + monId = 0; } - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < TENT_STAGES_PER_CHALLENGE - 1) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; i = 0; while (i != FRONTIER_PARTY_SIZE) { - sRandMonId = monSet[Random() % numMons]; - - // Ensure none of the opponent's pokemon are the same as the potential rental pokemon for the player - for (j = 0; j < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons); j++) + sRandMonSetId = monSet[Random() % monId]; + for (j = 0; j < 6; j++) { - if (gFacilityTrainerMons[sRandMonId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) + if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species) break; } - if (j != (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.rentalMons)) + if (j != 6) continue; - // Ensure this species hasn't already been chosen for the opponent for (k = 0; k < i; k++) { - if (species[k] == gFacilityTrainerMons[sRandMonId].species) + if (species[k] == gFacilityTrainerMons[sRandMonSetId].species) break; } if (k != i) continue; - // Ensure held items don't repeat on the opponent's team for (k = 0; k < i; k++) { - if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId]) + if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId]) break; } if (k != i) continue; - // Successful selection - species[i] = gFacilityTrainerMons[sRandMonId].species; - heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId]; - gFrontierTempParty[i] = sRandMonId; + species[i] = gFacilityTrainerMons[sRandMonSetId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId]; + gFrontierTempParty[i] = sRandMonSetId; i++; } } diff --git a/src/battle_tower.c b/src/battle_tower.c index 354a087c4..989412e9e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -27,7 +27,6 @@ #include "constants/battle_dome.h" #include "constants/battle_frontier.h" #include "constants/battle_frontier_mons.h" -#include "constants/battle_tent.h" #include "constants/battle_tent_mons.h" #include "constants/battle_tent_trainers.h" #include "constants/battle_tower.h" @@ -688,7 +687,7 @@ struct { u32 facilityClass; const u8 *const *strings; -} static const sPartnerTrainerTextTables[] = +} const sPartnerTrainerTextTables[] = { {FACILITY_CLASS_LASS, sPartnerTextsLass}, {FACILITY_CLASS_YOUNGSTER, sPartnerTextsYoungster}, @@ -770,7 +769,7 @@ struct u8 nature; u8 evs[NUM_STATS]; u16 moves[MAX_MON_MOVES]; -} static const sStevenMons[MULTI_PARTY_SIZE] = +} const sStevenMons[MULTI_PARTY_SIZE] = { { .species = SPECIES_METANG, @@ -1061,7 +1060,7 @@ static void SetNextFacilityOpponent(void) u16 id; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 winStreak = GetCurrentFacilityWinStreak(); - u32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; + u32 challengeNum = winStreak / 7; SetFacilityPtrsGetLevel(); if (battleMode == FRONTIER_MODE_MULTIS || battleMode == FRONTIER_MODE_LINK_MULTIS) @@ -1096,7 +1095,7 @@ static void SetNextFacilityOpponent(void) gTrainerBattleOpponent_A = id; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < FRONTIER_STAGES_PER_CHALLENGE) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < 7) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; } } @@ -1108,7 +1107,7 @@ u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum) if (challengeNum <= 7) { - if (battleNum == FRONTIER_STAGES_PER_CHALLENGE - 1) + if (battleNum == 6) { // The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges trainerId = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1; @@ -1137,7 +1136,7 @@ static void GetRandomScaledFrontierTrainerIdRange(u8 challengeNum, u8 battleNum, if (challengeNum <= 7) { - if (battleNum == FRONTIER_STAGES_PER_CHALLENGE - 1) + if (battleNum == 6) { // The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges range = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1; @@ -1327,19 +1326,19 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) if (gSaveBlock2Ptr->frontier.towerRecords[i].trainerId[j] != newRecord->trainerId[j]) break; } - if (j == TRAINER_ID_LENGTH) + if (j == 4) { for (k = 0; k < PLAYER_NAME_LENGTH; k++) { - // Incorrect index being used - #ifdef BUGFIX - #define INDEX k - #else - #define INDEX j - #endif - if (gSaveBlock2Ptr->frontier.towerRecords[i].name[INDEX] != newRecord->name[INDEX]) + #ifdef BUGFIX + if (gSaveBlock2Ptr->frontier.towerRecords[i].name[k] != newRecord->name[k]) break; - if (newRecord->name[INDEX] == EOS) + if (newRecord->name[k] == EOS) + #else + if (gSaveBlock2Ptr->frontier.towerRecords[i].name[j] != newRecord->name[j]) + break; + if (newRecord->name[j] == EOS) + #endif { k = PLAYER_NAME_LENGTH; break; @@ -1635,7 +1634,7 @@ static void FillTentTrainerParty(u8 monsCount) static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) { s32 i, j; - u16 chosenMonIndices[MAX_FRONTIER_PARTY_SIZE]; + u16 chosenMonIndices[4]; u8 friendship = MAX_FRIENDSHIP; u8 level = SetFacilityPtrsGetLevel(); u8 fixedIV = 0; @@ -1651,7 +1650,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) } else if (trainerId == TRAINER_EREADER) { - for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++) + for (i = firstMonId; i < firstMonId + 3; i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]); return; } @@ -1676,7 +1675,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) else { // Apprentice. - for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++) + for (i = firstMonId; i < firstMonId + 3; i++) CreateApprenticeMon(&gEnemyParty[i], &gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE], i - firstMonId); return; } @@ -1692,10 +1691,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount) while (i != monCount) { u16 monId = monSet[Random() % bfMonCount]; - - // "High tier" pokemon are only allowed on open level mode - // 20 is not a possible value for level here - if ((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER) + if ((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER) continue; // Ensure this pokemon species isn't a duplicate. @@ -1771,11 +1767,11 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId) fixedIV = 9; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - level = FRONTIER_MAX_LEVEL_OPEN; + level = 100; else - level = FRONTIER_MAX_LEVEL_50; + level = 50; - for (i = 0; i != FRONTIER_PARTY_SIZE; i++) + for (i = 0; i != 3; i++) { CreateMonWithEVSpread(&gEnemyParty[firstMonId + i], apprentice->party[i].species, level, fixedIV, 8); friendship = MAX_FRIENDSHIP; @@ -1806,10 +1802,8 @@ u16 GetRandomFrontierMonFromSet(u16 trainerId) do { - // "High tier" pokemon are only allowed on open level mode - // 20 is not a possible value for level here monId = monSet[Random() % numMons]; - } while((level == FRONTIER_MAX_LEVEL_50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER); + } while((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER); return monId; } @@ -1837,18 +1831,18 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); // By mistake Battle Tower's Level 50 challenge number is used to determine the IVs for Battle Factory. #ifdef BUGFIX - u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + u8 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; #else - u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][FRONTIER_LVL_50] / FRONTIER_STAGES_PER_CHALLENGE; + u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][FRONTIER_LVL_50] / 7; #endif - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < FRONTIER_STAGES_PER_CHALLENGE - 1) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) fixedIV = GetFactoryMonFixedIV(challengeNum, FALSE); else fixedIV = GetFactoryMonFixedIV(challengeNum, TRUE); // Last trainer in challenge uses higher IVs } else if (trainerId == TRAINER_EREADER) { - for (i = firstMonId; i < firstMonId + FRONTIER_PARTY_SIZE; i++) + for (i = firstMonId; i < firstMonId + 3; i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i - firstMonId]); return; } @@ -1888,7 +1882,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId) { u8 i, j; u8 friendship; - u8 level = TENT_MIN_LEVEL; + u8 level = 30; u8 fixedIV = 0; u32 otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); @@ -2049,7 +2043,7 @@ void DoSpecialTrainerBattle(void) break; case SPECIAL_BATTLE_EREADER: ZeroEnemyPartyMons(); - for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.ereaderTrainer.party); i++) + for (i = 0; i < 3; i++) CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->frontier.ereaderTrainer.party[i]); gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_EREADER_TRAINER; gTrainerBattleOpponent_A = 0; @@ -2195,7 +2189,7 @@ static void SaveTowerChallenge(void) { u16 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE); + s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7); if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) SaveBattleTowerRecord(); @@ -2285,7 +2279,7 @@ static void LoadMultiPartnerCandidatesData(void) objEventTemplates = gSaveBlock1Ptr->objectEventTemplates; lvlMode = gSaveBlock2Ptr->frontier.lvlMode; battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL); species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL); level = SetFacilityPtrsGetLevel(); @@ -2344,7 +2338,7 @@ static void LoadMultiPartnerCandidatesData(void) for (i = 0; i < APPRENTICE_COUNT; i++) { if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0 - && sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / FRONTIER_STAGES_PER_CHALLENGE <= challengeNum + && sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / 7 <= challengeNum && gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode) { k = 0; @@ -2383,7 +2377,7 @@ static void LoadMultiPartnerCandidatesData(void) checksum += record[j]; } - if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak / FRONTIER_STAGES_PER_CHALLENGE <= challengeNum + if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak / 7 <= challengeNum && gSaveBlock2Ptr->frontier.towerRecords[i].lvlMode == lvlMode && recordHasData && gSaveBlock2Ptr->frontier.towerRecords[i].checksum == checksum) @@ -2464,7 +2458,7 @@ static void ShowPartnerCandidateMessage(void) s32 monId; s32 level = SetFacilityPtrsGetLevel(); u16 winStreak = GetCurrentFacilityWinStreak(); - s32 challengeNum = winStreak / FRONTIER_STAGES_PER_CHALLENGE; + s32 challengeNum = winStreak / 7; s32 k = gSpecialVar_LastTalked - 2; s32 trainerId = gSaveBlock2Ptr->frontier.trainerIds[k]; @@ -2523,7 +2517,7 @@ static void ShowPartnerCandidateMessage(void) gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[0]; gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[1]; } - for (k = 0; k < FRONTIER_STAGES_PER_CHALLENGE * 2; k++) + for (k = 0; k < 14; k++) { while (1) { @@ -2582,7 +2576,7 @@ static void LoadLinkMultiOpponentsData(void) case 0: if (battleMode == FRONTIER_MODE_LINK_MULTIS) { - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; if (IsLinkTaskFinished()) { SendBlock(BitmaskAllOtherLinkPlayers(), &challengeNum, sizeof(challengeNum)); @@ -2602,7 +2596,7 @@ static void LoadLinkMultiOpponentsData(void) challengeNum = gBlockRecvBuffer[0][0]; else challengeNum = gBlockRecvBuffer[1][0]; - for (i = 0; i < FRONTIER_STAGES_PER_CHALLENGE * 2; i++) + for (i = 0; i < 14; i++) { do { @@ -2743,8 +2737,8 @@ u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode) { u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - if (winStreak > MAX_STREAK) - return MAX_STREAK; + if (winStreak > 9999) + return 9999; else return winStreak; } @@ -2846,7 +2840,7 @@ static void FillEReaderTrainerWithPlayerData(void) ereaderTrainer->winStreak = 1; j = 7; - for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) + for (i = 0; i < 6; i++) { ereaderTrainer->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; ereaderTrainer->farewellPlayerLost[i] = j; @@ -2854,7 +2848,7 @@ static void FillEReaderTrainerWithPlayerData(void) j++; } - for (i = 0; i < (int)ARRAY_COUNT(ereaderTrainer->party); i++) + for (i = 0; i < 3; i++) ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]); SetEReaderTrainerChecksum(ereaderTrainer); @@ -3252,12 +3246,12 @@ u8 GetFrontierEnemyMonLevel(u8 lvlMode) { default: case FRONTIER_LVL_50: - level = FRONTIER_MAX_LEVEL_50; + level = 50; break; case FRONTIER_LVL_OPEN: level = GetHighestLevelInPlayerParty(); - if (level < FRONTIER_MIN_LEVEL_OPEN) - level = FRONTIER_MIN_LEVEL_OPEN; + if (level < 60) + level = 60; break; } @@ -3327,7 +3321,7 @@ static u16 GetBattleTentTrainerId(void) static u8 SetTentPtrsGetLevel(void) { - u8 level = TENT_MIN_LEVEL; + u8 level = 30; u32 facility = VarGet(VAR_FRONTIER_FACILITY); if (facility == FRONTIER_FACILITY_FACTORY) @@ -3352,8 +3346,8 @@ static u8 SetTentPtrsGetLevel(void) } level = GetHighestLevelInPlayerParty(); - if (level < TENT_MIN_LEVEL) - level = TENT_MIN_LEVEL; + if (level < 30) + level = 30; return level; } @@ -3375,7 +3369,7 @@ static void SetNextBattleTentOpponent(void) gTrainerBattleOpponent_A = trainerId; SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < TENT_STAGES_PER_CHALLENGE) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum + 1 < 3) gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A; } diff --git a/src/battle_transition.c b/src/battle_transition.c index c523cbe7b..1e421b5e4 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -4762,8 +4762,10 @@ static bool8 FrontierSquaresScroll_End(struct Task *task) BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); DestroyTask(FindTaskIdByFunc(task->func)); - task->tState++; // Changing value of a destroyed task +#ifndef UBFIX + task->tState++; // UB: changing value of a destroyed task +#endif return FALSE; } diff --git a/src/battle_util.c b/src/battle_util.c index f34c39eb0..6bb6d9ae4 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1190,7 +1190,7 @@ u8 DoFieldEndTurnEffects(void) s32 j; for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE)) + if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], 0)) SwapTurnOrder(i, j); } } diff --git a/src/berry_blender.c b/src/berry_blender.c index bdf7858ce..27ea641ce 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -1188,9 +1188,9 @@ static void SetBerrySpriteData(struct Sprite* sprite, s16 x, s16 y, s16 bounceSp #undef sXSpeed #undef sYDownSpeed -static void CreateBerrySprite(u16 itemId, u8 playerId) +static void CreateBerrySprite(u16 a0, u8 playerId) { - u8 spriteId = CreateSpinningBerrySprite(ITEM_TO_BERRY(itemId) - 1, 0, 80, playerId & 1); + u8 spriteId = CreateSpinningBerrySprite(a0 + FIRST_BERRY_INDEX - 10, 0, 80, playerId & 1); SetBerrySpriteData(&gSprites[spriteId], sBerrySpriteData[playerId][0], sBerrySpriteData[playerId][1], @@ -2238,7 +2238,7 @@ static void CB2_PlayBlender(void) UpdatePaletteFade(); } -static void Blender_DummiedOutFunc(s16 bgX, s16 bgY) +static void Blender_DummiedOutFunc(s16 a0, s16 a1) { } diff --git a/src/berry_crush.c b/src/berry_crush.c index e6e2d8742..e7a5df951 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -2254,7 +2254,7 @@ static u32 Cmd_PrintMessage(struct BerryCrushGame *game, u8 *args) switch (game->cmdState) { case 0: - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); if (args[1] & F_MSG_EXPAND) { StringExpandPlaceholders(gStringVar4, sMessages[args[0]]); @@ -3241,7 +3241,7 @@ static u32 Cmd_SaveGame(struct BerryCrushGame *game, u8 *args) case 2: if (!IsLinkTaskFinished()) return 0; - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3); CopyWindowToVram(0, COPYWIN_FULL); CreateTask(Task_LinkFullSave, 0); @@ -3389,7 +3389,7 @@ static u32 Cmd_StopGame(struct BerryCrushGame *game, u8 *args) switch (game->cmdState) { case 0: - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); if (game->playAgainState == PLAY_AGAIN_NO_BERRIES) AddTextPrinterParameterized2(0, FONT_NORMAL, sMessages[MSG_NO_BERRIES], game->textSpeed, 0, 2, 1, 3); else diff --git a/src/bike.c b/src/bike.c index 5546edd8e..b1dd7cfe2 100644 --- a/src/bike.c +++ b/src/bike.c @@ -7,6 +7,8 @@ #include "metatile_behavior.h" #include "overworld.h" #include "sound.h" +#include "event_data.h" +#include "sprite.h" #include "constants/map_types.h" #include "constants/songs.h" @@ -982,7 +984,7 @@ void GetOnOffBike(u8 transitionFlags) else { FollowerIntoPokeball(); - + SetPlayerAvatarTransitionFlags(transitionFlags); Overworld_SetSavedMusic(MUS_CYCLING); Overworld_ChangeMusicTo(MUS_CYCLING); diff --git a/src/cable_car.c b/src/cable_car.c index c81764728..00f62d08f 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -800,12 +800,12 @@ static void CreateCableCarSprites(void) u8 spriteId; u8 i; - u8 playerGraphicsIds[2] = { + u16 playerGraphicsIds[2] = { [MALE] = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, [FEMALE] = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL }; u16 rval = Random(); - u8 hikerGraphicsIds[4] = { + u16 hikerGraphicsIds[4] = { OBJ_EVENT_GFX_HIKER, OBJ_EVENT_GFX_CAMPER, OBJ_EVENT_GFX_PICNICKER, diff --git a/src/coins.c b/src/coins.c index 4c4739999..17fd147b7 100644 --- a/src/coins.c +++ b/src/coins.c @@ -8,7 +8,7 @@ #include "international_string_util.h" #include "constants/coins.h" -static EWRAM_DATA u8 sCoinsWindowId = 0; +EWRAM_DATA u8 sCoinsWindowId = 0; void PrintCoinsString(u32 coinAmount) { diff --git a/src/contest.c b/src/contest.c index da57d9e28..ced9f90cd 100644 --- a/src/contest.c +++ b/src/contest.c @@ -93,7 +93,7 @@ static void Task_ContestReturnToField(u8); static void FieldCB_ContestReturnToField(void); static bool8 IsPlayerLinkLeader(void); static void PrintContestantTrainerName(u8); -static void PrintContestantTrainerNameWithColor(u8, u8); +static void PrintContestantTrainerNameWithColor(u8 a0, u8 a1); static void PrintContestantMonName(u8); static void PrintContestantMonNameWithColor(u8, u8); static u8 CreateJudgeSprite(void); @@ -352,7 +352,7 @@ EWRAM_DATA u16 gSpecialVar_ContestRank = 0; EWRAM_DATA u8 gNumLinkContestPlayers = 0; EWRAM_DATA u8 gHighestRibbonRank = 0; EWRAM_DATA struct ContestResources *gContestResources = NULL; -static EWRAM_DATA u8 sContestBgCopyFlags = 0; +EWRAM_DATA u8 sContestBgCopyFlags = 0; EWRAM_DATA struct ContestWinner gCurContestWinner = {0}; EWRAM_DATA bool8 gCurContestWinnerIsForArtist = 0; EWRAM_DATA u8 gCurContestWinnerSaveIdx = 0; @@ -625,7 +625,7 @@ static const struct SpriteTemplate sSpriteTemplate_ApplauseMeter = .callback = SpriteCallbackDummy }; -static const struct OamData sOam_Judge = +const struct OamData sOam_Judge = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -639,7 +639,7 @@ static const struct OamData sOam_Judge = .paletteNum = 2, }; -static const struct SpriteTemplate sSpriteTemplate_Judge = +const struct SpriteTemplate sSpriteTemplate_Judge = { .tileTag = TAG_JUDGE, .paletteTag = TAG_JUDGE, @@ -650,7 +650,7 @@ static const struct SpriteTemplate sSpriteTemplate_Judge = .callback = SpriteCallbackDummy }; -static const struct CompressedSpriteSheet sSpriteSheet_Judge = +const struct CompressedSpriteSheet sSpriteSheet_Judge = { .data = gContestJudgeGfx, .size = 0x800, @@ -664,13 +664,13 @@ static const struct CompressedSpriteSheet sSpriteSheet_JudgeSymbols = .tag = TAG_JUDGE_SYMBOLS_GFX }; -static const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = +const struct CompressedSpritePalette sSpritePalette_JudgeSymbols = { .data = gContestJudgeSymbolsPal, .tag = TAG_CONTEST_SYMBOLS_PAL }; -static const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = +const struct SpriteTemplate sSpriteTemplate_JudgeSpeechBubble = { .tileTag = TAG_JUDGE_SYMBOLS_GFX, .paletteTag = TAG_CONTEST_SYMBOLS_PAL, @@ -876,7 +876,7 @@ static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CON } }; -static const struct OamData sOam_ContestantsTurnBlinkEffect = +const struct OamData sOam_ContestantsTurnBlinkEffect = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -891,13 +891,13 @@ static const struct OamData sOam_ContestantsTurnBlinkEffect = .affineParam = 0, }; -static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] = +const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = +const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = { AFFINEANIMCMD_FRAME(3, 3, 0, 15), AFFINEANIMCMD_FRAME(-3, -3, 0, 15), @@ -906,13 +906,13 @@ static const union AffineAnimCmd sAffineAnim_ContestantsTurnBlinkEffect_1[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] = +const union AffineAnimCmd *const sAffineAnims_ContestantsTurnBlinkEffect[] = { sAffineAnim_ContestantsTurnBlinkEffect_0, sAffineAnim_ContestantsTurnBlinkEffect_1 }; -static const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = +const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { .tileTag = TAG_BLINK_EFFECT_CONTESTANT0, @@ -952,7 +952,7 @@ static const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[C } }; -static const s8 sContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = +static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = { [CONTEST_CATEGORY_COOL] = { [CONTEST_CATEGORY_COOL] = +1, @@ -3186,14 +3186,14 @@ static u16 GetMoveEffectSymbolTileOffset(u16 move, u8 contestant) return offset; } -static void PrintContestMoveDescription(u16 move) +static void PrintContestMoveDescription(u16 a) { u8 category; u16 categoryTile; u8 numHearts; // The contest category icon is implemented as a 5x2 group of tiles. - category = gContestMoves[move].contestCategory; + category = gContestMoves[a].contestCategory; if (category == CONTEST_CATEGORY_COOL) categoryTile = 0x4040; else if (category == CONTEST_CATEGORY_BEAUTY) @@ -3209,27 +3209,27 @@ static void PrintContestMoveDescription(u16 move) ContestBG_FillBoxWithIncrementingTile(0, categoryTile + 0x10, 0x0b, 0x20, 0x05, 0x01, 0x11, 0x01); // Appeal hearts - if (gContestEffects[gContestMoves[move].effect].appeal == 0xFF) + if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF) numHearts = 0; else - numHearts = gContestEffects[gContestMoves[move].effect].appeal / 10; + numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; if (numHearts > MAX_CONTEST_MOVE_HEARTS) numHearts = MAX_CONTEST_MOVE_HEARTS; ContestBG_FillBoxWithTile(0, TILE_EMPTY_APPEAL_HEART, 0x15, 0x1f, MAX_CONTEST_MOVE_HEARTS, 0x01, 0x11); ContestBG_FillBoxWithTile(0, TILE_FILLED_APPEAL_HEART, 0x15, 0x1f, numHearts, 0x01, 0x11); // Jam hearts - if (gContestEffects[gContestMoves[move].effect].jam == 0xFF) + if (gContestEffects[gContestMoves[a].effect].jam == 0xFF) numHearts = 0; else - numHearts = gContestEffects[gContestMoves[move].effect].jam / 10; + numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; if (numHearts > MAX_CONTEST_MOVE_HEARTS) numHearts = MAX_CONTEST_MOVE_HEARTS; ContestBG_FillBoxWithTile(0, TILE_EMPTY_JAM_HEART, 0x15, 0x20, MAX_CONTEST_MOVE_HEARTS, 0x01, 0x11); ContestBG_FillBoxWithTile(0, TILE_FILLED_JAM_HEART, 0x15, 0x20, numHearts, 0x01, 0x11); FillWindowPixelBuffer(WIN_MOVE_DESCRIPTION, PIXEL_FILL(0)); - Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[move].effect]); + Contest_PrintTextToBg0WindowStd(WIN_MOVE_DESCRIPTION, gContestEffectDescriptionPointers[gContestMoves[a].effect]); Contest_PrintTextToBg0WindowStd(WIN_SLASH, gText_Slash); } @@ -4537,14 +4537,14 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].contestantAnimTarget = i; } -void SetContestantEffectStringID(u8 contestant, u8 effectStringId) +void SetContestantEffectStringID(u8 a, u8 b) { - eContestantStatus[contestant].effectStringId = effectStringId; + eContestantStatus[a].effectStringId = b; } -void SetContestantEffectStringID2(u8 contestant, u8 effectStringId) +void SetContestantEffectStringID2(u8 a, u8 b) { - eContestantStatus[contestant].effectStringId2 = effectStringId; + eContestantStatus[a].effectStringId2 = b; } void SetStartledString(u8 contestant, u8 jam) @@ -4744,7 +4744,7 @@ static void UpdateApplauseMeter(void) s8 Contest_GetMoveExcitement(u16 move) { - return sContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; + return gContestExcitementTable[gSpecialVar_ContestCategory][gContestMoves[move].contestCategory]; } static u8 StartApplauseOverflowAnimation(void) diff --git a/src/contest_util.c b/src/contest_util.c index d8726d860..1ca217526 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -77,10 +77,7 @@ enum { #define TAG_CONFETTI 3017 #define TAG_WIRELESS_INDICATOR_WINDOW 22222 -// Length of the score bar on the results screen -#define NUM_BAR_SEGMENTS 11 -#define BAR_SEGMENT_LENGTH 8 // Each segment of the results bar is a single tile, so 8 pixels long -#define MAX_BAR_LENGTH (NUM_BAR_SEGMENTS * BAR_SEGMENT_LENGTH) +#define MAX_BAR_LENGTH 87 // Starting x/y for the sliding results screen text box #define TEXT_BOX_X (DISPLAY_WIDTH + 32) @@ -99,7 +96,7 @@ struct ContestResultsInternal u8 winnerMonSpriteId; bool8 destroyConfetti; bool8 pointsFlashing; - s16 barLength[CONTESTANT_COUNT]; + s16 unkC[CONTESTANT_COUNT]; u8 numBarsUpdating; }; @@ -1751,7 +1748,7 @@ static void CalculateContestantsResultData(void) if ((*sContestResults->monResults)[i].lostPoints) barLengthRound2 *= -1; - if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH) + if (barLengthPreliminary + barLengthRound2 == MAX_BAR_LENGTH + 1) { if (barLengthRound2 > 0) (*sContestResults->monResults)[i].barLengthRound2--; @@ -1844,52 +1841,47 @@ static void Task_UpdateContestResultBar(u8 taskId) s16 target = gTasks[taskId].tTarget; s16 decreasing = gTasks[taskId].tDecreasing; - // Has the results bar reached the limit? if (decreasing) { - if (sContestResults->data->barLength[monId] <= 0) + if (sContestResults->data->unkC[monId] <= 0) minMaxReached = TRUE; } else { - if (sContestResults->data->barLength[monId] >= MAX_BAR_LENGTH) + if (sContestResults->data->unkC[monId] > MAX_BAR_LENGTH) minMaxReached = TRUE; } - if (sContestResults->data->barLength[monId] == target) + if (sContestResults->data->unkC[monId] == target) targetReached = TRUE; if (!targetReached) { - // Target length has not been reached, update bar length if (minMaxReached) - sContestResults->data->barLength[monId] = target; + sContestResults->data->unkC[monId] = target; else if (decreasing) - sContestResults->data->barLength[monId]--; + sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] - 1; else - sContestResults->data->barLength[monId]++; + sContestResults->data->unkC[monId] = sContestResults->data->unkC[monId] + 1; } - // Update the tiles of the results bar if it's still changing if (!minMaxReached && !targetReached) { - u8 tileOffset; + u8 var0; u16 tileNum; - for (i = 0; i < NUM_BAR_SEGMENTS; i++) + for (i = 0; i < 11; i++) { - if (sContestResults->data->barLength[monId] >= (i + 1) * BAR_SEGMENT_LENGTH) - tileOffset = 8; // Bar segment is full - else if (sContestResults->data->barLength[monId] >= i * BAR_SEGMENT_LENGTH) - tileOffset = sContestResults->data->barLength[monId] % 8; // Bar segment is between full and empty + if (sContestResults->data->unkC[monId] >= (i + 1) * 8) + var0 = 8; + else if (sContestResults->data->unkC[monId] >= i * 8) + var0 = sContestResults->data->unkC[monId] % 8; else - tileOffset = 0; // Bar segment is empty + var0 = 0; - // The first 4 bar segment tiles are not adjacent in the tileset to the - // remaining bar segment tiles; choose the base tile number accordingly. - if (tileOffset < 4) - tileNum = 0x504C + tileOffset; + if (var0 < 4) + tileNum = 0x504C + var0; else - tileNum = 0x5057 + tileOffset; + tileNum = 0x5057 + var0; FillBgTilemapBufferRect_Palette0(2, tileNum, i + 7, monId * 3 + 6, 1, 1); } diff --git a/src/credits.c b/src/credits.c index 33362fb38..43c8d6628 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1285,18 +1285,18 @@ static void ResetCreditsTasks(u8 taskId) gIntroCredits_MovingSceneryState = INTROCRED_SCENERY_DESTROY; } -static void LoadTheEndScreen(u16 tileOffsetLoad, u16 tileOffsetWrite, u16 palOffset) +static void LoadTheEndScreen(u16 arg0, u16 arg1, u16 palOffset) { u16 baseTile; u16 i; - LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + tileOffsetLoad)); + LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + arg0)); LoadPalette(gIntroCopyright_Pal, palOffset, sizeof(gIntroCopyright_Pal)); baseTile = (palOffset / 16) << 12; for (i = 0; i < 32 * 32; i++) - ((u16 *) (VRAM + tileOffsetWrite))[i] = baseTile + 1; + ((u16 *) (VRAM + arg1))[i] = baseTile + 1; } static u16 GetLetterMapTile(u8 baseTiles) diff --git a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h index f09448b82..8738b0de6 100644 --- a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h +++ b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h @@ -1038,7 +1038,7 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round20[] = } }; -static const struct PyramidWildMon *const sOpenLevelWildMonPointers[TOTAL_ROUNDS] = +static const struct PyramidWildMon *const sOpenLevelWildMonPointers[] = { sOpenLevelWildMons_Round1, sOpenLevelWildMons_Round2, diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index c13e6a8c9..75785b258 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -1,23 +1,20 @@ +#define TRAINER_HILL_OTID 0x10000000 + // NOTE: Each of these macros turn data into one byte. Therefore ranges for all arguments is 0-15 -// See struct TrainerHillFloorMap for more info about each +// See struct TrHillDisplay for more info about each #define COORDS_XY(x,y) ((y<<4)|(x)) #define TRAINER_DIRS(a, b) (((a-1)<<4)|(b-1)) #define TRAINER_RANGE(a, b) ((a<<4)|(b)) -// WARNING: While not referenced directly, the floor data in this file is referenced by virtue -// of coming after its corresponding challenge (see SetUpDataStruct in trainer_hill.c). -// Do not insert data between a pair of 'sChallenge_Mode' and 'sFloors_Mode'. - -// Unused -static const struct TrainerHillChallenge sChallenge_JPDefault = { +static const struct TrHillTag sDataTagJPDefault = { .numTrainers = NUM_TRAINER_HILL_TRAINERS_JP, .unused1 = 1, .numFloors = NUM_TRAINER_HILL_FLOORS_JP, .checksum = 0x0 }; -// Unused -static const struct TrainerHillFloor sFloors_JPDefault[] = { + +static const struct TrHillFloor sDataTagJPDefault_Floors[] = { [0] = { .trainerNum1 = 0, .trainerNum2 = 0, @@ -25,7 +22,7 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { [0] = { .name = __("シゲノブ$$$$ "), .facilityClass = FACILITY_CLASS_YOUNGSTER, - .unused = TRUE, + .unused = 0x1, .speechBefore = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_EXCL, EC_WORD_THEY_WERE, EC_WORD_OPPONENT, EC_WORD_CAN }, .speechWin = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_WEAK, EC_WORD_OF, EC_WORD_WERE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, .speechLose = { EC_WORD_TRAINER, EC_WORD_MRS, EC_WORD_STRONG, EC_WORD_HEY_QUES, EC_WORD_EXCL, EC_WORD_EXCL }, @@ -35,10 +32,13 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .species = SPECIES_ZIGZAGOON, .heldItem = ITEM_SITRUS_BERRY, .moves = { MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_GROWL, MOVE_TAIL_WHIP }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, .speedEV = 100, + .spAttackEV = 0, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, .hpIV = 5, @@ -50,14 +50,18 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("ジグザグマ$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [1] = { .species = SPECIES_SHROOMISH, .heldItem = ITEM_PECHA_BERRY, .moves = { MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_POISON_POWDER, MOVE_GROWTH }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 120, + .attackEV = 0, .defenseEV = 120, + .speedEV = 0, .spAttackEV = 150, .spDefenseEV = 120, .otId = TRAINER_HILL_OTID, @@ -70,15 +74,19 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("キノココ$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [2] = { .species = SPECIES_SANDSHREW, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_SCRATCH, MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SWIFT }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, + .speedEV = 0, + .spAttackEV = 0, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, .hpIV = 5, @@ -90,32 +98,35 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("サンド$$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, - [3] = DUMMY_HILL_MON, - [4] = DUMMY_HILL_MON, - [5] = DUMMY_HILL_MON + [3] = NULL_BATTLE_TOWER_POKEMON, + [4] = NULL_BATTLE_TOWER_POKEMON, + [5] = NULL_BATTLE_TOWER_POKEMON } }, [1] = { .name = __("アカリ$$$$$ "), .facilityClass = FACILITY_CLASS_PARASOL_LADY, - .unused = TRUE, + .unused = 0x1, .speechBefore = { EC_WORD_SHE, EC_WORD_EVERY, EC_WORD_TYPE, EC_WORD_ADORE, EC_WORD_FOR, EC_WORD_EXCL }, .speechWin = { EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_WONDER, EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_EXCL }, .speechLose = { EC_WORD_OH_QUES, EC_MOVE(EARTHQUAKE), EC_WORD_EXISTS, EC_WORD_OF, EC_WORD_WITHOUT, EC_WORD_EXCL }, .speechAfter = { EC_WORD_YOU_RE, EC_WORD_PROBABLY, EC_WORD_END, EC_WORD_UNTIL, EC_WORD_GOING, EC_WORD_ANYWHERE }, .mons = { - [0] = DUMMY_HILL_MON, - [1] = DUMMY_HILL_MON, - [2] = DUMMY_HILL_MON, + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, [3] = { .species = SPECIES_WINGULL, .heldItem = ITEM_CHERI_BERRY, .moves = { MOVE_WATER_GUN, MOVE_WING_ATTACK, MOVE_GROWL, MOVE_SUPERSONIC }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, + .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -128,15 +139,18 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("キャモメ$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [4] = { .species = SPECIES_NUMEL, .heldItem = ITEM_FOCUS_BAND, .moves = { MOVE_EMBER, MOVE_DIG, MOVE_TACKLE, MOVE_FOCUS_ENERGY }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 110, .attackEV = 100, .defenseEV = 100, + .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -149,15 +163,18 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ドンメル$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [5] = { .species = SPECIES_SURSKIT, .heldItem = ITEM_PERSIM_BERRY, .moves = { MOVE_BUBBLE_BEAM, MOVE_MUD_SHOT, MOVE_QUICK_ATTACK, MOVE_AGILITY }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, .attackEV = 100, .defenseEV = 100, + .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -170,17 +187,34 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("アメタマ$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, } }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_jp/floor_0/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_jp/floor_0/collision.bin"), - .trainerCoords = { COORDS_XY(8,2), COORDS_XY(8,7) }, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(2, 3) + .display = { + .metatileData = { + 0x31, 0x35, 0x35, 0x3b, 0x26, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x3b, 0x3b, 0x08, + 0x31, 0x2b, 0x2b, 0x3b, 0x34, 0x34, 0x2b, 0x2b, 0x34, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x3b, 0x08, + 0x31, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x08, + 0x31, 0x2b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x33, 0x3f, 0x3f, 0x3f, 0x3b, 0x3f, 0x08, + 0x31, 0x2b, 0x34, 0x34, 0x34, 0x2b, 0x34, 0x34, 0x3b, 0x2c, 0x3f, 0x3f, 0x3f, 0x3b, 0x3b, 0x08, + 0x31, 0x2b, 0x3b, 0x35, 0x3b, 0x2b, 0x3b, 0x35, 0x3b, 0x35, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x08, + 0x31, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x2b, 0x3b, 0x3f, 0x3f, 0x3f, 0x3b, 0x08, + 0x31, 0x34, 0x3b, 0x2b, 0x3b, 0x34, 0x3b, 0x2b, 0x35, 0x2b, 0x3b, 0x3b, 0x3f, 0x3b, 0x3b, 0x08, + 0x31, 0x3b, 0x3b, 0x34, 0x3b, 0x3b, 0x3b, 0x34, 0x34, 0x34, 0x3f, 0x3b, 0x3b, 0x3b, 0x3f, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = { 0x0381, 0x6fc1, 0x6341, 0x6041, 0x7f41, 0x4401, 0x5541, 0x5541, 0x11c1, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }, + .coords = { COORDS_XY(8,2), COORDS_XY(8,7) }, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .range = TRAINER_RANGE(2, 3) } }, [1] = { @@ -190,7 +224,7 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { [0] = { .name = __("シゲゾウ$$$$ "), .facilityClass = FACILITY_CLASS_NINJA_BOY, - .unused = TRUE, + .unused = 0x1, .speechBefore = { EC_WORD_WIN, EC_WORD_UNTIL, EC_WORD_DAUGHTER, EC_MOVE(CONSTRICT), EC_WORD_OF, EC_WORD_WERE }, .speechWin = { EC_MOVE(CONSTRICT), EC_WORD_UNTIL, EC_WORD_LESS, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_EXCL }, .speechLose = { EC_WORD_YET, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_URGH, EC_WORD_ALMOST, EC_WORD_POWER, EC_WORD_NONE }, @@ -200,10 +234,14 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .species = SPECIES_ELECTRIKE, .heldItem = ITEM_CHERI_BERRY, .moves = { MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 120, .attackEV = 120, + .defenseEV = 0, .speedEV = 120, .spAttackEV = 150, + .spDefenseEV = 0, .otId = TRAINER_HILL_OTID, .hpIV = 5, .attackIV = 5, @@ -214,15 +252,18 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 1, .personality = 0x0, .nickname = __("ラクライ$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [1] = { .species = SPECIES_CORPHISH, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_KNOCK_OFF, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_PROTECT }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, .attackEV = 110, .defenseEV = 100, + .speedEV = 0, .spAttackEV = 100, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -235,15 +276,18 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 1, .personality = 0x96, .nickname = __("ヘイガニ$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [2] = { .species = SPECIES_BALTOY, .heldItem = ITEM_PERSIM_BERRY, .moves = { MOVE_PSYBEAM, MOVE_ROCK_TOMB, MOVE_MUD_SLAP, MOVE_HARDEN }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, .attackEV = 100, .defenseEV = 100, + .speedEV = 0, .spAttackEV = 110, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -256,32 +300,35 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ヤジロン$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, - [3] = DUMMY_HILL_MON, - [4] = DUMMY_HILL_MON, - [5] = DUMMY_HILL_MON, + [3] = NULL_BATTLE_TOWER_POKEMON, + [4] = NULL_BATTLE_TOWER_POKEMON, + [5] = NULL_BATTLE_TOWER_POKEMON, } }, [1] = { .name = __("ナミコ$$$$$ "), .facilityClass = FACILITY_CLASS_BEAUTY, - .unused = TRUE, + .unused = 0x1, .speechBefore = { EC_WORD_SISTER, EC_WORD_ALTHOUGH, EC_WORD_KIND, EC_WORD_MATCH, EC_WORD_PLEASE, EC_WORD_WITHOUT }, .speechWin = { EC_WORD_KIND, EC_WORD_ELLIPSIS, EC_WORD_INSTEAD, EC_WORD_DEEP, EC_WORD_WEAK, EC_WORD_QUES }, .speechLose = { EC_WORD_AWFUL, EC_WORD_GWAH, EC_WORD_HOPELESS, EC_WORD_CAN_T_WIN, EC_WORD_IS, EC_WORD_NONE }, .speechAfter = { EC_WORD_AWW, EC_EMPTY_WORD, EC_EMPTY_WORD, EC_WORD_ALMOST, EC_WORD_GOOD, EC_WORD_ANYWHERE }, .mons = { - [0] = DUMMY_HILL_MON, - [1] = DUMMY_HILL_MON, - [2] = DUMMY_HILL_MON, + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, [3] = { .species = SPECIES_SPHEAL, .heldItem = ITEM_FOCUS_BAND, .moves = { MOVE_ICE_BALL, MOVE_BODY_SLAM, MOVE_WATER_GUN, MOVE_ENCORE }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, .attackEV = 100, .defenseEV = 100, + .speedEV = 0, .spAttackEV = 110, .spDefenseEV = 100, .otId = TRAINER_HILL_OTID, @@ -294,13 +341,16 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("タマザラシ$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [4] = { .species = SPECIES_SPOINK, .heldItem = ITEM_PERSIM_BERRY, .moves = { MOVE_PSYWAVE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_MAGIC_COAT }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, + .attackEV = 0, .defenseEV = 100, .speedEV = 100, .spAttackEV = 110, @@ -315,12 +365,14 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 1, .personality = 0xf, .nickname = __("ãƒ�ãƒ�ブー$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [5] = { .species = SPECIES_POOCHYENA, .heldItem = ITEM_PECHA_BERRY, .moves = { MOVE_BITE, MOVE_POISON_FANG, MOVE_SWAGGER, MOVE_SCARY_FACE }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 70, .attackEV = 80, .defenseEV = 80, @@ -337,22 +389,39 @@ static const struct TrainerHillFloor sFloors_JPDefault[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ãƒ�ãƒ�エナ$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, } }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_jp/floor_1/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_jp/floor_1/collision.bin"), - .trainerCoords = { COORDS_XY(7,6), COORDS_XY(7,10) }, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(3, 3) + .display = { + .metatileData = { + 0x31, 0x3b, 0x35, 0x3b, 0x39, 0x26, 0x1b, 0x1c, 0x1d, 0x25, 0x39, 0x3a, 0x3b, 0x35, 0x3b, 0x08, + 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x08, + 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x08, + 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x08, + 0x3f, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x3b, 0x3e, 0x3e, 0x2b, 0x3b, 0x08, + 0x31, 0x3b, 0x2b, 0x3b, 0x3b, 0x2b, 0x2b, 0x2c, 0x2b, 0x2b, 0x3b, 0x3b, 0x3b, 0x2b, 0x3b, 0x08, + 0x31, 0x3f, 0x2b, 0x3b, 0x3b, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x3e, 0x3e, 0x3b, 0x2b, 0x3b, 0x08, + 0x31, 0x3b, 0x2b, 0x35, 0x35, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x2b, 0x3b, 0x08, + 0x3f, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x3b, 0x08, + 0x31, 0x3b, 0x3f, 0x3f, 0x3b, 0x35, 0x35, 0x3b, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x31, 0x3f, 0x3f, 0x3f, 0x3b, 0x2b, 0x2b, 0x35, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x08, + 0x31, 0x3f, 0x3f, 0x3b, 0x3b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x08, + 0x31, 0x3b, 0x3b, 0x3b, 0x3f, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = { 0x0381, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x27c5, 0x26c5, 0x2005, 0x3efd, 0x1, 0x6ff, 0x7ff, 0x7ff, 0xffff, 0xffff, 0xffff }, + .coords = { COORDS_XY(7,6), COORDS_XY(7,10) }, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .range = TRAINER_RANGE(3, 3) } }, }; -static const struct TrainerHillChallenge sChallenge_Normal = +static const struct TrHillTag sDataTagNormal = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 2, @@ -360,7 +429,7 @@ static const struct TrainerHillChallenge sChallenge_Normal = .checksum = 0x00051E05 }; -static const struct TrainerHillFloor sFloors_Normal[] = +static const struct TrHillFloor sDataTagNormal_Floors[] = { [0] = { @@ -372,6 +441,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("ALAINA"), .facilityClass = FACILITY_CLASS_HEX_MANIAC, + .unused = 0, .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE}, .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME}, .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, EC_EMPTY_WORD}, @@ -383,6 +453,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_MISDREAVUS, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, .attackEV = 155, .speedEV = 255, .spAttackEV = 100, @@ -396,13 +468,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x0, .nickname = _("MISDREAVUS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_SOLROCK, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, .hpEV = 200, .defenseEV = 100, .spAttackEV = 110, @@ -417,13 +491,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xF, .nickname = _("SOLROCK"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_CLAYDOL, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .defenseEV = 135, .spDefenseEV = 120, @@ -437,13 +513,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xC, .nickname = _("CLAYDOL"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_WEEZING, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .attackEV = 200, .spDefenseEV = 200, @@ -464,6 +542,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_LUNATONE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, .hpEV = 200, .defenseEV = 100, .spAttackEV = 110, @@ -478,13 +558,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xF, .nickname = _("LUNATONE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_FLYGON, .heldItem = ITEM_CHOICE_BAND, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, + .level = 0, + .ppBonuses = 0, .attackEV = 155, .speedEV = 255, .spAttackEV = 100, @@ -498,7 +580,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x83, .nickname = _("FLYGON"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -506,6 +588,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("ALFONSO"), .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, EC_EMPTY_WORD}, .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE}, .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT}, @@ -517,6 +600,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_SEALEO, .heldItem = ITEM_NEVER_MELT_ICE, .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -529,13 +614,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xF, .nickname = _("SEALEO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_AMPHAROS, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -548,13 +635,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xF, .nickname = _("AMPHAROS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_MACHOKE, .heldItem = ITEM_BLACK_BELT, .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -567,13 +656,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x4E, .nickname = _("MACHOKE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_FLAREON, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -586,13 +677,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x28, .nickname = _("FLAREON"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_MAGNETON, .heldItem = ITEM_MAGNET, .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -605,13 +698,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x0, .nickname = _("MAGNETON"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_PINSIR, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK}, + .level = 0, + .ppBonuses = 0, .hpEV = 200, .defenseEV = 155, .spDefenseEV = 155, @@ -625,18 +720,35 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x85, .nickname = _("PINSIR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_0/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_0/collision.bin"), - .trainerCoords = {COORDS_XY(11,1), COORDS_XY(13,2)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(2, 1), - } + .display = { + .metatileData = { + 0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x08, + 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x08, + 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x08, + 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x08, + 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x08, + 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x08, + 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x08, + 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x08, + 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x08, + 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x08, + 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x08, + 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x08, + 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, + 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x08, + 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x3FE5, 0x0401, 0xBDED, 0x8425, 0xDFBD, 0x0221, 0x7E7F, 0x0941, 0x7F7D, 0x0911, 0x7FF7, 0x4101, 0x79F9, 0x0803, 0xFFFF}, + .coords = {COORDS_XY(11,1), COORDS_XY(13,2)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_NORTH), + .range = TRAINER_RANGE(2, 1), + } }, [1] = { @@ -648,6 +760,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("THEODORE"), .facilityClass = FACILITY_CLASS_BLACK_BELT, + .unused = 0, .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL}, .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD}, @@ -659,6 +772,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_MEDITITE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -672,13 +787,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x80, .nickname = _("MEDITITE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_HERACROSS, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -692,13 +809,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 1, .personality = 0x80, .nickname = _("HERACROSS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_HITMONTOP, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -712,13 +831,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONTOP"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_MACHOP, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -732,13 +853,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x4E, .nickname = _("MACHOP"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_PINSIR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -752,13 +875,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x80, .nickname = _("PINSIR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_HITMONCHAN, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -772,7 +897,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONCHAN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -780,6 +905,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("JAYDEN"), .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, + .unused = 0, .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE}, .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, EC_EMPTY_WORD}, .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, EC_EMPTY_WORD}, @@ -791,6 +917,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_VULPIX, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -804,13 +932,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xF, .nickname = _("VULPIX"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_MINUN, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spAttackEV = 6, @@ -824,13 +954,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x8C, .nickname = _("MINUN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_ROSELIA, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spAttackEV = 6, @@ -844,13 +976,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 1, .personality = 0xF, .nickname = _("ROSELIA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_MR_MIME, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -864,13 +998,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x82, .nickname = _("MR. MIME"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_PLUSLE, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -884,13 +1020,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x5, .nickname = _("PLUSLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_TOGEPI, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -904,18 +1042,35 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 1, .personality = 0x37, .nickname = _("TOGEPI"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_1/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_1/collision.bin"), - .trainerCoords = {COORDS_XY(4,11), COORDS_XY(9,14)}, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_EAST), - .trainerRanges = TRAINER_RANGE(3, 5), - } + .display = { + .metatileData = { + 0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x08, + 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x08, + 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x08, + 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x08, + 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x08, + 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF}, + .coords = {COORDS_XY(4,11), COORDS_XY(9,14)}, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_EAST), + .range = TRAINER_RANGE(3, 5), + } }, [2] = { @@ -927,6 +1082,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("SALVADORE"), .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, + .unused = 0, .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES}, .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES}, .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND}, @@ -938,6 +1094,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_VAPOREON, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -958,6 +1116,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_DODRIO, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -978,6 +1138,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_OMASTAR, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -991,13 +1153,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x14, .nickname = _("OMASTAR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_LICKITUNG, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1011,13 +1175,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x8, .nickname = _("LICKITUNG"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_SLOWBRO, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1038,6 +1204,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_LINOONE, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -1051,7 +1219,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x8, .nickname = _("LINOONE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -1059,6 +1227,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("VERONICA"), .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, + .unused = 0, .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE}, .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL}, @@ -1070,6 +1239,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_SKITTY, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, + .level = 0, + .ppBonuses = 0, .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, @@ -1082,13 +1253,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xCB, .nickname = _("SKITTY"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_MEDICHAM, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 6, .speedEV = 252, @@ -1109,6 +1282,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_STANTLER, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -1129,6 +1304,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_NIDOQUEEN, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -1149,6 +1326,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_NINETALES, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -1162,13 +1341,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xD7, .nickname = _("NINETALES"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_CHARIZARD, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -1182,18 +1363,35 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x28, .nickname = _("CHARIZARD"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_2/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_2/collision.bin"), - .trainerCoords = {COORDS_XY(5,2), COORDS_XY(9,2)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(3, 3), - } + .display = { + .metatileData = { + 0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x08, + 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x08, + 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x08, + 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x08, + 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x08, + 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x08, + }, + .collisionData = {0x0381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1}, + .coords = {COORDS_XY(5,2), COORDS_XY(9,2)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(3, 3), + } }, [3] = { @@ -1205,6 +1403,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("KEENAN"), .facilityClass = FACILITY_CLASS_PSYCHIC_M, + .unused = 0, .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechWin = {EC_WORD_TOO, EC_WORD_BAD, EC_EMPTY_WORD, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP}, .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES}, @@ -1216,6 +1415,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_ALAKAZAM, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1228,13 +1429,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x41, .nickname = _("ALAKAZAM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_BLISSEY, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, + .level = 0, + .ppBonuses = 0, .defenseEV = 255, .spAttackEV = 155, .spDefenseEV = 100, @@ -1248,13 +1451,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 1, .personality = 0xF, .nickname = _("BLISSEY"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_GRUMPIG, .heldItem = ITEM_TWISTED_SPOON, .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spAttackEV = 200, @@ -1268,13 +1473,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x8C, .nickname = _("GRUMPIG"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_GARDEVOIR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1287,13 +1494,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 1, .personality = 0xF, .nickname = _("GARDEVOIR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_VENOMOTH, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1306,13 +1515,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x80, .nickname = _("VENOMOTH"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_ESPEON, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1325,7 +1536,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0xF, .nickname = _("ESPEON"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -1333,6 +1544,7 @@ static const struct TrainerHillFloor sFloors_Normal[] = { .name = _("KRISTINA"), .facilityClass = FACILITY_CLASS_AROMA_LADY, + .unused = 0, .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH}, .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH}, .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, EC_EMPTY_WORD}, @@ -1344,6 +1556,8 @@ static const struct TrainerHillFloor sFloors_Normal[] = .species = SPECIES_WEEZING, .heldItem = ITEM_POISON_BARB, .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1356,13 +1570,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x3, .nickname = _("WEEZING"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_GLOOM, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1375,13 +1591,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x8C, .nickname = _("GLOOM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_MUK, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -1394,13 +1612,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x3, .nickname = _("MUK"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_TROPIUS, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, .attackEV = 120, .speedEV = 255, .spAttackEV = 135, @@ -1414,13 +1634,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x83, .nickname = _("TROPIUS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_BELLOSSOM, .heldItem = ITEM_MENTAL_HERB, .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1433,13 +1655,15 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x6, .nickname = _("BELLOSSOM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_MEGANIUM, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, + .level = 0, + .ppBonuses = 0, .attackEV = 200, .speedEV = 110, .spAttackEV = 200, @@ -1453,22 +1677,39 @@ static const struct TrainerHillFloor sFloors_Normal[] = .abilityNum = 0, .personality = 0x1F, .nickname = _("MEGANIUM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_normal/floor_3/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_normal/floor_3/collision.bin"), - .trainerCoords = {COORDS_XY(7,4), COORDS_XY(7,10)}, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(3, 3), - } + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, + 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x08, + 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x08, + 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x08, + 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x08, + 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x08, + 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x08, + 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x08, + 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x08, + 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x0401, 0x1, 0x8401, 0x8465, 0x0445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF}, + .coords = {COORDS_XY(7,4), COORDS_XY(7,10)}, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .range = TRAINER_RANGE(3, 3), + } }, }; -static const struct TrainerHillChallenge sChallenge_Variety = +static const struct TrHillTag sDataTagVariety = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 1, @@ -1476,7 +1717,7 @@ static const struct TrainerHillChallenge sChallenge_Variety = .checksum = 0x00054C15 }; -static const struct TrainerHillFloor sFloors_Variety[] = { +static const struct TrHillFloor sDataTagVariety_Floors[] = { [0] = { .trainerNum1 = 41, @@ -1487,6 +1728,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("TERRANCE"), .facilityClass = FACILITY_CLASS_GENTLEMAN, + .unused = 0, .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)}, .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)}, .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, EC_EMPTY_WORD}, @@ -1498,6 +1740,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_DELIBIRD, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1510,13 +1754,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 1, .personality = 0x8A, .nickname = _("DELIBIRD"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_CLEFAIRY, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1529,13 +1775,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("CLEFAIRY"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_PIKACHU, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1548,13 +1796,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("PIKACHU"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_MARILL, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1567,13 +1817,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 1, .personality = 0x8A, .nickname = _("MARILL"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_JIGGLYPUFF, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1586,13 +1838,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("JIGGLYPUFF"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_TOGETIC, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1605,7 +1859,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 1, .personality = 0x26, .nickname = _("TOGETIC"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -1613,6 +1867,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("ELIZABETH"), .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES}, .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK}, .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, EC_EMPTY_WORD}, @@ -1624,6 +1879,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_WIGGLYTUFF, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1636,13 +1893,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xC1, .nickname = _("WIGGLYTUFF"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_SABLEYE, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1655,13 +1914,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x87, .nickname = _("SABLEYE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_GRUMPIG, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1674,13 +1935,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("GRUMPIG"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_CORSOLA, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1693,13 +1956,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x12, .nickname = _("CORSOLA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_CLAMPERL, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1712,13 +1977,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("CLAMPERL"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_STARMIE, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -1731,17 +1998,34 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("STARMIE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_0/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_0/collision.bin"), - .trainerCoords = {COORDS_XY(5,8), COORDS_XY(9,8)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x08, + 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x08, + 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x08, + 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x08, + 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x08, + 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x08, + }, + .collisionData = {0x0381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, + .coords = {COORDS_XY(5,8), COORDS_XY(9,8)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(3, 3), } }, [1] = @@ -1754,6 +2038,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("ANNABELL"), .facilityClass = FACILITY_CLASS_PARASOL_LADY, + .unused = 0, .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES}, .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, EC_EMPTY_WORD}, .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT}, @@ -1765,6 +2050,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_JIGGLYPUFF, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -1781,13 +2068,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("JIGGLYPUFF"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_JYNX, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -1804,13 +2093,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("JYNX"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_EXPLOUD, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -1827,13 +2118,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("EXPLOUD"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_ABSOL, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -1850,13 +2143,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("ABSOL"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_PIDGEOTTO, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -1873,13 +2168,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("PIDGEOTTO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_ALTARIA, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 85, .attackEV = 85, .defenseEV = 85, @@ -1896,7 +2193,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("ALTARIA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -1904,6 +2201,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("COLEMAN"), .facilityClass = FACILITY_CLASS_COLLECTOR, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL}, @@ -1915,6 +2213,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_CHIMECHO, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -1928,13 +2228,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("CHIMECHO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_WHISMUR, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -1948,13 +2250,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("WHISMUR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_YANMA, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -1968,13 +2272,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("YANMA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_ILLUMISE, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -1988,13 +2294,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("ILLUMISE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_SPHEAL, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -2008,13 +2316,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("SPHEAL"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_VIGOROTH, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -2028,17 +2338,34 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x87, .nickname = _("VIGOROTH"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_1/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_1/collision.bin"), - .trainerCoords = {COORDS_XY(3,8), COORDS_XY(11,8)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(7, 7), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x08, + 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x08, + 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x08, + 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x08, + 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x08, + 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x08, + 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x08, + 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x08, + 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x08, + 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x08, + 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x08, + 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x08, + 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x08, + 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {COORDS_XY(3,8), COORDS_XY(11,8)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(7, 7), } }, [2] = @@ -2051,6 +2378,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("ENRIQUE"), .facilityClass = FACILITY_CLASS_RICH_BOY, + .unused = 0, .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME}, .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, EC_EMPTY_WORD, EC_EMPTY_WORD}, .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, EC_EMPTY_WORD}, @@ -2062,6 +2390,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_WOOPER, .heldItem = ITEM_FIGY_BERRY, .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spAttackEV = 252, @@ -2075,13 +2405,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("WOOPER"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_POLIWAG, .heldItem = ITEM_WIKI_BERRY, .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spAttackEV = 252, @@ -2095,13 +2427,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 1, .personality = 0x3, .nickname = _("POLIWAG"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_PSYDUCK, .heldItem = ITEM_AGUAV_BERRY, .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -2115,13 +2449,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("PSYDUCK"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_RHYDON, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -2142,6 +2478,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_RHYHORN, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2162,6 +2500,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_CUBONE, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2183,6 +2523,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("COLLEEN"), .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT}, .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL}, .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS}, @@ -2194,6 +2535,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_MAGNEMITE, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -2207,13 +2550,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("MAGNEMITE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_ELECTABUZZ, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -2227,13 +2572,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x41, .nickname = _("ELECTABUZZ"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_FLAAFFY, .heldItem = ITEM_MAGNET, .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .spAttackEV = 130, .otId = TRAINER_HILL_OTID, @@ -2246,13 +2593,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("FLAAFFY"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_BALTOY, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2273,6 +2622,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_PINECO, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -2293,6 +2644,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_VOLTORB, .heldItem = ITEM_SILK_SCARF, .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -2311,12 +2664,29 @@ static const struct TrainerHillFloor sFloors_Variety[] = { }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_2/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_2/collision.bin"), - .trainerCoords = {COORDS_XY(9,1), COORDS_XY(14,1)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(4, 4), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x08, + 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x08, + 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x08, + }, + .collisionData = {0x0381, 0x0381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, + .coords = {COORDS_XY(9,1), COORDS_XY(14,1)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(4, 4), } }, [3] = @@ -2329,6 +2699,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("KIMBERLY"), .facilityClass = FACILITY_CLASS_POKEFAN_F, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO}, .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES}, .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS}, @@ -2340,6 +2711,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_UNOWN, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2352,13 +2725,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x202, .nickname = _("UNOWN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_UNOWN, .heldItem = ITEM_MYSTIC_WATER, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2371,13 +2746,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x10001, .nickname = _("UNOWN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_UNOWN, .heldItem = ITEM_BLACK_BELT, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2390,13 +2767,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x102, .nickname = _("UNOWN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_SPINDA, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -2410,13 +2789,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x88FE980F, .nickname = _("SPINDA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_PLUSLE, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2429,13 +2810,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("PLUSLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_VOLBEAT, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2448,7 +2831,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("VOLBEAT"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -2456,6 +2839,7 @@ static const struct TrainerHillFloor sFloors_Variety[] = { { .name = _("FRANCISCO"), .facilityClass = FACILITY_CLASS_POKEFAN_M, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, EC_EMPTY_WORD}, .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, EC_EMPTY_WORD}, .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU}, @@ -2467,6 +2851,8 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .species = SPECIES_SPINDA, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -2480,13 +2866,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xE2880098, .nickname = _("SPINDA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_MINUN, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2499,13 +2887,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("MINUN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_ILLUMISE, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2518,13 +2908,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ILLUMISE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_UNOWN, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2537,13 +2929,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x302, .nickname = _("UNOWN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_UNOWN, .heldItem = ITEM_SOFT_SAND, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2556,13 +2950,15 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x203, .nickname = _("UNOWN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_UNOWN, .heldItem = ITEM_TWISTED_SPOON, .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2575,22 +2971,39 @@ static const struct TrainerHillFloor sFloors_Variety[] = { .abilityNum = 0, .personality = 0x301, .nickname = _("UNOWN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_variety/floor_3/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_variety/floor_3/collision.bin"), - .trainerCoords = {COORDS_XY(10,2), COORDS_XY(14,2)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x08, + 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x08, + 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x08, + 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x08, + 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x08, + 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x08, + 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x08, + 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x08, + 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x08, + 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x08, + 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x08, + 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x08, + 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x08, + 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, + .coords = {COORDS_XY(10,2), COORDS_XY(14,2)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(3, 3), } }, }; -static const struct TrainerHillChallenge sChallenge_Unique = +static const struct TrHillTag sDataTagUnique = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 3, @@ -2598,7 +3011,7 @@ static const struct TrainerHillChallenge sChallenge_Unique = .checksum = 0x000652F3 }; -static const struct TrainerHillFloor sFloors_Unique[] = { +static const struct TrHillFloor sDataTagUnique_Floors[] = { [0] = { .trainerNum1 = 49, @@ -2609,6 +3022,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("MEREDITH"), .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_I, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, .speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY}, .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, EC_EMPTY_WORD, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, EC_EMPTY_WORD}, @@ -2620,6 +3034,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_SUNFLORA, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .defenseEV = 155, .spDefenseEV = 100, @@ -2633,13 +3049,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("SUNFLORA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_TANGELA, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spDefenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -2652,13 +3070,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x91, .nickname = _("TANGELA"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_VENUSAUR, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, .hpEV = 100, .attackEV = 110, .defenseEV = 100, @@ -2674,13 +3094,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x1F, .nickname = _("VENUSAUR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_LANTURN, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2693,13 +3115,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("LANTURN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_MANECTRIC, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2712,13 +3136,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("MANECTRIC"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_RAIKOU, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2731,7 +3157,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("RAIKOU"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -2739,6 +3165,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("BERNARD"), .facilityClass = FACILITY_CLASS_KINDLER, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE}, .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES}, .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON}, @@ -2750,6 +3177,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_RELICANTH, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, .hpEV = 155, .defenseEV = 100, .spDefenseEV = 255, @@ -2763,13 +3192,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x2F, .nickname = _("RELICANTH"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_GOLDUCK, .heldItem = ITEM_LAX_INCENSE, .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2782,13 +3213,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("GOLDUCK"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_BLASTOISE, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2801,13 +3234,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x28, .nickname = _("BLASTOISE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_MAGCARGO, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spDefenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -2820,13 +3255,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0x93, .nickname = _("MAGCARGO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_RAPIDASH, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2839,13 +3276,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("RAPIDASH"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_MOLTRES, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -2858,17 +3297,34 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("MOLTRES"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_0/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_0/collision.bin"), - .trainerCoords = {COORDS_XY(4,3), COORDS_XY(7,3)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(2, 2), + .display = { + .metatileData = { + 0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x08, + 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x08, + 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x08, + 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x08, + 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x08, + 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x08, + 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x08, + 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x08, + 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, + .coords = {COORDS_XY(4,3), COORDS_XY(7,3)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(2, 2), } }, [1] = @@ -2881,6 +3337,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("ABRAHAM"), .facilityClass = FACILITY_CLASS_RUIN_MANIAC, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST}, .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS}, .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER}, @@ -2892,6 +3349,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 6, .speedEV = 252, @@ -2905,13 +3364,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("SMEARGLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -2925,13 +3386,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x87, .nickname = _("SMEARGLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 6, .speedEV = 252, @@ -2945,13 +3408,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("SMEARGLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -2965,13 +3430,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("SMEARGLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -2985,13 +3452,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("SMEARGLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_SMEARGLE, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -3005,7 +3474,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("SMEARGLE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -3013,6 +3482,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("LUC"), .facilityClass = FACILITY_CLASS_TUBER_M, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE}, .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES}, .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES}, @@ -3024,6 +3494,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_STARYU, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3037,13 +3509,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0xA, .nickname = _("STARYU"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_MEOWTH, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3057,13 +3531,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xD, .nickname = _("MEOWTH"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_BLAZIKEN, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -3077,13 +3553,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x28, .nickname = _("BLAZIKEN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_CUBONE, .heldItem = ITEM_THICK_CLUB, .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .spDefenseEV = 252, @@ -3097,13 +3575,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0x16, .nickname = _("CUBONE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_BEEDRILL, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, @@ -3116,13 +3596,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x8A, .nickname = _("BEEDRILL"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_RATICATE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -3136,17 +3618,34 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0xD, .nickname = _("RATICATE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_1/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_1/collision.bin"), - .trainerCoords = {COORDS_XY(9,6), COORDS_XY(13,6)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, + 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x08, + 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x08, + 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x08, + 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x08, + 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x08, + 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x08, + 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x08, + 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x08, + 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x08, + 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x08, + 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x08, + 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x08, + 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x7C1, 0x8AA1, 0x0209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, + .coords = {COORDS_XY(9,6), COORDS_XY(13,6)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(3, 3), } }, [2] = @@ -3159,6 +3658,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("BREYDEN"), .facilityClass = FACILITY_CLASS_YOUNGSTER, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT}, .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL}, .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN}, @@ -3170,6 +3670,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_CHARMELEON, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -3190,6 +3692,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_WARTORTLE, .heldItem = ITEM_MYSTIC_WATER, .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .otId = TRAINER_HILL_OTID, @@ -3209,6 +3713,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_IVYSAUR, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spAttackEV = 252, @@ -3229,6 +3735,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_BAYLEEF, .heldItem = ITEM_MIRACLE_SEED, .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .attackEV = 130, .spAttackEV = 130, @@ -3249,6 +3757,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_CROCONAW, .heldItem = ITEM_MYSTIC_WATER, .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .speedEV = 6, @@ -3269,6 +3779,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_QUILAVA, .heldItem = ITEM_CHARCOAL, .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3290,6 +3802,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("ANIYA"), .facilityClass = FACILITY_CLASS_TUBER_F, + .unused = 0, .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG}, .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL}, .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL}, @@ -3301,6 +3814,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_SMOOCHUM, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3321,6 +3836,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_AZURILL, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3341,6 +3858,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_ELEKID, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3361,6 +3880,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_CLEFFA, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -3381,6 +3902,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_WYNAUT, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -3401,6 +3924,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_MAGBY, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3419,12 +3944,29 @@ static const struct TrainerHillFloor sFloors_Unique[] = { }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_2/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_2/collision.bin"), - .trainerCoords = {COORDS_XY(6,9), COORDS_XY(8,9)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(1, 1), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x08, + 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x08, + 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, + 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x08, + 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x08, + 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x08, + 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, + 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x08, + 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x08, + 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x08, + 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, + 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x08, + 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x08, + 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, + .coords = {COORDS_XY(6,9), COORDS_XY(8,9)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(1, 1), } }, [3] = @@ -3437,6 +3979,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("DANE"), .facilityClass = FACILITY_CLASS_BIRD_KEEPER, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION}, .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE}, .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL}, @@ -3448,6 +3991,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_SUDOWOODO, .heldItem = ITEM_SITRUS_BERRY, .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, .hpEV = 100, .attackEV = 255, .spDefenseEV = 155, @@ -3461,13 +4006,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("SUDOWOODO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_SLOWKING, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .defenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -3480,13 +4027,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0x8C, .nickname = _("SLOWKING"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_ENTEI, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3499,13 +4048,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ENTEI"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_HITMONCHAN, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -3518,13 +4069,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONCHAN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_MANTINE, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .defenseEV = 255, .otId = TRAINER_HILL_OTID, @@ -3537,13 +4090,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0x6, .nickname = _("MANTINE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_ZAPDOS, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3556,7 +4111,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x18, .nickname = _("ZAPDOS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -3564,6 +4119,7 @@ static const struct TrainerHillFloor sFloors_Unique[] = { { .name = _("STEPHANIE"), .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, + .unused = 0, .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL}, .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES}, .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT}, @@ -3575,6 +4131,8 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .species = SPECIES_HITMONLEE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3587,13 +4145,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONLEE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_PORYGON2, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3606,13 +4166,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("PORYGON2"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_SUICUNE, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3625,13 +4187,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("SUICUNE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_HOUNDOOM, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3644,13 +4208,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("HOUNDOOM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_STANTLER, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -3663,13 +4229,15 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("STANTLER"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_ARTICUNO, .heldItem = ITEM_NEVER_MELT_ICE, .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -3682,22 +4250,39 @@ static const struct TrainerHillFloor sFloors_Unique[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ARTICUNO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_unique/floor_3/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_unique/floor_3/collision.bin"), - .trainerCoords = {COORDS_XY(8,2), COORDS_XY(11,5)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x08, + 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x08, + 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, + 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x08, + 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x08, + 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, + 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, + 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x08, + 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x08, + 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, + 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, + .coords = {COORDS_XY(8,2), COORDS_XY(11,5)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_NORTH), + .range = TRAINER_RANGE(3, 3), } }, }; -static const struct TrainerHillChallenge sChallenge_Expert = +static const struct TrHillTag sDataTagExpert = { .numTrainers = NUM_TRAINER_HILL_TRAINERS, .unused1 = 1, @@ -3705,7 +4290,7 @@ static const struct TrainerHillChallenge sChallenge_Expert = .checksum = 0x00061F3F }; -static const struct TrainerHillFloor sFloors_Expert[] = { +static const struct TrHillFloor sDataTagExpert_Floors[] = { [0] = { .trainerNum1 = 57, @@ -3716,6 +4301,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("ALFRED"), .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE}, .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL}, .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS}, @@ -3727,6 +4313,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_SNORLAX, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .defenseEV = 252, @@ -3740,13 +4328,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x35, .nickname = _("SNORLAX"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_MILTANK, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -3760,13 +4350,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("MILTANK"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_URSARING, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spAttackEV = 6, @@ -3780,13 +4372,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x7F, .nickname = _("URSARING"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_SLAKING, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .spDefenseEV = 252, @@ -3800,13 +4394,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("SLAKING"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_KANGASKHAN, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -3820,13 +4416,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("KANGASKHAN"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_ZANGOOSE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -3840,7 +4438,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("ZANGOOSE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -3848,6 +4446,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("EDIE"), .facilityClass = FACILITY_CLASS_PSYCHIC_F, + .unused = 0, .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE}, .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL}, .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO}, @@ -3859,6 +4458,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_SLOWKING, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, .hpEV = 200, .defenseEV = 110, .spAttackEV = 200, @@ -3872,13 +4473,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("SLOWKING"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_ESPEON, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3892,13 +4495,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x28, .nickname = _("ESPEON"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_STARMIE, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3912,13 +4517,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 1, .personality = 0xF, .nickname = _("STARMIE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_GENGAR, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3932,13 +4539,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("GENGAR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_GARDEVOIR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3952,13 +4561,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("GARDEVOIR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_ALAKAZAM, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -3972,17 +4583,34 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("ALAKAZAM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_0/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_0/collision.bin"), - .trainerCoords = {COORDS_XY(4,7), COORDS_XY(10,7)}, - .trainerDirections = TRAINER_DIRS(DIR_WEST, DIR_EAST), - .trainerRanges = TRAINER_RANGE(5, 5), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x08, + 0x31, 0x3B, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3B, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3B, 0x3B, 0x08, + 0x69, 0x73, 0x08, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x08, 0x69, 0x73, 0x08, + 0x40, 0x3B, 0x08, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x08, 0x31, 0x41, 0x08, + 0x69, 0x41, 0x08, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x08, 0x41, 0x73, 0x08, + 0x69, 0x3B, 0x08, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x08, 0x31, 0x73, 0x08, + 0x69, 0x3B, 0x08, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x08, 0x31, 0x73, 0x08, + 0x69, 0x3B, 0x08, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x08, 0x31, 0x73, 0x08, + 0x69, 0x41, 0x08, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x08, 0x41, 0x73, 0x08, + 0x40, 0x3B, 0x08, 0x08, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x08, 0x08, 0x31, 0x41, 0x08, + 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x08, + 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x08, + 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x08, + 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x0201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, + .coords = {COORDS_XY(4,7), COORDS_XY(10,7)}, + .direction = TRAINER_DIRS(DIR_WEST, DIR_EAST), + .range = TRAINER_RANGE(5, 5), } }, [1] = @@ -3995,6 +4623,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("RODERICK"), .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)}, .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN}, .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS}, @@ -4006,6 +4635,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_SWELLOW, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4019,13 +4650,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("SWELLOW"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_MACHAMP, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4039,13 +4672,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("MACHAMP"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_URSARING, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4059,13 +4694,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("URSARING"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_KINGLER, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4079,13 +4716,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("KINGLER"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_TYRANITAR, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .defenseEV = 6, @@ -4099,13 +4738,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("TYRANITAR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_DRAGONITE, .heldItem = ITEM_PERSIM_BERRY, .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .attackEV = 252, .spDefenseEV = 6, @@ -4119,7 +4760,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x80, .nickname = _("DRAGONITE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -4127,6 +4768,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("ALICIA"), .facilityClass = FACILITY_CLASS_COOLTRAINER_F, + .unused = 0, .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL}, .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU}, .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL}, @@ -4138,6 +4780,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_JOLTEON, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4151,13 +4795,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("JOLTEON"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_ALAKAZAM, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4171,13 +4817,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xA, .nickname = _("ALAKAZAM"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_STARMIE, .heldItem = ITEM_SCOPE_LENS, .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4191,13 +4839,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 1, .personality = 0xA, .nickname = _("STARMIE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_DUSCLOPS, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -4211,13 +4861,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x82, .nickname = _("DUSCLOPS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_NINETALES, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .speedEV = 252, .spAttackEV = 252, @@ -4231,13 +4883,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xD2, .nickname = _("NINETALES"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_BANETTE, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spDefenseEV = 6, @@ -4251,17 +4905,34 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x85, .nickname = _("BANETTE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_1/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_1/collision.bin"), - .trainerCoords = {COORDS_XY(7,10), COORDS_XY(7,14)}, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x08, + 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x08, + 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, + 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x08, + 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x08, + 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x08, + 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x08, + 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x08, + 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x08, + 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x08, + 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x08, + 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x08, + 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x08, + 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + }, + .collisionData = {0x0381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {COORDS_XY(7,10), COORDS_XY(7,14)}, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .range = TRAINER_RANGE(3, 3), } }, [2] = @@ -4274,6 +4945,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("TERRENCE"), .facilityClass = FACILITY_CLASS_EXPERT_M, + .unused = 0, .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU}, .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_EMPTY_WORD, EC_EMPTY_WORD}, @@ -4285,6 +4957,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_WOBBUFFET, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -4298,13 +4972,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x94, .nickname = _("WOBBUFFET"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_EXPLOUD, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -4325,6 +5001,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_CROBAT, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -4338,13 +5016,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x0, .nickname = _("CROBAT"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_DUGTRIO, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, .hpEV = 6, .attackEV = 252, .speedEV = 252, @@ -4358,13 +5038,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 1, .personality = 0xD, .nickname = _("DUGTRIO"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_ELECTRODE, .heldItem = ITEM_PETAYA_BERRY, .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 252, .spAttackEV = 6, @@ -4385,6 +5067,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_GENGAR, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spDefenseEV = 6, @@ -4398,7 +5082,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x14, .nickname = _("GENGAR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -4406,6 +5090,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("CARLOTTA"), .facilityClass = FACILITY_CLASS_EXPERT_F, + .unused = 0, .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU}, .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER}, .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU}, @@ -4417,6 +5102,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_LAPRAS, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, + .level = 0, + .ppBonuses = 0, .hpEV = 250, .defenseEV = 130, .spDefenseEV = 130, @@ -4437,6 +5124,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_ABSOL, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .defenseEV = 6, .speedEV = 252, @@ -4457,6 +5146,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_ALTARIA, .heldItem = ITEM_KINGS_ROCK, .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .spAttackEV = 6, .spDefenseEV = 252, @@ -4477,6 +5168,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_DEWGONG, .heldItem = ITEM_CHESTO_BERRY, .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 252, .spAttackEV = 6, @@ -4497,6 +5190,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_POLITOED, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .spAttackEV = 6, .spDefenseEV = 252, @@ -4517,6 +5212,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_MAROWAK, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, .hpEV = 252, .speedEV = 6, .spDefenseEV = 252, @@ -4535,12 +5232,29 @@ static const struct TrainerHillFloor sFloors_Expert[] = { }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_2/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_2/collision.bin"), - .trainerCoords = {COORDS_XY(7,6), COORDS_XY(7,10)}, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x08, + 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x08, + 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, + 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, + 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, + 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x08, + 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x08, + 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, + 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x08, + }, + .collisionData = {0x0381, 0x0201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, + .coords = {COORDS_XY(7,6), COORDS_XY(7,10)}, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .range = TRAINER_RANGE(3, 3), } }, [3] = @@ -4553,6 +5267,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("NORA"), .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL}, .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON}, .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST}, @@ -4564,6 +5279,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_FORRETRESS, .heldItem = ITEM_QUICK_CLAW, .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .attackEV = 200, .spDefenseEV = 200, @@ -4577,13 +5294,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("FORRETRESS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_ELECTRODE, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4596,13 +5315,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 1, .personality = 0xC, .nickname = _("ELECTRODE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_EXEGGUTOR, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4615,13 +5336,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x7F, .nickname = _("EXEGGUTOR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_DUSCLOPS, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -4635,13 +5358,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x93, .nickname = _("DUSCLOPS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_NINETALES, .heldItem = ITEM_WHITE_HERB, .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4654,13 +5379,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0xF, .nickname = _("NINETALES"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_BANETTE, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4673,7 +5400,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x96, .nickname = _("BANETTE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, @@ -4681,6 +5408,7 @@ static const struct TrainerHillFloor sFloors_Expert[] = { { .name = _("GAV"), .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, + .unused = 0, .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL}, .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, EC_EMPTY_WORD, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL}, .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL}, @@ -4692,6 +5420,8 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .species = SPECIES_SALAMENCE, .heldItem = ITEM_SHELL_BELL, .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4704,13 +5434,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x95, .nickname = _("SALAMENCE"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [1] = { .species = SPECIES_GENGAR, .heldItem = ITEM_LUM_BERRY, .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, @@ -4723,13 +5455,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x8C, .nickname = _("GENGAR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [2] = { .species = SPECIES_GYARADOS, .heldItem = ITEM_BRIGHT_POWDER, .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -4742,13 +5476,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("GYARADOS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [3] = { .species = SPECIES_GENGAR, .heldItem = ITEM_SALAC_BERRY, .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, @@ -4761,13 +5497,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x3, .nickname = _("GENGAR"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [4] = { .species = SPECIES_DUSCLOPS, .heldItem = ITEM_LEFTOVERS, .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, .hpEV = 110, .defenseEV = 200, .spDefenseEV = 200, @@ -4781,13 +5519,15 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x14, .nickname = _("DUSCLOPS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, [5] = { .species = SPECIES_MISDREAVUS, .heldItem = ITEM_FOCUS_BAND, .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, .hpEV = 180, .defenseEV = 180, .spDefenseEV = 150, @@ -4801,17 +5541,34 @@ static const struct TrainerHillFloor sFloors_Expert[] = { .abilityNum = 0, .personality = 0x85, .nickname = _("MISDREAVUS"), - .friendship = MAX_FRIENDSHIP, + .friendship = 255, }, }, }, }, - .map = { - .metatileData = INCBIN_U8("graphics/trainer_hill/maps_expert/floor_3/metatiles.bin"), - .collisionData = INCBIN_U16("graphics/trainer_hill/maps_expert/floor_3/collision.bin"), - .trainerCoords = {COORDS_XY(7,6), COORDS_XY(7,10)}, - .trainerDirections = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), - .trainerRanges = TRAINER_RANGE(3, 3), + .display = { + .metatileData = { + 0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x08, + 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x08, + 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x08, + 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x08, + 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x08, + 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x08, + 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x08, + 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x08, + 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x08, + 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x08, + 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x08, + 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x08, + 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x08, + 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x08, + 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x08, + 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x08, + }, + .collisionData = {0x0381, 0x0101, 0x0101, 0x6C1, 0x0821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x0821, 0x6C1, 0x0101, 0x101}, + .coords = {COORDS_XY(7,6), COORDS_XY(7,10)}, + .direction = TRAINER_DIRS(DIR_SOUTH, DIR_NORTH), + .range = TRAINER_RANGE(3, 3), } }, }; diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index 41d6271bf..5e7b2a1f8 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -35,6 +35,9 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch; const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles; const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle; const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza; +const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks; +const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks; +const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks; const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall, @@ -74,4 +77,7 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles, [FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle, [FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza, + [FLDEFFOBJ_TRACKS_SLITHER] = &gFieldEffectObjectTemplate_SlitherTracks, + [FLDEFFOBJ_TRACKS_SPOT] = &gFieldEffectObjectTemplate_SpotTracks, + [FLDEFFOBJ_TRACKS_BUG] = &gFieldEffectObjectTemplate_BugTracks, }; diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index f9918c160..cf547a5d8 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -431,6 +431,36 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { .callback = UpdateFootprintsTireTracksFieldEffect, }; +static const struct SpriteFrameImage sPicTable_BugTracks[] = { + overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 1), +}; + +static const struct SpriteFrameImage sPicTable_SpotTracks[] = { + overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 1), +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_BugTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_SpotTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; + static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 1), @@ -509,6 +539,23 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { .callback = UpdateFootprintsTireTracksFieldEffect, }; +static const struct SpriteFrameImage sPicTable_SlitherTracks[] = { + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 3), +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_BikeTireTracks, + .images = sPicTable_SlitherTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; + static const struct SpriteFrameImage sPicTable_JumpBigSplash[] = { overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 1), @@ -1272,7 +1319,7 @@ static const union AnimCmd *const sAnimTable_RayquazaSpotlightEffect[] = { sAnim_RayquazaSpotlightEffect, }; -static const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = { +const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = { overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0), }; diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h old mode 100644 new mode 100755 diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h index f5189d838..8d0956f48 100755 --- a/src/data/object_events/movement_type_func_tables.h +++ b/src/data/object_events/movement_type_func_tables.h @@ -24,6 +24,13 @@ u8 (*const gGetVectorDirectionFuncs[])(s16, s16, s16, s16) = { GetLimitedVectorDirection_SouthWestEast, }; +u8 (*const gMovementTypeFuncs_FollowingPokemon[])(struct ObjectEvent *, struct Sprite *) = { + MovementType_FollowingPokemon_Step0, + MovementType_FollowingPokemon_Step1, + MovementType_FollowingPokemon_Step2, + MovementType_FollowingPokemon_Step3, +}; + u8 (*const gMovementTypeFuncs_LookAround[])(struct ObjectEvent *, struct Sprite *) = { MovementType_LookAround_Step0, MovementType_LookAround_Step1, diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h old mode 100644 new mode 100755 diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h old mode 100644 new mode 100755 index 7455ecdfd..f05510ff8 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -363,6 +363,9 @@ const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effect const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_effects/pics/sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp"); +const u32 gFieldEffectObjectPic_SlitherTracks[] = INCBIN_U32("graphics/field_effects/pics/slither_tracks.4bpp"); +const u32 gFieldEffectObjectPic_SpotTracks[] = INCBIN_U32("graphics/field_effects/pics/spot_tracks.4bpp"); +const u32 gFieldEffectObjectPic_BugTracks[] = INCBIN_U32("graphics/field_effects/pics/bug_tracks.4bpp"); const u32 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U32("graphics/field_effects/pics/unused_sand.4bpp"); const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp"); const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_big_splash.4bpp"); diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h old mode 100644 new mode 100755 diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h old mode 100644 new mode 100755 index 855f9a112..1214eaec2 --- a/src/data/object_events/object_event_graphics_info_pointers.h +++ b/src/data/object_events/object_event_graphics_info_pointers.h @@ -978,7 +978,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_FEAROW] = &gObjectEventGraphicsInfo_Fearow, [OBJ_EVENT_GFX_EKANS] = &gObjectEventGraphicsInfo_Ekans, [OBJ_EVENT_GFX_ARBOK] = &gObjectEventGraphicsInfo_Arbok, - [OBJ_EVENT_GFX_PIKACHU_FOLLOWER] = &gObjectEventGraphicsInfo_Pikachu_Follower, + [OBJ_EVENT_GFX_PIKACHU_FOLLOWER] = &gObjectEventGraphicsInfo_Pikachu_Follower, [OBJ_EVENT_GFX_RAICHU] = &gObjectEventGraphicsInfo_Raichu, [OBJ_EVENT_GFX_SANDSHREW] = &gObjectEventGraphicsInfo_Sandshrew, [OBJ_EVENT_GFX_SANDSLASH] = &gObjectEventGraphicsInfo_Sandslash, diff --git a/src/data/object_events/object_event_pic_tables.h b/src/data/object_events/object_event_pic_tables.h index 2fb8f28ac..567639606 100755 --- a/src/data/object_events/object_event_pic_tables.h +++ b/src/data/object_events/object_event_pic_tables.h @@ -2281,3 +2281,3767 @@ static const struct SpriteFrameImage sPicTable_RubySapphireMay[] = { overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 7), overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 8), }; + +const struct SpriteFrameImage gObjectEventPicTable_Bulbasaur[] = { + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 0), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 1), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 2), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 3), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 4), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ivysaur[] = { + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 0), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 1), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 2), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 3), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 4), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Venusaur[] = { + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 0), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 1), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 2), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 3), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 4), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Charmander[] = { + overworld_frame(gObjectEventPic_Charmander, 4, 4, 0), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 1), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 2), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 3), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 4), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Charmeleon[] = { + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 0), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 1), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 2), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 3), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 4), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Charizard[] = { + overworld_frame(gObjectEventPic_Charizard, 4, 4, 0), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 1), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 2), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 3), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 4), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Squirtle[] = { + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 0), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 1), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 2), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 3), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 4), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wartortle[] = { + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 0), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 1), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 2), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 3), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 4), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Blastoise[] = { + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 0), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 1), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 2), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 3), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 4), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Caterpie[] = { + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 0), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 1), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 2), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 3), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 4), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Metapod[] = { + overworld_frame(gObjectEventPic_Metapod, 4, 4, 0), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 1), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 2), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 3), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 4), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Butterfree[] = { + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 0), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 1), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 2), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 3), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 4), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Weedle[] = { + overworld_frame(gObjectEventPic_Weedle, 4, 4, 0), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 1), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 2), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 3), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 4), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kakuna[] = { + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 0), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 1), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 2), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 3), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 4), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Beedrill[] = { + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 0), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 1), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 2), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 3), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 4), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pidgey[] = { + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 0), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 1), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 2), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 3), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 4), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pidgeotto[] = { + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 0), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 1), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 2), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 3), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 4), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pidgeot[] = { + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 0), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 1), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 2), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 3), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 4), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rattata[] = { + overworld_frame(gObjectEventPic_Rattata, 4, 4, 0), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 1), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 2), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 3), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 4), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Raticate[] = { + overworld_frame(gObjectEventPic_Raticate, 4, 4, 0), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 1), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 2), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 3), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 4), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Spearow[] = { + overworld_frame(gObjectEventPic_Spearow, 4, 4, 0), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 1), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 2), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 3), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 4), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Fearow[] = { + overworld_frame(gObjectEventPic_Fearow, 4, 4, 0), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 1), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 2), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 3), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 4), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ekans[] = { + overworld_frame(gObjectEventPic_Ekans, 4, 4, 0), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 1), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 2), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 3), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 4), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Arbok[] = { + overworld_frame(gObjectEventPic_Arbok, 4, 4, 0), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 1), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 2), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 3), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 4), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pikachu_Follow[] = { + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 0), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 1), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 2), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 3), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 4), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Raichu[] = { + overworld_frame(gObjectEventPic_Raichu, 4, 4, 0), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 1), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 2), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 3), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 4), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sandshrew[] = { + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 0), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 1), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 2), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 3), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 4), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sandslash[] = { + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 0), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 1), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 2), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 3), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 4), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoran_F[] = { + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidorina[] = { + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoqueen[] = { + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoran_M[] = { + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidorino[] = { + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoking[] = { + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Clefairy[] = { + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 0), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 1), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 2), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 3), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 4), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Clefable[] = { + overworld_frame(gObjectEventPic_Clefable, 4, 4, 0), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 1), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 2), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 3), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 4), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vulpix[] = { + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 0), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 1), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 2), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 3), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 4), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ninetales[] = { + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 0), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 1), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 2), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 3), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 4), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jigglypuff[] = { + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 0), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 1), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 2), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 3), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 4), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wigglytuff[] = { + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 0), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 1), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 2), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 3), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 4), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Zubat[] = { + overworld_frame(gObjectEventPic_Zubat, 4, 4, 0), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 1), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 2), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 3), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 4), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Golbat[] = { + overworld_frame(gObjectEventPic_Golbat, 4, 4, 0), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 1), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 2), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 3), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 4), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Oddish[] = { + overworld_frame(gObjectEventPic_Oddish, 4, 4, 0), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 1), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 2), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 3), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 4), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gloom[] = { + overworld_frame(gObjectEventPic_Gloom, 4, 4, 0), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 1), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 2), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 3), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 4), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vileplume[] = { + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 0), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 1), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 2), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 3), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 4), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Paras[] = { + overworld_frame(gObjectEventPic_Paras, 4, 4, 0), + overworld_frame(gObjectEventPic_Paras, 4, 4, 1), + overworld_frame(gObjectEventPic_Paras, 4, 4, 2), + overworld_frame(gObjectEventPic_Paras, 4, 4, 3), + overworld_frame(gObjectEventPic_Paras, 4, 4, 4), + overworld_frame(gObjectEventPic_Paras, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Parasect[] = { + overworld_frame(gObjectEventPic_Parasect, 4, 4, 0), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 1), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 2), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 3), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 4), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Venonat[] = { + overworld_frame(gObjectEventPic_Venonat, 4, 4, 0), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 1), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 2), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 3), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 4), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Venomoth[] = { + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 0), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 1), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 2), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 3), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 4), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Diglett[] = { + overworld_frame(gObjectEventPic_Diglett, 4, 4, 0), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 1), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 2), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 3), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 4), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dugtrio[] = { + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 0), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 1), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 2), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 3), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 4), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Meowth[] = { + overworld_frame(gObjectEventPic_Meowth, 4, 4, 0), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 1), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 2), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 3), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 4), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Persian[] = { + overworld_frame(gObjectEventPic_Persian, 4, 4, 0), + overworld_frame(gObjectEventPic_Persian, 4, 4, 1), + overworld_frame(gObjectEventPic_Persian, 4, 4, 2), + overworld_frame(gObjectEventPic_Persian, 4, 4, 3), + overworld_frame(gObjectEventPic_Persian, 4, 4, 4), + overworld_frame(gObjectEventPic_Persian, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Psyduck[] = { + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 0), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 1), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 2), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 3), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 4), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Golduck[] = { + overworld_frame(gObjectEventPic_Golduck, 4, 4, 0), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 1), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 2), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 3), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 4), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mankey[] = { + overworld_frame(gObjectEventPic_Mankey, 4, 4, 0), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 1), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 2), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 3), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 4), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Primeape[] = { + overworld_frame(gObjectEventPic_Primeape, 4, 4, 0), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 1), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 2), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 3), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 4), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Growlithe[] = { + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 0), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 1), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 2), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 3), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 4), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Arcanine[] = { + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 0), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 1), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 2), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 3), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 4), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poliwag[] = { + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 0), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 1), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 2), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 3), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 4), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poliwhirl[] = { + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 0), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 1), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 2), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 3), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 4), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poliwrath[] = { + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 0), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 1), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 2), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 3), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 4), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Abra[] = { + overworld_frame(gObjectEventPic_Abra, 4, 4, 0), + overworld_frame(gObjectEventPic_Abra, 4, 4, 1), + overworld_frame(gObjectEventPic_Abra, 4, 4, 2), + overworld_frame(gObjectEventPic_Abra, 4, 4, 3), + overworld_frame(gObjectEventPic_Abra, 4, 4, 4), + overworld_frame(gObjectEventPic_Abra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kadabra[] = { + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 0), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 1), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 2), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 3), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 4), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Alakazam[] = { + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 0), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 1), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 2), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 3), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 4), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Machop[] = { + overworld_frame(gObjectEventPic_Machop, 4, 4, 0), + overworld_frame(gObjectEventPic_Machop, 4, 4, 1), + overworld_frame(gObjectEventPic_Machop, 4, 4, 2), + overworld_frame(gObjectEventPic_Machop, 4, 4, 3), + overworld_frame(gObjectEventPic_Machop, 4, 4, 4), + overworld_frame(gObjectEventPic_Machop, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Machoke[] = { + overworld_frame(gObjectEventPic_Machoke, 4, 4, 0), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 1), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 2), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 3), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 4), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Machamp[] = { + overworld_frame(gObjectEventPic_Machamp, 4, 4, 0), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 1), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 2), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 3), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 4), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Bellsprout[] = { + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 0), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 1), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 2), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 3), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 4), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Weepinbell[] = { + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 0), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 1), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 2), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 3), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 4), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Victreebel[] = { + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 0), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 1), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 2), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 3), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 4), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tentacool[] = { + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 0), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 1), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 2), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 3), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 4), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tentacruel[] = { + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 0), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 1), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 2), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 3), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 4), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Geodude[] = { + overworld_frame(gObjectEventPic_Geodude, 4, 4, 0), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 1), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 2), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 3), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 4), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Graveler[] = { + overworld_frame(gObjectEventPic_Graveler, 4, 4, 0), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 1), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 2), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 3), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 4), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Golem[] = { + overworld_frame(gObjectEventPic_Golem, 4, 4, 0), + overworld_frame(gObjectEventPic_Golem, 4, 4, 1), + overworld_frame(gObjectEventPic_Golem, 4, 4, 2), + overworld_frame(gObjectEventPic_Golem, 4, 4, 3), + overworld_frame(gObjectEventPic_Golem, 4, 4, 4), + overworld_frame(gObjectEventPic_Golem, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ponyta[] = { + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 0), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 1), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 2), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 3), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 4), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rapidash[] = { + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 0), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 1), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 2), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 3), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 4), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slowpoke[] = { + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 0), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 1), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 2), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 3), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 4), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slowbro[] = { + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 0), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 1), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 2), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 3), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 4), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magnemite[] = { + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 0), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 1), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 2), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 3), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 4), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magneton[] = { + overworld_frame(gObjectEventPic_Magneton, 4, 4, 0), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 1), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 2), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 3), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 4), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Farfetchd[] = { + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 0), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 1), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 2), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 3), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 4), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 5), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 6), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Doduo[] = { + overworld_frame(gObjectEventPic_Doduo, 4, 4, 0), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 1), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 2), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 3), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 4), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dodrio[] = { + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 0), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 1), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 2), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 3), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 4), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seel[] = { + overworld_frame(gObjectEventPic_Seel, 4, 4, 0), + overworld_frame(gObjectEventPic_Seel, 4, 4, 1), + overworld_frame(gObjectEventPic_Seel, 4, 4, 2), + overworld_frame(gObjectEventPic_Seel, 4, 4, 3), + overworld_frame(gObjectEventPic_Seel, 4, 4, 4), + overworld_frame(gObjectEventPic_Seel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dewgong[] = { + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 0), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 1), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 2), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 3), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 4), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Grimer[] = { + overworld_frame(gObjectEventPic_Grimer, 4, 4, 0), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 1), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 2), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 3), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 4), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Muk[] = { + overworld_frame(gObjectEventPic_Muk, 4, 4, 0), + overworld_frame(gObjectEventPic_Muk, 4, 4, 1), + overworld_frame(gObjectEventPic_Muk, 4, 4, 2), + overworld_frame(gObjectEventPic_Muk, 4, 4, 3), + overworld_frame(gObjectEventPic_Muk, 4, 4, 4), + overworld_frame(gObjectEventPic_Muk, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shellder[] = { + overworld_frame(gObjectEventPic_Shellder, 4, 4, 0), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 1), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 2), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 3), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 4), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cloyster[] = { + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 0), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 1), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 2), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 3), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 4), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gastly[] = { + overworld_frame(gObjectEventPic_Gastly, 4, 4, 0), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 1), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 2), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 3), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 4), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Haunter[] = { + overworld_frame(gObjectEventPic_Haunter, 4, 4, 0), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 1), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 2), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 3), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 4), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gengar[] = { + overworld_frame(gObjectEventPic_Gengar, 4, 4, 0), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 1), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 2), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 3), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 4), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Onix[] = { + overworld_frame(gObjectEventPic_Onix, 4, 4, 0), + overworld_frame(gObjectEventPic_Onix, 4, 4, 1), + overworld_frame(gObjectEventPic_Onix, 4, 4, 2), + overworld_frame(gObjectEventPic_Onix, 4, 4, 3), + overworld_frame(gObjectEventPic_Onix, 4, 4, 4), + overworld_frame(gObjectEventPic_Onix, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Drowzee[] = { + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 0), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 1), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 2), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 3), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 4), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hypno[] = { + overworld_frame(gObjectEventPic_Hypno, 4, 4, 0), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 1), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 2), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 3), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 4), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Krabby[] = { + overworld_frame(gObjectEventPic_Krabby, 4, 4, 0), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 1), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 2), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 3), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 4), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kingler[] = { + overworld_frame(gObjectEventPic_Kingler, 4, 4, 0), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 1), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 2), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 3), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 4), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 5), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 6), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Voltorb[] = { + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 0), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 1), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 2), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 3), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 4), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Electrode[] = { + overworld_frame(gObjectEventPic_Electrode, 4, 4, 0), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 1), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 2), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 3), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 4), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Exeggcute[] = { + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 0), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 1), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 2), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 3), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 4), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Exeggutor[] = { + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 0), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 1), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 2), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 3), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 4), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cubone[] = { + overworld_frame(gObjectEventPic_Cubone, 4, 4, 0), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 1), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 2), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 3), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 4), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 5), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 6), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Marowak[] = { + overworld_frame(gObjectEventPic_Marowak, 4, 4, 0), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 1), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 2), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 3), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 4), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 5), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 6), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hitmonlee[] = { + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 0), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 1), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 2), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 3), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 4), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hitmonchan[] = { + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 0), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 1), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 2), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 3), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 4), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lickitung[] = { + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 0), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 1), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 2), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 3), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 4), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Koffing[] = { + overworld_frame(gObjectEventPic_Koffing, 4, 4, 0), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 1), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 2), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 3), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 4), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Weezing[] = { + overworld_frame(gObjectEventPic_Weezing, 4, 4, 0), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 1), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 2), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 3), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 4), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 5), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 6), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rhyhorn[] = { + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 0), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 1), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 2), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 3), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 4), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rhydon[] = { + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 0), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 1), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 2), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 3), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 4), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Chansey[] = { + overworld_frame(gObjectEventPic_Chansey, 4, 4, 0), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 1), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 2), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 3), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 4), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tangela[] = { + overworld_frame(gObjectEventPic_Tangela, 4, 4, 0), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 1), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 2), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 3), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 4), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kangaskhan[] = { + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 0), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 1), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 2), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 3), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 4), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Horsea[] = { + overworld_frame(gObjectEventPic_Horsea, 4, 4, 0), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 1), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 2), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 3), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 4), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seadra[] = { + overworld_frame(gObjectEventPic_Seadra, 4, 4, 0), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 1), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 2), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 3), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 4), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Goldeen[] = { + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 0), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 1), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 2), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 3), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 4), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seaking[] = { + overworld_frame(gObjectEventPic_Seaking, 4, 4, 0), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 1), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 2), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 3), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 4), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Staryu[] = { + overworld_frame(gObjectEventPic_Staryu, 4, 4, 0), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 1), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 2), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 3), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 4), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Starmie[] = { + overworld_frame(gObjectEventPic_Starmie, 4, 4, 0), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 1), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 2), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 3), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 4), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mr_Mime[] = { + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 0), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 1), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 2), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 3), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 4), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Scyther[] = { + overworld_frame(gObjectEventPic_Scyther, 4, 4, 0), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 1), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 2), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 3), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 4), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jynx[] = { + overworld_frame(gObjectEventPic_Jynx, 4, 4, 0), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 1), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 2), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 3), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 4), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Electabuzz[] = { + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 0), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 1), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 2), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 3), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 4), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magmar[] = { + overworld_frame(gObjectEventPic_Magmar, 4, 4, 0), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 1), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 2), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 3), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 4), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pinsir[] = { + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 0), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 1), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 2), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 3), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 4), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tauros[] = { + overworld_frame(gObjectEventPic_Tauros, 4, 4, 0), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 1), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 2), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 3), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 4), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magikarp[] = { + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 0), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 1), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 2), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 3), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 4), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gyarados[] = { + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 0), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 1), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 2), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 3), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 4), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lapras[] = { + overworld_frame(gObjectEventPic_Lapras, 4, 4, 0), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 1), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 2), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 3), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 4), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ditto[] = { + overworld_frame(gObjectEventPic_Ditto, 4, 4, 0), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 1), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 2), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 3), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 4), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Eevee[] = { + overworld_frame(gObjectEventPic_Eevee, 4, 4, 0), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 1), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 2), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 3), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 4), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vaporeon[] = { + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 0), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 1), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 2), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 3), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 4), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jolteon[] = { + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 0), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 1), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 2), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 3), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 4), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Flareon[] = { + overworld_frame(gObjectEventPic_Flareon, 4, 4, 0), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 1), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 2), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 3), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 4), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Porygon[] = { + overworld_frame(gObjectEventPic_Porygon, 4, 4, 0), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 1), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 2), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 3), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 4), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Omanyte[] = { + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 0), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 1), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 2), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 3), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 4), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Omastar[] = { + overworld_frame(gObjectEventPic_Omastar, 4, 4, 0), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 1), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 2), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 3), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 4), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kabuto[] = { + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 0), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 1), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 2), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 3), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 4), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kabutops[] = { + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 0), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 1), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 2), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 3), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 4), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Aerodactyl[] = { + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 0), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 1), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 2), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 3), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 4), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Snorlax[] = { + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 0), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 1), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 2), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 3), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 4), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Articuno[] = { + overworld_frame(gObjectEventPic_Articuno, 4, 4, 0), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 1), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 2), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 3), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 4), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Zapdos[] = { + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 0), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 1), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 2), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 3), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 4), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Moltres[] = { + overworld_frame(gObjectEventPic_Moltres, 4, 4, 0), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 1), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 2), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 3), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 4), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dratini[] = { + overworld_frame(gObjectEventPic_Dratini, 4, 4, 0), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 1), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 2), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 3), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 4), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dragonair[] = { + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 0), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 1), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 2), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 3), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 4), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dragonite[] = { + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 0), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 1), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 2), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 3), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 4), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mewtwo[] = { + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 0), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 1), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 2), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 3), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 4), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mew_Follower[] = { + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Chikorita[] = { + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 0), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 1), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 2), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 3), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 4), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Bayleef[] = { + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 0), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 1), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 2), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 3), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 4), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Meganium[] = { + overworld_frame(gObjectEventPic_Meganium, 4, 4, 0), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 1), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 2), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 3), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 4), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cyndaquil[] = { + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 0), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 1), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 2), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 3), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 4), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Quilava[] = { + overworld_frame(gObjectEventPic_Quilava, 4, 4, 0), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 1), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 2), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 3), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 4), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Typhlosion[] = { + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 0), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 1), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 2), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 3), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 4), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Totodile[] = { + overworld_frame(gObjectEventPic_Totodile, 4, 4, 0), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 1), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 2), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 3), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 4), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Croconaw[] = { + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 0), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 1), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 2), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 3), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 4), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Feraligatr[] = { + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 0), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 1), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 2), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 3), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 4), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sentret[] = { + overworld_frame(gObjectEventPic_Sentret, 4, 4, 0), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 1), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 2), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 3), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 4), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Furret[] = { + overworld_frame(gObjectEventPic_Furret, 4, 4, 0), + overworld_frame(gObjectEventPic_Furret, 4, 4, 1), + overworld_frame(gObjectEventPic_Furret, 4, 4, 2), + overworld_frame(gObjectEventPic_Furret, 4, 4, 3), + overworld_frame(gObjectEventPic_Furret, 4, 4, 4), + overworld_frame(gObjectEventPic_Furret, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hoothoot[] = { + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 0), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 1), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 2), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 3), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 4), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Noctowl[] = { + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 0), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 1), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 2), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 3), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 4), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ledyba[] = { + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 0), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 1), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 2), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 3), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 4), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ledian[] = { + overworld_frame(gObjectEventPic_Ledian, 4, 4, 0), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 1), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 2), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 3), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 4), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Spinarak[] = { + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 0), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 1), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 2), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 3), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 4), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ariados[] = { + overworld_frame(gObjectEventPic_Ariados, 4, 4, 0), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 1), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 2), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 3), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 4), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Crobat[] = { + overworld_frame(gObjectEventPic_Crobat, 4, 4, 0), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 1), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 2), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 3), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 4), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Chinchou[] = { + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 0), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 1), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 2), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 3), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 4), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lanturn[] = { + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 0), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 1), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 2), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 3), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 4), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pichu[] = { + overworld_frame(gObjectEventPic_Pichu, 4, 4, 0), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 1), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 2), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 3), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 4), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cleffa[] = { + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 0), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 1), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 2), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 3), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 4), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Igglybuff[] = { + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 0), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 1), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 2), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 3), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 4), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Togepi[] = { + overworld_frame(gObjectEventPic_Togepi, 4, 4, 0), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 1), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 2), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 3), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 4), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Togetic[] = { + overworld_frame(gObjectEventPic_Togetic, 4, 4, 0), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 1), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 2), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 3), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 4), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Natu[] = { + overworld_frame(gObjectEventPic_Natu, 4, 4, 0), + overworld_frame(gObjectEventPic_Natu, 4, 4, 1), + overworld_frame(gObjectEventPic_Natu, 4, 4, 2), + overworld_frame(gObjectEventPic_Natu, 4, 4, 3), + overworld_frame(gObjectEventPic_Natu, 4, 4, 4), + overworld_frame(gObjectEventPic_Natu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Xatu[] = { + overworld_frame(gObjectEventPic_Xatu, 4, 4, 0), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 1), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 2), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 3), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 4), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mareep[] = { + overworld_frame(gObjectEventPic_Mareep, 4, 4, 0), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 1), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 2), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 3), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 4), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Flaaffy[] = { + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 0), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 1), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 2), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 3), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 4), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ampharos[] = { + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 0), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 1), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 2), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 3), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 4), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Bellossom[] = { + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 0), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 1), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 2), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 3), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 4), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Marill[] = { + overworld_frame(gObjectEventPic_Marill, 4, 4, 0), + overworld_frame(gObjectEventPic_Marill, 4, 4, 1), + overworld_frame(gObjectEventPic_Marill, 4, 4, 2), + overworld_frame(gObjectEventPic_Marill, 4, 4, 3), + overworld_frame(gObjectEventPic_Marill, 4, 4, 4), + overworld_frame(gObjectEventPic_Marill, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Azumarill[] = { + overworld_frame(gObjectEventPic_Azumarill_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Azumarill_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Azumarill_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Azumarill_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Azumarill_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Azumarill_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sudowoodo[] = { + overworld_frame(gObjectEventPic_Sudowoodo_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Sudowoodo_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Sudowoodo_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Sudowoodo_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Sudowoodo_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Sudowoodo_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Politoed[] = { + overworld_frame(gObjectEventPic_Politoed, 4, 4, 0), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 1), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 2), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 3), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 4), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hoppip[] = { + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 0), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 1), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 2), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 3), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 4), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Skiploom[] = { + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 0), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 1), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 2), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 3), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 4), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jumpluff[] = { + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 0), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 1), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 2), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 3), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 4), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Aipom[] = { + overworld_frame(gObjectEventPic_Aipom, 4, 4, 0), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 1), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 2), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 3), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 4), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sunkern[] = { + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 0), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 1), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 2), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 3), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 4), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sunflora[] = { + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 0), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 1), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 2), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 3), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 4), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Yanma[] = { + overworld_frame(gObjectEventPic_Yanma, 4, 4, 0), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 1), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 2), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 3), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 4), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wooper[] = { + overworld_frame(gObjectEventPic_Wooper, 4, 4, 0), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 1), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 2), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 3), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 4), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Quagsire[] = { + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 0), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 1), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 2), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 3), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 4), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Espeon[] = { + overworld_frame(gObjectEventPic_Espeon, 4, 4, 0), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 1), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 2), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 3), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 4), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Umbreon[] = { + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 0), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 1), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 2), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 3), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 4), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Murkrow[] = { + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 0), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 1), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 2), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 3), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 4), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slowking[] = { + overworld_frame(gObjectEventPic_Slowking, 4, 4, 0), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 1), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 2), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 3), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 4), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Misdreavus[] = { + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 0), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 1), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 2), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 3), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 4), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_A[] = { + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_B[] = { + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_C[] = { + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_D[] = { + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_E[] = { + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_F[] = { + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_G[] = { + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_H[] = { + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_I[] = { + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_J[] = { + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_K[] = { + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_L[] = { + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_M[] = { + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_N[] = { + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_O[] = { + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_P[] = { + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_Q[] = { + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_R[] = { + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_S[] = { + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_T[] = { + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_U[] = { + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_V[] = { + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_W[] = { + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_X[] = { + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_Y[] = { + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_Z[] = { + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_Exclamation[] = { + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Unown_Question[] = { + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wobbuffet[] = { + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 0), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 1), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 2), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 3), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 4), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Girafarig[] = { + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 0), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 1), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 2), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 3), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 4), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pineco[] = { + overworld_frame(gObjectEventPic_Pineco, 4, 4, 0), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 1), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 2), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 3), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 4), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Forretress[] = { + overworld_frame(gObjectEventPic_Forretress, 4, 4, 0), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 1), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 2), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 3), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 4), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dunsparce[] = { + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 0), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 1), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 2), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 3), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 4), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gligar[] = { + overworld_frame(gObjectEventPic_Gligar, 4, 4, 0), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 1), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 2), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 3), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 4), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Steelix[] = { + overworld_frame(gObjectEventPic_Steelix, 8, 8, 0), + overworld_frame(gObjectEventPic_Steelix, 8, 8, 1), + overworld_frame(gObjectEventPic_Steelix, 8, 8, 2), + overworld_frame(gObjectEventPic_Steelix, 8, 8, 3), + overworld_frame(gObjectEventPic_Steelix, 8, 8, 4), + overworld_frame(gObjectEventPic_Steelix, 8, 8, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Snubbull[] = { + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 0), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 1), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 2), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 3), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 4), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Granbull[] = { + overworld_frame(gObjectEventPic_Granbull, 4, 4, 0), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 1), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 2), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 3), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 4), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Qwilfish[] = { + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 0), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 1), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 2), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 3), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 4), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Scizor[] = { + overworld_frame(gObjectEventPic_Scizor, 4, 4, 0), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 1), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 2), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 3), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 4), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shuckle[] = { + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 0), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 1), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 2), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 3), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 4), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Heracross[] = { + overworld_frame(gObjectEventPic_Heracross, 4, 4, 0), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 1), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 2), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 3), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 4), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sneasel[] = { + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 0), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 1), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 2), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 3), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 4), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 5), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 6), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Teddiursa[] = { + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 0), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 1), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 2), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 3), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 4), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 5), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 6), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ursaring[] = { + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 0), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 1), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 2), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 3), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 4), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slugma[] = { + overworld_frame(gObjectEventPic_Slugma, 4, 4, 0), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 1), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 2), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 3), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 4), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magcargo[] = { + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 0), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 1), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 2), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 3), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 4), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 5), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 6), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Swinub[] = { + overworld_frame(gObjectEventPic_Swinub, 4, 4, 0), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 1), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 2), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 3), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 4), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Piloswine[] = { + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 0), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 1), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 2), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 3), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 4), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Corsola[] = { + overworld_frame(gObjectEventPic_Corsola, 4, 4, 0), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 1), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 2), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 3), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 4), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Remoraid[] = { + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 0), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 1), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 2), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 3), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 4), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Octillery[] = { + overworld_frame(gObjectEventPic_Octillery, 4, 4, 0), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 1), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 2), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 3), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 4), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Delibird[] = { + overworld_frame(gObjectEventPic_Delibird, 4, 4, 0), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 1), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 2), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 3), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 4), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mantine[] = { + overworld_frame(gObjectEventPic_Mantine, 4, 4, 0), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 1), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 2), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 3), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 4), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Skarmory[] = { + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 0), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 1), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 2), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 3), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 4), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Houndour[] = { + overworld_frame(gObjectEventPic_Houndour, 4, 4, 0), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 1), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 2), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 3), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 4), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Houndoom[] = { + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 0), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 1), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 2), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 3), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 4), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kingdra[] = { + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 0), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 1), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 2), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 3), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 4), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Phanpy[] = { + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 0), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 1), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 2), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 3), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 4), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Donphan[] = { + overworld_frame(gObjectEventPic_Donphan, 4, 4, 0), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 1), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 2), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 3), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 4), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Porygon2[] = { + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 0), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 1), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 2), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 3), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 4), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Stantler[] = { + overworld_frame(gObjectEventPic_Stantler, 4, 4, 0), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 1), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 2), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 3), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 4), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Smeargle[] = { + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 0), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 1), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 2), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 3), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 4), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tyrogue[] = { + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 0), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 1), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 2), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 3), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 4), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hitmontop[] = { + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 0), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 1), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 2), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 3), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 4), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Smoochum[] = { + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 0), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 1), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 2), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 3), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 4), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Elekid[] = { + overworld_frame(gObjectEventPic_Elekid, 4, 4, 0), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 1), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 2), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 3), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 4), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magby[] = { + overworld_frame(gObjectEventPic_Magby, 4, 4, 0), + overworld_frame(gObjectEventPic_Magby, 4, 4, 1), + overworld_frame(gObjectEventPic_Magby, 4, 4, 2), + overworld_frame(gObjectEventPic_Magby, 4, 4, 3), + overworld_frame(gObjectEventPic_Magby, 4, 4, 4), + overworld_frame(gObjectEventPic_Magby, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Miltank[] = { + overworld_frame(gObjectEventPic_Miltank, 4, 4, 0), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 1), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 2), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 3), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 4), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Blissey[] = { + overworld_frame(gObjectEventPic_Blissey, 4, 4, 0), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 1), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 2), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 3), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 4), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Raikou[] = { + overworld_frame(gObjectEventPic_Raikou, 4, 4, 0), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 1), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 2), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 3), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 4), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Entei[] = { + overworld_frame(gObjectEventPic_Entei, 4, 4, 0), + overworld_frame(gObjectEventPic_Entei, 4, 4, 1), + overworld_frame(gObjectEventPic_Entei, 4, 4, 2), + overworld_frame(gObjectEventPic_Entei, 4, 4, 3), + overworld_frame(gObjectEventPic_Entei, 4, 4, 4), + overworld_frame(gObjectEventPic_Entei, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Suicune[] = { + overworld_frame(gObjectEventPic_Suicune, 4, 4, 0), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 1), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 2), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 3), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 4), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Larvitar[] = { + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 0), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 1), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 2), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 3), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 4), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pupitar[] = { + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 0), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 1), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 2), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 3), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 4), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tyranitar[] = { + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 0), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 1), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 2), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 3), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 4), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lugia_Follower[] = { + overworld_frame(gObjectEventPic_Lugia_Follower, 8, 8, 0), + overworld_frame(gObjectEventPic_Lugia_Follower, 8, 8, 1), + overworld_frame(gObjectEventPic_Lugia_Follower, 8, 8, 2), + overworld_frame(gObjectEventPic_Lugia_Follower, 8, 8, 3), + overworld_frame(gObjectEventPic_Lugia_Follower, 8, 8, 4), + overworld_frame(gObjectEventPic_Lugia_Follower, 8, 8, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_HoOh_Follower[] = { + overworld_frame(gObjectEventPic_HoOh_Follower, 8, 8, 0), + overworld_frame(gObjectEventPic_HoOh_Follower, 8, 8, 1), + overworld_frame(gObjectEventPic_HoOh_Follower, 8, 8, 2), + overworld_frame(gObjectEventPic_HoOh_Follower, 8, 8, 3), + overworld_frame(gObjectEventPic_HoOh_Follower, 8, 8, 4), + overworld_frame(gObjectEventPic_HoOh_Follower, 8, 8, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Celebi[] = { + overworld_frame(gObjectEventPic_Celebi, 4, 4, 0), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 1), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 2), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 3), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 4), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Treecko[] = { + overworld_frame(gObjectEventPic_Treecko, 4, 4, 0), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 1), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 2), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 3), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 4), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Grovyle[] = { + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 0), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 1), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 2), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 3), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 4), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sceptile[] = { + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 0), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 1), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 2), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 3), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 4), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Torchic[] = { + overworld_frame(gObjectEventPic_Torchic, 4, 4, 0), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 1), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 2), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 3), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 4), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Combusken[] = { + overworld_frame(gObjectEventPic_Combusken, 4, 4, 0), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 1), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 2), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 3), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 4), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Blaziken[] = { + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 0), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 1), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 2), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 3), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 4), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mudkip[] = { + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 0), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 1), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 2), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 3), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 4), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Marshtomp[] = { + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 0), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 1), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 2), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 3), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 4), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Swampert[] = { + overworld_frame(gObjectEventPic_Swampert, 4, 4, 0), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 1), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 2), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 3), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 4), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poochyena_Follower[] = { + overworld_frame(gObjectEventPic_Poochyena_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Poochyena_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Poochyena_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Poochyena_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Poochyena_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Poochyena_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mightyena[] = { + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 0), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 1), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 2), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 3), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 4), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Zigzagoon_Follower[] = { + overworld_frame(gObjectEventPic_Zigzagoon_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Zigzagoon_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Zigzagoon_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Zigzagoon_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Zigzagoon_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Zigzagoon_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Linoone[] = { + overworld_frame(gObjectEventPic_Linoone, 4, 4, 0), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 1), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 2), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 3), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 4), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wurmple[] = { + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 0), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 1), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 2), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 3), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 4), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Silcoon[] = { + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 0), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 1), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 2), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 3), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 4), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Beautifly[] = { + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 0), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 1), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 2), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 3), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 4), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cascoon[] = { + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 0), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 1), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 2), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 3), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 4), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dustox[] = { + overworld_frame(gObjectEventPic_Dustox, 4, 4, 0), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 1), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 2), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 3), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 4), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lotad[] = { + overworld_frame(gObjectEventPic_Lotad, 4, 4, 0), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 1), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 2), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 3), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 4), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lombre[] = { + overworld_frame(gObjectEventPic_Lombre, 4, 4, 0), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 1), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 2), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 3), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 4), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ludicolo[] = { + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 0), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 1), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 2), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 3), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 4), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seedot[] = { + overworld_frame(gObjectEventPic_Seedot, 4, 4, 0), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 1), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 2), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 3), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 4), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nuzleaf[] = { + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 0), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 1), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 2), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 3), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 4), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shiftry[] = { + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 0), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 1), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 2), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 3), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 4), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Taillow[] = { + overworld_frame(gObjectEventPic_Taillow, 4, 4, 0), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 1), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 2), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 3), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 4), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Swellow[] = { + overworld_frame(gObjectEventPic_Swellow, 4, 4, 0), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 1), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 2), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 3), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 4), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wingull_Follower[] = { + overworld_frame(gObjectEventPic_Wingull_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Wingull_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Wingull_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Wingull_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Wingull_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Wingull_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pelipper[] = { + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 0), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 1), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 2), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 3), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 4), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ralts[] = { + overworld_frame(gObjectEventPic_Ralts, 4, 4, 0), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 1), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 2), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 3), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 4), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kirlia_Follower[] = { + overworld_frame(gObjectEventPic_Kirlia_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Kirlia_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Kirlia_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Kirlia_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Kirlia_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Kirlia_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gardevoir[] = { + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 0), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 1), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 2), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 3), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 4), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Surskit[] = { + overworld_frame(gObjectEventPic_Surskit, 4, 4, 0), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 1), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 2), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 3), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 4), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Masquerain[] = { + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 0), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 1), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 2), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 3), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 4), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shroomish[] = { + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 0), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 1), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 2), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 3), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 4), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Breloom[] = { + overworld_frame(gObjectEventPic_Breloom, 4, 4, 0), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 1), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 2), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 3), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 4), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slakoth[] = { + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 0), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 1), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 2), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 3), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 4), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vigoroth_Follower[] = { + overworld_frame(gObjectEventPic_Vigoroth_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Vigoroth_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Vigoroth_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Vigoroth_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Vigoroth_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Vigoroth_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slaking[] = { + overworld_frame(gObjectEventPic_Slaking, 4, 4, 0), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 1), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 2), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 3), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 4), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nincada[] = { + overworld_frame(gObjectEventPic_Nincada, 4, 4, 0), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 1), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 2), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 3), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 4), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ninjask[] = { + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 0), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 1), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 2), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 3), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 4), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shedinja[] = { + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 0), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 1), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 2), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 3), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 4), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Whismur[] = { + overworld_frame(gObjectEventPic_Whismur, 4, 4, 0), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 1), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 2), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 3), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 4), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Loudred[] = { + overworld_frame(gObjectEventPic_Loudred, 4, 4, 0), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 1), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 2), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 3), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 4), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Exploud[] = { + overworld_frame(gObjectEventPic_Exploud, 4, 4, 0), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 1), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 2), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 3), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 4), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Makuhita[] = { + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 0), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 1), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 2), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 3), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 4), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hariyama[] = { + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 0), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 1), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 2), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 3), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 4), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Azurill_Follower[] = { + overworld_frame(gObjectEventPic_Azurill_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Azurill_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Azurill_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Azurill_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Azurill_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Azurill_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nosepass[] = { + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 0), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 1), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 2), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 3), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 4), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Skitty_Follower[] = { + overworld_frame(gObjectEventPic_Skitty_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Skitty_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Skitty_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Skitty_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Skitty_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Skitty_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Delcatty[] = { + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 0), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 1), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 2), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 3), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 4), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sableye[] = { + overworld_frame(gObjectEventPic_Sableye, 4, 4, 0), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 1), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 2), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 3), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 4), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mawile[] = { + overworld_frame(gObjectEventPic_Mawile, 4, 4, 0), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 1), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 2), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 3), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 4), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Aron[] = { + overworld_frame(gObjectEventPic_Aron, 4, 4, 0), + overworld_frame(gObjectEventPic_Aron, 4, 4, 1), + overworld_frame(gObjectEventPic_Aron, 4, 4, 2), + overworld_frame(gObjectEventPic_Aron, 4, 4, 3), + overworld_frame(gObjectEventPic_Aron, 4, 4, 4), + overworld_frame(gObjectEventPic_Aron, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lairon[] = { + overworld_frame(gObjectEventPic_Lairon, 4, 4, 0), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 1), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 2), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 3), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 4), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Aggron[] = { + overworld_frame(gObjectEventPic_Aggron, 4, 4, 0), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 1), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 2), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 3), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 4), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Meditite[] = { + overworld_frame(gObjectEventPic_Meditite, 4, 4, 0), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 1), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 2), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 3), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 4), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Medicham[] = { + overworld_frame(gObjectEventPic_Medicham, 4, 4, 0), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 1), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 2), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 3), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 4), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Electrike[] = { + overworld_frame(gObjectEventPic_Electrike, 4, 4, 0), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 1), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 2), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 3), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 4), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Manectric[] = { + overworld_frame(gObjectEventPic_Manectric, 4, 4, 0), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 1), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 2), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 3), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 4), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Plusle[] = { + overworld_frame(gObjectEventPic_Plusle, 4, 4, 0), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 1), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 2), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 3), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 4), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Minun[] = { + overworld_frame(gObjectEventPic_Minun, 4, 4, 0), + overworld_frame(gObjectEventPic_Minun, 4, 4, 1), + overworld_frame(gObjectEventPic_Minun, 4, 4, 2), + overworld_frame(gObjectEventPic_Minun, 4, 4, 3), + overworld_frame(gObjectEventPic_Minun, 4, 4, 4), + overworld_frame(gObjectEventPic_Minun, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Volbeat[] = { + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 0), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 1), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 2), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 3), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 4), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Illumise[] = { + overworld_frame(gObjectEventPic_Illumise, 4, 4, 0), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 1), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 2), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 3), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 4), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Roselia[] = { + overworld_frame(gObjectEventPic_Roselia, 4, 4, 0), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 1), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 2), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 3), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 4), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 5), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 6), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gulpin[] = { + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 0), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 1), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 2), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 3), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 4), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Swalot[] = { + overworld_frame(gObjectEventPic_Swalot, 4, 4, 0), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 1), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 2), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 3), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 4), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Carvanha[] = { + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 0), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 1), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 2), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 3), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 4), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sharpedo[] = { + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 0), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 1), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 2), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 3), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 4), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wailmer[] = { + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 0), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 1), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 2), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 3), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 4), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wailord[] = { + overworld_frame(gObjectEventPic_Wailord, 8, 8, 0), + overworld_frame(gObjectEventPic_Wailord, 8, 8, 1), + overworld_frame(gObjectEventPic_Wailord, 8, 8, 2), + overworld_frame(gObjectEventPic_Wailord, 8, 8, 3), + overworld_frame(gObjectEventPic_Wailord, 8, 8, 4), + overworld_frame(gObjectEventPic_Wailord, 8, 8, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Numel[] = { + overworld_frame(gObjectEventPic_Numel, 4, 4, 0), + overworld_frame(gObjectEventPic_Numel, 4, 4, 1), + overworld_frame(gObjectEventPic_Numel, 4, 4, 2), + overworld_frame(gObjectEventPic_Numel, 4, 4, 3), + overworld_frame(gObjectEventPic_Numel, 4, 4, 4), + overworld_frame(gObjectEventPic_Numel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Camerupt[] = { + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 0), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 1), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 2), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 3), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 4), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Torkoal[] = { + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 0), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 1), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 2), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 3), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 4), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Spoink[] = { + overworld_frame(gObjectEventPic_Spoink, 4, 4, 0), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 1), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 2), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 3), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 4), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Grumpig[] = { + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 0), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 1), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 2), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 3), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 4), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Spinda[] = { + overworld_frame(gObjectEventPic_Spinda, 4, 4, 0), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 1), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 2), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 3), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 4), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Trapinch[] = { + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 0), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 1), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 2), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 3), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 4), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vibrava[] = { + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 0), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 1), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 2), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 3), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 4), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Flygon[] = { + overworld_frame(gObjectEventPic_Flygon, 4, 4, 0), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 1), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 2), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 3), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 4), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cacnea[] = { + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 0), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 1), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 2), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 3), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 4), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cacturne[] = { + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 0), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 1), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 2), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 3), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 4), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Swablu[] = { + overworld_frame(gObjectEventPic_Swablu, 4, 4, 0), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 1), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 2), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 3), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 4), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Altaria[] = { + overworld_frame(gObjectEventPic_Altaria, 4, 4, 0), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 1), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 2), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 3), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 4), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Zangoose[] = { + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 0), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 1), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 2), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 3), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 4), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seviper[] = { + overworld_frame(gObjectEventPic_Seviper, 4, 4, 0), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 1), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 2), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 3), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 4), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lunatone[] = { + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 0), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 1), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 2), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 3), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 4), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Solrock[] = { + overworld_frame(gObjectEventPic_Solrock, 4, 4, 0), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 1), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 2), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 3), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 4), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Barboach[] = { + overworld_frame(gObjectEventPic_Barboach, 4, 4, 0), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 1), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 2), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 3), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 4), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Whiscash[] = { + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 0), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 1), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 2), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 3), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 4), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Corphish[] = { + overworld_frame(gObjectEventPic_Corphish, 4, 4, 0), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 1), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 2), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 3), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 4), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Crawdaunt[] = { + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 0), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 1), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 2), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 3), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 4), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Baltoy[] = { + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 0), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 1), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 2), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 3), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 4), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Claydol[] = { + overworld_frame(gObjectEventPic_Claydol, 4, 4, 0), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 1), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 2), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 3), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 4), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lileep[] = { + overworld_frame(gObjectEventPic_Lileep, 4, 4, 0), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 1), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 2), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 3), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 4), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cradily[] = { + overworld_frame(gObjectEventPic_Cradily, 4, 4, 0), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 1), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 2), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 3), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 4), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Anorith[] = { + overworld_frame(gObjectEventPic_Anorith, 4, 4, 0), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 1), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 2), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 3), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 4), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Armaldo[] = { + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 0), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 1), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 2), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 3), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 4), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Feebas[] = { + overworld_frame(gObjectEventPic_Feebas, 4, 4, 0), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 1), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 2), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 3), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 4), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Milotic[] = { + overworld_frame(gObjectEventPic_Milotic, 4, 4, 0), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 1), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 2), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 3), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 4), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Castform[] = { + overworld_frame(gObjectEventPic_Castform, 4, 4, 0), + overworld_frame(gObjectEventPic_Castform, 4, 4, 1), + overworld_frame(gObjectEventPic_Castform, 4, 4, 2), + overworld_frame(gObjectEventPic_Castform, 4, 4, 3), + overworld_frame(gObjectEventPic_Castform, 4, 4, 4), + overworld_frame(gObjectEventPic_Castform, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kecleon_Follower[] = { + overworld_frame(gObjectEventPic_Kecleon_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Kecleon_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Kecleon_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Kecleon_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Kecleon_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Kecleon_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shuppet[] = { + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 0), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 1), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 2), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 3), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 4), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Banette[] = { + overworld_frame(gObjectEventPic_Banette, 4, 4, 0), + overworld_frame(gObjectEventPic_Banette, 4, 4, 1), + overworld_frame(gObjectEventPic_Banette, 4, 4, 2), + overworld_frame(gObjectEventPic_Banette, 4, 4, 3), + overworld_frame(gObjectEventPic_Banette, 4, 4, 4), + overworld_frame(gObjectEventPic_Banette, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Duskull[] = { + overworld_frame(gObjectEventPic_Duskull, 4, 4, 0), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 1), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 2), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 3), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 4), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dusclops_Follower[] = { + overworld_frame(gObjectEventPic_Dusclops_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Dusclops_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Dusclops_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Dusclops_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Dusclops_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Dusclops_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tropius[] = { + overworld_frame(gObjectEventPic_Tropius, 4, 4, 0), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 1), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 2), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 3), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 4), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Chimecho[] = { + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 0), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 1), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 2), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 3), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 4), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Absol[] = { + overworld_frame(gObjectEventPic_Absol, 4, 4, 0), + overworld_frame(gObjectEventPic_Absol, 4, 4, 1), + overworld_frame(gObjectEventPic_Absol, 4, 4, 2), + overworld_frame(gObjectEventPic_Absol, 4, 4, 3), + overworld_frame(gObjectEventPic_Absol, 4, 4, 4), + overworld_frame(gObjectEventPic_Absol, 4, 4, 5), + overworld_frame(gObjectEventPic_Absol, 4, 4, 6), + overworld_frame(gObjectEventPic_Absol, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wynaut[] = { + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 0), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 1), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 2), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 3), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 4), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Snorunt[] = { + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 0), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 1), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 2), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 3), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 4), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Glalie[] = { + overworld_frame(gObjectEventPic_Glalie, 4, 4, 0), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 1), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 2), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 3), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 4), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Spheal[] = { + overworld_frame(gObjectEventPic_Spheal, 4, 4, 0), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 1), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 2), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 3), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 4), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sealeo[] = { + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 0), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 1), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 2), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 3), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 4), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Walrein[] = { + overworld_frame(gObjectEventPic_Walrein, 4, 4, 0), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 1), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 2), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 3), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 4), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Clamperl[] = { + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 0), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 1), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 2), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 3), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 4), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Huntail[] = { + overworld_frame(gObjectEventPic_Huntail, 4, 4, 0), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 1), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 2), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 3), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 4), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gorebyss[] = { + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 0), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 1), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 2), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 3), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 4), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Relicanth[] = { + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 0), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 1), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 2), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 3), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 4), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Luvdisc[] = { + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 0), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 1), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 2), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 3), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 4), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Bagon[] = { + overworld_frame(gObjectEventPic_Bagon, 4, 4, 0), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 1), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 2), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 3), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 4), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shelgon[] = { + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 0), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 1), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 2), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 3), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 4), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Salamence[] = { + overworld_frame(gObjectEventPic_Salamence, 4, 4, 0), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 1), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 2), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 3), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 4), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Beldum[] = { + overworld_frame(gObjectEventPic_Beldum, 4, 4, 0), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 1), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 2), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 3), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 4), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Metang[] = { + overworld_frame(gObjectEventPic_Metang, 4, 4, 0), + overworld_frame(gObjectEventPic_Metang, 4, 4, 1), + overworld_frame(gObjectEventPic_Metang, 4, 4, 2), + overworld_frame(gObjectEventPic_Metang, 4, 4, 3), + overworld_frame(gObjectEventPic_Metang, 4, 4, 4), + overworld_frame(gObjectEventPic_Metang, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Metagross[] = { + overworld_frame(gObjectEventPic_Metagross, 4, 4, 0), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 1), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 2), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 3), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 4), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Regirock[] = { + overworld_frame(gObjectEventPic_Regirock, 4, 4, 0), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 1), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 2), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 3), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 4), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Regice[] = { + overworld_frame(gObjectEventPic_Regice, 4, 4, 0), + overworld_frame(gObjectEventPic_Regice, 4, 4, 1), + overworld_frame(gObjectEventPic_Regice, 4, 4, 2), + overworld_frame(gObjectEventPic_Regice, 4, 4, 3), + overworld_frame(gObjectEventPic_Regice, 4, 4, 4), + overworld_frame(gObjectEventPic_Regice, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Registeel[] = { + overworld_frame(gObjectEventPic_Registeel, 4, 4, 0), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 1), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 2), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 3), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 4), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Latias[] = { + overworld_frame(gObjectEventPic_Latias, 4, 4, 0), + overworld_frame(gObjectEventPic_Latias, 4, 4, 1), + overworld_frame(gObjectEventPic_Latias, 4, 4, 2), + overworld_frame(gObjectEventPic_Latias, 4, 4, 3), + overworld_frame(gObjectEventPic_Latias, 4, 4, 4), + overworld_frame(gObjectEventPic_Latias, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Latios[] = { + overworld_frame(gObjectEventPic_Latios, 4, 4, 0), + overworld_frame(gObjectEventPic_Latios, 4, 4, 1), + overworld_frame(gObjectEventPic_Latios, 4, 4, 2), + overworld_frame(gObjectEventPic_Latios, 4, 4, 3), + overworld_frame(gObjectEventPic_Latios, 4, 4, 4), + overworld_frame(gObjectEventPic_Latios, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kyogre_Follower[] = { + overworld_frame(gObjectEventPic_Kyogre_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Kyogre_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Kyogre_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Kyogre_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Kyogre_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Kyogre_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Groudon_Follower[] = { + overworld_frame(gObjectEventPic_Groudon_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Groudon_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Groudon_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Groudon_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Groudon_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Groudon_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rayquaza_Follower[] = { + overworld_frame(gObjectEventPic_Rayquaza_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Rayquaza_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Rayquaza_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Rayquaza_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Rayquaza_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Rayquaza_Follower, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jirachi[] = { + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 0), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 1), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 2), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 3), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 4), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Deoxys_Normal[] = { + overworld_frame(gObjectEventPic_Deoxys_Normal, 4, 4, 0), + overworld_frame(gObjectEventPic_Deoxys_Normal, 4, 4, 1), + overworld_frame(gObjectEventPic_Deoxys_Normal, 4, 4, 2), + overworld_frame(gObjectEventPic_Deoxys_Normal, 4, 4, 3), + overworld_frame(gObjectEventPic_Deoxys_Normal, 4, 4, 4), + overworld_frame(gObjectEventPic_Deoxys_Normal, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Deoxys_Attack[] = { + overworld_frame(gObjectEventPic_Deoxys_Attack, 4, 4, 0), + overworld_frame(gObjectEventPic_Deoxys_Attack, 4, 4, 1), + overworld_frame(gObjectEventPic_Deoxys_Attack, 4, 4, 2), + overworld_frame(gObjectEventPic_Deoxys_Attack, 4, 4, 3), + overworld_frame(gObjectEventPic_Deoxys_Attack, 4, 4, 4), + overworld_frame(gObjectEventPic_Deoxys_Attack, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Deoxys_Defense[] = { + overworld_frame(gObjectEventPic_Deoxys_Defense, 4, 4, 0), + overworld_frame(gObjectEventPic_Deoxys_Defense, 4, 4, 1), + overworld_frame(gObjectEventPic_Deoxys_Defense, 4, 4, 2), + overworld_frame(gObjectEventPic_Deoxys_Defense, 4, 4, 3), + overworld_frame(gObjectEventPic_Deoxys_Defense, 4, 4, 4), + overworld_frame(gObjectEventPic_Deoxys_Defense, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Deoxys_Speed[] = { + overworld_frame(gObjectEventPic_Deoxys_Speed, 4, 4, 0), + overworld_frame(gObjectEventPic_Deoxys_Speed, 4, 4, 1), + overworld_frame(gObjectEventPic_Deoxys_Speed, 4, 4, 2), + overworld_frame(gObjectEventPic_Deoxys_Speed, 4, 4, 3), + overworld_frame(gObjectEventPic_Deoxys_Speed, 4, 4, 4), + overworld_frame(gObjectEventPic_Deoxys_Speed, 4, 4, 5), +}; diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index 6b6ab12aa..d851dfbe1 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -20,8 +20,8 @@ .evYield_Speed = 2, \ .evYield_SpAttack = 2, \ .evYield_SpDefense = 2, \ - .itemCommon = ITEM_NONE, \ - .itemRare = ITEM_NONE, \ + .item1 = ITEM_NONE, \ + .item2 = ITEM_NONE, \ .genderRatio = MON_GENDERLESS, \ .eggCycles = 120, \ .friendship = 0, \ @@ -56,8 +56,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -88,8 +88,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -120,8 +120,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -152,8 +152,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -184,8 +184,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -216,8 +216,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -248,8 +248,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -280,8 +280,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -312,8 +312,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -344,8 +344,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -376,8 +376,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -408,8 +408,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SILVER_POWDER, + .item1 = ITEM_NONE, + .item2 = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -440,8 +440,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -472,8 +472,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -504,8 +504,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_POISON_BARB, + .item1 = ITEM_NONE, + .item2 = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -536,8 +536,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -568,8 +568,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -600,8 +600,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -632,8 +632,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -664,8 +664,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -696,8 +696,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -728,8 +728,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SHARP_BEAK, + .item1 = ITEM_NONE, + .item2 = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -760,8 +760,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -792,8 +792,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -824,8 +824,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_ORAN_BERRY, - .itemRare = ITEM_LIGHT_BALL, + .item1 = ITEM_ORAN_BERRY, + .item2 = ITEM_LIGHT_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, @@ -856,8 +856,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_ORAN_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, @@ -888,8 +888,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_QUICK_CLAW, + .item1 = ITEM_NONE, + .item2 = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -920,8 +920,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_QUICK_CLAW, + .item1 = ITEM_NONE, + .item2 = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -952,8 +952,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, @@ -984,8 +984,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, @@ -1016,8 +1016,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, @@ -1048,8 +1048,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, @@ -1080,8 +1080,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, @@ -1112,8 +1112,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, @@ -1144,8 +1144,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_LEPPA_BERRY, - .itemRare = ITEM_MOON_STONE, + .item1 = ITEM_LEPPA_BERRY, + .item2 = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, @@ -1176,8 +1176,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_LEPPA_BERRY, - .itemRare = ITEM_MOON_STONE, + .item1 = ITEM_LEPPA_BERRY, + .item2 = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, @@ -1208,8 +1208,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -1240,8 +1240,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -1272,8 +1272,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, @@ -1304,8 +1304,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, @@ -1336,8 +1336,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -1368,8 +1368,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -1400,8 +1400,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1432,8 +1432,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1464,8 +1464,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1496,8 +1496,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_TINY_MUSHROOM, - .itemRare = ITEM_BIG_MUSHROOM, + .item1 = ITEM_TINY_MUSHROOM, + .item2 = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1528,8 +1528,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_TINY_MUSHROOM, - .itemRare = ITEM_BIG_MUSHROOM, + .item1 = ITEM_TINY_MUSHROOM, + .item2 = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1560,8 +1560,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1592,8 +1592,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1624,8 +1624,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1656,8 +1656,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1688,8 +1688,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1720,8 +1720,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1752,8 +1752,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1784,8 +1784,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1816,8 +1816,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1848,8 +1848,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1880,8 +1880,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -1912,8 +1912,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -1944,8 +1944,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -1976,8 +1976,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2008,8 +2008,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2040,8 +2040,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_TWISTED_SPOON, + .item1 = ITEM_NONE, + .item2 = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -2072,8 +2072,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_TWISTED_SPOON, + .item1 = ITEM_NONE, + .item2 = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -2104,8 +2104,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_TWISTED_SPOON, + .item1 = ITEM_NONE, + .item2 = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -2136,8 +2136,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -2168,8 +2168,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -2200,8 +2200,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -2232,8 +2232,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2264,8 +2264,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2296,8 +2296,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2328,8 +2328,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2360,8 +2360,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2392,8 +2392,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_EVERSTONE, + .item1 = ITEM_NONE, + .item2 = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -2424,8 +2424,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_EVERSTONE, + .item1 = ITEM_NONE, + .item2 = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -2456,8 +2456,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_EVERSTONE, + .item1 = ITEM_NONE, + .item2 = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -2488,8 +2488,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2520,8 +2520,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2552,8 +2552,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2584,8 +2584,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2616,8 +2616,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_COAT, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -2648,8 +2648,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_COAT, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -2680,8 +2680,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_STICK, + .item1 = ITEM_NONE, + .item2 = ITEM_STICK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2712,8 +2712,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SHARP_BEAK, + .item1 = ITEM_NONE, + .item2 = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2744,8 +2744,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SHARP_BEAK, + .item1 = ITEM_NONE, + .item2 = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2776,8 +2776,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2808,8 +2808,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2840,8 +2840,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NUGGET, + .item1 = ITEM_NONE, + .item2 = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2872,8 +2872,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NUGGET, + .item1 = ITEM_NONE, + .item2 = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2904,8 +2904,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_PEARL, - .itemRare = ITEM_BIG_PEARL, + .item1 = ITEM_PEARL, + .item2 = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2936,8 +2936,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_PEARL, - .itemRare = ITEM_BIG_PEARL, + .item1 = ITEM_PEARL, + .item2 = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -2968,8 +2968,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3000,8 +3000,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3032,8 +3032,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3064,8 +3064,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -3096,8 +3096,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3128,8 +3128,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3160,8 +3160,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3192,8 +3192,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3224,8 +3224,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -3256,8 +3256,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -3288,8 +3288,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3320,8 +3320,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3352,8 +3352,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_THICK_CLUB, + .item1 = ITEM_NONE, + .item2 = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3384,8 +3384,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_THICK_CLUB, + .item1 = ITEM_NONE, + .item2 = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3416,8 +3416,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, @@ -3448,8 +3448,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, @@ -3480,8 +3480,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3512,8 +3512,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SMOKE_BALL, + .item1 = ITEM_NONE, + .item2 = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3544,8 +3544,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SMOKE_BALL, + .item1 = ITEM_NONE, + .item2 = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3576,8 +3576,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3608,8 +3608,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3640,8 +3640,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_LUCKY_EGG, + .item1 = ITEM_NONE, + .item2 = ITEM_LUCKY_EGG, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, @@ -3672,8 +3672,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3704,8 +3704,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, @@ -3736,8 +3736,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3768,8 +3768,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3800,8 +3800,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3832,8 +3832,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -3864,8 +3864,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_STARDUST, - .itemRare = ITEM_STAR_PIECE, + .item1 = ITEM_STARDUST, + .item2 = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -3896,8 +3896,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_STARDUST, - .itemRare = ITEM_STAR_PIECE, + .item1 = ITEM_STARDUST, + .item2 = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -3928,8 +3928,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_LEPPA_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -3960,8 +3960,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -3992,8 +3992,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_ASPEAR_BERRY, - .itemRare = ITEM_ASPEAR_BERRY, + .item1 = ITEM_ASPEAR_BERRY, + .item2 = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, .friendship = 70, @@ -4024,8 +4024,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -4056,8 +4056,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -4088,8 +4088,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -4120,8 +4120,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, .friendship = 70, @@ -4152,8 +4152,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, .friendship = 70, @@ -4184,8 +4184,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, .friendship = 70, @@ -4216,8 +4216,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, @@ -4248,8 +4248,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_POWDER, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_POWDER, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -4280,8 +4280,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, @@ -4312,8 +4312,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, @@ -4344,8 +4344,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, @@ -4376,8 +4376,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, @@ -4408,8 +4408,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -4440,8 +4440,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -4472,8 +4472,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -4504,8 +4504,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -4536,8 +4536,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -4568,8 +4568,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, @@ -4600,8 +4600,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_LEFTOVERS, - .itemRare = ITEM_LEFTOVERS, + .item1 = ITEM_LEFTOVERS, + .item2 = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, @@ -4632,8 +4632,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -4664,8 +4664,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -4696,8 +4696,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -4728,8 +4728,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -4760,8 +4760,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -4792,8 +4792,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -4824,8 +4824,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -4856,8 +4856,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_LUM_BERRY, - .itemRare = ITEM_LUM_BERRY, + .item1 = ITEM_LUM_BERRY, + .item2 = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -4888,8 +4888,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -4920,8 +4920,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -4952,8 +4952,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -4984,8 +4984,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -5016,8 +5016,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -5048,8 +5048,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -5080,8 +5080,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -5112,8 +5112,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -5144,8 +5144,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -5176,8 +5176,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_ORAN_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5208,8 +5208,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_ORAN_BERRY, - .itemRare = ITEM_SITRUS_BERRY, + .item1 = ITEM_ORAN_BERRY, + .item2 = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5240,8 +5240,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5272,8 +5272,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5304,8 +5304,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5336,8 +5336,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5368,8 +5368,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5400,8 +5400,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5432,8 +5432,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -5464,8 +5464,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_YELLOW_SHARD, + .item1 = ITEM_NONE, + .item2 = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5496,8 +5496,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_YELLOW_SHARD, + .item1 = ITEM_NONE, + .item2 = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5528,8 +5528,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_ORAN_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, @@ -5560,8 +5560,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_LEPPA_BERRY, - .itemRare = ITEM_MOON_STONE, + .item1 = ITEM_LEPPA_BERRY, + .item2 = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 140, @@ -5592,8 +5592,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, @@ -5624,8 +5624,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, .friendship = 70, @@ -5656,8 +5656,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, .friendship = 70, @@ -5688,8 +5688,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5720,8 +5720,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5752,8 +5752,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5784,8 +5784,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5816,8 +5816,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5848,8 +5848,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5880,8 +5880,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, @@ -5912,8 +5912,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, .friendship = 70, @@ -5944,8 +5944,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -5976,8 +5976,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6008,8 +6008,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6040,8 +6040,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6072,8 +6072,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6104,8 +6104,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6136,8 +6136,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6168,8 +6168,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6200,8 +6200,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6232,8 +6232,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6264,8 +6264,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6296,8 +6296,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 70, @@ -6328,8 +6328,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, .friendship = 35, @@ -6360,8 +6360,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -6392,8 +6392,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6424,8 +6424,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SPELL_TAG, + .item1 = ITEM_NONE, + .item2 = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -6456,8 +6456,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 70, @@ -6488,8 +6488,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6520,8 +6520,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_PERSIM_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6552,8 +6552,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6584,8 +6584,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6616,8 +6616,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6648,8 +6648,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6680,8 +6680,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_COAT, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -6712,8 +6712,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -6744,8 +6744,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -6776,8 +6776,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6808,8 +6808,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -6840,8 +6840,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_ORAN_BERRY, - .itemRare = ITEM_ORAN_BERRY, + .item1 = ITEM_ORAN_BERRY, + .item2 = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6872,8 +6872,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -6904,8 +6904,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_QUICK_CLAW, + .item1 = ITEM_NONE, + .item2 = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -6936,8 +6936,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -6968,8 +6968,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7000,8 +7000,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7032,8 +7032,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7064,8 +7064,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7096,8 +7096,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7128,8 +7128,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_RED_SHARD, + .item1 = ITEM_NONE, + .item2 = ITEM_RED_SHARD, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -7160,8 +7160,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7192,8 +7192,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7224,8 +7224,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7256,8 +7256,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -7288,8 +7288,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -7320,8 +7320,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -7352,8 +7352,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -7384,8 +7384,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7416,8 +7416,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7448,8 +7448,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7480,8 +7480,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -7512,8 +7512,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7544,8 +7544,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -7576,8 +7576,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, @@ -7608,8 +7608,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, .friendship = 70, @@ -7640,8 +7640,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_ASPEAR_BERRY, - .itemRare = ITEM_ASPEAR_BERRY, + .item1 = ITEM_ASPEAR_BERRY, + .item2 = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, .friendship = 70, @@ -7672,8 +7672,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -7704,8 +7704,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, .friendship = 70, @@ -7736,8 +7736,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_MOOMOO_MILK, - .itemRare = ITEM_MOOMOO_MILK, + .item1 = ITEM_MOOMOO_MILK, + .item2 = ITEM_MOOMOO_MILK, .genderRatio = MON_FEMALE, .eggCycles = 20, .friendship = 70, @@ -7768,8 +7768,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_LUCKY_EGG, + .item1 = ITEM_NONE, + .item2 = ITEM_LUCKY_EGG, .genderRatio = MON_FEMALE, .eggCycles = 40, .friendship = 140, @@ -7800,8 +7800,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -7832,8 +7832,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -7864,8 +7864,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -7896,8 +7896,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -7928,8 +7928,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -7960,8 +7960,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -7992,8 +7992,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -8024,8 +8024,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_SACRED_ASH, - .itemRare = ITEM_SACRED_ASH, + .item1 = ITEM_SACRED_ASH, + .item2 = ITEM_SACRED_ASH, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -8056,8 +8056,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_LUM_BERRY, - .itemRare = ITEM_LUM_BERRY, + .item1 = ITEM_LUM_BERRY, + .item2 = ITEM_LUM_BERRY, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -8138,8 +8138,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8170,8 +8170,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8202,8 +8202,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 3, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8234,8 +8234,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8266,8 +8266,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8298,8 +8298,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8330,8 +8330,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8362,8 +8362,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8394,8 +8394,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, .friendship = 70, @@ -8426,8 +8426,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_PECHA_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8458,8 +8458,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_PECHA_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8490,8 +8490,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_ORAN_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8522,8 +8522,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_ORAN_BERRY, - .itemRare = ITEM_SITRUS_BERRY, + .item1 = ITEM_ORAN_BERRY, + .item2 = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8554,8 +8554,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8586,8 +8586,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8618,8 +8618,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SILVER_POWDER, + .item1 = ITEM_NONE, + .item2 = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8650,8 +8650,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8682,8 +8682,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SILVER_POWDER, + .item1 = ITEM_NONE, + .item2 = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8714,8 +8714,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8746,8 +8746,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8778,8 +8778,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8810,8 +8810,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8842,8 +8842,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8874,8 +8874,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8906,8 +8906,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8938,8 +8938,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -8970,8 +8970,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 15, .friendship = 70, @@ -9002,8 +9002,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9034,8 +9034,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9066,8 +9066,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9098,8 +9098,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9130,8 +9130,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_CHESTO_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9162,8 +9162,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9194,8 +9194,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9226,8 +9226,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9258,8 +9258,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SILVER_POWDER, + .item1 = ITEM_NONE, + .item2 = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9290,8 +9290,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, @@ -9322,8 +9322,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 70, @@ -9354,8 +9354,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_LEPPA_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, .friendship = 70, @@ -9386,8 +9386,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_LEPPA_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, .friendship = 70, @@ -9418,8 +9418,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_PERSIM_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9450,8 +9450,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -9482,8 +9482,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, .friendship = 70, @@ -9514,8 +9514,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9546,8 +9546,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9578,8 +9578,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -9610,8 +9610,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9642,8 +9642,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9674,8 +9674,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_HEART_SCALE, - .itemRare = ITEM_NONE, + .item1 = ITEM_HEART_SCALE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, .friendship = 70, @@ -9706,8 +9706,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9738,8 +9738,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -9770,8 +9770,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9802,8 +9802,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9834,8 +9834,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -9866,8 +9866,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -9898,8 +9898,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SOFT_SAND, + .item1 = ITEM_NONE, + .item2 = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9930,8 +9930,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9962,8 +9962,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -9994,8 +9994,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -10026,8 +10026,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_KINGS_ROCK, + .item1 = ITEM_NONE, + .item2 = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, .friendship = 70, @@ -10058,8 +10058,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10090,8 +10090,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10122,8 +10122,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10154,8 +10154,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_RAWST_BERRY, - .itemRare = ITEM_RAWST_BERRY, + .item1 = ITEM_RAWST_BERRY, + .item2 = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10186,8 +10186,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10218,8 +10218,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10250,8 +10250,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10282,8 +10282,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_POISON_BARB, + .item1 = ITEM_NONE, + .item2 = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -10314,8 +10314,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_POISON_BARB, + .item1 = ITEM_NONE, + .item2 = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -10346,8 +10346,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10378,8 +10378,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NEVER_MELT_ICE, + .item1 = ITEM_NONE, + .item2 = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10410,8 +10410,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_MOON_STONE, + .item1 = ITEM_NONE, + .item2 = ITEM_MOON_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, @@ -10442,8 +10442,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SUN_STONE, + .item1 = ITEM_NONE, + .item2 = ITEM_SUN_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, .friendship = 70, @@ -10474,8 +10474,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, .friendship = 70, @@ -10506,8 +10506,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10538,8 +10538,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10570,8 +10570,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10602,8 +10602,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10634,8 +10634,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10666,8 +10666,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10698,8 +10698,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10730,8 +10730,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10762,8 +10762,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10794,8 +10794,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10826,8 +10826,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SPELL_TAG, + .item1 = ITEM_NONE, + .item2 = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -10858,8 +10858,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SPELL_TAG, + .item1 = ITEM_NONE, + .item2 = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -10890,8 +10890,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_POISON_BARB, + .item1 = ITEM_NONE, + .item2 = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -10922,8 +10922,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -10954,8 +10954,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 2, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -10986,8 +10986,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, .friendship = 70, @@ -11018,8 +11018,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_BIG_PEARL, + .item1 = ITEM_NONE, + .item2 = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11050,8 +11050,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_BIG_PEARL, + .item1 = ITEM_NONE, + .item2 = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11082,8 +11082,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -11114,8 +11114,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_CHESTO_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11146,8 +11146,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_CHESTO_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11178,8 +11178,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_CHESTO_BERRY, + .item1 = ITEM_NONE, + .item2 = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11210,8 +11210,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_BLUE_SHARD, + .item1 = ITEM_NONE, + .item2 = ITEM_BLUE_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11242,8 +11242,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11274,8 +11274,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11306,8 +11306,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -11338,8 +11338,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SPELL_TAG, + .item1 = ITEM_NONE, + .item2 = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -11370,8 +11370,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_SPELL_TAG, + .item1 = ITEM_NONE, + .item2 = ITEM_SPELL_TAG, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 35, @@ -11402,8 +11402,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11434,8 +11434,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 70, @@ -11466,8 +11466,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_GREEN_SHARD, + .item1 = ITEM_NONE, + .item2 = ITEM_GREEN_SHARD, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, .friendship = 70, @@ -11498,8 +11498,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_HARD_STONE, + .item1 = ITEM_NONE, + .item2 = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, @@ -11530,8 +11530,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_HARD_STONE, + .item1 = ITEM_NONE, + .item2 = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, @@ -11562,8 +11562,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_HARD_STONE, + .item1 = ITEM_NONE, + .item2 = ITEM_HARD_STONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 35, .friendship = 35, @@ -11594,8 +11594,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_MYSTIC_WATER, - .itemRare = ITEM_MYSTIC_WATER, + .item1 = ITEM_MYSTIC_WATER, + .item2 = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, @@ -11626,8 +11626,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 15, .friendship = 70, @@ -11658,8 +11658,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 15, .friendship = 70, @@ -11690,8 +11690,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -11722,8 +11722,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 2, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -11754,8 +11754,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -11786,8 +11786,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, .friendship = 70, @@ -11818,8 +11818,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -11850,8 +11850,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 2, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -11882,8 +11882,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, .friendship = 35, @@ -11914,8 +11914,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -11946,8 +11946,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -11978,8 +11978,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_DRAGON_SCALE, + .item1 = ITEM_NONE, + .item2 = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, .friendship = 35, @@ -12010,8 +12010,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_COAT, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, @@ -12042,8 +12042,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_COAT, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, @@ -12074,8 +12074,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_METAL_COAT, + .item1 = ITEM_NONE, + .item2 = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 40, .friendship = 35, @@ -12106,8 +12106,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -12138,8 +12138,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -12170,8 +12170,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 80, .friendship = 35, @@ -12202,8 +12202,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -12234,8 +12234,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -12266,8 +12266,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -12298,8 +12298,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 3, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 120, .friendship = 90, @@ -12330,8 +12330,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 3, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 120, .friendship = 90, @@ -12362,8 +12362,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 0, .evYield_SpDefense = 0, - .itemCommon = ITEM_STAR_PIECE, - .itemRare = ITEM_STAR_PIECE, + .item1 = ITEM_STAR_PIECE, + .item2 = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 100, @@ -12394,8 +12394,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 1, .evYield_SpAttack = 1, .evYield_SpDefense = 0, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 120, .friendship = 0, @@ -12426,8 +12426,8 @@ const struct BaseStats gBaseStats[] = .evYield_Speed = 0, .evYield_SpAttack = 1, .evYield_SpDefense = 1, - .itemCommon = ITEM_NONE, - .itemRare = ITEM_NONE, + .item1 = ITEM_NONE, + .item2 = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, .friendship = 70, diff --git a/src/data/trade.h b/src/data/trade.h index 80d17a49b..b26072763 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -174,10 +174,10 @@ static const struct SpriteTemplate sSpriteTemplate_MenuText = .callback = SpriteCallbackDummy, }; -static const u16 sTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette sSpritePalette_TradeScreenText = +static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const struct SpritePalette gSpritePalette_TradeScreenText = { - .data = sTradeScreenTextPalette, + .data = TradeScreenTextPalette, .tag = PALTAG_MENU_TEXT }; diff --git a/src/data/trainer_graphics/back_pic_anims.h b/src/data/trainer_graphics/back_pic_anims.h index ed12e0cb4..821039cb3 100644 --- a/src/data/trainer_graphics/back_pic_anims.h +++ b/src/data/trainer_graphics/back_pic_anims.h @@ -1,4 +1,4 @@ -static const union AnimCmd sAnimCmd_Brendan_1[] = +static const union AnimCmd gAnimCmd_Brendan_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -8,7 +8,7 @@ static const union AnimCmd sAnimCmd_Brendan_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnimCmd_May_Steven_1[] = +static const union AnimCmd gAnimCmd_May_Steven_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -18,7 +18,7 @@ static const union AnimCmd sAnimCmd_May_Steven_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnimCmd_Wally_1[] = +static const union AnimCmd gAnimCmd_Wally_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -28,7 +28,7 @@ static const union AnimCmd sAnimCmd_Wally_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnimCmd_Red_1[] = +static const union AnimCmd gAnimCmd_Red_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(2, 6), @@ -38,7 +38,7 @@ static const union AnimCmd sAnimCmd_Red_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnimCmd_Leaf_1[] = +static const union AnimCmd gAnimCmd_Leaf_1[] = { ANIMCMD_FRAME(1, 20), ANIMCMD_FRAME(2, 6), @@ -48,7 +48,7 @@ static const union AnimCmd sAnimCmd_Leaf_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnimCmd_RubySapphireBrendan_1[] = +static const union AnimCmd gAnimCmd_RubySapphireBrendan_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -58,7 +58,7 @@ static const union AnimCmd sAnimCmd_RubySapphireBrendan_1[] = ANIMCMD_END, }; -static const union AnimCmd sAnimCmd_RubySapphireMay_1[] = +static const union AnimCmd gAnimCmd_RubySapphireMay_1[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_FRAME(1, 9), @@ -71,49 +71,49 @@ static const union AnimCmd sAnimCmd_RubySapphireMay_1[] = static const union AnimCmd *const sBackAnims_Brendan[] = { sAnim_GeneralFrame3, - sAnimCmd_Brendan_1, + gAnimCmd_Brendan_1, }; static const union AnimCmd *const sBackAnims_May[] = { sAnim_GeneralFrame3, - sAnimCmd_May_Steven_1, + gAnimCmd_May_Steven_1, }; static const union AnimCmd *const sBackAnims_Red[] = { sAnim_GeneralFrame0, - sAnimCmd_Red_1, + gAnimCmd_Red_1, }; static const union AnimCmd *const sBackAnims_Leaf[] = { sAnim_GeneralFrame0, - sAnimCmd_Leaf_1, + gAnimCmd_Leaf_1, }; static const union AnimCmd *const sBackAnims_RubySapphireBrendan[] = { sAnim_GeneralFrame3, - sAnimCmd_RubySapphireBrendan_1, + gAnimCmd_RubySapphireBrendan_1, }; static const union AnimCmd *const sBackAnims_RubySapphireMay[] = { sAnim_GeneralFrame3, - sAnimCmd_RubySapphireMay_1, + gAnimCmd_RubySapphireMay_1, }; static const union AnimCmd *const sBackAnims_Wally[] = { sAnim_GeneralFrame3, - sAnimCmd_Wally_1, + gAnimCmd_Wally_1, }; static const union AnimCmd *const sBackAnims_Steven[] = { sAnim_GeneralFrame3, - sAnimCmd_May_Steven_1, + gAnimCmd_May_Steven_1, }; const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] = diff --git a/src/decompress.c b/src/decompress.c index 92c840a63..b74d4e814 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -51,13 +51,13 @@ void LoadCompressedSpritePalette(const struct CompressedSpritePalette *src) LoadSpritePalette(&dest); } -void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *src, void *buffer) +void LoadCompressedSpritePaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer) { struct SpritePalette dest; - LZ77UnCompWram(src->data, buffer); + LZ77UnCompWram(a->data, buffer); dest.data = buffer; - dest.tag = src->tag; + dest.tag = a->tag; LoadSpritePalette(&dest); } diff --git a/src/decoration.c b/src/decoration.c index 547b05acf..7e102251a 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -826,7 +826,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId) { RemoveDecorationWindow(WINDOW_DECORATION_CATEGORIES); AddDecorationActionsWindow(); - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); PrintCurMainMenuDescription(); gTasks[taskId].func = HandleDecorationActionsMenuInput; } @@ -2664,7 +2664,7 @@ static void FieldCB_StopPuttingAwayDecorations(void) u8 taskId; FadeInFromBlack(); - DrawDialogueFrame(0, TRUE); + DrawDialogueFrame(0, 1); InitDecorationActionsWindow(); taskId = CreateTask(Task_ReinitializeDecorationMenuHandler, 8); gTasks[taskId].tState = 0; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index b87fe3092..691ca6b2a 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2879,10 +2879,10 @@ static u8 TryGivePrize(void) return PRIZE_RECEIVED; } -static u32 IncrementWithLimit(u32 num, u32 max) +static u32 IncrementWithLimit(u32 a, u32 max) { - if (num < max) - return num + 1; + if (a < max) + return a + 1; else return max; } @@ -4546,7 +4546,7 @@ struct { u8 id; void (*func)(void); -} static const sGfxFuncs[] = +} const sGfxFuncs[] = { {GFXFUNC_LOAD, LoadGfx}, // Element not used, LoadGfx is passed directly to SetGfxFunc {GFXFUNC_SHOW_NAMES, ShowNames}, diff --git a/src/easy_chat.c b/src/easy_chat.c index 2bbd16cb2..734fd4f18 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -1492,7 +1492,7 @@ void ShowEasyChatScreen(void) displayedPersonType = EASY_CHAT_PERSON_REPORTER_MALE; break; case EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW: - words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].bravoTrainerTower.words; + words = gSaveBlock1Ptr->tvShows[gSpecialVar_0x8005].fanclubOpinions.words18; displayedPersonType = EASY_CHAT_PERSON_REPORTER_FEMALE; break; case EASY_CHAT_TYPE_GOOD_SAYING: @@ -1672,7 +1672,8 @@ static bool8 InitEasyChatScreenStruct(u8 type, u16 *words, u8 displayedPersonTyp static void FreeEasyChatScreenStruct(void) { - TRY_FREE_AND_SET_NULL(sEasyChatScreen); + if (sEasyChatScreen != NULL) + FREE_AND_SET_NULL(sEasyChatScreen); } // Returns the function ID of the action to take as a result of player's input. @@ -3074,7 +3075,8 @@ static bool8 LoadEasyChatScreen(void) static void FreeEasyChatScreenControl(void) { - TRY_FREE_AND_SET_NULL(sScreenControl); + if (sScreenControl) + FREE_AND_SET_NULL(sScreenControl); } static void StartEasyChatFunction(u16 funcId) @@ -5571,7 +5573,8 @@ static bool8 InitEasyChatScreenWordData(void) static void FreeEasyChatScreenWordData(void) { - TRY_FREE_AND_SET_NULL(sWordData); + if (sWordData) + FREE_AND_SET_NULL(sWordData); } static void SetUnlockedEasyChatGroups(void) diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index cf3ca16c3..c3f17f234 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -15,8 +15,6 @@ #include "constants/items.h" #include "constants/trainer_hill.h" -STATIC_ASSERT(sizeof(struct TrainerHillChallenge) <= SECTOR_DATA_SIZE, TrainerHillChallengeFreeSpace); - struct SendRecvMgr { bool8 isParent; @@ -59,20 +57,22 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_WORD_TO_HER, EC_WORD_WIN, EC_WORD_JOKING, EC_WORD_HIGHS, EC_WORD_SCARY, EC_WORD_ELLIPSIS_EXCL }, .speechAfter = { EC_WORD_IGNORANT, EC_WORD_SO, EC_WORD_TODAY, EC_WORD_NIGHTTIME, EC_WORD_YOU_RE, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, .mons = { - [0] = DUMMY_HILL_MON, - [1] = DUMMY_HILL_MON, - [2] = DUMMY_HILL_MON, + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, [3] = { .species = SPECIES_SWALOT, .heldItem = ITEM_SHELL_BELL, .moves = { MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT, MOVE_YAWN }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 55, .attackEV = 255, .defenseEV = 100, .speedEV = 0, .spAttackEV = 0, .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -82,19 +82,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 1, .personality = 0x80, .nickname = __("マルノーム$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [4] = { .species = SPECIES_DUSTOX, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_SILVER_WIND, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_GIGA_DRAIN }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 0, .attackEV = 255, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -104,19 +106,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x6, .nickname = __("ドクケイル$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [5] = { .species = SPECIES_RELICANTH, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_ANCIENT_POWER, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 155, .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -126,7 +130,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x2f, .nickname = __("ジーランス$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, } }, @@ -139,20 +143,22 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_MOVE2(MINIMIZE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_SAD, EC_WORD_EXCL }, .speechAfter = { EC_MOVE(BITE), EC_WORD_AS_MUCH_AS, EC_EMPTY_WORD, EC_WORD_THEY_RE, EC_WORD_ANGRY, EC_WORD_EXCL }, .mons = { - [0] = DUMMY_HILL_MON, - [1] = DUMMY_HILL_MON, - [2] = DUMMY_HILL_MON, + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, [3] = { .species = SPECIES_CACTURNE, .heldItem = ITEM_QUICK_CLAW, .moves = { MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_THUNDER_PUNCH, MOVE_GROWTH }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 55, .attackEV = 0, .defenseEV = 100, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -162,19 +168,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x8c, .nickname = __("ノクタス$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [4] = { .species = SPECIES_SWELLOW, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 255, .attackEV = 255, .defenseEV = 0, .speedEV = 0, .spAttackEV = 0, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -184,19 +192,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x80, .nickname = __("オオスãƒ�メ$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [5] = { .species = SPECIES_WHISCASH, .heldItem = ITEM_CHESTO_BERRY, .moves = { MOVE_SURF, MOVE_EARTHQUAKE, MOVE_AMNESIA, MOVE_REST }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 0, .attackEV = 255, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -206,7 +216,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x0, .nickname = __("ナマズン$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, } }, @@ -219,20 +229,22 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_WORD_THAT, EC_WORD_ABOVE, EC_WORD_LOST, EC_WORD_STORES, EC_WORD_JOKING, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS }, .speechAfter = { EC_WORD_ENTERTAINING, EC_WORD_NONE, EC_WORD_HEY_QUES, EC_WORD_ALMOST, EC_WORD_EXCL, EC_EMPTY_WORD }, .mons = { - [0] = DUMMY_HILL_MON, - [1] = DUMMY_HILL_MON, - [2] = DUMMY_HILL_MON, + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, [3] = { .species = SPECIES_DELCATTY, .heldItem = ITEM_LUM_BERRY, .moves = { MOVE_SING, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_IRON_TAIL }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 0, .attackEV = 255, .defenseEV = 0, .speedEV = 255, .spAttackEV = 0, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -242,19 +254,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x3, .nickname = __("エãƒ�コロロ$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [4] = { .species = SPECIES_ROSELIA, .heldItem = ITEM_LEFTOVERS, .moves = { MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_TOXIC, MOVE_LEECH_SEED }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 255, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -264,19 +278,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 1, .personality = 0x6, .nickname = __("ロゼリア$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [5] = { .species = SPECIES_BEAUTIFLY, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_PSYCHIC }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 100, .attackEV = 200, .defenseEV = 0, .speedEV = 0, .spAttackEV = 200, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -286,7 +302,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x6, .nickname = __("アゲãƒ�ント$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, } }, @@ -299,20 +315,22 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .speechLose = { EC_WORD_OUTSIDE, EC_WORD_UNCLE, EC_WORD_SURPRISE, EC_WORD_THESE, EC_WORD_HEY_QUES, EC_WORD_ELLIPSIS_EXCL }, .speechAfter = { EC_WORD_HE_S, EC_WORD_NO_1, EC_WORD_STRONG, EC_WORD_CHILDREN, EC_WORD_CAN_T, EC_WORD_EXCL_EXCL }, .mons = { - [0] = DUMMY_HILL_MON, - [1] = DUMMY_HILL_MON, - [2] = DUMMY_HILL_MON, + [0] = NULL_BATTLE_TOWER_POKEMON, + [1] = NULL_BATTLE_TOWER_POKEMON, + [2] = NULL_BATTLE_TOWER_POKEMON, [3] = { .species = SPECIES_MAWILE, .heldItem = ITEM_BRIGHT_POWDER, .moves = { MOVE_CRUNCH, MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_COMET_PUNCH }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 0, .attackEV = 0, .defenseEV = 100, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 155, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -322,19 +340,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 1, .personality = 0x0, .nickname = __("クãƒ�ート$$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [4] = { .species = SPECIES_SHARPEDO, .heldItem = ITEM_SCOPE_LENS, .moves = { MOVE_SURF, MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 255, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -344,19 +364,21 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("サメãƒ�ダー$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, [5] = { .species = SPECIES_BANETTE, .heldItem = ITEM_LUM_BERRY, .moves = { MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP }, + .level = 0, + .ppBonuses = 0x0, .hpEV = 255, .attackEV = 0, .defenseEV = 0, .speedEV = 0, .spAttackEV = 255, .spDefenseEV = 0, - .otId = TRAINER_HILL_OTID, + .otId = 0x10000000, .hpIV = 5, .attackIV = 5, .defenseIV = 5, @@ -366,7 +388,7 @@ static const struct TrainerHillTrainer sTrainerHillTrainerTemplates_JP[] = { .abilityNum = 0, .personality = 0x96, .nickname = __("ジュペッタ$$$$$$"), - .friendship = MAX_FRIENDSHIP + .friendship = 255 }, } }, @@ -425,40 +447,40 @@ static bool32 ValidateTrainerHillChecksum(struct EReaderTrainerHillSet *hillSet) return TRUE; } -static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrainerHillChallenge * challenge) +static bool32 TryWriteTrainerHill_Internal(struct EReaderTrainerHillSet * hillSet, struct TrHillTag * hillTag) { int i; AGB_ASSERT_EX(hillSet->dummy == 0, "cereader_tool.c", 450); AGB_ASSERT_EX(hillSet->id == 0, "cereader_tool.c", 452); - memset(challenge, 0, SECTOR_SIZE); - challenge->numTrainers = hillSet->numTrainers; - challenge->unused1 = GetTrainerHillUnkVal(); - challenge->numFloors = (hillSet->numTrainers + 1) / HILL_TRAINERS_PER_FLOOR; + memset(hillTag, 0, SECTOR_SIZE); + hillTag->numTrainers = hillSet->numTrainers; + hillTag->unused1 = GetTrainerHillUnkVal(); + hillTag->numFloors = (hillSet->numTrainers + 1) / TRAINER_HILL_TRAINERS_PER_FLOOR; for (i = 0; i < hillSet->numTrainers; i++) { if (!(i & 1)) { - challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum; - challenge->floors[i / HILL_TRAINERS_PER_FLOOR].map = hillSet->trainers[i].map; - challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer; + hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum1 = hillSet->trainers[i].trainerNum; + hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].display = hillSet->trainers[i].display; + hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[0] = hillSet->trainers[i].trainer; } else { - challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum; - challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer; + hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainerNum2 = hillSet->trainers[i].trainerNum; + hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = hillSet->trainers[i].trainer; } } if (i & 1) { - challenge->floors[i / HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / HILL_TRAINERS_PER_FLOOR]; + hillTag->floors[i / TRAINER_HILL_TRAINERS_PER_FLOOR].trainers[1] = sTrainerHillTrainerTemplates_JP[i / TRAINER_HILL_TRAINERS_PER_FLOOR]; } - challenge->checksum = CalcByteArraySum((u8 *)challenge->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrainerHillFloor)); - if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)challenge) != SAVE_STATUS_OK) + hillTag->checksum = CalcByteArraySum((u8 *)hillTag->floors, NUM_TRAINER_HILL_FLOORS * sizeof(struct TrHillFloor)); + if (TryWriteSpecialSaveSector(SECTOR_ID_TRAINER_HILL, (u8 *)hillTag) != SAVE_STATUS_OK) return FALSE; return TRUE; diff --git a/src/event_data.c b/src/event_data.c index 22ebdb0d1..1defd2ccb 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -30,7 +30,7 @@ EWRAM_DATA u16 gSpecialVar_Facing = 0; EWRAM_DATA u16 gSpecialVar_MonBoxId = 0; EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0; EWRAM_DATA u16 gSpecialVar_Unused_0x8014 = 0; -EWRAM_DATA static u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {0}; +EWRAM_DATA static u8 gSpecialFlags[SPECIAL_FLAGS_SIZE] = {0}; extern u16 *const gSpecialVars[]; @@ -38,7 +38,7 @@ void InitEventData(void) { memset(gSaveBlock1Ptr->flags, 0, sizeof(gSaveBlock1Ptr->flags)); memset(gSaveBlock1Ptr->vars, 0, sizeof(gSaveBlock1Ptr->vars)); - memset(sSpecialFlags, 0, sizeof(sSpecialFlags)); + memset(gSpecialFlags, 0, sizeof(gSpecialFlags)); } void ClearTempFieldEventData(void) @@ -193,7 +193,7 @@ bool8 VarSet(u16 id, u16 value) return TRUE; } -u8 VarGetObjectEventGraphicsId(u8 id) +u16 VarGetObjectEventGraphicsId(u8 id) { return VarGet(VAR_OBJ_GFX_ID_0 + id); } @@ -205,7 +205,7 @@ u8 *GetFlagPointer(u16 id) else if (id < SPECIAL_FLAGS_START) return &gSaveBlock1Ptr->flags[id / 8]; else - return &sSpecialFlags[(id - SPECIAL_FLAGS_START) / 8]; + return &gSpecialFlags[(id - SPECIAL_FLAGS_START) / 8]; } u8 FlagSet(u16 id) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 6b2742c92..b06a51ac6 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -25,6 +25,7 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "util.h" +#include "follow_me.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" #include "constants/field_effects.h" @@ -32,6 +33,7 @@ #include "constants/mauville_old_man.h" #include "constants/trainer_types.h" #include "constants/union_room.h" +#include "constants/metatile_behaviors.h" // this file was known as evobjmv.c in Game Freak's original source @@ -80,6 +82,8 @@ static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprit static EWRAM_DATA struct LockedAnimObjectEvents *sLockedAnimObjectEvents = {0}; +extern void PlaySE(u16); +extern void PlaySE12WithPanning(u16, s8); static void MoveCoordsInDirection(u32, s16 *, s16 *, s16, s16); static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *, struct Sprite *); static void SetMovementDelay(struct Sprite *, s16); @@ -115,6 +119,9 @@ static void InitObjectPriorityByElevation(struct Sprite *, u8); static void ObjectEventUpdateSubpriority(struct ObjectEvent*, struct Sprite*); static void DoTracksGroundEffect_None(struct ObjectEvent*, struct Sprite*, u8); static void DoTracksGroundEffect_Footprints(struct ObjectEvent*, struct Sprite*, u8); +static void DoTracksGroundEffect_FootprintsBug(struct ObjectEvent*, struct Sprite*, u8); +static void DoTracksGroundEffect_FootprintsSpot(struct ObjectEvent*, struct Sprite*, u8); +static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent*, struct Sprite*, u8); static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent*, struct Sprite*, u8); static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*); @@ -139,7 +146,7 @@ static void SpawnObjectEventOnReturnToField(u8, s16, s16); static void SetPlayerAvatarObjectEventIdAndObjectId(u8, u8); static void ResetObjectEventFldEffData(struct ObjectEvent *); static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *); -static u8 FindObjectEventPaletteIndexByTag(u16); +static u16 FindObjectEventPaletteIndexByTag(u16); static void _PatchObjectPalette(u16, u8); static bool8 ObjectEventDoesElevationMatch(struct ObjectEvent *, u8); static void SpriteCB_CameraObject(struct Sprite *); @@ -163,7 +170,7 @@ static void CreateLevitateMovementTask(struct ObjectEvent *); static void DestroyLevitateMovementTask(u8); static bool8 NpcTakeStep(struct Sprite *); static bool8 IsElevationMismatchAt(u8, s16, s16); -static bool8 AreElevationsCompatible(u8, u8); +static bool8 AreElevationsCompatible(u8 a, u8 b); static const struct SpriteFrameImage sPicTable_PechaBerryTree[]; @@ -269,6 +276,7 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) = [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = MovementType_WalkSlowlyInPlace, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = MovementType_WalkSlowlyInPlace, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = MovementType_WalkSlowlyInPlace, + [MOVEMENT_TYPE_FOLLOWING_POKEMON] = MovementType_FollowingPokemon, }; static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = { @@ -313,6 +321,7 @@ static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = { [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = TRUE, [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = TRUE, [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = TRUE, + [MOVEMENT_TYPE_FOLLOWING_POKEMON] = FALSE, }; const u8 gInitialMovementTypeFacingDirections[] = { @@ -397,6 +406,7 @@ const u8 gInitialMovementTypeFacingDirections[] = { [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = DIR_NORTH, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = DIR_WEST, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST, + [MOVEMENT_TYPE_FOLLOWING_POKEMON] = DIR_SOUTH, }; #define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 @@ -1731,7 +1741,9 @@ u8 GetFirstInactiveObjectEventId(void) u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) { - if (localId < OBJ_EVENT_ID_PLAYER) + if (localId == OBJ_EVENT_ID_FOLLOWER) + return GetFollowerObjectId(); + else if (localId < OBJ_EVENT_ID_PLAYER) return GetObjectEventIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId); return GetObjectEventIdByLocalId(localId); @@ -1878,7 +1890,7 @@ static bool8 GetAvailableObjectEventId(u16 localId, u8 mapNum, u8 mapGroup, u8 * return FALSE; } -static void RemoveObjectEvent(struct ObjectEvent *objectEvent) +void RemoveObjectEvent(struct ObjectEvent *objectEvent) { objectEvent->active = FALSE; RemoveObjectEventInternal(objectEvent); @@ -1896,10 +1908,13 @@ void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) static void RemoveObjectEventInternal(struct ObjectEvent *objectEvent) { + u8 paletteNum; struct SpriteFrameImage image; image.size = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->size; gSprites[objectEvent->spriteId].images = ℑ + paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum; DestroySprite(&gSprites[objectEvent->spriteId]); + FieldEffectFreePaletteIfUnused(paletteNum); } void RemoveAllObjectEventsExceptPlayer(void) @@ -1937,7 +1952,6 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE) objectEvent->invisible = TRUE; - *(u16 *)&spriteTemplate->paletteTag = TAG_NONE; spriteId = CreateSprite(spriteTemplate, 0, 0, 0); if (spriteId == MAX_SPRITES) { @@ -1964,7 +1978,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl return objectEventId; } -static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; struct SpriteTemplate spriteTemplate; @@ -1996,7 +2010,7 @@ u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *objectEventTemplate) return TrySpawnObjectEventTemplate(objectEventTemplate, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY); } -u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation) +u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z) { struct ObjectEventTemplate objectEventTemplate; @@ -2007,7 +2021,7 @@ u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 objectEventTemplate.inConnection = 0; objectEventTemplate.x = x; objectEventTemplate.y = y; - objectEventTemplate.elevation = elevation; + objectEventTemplate.elevation = z; objectEventTemplate.movementType = movementBehavior; objectEventTemplate.movementRangeX = 0; objectEventTemplate.movementRangeY = 0; @@ -2086,7 +2100,7 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), // A unique id is given as an argument and stored in the sprite data to allow referring back to the same virtual object. // They can be turned (and, in the case of the Union Room, animated teleporting in and out) but do not have movement types // or any of the other data normally associated with object events. -u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction) +u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 z, u8 direction) { u8 spriteId; struct Sprite *sprite; @@ -2114,14 +2128,14 @@ u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevati sprite->oam.paletteNum = IndexOfSpritePaletteTag(spriteTemplate.paletteTag); sprite->coordOffsetEnabled = TRUE; sprite->sVirtualObjId = virtualObjId; - sprite->sVirtualObjElev = elevation; + sprite->sVirtualObjElev = z; if (subspriteTables != NULL) { SetSubspriteTables(sprite, subspriteTables); sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; } - InitObjectPriorityByElevation(sprite, elevation); - SetObjectSubpriorityByElevation(elevation, sprite, 1); + InitObjectPriorityByElevation(sprite, z); + SetObjectSubpriorityByElevation(z, sprite, 1); StartSpriteAnim(sprite, GetFaceDirectionAnimNum(direction)); } return spriteId; @@ -2175,7 +2189,7 @@ void RemoveObjectEventsOutsideView(void) { struct ObjectEvent *objectEvent = &gObjectEvents[i]; - if (objectEvent->active && !objectEvent->isPlayer) + if (objectEvent->active && !objectEvent->isPlayer && i != GetFollowerObjectId()) RemoveObjectEventIfOutsideView(objectEvent); } } @@ -2213,7 +2227,6 @@ void SpawnObjectEventsOnReturnToField(s16 x, s16 y) static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) { u8 i; - u8 paletteSlot; struct Sprite *sprite; struct ObjectEvent *objectEvent; struct SpriteTemplate spriteTemplate; @@ -2238,16 +2251,6 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) LoadObjectEventPalette(spriteTemplate.paletteTag); UpdatePaletteGammaType(IndexOfSpritePaletteTag(spriteTemplate.paletteTag), GAMMA_ALT); } - else if (paletteSlot == 10) - { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - } - else if (paletteSlot >= 16) - { - paletteSlot -= 16; - _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot); - } - *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; i = CreateSprite(&spriteTemplate, 0, 0, 0); if (i != MAX_SPRITES) @@ -2300,7 +2303,7 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_CONTROLLABLE); } -void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) +void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u16 graphicsId) { const struct ObjectEventGraphicsInfo *graphicsInfo; struct Sprite *sprite; @@ -2330,7 +2333,7 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) CameraObjectReset1(); } -void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) +void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u16 graphicsId) { u8 objectEventId; @@ -2387,7 +2390,7 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite } } -const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) +const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId) { u8 bard; @@ -2514,7 +2517,7 @@ static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *spritePalette void PatchObjectPalette(u16 paletteTag, u8 paletteSlot) { - u8 paletteIndex = FindObjectEventPaletteIndexByTag(paletteTag); + u16 paletteIndex = FindObjectEventPaletteIndexByTag(paletteTag); LoadPalette(sObjectEventSpritePalettes[paletteIndex].data, 16 * paletteSlot + 0x100, 0x20); } @@ -2529,9 +2532,9 @@ void PatchObjectPaletteRange(const u16 *paletteTags, u8 minSlot, u8 maxSlot) } } -static u8 FindObjectEventPaletteIndexByTag(u16 tag) +static u16 FindObjectEventPaletteIndexByTag(u16 tag) { - u8 i; + u16 i; for (i = 0; sObjectEventSpritePalettes[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { @@ -2877,7 +2880,7 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; @@ -3260,6 +3263,38 @@ u8 TryGetTrainerEncounterDirection(struct ObjectEvent *objectEvent, u8 movementT return gGetVectorDirectionFuncs[movementType](dx, dy, absdx, absdy); } +movement_type_def(MovementType_FollowingPokemon, gMovementTypeFuncs_FollowingPokemon) + +bool8 MovementType_FollowingPokemon_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + ClearObjectEventMovement(objectEvent, sprite); + sprite->data[1] = 1; + return TRUE; +} + +bool8 MovementType_FollowingPokemon_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_FOLLOWING_POKEMON); + sprite->data[1] = 2; + return TRUE; +} + +bool8 MovementType_FollowingPokemon_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) + { + objectEvent->singleMovementActive = FALSE; + sprite->data[1] = 3; + } + return FALSE; +} + +bool8 MovementType_FollowingPokemon_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + sprite->data[1] = 1; + return TRUE; +} + movement_type_def(MovementType_LookAround, gMovementTypeFuncs_LookAround) bool8 MovementType_LookAround_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) @@ -5148,8 +5183,9 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { curObject = &gObjectEvents[i]; - if (curObject->active && curObject != objectEvent) + if (curObject->active && curObject != objectEvent && !FollowMe_IsCollisionExempt(curObject, objectEvent)) { + // check for collision if curObject is active, not the object in question, and not exempt from collisions if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y)) { if (AreElevationsCompatible(objectEvent->currentElevation, curObject->currentElevation)) @@ -5297,6 +5333,7 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct objectEvent->heldMovementActive = TRUE; objectEvent->heldMovementFinished = FALSE; gSprites[objectEvent->spriteId].sActionFuncId = 0; + FollowMe(objectEvent, movementActionId, FALSE); return FALSE; } @@ -5397,6 +5434,41 @@ bool8 ObjectEventFaceOppositeDirection(struct ObjectEvent *objectEvent, u8 direc return ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetOppositeDirection(direction))); } +bool8 ObjectEventPokemonFacePlayer(struct ObjectEvent *follower, struct ObjectEvent *player) +{ + if(follower->currentCoords.x == player->currentCoords.x) + { + // Follower is south of player + if(follower->currentCoords.y > player->currentCoords.y) + { + gSprites[follower->spriteId].animNum = 5; + follower->facingDirection = DIR_NORTH; + } + // Follower is north of player + else + { + gSprites[follower->spriteId].animNum = 4; + follower->facingDirection = DIR_SOUTH; + } + } + else + { + // Follower is east of player + if(follower->currentCoords.x > player->currentCoords.x) + { + gSprites[follower->spriteId].animNum = 6; + follower->facingDirection = DIR_WEST; + } + // Follower is west of player + else + { + gSprites[follower->spriteId].animNum = 7; + follower->facingDirection = DIR_EAST; + } + } + return ObjectEventSetHeldMovement(follower, MOVEMENT_ACTION_FOLLOWING_POKEMON); +} + dirn_to_anim(GetAcroWheelieFaceDirectionMovementAction, gAcroWheelieFaceDirectionMovementActions); dirn_to_anim(GetAcroPopWheelieFaceDirectionMovementAction, gAcroPopWheelieFaceDirectionMovementActions); dirn_to_anim(GetAcroEndWheelieFaceDirectionMovementAction, gAcroEndWheelieFaceDirectionMovementActions); @@ -5539,7 +5611,8 @@ static bool8 UpdateMovementNormal(struct ObjectEvent *objectEvent, struct Sprite { ShiftStillObjectEventCoords(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; - sprite->animPaused = TRUE; + if (!(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId])) + sprite->animPaused = TRUE; return TRUE; } return FALSE; @@ -5773,7 +5846,19 @@ bool8 MovementAction_WalkNormalDiagonalDownRight_Step1(struct ObjectEvent *objec bool8 MovementAction_WalkNormalDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 2) + { + sprite->data[7] = 2; + sprite->animNum = 4; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_SOUTH, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDown_Step1(objectEvent, sprite); } @@ -5789,7 +5874,19 @@ bool8 MovementAction_WalkNormalDown_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 3) + { + sprite->data[7] = 3; + sprite->animNum = 5; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_NORTH, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalUp_Step1(objectEvent, sprite); } @@ -5805,7 +5902,19 @@ bool8 MovementAction_WalkNormalUp_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkNormalLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 4) + { + sprite->data[7] = 4; + sprite->animNum = 6; + sprite->x2 = 8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_WEST, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalLeft_Step1(objectEvent, sprite); } @@ -5821,7 +5930,19 @@ bool8 MovementAction_WalkNormalLeft_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 5) + { + sprite->data[7] = 5; + sprite->animNum = 7; + sprite->x2 = -8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_EAST, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalRight_Step1(objectEvent, sprite); } @@ -5895,7 +6016,8 @@ static u8 UpdateJumpAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, ShiftStillObjectEventCoords(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; objectEvent->landingJump = TRUE; - sprite->animPaused = TRUE; + if (!(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId])) + sprite->animPaused = TRUE; } return result; } @@ -5944,6 +6066,11 @@ static bool8 DoJumpInPlaceAnim(struct ObjectEvent *objectEvent, struct Sprite *s bool8 MovementAction_Jump2Down_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = 0; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Down_Step1(objectEvent, sprite); } @@ -5961,6 +6088,11 @@ bool8 MovementAction_Jump2Down_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_Jump2Up_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = 0; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Up_Step1(objectEvent, sprite); } @@ -5978,6 +6110,11 @@ bool8 MovementAction_Jump2Up_Step1(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_Jump2Left_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = 8; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Left_Step1(objectEvent, sprite); } @@ -5995,6 +6132,11 @@ bool8 MovementAction_Jump2Left_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_Jump2Right_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = -8; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Right_Step1(objectEvent, sprite); } @@ -6058,7 +6200,19 @@ bool8 MovementAction_Delay16_Step0(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_WalkFastDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 6) + { + sprite->data[7] = 6; + sprite->animNum = 20; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_SOUTH, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1); return MovementAction_WalkFastDown_Step1(objectEvent, sprite); } @@ -6074,7 +6228,19 @@ bool8 MovementAction_WalkFastDown_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 7) + { + sprite->data[7] = 7; + sprite->animNum = 21; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_NORTH, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1); return MovementAction_WalkFastUp_Step1(objectEvent, sprite); } @@ -6090,7 +6256,19 @@ bool8 MovementAction_WalkFastUp_Step1(struct ObjectEvent *objectEvent, struct Sp bool8 MovementAction_WalkFastLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 8) + { + sprite->data[7] = 8; + sprite->animNum = 22; + sprite->x2 = 8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_WEST, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1); return MovementAction_WalkFastLeft_Step1(objectEvent, sprite); } @@ -6106,7 +6284,19 @@ bool8 MovementAction_WalkFastLeft_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 9) + { + sprite->data[7] = 9; + sprite->animNum = 23; + sprite->x2 = -8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_EAST, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1); return MovementAction_WalkFastRight_Step1(objectEvent, sprite); } @@ -8286,29 +8476,32 @@ void GroundEffect_FlowingWater(struct ObjectEvent *objEvent, struct Sprite *spri StartFieldEffectForObjectEvent(FLDEFF_FEET_IN_FLOWING_WATER, objEvent); } -static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) = { +static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) = { [TRACKS_NONE] = DoTracksGroundEffect_None, [TRACKS_FOOT] = DoTracksGroundEffect_Footprints, [TRACKS_BIKE_TIRE] = DoTracksGroundEffect_BikeTireTracks, + [TRACKS_SLITHER] = DoTracksGroundEffect_SlitherTracks, + [TRACKS_BUG] = DoTracksGroundEffect_FootprintsBug, + [TRACKS_SPOT] = DoTracksGroundEffect_FootprintsSpot, }; void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, FALSE); + sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 0); } void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, TRUE); + sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, 1); } -static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) +static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) { } -static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) +static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) { // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) u16 sandFootprints_FieldEffectData[2] = { @@ -8321,10 +8514,77 @@ static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct gFieldEffectArguments[2] = 149; gFieldEffectArguments[3] = 2; gFieldEffectArguments[4] = objEvent->facingDirection; - FieldEffectStart(sandFootprints_FieldEffectData[isDeepSand]); + FieldEffectStart(sandFootprints_FieldEffectData[a]); } -static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) +static void DoTracksGroundEffect_FootprintsSpot(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +{ + // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) + u16 otherFootprintsA_FieldEffectData[2] = { + FLDEFF_TRACKS_SPOT, + FLDEFF_TRACKS_SPOT + }; + + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = objEvent->facingDirection; + if (Random() % 2 == 0) + PlaySE(159); + if (Random() % 2 == 1) + PlaySE12WithPanning(159, 1); + FieldEffectStart(otherFootprintsA_FieldEffectData[a]); +} + +static void DoTracksGroundEffect_FootprintsBug(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +{ + // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) + u16 otherFootprintsB_FieldEffectData[2] = { + FLDEFF_TRACKS_BUG, + FLDEFF_TRACKS_BUG + }; + + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = objEvent->facingDirection; + if (Random() % 2 == 0) + PlaySE(159); + if (Random() % 2 == 1) + PlaySE12WithPanning(159, 1); + FieldEffectStart(otherFootprintsB_FieldEffectData[a]); +} + +static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +{ + // Specifies which bike track shape to show next. + // For example, when the bike turns from up to right, it will show + // a track that curves to the right. + // Each 4-byte row corresponds to the initial direction of the bike, and + // each byte in that row is for the next direction of the bike in the order + // of down, up, left, right. + static const u8 slitherTracks_Transitions[4][4] = { + 1, 2, 7, 8, + 1, 2, 6, 5, + 5, 8, 3, 4, + 6, 7, 3, 4, + }; + + if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) + { + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = + slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; + FieldEffectStart(FLDEFF_TRACKS_SLITHER); + } +} + +static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) { // Specifies which bike track shape to show next. // For example, when the bike turns from up to right, it will show @@ -8700,11 +8960,11 @@ static const SpriteStepFunc *const sNpcStepFuncTables[] = { }; static const s16 sStepTimes[] = { - [MOVE_SPEED_NORMAL] = ARRAY_COUNT(sStep1Funcs), - [MOVE_SPEED_FAST_1] = ARRAY_COUNT(sStep2Funcs), - [MOVE_SPEED_FAST_2] = ARRAY_COUNT(sStep3Funcs), - [MOVE_SPEED_FASTER] = ARRAY_COUNT(sStep4Funcs), - [MOVE_SPEED_FASTEST] = ARRAY_COUNT(sStep8Funcs), + [MOVE_SPEED_NORMAL] = 16, + [MOVE_SPEED_FAST_1] = 8, + [MOVE_SPEED_FAST_2] = 6, + [MOVE_SPEED_FASTER] = 4, + [MOVE_SPEED_FASTEST] = 2, }; static bool8 NpcTakeStep(struct Sprite *sprite) @@ -9039,7 +9299,7 @@ void TurnVirtualObject(u8 virtualObjId, u8 direction) StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction)); } -void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId) +void SetVirtualObjectGraphics(u8 virtualObjId, u16 graphicsId) { int spriteId = GetVirtualObjectSpriteId(virtualObjId); @@ -9971,3 +10231,28 @@ u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *spr { return TRUE; } + +// NEW +u16 GetMiniStepCount(u8 speed) +{ + return (u16)sStepTimes[speed]; +} + +void RunMiniStep(struct Sprite *sprite, u8 speed, u8 currentFrame) +{ + sNpcStepFuncTables[speed][currentFrame](sprite, sprite->data[3]); +} + +bool8 PlayerIsUnderWaterfall(struct ObjectEvent *objectEvent) +{ + s16 x; + s16 y; + + x = objectEvent->currentCoords.x; + y = objectEvent->currentCoords.y; + MoveCoordsInDirection(DIR_NORTH, &x, &y, 0, 1); + if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y))) + return TRUE; + + return FALSE; +} diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c index a6b558195..5d17cca84 100644 --- a/src/evolution_graphics.c +++ b/src/evolution_graphics.c @@ -92,22 +92,11 @@ static const struct SpriteTemplate sEvoSparkleSpriteTemplate = .callback = SpriteCB_Sparkle_Dummy }; -static const u16 sEvoSparkleMatrices[] = +static const s16 sEvoSparkleMatrices[] = { - 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, - 0x240, 0x200, 0x1C0, 0x180, 0x140, 0x100 -}; - -static const s16 sUnused[] = -{ - -4, 0x10, - -3, 0x30, - -2, 0x50, - -1, 0x70, - 1, 0x70, - 2, 0x50, - 3, 0x30, - 4, 0x10 + 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0, + 0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50, + -1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10 }; static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite) @@ -118,33 +107,30 @@ static void SpriteCB_Sparkle_Dummy(struct Sprite *sprite) static void SetEvoSparklesMatrices(void) { u16 i; - for (i = 0; i < ARRAY_COUNT(sEvoSparkleMatrices); i++) + for (i = 0; i < 12; i++) + { SetOamMatrix(20 + i, sEvoSparkleMatrices[i], 0, 0, sEvoSparkleMatrices[i]); + } } -#define sSpeed data[3] -#define sAmplitude data[5] -#define sTrigIdx data[6] -#define sTimer data[7] - static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite) { if (sprite->y > 8) { u8 matrixNum; - sprite->y = 88 - (sprite->sTimer * sprite->sTimer) / 80; - sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude) / 4; - sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude); - sprite->sTrigIdx += 4; - if (sprite->sTimer & 1) - sprite->sAmplitude--; - sprite->sTimer++; + sprite->y = 88 - (sprite->data[7] * sprite->data[7]) / 80; + sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4; + sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]); + sprite->data[6] += 4; + if (sprite->data[7] & 1) + sprite->data[5]--; + sprite->data[7]++; if (sprite->y2 > 0) sprite->subpriority = 1; else sprite->subpriority = 20; - matrixNum = sprite->sAmplitude / 4 + 20; + matrixNum = sprite->data[5] / 4 + 20; if (matrixNum > 31) matrixNum = 31; sprite->oam.matrixNum = matrixNum; @@ -153,17 +139,17 @@ static void SpriteCB_Sparkle_SpiralUpward(struct Sprite* sprite) DestroySprite(sprite); } -static void CreateSparkle_SpiralUpward(u8 trigIdx) +static void CreateSparkle_SpiralUpward(u8 arg0) { - u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 88, 0); - if (spriteId != MAX_SPRITES) + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0); + if (spriteID != MAX_SPRITES) { - gSprites[spriteId].sAmplitude = 48; - gSprites[spriteId].sTrigIdx = trigIdx; - gSprites[spriteId].sTimer = 0; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].callback = SpriteCB_Sparkle_SpiralUpward; + gSprites[spriteID].data[5] = 48; + gSprites[spriteID].data[6] = arg0; + gSprites[spriteID].data[7] = 0; + gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteID].oam.matrixNum = 31; + gSprites[spriteID].callback = SpriteCB_Sparkle_SpiralUpward; } } @@ -171,85 +157,85 @@ static void SpriteCB_Sparkle_ArcDown(struct Sprite* sprite) { if (sprite->y < 88) { - sprite->y = 8 + (sprite->sTimer * sprite->sTimer) / 5; - sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude) / 4; - sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude); - sprite->sAmplitude = 8 + Sin((u8)(sprite->sTimer * 4), 40); - sprite->sTimer++; + sprite->y = 8 + (sprite->data[7] * sprite->data[7]) / 5; + sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4; + sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]); + sprite->data[5] = 8 + Sin((u8)(sprite->data[7] * 4), 40); + sprite->data[7]++; } else DestroySprite(sprite); } -static void CreateSparkle_ArcDown(u8 trigIdx) +static void CreateSparkle_ArcDown(u8 arg0) { - u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 8, 0); - if (spriteId != MAX_SPRITES) + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0); + if (spriteID != MAX_SPRITES) { - gSprites[spriteId].sAmplitude = 8; - gSprites[spriteId].sTrigIdx = trigIdx; - gSprites[spriteId].sTimer = 0; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 25; - gSprites[spriteId].subpriority = 1; - gSprites[spriteId].callback = SpriteCB_Sparkle_ArcDown; + gSprites[spriteID].data[5] = 8; + gSprites[spriteID].data[6] = arg0; + gSprites[spriteID].data[7] = 0; + gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteID].oam.matrixNum = 25; + gSprites[spriteID].subpriority = 1; + gSprites[spriteID].callback = SpriteCB_Sparkle_ArcDown; } } static void SpriteCB_Sparkle_CircleInward(struct Sprite* sprite) { - if (sprite->sAmplitude > 8) + if (sprite->data[5] > 8) { - sprite->y2 = Sin((u8)sprite->sTrigIdx, sprite->sAmplitude); - sprite->x2 = Cos((u8)sprite->sTrigIdx, sprite->sAmplitude); - sprite->sAmplitude -= sprite->sSpeed; - sprite->sTrigIdx += 4; + sprite->y2 = Sin((u8)(sprite->data[6]), sprite->data[5]); + sprite->x2 = Cos((u8)(sprite->data[6]), sprite->data[5]); + sprite->data[5] -= sprite->data[3]; + sprite->data[6] += 4; } else DestroySprite(sprite); } -static void CreateSparkle_CircleInward(u8 trigIdx, u8 speed) +static void CreateSparkle_CircleInward(u8 arg0, u8 arg1) { - u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 56, 0); - if (spriteId != MAX_SPRITES) + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); + if (spriteID != MAX_SPRITES) { - gSprites[spriteId].sSpeed = speed; - gSprites[spriteId].sAmplitude = 120; - gSprites[spriteId].sTrigIdx = trigIdx; - gSprites[spriteId].sTimer = 0; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].subpriority = 1; - gSprites[spriteId].callback = SpriteCB_Sparkle_CircleInward; + gSprites[spriteID].data[3] = arg1; + gSprites[spriteID].data[5] = 120; + gSprites[spriteID].data[6] = arg0; + gSprites[spriteID].data[7] = 0; + gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteID].oam.matrixNum = 31; + gSprites[spriteID].subpriority = 1; + gSprites[spriteID].callback = SpriteCB_Sparkle_CircleInward; } } static void SpriteCB_Sparkle_Spray(struct Sprite* sprite) { - if (!(sprite->sTimer & 3)) + if (!(sprite->data[7] & 3)) sprite->y++; - if (sprite->sTrigIdx < 128) + if (sprite->data[6] < 128) { u8 matrixNum; - sprite->y2 = -Sin((u8)sprite->sTrigIdx, sprite->sAmplitude); - sprite->x = (DISPLAY_WIDTH / 2) + (sprite->sSpeed * sprite->sTimer) / 3; - sprite->sTrigIdx++; - matrixNum = 31 - (sprite->sTrigIdx * 12 / 128); - if (sprite->sTrigIdx > 64) + sprite->y2 = -Sin((u8)(sprite->data[6]), sprite->data[5]); + sprite->x = 120 + (sprite->data[3] * sprite->data[7]) / 3; + sprite->data[6]++; + matrixNum = 31 - (sprite->data[6] * 12 / 128); + if (sprite->data[6] > 64) sprite->subpriority = 1; else { sprite->invisible = FALSE; sprite->subpriority = 20; - if (sprite->sTrigIdx > 112 && sprite->sTrigIdx & 1) + if (sprite->data[6] > 112 && sprite->data[6] & 1) sprite->invisible = TRUE; } if (matrixNum < 20) matrixNum = 20; sprite->oam.matrixNum = matrixNum; - sprite->sTimer++; + sprite->data[7]++; } else DestroySprite(sprite); @@ -257,16 +243,16 @@ static void SpriteCB_Sparkle_Spray(struct Sprite* sprite) static void CreateSparkle_Spray(u8 id) { - u8 spriteId = CreateSprite(&sEvoSparkleSpriteTemplate, DISPLAY_WIDTH / 2, 56, 0); - if (spriteId != MAX_SPRITES) + u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0); + if (spriteID != MAX_SPRITES) { - gSprites[spriteId].sSpeed = 3 - (Random() % 7); - gSprites[spriteId].sAmplitude = 48 + (Random() & 0x3F); - gSprites[spriteId].sTimer = 0; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.matrixNum = 31; - gSprites[spriteId].subpriority = 20; - gSprites[spriteId].callback = SpriteCB_Sparkle_Spray; + gSprites[spriteID].data[3] = 3 - (Random() % 7); + gSprites[spriteID].data[5] = 48 + (Random() & 0x3F); + gSprites[spriteID].data[7] = 0; + gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteID].oam.matrixNum = 31; + gSprites[spriteID].subpriority = 20; + gSprites[spriteID].callback = SpriteCB_Sparkle_Spray; } } @@ -303,7 +289,7 @@ static void Task_Sparkles_SpiralUpward(u8 taskId) { u8 i; for (i = 0; i < 4; i++) - CreateSparkle_SpiralUpward((gTasks[taskId].tTimer & 120) * 2 + i * 64); + CreateSparkle_SpiralUpward((0x78 & gTasks[taskId].tTimer) * 2 + i * 64); } gTasks[taskId].tTimer++; } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index eb458d39d..bde11ddb5 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -816,7 +816,8 @@ static void Task_EvolutionScene(u8 taskId) DestroyTask(taskId); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sEvoStructPtr); + Free(sEvoStructPtr); + sEvoStructPtr = NULL; FreeAllWindowBuffers(); SetMainCallback2(gCB2_AfterEvolution); } @@ -1222,7 +1223,8 @@ static void Task_TradeEvolutionScene(u8 taskId) if (!IsTextPrinterActive(0)) { DestroyTask(taskId); - FREE_AND_SET_NULL(sEvoStructPtr); + Free(sEvoStructPtr); + sEvoStructPtr = NULL; gTextFlags.useAlternateDownArrow = 0; SetMainCallback2(gCB2_AfterEvolution); } diff --git a/src/field_camera.c b/src/field_camera.c index 9b129e6b2..0a00dcbee 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -212,13 +212,13 @@ void CurrentMapDrawMetatileAt(int x, int y) } } -void DrawDoorMetatileAt(int x, int y, u16 *tiles) +void DrawDoorMetatileAt(int x, int y, u16 *arr) { int offset = MapPosToBgTilemapOffset(&sFieldCameraOffset, x, y); if (offset >= 0) { - DrawMetatile(METATILE_LAYER_TYPE_COVERED, tiles, offset); + DrawMetatile(METATILE_LAYER_TYPE_COVERED, arr, offset); sFieldCameraOffset.copyBGToVRAM = TRUE; } } @@ -404,9 +404,9 @@ void CameraUpdate(void) } gFieldCamera.x += movementSpeedX; - gFieldCamera.x %= 16; + gFieldCamera.x = gFieldCamera.x - 16 * (gFieldCamera.x / 16); gFieldCamera.y += movementSpeedY; - gFieldCamera.y %= 16; + gFieldCamera.y = gFieldCamera.y - 16 * (gFieldCamera.y / 16); if (deltaX != 0 || deltaY != 0) { @@ -437,10 +437,10 @@ void SetCameraPanningCallback(void (*callback)(void)) sFieldCameraPanningCallback = callback; } -void SetCameraPanning(s16 horizontal, s16 vertical) +void SetCameraPanning(s16 a, s16 b) { - sHorizontalCameraPan = horizontal; - sVerticalCameraPan = vertical + 32; + sHorizontalCameraPan = a; + sVerticalCameraPan = b + 32; } void InstallCameraPanAheadCallback(void) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 60cd86bd6..1bcf7b403 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -28,6 +28,7 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "wild_encounter.h" +#include "follow_me.h" #include "constants/event_bg.h" #include "constants/event_objects.h" #include "constants/field_poison.h" @@ -156,10 +157,16 @@ int ProcessPlayerFieldInput(struct FieldInput *input) { IncrementGameStat(GAME_STAT_STEPS); IncrementBirthIslandRockStepCount(); - + if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; } + else if(gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 0x9E); + } + if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; if (input->heldDirection && input->dpadDirection == playerDirection) @@ -307,6 +314,13 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 if (InTrainerHill() == TRUE) script = GetTrainerHillTrainerScript(); + else if (objectEventId == GetFollowerObjectId())//(gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_FOLLOWER) + { + if(gObjectEvents[objectEventId].invisible == FALSE) + script = GetFollowerScriptPointer(); + else + return NULL; + } else script = GetObjectEventScriptPointerByObjectEventId(objectEventId); diff --git a/src/field_door.c b/src/field_door.c index 756d0dabf..988ea615d 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -18,7 +18,7 @@ struct DoorGraphics u8 sound; u8 size; const void *tiles; - const void *palettes; + const void *palette; }; struct DoorAnimFrame @@ -74,7 +74,7 @@ static const u8 sDoorAnimTiles_PokemonLeague[] = INCBIN_U8("graphics/door_anims/ static const u16 sDoorNullPalette20[16] = {}; static const u8 sDoorAnimTiles_Pacifidlog[] = INCBIN_U8("graphics/door_anims/pacifidlog.4bpp"); static const u16 sDoorNullPalette21[16] = {}; -static const u8 sDoorAnimTiles_PetalburgGym[] = INCBIN_U8("graphics/door_anims/petalburg_gym.4bpp"); +static const u8 sDoorAnimTiles_BattleTowerCorridor[] = INCBIN_U8("graphics/door_anims/battle_tower_corridor.4bpp"); static const u16 sDoorNullPalette22[16] = {}; static const u8 sDoorAnimTiles_CyclingRoad[] = INCBIN_U8("graphics/door_anims/cycling_road.4bpp"); static const u16 sDoorNullPalette23[16] = {}; @@ -98,7 +98,7 @@ static const u8 sDoorAnimTiles_BattleTowerOld[] = INCBIN_U8("graphics/door_anims static const u16 sDoorNullPalette32[16] = {}; static const u8 sDoorAnimTiles_BattleTowerElevator[] = INCBIN_U8("graphics/door_anims/battle_tower_elevator.4bpp"); static const u16 sDoorNullPalette33[16] = {}; -static const u8 sDoorAnimTiles_UnusedBattleFrontier[] = INCBIN_U8("graphics/door_anims/unused_battle_frontier.4bpp"); +static const u8 sDoorAnimTiles_34[] = INCBIN_U8("graphics/door_anims/unknown.4bpp"); static const u16 sDoorNullPalette34[16] = {}; static const u8 sDoorAnimTiles_BattleDome[] = INCBIN_U8("graphics/door_anims/battle_dome.4bpp"); static const u16 sDoorNullPalette35[16] = {}; @@ -190,7 +190,7 @@ static const u8 sDoorAnimPalettes_Mauville[] = {7, 7, 7, 7, 7, 7, 7, 7}; static const u8 sDoorAnimPalettes_Verdanturf[] = {6, 6, 5, 5, 5, 5, 5, 5}; static const u8 sDoorAnimPalettes_LilycoveWooden[] = {5, 5, 5, 5, 5, 5, 5, 5}; static const u8 sDoorAnimPalettes_Contest[] = {1, 1, 1, 1, 1, 1, 1, 1}; -static const u8 sDoorAnimPalettes_PetalburgGym[] = {6, 6, 6, 6, 6, 6, 6, 6}; +static const u8 sDoorAnimPalettes_BattleTowerCorridor[] = {6, 6, 6, 6, 6, 6, 6, 6}; static const u8 sDoorAnimPalettes_CyclingRoad[] = {7, 7, 7, 7, 7, 7, 7, 7}; static const u8 sDoorAnimPalettes_LilycoveDeptStore[] = {5, 5, 5, 5, 5, 5, 5, 5}; static const u8 sDoorAnimPalettes_SafariZone[] = {9, 9, 9, 9, 9, 9, 9, 9}; @@ -202,7 +202,7 @@ static const u8 sDoorAnimPalettes_AbandonedShipRoom[] = {7, 7, 7, 7, 7, 7, 7, 7} static const u8 sDoorAnimPalettes_LilycoveDeptStoreElevator[] = {6, 6, 7, 7, 7, 7, 7, 7}; static const u8 sDoorAnimPalettes_BattleTowerOld[] = {9, 9, 9, 9, 9, 9, 9, 9}; static const u8 sDoorAnimPalettes_BattleTowerElevator[] = {7, 7, 7, 7, 7, 7, 7, 7}; -static const u8 sDoorAnimPalettes_UnusedBattleFrontier[] = {9, 9, 9, 9, 9, 9, 9, 9}; +static const u8 sDoorAnimPalettes_34[] = {9, 9, 9, 9, 9, 9, 9, 9}; static const u8 sDoorAnimPalettes_BattleDome[] = {1, 1, 1, 1, 1, 1, 1, 1}; static const u8 sDoorAnimPalettes_BattleFactory[] = {9, 9, 9, 9, 9, 9, 9, 9}; static const u8 sDoorAnimPalettes_BattleTower[] = {0, 0, 0, 0, 0, 0, 0, 0}; @@ -244,7 +244,7 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] = {METATILE_Sootopolis_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_Sootopolis, sDoorAnimPalettes_Sootopolis}, {METATILE_EverGrande_Door_PokemonLeague, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_PokemonLeague, sDoorAnimPalettes_PokemonLeague}, {METATILE_Pacifidlog_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_Pacifidlog, sDoorAnimPalettes_Pacifidlog}, - {METATILE_PetalburgGym_Door, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_PetalburgGym, sDoorAnimPalettes_PetalburgGym}, + {METATILE_BattleFrontier_Door_Corridor, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_BattleTowerCorridor, sDoorAnimPalettes_BattleTowerCorridor}, {METATILE_Mauville_Door_CyclingRoad, DOOR_SOUND_NORMAL, 1, sDoorAnimTiles_CyclingRoad, sDoorAnimPalettes_CyclingRoad}, {METATILE_Lilycove_Door_DeptStore, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_LilycoveDeptStore, sDoorAnimPalettes_LilycoveDeptStore}, {METATILE_Lilycove_Door_SafariZone, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_SafariZone, sDoorAnimPalettes_SafariZone}, @@ -256,9 +256,7 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] = {METATILE_Shop_Door_Elevator, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_LilycoveDeptStoreElevator, sDoorAnimPalettes_LilycoveDeptStoreElevator}, {METATILE_Dewford_Door_BattleTower, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTowerOld, sDoorAnimPalettes_BattleTowerOld}, {METATILE_BattleFrontier_Door_Elevator, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTowerElevator, sDoorAnimPalettes_BattleTowerElevator}, - // The metatile for this door doesn't seem to correspond to a door in any Emerald tileset. Given the surrounding door animations, it was likely cut from the Battle Frontier. - // From the palettes array we know it uses palette 9, and the door's shadow looks correct using either the Battle Tent or Battle Frontier Outside's 9th palette. - {0x3B0, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_UnusedBattleFrontier, sDoorAnimPalettes_UnusedBattleFrontier}, + {0x3B0, /* TODO: Missing metatile ID */ DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_34, sDoorAnimPalettes_34}, {METATILE_BattleFrontierOutsideWest_Door_BattleDome, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleDome, sDoorAnimPalettes_BattleDome}, {METATILE_BattleFrontierOutsideWest_Door_BattleFactory, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleFactory, sDoorAnimPalettes_BattleFactory}, {METATILE_BattleFrontierOutsideEast_Door_BattleTower, DOOR_SOUND_SLIDING, 1, sDoorAnimTiles_BattleTower, sDoorAnimPalettes_BattleTower}, @@ -280,71 +278,52 @@ static const struct DoorGraphics sDoorAnimGraphicsTable[] = {}, }; -// NOTE: The tiles of a door's animation must be copied to VRAM because they are not already part of any given tileset. -// This means that if there are any pre-existing tiles in this copied region that are visible when the door -// animation is played they will be overwritten. -#define DOOR_TILE_START_SIZE1 (NUM_TILES_TOTAL - 8) -#define DOOR_TILE_START_SIZE2 (NUM_TILES_TOTAL - 16) - static void CopyDoorTilesToVram(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frame) { if (gfx->size == 2) - CpuFastCopy(gfx->tiles + frame->offset, (void *)(VRAM + TILE_OFFSET_4BPP(DOOR_TILE_START_SIZE2)), 16 * TILE_SIZE_4BPP); + CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7E00), 0x80); else - CpuFastCopy(gfx->tiles + frame->offset, (void *)(VRAM + TILE_OFFSET_4BPP(DOOR_TILE_START_SIZE1)), 8 * TILE_SIZE_4BPP); + CpuFastSet(gfx->tiles + frame->offset, (void *)(VRAM + 0x7F00), 0x40); } -static void BuildDoorTiles(u16 *tiles, u16 tileNum, const u8 *paletteNums) +static void door_build_blockdef(u16 *a, u16 b, const u8 *c) { int i; - u16 tile; + u16 unk; - // Only the first 4 tiles of each metatile (bottom layer) actually use the door tiles for (i = 0; i < 4; i++) { - tile = *(paletteNums++) << 12; - tiles[i] = tile | (tileNum + i); + unk = *(c++) << 12; + a[i] = unk | (b + i); } - - // The remaining layers are left as tile 0 (with the same palette) for (; i < 8; i++) { - tile = *(paletteNums++) << 12; - tiles[i] = tile; + unk = *(c++) << 12; + a[i] = unk; } } -static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *paletteNums) +static void DrawCurrentDoorAnimFrame(const struct DoorGraphics *gfx, u32 x, u32 y, const u8 *pal) { - u16 tiles[24]; + u16 arr[24]; if (gfx->size == 2) { - // Top left metatile - BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 0, &paletteNums[0]); - DrawDoorMetatileAt(x, y - 1, &tiles[8]); - - // Bottom left metatile - BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 4, &paletteNums[4]); - DrawDoorMetatileAt(x, y, &tiles[8]); - - // Top right metatile - BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 8, &paletteNums[0]); - DrawDoorMetatileAt(x + 1, y - 1, &tiles[8]); - - // Bottom right metatile - BuildDoorTiles(&tiles[8], DOOR_TILE_START_SIZE2 + 12, &paletteNums[4]); - DrawDoorMetatileAt(x + 1, y, &tiles[8]); + door_build_blockdef(&arr[8], 0x3F0, pal); + DrawDoorMetatileAt(x, y - 1, &arr[8]); + door_build_blockdef(&arr[8], 0x3F4, pal + 4); + DrawDoorMetatileAt(x, y, &arr[8]); + door_build_blockdef(&arr[8], 0x3F8, pal); + DrawDoorMetatileAt(x + 1, y - 1, &arr[8]); + door_build_blockdef(&arr[8], 0x3FC, pal + 4); + DrawDoorMetatileAt(x + 1, y, &arr[8]); } else { - // Top metatile - BuildDoorTiles(&tiles[0], DOOR_TILE_START_SIZE1 + 0, &paletteNums[0]); - DrawDoorMetatileAt(x, y - 1, &tiles[0]); - - // Bottom metatile - BuildDoorTiles(&tiles[0], DOOR_TILE_START_SIZE1 + 4, &paletteNums[4]); - DrawDoorMetatileAt(x, y, &tiles[0]); + door_build_blockdef(&arr[0], 0x3F8, pal); + DrawDoorMetatileAt(x, y - 1, &arr[0]); + door_build_blockdef(&arr[0], 0x3FC, pal + 4); + DrawDoorMetatileAt(x, y, &arr[0]); } } @@ -371,9 +350,9 @@ static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame else { CopyDoorTilesToVram(gfx, frame); - DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palettes); + DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palette); if (ShouldUseMultiCorridorDoor()) - DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + MAP_OFFSET, gSpecialVar_0x8005 + MAP_OFFSET, gfx->palettes); + DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + MAP_OFFSET, gSpecialVar_0x8005 + MAP_OFFSET, gfx->palette); } } diff --git a/src/field_effect.c b/src/field_effect.c index 53c075581..04e8ad007 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -26,6 +26,7 @@ #include "trainer_pokemon_sprites.h" #include "trig.h" #include "util.h" +#include "follow_me.h" #include "constants/field_effects.h" #include "constants/event_object_movement.h" #include "constants/metatile_behaviors.h" @@ -39,6 +40,7 @@ EWRAM_DATA u16 gReflectionPaletteBuffer[0x10] = {0}; // Static type declarations +extern void FollowMe_WarpSetEnd(void); static void Task_PokecenterHeal(u8 taskId); static void PokecenterHealEffect_Init(struct Task *); static void PokecenterHealEffect_WaitForBallPlacement(struct Task *); @@ -482,13 +484,13 @@ static const struct Subsprite sSubsprites_HofMonitorBig[] = static const struct SubspriteTable sSubspriteTable_HofMonitorBig = subsprite_table(sSubsprites_HofMonitorBig); -static const union AnimCmd sAnim_Static[] = +const union AnimCmd sAnim_Static[] = { ANIMCMD_FRAME(.imageValue = 0, .duration = 1), ANIMCMD_JUMP(0) }; -static const union AnimCmd sAnim_Flicker[] = +const union AnimCmd sAnim_Flicker[] = { ANIMCMD_FRAME(.imageValue = 0, .duration = 16), ANIMCMD_FRAME(.imageValue = 1, .duration = 16), @@ -502,7 +504,7 @@ static const union AnimCmd sAnim_Flicker[] = }; // Flicker on and off, for the Pokéballs / monitors during the PokéCenter heal effect -static const union AnimCmd *const sAnims_Flicker[] = +const union AnimCmd *const sAnims_Flicker[] = { sAnim_Static, sAnim_Flicker @@ -557,7 +559,7 @@ static const struct SpriteTemplate sSpriteTemplate_HofMonitorSmall = .callback = SpriteCB_HallOfFameMonitor }; -static void (*const sPokecenterHealEffectFuncs[])(struct Task *) = +void (*const sPokecenterHealEffectFuncs[])(struct Task *) = { PokecenterHealEffect_Init, PokecenterHealEffect_WaitForBallPlacement, @@ -565,7 +567,7 @@ static void (*const sPokecenterHealEffectFuncs[])(struct Task *) = PokecenterHealEffect_WaitForSoundAndEnd }; -static void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = +void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = { HallOfFameRecordEffect_Init, HallOfFameRecordEffect_WaitForBallPlacement, @@ -573,7 +575,7 @@ static void (*const sHallOfFameRecordEffectFuncs[])(struct Task *) = HallOfFameRecordEffect_WaitForSoundAndEnd }; -static void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) = +void (*const sPokeballGlowEffectFuncs[])(struct Sprite *) = { PokeballGlowEffect_PlaceBalls, PokeballGlowEffect_TryPlaySe, @@ -599,7 +601,7 @@ static const u8 sPokeballGlowReds[] = {16, 12, 8, 0}; static const u8 sPokeballGlowGreens[] = {16, 12, 8, 0}; static const u8 sPokeballGlowBlues[] = { 0, 0, 0, 0}; -static bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = +bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = { FallWarpEffect_Init, FallWarpEffect_WaitWeather, @@ -610,7 +612,7 @@ static bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) = FallWarpEffect_End, }; -static bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = +bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = { EscalatorWarpOut_Init, EscalatorWarpOut_WaitForPlayer, @@ -620,7 +622,7 @@ static bool8 (*const sEscalatorWarpOutFieldEffectFuncs[])(struct Task *) = EscalatorWarpOut_Down_End, }; -static bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = +bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = { EscalatorWarpIn_Init, EscalatorWarpIn_Down_Init, @@ -631,7 +633,7 @@ static bool8 (*const sEscalatorWarpInFieldEffectFuncs[])(struct Task *) = EscalatorWarpIn_End, }; -static bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = +bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = { WaterfallFieldEffect_Init, WaterfallFieldEffect_ShowMon, @@ -640,14 +642,14 @@ static bool8 (*const sWaterfallFieldEffectFuncs[])(struct Task *, struct ObjectE WaterfallFieldEffect_ContinueRideOrEnd, }; -static bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = +bool8 (*const sDiveFieldEffectFuncs[])(struct Task *) = { DiveFieldEffect_Init, DiveFieldEffect_ShowMon, DiveFieldEffect_TryWarp, }; -static bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = +bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { LavaridgeGymB1FWarpEffect_Init, LavaridgeGymB1FWarpEffect_CameraShake, @@ -657,7 +659,7 @@ static bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct Ob LavaridgeGymB1FWarpEffect_Warp, }; -static bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = +bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { LavaridgeGymB1FWarpExitEffect_Init, LavaridgeGymB1FWarpExitEffect_StartPopOut, @@ -665,7 +667,7 @@ static bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struc LavaridgeGymB1FWarpExitEffect_End, }; -static bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = +bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct ObjectEvent *, struct Sprite *) = { LavaridgeGym1FWarpEffect_Init, LavaridgeGym1FWarpEffect_AshPuff, @@ -674,7 +676,7 @@ static bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct Obj LavaridgeGym1FWarpEffect_Warp, }; -static void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) = +void (*const sEscapeRopeWarpOutEffectFuncs[])(struct Task *) = { EscapeRopeWarpOutEffect_Init, EscapeRopeWarpOutEffect_Spin, @@ -1362,7 +1364,7 @@ static void Task_UseFly(u8 taskId) task->data[0]++; } - + if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) { Overworld_ResetStateAfterFly(); @@ -1541,6 +1543,7 @@ static bool8 FallWarpEffect_End(struct Task *task) UnfreezeObjectEvents(); InstallCameraPanAheadCallback(); DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); + FollowMe_WarpSetEnd(); return FALSE; } @@ -1592,6 +1595,7 @@ static bool8 EscalatorWarpOut_WaitForPlayer(struct Task *task) task->tState++; task->data[2] = 0; task->data[3] = 0; + EscalatorMoveFollower(task->data[1]); if ((u8)task->tGoingUp == FALSE) { task->tState = 4; // jump to EscalatorWarpOut_Down_Ride @@ -1889,6 +1893,7 @@ static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct Ob gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); + FollowMe_WarpSetEnd(); return FALSE; } @@ -2275,6 +2280,31 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task) else if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0) { ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); + + if (gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + switch(objectEvent->facingDirection) + { + case DIR_SOUTH: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 0; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 25); + break; + case DIR_NORTH: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 0; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 26); + break; + case DIR_WEST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 8; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 27); + break; + case DIR_EAST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = -8; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 28); + break; + } + } + if (task->tNumTurns < 12) task->tNumTurns++; task->tSpinDelay = 8 >> (task->tNumTurns >> 2); @@ -2282,7 +2312,7 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task) } } -static void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = { +void (*const sEscapeRopeWarpInEffectFuncs[])(struct Task *) = { EscapeRopeWarpInEffect_Init, EscapeRopeWarpInEffect_Spin }; @@ -2453,7 +2483,7 @@ static void FieldCallback_TeleportWarpIn(void) CreateTask(Task_TeleportWarpIn, 0); } -static void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = { +void (*const sTeleportWarpInFieldEffectFuncs[])(struct Task *) = { TeleportWarpInFieldEffect_Init, TeleportWarpInFieldEffect_SpinEnter, TeleportWarpInFieldEffect_SpinGround @@ -2587,7 +2617,7 @@ bool8 FldEff_FieldMoveShowMonInit(void) return FALSE; } -static void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = { +void (*const sFieldMoveShowMonOutdoorsEffectFuncs[])(struct Task *) = { FieldMoveShowMonOutdoorsEffect_Init, FieldMoveShowMonOutdoorsEffect_LoadGfx, FieldMoveShowMonOutdoorsEffect_CreateBanner, @@ -2755,7 +2785,7 @@ static void LoadFieldMoveOutdoorStreaksTilemap(u16 offs) #define tBgOffset data[4] #define tMonSpriteId data[15] -static void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = { +void (*const sFieldMoveShowMonIndoorsEffectFuncs[])(struct Task *) = { FieldMoveShowMonIndoorsEffect_Init, FieldMoveShowMonIndoorsEffect_LoadGfx, FieldMoveShowMonIndoorsEffect_SlideBannerOn, @@ -2983,7 +3013,7 @@ u8 FldEff_UseSurf(void) return FALSE; } -static void (*const sSurfFieldEffectFuncs[])(struct Task *) = { +void (*const sSurfFieldEffectFuncs[])(struct Task *) = { SurfFieldEffect_Init, SurfFieldEffect_FieldMovePose, SurfFieldEffect_ShowMon, @@ -3163,7 +3193,7 @@ u8 FldEff_UseFly(void) return 0; } -static void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = { +void (*const sFlyOutFieldEffectFuncs[])(struct Task *) = { FlyOutFieldEffect_FieldMovePose, FlyOutFieldEffect_ShowMon, FlyOutFieldEffect_BirdLeaveBall, @@ -3454,7 +3484,7 @@ u8 FldEff_FlyIn(void) return 0; } -static void (*const sFlyInFieldEffectFuncs[])(struct Task *) = { +void (*const sFlyInFieldEffectFuncs[])(struct Task *) = { FlyInFieldEffect_BirdSwoopDown, FlyInFieldEffect_FlyInWithBird, FlyInFieldEffect_JumpOffBird, @@ -3685,7 +3715,7 @@ static void StartEndingDeoxysRockCameraShake(u8 taskId) #undef tEndDelay #undef tEnding -static void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = { +void (*const sDestroyDeoxysRockEffectFuncs[])(s16*, u8) = { DestroyDeoxysRockEffect_CameraShake, DestroyDeoxysRockEffect_RockFragments, DestroyDeoxysRockEffect_WaitAndEnd, diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 7bc4230b0..fdbafd233 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -589,6 +589,60 @@ u32 FldEff_SandFootprints(void) return 0; } +u32 FldEff_TracksBug(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_BUG], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[7] = FLDEFF_TRACKS_BUG; + StartSpriteAnim(sprite, gFieldEffectArguments[4]); + } + return 0; +} + +u32 FldEff_TracksSpot(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_SPOT], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[7] = FLDEFF_TRACKS_SPOT; + StartSpriteAnim(sprite, gFieldEffectArguments[4]); + } + return 0; +} + +u32 FldEff_TracksSlither(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_SLITHER], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[7] = FLDEFF_TRACKS_SLITHER; + StartSpriteAnim(sprite, gFieldEffectArguments[4]); + } + return spriteId; +} + u32 FldEff_DeepSandFootprints(void) { u8 spriteId; diff --git a/src/field_message_box.c b/src/field_message_box.c index 95d0a94c9..74afb5677 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -33,7 +33,7 @@ static void Task_DrawFieldMessage(u8 taskId) task->tState++; break; case 1: - DrawDialogueFrame(0, TRUE); + DrawDialogueFrame(0, 1); task->tState++; break; case 2: diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index a3a6ed342..b08288ffa 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -20,6 +20,7 @@ #include "strings.h" #include "task.h" #include "tv.h" +#include "follow_me.h" #include "wild_encounter.h" #include "constants/abilities.h" #include "constants/event_objects.h" @@ -79,13 +80,13 @@ static bool8 TryPushBoulder(s16, s16, u8); static void CheckAcroBikeCollision(s16, s16, u8, u8 *); static void DoPlayerAvatarTransition(void); -static void PlayerAvatarTransition_Dummy(struct ObjectEvent *); -static void PlayerAvatarTransition_Normal(struct ObjectEvent *); -static void PlayerAvatarTransition_MachBike(struct ObjectEvent *); -static void PlayerAvatarTransition_AcroBike(struct ObjectEvent *); -static void PlayerAvatarTransition_Surfing(struct ObjectEvent *); -static void PlayerAvatarTransition_Underwater(struct ObjectEvent *); -static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *); +static void PlayerAvatarTransition_Dummy(struct ObjectEvent *a); +static void PlayerAvatarTransition_Normal(struct ObjectEvent *a); +static void PlayerAvatarTransition_MachBike(struct ObjectEvent *a); +static void PlayerAvatarTransition_AcroBike(struct ObjectEvent *a); +static void PlayerAvatarTransition_Surfing(struct ObjectEvent *a); +static void PlayerAvatarTransition_Underwater(struct ObjectEvent *a); +static void PlayerAvatarTransition_ReturnToField(struct ObjectEvent *a); static bool8 PlayerAnimIsMultiFrameStationary(void); static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void); @@ -96,51 +97,51 @@ static void PlayerRun(u8); static void PlayerNotOnBikeCollide(u8); static void PlayerNotOnBikeCollideWithFarawayIslandMew(u8); -static void PlayCollisionSoundIfNotFacingWarp(u8); +static void PlayCollisionSoundIfNotFacingWarp(u8 a); static void HideShowWarpArrow(struct ObjectEvent *); static void StartStrengthAnim(u8, u8); -static void Task_PushBoulder(u8); -static bool8 PushBoulder_Start(struct Task *, struct ObjectEvent *, struct ObjectEvent *); -static bool8 PushBoulder_Move(struct Task *, struct ObjectEvent *, struct ObjectEvent *); -static bool8 PushBoulder_End(struct Task *, struct ObjectEvent *, struct ObjectEvent *); +static void Task_PushBoulder(u8 taskId); +static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); +static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static void DoPlayerMatJump(void); -static void DoPlayerAvatarSecretBaseMatJump(u8); -static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *, struct ObjectEvent *); +static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); +static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent *objectEvent); static void DoPlayerMatSpin(void); -static void PlayerAvatar_DoSecretBaseMatSpin(u8); -static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *, struct ObjectEvent *); -static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *, struct ObjectEvent *); -static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *, struct ObjectEvent *); -static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *, struct ObjectEvent *); +static void PlayerAvatar_DoSecretBaseMatSpin(u8 taskId); +static bool8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct ObjectEvent *objectEvent); +static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct ObjectEvent *objectEvent); +static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct ObjectEvent *objectEvent); +static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct ObjectEvent *objectEvent); static void CreateStopSurfingTask(u8); -static void Task_StopSurfingInit(u8); -static void Task_WaitStopSurfing(u8); +static void Task_StopSurfingInit(u8 taskId); +static void Task_WaitStopSurfing(u8 taskId); -static void Task_Fishing(u8); -static u8 Fishing_Init(struct Task *); -static u8 Fishing_GetRodOut(struct Task *); -static u8 Fishing_WaitBeforeDots(struct Task *); -static u8 Fishing_InitDots(struct Task *); -static u8 Fishing_ShowDots(struct Task *); -static u8 Fishing_CheckForBite(struct Task *); -static u8 Fishing_GotBite(struct Task *); -static u8 Fishing_WaitForA(struct Task *); -static u8 Fishing_CheckMoreDots(struct Task *); -static u8 Fishing_MonOnHook(struct Task *); -static u8 Fishing_StartEncounter(struct Task *); -static u8 Fishing_NotEvenNibble(struct Task *); -static u8 Fishing_GotAway(struct Task *); -static u8 Fishing_NoMon(struct Task *); -static u8 Fishing_PutRodAway(struct Task *); -static u8 Fishing_EndNoMon(struct Task *); +static void Task_Fishing(u8 taskId); +static u8 Fishing_Init(struct Task *task); +static u8 Fishing_GetRodOut(struct Task *task); +static u8 Fishing_WaitBeforeDots(struct Task *task); +static u8 Fishing_InitDots(struct Task *task); +static u8 Fishing_ShowDots(struct Task *task); +static u8 Fishing_CheckForBite(struct Task *task); +static u8 Fishing_GotBite(struct Task *task); +static u8 Fishing_WaitForA(struct Task *task); +static u8 Fishing_CheckMoreDots(struct Task *task); +static u8 Fishing_MonOnHook(struct Task *task); +static u8 Fishing_StartEncounter(struct Task *task); +static u8 Fishing_NotEvenNibble(struct Task *task); +static u8 Fishing_GotAway(struct Task *task); +static u8 Fishing_NoMon(struct Task *task); +static u8 Fishing_PutRodAway(struct Task *task); +static u8 Fishing_EndNoMon(struct Task *task); static void AlignFishingAnimationFrames(void); -static u8 TrySpinPlayerForWarp(struct ObjectEvent *, s16 *); +static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *a1); static bool8 (*const sForcedMovementTestFuncs[NUM_FORCED_MOVEMENTS])(u8) = { @@ -638,7 +639,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) } if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_UNDERWATER) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH) - && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0) + && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0 && !FollowerComingThroughDoor()) { FollowerPokeballSparkle(); PlayerRun(direction); @@ -1217,32 +1218,32 @@ void StopPlayerAvatar(void) } } -u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) +u16 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) { return sRivalAvatarGfxIds[state][gender]; } -u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) +u16 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) { return sPlayerAvatarGfxIds[state][gender]; } -u8 GetFRLGAvatarGraphicsIdByGender(u8 gender) +u16 GetFRLGAvatarGraphicsIdByGender(u8 gender) { return sFRLGAvatarGfxIds[gender]; } -u8 GetRSAvatarGraphicsIdByGender(u8 gender) +u16 GetRSAvatarGraphicsIdByGender(u8 gender) { return sRSAvatarGfxIds[gender]; } -u8 GetPlayerAvatarGraphicsIdByStateId(u8 state) +u16 GetPlayerAvatarGraphicsIdByStateId(u8 state) { return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender); } -u8 unref_GetRivalAvatarGenderByGraphicsId(u8 gfxId) +u8 unref_GetRivalAvatarGenderByGraphicsId(u16 gfxId) { switch (gfxId) { @@ -1260,7 +1261,7 @@ u8 unref_GetRivalAvatarGenderByGraphicsId(u8 gfxId) } } -u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId) +u8 GetPlayerAvatarGenderByGraphicsId(u16 gfxId) { switch (gfxId) { @@ -1329,7 +1330,7 @@ void SetPlayerAvatarStateMask(u8 flags) gPlayerAvatar.flags |= flags; } -static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) +static u8 GetPlayerAvatarStateTransitionByGraphicsId(u16 graphicsId, u8 gender) { u8 i; @@ -1341,7 +1342,7 @@ static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) return PLAYER_AVATAR_FLAG_ON_FOOT; } -u8 GetPlayerAvatarGraphicsIdByCurrentState(void) +u16 GetPlayerAvatarGraphicsIdByCurrentState(void) { u8 i; u8 flags = gPlayerAvatar.flags; @@ -1354,7 +1355,7 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void) return 0; } -void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 transitionFlag) +void SetPlayerAvatarExtraStateTransition(u16 graphicsId, u8 transitionFlag) { u8 stateFlag = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); @@ -1392,6 +1393,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.spriteId = objectEvent->spriteId; gPlayerAvatar.gender = gender; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_CONTROLLABLE | PLAYER_AVATAR_FLAG_ON_FOOT); + CreateFollowerAvatar(); } void SetPlayerInvisibility(bool8 invisible) @@ -1450,68 +1452,68 @@ static void HideShowWarpArrow(struct ObjectEvent *objectEvent) /* Strength */ -#define tState data[0] -#define tBoulderObjId data[1] -#define tDirection data[2] - -static void StartStrengthAnim(u8 objectEventId, u8 direction) +static void StartStrengthAnim(u8 a, u8 b) { u8 taskId = CreateTask(Task_PushBoulder, 0xFF); - gTasks[taskId].tBoulderObjId = objectEventId; - gTasks[taskId].tDirection = direction; + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = b; Task_PushBoulder(taskId); } static void Task_PushBoulder(u8 taskId) { - while (sPushBoulderFuncs[gTasks[taskId].tState](&gTasks[taskId], + while (sPushBoulderFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], - &gObjectEvents[gTasks[taskId].tBoulderObjId])) + &gObjectEvents[gTasks[taskId].data[1]])) ; } -static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder) +static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) { ScriptContext2_Enable(); gPlayerAvatar.preventStep = TRUE; - task->tState++; + task->data[0]++; return FALSE; } -static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder) +static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) { - if (ObjectEventIsHeldMovementActive(player)) - ObjectEventClearHeldMovementIfFinished(player); - - if (ObjectEventIsHeldMovementActive(boulder)) - ObjectEventClearHeldMovementIfFinished(boulder); - - if (!ObjectEventIsMovementOverridden(player) - && !ObjectEventIsMovementOverridden(boulder)) + if (ObjectEventIsHeldMovementActive(playerObject)) { - ObjectEventClearHeldMovementIfFinished(player); - ObjectEventClearHeldMovementIfFinished(boulder); - ObjectEventSetHeldMovement(player, GetWalkInPlaceNormalMovementAction((u8)task->tDirection)); - ObjectEventSetHeldMovement(boulder, GetWalkSlowMovementAction((u8)task->tDirection)); - gFieldEffectArguments[0] = boulder->currentCoords.x; - gFieldEffectArguments[1] = boulder->currentCoords.y; - gFieldEffectArguments[2] = boulder->previousElevation; - gFieldEffectArguments[3] = gSprites[boulder->spriteId].oam.priority; + ObjectEventClearHeldMovementIfFinished(playerObject); + } + + if (ObjectEventIsHeldMovementActive(strengthObject)) + { + ObjectEventClearHeldMovementIfFinished(strengthObject); + } + + if (!ObjectEventIsMovementOverridden(playerObject) + && !ObjectEventIsMovementOverridden(strengthObject)) + { + ObjectEventClearHeldMovementIfFinished(playerObject); + ObjectEventClearHeldMovementIfFinished(strengthObject); + ObjectEventSetHeldMovement(playerObject, GetWalkInPlaceNormalMovementAction((u8)task->data[2])); + ObjectEventSetHeldMovement(strengthObject, GetWalkSlowMovementAction((u8)task->data[2])); + gFieldEffectArguments[0] = strengthObject->currentCoords.x; + gFieldEffectArguments[1] = strengthObject->currentCoords.y; + gFieldEffectArguments[2] = strengthObject->previousElevation; + gFieldEffectArguments[3] = gSprites[strengthObject->spriteId].oam.priority; FieldEffectStart(FLDEFF_DUST); PlaySE(SE_M_STRENGTH); - task->tState++; + task->data[0]++; } return FALSE; } -static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *player, struct ObjectEvent *boulder) +static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) { - if (ObjectEventCheckHeldMovementStatus(player) - && ObjectEventCheckHeldMovementStatus(boulder)) + if (ObjectEventCheckHeldMovementStatus(playerObject) + && ObjectEventCheckHeldMovementStatus(strengthObject)) { - ObjectEventClearHeldMovementIfFinished(player); - ObjectEventClearHeldMovementIfFinished(boulder); + ObjectEventClearHeldMovementIfFinished(playerObject); + ObjectEventClearHeldMovementIfFinished(strengthObject); gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroyTask(FindTaskIdByFunc(Task_PushBoulder)); @@ -1519,10 +1521,6 @@ static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *player, stru return FALSE; } -#undef tState -#undef tBoulderObjId -#undef tDirection - /* Some field effect */ static void DoPlayerMatJump(void) diff --git a/src/field_region_map.c b/src/field_region_map.c index adf5e4ed7..26ae736a6 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -192,7 +192,10 @@ static void FieldUpdateRegionMap(void) { FreeRegionMapIconResources(); SetMainCallback2(sFieldRegionMapHandler->callback); - TRY_FREE_AND_SET_NULL(sFieldRegionMapHandler); + if (sFieldRegionMapHandler != NULL) + { + FREE_AND_SET_NULL(sFieldRegionMapHandler); + } FreeAllWindowBuffers(); } break; diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 77553542a..119f20dea 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -27,6 +27,7 @@ #include "sound.h" #include "start_menu.h" #include "task.h" +#include "follow_me.h" #include "text.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" @@ -42,8 +43,6 @@ static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); static bool32 WaitForWeatherFadeIn(void); static void Task_SpinEnterWarp(u8 taskId); -static void Task_WarpAndLoadMap(u8 taskId); -static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); // data[0] is used universally by tasks in this file as a state for switches @@ -53,7 +52,7 @@ static void Task_EnableScriptAfterMusicFade(u8 taskId); static const u16 sFlashLevelToRadius[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelToRadius) - 1; -static const struct ScanlineEffectParams sFlashEffectParams = +const struct ScanlineEffectParams sFlashEffectParams = { ®_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, @@ -111,7 +110,7 @@ void WarpFadeOutScreen(void) } } -static void SetPlayerVisibility(bool8 visible) +void SetPlayerVisibility(bool8 visible) { SetPlayerInvisibility(!visible); } @@ -275,6 +274,7 @@ void FieldCB_DefaultWarpExit(void) Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); SetUpWarpExitTask(); + FollowMe_WarpSetEnd(); ScriptContext2_Enable(); } @@ -323,6 +323,7 @@ static void Task_ExitDoor(u8 taskId) switch (task->tState) { case 0: + HideFollower(); SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); @@ -352,6 +353,8 @@ static void Task_ExitDoor(u8 taskId) case 3: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { + FollowMe_SetIndicatorToComeOutDoor(); + FollowMe_WarpSetEnd(); UnfreezeObjectEvents(); task->tState = 4; } @@ -372,6 +375,7 @@ static void Task_ExitNonAnimDoor(u8 taskId) switch (task->tState) { case 0: + HideFollower(); SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); @@ -390,6 +394,8 @@ static void Task_ExitNonAnimDoor(u8 taskId) case 2: if (IsPlayerStandingStill()) { + FollowMe_SetIndicatorToComeOutDoor(); + FollowMe_WarpSetEnd(); UnfreezeObjectEvents(); task->tState = 3; } @@ -644,7 +650,7 @@ void ReturnFromLinkRoom(void) CreateTask(Task_ReturnToWorldFromLinkRoom, 10); } -static void Task_WarpAndLoadMap(u8 taskId) +void Task_WarpAndLoadMap(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -675,59 +681,6 @@ static void Task_WarpAndLoadMap(u8 taskId) } } -static void Task_DoDoorWarp(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s16 *x = &task->data[2]; - s16 *y = &task->data[3]; - - switch (task->tState) - { - case 0: - FreezeObjectEvents(); - PlayerGetDestCoords(x, y); - PlaySE(GetDoorSoundEffect(*x, *y - 1)); - task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); - task->tState = 1; - break; - case 1: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - u8 objEventId; - objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); - ObjectEventClearHeldMovementIfActive(&gObjectEvents[objEventId]); - objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); - ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_UP); - task->tState = 2; - } - break; - case 2: - if (IsPlayerStandingStill()) - { - u8 objEventId; - task->data[1] = FieldAnimateDoorClose(*x, *y - 1); - objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]); - SetPlayerVisibility(FALSE); - task->tState = 3; - } - break; - case 3: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - task->tState = 4; - } - break; - case 4: - TryFadeOutOldMapMusic(); - WarpFadeOutScreen(); - PlayRainStoppingSoundEffect(); - task->tState = 0; - task->func = Task_WarpAndLoadMap; - break; - } -} - static void Task_DoContestHallWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1011,6 +964,7 @@ static void Task_SpinEnterWarp(u8 taskId) case 1: if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE) { + FollowMe_WarpSetEnd(); UnfreezeObjectEvents(); ScriptContext2_Disable(); DestroyTask(taskId); diff --git a/src/field_special_scene.c b/src/field_special_scene.c index 749346728..d8b9eb05d 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -19,19 +19,7 @@ #include "constants/songs.h" #include "constants/metatile_labels.h" -// Most of the boxes in the moving truck are map tiles, with the -// exception of three boxes that are map events that jostle around -// while the truck is driving. In addition, their sprite's placement -// is slightly offset to make them look less perfectly stacked. -// Box 1 (LOCALID_TRUCK_BOX_TOP) -#define BOX1_X_OFFSET 3 -#define BOX1_Y_OFFSET 3 -// Box 2 (LOCALID_TRUCK_BOX_BOTTOM_L) -#define BOX2_X_OFFSET 0 -#define BOX2_Y_OFFSET -3 -// Box 3 (LOCALID_TRUCK_BOX_BOTTOM_R) -#define BOX3_X_OFFSET -3 -#define BOX3_Y_OFFSET 0 +#define SECONDS(value) ((signed) (60.0 * value + 0.5)) // porthole states enum @@ -42,7 +30,8 @@ enum EXIT_PORTHOLE, }; -static const s8 sTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0}; +//. rodata +static const s8 gTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0}; static const u8 sSSTidalSailEastMovementScript[] = { @@ -56,194 +45,175 @@ static const u8 sSSTidalSailWestMovementScript[] = MOVEMENT_ACTION_STEP_END }; +// .text static void Task_Truck3(u8); -static s16 GetTruckCameraBobbingY(int time) +s16 GetTruckCameraBobbingY(int a1) { - if (!(time % 120)) + if (!(a1 % 120)) return -1; - else if ((time % 10) <= 4) + else if ((a1 % 10) <= 4) return 1; return 0; } -// Determines the frequency that the truck boxes bounce at. -// The return value of this function is multiplied and added -// to the boxes resting y offset, the result of which is that -// when it returns 0 they remain vertically still and when it -// returns -1 they jump upward. -// Box 1 has 30 added to the time so it jumps earlier, and -// box 2 has the return value multiplied by less, so it doesn't -// jump as high. -static s16 GetTruckBoxYMovement(int time) +s16 GetTruckBoxMovement(int a1) // for the box movement? { - if (!((time + 120) % 180)) + if (!((a1 + 120) % 180)) return -1; return 0; } -#define tTimer data[0] - -static void Task_Truck1(u8 taskId) +void Task_Truck1(u8 taskId) { s16 *data = gTasks[taskId].data; s16 cameraXpan = 0, cameraYpan = 0; - s16 yBox1, yBox2, yBox3; + s16 box1, box2, box3; - yBox1 = GetTruckBoxYMovement(tTimer + 30) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + yBox1); - yBox2 = GetTruckBoxYMovement(tTimer) * 2; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + yBox2); - yBox3 = GetTruckBoxYMovement(tTimer) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + yBox3); + box1 = GetTruckBoxMovement(data[0] + 30) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); + box2 = GetTruckBoxMovement(data[0]) * 2; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); + box3 = GetTruckBoxMovement(data[0]) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); - // Arbitrary timer limit that won't be reached - if (++tTimer == 30000) - tTimer = 0; + if (++data[0] == SECONDS(500)) // this will never run + data[0] = 0; // reset the timer if it gets stuck. - cameraYpan = GetTruckCameraBobbingY(tTimer); + cameraYpan = GetTruckCameraBobbingY(data[0]); SetCameraPanning(cameraXpan, cameraYpan); } -#undef tTimer - -#define tTimerHorizontal data[0] -#define tMoveStep data[1] -#define tTimerVertical data[2] - -static void Task_Truck2(u8 taskId) +void Task_Truck2(u8 taskId) { s16 *data = gTasks[taskId].data; - s16 cameraYpan, cameraXpan; - s16 yBox1, yBox2, yBox3; + s16 cameraYpan; + s16 cameraXpan; + s16 box1; + s16 box2; + s16 box3; - tTimerHorizontal++; - tTimerVertical++; + data[0]++; + data[2]++; - if (tTimerHorizontal > 5) + if (data[0] > 5) { - tTimerHorizontal = 0; - tMoveStep++; + data[0] = 0; + data[1]++; } - if ((u16)tMoveStep == ARRAY_COUNT(sTruckCamera_HorizontalTable)) + if ((u16)data[1] == 19) { - // Never reached, the task function is changed below before finishing the table DestroyTask(taskId); } else { - if (sTruckCamera_HorizontalTable[tMoveStep] == 2) + if (gTruckCamera_HorizontalTable[data[1]] == 2) gTasks[taskId].func = Task_Truck3; - cameraXpan = sTruckCamera_HorizontalTable[tMoveStep]; - cameraYpan = GetTruckCameraBobbingY(tTimerVertical); + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; + cameraYpan = GetTruckCameraBobbingY(data[2]); SetCameraPanning(cameraXpan, cameraYpan); - yBox1 = GetTruckBoxYMovement(tTimerVertical + 30) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + yBox1); - yBox2 = GetTruckBoxYMovement(tTimerVertical) * 2; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + yBox2); - yBox3 = GetTruckBoxYMovement(tTimerVertical) * 4; - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + yBox3); + box1 = GetTruckBoxMovement(data[2] + 30) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); + box2 = GetTruckBoxMovement(data[2]) * 2; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); + box3 = GetTruckBoxMovement(data[2]) * 4; + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); } } static void Task_Truck3(u8 taskId) { s16 *data = gTasks[taskId].data; - s16 cameraXpan, cameraYpan; + s16 cameraXpan; + s16 cameraYpan; - tTimerHorizontal++; + data[0]++; - if (tTimerHorizontal > 5) + if (data[0] > 5) { - tTimerHorizontal = 0; - tMoveStep++; + data[0] = 0; + data[1]++; } - if ((u16)tMoveStep == ARRAY_COUNT(sTruckCamera_HorizontalTable)) + if ((u16)data[1] == 19) { DestroyTask(taskId); } else { - cameraXpan = sTruckCamera_HorizontalTable[tMoveStep]; + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; cameraYpan = 0; - SetCameraPanning(cameraXpan, cameraYpan); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET - cameraXpan, BOX1_Y_OFFSET + cameraYpan); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET - cameraXpan, BOX2_Y_OFFSET + cameraYpan); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET - cameraXpan, BOX3_Y_OFFSET + cameraYpan); + SetCameraPanning(cameraXpan, 0); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan); } } -#undef tTimerHorizontal -#undef tMoveStep -#undef tTimerVertical - -#define tState data[0] -#define tTimer data[1] -#define tTaskId1 data[2] -#define tTaskId2 data[3] - -static void Task_HandleTruckSequence(u8 taskId) +void Task_HandleTruckSequence(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (tState) + switch (data[0]) { + /* + Each case has a timer which is handled with data[1], incrementing + until it reaches the if function's condition, which sets the next task up. + */ case 0: - tTimer++; - if (tTimer == 90) + data[1]++; + if (data[1] == SECONDS(1.5)) { SetCameraPanningCallback(NULL); - tTimer = 0; - tTaskId1 = CreateTask(Task_Truck1, 0xA); - tState = 1; + data[1] = 0; // reset the timer. + data[2] = CreateTask(Task_Truck1, 0xA); + data[0] = 1; // run the next case. PlaySE(SE_TRUCK_MOVE); } break; case 1: - tTimer++; - if (tTimer == 150) + data[1]++; + if (data[1] == SECONDS(2.5)) { FadeInFromBlack(); - tTimer = 0; - tState = 2; + data[1] = 0; + data[0] = 2; } break; case 2: - tTimer++; - if (!gPaletteFade.active && tTimer > 300) + data[1]++; + if (!gPaletteFade.active && data[1] > SECONDS(5)) { - tTimer = 0; - DestroyTask(tTaskId1); - tTaskId2 = CreateTask(Task_Truck2, 0xA); - tState = 3; + data[1] = 0; + DestroyTask(data[2]); + data[3] = CreateTask(Task_Truck2, 0xA); + data[0] = 3; PlaySE(SE_TRUCK_STOP); } break; case 3: - if (!gTasks[tTaskId2].isActive) + if (!gTasks[data[3]].isActive) // is Truck2 no longer active (is Truck3 active?) { - // Task_Truck2 / Task_Truck3 has finished InstallCameraPanAheadCallback(); - tTimer = 0; - tState = 4; + data[1] = 0; + data[0] = 4; } break; case 4: - tTimer++; - if (tTimer == 90) + data[1]++; + if (data[1] == 90) { PlaySE(SE_TRUCK_UNLOAD); - tTimer = 0; - tState = 5; + data[1] = 0; + data[0] = 5; } break; case 5: - tTimer++; - if (tTimer == 120) + data[1]++; + if (data[1] == 120) { MapGridSetMetatileIdAt(4 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Top); MapGridSetMetatileIdAt(4 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_InsideOfTruck_ExitLight_Mid); @@ -272,9 +242,9 @@ void EndTruckSequence(u8 taskId) { if (!FuncIsActiveTask(Task_HandleTruckSequence)) { - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX1_X_OFFSET, BOX1_Y_OFFSET); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX2_X_OFFSET, BOX2_Y_OFFSET); - SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, BOX3_X_OFFSET, BOX3_Y_OFFSET); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3); + SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0); } } @@ -289,7 +259,7 @@ bool8 TrySetPortholeWarpDestination(void) } else { - SetWarpDestination(mapGroup, mapNum, WARP_ID_NONE, x, y); + SetWarpDestination(mapGroup, mapNum, -1, x, y); return TRUE; } } diff --git a/src/field_specials.c b/src/field_specials.c index 4ed2a2e03..370d5136c 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -90,44 +90,44 @@ void SetPlayerGotFirstFans(void); u16 GetNumFansOfPlayerInTrainerFanClub(void); static void RecordCyclingRoadResults(u32, u8); -static void LoadLinkPartnerObjectEventSpritePalette(u8, u8, u8); -static void Task_PetalburgGymSlideOpenRoomDoors(u8); -static void PetalburgGymSetDoorMetatiles(u8, u16); +static void LoadLinkPartnerObjectEventSpritePalette(u16 graphicsId, u8 localEventId, u8 paletteNum); +static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId); +static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId); static void Task_PCTurnOnEffect(u8); static void PCTurnOnEffect_0(struct Task *); static void PCTurnOnEffect_1(s16, s8, s8); static void PCTurnOffEffect(void); static void Task_LotteryCornerComputerEffect(u8); static void LotteryCornerComputerEffect(struct Task *); -static void Task_ShakeCamera(u8); -static void StopCameraShake(u8); -static void Task_MoveElevator(u8); -static void MoveElevatorWindowLights(u16, bool8); -static void Task_MoveElevatorWindowLights(u8); -static void Task_ShowScrollableMultichoice(u8); -static void FillFrontierExchangeCornerWindowAndItemIcon(u16, u16); -static void ShowBattleFrontierTutorWindow(u8, u16); +static void Task_ShakeCamera(u8 taskId); +static void StopCameraShake(u8 taskId); +static void Task_MoveElevator(u8 taskId); +static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending); +static void Task_MoveElevatorWindowLights(u8 taskId); +static void Task_ShowScrollableMultichoice(u8 taskId); +static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection); +static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection); static void InitScrollableMultichoice(void); -static void ScrollableMultichoice_ProcessInput(u8); -static void ScrollableMultichoice_UpdateScrollArrows(u8); -static void ScrollableMultichoice_MoveCursor(s32, bool8, struct ListMenu *); -static void HideFrontierExchangeCornerItemIcon(u16, u16); -static void ShowBattleFrontierTutorMoveDescription(u8, u16); -static void CloseScrollableMultichoice(u8); -static void ScrollableMultichoice_RemoveScrollArrows(u8); -static void Task_ScrollableMultichoice_WaitReturnToList(u8); -static void Task_ScrollableMultichoice_ReturnToList(u8); -static void ShowFrontierExchangeCornerItemIcon(u16); -static void Task_DeoxysRockInteraction(u8); -static void ChangeDeoxysRockLevel(u8); -static void WaitForDeoxysRockMovement(u8); -static void Task_LinkRetireStatusWithBattleTowerPartner(u8); -static void Task_LoopWingFlapSE(u8); -static void Task_CloseBattlePikeCurtain(u8); +static void ScrollableMultichoice_ProcessInput(u8 taskId); +static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId); +static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused); +static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection); +static void CloseScrollableMultichoice(u8 taskId); +static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId); +static void Task_ScrollableMultichoice_WaitReturnToList(u8 taskId); +static void Task_ScrollableMultichoice_ReturnToList(u8 taskId); +static void ShowFrontierExchangeCornerItemIcon(u16 item); +static void Task_DeoxysRockInteraction(u8 taskId); +static void ChangeDeoxysRockLevel(u8 a0); +static void WaitForDeoxysRockMovement(u8 taskId); +static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId); +static void Task_LoopWingFlapSE(u8 taskId); +static void Task_CloseBattlePikeCurtain(u8 taskId); static u8 DidPlayerGetFirstFans(void); static void SetInitialFansOfPlayer(void); static u16 PlayerGainRandomTrainerFan(void); -static void BufferFanClubTrainerName_(struct LinkBattleRecords *, u8, u8); +static void BufferFanClubTrainerName_(struct LinkBattleRecords *linkRecords, u8 a, u8 b); void Special_ShowDiploma(void) { @@ -502,7 +502,7 @@ void SpawnLinkPartnerObjectEvent(void) }; u8 myLinkPlayerNumber; u8 playerFacingDirection; - u8 linkSpriteId; + u16 linkSpriteId; u8 i; myLinkPlayerNumber = GetMultiplayerId(); @@ -563,7 +563,7 @@ void SpawnLinkPartnerObjectEvent(void) } } -static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum) +static void LoadLinkPartnerObjectEventSpritePalette(u16 graphicsId, u8 localEventId, u8 paletteNum) { u8 adjustedPaletteNum; // Note: This temp var is necessary; paletteNum += 6 doesn't match. @@ -1497,6 +1497,21 @@ u8 GetLeadMonIndex(void) return 0; } +u8 GetLeadMonNotFaintedIndex(void) +{ + u8 i; + u8 partyCount = CalculatePlayerPartyCount(); + for(i = 0; i < partyCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != 0 + && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) + { + return i; + } + } + return 0; +} + u16 ScriptGetPartyMonSpecies(void) { return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL); diff --git a/src/field_weather.c b/src/field_weather.c index 31cd4abf3..dfd96ee2b 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -65,7 +65,7 @@ static const u8 *sPaletteGammaTypes; // The drought weather effect uses a precalculated color lookup table. Presumably this // is because the underlying color shift calculation is slow. -static const u16 sDroughtWeatherColors[][0x1000] = { +const u16 sDroughtWeatherColors[][0x1000] = { INCBIN_U16("graphics/weather/drought/colors_0.bin"), INCBIN_U16("graphics/weather/drought/colors_1.bin"), INCBIN_U16("graphics/weather/drought/colors_2.bin"), @@ -859,10 +859,10 @@ void LoadCustomWeatherSpritePalette(const struct SpritePalette *palette) UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(palette->tag)); } -static void LoadDroughtWeatherPalette(u8 *palsIndex, u8 *palsOffset) +static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *a1) { - *palsIndex = 0x20; - *palsOffset = 0x20; + *gammaIndexPtr = 0x20; + *a1 = 0x20; } void ResetDroughtWeatherPaletteLoading(void) diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index bd6b9497d..cefe0da55 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -14,9 +14,11 @@ #include "trig.h" #include "gpu_regs.h" -EWRAM_DATA static u8 sCurrentAbnormalWeather = 0; -EWRAM_DATA static u16 sUnusedWeatherRelated = 0; +// EWRAM +EWRAM_DATA static u8 gCurrentAbnormalWeather = 0; +EWRAM_DATA static u16 gUnusedWeatherRelated = 0; +// CONST const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal"); const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal"); const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp"); @@ -1819,7 +1821,7 @@ static void UpdateFogDiagonalMovement(void) gWeatherPtr->fogDPosY = gSpriteCoordOffsetY + gWeatherPtr->fogDYOffset; } -static const struct SpriteSheet sFogDiagonalSpriteSheet = +static const struct SpriteSheet gFogDiagonalSpriteSheet = { .data = gWeatherFogDiagonalTiles, .size = sizeof(gWeatherFogDiagonalTiles), @@ -1874,7 +1876,7 @@ static void CreateFogDiagonalSprites(void) if (!gWeatherPtr->fogDSpritesCreated) { - fogDiagonalSpriteSheet = sFogDiagonalSpriteSheet; + fogDiagonalSpriteSheet = gFogDiagonalSpriteSheet; LoadSpriteSheet(&fogDiagonalSpriteSheet); LoadCustomWeatherSpritePalette(&sFogSpritePalette); for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++) @@ -2432,39 +2434,34 @@ static void UpdateBubbleSprite(struct Sprite *sprite) //------------------------------------------------------------------------------ // Unused function. -static void UnusedSetCurrentAbnormalWeather(u32 weather, u32 unknown) +static void UnusedSetCurrentAbnormalWeather(u32 a0, u32 a1) { - sCurrentAbnormalWeather = weather; - sUnusedWeatherRelated = unknown; + gCurrentAbnormalWeather = a0; + gUnusedWeatherRelated = a1; } -#define tState data[0] -#define tWeatherA data[1] -#define tWeatherB data[2] -#define tDelay data[15] - static void Task_DoAbnormalWeather(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (tState) + switch (data[0]) { case 0: - if (tDelay-- <= 0) + if (data[15]-- <= 0) { - SetNextWeather(tWeatherA); - sCurrentAbnormalWeather = tWeatherA; - tDelay = 600; - tState++; + SetNextWeather(data[1]); + gCurrentAbnormalWeather = data[1]; + data[15] = 600; + data[0]++; } break; case 1: - if (tDelay-- <= 0) + if (data[15]-- <= 0) { - SetNextWeather(tWeatherB); - sCurrentAbnormalWeather = tWeatherB; - tDelay = 600; - tState = 0; + SetNextWeather(data[2]); + gCurrentAbnormalWeather = data[2]; + data[15] = 600; + data[0] = 0; } break; } @@ -2475,33 +2472,25 @@ static void CreateAbnormalWeatherTask(void) u8 taskId = CreateTask(Task_DoAbnormalWeather, 0); s16 *data = gTasks[taskId].data; - tDelay = 600; - if (sCurrentAbnormalWeather == WEATHER_DOWNPOUR) + data[15] = 600; + if (gCurrentAbnormalWeather == WEATHER_DOWNPOUR) { - // Currently Downpour, next will be Drought - tWeatherA = WEATHER_DROUGHT; - tWeatherB = WEATHER_DOWNPOUR; + data[1] = WEATHER_DROUGHT; + data[2] = WEATHER_DOWNPOUR; } - else if (sCurrentAbnormalWeather == WEATHER_DROUGHT) + else if (gCurrentAbnormalWeather == WEATHER_DROUGHT) { - // Currently Drought, next will be Downpour - tWeatherA = WEATHER_DOWNPOUR; - tWeatherB = WEATHER_DROUGHT; + data[1] = WEATHER_DOWNPOUR; + data[2] = WEATHER_DROUGHT; } else { - // Default to starting with Downpour - sCurrentAbnormalWeather = WEATHER_DOWNPOUR; - tWeatherA = WEATHER_DROUGHT; - tWeatherB = WEATHER_DOWNPOUR; + gCurrentAbnormalWeather = WEATHER_DOWNPOUR; + data[1] = WEATHER_DROUGHT; + data[2] = WEATHER_DOWNPOUR; } } -#undef tState -#undef tWeatherA -#undef tWeatherB -#undef tDelay - static u8 TranslateWeatherNum(u8); static void UpdateRainCounter(u8, u8); @@ -2544,13 +2533,13 @@ void DoCurrentWeather(void) { if (!FuncIsActiveTask(Task_DoAbnormalWeather)) CreateAbnormalWeatherTask(); - weather = sCurrentAbnormalWeather; + weather = gCurrentAbnormalWeather; } else { if (FuncIsActiveTask(Task_DoAbnormalWeather)) DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather)); - sCurrentAbnormalWeather = WEATHER_DOWNPOUR; + gCurrentAbnormalWeather = WEATHER_DOWNPOUR; } SetNextWeather(weather); } @@ -2563,13 +2552,13 @@ void ResumePausedWeather(void) { if (!FuncIsActiveTask(Task_DoAbnormalWeather)) CreateAbnormalWeatherTask(); - weather = sCurrentAbnormalWeather; + weather = gCurrentAbnormalWeather; } else { if (FuncIsActiveTask(Task_DoAbnormalWeather)) DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather)); - sCurrentAbnormalWeather = WEATHER_DOWNPOUR; + gCurrentAbnormalWeather = WEATHER_DOWNPOUR; } SetCurrentAndNextWeather(weather); } diff --git a/src/fieldmap.c b/src/fieldmap.c index a02355e72..4dbf981cf 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -25,10 +25,10 @@ struct ConnectionFlags u8 east:1; }; -EWRAM_DATA static u16 sBackupMapData[MAX_MAP_DATA_SIZE] = {0}; +EWRAM_DATA static u16 gBackupMapData[MAX_MAP_DATA_SIZE] = {0}; EWRAM_DATA struct MapHeader gMapHeader = {0}; EWRAM_DATA struct Camera gCamera = {0}; -EWRAM_DATA static struct ConnectionFlags sMapConnectionFlags = {0}; +EWRAM_DATA static struct ConnectionFlags gMapConnectionFlags = {0}; EWRAM_DATA static u32 sFiller = 0; // without this, the next file won't align properly struct BackupMapLayout gBackupMapLayout; @@ -87,14 +87,14 @@ void InitMapFromSavedGame(void) void InitBattlePyramidMap(bool8 setPlayerPosition) { - CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData)); - GenerateBattlePyramidFloorLayout(sBackupMapData, setPlayerPosition); + CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData)); + GenerateBattlePyramidFloorLayout(gBackupMapData, setPlayerPosition); } void InitTrainerHillMap(void) { - CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData)); - GenerateTrainerHillFloorLayout(sBackupMapData); + CpuFastFill(MAPGRID_UNDEFINED << 16 | MAPGRID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData)); + GenerateTrainerHillFloorLayout(gBackupMapData); } static void InitMapLayoutData(struct MapHeader *mapHeader) @@ -103,8 +103,8 @@ static void InitMapLayoutData(struct MapHeader *mapHeader) int width; int height; mapLayout = mapHeader->mapLayout; - CpuFastFill16(MAPGRID_UNDEFINED, sBackupMapData, sizeof(sBackupMapData)); - gBackupMapLayout.map = sBackupMapData; + CpuFastFill16(MAPGRID_UNDEFINED, gBackupMapData, sizeof(gBackupMapData)); + gBackupMapLayout.map = gBackupMapData; width = mapLayout->width + MAP_OFFSET_W; gBackupMapLayout.width = width; height = mapLayout->height + MAP_OFFSET_H; @@ -140,7 +140,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { count = mapHeader->connections->count; connection = mapHeader->connections->connections; - sMapConnectionFlags = sDummyConnectionFlags; + gMapConnectionFlags = sDummyConnectionFlags; for (i = 0; i < count; i++, connection++) { struct MapHeader const *cMap = GetMapHeaderFromConnection(connection); @@ -149,19 +149,19 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { case CONNECTION_SOUTH: FillSouthConnection(mapHeader, cMap, offset); - sMapConnectionFlags.south = TRUE; + gMapConnectionFlags.south = TRUE; break; case CONNECTION_NORTH: FillNorthConnection(mapHeader, cMap, offset); - sMapConnectionFlags.north = TRUE; + gMapConnectionFlags.north = TRUE; break; case CONNECTION_WEST: FillWestConnection(mapHeader, cMap, offset); - sMapConnectionFlags.west = TRUE; + gMapConnectionFlags.west = TRUE; break; case CONNECTION_EAST: FillEastConnection(mapHeader, cMap, offset); - sMapConnectionFlags.east = TRUE; + gMapConnectionFlags.east = TRUE; break; } } @@ -436,7 +436,7 @@ void SaveMapView(void) for (i = y; i < y + MAP_OFFSET_H; i++) { for (j = x; j < x + MAP_OFFSET_W; j++) - *mapView++ = sBackupMapData[width * i + j]; + *mapView++ = gBackupMapData[width * i + j]; } } @@ -491,8 +491,8 @@ static void LoadSavedMapView(void) for (j = x; j < x + MAP_OFFSET_W; j++) { - if (!SkipCopyingMetatileFromSavedMap(&sBackupMapData[j + width * i], width, yMode)) - sBackupMapData[j + width * i] = *mapView; + if (!SkipCopyingMetatileFromSavedMap(&gBackupMapData[j + width * i], width, yMode)) + gBackupMapData[j + width * i] = *mapView; mapView++; } } @@ -554,7 +554,7 @@ static void MoveMapViewToBackup(u8 direction) desti = width * (y + y0); srci = (y + r8) * MAP_OFFSET_W + r9; src = &mapView[srci + i]; - dest = &sBackupMapData[x0 + desti + j]; + dest = &gBackupMapData[x0 + desti + j]; *dest = *src; i++; j++; @@ -570,28 +570,28 @@ int GetMapBorderIdAt(int x, int y) if (x >= (gBackupMapLayout.width - (MAP_OFFSET + 1))) { - if (!sMapConnectionFlags.east) + if (!gMapConnectionFlags.east) return CONNECTION_INVALID; return CONNECTION_EAST; } else if (x < MAP_OFFSET) { - if (!sMapConnectionFlags.west) + if (!gMapConnectionFlags.west) return CONNECTION_INVALID; return CONNECTION_WEST; } else if (y >= (gBackupMapLayout.height - MAP_OFFSET)) { - if (!sMapConnectionFlags.south) + if (!gMapConnectionFlags.south) return CONNECTION_INVALID; return CONNECTION_SOUTH; } else if (y < MAP_OFFSET) { - if (!sMapConnectionFlags.north) + if (!gMapConnectionFlags.north) return CONNECTION_INVALID; return CONNECTION_NORTH; diff --git a/src/frontier_util.c b/src/frontier_util.c index f5dde452f..03d7b0cb5 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -29,7 +29,6 @@ #include "load_save.h" #include "battle_dome.h" #include "constants/battle_frontier.h" -#include "constants/battle_pike.h" #include "constants/frontier_util.h" #include "constants/trainers.h" #include "constants/game_stat.h" @@ -500,94 +499,94 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] = { { - {1, 2, 3, 3}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5} + {1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} }, { - {2, 3, 4, 4}, {1, 1}, {4, 5}, {1}, {3, 4}, {1}, {5} + {2, 3, 4, 4}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} }, { - {3, 4, 5, 5}, {2, 2}, {5, 6}, {1}, {4, 5}, {2}, {6} + {3, 4, 5, 5}, {2, 2, 0, 0}, {5, 6, 0, 0}, {1, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} }, { - {4, 5, 6, 6}, {2, 2}, {5, 6}, {2}, {4, 5}, {2}, {6} + {4, 5, 6, 6}, {2, 2, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} }, { - {5, 6, 7, 7}, {3, 3}, {6, 7}, {2}, {5, 6}, {2}, {7} + {5, 6, 7, 7}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {7, 0, 0, 0} }, { - {6, 7, 8, 8}, {3, 3}, {6, 7}, {2}, {5, 6}, {4}, {7} + {6, 7, 8, 8}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {4, 0, 0, 0}, {7, 0, 0, 0} }, { - {7, 8, 9, 9}, {4, 4}, {7, 8}, {3}, {6, 7}, {4}, {8} + {7, 8, 9, 9}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0}, {6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} }, { - {8, 9, 10, 10}, {4, 4}, {7, 8}, {3},{6, 7}, {4}, {8} + {8, 9, 10, 10}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0},{6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} }, { - {9, 10, 11, 11}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9} + {9, 10, 11, 11}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} }, { - {10, 11, 12, 12}, {5, 5}, {8, 9}, {4}, {7, 8}, {8}, {9} + {10, 11, 12, 12}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} }, { - {11, 12, 13, 13}, {6, 6}, {9, 10}, {5,0}, {8, 9}, {8}, {10} + {11, 12, 13, 13}, {6, 6, 0, 0}, {9, 10, 0, 0}, {5, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} }, { - {12, 13, 14, 14}, {6, 6}, {9, 10}, {6,0}, {8, 9}, {8}, {10} + {12, 13, 14, 14}, {6, 6, 0, 0}, {9, 10, 0, 0}, {6, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} }, { - {13, 14, 15, 15}, {7, 7}, {10, 11}, {7}, {9, 10}, {10}, {11} + {13, 14, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {7, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} }, { - {14, 15, 15, 15}, {7, 7}, {10, 11}, {8}, {9, 10}, {10}, {11} + {14, 15, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {8, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} }, { - {15, 15, 15, 15}, {8, 8}, {11, 12}, {9}, {10, 11}, {10}, {12} + {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {9, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} }, { - {15, 15, 15, 15}, {8, 8}, {11, 12}, {10}, {10, 11}, {10}, {12} + {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {10, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} }, { - {15, 15, 15, 15}, {9, 9}, {12, 13}, {11}, {11, 12}, {12}, {13} + {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {11, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} }, { - {15, 15, 15, 15}, {9, 9}, {12, 13}, {12}, {11, 12}, {12}, {13} + {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} }, { - {15, 15, 15, 15}, {10, 10}, {13, 14}, {13}, {12, 13}, {12}, {14} + {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {13, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} }, { - {15, 15, 15, 15}, {10, 10}, {13, 14}, {14}, {12, 13}, {12}, {14} + {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} }, { - {15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {12}, {15} + {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {12, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {11, 11}, {14, 15}, {15}, {13, 14}, {14}, {15} + {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15} + {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {12, 12}, {15, 15}, {15}, {14, 15}, {14}, {15} + {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {14}, {15} + {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {13, 13}, {15, 15}, {15}, {15, 15}, {15}, {15} + {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15} + {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {14, 14}, {15, 15}, {15}, {15, 15}, {15}, {15} + {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15} + {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} }, { - {15, 15, 15, 15}, {15, 15}, {15, 15}, {15}, {15, 15}, {15}, {15} + {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} }, }; @@ -595,13 +594,13 @@ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUN // First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = { - [FRONTIER_FACILITY_TOWER] = {1 << 0, 1 << 1}, - [FRONTIER_FACILITY_DOME] = {1 << 2, 1 << 3}, - [FRONTIER_FACILITY_PALACE] = {1 << 4, 1 << 5}, - [FRONTIER_FACILITY_ARENA] = {1 << 6, 1 << 7}, - [FRONTIER_FACILITY_FACTORY] = {1 << 8, 1 << 9}, - [FRONTIER_FACILITY_PIKE] = {1 << 10, 1 << 11}, - [FRONTIER_FACILITY_PYRAMID] = {1 << 12, 1 << 13}, + [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002}, + [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, + [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020}, + [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080}, + [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200}, + [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800}, + [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000}, }; static void (* const sFrontierUtilFuncs[])(void) = @@ -636,8 +635,8 @@ static const struct WindowTemplate sFrontierResultsWindowTemplate = .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, - .width = 28, - .height = 18, + .width = 0x1c, + .height = 0x12, .paletteNum = 15, .baseBlock = 1 }; @@ -647,7 +646,7 @@ static const struct WindowTemplate sLinkContestResultsWindowTemplate = .bg = 0, .tilemapLeft = 2, .tilemapTop = 2, - .width = 26, + .width = 0x1a, .height = 15, .paletteNum = 15, .baseBlock = 1 @@ -658,7 +657,7 @@ static const struct WindowTemplate sRankingHallRecordsWindowTemplate = .bg = 0, .tilemapLeft = 2, .tilemapTop = 1, - .width = 26, + .width = 0x1a, .height = 17, .paletteNum = 15, .baseBlock = 1 @@ -959,7 +958,7 @@ static bool8 IsWinStreakActive(u32 challenge) static void PrintAligned(const u8 *str, s32 y) { - s32 x = GetStringCenterAlignXOffset(FONT_NORMAL, str, DISPLAY_WIDTH - 16); + s32 x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 224); y = (y * 8) + 1; AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, str, x, y, TEXT_SKIP_DRAW, NULL); } @@ -969,7 +968,7 @@ static void PrintHyphens(s32 y) s32 i; u8 text[37]; - for (i = 0; i < (int)ARRAY_COUNT(text) - 1; i++) + for (i = 0; i < 36; i++) text[i] = CHAR_HYPHEN; text[i] = EOS; @@ -1861,25 +1860,25 @@ static void GiveBattlePoints(void) switch (facility) { case FRONTIER_FACILITY_TOWER: - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; break; case FRONTIER_FACILITY_DOME: challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; break; case FRONTIER_FACILITY_PALACE: - challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7; break; case FRONTIER_FACILITY_ARENA: - challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7; break; case FRONTIER_FACILITY_FACTORY: - challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; break; case FRONTIER_FACILITY_PIKE: - challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / NUM_PIKE_ROOMS; + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; break; case FRONTIER_FACILITY_PYRAMID: - challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE; + challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; break; } @@ -1983,7 +1982,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL if (gFrontierBannedSpecies[i] != 0xFFFF) return; - if (lvlMode == FRONTIER_LVL_50 && monLevel > FRONTIER_MAX_LEVEL_50) + if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) return; for (i = 0; i < *count && speciesArray[i] != species; i++) @@ -2345,7 +2344,7 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode) StringCopy(gStringVar1, sRecordsWindowChallengeTexts[hallFacilityId][0]); StringExpandPlaceholders(gStringVar4, sRecordsWindowChallengeTexts[hallFacilityId][1]); AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, NULL); - x = GetStringRightAlignXOffset(FONT_NORMAL, sLevelModeText[lvlMode], DISPLAY_WIDTH - 32); + x = GetStringRightAlignXOffset(FONT_NORMAL, sLevelModeText[lvlMode], 0xD0); AddTextPrinterParameterized(gRecordsWindowId, FONT_NORMAL, sLevelModeText[lvlMode], x, 1, TEXT_SKIP_DRAW, NULL); if (hallFacilityId == RANKING_HALL_TOWER_LINK) { diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 38f096af8..d134f2265 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -52,8 +52,6 @@ struct HallofFameTeam struct HallofFameMon mon[PARTY_SIZE]; }; -STATIC_ASSERT(sizeof(struct HallofFameTeam) * HALL_OF_FAME_MAX_TEAMS <= SECTOR_DATA_SIZE * NUM_HOF_SECTORS, HallOfFameFreeSpace); - struct HofGfx { u16 state; @@ -514,7 +512,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) } *lastSavedTeam = *sHofMonPtr; - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_Hof_TrySaveData; @@ -529,8 +527,10 @@ static void Task_Hof_TrySaveData(u8 taskId) UnsetBgTilemapBuffer(3); FreeAllWindowBuffers(); - TRY_FREE_AND_SET_NULL(sHofGfxPtr); - TRY_FREE_AND_SET_NULL(sHofMonPtr); + if (sHofGfxPtr != NULL) + FREE_AND_SET_NULL(sHofGfxPtr); + if (sHofMonPtr != NULL) + FREE_AND_SET_NULL(sHofMonPtr); DestroyTask(taskId); } @@ -722,7 +722,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); HallOfFame_PrintPlayerInfo(1, 2); - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_LeagueChamp, 0, NULL, 2, 1, 3); CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; @@ -771,8 +771,10 @@ static void Task_Hof_HandleExit(u8 taskId) ResetBgsAndClearDma3BusyFlags(0); DestroyTask(taskId); - TRY_FREE_AND_SET_NULL(sHofGfxPtr); - TRY_FREE_AND_SET_NULL(sHofMonPtr); + if (sHofGfxPtr != NULL) + FREE_AND_SET_NULL(sHofGfxPtr); + if (sHofMonPtr != NULL) + FREE_AND_SET_NULL(sHofMonPtr); StartCredits(); } @@ -1077,8 +1079,10 @@ static void Task_HofPC_HandleExit(u8 taskId) ResetBgsAndClearDma3BusyFlags(0); DestroyTask(taskId); - TRY_FREE_AND_SET_NULL(sHofGfxPtr); - TRY_FREE_AND_SET_NULL(sHofMonPtr); + if (sHofGfxPtr != NULL) + FREE_AND_SET_NULL(sHofGfxPtr); + if (sHofMonPtr != NULL) + FREE_AND_SET_NULL(sHofMonPtr); ReturnFromHallOfFamePC(); } @@ -1087,7 +1091,7 @@ static void Task_HofPC_HandleExit(u8 taskId) static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) { HofPCTopBar_Print(gText_AButtonExit, 8, TRUE); - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized2(0, FONT_NORMAL, gText_HOFCorrupted, 0, NULL, 2, 1, 3); CopyWindowToVram(0, COPYWIN_FULL); gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; diff --git a/src/intro.c b/src/intro.c index a1d0508f4..827ce80be 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1848,7 +1848,7 @@ static void Task_Scene3_StartGroudon(u8 taskId) { gTasks[taskId].tState = 0; gTasks[taskId].func = Task_Scene3_Groudon; - ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, FALSE); + ScanlineEffect_InitWave(0, 160, 4, 4, 1, SCANLINE_EFFECT_REG_BG1HOFS, 0); } #define tScreenX data[1] @@ -2058,7 +2058,7 @@ static void Task_Scene3_LoadKyogre(u8 taskId) gTasks[taskId].tDelay = 16; gTasks[taskId].tZoom = 256; PanFadeAndZoomScreen(gTasks[taskId].tScreenX, gTasks[taskId].tScreenY, gTasks[taskId].tZoom, 0); - ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, FALSE); + ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, SCANLINE_EFFECT_REG_BG1VOFS, 0); } static void Task_Scene3_Kyogre(u8 taskId) diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c index 0942e82f1..e7039e02b 100644 --- a/src/intro_credits_graphics.c +++ b/src/intro_credits_graphics.c @@ -757,9 +757,10 @@ void LoadIntroPart2Graphics(u8 scenery) gReservedSpritePaletteCount = 8; } -// Note: This is only called with scenery=1. +// Note: This is only called with a=1. void SetIntroPart2BgCnt(u8 scenery) { + // Only called with scenery = 1 switch (scenery) { default: diff --git a/src/item_menu.c b/src/item_menu.c index cd0bc159d..9eaca9597 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1344,7 +1344,7 @@ static void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, bool16 skipEraseLis DrawPocketIndicatorSquare(newPocket, TRUE); FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); ScheduleBgCopyTilemapToVram(2); - SetBagVisualPocketId(newPocket, TRUE); + SetBagVisualPocketId(newPocket, 1); RemoveBagSprite(ITEMMENUSPRITE_BALL); AddSwitchPocketRotatingBallSprite(deltaBagPocketId); SetTaskFuncWithFollowupFunc(taskId, Task_SwitchBagPocket, gTasks[taskId].func); diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index 5ac44f5ad..a5c265f90 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -35,8 +35,8 @@ static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite); // static const rom data static const u16 sRotatingBall_Pal[] = INCBIN_U16("graphics/bag/rotating_ball.gbapal"); static const u8 sRotatingBall_Gfx[] = INCBIN_U8("graphics/bag/rotating_ball.4bpp"); -static const u8 sCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp"); -static const u16 sCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal"); +static const u8 gCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +static const u16 gCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal"); static const struct OamData sBagOamData = { @@ -269,7 +269,7 @@ static const struct SpriteFrameImage sBerryPicSpriteImageTable[] = {&gDecompressionBuffer[0], 0x800}, }; -static const struct SpriteTemplate sBerryPicSpriteTemplate = +static const struct SpriteTemplate gBerryPicSpriteTemplate = { .tileTag = TAG_NONE, .paletteTag = TAG_BERRY_PIC_PAL, @@ -308,7 +308,7 @@ static const union AffineAnimCmd *const sBerryPicRotatingAnimCmds[] = sSpriteAffineAnim_BerryPicRotation2 }; -static const struct SpriteTemplate sBerryPicRotatingSpriteTemplate = +static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate = { .tileTag = TAG_NONE, .paletteTag = TAG_BERRY_PIC_PAL, @@ -404,7 +404,7 @@ static const union AnimCmd *const sBerryCheckCircleSpriteAnimTable[] = sSpriteAnim_BerryCheckCircle }; -static const struct SpriteTemplate sBerryCheckCircleSpriteTemplate = +static const struct SpriteTemplate gBerryCheckCircleSpriteTemplate = { .tileTag = TAG_BERRY_CHECK_CIRCLE_GFX, .paletteTag = TAG_BERRY_CHECK_CIRCLE_GFX, @@ -544,22 +544,7 @@ void AddBagItemIconSprite(u16 itemId, u8 id) void RemoveBagItemIconSprite(u8 id) { -// BUG: For one frame, the item you scroll to in the Bag menu -// will have an incorrect palette and may be seen as a flicker. -#ifdef BUGFIX - u8 *spriteId = &gBagMenu->spriteIds[ITEMMENUSPRITE_ITEM]; - - if (spriteId[id ^ 1] != SPRITE_NONE) - gSprites[spriteId[id ^ 1]].invisible = TRUE; - - if (spriteId[id] != SPRITE_NONE) - { - DestroySpriteAndFreeResources(&gSprites[spriteId[id]]); - spriteId[id] = SPRITE_NONE; - } -#else RemoveBagSprite(id + ITEMMENUSPRITE_ITEM); -#endif } void CreateItemMenuSwapLine(void) @@ -624,7 +609,7 @@ static void LoadBerryGfx(u8 berryId) u8 CreateBerryTagSprite(u8 id, s16 x, s16 y) { LoadBerryGfx(id); - return CreateSprite(&sBerryPicSpriteTemplate, x, y, 0); + return CreateSprite(&gBerryPicSpriteTemplate, x, y, 0); } void FreeBerryTagSpritePalette(void) @@ -639,7 +624,7 @@ u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine) FreeSpritePaletteByTag(TAG_BERRY_PIC_PAL); LoadBerryGfx(berryId); - spriteId = CreateSprite(&sBerryPicRotatingSpriteTemplate, x, y, 0); + spriteId = CreateSprite(&gBerryPicRotatingSpriteTemplate, x, y, 0); if (startAffine == TRUE) StartSpriteAffineAnim(&gSprites[spriteId], 1); @@ -648,5 +633,5 @@ u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine) u8 CreateBerryFlavorCircleSprite(s16 x) { - return CreateSprite(&sBerryCheckCircleSpriteTemplate, x, 116, 0); + return CreateSprite(&gBerryCheckCircleSpriteTemplate, x, 116, 0); } diff --git a/src/item_use.c b/src/item_use.c index af8f2504f..c03ede61b 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -42,33 +42,33 @@ #include "constants/items.h" #include "constants/songs.h" -static void SetUpItemUseCallback(u8); +static void SetUpItemUseCallback(u8 taskId); static void FieldCB_UseItemOnField(void); -static void Task_CallItemUseOnFieldCallback(u8); -static void Task_UseItemfinder(u8); -static void Task_CloseItemfinderMessage(u8); -static void Task_HiddenItemNearby(u8); -static void Task_StandingOnHiddenItem(u8); +static void Task_CallItemUseOnFieldCallback(u8 taskId); +static void Task_UseItemfinder(u8 taskId); +static void Task_CloseItemfinderMessage(u8 taskId); +static void Task_HiddenItemNearby(u8 taskId); +static void Task_StandingOnHiddenItem(u8 taskId); static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); -static u8 GetDirectionToHiddenItem(s16, s16); -static void PlayerFaceHiddenItem(u8); -static void CheckForHiddenItemsInMapConnection(u8); -static void Task_OpenRegisteredPokeblockCase(u8); -static void ItemUseOnFieldCB_Bike(u8); +static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY); +static void PlayerFaceHiddenItem(u8 a); +static void CheckForHiddenItemsInMapConnection(u8 taskId); +static void Task_OpenRegisteredPokeblockCase(u8 taskId); +static void ItemUseOnFieldCB_Bike(u8 taskId); static void ItemUseOnFieldCB_Rod(u8); static void ItemUseOnFieldCB_Itemfinder(u8); -static void ItemUseOnFieldCB_Berry(u8); -static void ItemUseOnFieldCB_WailmerPailBerry(u8); -static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8); +static void ItemUseOnFieldCB_Berry(u8 taskId); +static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId); +static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId); static bool8 TryToWaterSudowoodo(void); -static void BootUpSoundTMHM(u8); -static void Task_ShowTMHMContainedMessage(u8); -static void UseTMHMYesNo(u8); -static void UseTMHM(u8); -static void Task_StartUseRepel(u8); -static void Task_UseRepel(u8); -static void Task_CloseCantUseKeyItemMessage(u8); -static void SetDistanceOfClosestHiddenItem(u8, s16, s16); +static void BootUpSoundTMHM(u8 taskId); +static void Task_ShowTMHMContainedMessage(u8 taskId); +static void UseTMHMYesNo(u8 taskId); +static void UseTMHM(u8 taskId); +static void Task_StartUseRepel(u8 taskId); +static void Task_UseRepel(u8 taskId); +static void Task_CloseCantUseKeyItemMessage(u8 taskId); +static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y); static void CB2_OpenPokeblockFromBag(void); // EWRAM variables diff --git a/src/landmark.c b/src/landmark.c index 615a9bfe3..52d52500a 100644 --- a/src/landmark.c +++ b/src/landmark.c @@ -336,7 +336,7 @@ static const struct Landmark *const Landmarks_MtChimney_2[] = NULL, }; -static const struct LandmarkList sLandmarkLists[] = +static const struct LandmarkList gLandmarkLists[] = { {MAPSEC_ROUTE_103, 2, Landmarks_Route103_2}, {MAPSEC_ROUTE_104, 0, Landmarks_Route104_0}, @@ -420,21 +420,21 @@ static const struct Landmark *const *GetLandmarks(u8 mapSection, u8 id) { u16 i = 0; - for (; sLandmarkLists[i].mapSection != MAPSEC_NONE; i++) + for (; gLandmarkLists[i].mapSection != MAPSEC_NONE; i++) { - if (sLandmarkLists[i].mapSection > mapSection) + if (gLandmarkLists[i].mapSection > mapSection) return NULL; - if (sLandmarkLists[i].mapSection == mapSection) + if (gLandmarkLists[i].mapSection == mapSection) break; } - if (sLandmarkLists[i].mapSection == MAPSEC_NONE) + if (gLandmarkLists[i].mapSection == MAPSEC_NONE) return NULL; - for (; sLandmarkLists[i].mapSection == mapSection; i++) + for (; gLandmarkLists[i].mapSection == mapSection; i++) { - if (sLandmarkLists[i].id == id) - return sLandmarkLists[i].landmarks; + if (gLandmarkLists[i].id == id) + return gLandmarkLists[i].landmarks; } return NULL; diff --git a/src/libisagbprn.c b/src/libisagbprn.c index 7a70cf41f..69c6986ae 100644 --- a/src/libisagbprn.c +++ b/src/libisagbprn.c @@ -31,7 +31,7 @@ void AGBPrintFlush1Block(void); void AGBPrintInit(void) { volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; - vu16 *pWSCNT = ®_WAITCNT; + u16 *pWSCNT = ®_WAITCNT; u16 *pProtect = (u16 *)AGB_PRINT_PROTECT_ADDR; u16 nOldWSCNT = *pWSCNT; *pWSCNT = WSCNT_DATA; @@ -57,7 +57,7 @@ static void AGBPutcInternal(const char cChr) void AGBPutc(const char cChr) { - vu16 *pWSCNT = ®_WAITCNT; + u16 *pWSCNT = ®_WAITCNT; u16 nOldWSCNT = *pWSCNT; volatile struct AGBPrintStruct *pPrint; *pWSCNT = WSCNT_DATA; @@ -71,7 +71,7 @@ void AGBPutc(const char cChr) void AGBPrint(const char *pBuf) { volatile struct AGBPrintStruct *pPrint = (struct AGBPrintStruct *)AGB_PRINT_STRUCT_ADDR; - vu16 *pWSCNT = ®_WAITCNT; + u16 *pWSCNT = ®_WAITCNT; u16 nOldWSCNT = *pWSCNT; *pWSCNT = WSCNT_DATA; while (*pBuf) @@ -95,9 +95,9 @@ void AGBPrintf(const char *pBuf, ...) static void AGBPrintTransferDataInternal(u32 bAllData) { LPFN_PRINT_FLUSH lpfnFuncFlush; - vu16 *pIME; + u16 *pIME; u16 nIME; - vu16 *pWSCNT; + u16 *pWSCNT; u16 nOldWSCNT; u16 *pProtect; volatile struct AGBPrintStruct *pPrint; diff --git a/src/link.c b/src/link.c index e88cde55a..aa9a0d73d 100644 --- a/src/link.c +++ b/src/link.c @@ -120,18 +120,18 @@ static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL; static void InitLocalLinkPlayer(void); static void VBlankCB_LinkError(void); static void CB2_LinkTest(void); -static void ProcessRecvCmds(u8); +static void ProcessRecvCmds(u8 unused); static void LinkCB_SendHeldKeys(void); static void ResetBlockSend(void); -static bool32 InitBlockSend(const void *, size_t); +static bool32 InitBlockSend(const void *src, size_t size); static void LinkCB_BlockSendBegin(void); static void LinkCB_BlockSend(void); static void LinkCB_BlockSendEnd(void); -static void SetBlockReceivedFlag(u8); -static u16 LinkTestCalcBlockChecksum(const u16 *, u16); -static void LinkTest_PrintHex(u32, u8, u8, u8); +static void SetBlockReceivedFlag(u8 who); +static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size); +static void LinkTest_PrintHex(u32 pos, u8 a0, u8 a1, u8 a2); static void LinkCB_RequestPlayerDataExchange(void); -static void Task_PrintTestData(u8); +static void Task_PrintTestData(u8 taskId); static void LinkCB_ReadyCloseLink(void); static void LinkCB_WaitCloseLink(void); diff --git a/src/list_menu.c b/src/list_menu.c index 8ba13a6cf..ccb183891 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -312,14 +312,14 @@ static void ListMenuDummyTask(u8 taskId) } -s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 drawMode, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) { switch (sMysteryGiftLinkMenu.state) { case 0: default: sMysteryGiftLinkMenu.windowId = AddWindow(windowTemplate); - switch (drawMode) + switch (arg2) { case 2: LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum); @@ -346,13 +346,13 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str } if (sMysteryGiftLinkMenu.state == 2) { - if (drawMode == 0) + if (arg2 == 0) { ClearWindowTilemap(sMysteryGiftLinkMenu.windowId); } else { - switch (drawMode) + switch (arg2) { case 0: // can never be reached, because of the if statement above ClearStdWindowAndFrame(sMysteryGiftLinkMenu.windowId, FALSE); diff --git a/src/m4a_1.s b/src/m4a_1.s index 3f1578806..cc5d3238d 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -680,7 +680,7 @@ SoundMainRAM_Unk2: ldr r1, [r4, o_SoundChannel_wav] add r2, r2, r1 add r2, r2, 0x10 - ldr r5, =sDecodingBuffer + ldr r5, =gDecodingBuffer ldr r6, =gDeltaEncodingTable mov r7, 0x40 ldrb lr, [r2], 1 @@ -701,7 +701,7 @@ _081DD57C: subs r7, r7, 2 bgt _081DD568 _081DD594: - ldr r5, =sDecodingBuffer + ldr r5, =gDecodingBuffer and r0, r3, 0x3F ldrsb r1, [r5, r0] pop {r0,r2,r5-r7,pc} @@ -1911,6 +1911,6 @@ _081DDD90: .align 2, 0 @ Don't pad with nop. .bss -sDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM +gDecodingBuffer: @ Used as a buffer for audio decoded from compressed DPCM .space 0x40 - .size sDecodingBuffer, .-sDecodingBuffer + .size gDecodingBuffer, .-gDecodingBuffer diff --git a/src/main.c b/src/main.c index 5fd236447..2b96a8698 100644 --- a/src/main.c +++ b/src/main.c @@ -69,7 +69,7 @@ u8 gLinkVSyncDisabled; u32 IntrMain_Buffer[0x200]; s8 gPcmDmaCounter; -static EWRAM_DATA u16 sTrainerId = 0; +static EWRAM_DATA u16 gTrainerId = 0; //EWRAM_DATA void (**gFlashTimerIntrFunc)(void) = NULL; @@ -201,12 +201,12 @@ void SeedRngAndSetTrainerId(void) u16 val = REG_TM1CNT_L; SeedRng(val); REG_TM1CNT_H = 0; - sTrainerId = val; + gTrainerId = val; } u16 GetGeneratedTrainerIdLower(void) { - return sTrainerId; + return gTrainerId; } void EnableVCountIntrAtLine150(void) diff --git a/src/main_menu.c b/src/main_menu.c index d11784133..ed6158a9c 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -198,7 +198,7 @@ static void NewGameBirchSpeech_ShowDialogueWindow(u8, u8); static void NewGameBirchSpeech_ClearWindow(u8); static void Task_NewGameBirchSpeech_ThisIsAPokemon(u8); static void Task_NewGameBirchSpeech_MainSpeech(u8); -static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *, u16); +static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 a); static void Task_NewGameBirchSpeech_AndYouAre(u8); static void Task_NewGameBirchSpeechSub_WaitForLotad(u8); static void Task_NewGameBirchSpeech_StartBirchLotadPlatformFade(u8); @@ -371,7 +371,7 @@ static const struct WindowTemplate sWindowTemplates_MainMenu[] = DUMMY_WIN_TEMPLATE }; -static const struct WindowTemplate sNewGameBirchSpeechTextWindows[] = +static const struct WindowTemplate gNewGameBirchSpeechTextWindows[] = { { .bg = 0, @@ -457,7 +457,7 @@ static const struct MenuAction sMenuActions_Gender[] = { {gText_BirchGirl, NULL} }; -static const u8 *const sMalePresetNames[] = { +static const u8 *const gMalePresetNames[] = { gText_DefaultNameStu, gText_DefaultNameMilton, gText_DefaultNameTom, @@ -480,7 +480,7 @@ static const u8 *const sMalePresetNames[] = { gText_DefaultNameQuincy }; -static const u8 *const sFemalePresetNames[] = { +static const u8 *const gFemalePresetNames[] = { gText_DefaultNameKimmy, gText_DefaultNameTiara, gText_DefaultNameBella, @@ -1325,7 +1325,7 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInWelcome(u8 taskId) } else { - InitWindows(sNewGameBirchSpeechTextWindows); + InitWindows(gNewGameBirchSpeechTextWindows); LoadMainMenuWindowFrameTiles(0, 0xF3); LoadMessageBoxGfx(0, 0xFC, 0xF0); NewGameBirchSpeech_ShowDialogueWindow(0, 1); @@ -1371,7 +1371,7 @@ static void Task_NewGameBirchSpeechSub_InitPokeBall(u8 taskId) gSprites[spriteId].invisible = FALSE; gSprites[spriteId].data[0] = 0; - CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 112, 58, 0, 0, 32, PALETTES_BG, SPECIES_LOTAD); + CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 112, 58, 0, 0, 32, 0x0000FFFF, SPECIES_LOTAD); gTasks[taskId].func = Task_NewGameBirchSpeechSub_WaitForLotad; gTasks[sBirchSpeechMainTaskId].tTimer = 0; } @@ -1851,7 +1851,7 @@ static void CB2_NewGameBirchSpeech_ReturnFromNamingScreen(void) REG_IME = savedIme; SetVBlankCallback(VBlankCB_MainMenu); SetMainCallback2(CB2_MainMenu); - InitWindows(sNewGameBirchSpeechTextWindows); + InitWindows(gNewGameBirchSpeechTextWindows); LoadMainMenuWindowFrameTiles(0, 0xF3); LoadMessageBoxGfx(0, 0xFC, 0xF0); PutWindowTilemap(0); @@ -2087,7 +2087,7 @@ static void NewGameBirchSpeech_StartFadePlatformOut(u8 taskId, u8 delay) static void NewGameBirchSpeech_ShowGenderMenu(void) { - DrawMainMenuWindowBorder(&sNewGameBirchSpeechTextWindows[1], 0xF3); + DrawMainMenuWindowBorder(&gNewGameBirchSpeechTextWindows[1], 0xF3); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, ARRAY_COUNT(sMenuActions_Gender), sMenuActions_Gender); InitMenuInUpperLeftCornerNormal(1, ARRAY_COUNT(sMenuActions_Gender), 0); @@ -2106,9 +2106,9 @@ static void NewGameBirchSpeech_SetDefaultPlayerName(u8 nameId) u8 i; if (gSaveBlock2Ptr->playerGender == MALE) - name = sMalePresetNames[nameId]; + name = gMalePresetNames[nameId]; else - name = sFemalePresetNames[nameId]; + name = gFemalePresetNames[nameId]; for (i = 0; i < PLAYER_NAME_LENGTH; i++) gSaveBlock2Ptr->playerName[i] = name[i]; gSaveBlock2Ptr->playerName[PLAYER_NAME_LENGTH] = EOS; @@ -2221,9 +2221,9 @@ static void ClearMainMenuWindowTilemap(const struct WindowTemplate *template) CopyBgTilemapBufferToVram(template->bg); } -static void NewGameBirchSpeech_ClearGenderWindowTilemap(u8 bg, u8 x, u8 y, u8 width, u8 height, u8 unused) +static void NewGameBirchSpeech_ClearGenderWindowTilemap(u8 a, u8 b, u8 c, u8 d, u8 e, u8 unused) { - FillBgTilemapBufferRect(bg, 0, x + 255, y + 255, width + 2, height + 2, 2); + FillBgTilemapBufferRect(a, 0, b + 0xFF, c + 0xFF, d + 2, e + 2, 2); } static void NewGameBirchSpeech_ClearGenderWindow(u8 windowId, bool8 copyToVram) @@ -2247,7 +2247,7 @@ static void NewGameBirchSpeech_ClearWindow(u8 windowId) CopyWindowToVram(windowId, COPYWIN_GFX); } -static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 renderCmd) +static void NewGameBirchSpeech_WaitForThisIsPokemonText(struct TextPrinterTemplate *printer, u16 a) { // Wait for Birch's "This is a Pokémon" text to reach the pause // Then start the PokéBall release (if it hasn't been started already) @@ -2270,25 +2270,24 @@ static void NewGameBirchSpeech_ShowDialogueWindow(u8 windowId, u8 copyToVram) FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) - CopyWindowToVram(windowId, COPYWIN_FULL); + CopyWindowToVram(windowId, 3); } -static void NewGameBirchSpeech_CreateDialogueWindowBorder(u8 bg, u8 x, u8 y, u8 width, u8 height, u8 palNum) +static void NewGameBirchSpeech_CreateDialogueWindowBorder(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f) { - FillBgTilemapBufferRect(bg, 0xFD, x-2, y-1, 1, 1, palNum); - FillBgTilemapBufferRect(bg, 0xFF, x-1, y-1, 1, 1, palNum); - FillBgTilemapBufferRect(bg, 0x100, x, y-1, width, 1, palNum); - FillBgTilemapBufferRect(bg, 0x101, x+width-1, y-1, 1, 1, palNum); - FillBgTilemapBufferRect(bg, 0x102, x+width, y-1, 1, 1, palNum); - FillBgTilemapBufferRect(bg, 0x103, x-2, y, 1, 5, palNum); - FillBgTilemapBufferRect(bg, 0x105, x-1, y, width+1, 5, palNum); - FillBgTilemapBufferRect(bg, 0x106, x+width, y, 1, 5, palNum); - - FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0xFD), x-2, y+height, 1, 1, palNum); - FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0xFF), x-1, y+height, 1, 1, palNum); - FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x100), x, y+height, width-1, 1, palNum); - FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x101), x+width-1, y+height, 1, 1, palNum); - FillBgTilemapBufferRect(bg, BG_TILE_V_FLIP(0x102), x+width, y+height, 1, 1, palNum); + FillBgTilemapBufferRect(a, 0xFD, b-2, c-1, 1, 1, f); + FillBgTilemapBufferRect(a, 0xFF, b-1, c-1, 1, 1, f); + FillBgTilemapBufferRect(a, 0x100, b, c-1, d, 1, f); + FillBgTilemapBufferRect(a, 0x101, b+d-1, c-1, 1, 1, f); + FillBgTilemapBufferRect(a, 0x102, b+d, c-1, 1, 1, f); + FillBgTilemapBufferRect(a, 0x103, b-2, c, 1, 5, f); + FillBgTilemapBufferRect(a, 0x105, b-1, c, d+1, 5, f); + FillBgTilemapBufferRect(a, 0x106, b+d, c, 1, 5, f); + FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFD), b-2, c+e, 1, 1, f); + FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFF), b-1, c+e, 1, 1, f); + FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x100), b, c+e, d-1, 1, f); + FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x101), b+d-1, c+e, 1, 1, f); + FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x102), b+d, c+e, 1, 1, f); } static void Task_NewGameBirchSpeech_ReturnFromNamingScreenShowTextbox(u8 taskId) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 9eaa035ca..8cf1a6bab 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -12,7 +12,6 @@ #include "string_util.h" #include "task.h" #include "text.h" -#include "constants/battle_frontier.h" #include "constants/layouts.h" #include "constants/region_map_sections.h" #include "constants/weather.h" @@ -177,25 +176,25 @@ static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping[] = [MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE }; -static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1"); -static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2"); -static const u8 sText_PyramidFloor3[] = _("PYRAMID FLOOR 3"); -static const u8 sText_PyramidFloor4[] = _("PYRAMID FLOOR 4"); -static const u8 sText_PyramidFloor5[] = _("PYRAMID FLOOR 5"); -static const u8 sText_PyramidFloor6[] = _("PYRAMID FLOOR 6"); -static const u8 sText_PyramidFloor7[] = _("PYRAMID FLOOR 7"); -static const u8 sText_Pyramid[] = _("PYRAMID"); +static const u8 gText_PyramidFloor1[] = _("PYRAMID FLOOR 1"); +static const u8 gText_PyramidFloor2[] = _("PYRAMID FLOOR 2"); +static const u8 gText_PyramidFloor3[] = _("PYRAMID FLOOR 3"); +static const u8 gText_PyramidFloor4[] = _("PYRAMID FLOOR 4"); +static const u8 gText_PyramidFloor5[] = _("PYRAMID FLOOR 5"); +static const u8 gText_PyramidFloor6[] = _("PYRAMID FLOOR 6"); +static const u8 gText_PyramidFloor7[] = _("PYRAMID FLOOR 7"); +static const u8 gText_Pyramid[] = _("PYRAMID"); -static const u8 * const sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE + 1] = +static const u8 * const gBattlePyramid_MapHeaderStrings[] = { - sText_PyramidFloor1, - sText_PyramidFloor2, - sText_PyramidFloor3, - sText_PyramidFloor4, - sText_PyramidFloor5, - sText_PyramidFloor6, - sText_PyramidFloor7, - sText_Pyramid, + gText_PyramidFloor1, + gText_PyramidFloor2, + gText_PyramidFloor3, + gText_PyramidFloor4, + gText_PyramidFloor5, + gText_PyramidFloor6, + gText_PyramidFloor7, + gText_Pyramid, }; // Unused @@ -310,12 +309,12 @@ static void ShowMapNamePopUpWindow(void) if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP) { withoutPrefixPtr = &(mapDisplayHeader[3]); - mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[FRONTIER_STAGES_PER_CHALLENGE]; + mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[7]; } else { withoutPrefixPtr = &(mapDisplayHeader[3]); - mapDisplayHeaderSource = sBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum]; + mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum]; } StringCopy(withoutPrefixPtr, mapDisplayHeaderSource); } diff --git a/src/match_call.c b/src/match_call.c index 8b25d5b44..de7f13416 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -33,13 +33,6 @@ #include "constants/songs.h" #include "constants/trainers.h" -// In this file only the values normally associated with Battle Pike and Factory are swapped. -// Note that this is *not* a bug, because they are properly swapped consistently in this file. -// There would only be an issue if anything in this file interacted with something expecting -// the usual value order, or vice versa. -#define MATCH_CALL_FACTORY FRONTIER_FACILITY_PIKE -#define MATCH_CALL_PIKE FRONTIER_FACILITY_FACTORY - // Each match call message has variables that can be populated randomly or // dependent on the trainer. The below are IDs for how to populate the vars // in a given message. @@ -1597,7 +1590,6 @@ static const struct MatchCallText *GetGeneralMatchCallText(int matchCallId, u8 * rand = Random(); if (!(rand & 1)) { - // Count the number of facilities with a win streak for (count = 0, i = 0; i < NUM_FRONTIER_FACILITIES; i++) { if (GetFrontierStreakInfo(i, &topic) > 1) @@ -1606,8 +1598,6 @@ static const struct MatchCallText *GetGeneralMatchCallText(int matchCallId, u8 * if (count) { - // At least one facility with a win streak - // Randomly choose one to have a call about count = Random() % count; for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { @@ -1817,15 +1807,15 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr) StringCopy(destStr, speciesName); } -static const u8 *const sBattleFrontierFacilityNames[NUM_FRONTIER_FACILITIES] = +static const u8 *const sBattleFrontierFacilityNames[] = { - [FRONTIER_FACILITY_TOWER] = gText_BattleTower2, - [FRONTIER_FACILITY_DOME] = gText_BattleDome, - [FRONTIER_FACILITY_PALACE] = gText_BattlePalace, - [FRONTIER_FACILITY_ARENA] = gText_BattleArena, - [MATCH_CALL_PIKE] = gText_BattlePike, - [MATCH_CALL_FACTORY] = gText_BattleFactory, - [FRONTIER_FACILITY_PYRAMID] = gText_BattlePyramid, + gText_BattleTower2, + gText_BattleDome, + gText_BattlePalace, + gText_BattleArena, + gText_BattlePike, + gText_BattleFactory, + gText_BattlePyramid, }; static void PopulateBattleFrontierFacilityName(int matchCallId, u8 *destStr) @@ -1909,7 +1899,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) switch (facilityId) { case FRONTIER_FACILITY_DOME: - for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.domeRecordWinStreaks); i++) + for (i = 0; i < 2; i++) { for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { @@ -1919,7 +1909,11 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = GEN_TOPIC_B_DOME - 1; break; - case MATCH_CALL_PIKE: + #ifdef BUGFIX + case FRONTIER_FACILITY_PIKE: + #else + case FRONTIER_FACILITY_FACTORY: + #endif for (i = 0; i < FRONTIER_LVL_MODE_COUNT; i++) { if (streak < gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]) @@ -1928,7 +1922,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) *topicTextId = GEN_TOPIC_B_PIKE - 1; break; case FRONTIER_FACILITY_TOWER: - for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.towerRecordWinStreaks); i++) + for (i = 0; i < 4; i++) { for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { @@ -1939,7 +1933,7 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) *topicTextId = GEN_TOPIC_STREAK_RECORD - 1; break; case FRONTIER_FACILITY_PALACE: - for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.palaceRecordWinStreaks); i++) + for (i = 0; i < 2; i++) { for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { @@ -1949,8 +1943,12 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = GEN_TOPIC_STREAK_RECORD - 1; break; - case MATCH_CALL_FACTORY: - for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.factoryRecordWinStreaks); i++) + #ifdef BUGFIX + case FRONTIER_FACILITY_FACTORY: + #else + case FRONTIER_FACILITY_PIKE: + #endif + for (i = 0; i < 2; i++) { for (j = 0; j < FRONTIER_LVL_MODE_COUNT; j++) { diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 2b6c71c8a..681a3dadf 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -438,14 +438,14 @@ static void EnableTextPrinters(void) gDisableTextPrinters = FALSE; } -static void DisableTextPrinters(struct TextPrinterTemplate * printer, u16 renderCmd) +static void DisableTextPrinters(struct TextPrinterTemplate * printer, u16 a1) { gDisableTextPrinters = TRUE; } static void DrawSongTextWindow(const u8 * str) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, str, 0, 1, 1, DisableTextPrinters); gDisableTextPrinters = TRUE; CopyWindowToVram(0, COPYWIN_FULL); diff --git a/src/menu.c b/src/menu.c index c4540942b..49baddded 100644 --- a/src/menu.c +++ b/src/menu.c @@ -542,9 +542,9 @@ void RemoveMapNamePopUpWindow(void) } } -void AddTextPrinterWithCallbackForMessage(bool8 canSpeedUp, void (*callback)(struct TextPrinterTemplate *, u16)) +void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextPrinterTemplate *, u16)) { - gTextFlags.canABSpeedUpPrint = canSpeedUp; + gTextFlags.canABSpeedUpPrint = a1; AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), callback, 2, 1, 3); } @@ -1245,9 +1245,9 @@ static void PrintMenuActionGridText(u8 windowId, u8 fontId, u8 left, u8 top, u8 } // Unused -static void PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 width, u8 height, u8 columns, u8 rows, const struct MenuAction *menuActions) +static void PrintMenuActionGridTextAtTop(u8 windowId, u8 fontId, u8 a2, u8 a3, u8 a4, u8 a5, const struct MenuAction *menuActions) { - PrintMenuActionGridText(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, width, height, columns, rows, menuActions); + PrintMenuActionGridText(windowId, fontId, GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH), 0, a2, a3, a4, a5, menuActions); } void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *menuActions, const u8 *actionIds) diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 7decd695c..e9f3e571f 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -153,7 +153,7 @@ void DoYesNoFuncWithChoice(u8 taskId, const struct YesNoFuncTable *data) gTasks[taskId].func = Task_CallYesOrNoCallback; } -void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 unused1, u8 unused2, u8 unused3, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo) +void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo) { CreateYesNoMenu(template, tileStart, palette, 0); sYesNo = *yesNo; @@ -176,18 +176,17 @@ static void Task_CallYesOrNoCallback(u8 taskId) } } -// Returns TRUE if the quantity was changed, FALSE if it remained the same -bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max) +bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) { - s16 valBefore = *quantity; + s16 valBefore = (*arg0); - if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { - (*quantity)++; - if (*quantity > max) - *quantity = 1; + (*arg0)++; + if ((*arg0) > arg1) + (*arg0) = 1; - if (*quantity == valBefore) + if ((*arg0) == valBefore) { return FALSE; } @@ -197,13 +196,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { - (*quantity)--; - if (*quantity <= 0) - *quantity = max; + (*arg0)--; + if ((*arg0) <= 0) + (*arg0) = arg1; - if (*quantity == valBefore) + if ((*arg0) == valBefore) { return FALSE; } @@ -213,13 +212,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT) { - *quantity += 10; - if (*quantity > max) - *quantity = max; + (*arg0) += 10; + if ((*arg0) > arg1) + (*arg0) = arg1; - if (*quantity == valBefore) + if ((*arg0) == valBefore) { return FALSE; } @@ -229,13 +228,13 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *quantity, u16 max) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT) { - *quantity -= 10; - if (*quantity <= 0) - *quantity = 1; + (*arg0) -= 10; + if ((*arg0) <= 0) + (*arg0) = 1; - if (*quantity == valBefore) + if ((*arg0) == valBefore) { return FALSE; } diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index e0f789bcb..5f08c6294 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -19,8 +19,8 @@ extern ScrCmdFunc gMysteryEventScriptCmdTable[]; extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; -// 0x1 in FireRed, 0x2 in LeafGreen, 0x80 in Ruby, 0x100 in Sapphire -#define VERSION_MASK (1 << 9) +#define LANGUAGE_MASK 0x1 +#define VERSION_MASK 0x200 #define mScriptBase data[0] #define mOffset data[1] @@ -29,21 +29,18 @@ extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; EWRAM_DATA static struct ScriptContext sMysteryEventScriptContext = {0}; -static bool32 CheckCompatibility(u16 unk0, u32 unk1, u16 unk2, u32 version) +static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4) { - // 0x1 in English FRLG, 0x2 in English RS, 0x4 in German RS - if (!(unk0 & 0x1)) + if (!(a1 & LANGUAGE_MASK)) return FALSE; - // Same as above - if (!(unk1 & 0x1)) + if (!(a2 & LANGUAGE_MASK)) return FALSE; - // 0x1 in FRLG, 0x4 in RS - if (!(unk2 & 0x4)) + if (!(a3 & 0x4)) return FALSE; - if (!(version & VERSION_MASK)) + if (!(a4 & VERSION_MASK)) return FALSE; return TRUE; @@ -177,18 +174,18 @@ bool8 MEScrCmd_end(struct ScriptContext *ctx) bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx) { - u16 unk0; - u32 unk1; - u16 unk2; - u32 version; + u16 v1; + u32 v2; + u16 v3; + u32 v4; ctx->mOffset = ScriptReadWord(ctx); - unk0 = ScriptReadHalfword(ctx); - unk1 = ScriptReadWord(ctx); - unk2 = ScriptReadHalfword(ctx); - version = ScriptReadWord(ctx); + v1 = ScriptReadHalfword(ctx); + v2 = ScriptReadWord(ctx); + v3 = ScriptReadHalfword(ctx); + v4 = ScriptReadWord(ctx); - if (CheckCompatibility(unk0, unk1, unk2, version) == TRUE) + if (CheckCompatibility(v1, v2, v3, v4) == TRUE) ctx->mValid = TRUE; else SetIncompatible(); diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 72fc2b377..1df6533d9 100755 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -506,13 +506,9 @@ static void IncrementCardStat(u32 statType) } if (stat == NULL) - { AGB_ASSERT(0); - } else if (++(*stat) > MAX_WONDER_CARD_STAT) - { *stat = MAX_WONDER_CARD_STAT; - } } } diff --git a/src/mystery_gift_client.c b/src/mystery_gift_client.c index 567751bad..adf3ce8a6 100644 --- a/src/mystery_gift_client.c +++ b/src/mystery_gift_client.c @@ -44,7 +44,8 @@ u32 MysteryGiftClient_Run(u16 * endVal) { *endVal = sClient->param; MysteryGiftClient_Free(sClient); - FREE_AND_SET_NULL(sClient); + Free(sClient); + sClient = NULL; } return result; } @@ -202,7 +203,7 @@ static u32 Client_Run(struct MysteryGiftClient * client) MysteryGiftLink_InitSend(&client->link, MG_LINKID_GAME_DATA, client->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); break; case CLI_LOAD_TOSS_RESPONSE: - // param here is set by MG_STATE_CLIENT_ASK_TOSS or MG_STATE_CLIENT_ASK_TOSS_UNRECEIVED + // param here is set by MG_STATE_LINK_ASK_TOSS or MG_STATE_LINK_ASK_TOSS_UNRECEIVED MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, client->param); break; case CLI_SAVE_CARD: @@ -229,7 +230,7 @@ static u32 Client_Run(struct MysteryGiftClient * client) MysteryGift_TrySaveStamp(client->recvBuffer); break; case CLI_SAVE_RAM_SCRIPT: - InitRamScript_NoObjectEvent(client->recvBuffer, sizeof(struct RamScriptData)); + InitRamScript_NoObjectEvent(client->recvBuffer, 1000); break; case CLI_RECV_EREADER_TRAINER: memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->frontier.ereaderTrainer)); diff --git a/src/mystery_gift_server.c b/src/mystery_gift_server.c index 891870659..0e0acb642 100644 --- a/src/mystery_gift_server.c +++ b/src/mystery_gift_server.c @@ -44,7 +44,8 @@ u32 MysterGiftServer_Run(u16 * endVal) { *endVal = sServer->param; MysteryGiftServer_Free(sServer); - FREE_AND_SET_NULL(sServer); + Free(sServer); + sServer = NULL; } return result; } diff --git a/src/mystery_gift_view.c b/src/mystery_gift_view.c index ff34c8853..3047a219e 100644 --- a/src/mystery_gift_view.c +++ b/src/mystery_gift_view.c @@ -207,7 +207,8 @@ void WonderCard_Destroy(void) if (sWonderCardData != NULL) { *sWonderCardData = (struct WonderCardData){}; - FREE_AND_SET_NULL(sWonderCardData); + Free(sWonderCardData); + sWonderCardData = NULL; } } @@ -659,7 +660,8 @@ void WonderNews_Destroy(void) if (sWonderNewsData != NULL) { *sWonderNewsData = (struct WonderNewsData){}; - FREE_AND_SET_NULL(sWonderNewsData); + Free(sWonderNewsData); + sWonderNewsData = NULL; } } diff --git a/src/new_game.c b/src/new_game.c index 077b86775..f22ca7940 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -203,6 +203,7 @@ void NewGameInitData(void) WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); + memset(&gSaveBlock2Ptr->follower, 0, sizeof(gSaveBlock2Ptr->follower)); } static void ResetMiniGamesRecords(void) diff --git a/src/overworld.c b/src/overworld.c index d4fbaf29d..ba83cec2d 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -61,6 +61,7 @@ #include "scanline_effect.h" #include "wild_encounter.h" #include "frontier_util.h" +#include "follow_me.h" #include "constants/abilities.h" #include "constants/layouts.h" #include "constants/map_types.h" @@ -830,7 +831,7 @@ static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *, struct Obje static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8); static u8 MovementEventModeCB_Scripted(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8); -static u8 (*const sLinkPlayerMovementModes[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = +static u8 (*const gLinkPlayerMovementModes[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = { [MOVEMENT_MODE_FREE] = MovementEventModeCB_Normal, [MOVEMENT_MODE_FROZEN] = MovementEventModeCB_Ignored, @@ -842,7 +843,7 @@ static u8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *, struct Obje static u8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8); // These handlers return TRUE if the movement was scripted and successful, and FALSE otherwise. -static bool8 (*const sLinkPlayerFacingHandlers[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = +static bool8 (*const gLinkPlayerFacingHandlers[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *, u8) = { FacingHandler_DoNothing, FacingHandler_DpadMovement, @@ -861,7 +862,7 @@ static void MovementStatusHandler_EnterFreeMode(struct LinkPlayerObjectEvent *, static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent *, struct ObjectEvent *); // These handlers are run after an attempted movement. -static void (*const sMovementStatusHandler[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *) = +static void (*const gMovementStatusHandler[])(struct LinkPlayerObjectEvent *, struct ObjectEvent *) = { // FALSE: MovementStatusHandler_EnterFreeMode, @@ -877,6 +878,7 @@ void DoWhiteOut(void) HealPlayerParty(); Overworld_ResetStateAfterWhiteOut(); SetWarpDestinationToLastHealLocation(); + UpdateFollowerPokemonGraphic(); WarpIntoMap(); } @@ -926,6 +928,8 @@ static void Overworld_ResetStateAfterWhiteOut(void) VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 0); VarSet(VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_NONE); } + + FollowMe_TryRemoveFollowerOnWhiteOut(); } static void UpdateMiscOverworldStates(void) @@ -1956,6 +1960,10 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) PlayerStep(inputStruct.dpadDirection, newKeys, heldKeys); } } + + // if stop running but keep holding B -> fix follower frame + if (PlayerHasFollower() && IsPlayerOnFoot() && IsPlayerStandingStill()) + ObjectEventSetHeldMovement(&gObjectEvents[GetFollowerObjectId()], GetFaceDirectionAnimNum(gObjectEvents[GetFollowerObjectId()].facingDirection)); } void CB1_Overworld(void) @@ -1991,6 +1999,20 @@ void CB2_Overworld(void) OverworldBasic(); if (fading) SetFieldVBlankCallback(); + + // Make sure follower's sprite is properly positioned when map reloads. + if (gSaveBlock2Ptr->follower.inProgress) + { + switch(gObjectEvents[gSaveBlock2Ptr->follower.objId].facingDirection) + { + case DIR_EAST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = -8; + break; + case DIR_WEST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 8; + break; + } + } } void SetMainCallback1(MainCallback cb) @@ -2173,6 +2195,7 @@ void CB2_ReturnToFieldWithOpenMenu(void) { FieldClearVBlankHBlankCallbacks(); gFieldCallback2 = FieldCB_ReturnToFieldOpenStartMenu; + UpdateFollowerPokemonGraphic(); CB2_ReturnToField(); } @@ -2639,10 +2662,7 @@ static void ResumeMap(bool32 a1) ResetAllPicSprites(); ResetCameraUpdateInfo(); InstallCameraPanAheadCallback(); - if (!a1) - InitObjectEventPalettes(0); - else - InitObjectEventPalettes(1); + FreeAllSpritePalettes(); FieldEffectActiveListClear(); StartWeather(); @@ -2677,6 +2697,7 @@ static void InitObjectEventsLocal(void) ResetInitialPlayerAvatarState(); TrySpawnObjectEvents(0, 0); TryRunOnWarpIntoMapScript(); + FollowMe_HandleSprite(); } static void InitObjectEventsReturnToField(void) @@ -2989,9 +3010,9 @@ static u16 KeyInterCB_ReadButtons(u32 key) return LINK_KEY_CODE_EMPTY; } -static u16 GetDirectionForDpadKey(u16 key) +static u16 GetDirectionForDpadKey(u16 a1) { - switch (key) + switch (a1) { case LINK_KEY_CODE_DPAD_RIGHT: return FACING_RIGHT; @@ -3110,7 +3131,7 @@ static u16 KeyInterCB_Ready(u32 keyOrPlayerId) } } -static u16 KeyInterCB_SetReady(u32 key) +static u16 KeyInterCB_SetReady(u32 a1) { SetKeyInterceptCallback(KeyInterCB_Ready); return LINK_KEY_CODE_READY; @@ -3560,9 +3581,9 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing) { // This is a hack to split this code onto two separate lines, without declaring a local variable. // C++ style inline variables would be nice here. - #define TEMP sLinkPlayerMovementModes[linkPlayerObjEvent->movementMode](linkPlayerObjEvent, objEvent, facing) + #define TEMP gLinkPlayerMovementModes[linkPlayerObjEvent->movementMode](linkPlayerObjEvent, objEvent, facing) - sMovementStatusHandler[TEMP](linkPlayerObjEvent, objEvent); + gMovementStatusHandler[TEMP](linkPlayerObjEvent, objEvent); // Clean up the hack. #undef TEMP @@ -3573,7 +3594,7 @@ static void SetPlayerFacingDirection(u8 linkPlayerId, u8 facing) static u8 MovementEventModeCB_Normal(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) { - return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); + return gLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); } static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) @@ -3584,7 +3605,7 @@ static u8 MovementEventModeCB_Ignored(struct LinkPlayerObjectEvent *linkPlayerOb // Identical to MovementEventModeCB_Normal static u8 MovementEventModeCB_Scripted(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) { - return sLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); + return gLinkPlayerFacingHandlers[dir](linkPlayerObjEvent, objEvent, dir); } static bool8 FacingHandler_DoNothing(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 dir) diff --git a/src/palette.c b/src/palette.c index 577257eff..9fec449bc 100644 --- a/src/palette.c +++ b/src/palette.c @@ -60,13 +60,13 @@ static void Task_BlendPalettesGradually(u8 taskId); // unaligned word reads are issued in BlendPalette otherwise ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; -static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; +EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sFiller = 0; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; EWRAM_DATA u8 gPaletteDecompressionBuffer[PLTT_DECOMP_BUFFER_SIZE] = {0}; -static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { +static const struct PaletteStructTemplate gDummyPaletteStructTemplate = { .id = 0xFFFF, .state = 1 }; @@ -237,63 +237,63 @@ static void PaletteStruct_Run(u8 a1, u32 *unkFlags) } } -static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) +static void PaletteStruct_Copy(struct PaletteStruct *a1, u32 *unkFlags) { s32 srcIndex; s32 srcCount; u8 i = 0; - u16 srcOffset = palStruct->srcIndex * palStruct->template->size; + u16 srcOffset = a1->srcIndex * a1->template->size; - if (!palStruct->template->pst_field_8_0) + if (!a1->template->pst_field_8_0) { - while (i < palStruct->template->size) + while (i < a1->template->size) { - gPlttBufferUnfaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; + gPlttBufferUnfaded[a1->destOffset] = a1->template->src[srcOffset]; + gPlttBufferFaded[a1->destOffset] = a1->template->src[srcOffset]; i++; - palStruct->destOffset++; + a1->destOffset++; srcOffset++; } } else { - while (i < palStruct->template->size) + while (i < a1->template->size) { - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; + gPlttBufferFaded[a1->destOffset] = a1->template->src[srcOffset]; i++; - palStruct->destOffset++; + a1->destOffset++; srcOffset++; } } - palStruct->destOffset = palStruct->baseDestOffset; - palStruct->countdown1 = palStruct->template->time1; - palStruct->srcIndex++; + a1->destOffset = a1->baseDestOffset; + a1->countdown1 = a1->template->time1; + a1->srcIndex++; - srcIndex = palStruct->srcIndex; - srcCount = palStruct->template->srcCount; + srcIndex = a1->srcIndex; + srcCount = a1->template->srcCount; if (srcIndex >= srcCount) { - if (palStruct->countdown2) - palStruct->countdown2--; - palStruct->srcIndex = 0; + if (a1->countdown2) + a1->countdown2--; + a1->srcIndex = 0; } - *unkFlags |= 1 << (palStruct->baseDestOffset >> 4); + *unkFlags |= 1 << (a1->baseDestOffset >> 4); } -static void PaletteStruct_Blend(struct PaletteStruct *palStruct, u32 *unkFlags) +static void PaletteStruct_Blend(struct PaletteStruct *a1, u32 *unkFlags) { - if (gPaletteFade.active && ((1 << (palStruct->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) + if (gPaletteFade.active && ((1 << (a1->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) { - if (!palStruct->template->pst_field_8_0) + if (!a1->template->pst_field_8_0) { if (gPaletteFade.delayCounter != gPaletteFade_delay) { BlendPalette( - palStruct->baseDestOffset, - palStruct->template->size, + a1->baseDestOffset, + a1->template->size, gPaletteFade.y, gPaletteFade.blendColor); } @@ -302,13 +302,13 @@ static void PaletteStruct_Blend(struct PaletteStruct *palStruct, u32 *unkFlags) { if (!gPaletteFade.delayCounter) { - if (palStruct->countdown1 != palStruct->template->time1) + if (a1->countdown1 != a1->template->time1) { - u32 srcOffset = palStruct->srcIndex * palStruct->template->size; + u32 srcOffset = a1->srcIndex * a1->template->size; u8 i; - for (i = 0; i < palStruct->template->size; i++) - gPlttBufferFaded[palStruct->baseDestOffset + i] = palStruct->template->src[srcOffset + i]; + for (i = 0; i < a1->template->size; i++) + gPlttBufferFaded[a1->baseDestOffset + i] = a1->template->src[srcOffset + i]; } } } @@ -352,7 +352,7 @@ void PaletteStruct_ResetById(u16 id) static void PaletteStruct_Reset(u8 paletteNum) { - sPaletteStructs[paletteNum].template = &sDummyPaletteStructTemplate; + sPaletteStructs[paletteNum].template = &gDummyPaletteStructTemplate; sPaletteStructs[paletteNum].active = FALSE; sPaletteStructs[paletteNum].baseDestOffset = 0; sPaletteStructs[paletteNum].destOffset = 0; diff --git a/src/party_menu.c b/src/party_menu.c index 016c359cb..e15d001c6 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4969,7 +4969,7 @@ static void Task_TryLearnNewMoves(u8 taskId) { u16 learnMove; - if (WaitFanfare(FALSE) && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) + if (WaitFanfare(0) && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON)))) { RemoveLevelUpStatsWindow(); learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE); @@ -5647,11 +5647,11 @@ static u8 GetBattleEntryLevelCap(void) case FACILITY_MULTI_OR_EREADER: return MAX_LEVEL; case FACILITY_UNION_ROOM: - return UNION_ROOM_MAX_LEVEL; + return 30; default: // Battle Frontier if (gSpecialVar_0x8004 == FRONTIER_LVL_50) - return FRONTIER_MAX_LEVEL_50; - return FRONTIER_MAX_LEVEL_OPEN; + return 50; + return MAX_LEVEL; } } diff --git a/src/player_pc.c b/src/player_pc.c index 0ca78dea8..bf8479ce1 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -97,84 +97,84 @@ struct ItemStorageMenu u8 swapLineSpriteIds[SWAP_LINE_LENGTH]; }; -static void InitPlayerPCMenu(u8); -static void PlayerPCProcessMenuInput(u8); -static void InitItemStorageMenu(u8, u8); +static void InitPlayerPCMenu(u8 taskId); +static void PlayerPCProcessMenuInput(u8 taskId); +static void InitItemStorageMenu(u8 taskId, u8 var); static u8 GetMailboxMailCount(void); static void Mailbox_CompactMailList(void); -static void Mailbox_DrawMailboxMenu(u8); -static void Mailbox_ProcessInput(u8); -static void Mailbox_PrintWhatToDoWithPlayerMailText(u8); +static void Mailbox_DrawMailboxMenu(u8 taskId); +static void Mailbox_ProcessInput(u8 taskId); +static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId); static void Mailbox_ReturnToPlayerPC(u8); -static void Mailbox_PrintMailOptions(u8); -static void Mailbox_MailOptionsProcessInput(u8); +static void Mailbox_PrintMailOptions(u8 taskId); +static void Mailbox_MailOptionsProcessInput(u8 taskId); -static void PlayerPC_ItemStorage(u8); -static void PlayerPC_Mailbox(u8); -static void PlayerPC_Decoration(u8); -static void PlayerPC_TurnOff(u8); +static void PlayerPC_ItemStorage(u8 taskId); +static void PlayerPC_Mailbox(u8 taskId); +static void PlayerPC_Decoration(u8 var); +static void PlayerPC_TurnOff(u8 taskId); -static void Mailbox_DoMailMoveToBag(u8); -static void Mailbox_DoMailRead(u8); -static void Mailbox_MoveToBag(u8); -static void Mailbox_Give(u8); -static void Mailbox_Cancel(u8); +static void Mailbox_DoMailMoveToBag(u8 taskId); +static void Mailbox_DoMailRead(u8 taskId); +static void Mailbox_MoveToBag(u8 taskId); +static void Mailbox_Give(u8 taskId); +static void Mailbox_Cancel(u8 taskId); -static void Mailbox_CancelMoveToBag(u8); -static void Mailbox_HandleConfirmMoveToBag(u8); -static void Mailbox_AskConfirmMoveToBag(u8); -static void Mailbox_DoGiveMailPokeMenu(u8); -static void Mailbox_NoPokemonForMail(u8); +static void Mailbox_CancelMoveToBag(u8 taskId); +static void Mailbox_HandleConfirmMoveToBag(u8 taskId); +static void Mailbox_AskConfirmMoveToBag(u8 taskId); +static void Mailbox_DoGiveMailPokeMenu(u8 taskId); +static void Mailbox_NoPokemonForMail(u8 taskId); -static void Mailbox_FadeAndReadMail(u8); +static void Mailbox_FadeAndReadMail(u8 taskId); static void Mailbox_ReturnToFieldFromReadMail(void); static void Mailbox_ReshowAfterMail(void); -static void Mailbox_HandleReturnToProcessInput(u8); +static void Mailbox_HandleReturnToProcessInput(u8 taskId); static void Mailbox_UpdateMailListAfterDeposit(void); -static void ItemStorage_Withdraw(u8); -static void ItemStorage_Deposit(u8); -static void ItemStorage_Toss(u8); -static void ItemStorage_Exit(u8); -static void ItemStorage_TossItemYes(u8); -static void ItemStorage_TossItemNo(u8); +static void ItemStorage_Withdraw(u8 taskId); +static void ItemStorage_Deposit(u8 taskId); +static void ItemStorage_Toss(u8 taskId); +static void ItemStorage_Exit(u8 taskId); +static void ItemStorage_TossItemYes(u8 taskId); +static void ItemStorage_TossItemNo(u8 taskId); static void ItemStorageMenuPrint(const u8 *); -static void ItemStorageMenuProcessInput(u8); +static void ItemStorageMenuProcessInput(u8 taskId); static void SetPlayerPCListCount(u8); -static void ItemStorage_HandleReturnToProcessInput(u8); +static void ItemStorage_HandleReturnToProcessInput(u8 taskId); -static void ItemStorage_Enter(u8, bool8); -static void ItemStorage_CreateListMenu(u8); -static void ItemStorage_ProcessInput(u8); -static void Task_ItemStorage_Deposit(u8); +static void ItemStorage_Enter(u8 taskId, bool8 toss); +static void ItemStorage_CreateListMenu(u8 taskId); +static void ItemStorage_ProcessInput(u8 taskId); +static void Task_ItemStorage_Deposit(u8 taskId); static void ItemStorage_ReshowAfterBagMenu(void); -static void ItemStorage_DoItemWithdraw(u8); -static void ItemStorage_DoItemToss(u8); -static void ItemStorage_HandleQuantityRolling(u8); -static void ItemStorage_ExitItemList(u8); -static void ItemStorage_StartItemSwap(u8); -static void ItemStorage_DoItemAction(u8); -static void ItemStorage_FinishItemSwap(u8, bool8); -static void ItemStorage_HandleRemoveItem(u8); -static void ItemStorage_HandleErrorMessageInput(u8); -static void ItemStorage_ReturnToListInput(u8); +static void ItemStorage_DoItemWithdraw(u8 taskId); +static void ItemStorage_DoItemToss(u8 taskid); +static void ItemStorage_HandleQuantityRolling(u8 taskid); +static void ItemStorage_ExitItemList(u8 taskId); +static void ItemStorage_StartItemSwap(u8 taskId); +static void ItemStorage_DoItemAction(u8 taskId); +static void ItemStorage_FinishItemSwap(u8 taskId, bool8 a); +static void ItemStorage_HandleRemoveItem(u8 taskId); +static void ItemStorage_HandleErrorMessageInput(u8 taskId); +static void ItemStorage_ReturnToListInput(u8 taskId); static const u8* ItemStorage_GetMessage(u16); -static void CopyItemName_PlayerPC(u8 *, u16); +static void CopyItemName_PlayerPC(u8 *string, u16 itemId); static void ItemStorage_Init(void); -static void ItemStorage_DrawSwapArrow(u8, u8, u8); +static void ItemStorage_DrawSwapArrow(u8 y, u8, u8 speed); static void ItemStorage_RemoveWindow(u8); static void ItemStorage_UpdateSwapLinePos(u8); -static void ItemStorage_ProcessItemSwapInput(u8); +static void ItemStorage_ProcessItemSwapInput(u8 taskId); static void ItemStorage_EraseItemIcon(void); -static void ItemStorage_DrawItemIcon(u16); -static void ItemStorage_PrintDescription(s32); -static void ItemStorage_EraseMainMenu(u8); -static void ItemStorage_MoveCursor(s32, bool8, struct ListMenu *); -static void ItemStorage_PrintMenuItem(u8, u32, u8); +static void ItemStorage_DrawItemIcon(u16 itemId); +static void ItemStorage_PrintDescription(s32 id); +static void ItemStorage_EraseMainMenu(u8 taskId); +static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu); +static void ItemStorage_PrintMenuItem(u8 windowId, u32 id, u8 yOffset); static EWRAM_DATA const u8 *sTopMenuOptionOrder = NULL; static EWRAM_DATA u8 sTopMenuNumOptions = 0; @@ -518,7 +518,7 @@ static void InitItemStorageMenu(u8 taskId, u8 var) static void ItemStorageMenuPrint(const u8 *textPtr) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, textPtr, 0, 1, 0, 0); } @@ -572,7 +572,7 @@ void CB2_PlayerPCExitBagMenu(void) static void ItemStorage_ReshowAfterBagMenu(void) { LoadMessageBoxAndBorderGfx(); - DrawDialogueFrame(0, TRUE); + DrawDialogueFrame(0, 1); InitItemStorageMenu(CreateTask(ItemStorage_HandleReturnToProcessInput, 0), 1); FadeInFromBlack(); } @@ -1241,7 +1241,7 @@ static void ItemStorage_ReturnToMenuSelect(u8 taskId) s16 *data = gTasks[taskId].data; if (!IsDma3ManagerBusyWithBgCopy()) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); // Select Withdraw/Toss by default depending on which was just exited if (!tInTossMenu) diff --git a/src/pokeball.c b/src/pokeball.c index f203633a5..a9ccd42d6 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -438,7 +438,7 @@ static void SpriteCB_BallThrow(struct Sprite *sprite) sprite->y2 = 0; sprite->data[5] = 0; ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler)); - AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); + AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 0x1C, ballId); sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId); sprite->sBattler = opponentBattler; sprite->data[7] = noOfShakes; @@ -752,7 +752,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) StartSpriteAnim(sprite, 1); ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); - AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 28, ballId); + AnimateBallOpenParticles(sprite->x, sprite->y - 5, 1, 0x1C, ballId); sprite->data[0] = LaunchBallFadeMonTask(TRUE, sprite->sBattler, 14, ballId); sprite->callback = HandleBallAnimEnd; @@ -1000,50 +1000,37 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite) #undef sBattler -static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 subpriority) +static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d) { - return AnimateBallOpenParticles(x, y, kindOfStars, subpriority, BALL_POKE); + return AnimateBallOpenParticles(x, y, kindOfStars, d, BALL_POKE); } -static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 spritePalNum, u32 selectedPalettes) +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2) { - return LaunchBallFadeMonTask(unFadeLater, spritePalNum, selectedPalettes, BALL_POKE); + return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE); } -// Sprite data for the pokemon -#define sSpecies data[7] - -// Sprite data for the pokeball -#define sMonSpriteId data[0] -#define sDelay data[1] -#define sMonPalNum data[2] -#define sFadePalsLo data[3] -#define sFadePalsHi data[4] -#define sFinalMonX data[5] -#define sFinalMonY data[6] -#define sTrigIdx data[7] - // Pokeball in Birch intro, and when receiving via trade -void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species) +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species) { u8 spriteId; - LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]); - LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]); - spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subpriortiy); + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy); - gSprites[spriteId].sMonSpriteId = monSpriteId; - gSprites[spriteId].sFinalMonX = gSprites[monSpriteId].x; - gSprites[spriteId].sFinalMonY = gSprites[monSpriteId].y; + gSprites[spriteId].data[0] = monSpriteId; + gSprites[spriteId].data[5] = gSprites[monSpriteId].x; + gSprites[spriteId].data[6] = gSprites[monSpriteId].y; gSprites[monSpriteId].x = x; gSprites[monSpriteId].y = y; - gSprites[monSpriteId].sSpecies = species; + gSprites[monSpriteId].data[7] = species; - gSprites[spriteId].sDelay = delay; - gSprites[spriteId].sMonPalNum = monPalNum; - gSprites[spriteId].sFadePalsLo = fadePalettes; - gSprites[spriteId].sFadePalsHi = fadePalettes >> 16; + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = battlerId; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 0x10; gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].callback = SpriteCB_PokeballReleaseMon; @@ -1052,103 +1039,92 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, static void SpriteCB_PokeballReleaseMon(struct Sprite *sprite) { - if (sprite->sDelay == 0) + if (sprite->data[1] == 0) { - u8 subpriority; - u8 spriteId = sprite->sMonSpriteId; - u8 monPalNum = sprite->sMonPalNum; - u32 selectedPalettes = (u16)sprite->sFadePalsLo | ((u16)sprite->sFadePalsHi << 16); + u8 r5; + u8 r7 = sprite->data[0]; + u8 battlerId = sprite->data[2]; + u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); if (sprite->subpriority != 0) - subpriority = sprite->subpriority - 1; + r5 = sprite->subpriority - 1; else - subpriority = 0; + r5 = 0; StartSpriteAnim(sprite, 1); - AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority); - // sDelay re-used to store task id but never read - sprite->sDelay = LaunchBallFadeMonTaskForPokeball(1, monPalNum, selectedPalettes); + AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, r5); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4); sprite->callback = SpriteCB_ReleasedMonFlyOut; - gSprites[spriteId].invisible = FALSE; - StartSpriteAffineAnim(&gSprites[spriteId], BATTLER_AFFINE_EMERGE); - AnimateSprite(&gSprites[spriteId]); - gSprites[spriteId].data[1] = 0x1000; - sprite->sTrigIdx = 0; + gSprites[r7].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[r7], BATTLER_AFFINE_EMERGE); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data[1] = 0x1000; + sprite->data[7] = 0; } else { - sprite->sDelay--; + sprite->data[1]--; } } static void SpriteCB_ReleasedMonFlyOut(struct Sprite *sprite) { - bool8 emergeAnimFinished = FALSE; - bool8 atFinalPosition = FALSE; - u8 monSpriteId = sprite->sMonSpriteId; - u16 x, y; + bool8 r12 = FALSE; + bool8 r6 = FALSE; + u8 monSpriteId = sprite->data[0]; + u16 var1; + u16 var2; if (sprite->animEnded) sprite->invisible = TRUE; - if (gSprites[monSpriteId].affineAnimEnded) { StartSpriteAffineAnim(&gSprites[monSpriteId], BATTLER_AFFINE_NORMAL); - emergeAnimFinished = TRUE; + r12 = TRUE; } - - x = (sprite->sFinalMonX - sprite->x) * sprite->sTrigIdx / 128 + sprite->x; - y = (sprite->sFinalMonY - sprite->y) * sprite->sTrigIdx / 128 + sprite->y; - gSprites[monSpriteId].x = x; - gSprites[monSpriteId].y = y; - - if (sprite->sTrigIdx < 128) + var1 = (sprite->data[5] - sprite->x) * sprite->data[7] / 128 + sprite->x; + var2 = (sprite->data[6] - sprite->y) * sprite->data[7] / 128 + sprite->y; + gSprites[monSpriteId].x = var1; + gSprites[monSpriteId].y = var2; + if (sprite->data[7] < 128) { - s16 sine = -(gSineTable[(u8)sprite->sTrigIdx] / 8); + s16 sine = -(gSineTable[(u8)sprite->data[7]] / 8); - sprite->sTrigIdx += 4; + sprite->data[7] += 4; gSprites[monSpriteId].x2 = sine; gSprites[monSpriteId].y2 = sine; } else { - gSprites[monSpriteId].x = sprite->sFinalMonX; - gSprites[monSpriteId].y = sprite->sFinalMonY; + gSprites[monSpriteId].x = sprite->data[5]; + gSprites[monSpriteId].y = sprite->data[6]; gSprites[monSpriteId].x2 = 0; gSprites[monSpriteId].y2 = 0; - atFinalPosition = TRUE; + r6 = TRUE; } - if (sprite->animEnded && emergeAnimFinished && atFinalPosition) + if (sprite->animEnded && r12 && r6) { - if (gSprites[monSpriteId].sSpecies == SPECIES_EGG) - DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].sSpecies, TRUE, 0); + if (gSprites[monSpriteId].data[7] == SPECIES_EGG) + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0); else - DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].sSpecies, FALSE, 0); + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0); DestroySpriteAndFreeResources(sprite); } } -#undef sSpecies -#undef sFinalMonX -#undef sFinalMonY -#undef sTrigIdx - - -#define sTimer data[5] - -u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 delay, u32 fadePalettes) +u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) { u8 spriteId; - LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[BALL_POKE]); - LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[BALL_POKE]); - spriteId = CreateSprite(&gBallSpriteTemplates[BALL_POKE], x, y, subPriority); - gSprites[spriteId].sMonSpriteId = monSpriteId; - gSprites[spriteId].sDelay = delay; - gSprites[spriteId].sMonPalNum = monPalNum; - gSprites[spriteId].sFadePalsLo = fadePalettes; - gSprites[spriteId].sFadePalsHi = fadePalettes >> 16; + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subPriority); + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = b; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 16; gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].callback = SpriteCB_TradePokeball; return spriteId; @@ -1156,22 +1132,21 @@ u8 CreateTradePokeballSprite(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPri static void SpriteCB_TradePokeball(struct Sprite *sprite) { - if (sprite->sDelay == 0) + if (sprite->data[1] == 0) { - u8 subpriority; - u8 monSpriteId = sprite->sMonSpriteId; - u8 monPalNum = sprite->sMonPalNum; - u32 selectedPalettes = (u16)sprite->sFadePalsLo | ((u16)sprite->sFadePalsHi << 16); + u8 r6; + u8 monSpriteId = sprite->data[0]; + u8 r8 = sprite->data[2]; + u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); if (sprite->subpriority != 0) - subpriority = sprite->subpriority - 1; + r6 = sprite->subpriority - 1; else - subpriority = 0; + r6 = 0; StartSpriteAnim(sprite, 1); - AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, subpriority); - // sDelay re-used to store task id but never read - sprite->sDelay = LaunchBallFadeMonTaskForPokeball(1, monPalNum, selectedPalettes); + AnimateBallOpenParticlesForPokeball(sprite->x, sprite->y - 5, sprite->oam.priority, r6); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); sprite->callback = SpriteCB_TradePokeballSendOff; #ifdef BUGFIX // FIX: If this is used on a sprite that has previously had an affine animation, it will not @@ -1184,7 +1159,7 @@ static void SpriteCB_TradePokeball(struct Sprite *sprite) } else { - sprite->sDelay--; + sprite->data[1]--; } } @@ -1192,16 +1167,15 @@ static void SpriteCB_TradePokeballSendOff(struct Sprite *sprite) { u8 monSpriteId; - sprite->sTimer++; - if (sprite->sTimer == 11) + sprite->data[5]++; + if (sprite->data[5] == 11) PlaySE(SE_BALL_TRADE); - - monSpriteId = sprite->sMonSpriteId; + monSpriteId = sprite->data[0]; if (gSprites[monSpriteId].affineAnimEnded) { StartSpriteAnim(sprite, 2); gSprites[monSpriteId].invisible = TRUE; - sprite->sTimer = 0; + sprite->data[5] = 0; sprite->callback = SpriteCB_TradePokeballEnd; } else @@ -1217,13 +1191,6 @@ static void SpriteCB_TradePokeballEnd(struct Sprite *sprite) sprite->callback = SpriteCallbackDummy; } -#undef sMonSpriteId -#undef sDelay -#undef sMonPalNum -#undef sFadePalsLo -#undef sFadePalsHi -#undef sTimer - static void Unref_DestroySpriteAndFreeResources(struct Sprite *sprite) { DestroySpriteAndFreeResources(sprite); diff --git a/src/pokedex.c b/src/pokedex.c index 9592aee9c..206782e59 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -840,7 +840,7 @@ static const u8 sText_No000[] = _("{NO}000"); static const u8 sCaughtBall_Gfx[] = INCBIN_U8("graphics/pokedex/caught_ball.4bpp"); static const u8 sText_TenDashes[] = _("----------"); -ALIGNED(4) static const u8 sExpandedPlaceholder_PokedexDescription[] = _(""); +ALIGNED(4) static const u8 gExpandedPlaceholder_PokedexDescription[] = _(""); #include "data/pokemon/pokedex_text.h" #include "data/pokemon/pokedex_entries.h" @@ -4138,7 +4138,7 @@ static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry) if (owned) description = gPokedexEntries[num].description; else - description = sExpandedPlaceholder_PokedexDescription; + description = gExpandedPlaceholder_PokedexDescription; PrintInfoScreenText(description, GetStringCenterAlignXOffset(FONT_NORMAL, description, 0xF0), 0x5F); } @@ -4428,37 +4428,37 @@ bool16 HasAllMons(void) return TRUE; } -static void ResetOtherVideoRegisters(u16 regBits) +static void ResetOtherVideoRegisters(u16 a) { - if (!(regBits & DISPCNT_BG0_ON)) + if (!(a & DISPCNT_BG0_ON)) { ClearGpuRegBits(0, DISPCNT_BG0_ON); SetGpuReg(REG_OFFSET_BG0CNT, 0); SetGpuReg(REG_OFFSET_BG0HOFS, 0); SetGpuReg(REG_OFFSET_BG0VOFS, 0); } - if (!(regBits & DISPCNT_BG1_ON)) + if (!(a & DISPCNT_BG1_ON)) { ClearGpuRegBits(0, DISPCNT_BG1_ON); SetGpuReg(REG_OFFSET_BG1CNT, 0); SetGpuReg(REG_OFFSET_BG1HOFS, 0); SetGpuReg(REG_OFFSET_BG1VOFS, 0); } - if (!(regBits & DISPCNT_BG2_ON)) + if (!(a & DISPCNT_BG2_ON)) { ClearGpuRegBits(0, DISPCNT_BG2_ON); SetGpuReg(REG_OFFSET_BG2CNT, 0); SetGpuReg(REG_OFFSET_BG2HOFS, 0); SetGpuReg(REG_OFFSET_BG2VOFS, 0); } - if (!(regBits & DISPCNT_BG3_ON)) + if (!(a & DISPCNT_BG3_ON)) { ClearGpuRegBits(0, DISPCNT_BG3_ON); SetGpuReg(REG_OFFSET_BG3CNT, 0); SetGpuReg(REG_OFFSET_BG3HOFS, 0); SetGpuReg(REG_OFFSET_BG3VOFS, 0); } - if (!(regBits & DISPCNT_OBJ_ON)) + if (!(a & DISPCNT_OBJ_ON)) { ClearGpuRegBits(0, DISPCNT_OBJ_ON); ResetSpriteData(); diff --git a/src/pokedex_area_region_map.c b/src/pokedex_area_region_map.c index ff32f8eef..4926c019d 100644 --- a/src/pokedex_area_region_map.c +++ b/src/pokedex_area_region_map.c @@ -63,7 +63,7 @@ void FreePokedexAreaMapBgNum(void) TRY_FREE_AND_SET_NULL(sPokedexAreaMapBgNum); } -void PokedexAreaMapChangeBgY(u32 move) +void PokedexAreaMapChangeBgY(u32 a0) { - ChangeBgY(*sPokedexAreaMapBgNum, move * 0x100, BG_COORD_SET); + ChangeBgY(*sPokedexAreaMapBgNum, a0 * 0x100, BG_COORD_SET); } diff --git a/src/pokemon.c b/src/pokemon.c index 170425391..61125e362 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2464,7 +2464,7 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) level = GetFrontierEnemyMonLevel(gSaveBlock2Ptr->frontier.lvlMode); else if (lvl50) - level = FRONTIER_MAX_LEVEL_50; + level = 50; else level = src->level; @@ -5379,10 +5379,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) return offset; } -static void BufferStatRoseMessage(s32 statIdx) +static void BufferStatRoseMessage(s32 arg0) { gBattlerTarget = gBattlerInMenuId; - StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[statIdx]]); + StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]); StringCopy(gBattleTextBuff2, gText_StatRose); BattleStringExpandPlaceholdersToDisplayedString(gText_DefendersStatRose); } @@ -5798,13 +5798,13 @@ u16 GetLinkTrainerFlankId(u8 linkPlayerId) return flankId; } -s32 GetBattlerMultiplayerId(u16 id) +s32 GetBattlerMultiplayerId(u16 a1) { - s32 multiplayerId; - for (multiplayerId = 0; multiplayerId < MAX_LINK_PLAYERS; multiplayerId++) - if (gLinkPlayers[multiplayerId].id == id) + s32 id; + for (id = 0; id < MAX_LINK_PLAYERS; id++) + if (gLinkPlayers[id].id == a1) break; - return multiplayerId; + return id; } u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) @@ -6587,12 +6587,12 @@ void SetWildMonHeldItem(void) u16 rnd = Random() % 100; u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, 0); u16 chanceNoItem = 45; - u16 chanceNotRare = 95; + u16 chanceCommon = 95; if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG, 0) && GetMonAbility(&gPlayerParty[0]) == ABILITY_COMPOUND_EYES) { chanceNoItem = 20; - chanceNotRare = 80; + chanceCommon = 80; } if (gMapHeader.mapLayoutId == LAYOUT_ALTERING_CAVE) { @@ -6600,7 +6600,7 @@ void SetWildMonHeldItem(void) if (alteringCaveId != 0) { // In active Altering Cave, use special item list - if (rnd < chanceNotRare) + if (rnd < chanceCommon) return; SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &sAlteringCaveWildMonHeldItems[alteringCaveId].item); } @@ -6609,27 +6609,27 @@ void SetWildMonHeldItem(void) // In inactive Altering Cave, use normal items if (rnd < chanceNoItem) return; - if (rnd < chanceNotRare) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + if (rnd < chanceCommon) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); } } else { - if (gBaseStats[species].itemCommon == gBaseStats[species].itemRare && gBaseStats[species].itemCommon != ITEM_NONE) + if (gBaseStats[species].item1 == gBaseStats[species].item2 && gBaseStats[species].item1 != ITEM_NONE) { // Both held items are the same, 100% chance to hold item - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); } else { if (rnd < chanceNoItem) return; - if (rnd < chanceNotRare) - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemCommon); + if (rnd < chanceCommon) + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item1); else - SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].itemRare); + SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &gBaseStats[species].item2); } } } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 32333ee67..f6aa82391 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2205,7 +2205,7 @@ static bool32 AreLinkQueuesEmpty(void) return !gRfu.recvQueue.count && !gRfu.sendQueue.count; } -static int GetNumPlayersForBonus(u8 *atJumpPeak) +static int GetNumPlayersForBonus(u8 *arg0) { int i = 0; int flags = 0; @@ -2213,7 +2213,7 @@ static int GetNumPlayersForBonus(u8 *atJumpPeak) for (; i < MAX_RFU_PLAYERS; i++) { - if (atJumpPeak[i]) + if (arg0[i]) { flags |= 1 << i; count++; @@ -3612,6 +3612,7 @@ static u32 AddMessageWindow(u32 left, u32 top, u32 width, u32 height) static void CreatePokeJumpYesNoMenu(u16 left, u16 top, u8 cursorPos) { struct WindowTemplate window; + u8 a = cursorPos; window.bg = BG_INTERFACE; window.tilemapLeft = left; @@ -3621,7 +3622,7 @@ static void CreatePokeJumpYesNoMenu(u16 left, u16 top, u8 cursorPos) window.paletteNum = 2; window.baseBlock = 0x2B; - CreateYesNoMenu(&window, 1, 0xD, cursorPos); + CreateYesNoMenu(&window, 1, 0xD, a); } // "Points" for jump score and "times" for number of jumps in a row diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 008fae3c9..70d84b7e4 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -654,6 +654,7 @@ static void SetMovingMonPriority(u8); static void SpriteCB_HeldMon(struct Sprite *); static struct Sprite *CreateMonIconSprite(u16, u32, s16, s16, u8, u8); static void DestroyBoxMonIcon(struct Sprite *); +extern void UpdateFollowerPokemonGraphic(void); // Pokémon data static void MoveMon(void); @@ -1040,7 +1041,7 @@ static const struct BgTemplate sBgTemplates[] = }, }; -static const struct SpritePalette sWaveformSpritePalette = +static const struct SpritePalette gWaveformSpritePalette = { sWaveform_Pal, PALTAG_MISC_2 }; @@ -1695,6 +1696,7 @@ static void CB2_ExitPokeStorage(void) { sPreviousBoxOption = GetCurrentBoxOption(); gFieldCallback = FieldTask_ReturnToPcMenu; + UpdateFollowerPokemonGraphic(); SetMainCallback2(CB2_ReturnToField); } @@ -3844,7 +3846,7 @@ static bool8 InitPokeStorageWindows(void) static void LoadWaveformSpritePalette(void) { - LoadSpritePalette(&sWaveformSpritePalette); + LoadSpritePalette(&gWaveformSpritePalette); } static void InitPalettesAndSprites(void) @@ -5417,7 +5419,8 @@ static bool32 WaitForWallpaperGfxLoad(void) if (IsDma3ManagerBusyWithBgCopy()) return FALSE; - TRY_FREE_AND_SET_NULL(sStorage->wallpaperTiles); + if (sStorage->wallpaperTiles != NULL) + FREE_AND_SET_NULL(sStorage->wallpaperTiles); return TRUE; } @@ -8475,11 +8478,11 @@ static void MultiMove_ClearIconFromBg(u8 x, u8 y) } } -static void MultiMove_InitMove(u16 x, u16 y, u16 moveSteps) +static void MultiMove_InitMove(u16 x, u16 y, u16 arg2) { sMultiMove->bgX = x; sMultiMove->bgY = y; - sMultiMove->bgMoveSteps = moveSteps; + sMultiMove->bgMoveSteps = arg2; } static u8 MultiMove_UpdateMove(void) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index c25d58ae6..10c69a422 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -195,62 +195,62 @@ static bool8 LoadGraphics(void); static void CB2_InitSummaryScreen(void); static void InitBGs(void); static bool8 DecompressGraphics(void); -static void CopyMonToSummaryStruct(struct Pokemon*); -static bool8 ExtractMonDataToSummaryStruct(struct Pokemon*); +static void CopyMonToSummaryStruct(struct Pokemon* a); +static bool8 ExtractMonDataToSummaryStruct(struct Pokemon* a); static void SetDefaultTilemaps(void); -static void CloseSummaryScreen(u8); -static void Task_HandleInput(u8); -static void ChangeSummaryPokemon(u8, s8); -static void Task_ChangeSummaryMon(u8); -static s8 AdvanceMonIndex(s8); -static s8 AdvanceMultiBattleMonIndex(s8); -static bool8 IsValidToViewInMulti(struct Pokemon*); -static void ChangePage(u8, s8); -static void PssScrollRight(u8); -static void PssScrollRightEnd(u8); -static void PssScrollLeft(u8); -static void PssScrollLeftEnd(u8); +static void CloseSummaryScreen(u8 taskId); +static void Task_HandleInput(u8 taskId); +static void ChangeSummaryPokemon(u8 taskId, s8 a); +static void Task_ChangeSummaryMon(u8 taskId); +static s8 AdvanceMonIndex(s8 delta); +static s8 AdvanceMultiBattleMonIndex(s8 delta); +static bool8 IsValidToViewInMulti(struct Pokemon* mon); +static void ChangePage(u8 taskId, s8 a); +static void PssScrollRight(u8 taskId); +static void PssScrollRightEnd(u8 taskId); +static void PssScrollLeft(u8 taskId); +static void PssScrollLeftEnd(u8 taskId); static void TryDrawExperienceProgressBar(void); -static void SwitchToMoveSelection(u8); -static void Task_HandleInput_MoveSelect(u8); +static void SwitchToMoveSelection(u8 taskId); +static void Task_HandleInput_MoveSelect(u8 taskId); static bool8 HasMoreThanOneMove(void); -static void ChangeSelectedMove(s16 *, s8, u8 *); -static void CloseMoveSelectMode(u8); -static void SwitchToMovePositionSwitchMode(u8); -static void Task_HandleInput_MovePositionSwitch(u8); -static void ExitMovePositionSwitchMode(u8, bool8); -static void SwapMonMoves(struct Pokemon *, u8, u8); -static void SwapBoxMonMoves(struct BoxPokemon *, u8, u8); -static void Task_SetHandleReplaceMoveInput(u8); -static void Task_HandleReplaceMoveInput(u8); +static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr); +static void CloseMoveSelectMode(u8 taskId); +static void SwitchToMovePositionSwitchMode(u8 a); +static void Task_HandleInput_MovePositionSwitch(u8 taskId); +static void ExitMovePositionSwitchMode(u8 taskId, bool8 swapMoves); +static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2); +static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2); +static void Task_SetHandleReplaceMoveInput(u8 taskId); +static void Task_HandleReplaceMoveInput(u8 taskId); static bool8 CanReplaceMove(void); -static void ShowCantForgetHMsWindow(u8); -static void Task_HandleInputCantForgetHMsMoves(u8); +static void ShowCantForgetHMsWindow(u8 taskId); +static void Task_HandleInputCantForgetHMsMoves(u8 taskId); static void DrawPagination(void); -static void HandlePowerAccTilemap(u16, s16); -static void Task_ShowPowerAccWindow(u8); -static void HandleAppealJamTilemap(u16, s16, u16); -static void Task_ShowAppealJamWindow(u8); -static void HandleStatusTilemap(u16, s16); -static void Task_ShowStatusWindow(u8); -static void TilemapFiveMovesDisplay(u16 *, u16, bool8); -static void DrawPokerusCuredSymbol(struct Pokemon*); -static void DrawExperienceProgressBar(struct Pokemon*); -static void DrawContestMoveHearts(u16); +static void HandlePowerAccTilemap(u16 a, s16 b); +static void Task_ShowPowerAccWindow(u8 taskId); +static void HandleAppealJamTilemap(u16 a, s16 b, u16 c); +static void Task_ShowAppealJamWindow(u8 taskId); +static void HandleStatusTilemap(u16 a, s16 b); +static void Task_ShowStatusWindow(u8 taskId); +static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove); +static void DrawPokerusCuredSymbol(struct Pokemon* mon); +static void DrawExperienceProgressBar(struct Pokemon* mon); +static void DrawContestMoveHearts(u16 move); static void LimitEggSummaryPageDisplay(void); static void ResetWindows(void); static void PrintMonInfo(void); static void PrintNotEggInfo(void); static void PrintEggInfo(void); -static void PrintGenderSymbol(struct Pokemon *, u16); +static void PrintGenderSymbol(struct Pokemon *mon, u16 a); static void PrintPageNamesAndStats(void); -static void PutPageWindowTilemaps(u8); -static void ClearPageWindowTilemaps(u8); -static void RemoveWindowByIndex(u8); -static void PrintPageSpecificText(u8); -static void CreateTextPrinterTask(u8); +static void PutPageWindowTilemaps(u8 a); +static void ClearPageWindowTilemaps(u8 a); +static void RemoveWindowByIndex(u8 a); +static void PrintPageSpecificText(u8 a); +static void CreateTextPrinterTask(u8 a); static void PrintInfoPageText(void); -static void Task_PrintInfoPage(u8); +static void Task_PrintInfoPage(u8 taskId); static void PrintMonOTName(void); static void PrintMonOTID(void); static void PrintMonAbilityName(void); @@ -258,7 +258,7 @@ static void PrintMonAbilityDescription(void); static void BufferMonTrainerMemo(void); static void PrintMonTrainerMemo(void); static void BufferNatureString(void); -static void GetMetLevelString(u8 *); +static void GetMetLevelString(u8 *a); static bool8 DoesMonOTMatchOwner(void); static bool8 DidMonComeFromGBAGames(void); static bool8 IsInGamePartnerMon(void); @@ -266,7 +266,7 @@ static void PrintEggOTName(void); static void PrintEggOTID(void); static void PrintEggState(void); static void PrintEggMemo(void); -static void Task_PrintSkillsPage(u8); +static void Task_PrintSkillsPage(u8 taskId); static void PrintHeldItemName(void); static void PrintSkillsPageText(void); static void PrintRibbonCount(void); @@ -276,18 +276,18 @@ static void BufferRightColumnStats(void); static void PrintRightColumnStats(void); static void PrintExpPointsNextLevel(void); static void PrintBattleMoves(void); -static void Task_PrintBattleMoves(u8); -static void PrintMoveNameAndPP(u8); +static void Task_PrintBattleMoves(u8 taskId); +static void PrintMoveNameAndPP(u8 a); static void PrintContestMoves(void); -static void Task_PrintContestMoves(u8); -static void PrintContestMoveDescription(u8); -static void PrintMoveDetails(u16); +static void Task_PrintContestMoves(u8 taskId); +static void PrintContestMoveDescription(u8 a); +static void PrintMoveDetails(u16 a); static void PrintNewMoveDetailsOrCancelText(void); static void AddAndFillMoveNamesWindow(void); -static void SwapMovesNamesPP(u8, u8); +static void SwapMovesNamesPP(u8 moveIndex1, u8 moveIndex2); static void PrintHMMovesCantBeForgotten(void); static void ResetSpriteIds(void); -static void SetSpriteInvisibility(u8, bool8); +static void SetSpriteInvisibility(u8 spriteArrayId, bool8 invisible); static void HidePageSpecificSprites(void); static void SetTypeIcons(void); static void CreateMoveTypeIcons(void); @@ -295,20 +295,20 @@ static void SetMonTypeIcons(void); static void SetMoveTypeIcons(void); static void SetContestMoveTypeIcons(void); static void SetNewMoveTypeIcon(void); -static void SwapMovesTypeSprites(u8, u8); -static u8 LoadMonGfxAndSprite(struct Pokemon *, s16 *); -static u8 CreateMonSprite(struct Pokemon *); +static void SwapMovesTypeSprites(u8 moveIndex1, u8 moveIndex2); +static u8 LoadMonGfxAndSprite(struct Pokemon *a, s16 *b); +static u8 CreateMonSprite(struct Pokemon *unused); static void SpriteCB_Pokemon(struct Sprite *); static void StopPokemonAnimations(void); -static void CreateMonMarkingsSprite(struct Pokemon *); -static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *); -static void CreateCaughtBallSprite(struct Pokemon *); +static void CreateMonMarkingsSprite(struct Pokemon *mon); +static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon); +static void CreateCaughtBallSprite(struct Pokemon *mon); static void CreateSetStatusSprite(void); -static void CreateMoveSelectorSprites(u8); -static void SpriteCb_MoveSelector(struct Sprite *); -static void DestroyMoveSelectorSprites(u8); -static void SetMainMoveSelectorColor(u8); -static void KeepMoveSelectorVisible(u8); +static void CreateMoveSelectorSprites(u8 idArrayStart); +static void SpriteCb_MoveSelector(struct Sprite *sprite); +static void DestroyMoveSelectorSprites(u8 firstArrayId); +static void SetMainMoveSelectorColor(u8 whichColor); +static void KeepMoveSelectorVisible(u8 firstSpriteId); static void SummaryScreen_DestroyAnimDelayTask(void); // const rom data @@ -2314,69 +2314,69 @@ u8 GetMoveSlotToReplace(void) static void DrawPagination(void) // Updates the pagination dots at the top of the summary screen { - u16 *tilemap = Alloc(8 * PSS_PAGE_COUNT); + u16 *alloced = Alloc(32); u8 i; - for (i = 0; i < PSS_PAGE_COUNT; i++) + for (i = 0; i < 4; i++) { u8 j = i * 2; if (i < sMonSummaryScreen->minPageIndex) { - tilemap[j + 0] = 0x40; - tilemap[j + 1] = 0x40; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x50; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x50; + alloced[j + 0] = 0x40; + alloced[j + 1] = 0x40; + alloced[j + 8] = 0x50; + alloced[j + 9] = 0x50; } else if (i > sMonSummaryScreen->maxPageIndex) { - tilemap[j + 0] = 0x4A; - tilemap[j + 1] = 0x4A; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x5A; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x5A; + alloced[j + 0] = 0x4A; + alloced[j + 1] = 0x4A; + alloced[j + 8] = 0x5A; + alloced[j + 9] = 0x5A; } else if (i < sMonSummaryScreen->currPageIndex) { - tilemap[j + 0] = 0x46; - tilemap[j + 1] = 0x47; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x56; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x57; + alloced[j + 0] = 0x46; + alloced[j + 1] = 0x47; + alloced[j + 8] = 0x56; + alloced[j + 9] = 0x57; } else if (i == sMonSummaryScreen->currPageIndex) { if (i != sMonSummaryScreen->maxPageIndex) { - tilemap[j + 0] = 0x41; - tilemap[j + 1] = 0x42; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x51; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x52; + alloced[j + 0] = 0x41; + alloced[j + 1] = 0x42; + alloced[j + 8] = 0x51; + alloced[j + 9] = 0x52; } else { - tilemap[j + 0] = 0x4B; - tilemap[j + 1] = 0x4C; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x5B; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x5C; + alloced[j + 0] = 0x4B; + alloced[j + 1] = 0x4C; + alloced[j + 8] = 0x5B; + alloced[j + 9] = 0x5C; } } else if (i != sMonSummaryScreen->maxPageIndex) { - tilemap[j + 0] = 0x43; - tilemap[j + 1] = 0x44; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x53; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x54; + alloced[j + 0] = 0x43; + alloced[j + 1] = 0x44; + alloced[j + 8] = 0x53; + alloced[j + 9] = 0x54; } else { - tilemap[j + 0] = 0x48; - tilemap[j + 1] = 0x49; - tilemap[j + 2 * PSS_PAGE_COUNT] = 0x58; - tilemap[j + 2 * PSS_PAGE_COUNT + 1] = 0x59; + alloced[j + 0] = 0x48; + alloced[j + 1] = 0x49; + alloced[j + 8] = 0x58; + alloced[j + 9] = 0x59; } } - CopyToBgTilemapBufferRect_ChangePalette(3, tilemap, 11, 0, PSS_PAGE_COUNT * 2, 2, 16); + CopyToBgTilemapBufferRect_ChangePalette(3, alloced, 11, 0, 8, 2, 16); ScheduleBgCopyTilemapToVram(3); - Free(tilemap); + Free(alloced); } static void ChangeTilemap(const struct TilemapCtrl *unkStruct, u16 *dest, u8 c, bool8 d) @@ -2439,7 +2439,7 @@ static void Task_ShowPowerAccWindow(u8 taskId) { if (data[0] < 0) { - if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) + if (sMonSummaryScreen->currPageIndex == 2) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); } else @@ -2492,7 +2492,7 @@ static void Task_ShowAppealJamWindow(u8 taskId) { if (data[0] < 0) { - if (sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES && FuncIsActiveTask(PssScrollRight) == 0) + if (sMonSummaryScreen->currPageIndex == 3 && FuncIsActiveTask(PssScrollRight) == 0) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); DrawContestMoveHearts(data[2]); } diff --git a/src/pokenav.c b/src/pokenav.c index 03f48ee36..f9a6614a8 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -37,16 +37,16 @@ struct PokenavCallbacks static u32 GetCurrentMenuCB(void); static u32 IsActiveMenuLoopTaskActive_(void); -static bool32 SetActivePokenavMenu(u32); +static bool32 SetActivePokenavMenu(u32 menuId); static bool32 AnyMonHasRibbon(void); -static void InitPokenavResources(struct PokenavResources *); +static void InitPokenavResources(struct PokenavResources *a0); static void InitKeys_(void); static void FreePokenavResources(void); static void VBlankCB_Pokenav(void); static void CB2_Pokenav(void); -static void Task_RunLoopedTask_LinkMode(u8); -static void Task_RunLoopedTask(u8); -static void Task_Pokenav(u8); +static void Task_RunLoopedTask_LinkMode(u8 a0); +static void Task_RunLoopedTask(u8 taskId); +static void Task_Pokenav(u8 taskId); static void CB2_InitPokenavForTutorial(void); const struct PokenavCallbacks PokenavMenuCallbacks[15] = @@ -557,7 +557,8 @@ void *GetSubstructPtr(u32 index) void FreePokenavSubstruct(u32 index) { - TRY_FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]); + if (gPokenavResources->substructPtrs[index] != NULL) + FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]); } u32 GetPokenavMode(void) diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index e0645bac0..94ed4e8d8 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -332,7 +332,7 @@ u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) return dst; } -static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding) +static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 arg3) { u16 boxId, monId, gender, species, level, lvlDigits; struct BoxPokemon *boxMon; @@ -412,7 +412,7 @@ static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding) str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); lvlDigits = str_ - txtPtr; *(str_++) = CHAR_SPACE; - if (!skipPadding) + if (!arg3) { lvlDigits = 3 - lvlDigits; while (lvlDigits-- != 0) diff --git a/src/pokenav_list.c b/src/pokenav_list.c index 350a78504..bdba1d2c0 100644 --- a/src/pokenav_list.c +++ b/src/pokenav_list.c @@ -40,7 +40,7 @@ struct PokenavListWindowState { struct PokenavListSub { struct PokenavListMenuWindow listWindow; - u32 printStart; + u32 unk10; u32 printIndex; u32 itemSize; void * listPtr; @@ -59,7 +59,7 @@ struct PokenavListSub struct PokenavList { - struct PokenavListSub sub; + struct PokenavListSub list; u8 tilemapBuffer[BG_SCREEN_SIZE]; struct PokenavListWindowState windowState; s32 eraseIndex; @@ -100,12 +100,12 @@ static EWRAM_DATA u32 sMoveWindowDownIndex = 0; // Read, but pointlessly bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset) { - struct PokenavList *list = AllocSubstruct(POKENAV_SUBSTRUCT_LIST, sizeof(struct PokenavList)); - if (list == NULL) + struct PokenavList *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_LIST, sizeof(struct PokenavList)); + if (structPtr == NULL) return FALSE; - InitPokenavListWindowState(&list->windowState, listTemplate); - if (!CopyPokenavListMenuTemplate(&list->sub, bgTemplate, listTemplate, tileOffset)) + InitPokenavListWindowState(&structPtr->windowState, listTemplate); + if (!CopyPokenavListMenuTemplate(&structPtr->list, bgTemplate, listTemplate, tileOffset)) return FALSE; CreateLoopedTask(LoopedTask_CreatePokenavList, 6); @@ -119,31 +119,31 @@ bool32 IsCreatePokenavListTaskActive(void) void DestroyPokenavList(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - DestroyListArrows(&list->sub); - RemoveWindow(list->sub.listWindow.windowId); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + DestroyListArrows(&structPtr->list); + RemoveWindow(structPtr->list.listWindow.windowId); FreePokenavSubstruct(POKENAV_SUBSTRUCT_LIST); } static u32 LoopedTask_CreatePokenavList(s32 state) { - struct PokenavList *list; + struct PokenavList *structPtr; if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; - list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); switch (state) { case 0: - InitPokenavListBg(list); + InitPokenavListBg(structPtr); return LT_INC_AND_PAUSE; case 1: - InitPokenavListWindow(&list->sub.listWindow); + InitPokenavListWindow(&structPtr->list.listWindow); return LT_INC_AND_PAUSE; case 2: - InitListItems(&list->windowState, &list->sub); + InitListItems(&structPtr->windowState, &structPtr->list); return LT_INC_AND_PAUSE; case 3: if (IsPrintListItemsTaskActive()) @@ -156,24 +156,24 @@ static u32 LoopedTask_CreatePokenavList(s32 state) return LT_INC_AND_CONTINUE; } case 4: - CreateListArrowSprites(&list->windowState, &list->sub); + CreateListArrowSprites(&structPtr->windowState, &structPtr->list); return LT_FINISH; default: return LT_FINISH; } } -static void InitPokenavListBg(struct PokenavList *list) +static void InitPokenavListBg(struct PokenavList *a0) { - u16 tileNum = (list->sub.listWindow.fillValue << 12) | list->sub.listWindow.tileOffset; - BgDmaFill(list->sub.listWindow.bg, PIXEL_FILL(1), list->sub.listWindow.tileOffset, 1); - BgDmaFill(list->sub.listWindow.bg, PIXEL_FILL(4), list->sub.listWindow.tileOffset + 1, 1); - SetBgTilemapBuffer(list->sub.listWindow.bg, list->tilemapBuffer); - FillBgTilemapBufferRect_Palette0(list->sub.listWindow.bg, tileNum, 0, 0, 32, 32); - ChangeBgY(list->sub.listWindow.bg, 0, BG_COORD_SET); - ChangeBgX(list->sub.listWindow.bg, 0, BG_COORD_SET); - ChangeBgY(list->sub.listWindow.bg, list->sub.listWindow.y << 11, BG_COORD_SUB); - CopyBgTilemapBufferToVram(list->sub.listWindow.bg); + u16 tileNum = (a0->list.listWindow.fillValue << 12) | a0->list.listWindow.tileOffset; + BgDmaFill(a0->list.listWindow.bg, PIXEL_FILL(1), a0->list.listWindow.tileOffset, 1); + BgDmaFill(a0->list.listWindow.bg, PIXEL_FILL(4), a0->list.listWindow.tileOffset + 1, 1); + SetBgTilemapBuffer(a0->list.listWindow.bg, a0->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(a0->list.listWindow.bg, tileNum, 0, 0, 32, 32); + ChangeBgY(a0->list.listWindow.bg, 0, BG_COORD_SET); + ChangeBgX(a0->list.listWindow.bg, 0, BG_COORD_SET); + ChangeBgY(a0->list.listWindow.bg, a0->list.listWindow.y << 11, BG_COORD_SUB); + CopyBgTilemapBufferToVram(a0->list.listWindow.bg); } static void InitPokenavListWindow(struct PokenavListMenuWindow *listWindow) @@ -183,16 +183,16 @@ static void InitPokenavListWindow(struct PokenavListMenuWindow *listWindow) CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); } -static void InitListItems(struct PokenavListWindowState *windowState, struct PokenavListSub *subPtr) +static void InitListItems(struct PokenavListWindowState *windowState, struct PokenavListSub *a1) { s32 numToPrint = windowState->listLength - windowState->windowTopIndex; if (numToPrint > windowState->entriesOnscreen) numToPrint = windowState->entriesOnscreen; - PrintListItems(windowState->listPtr, windowState->windowTopIndex, numToPrint, windowState->listItemSize, 0, subPtr); + PrintListItems(windowState->listPtr, windowState->windowTopIndex, numToPrint, windowState->listItemSize, 0, a1); } -static void PrintListItems(void * listPtr, u32 topIndex, u32 numItems, u32 itemSize, u32 printStart, struct PokenavListSub *list) +static void PrintListItems(void * listPtr, u32 topIndex, u32 numItems, u32 itemSize, u32 a4, struct PokenavListSub *list) { if (numItems == 0) return; @@ -202,7 +202,7 @@ static void PrintListItems(void * listPtr, u32 topIndex, u32 numItems, u32 itemS list->listWindow.numPrinted = 0; list->listWindow.numToPrint = numItems; list->printIndex = topIndex; - list->printStart = printStart; + list->unk10 = a4; CreateLoopedTask(LoopedTask_PrintListItems, 5); } @@ -214,31 +214,31 @@ static bool32 IsPrintListItemsTaskActive(void) static u32 LoopedTask_PrintListItems(s32 state) { u32 row; - struct PokenavListSub *listSub = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListSub *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); switch (state) { case 0: - row = (listSub->listWindow.unkA + listSub->listWindow.numPrinted + listSub->printStart) & 0xF; - listSub->bufferItemFunc(listSub->listPtr, listSub->itemTextBuffer); - if (listSub->iconDrawFunc != NULL) - listSub->iconDrawFunc(listSub->listWindow.windowId, listSub->printIndex, row); + row = (structPtr->listWindow.unkA + structPtr->listWindow.numPrinted + structPtr->unk10) & 0xF; + structPtr->bufferItemFunc(structPtr->listPtr, structPtr->itemTextBuffer); + if (structPtr->iconDrawFunc != NULL) + structPtr->iconDrawFunc(structPtr->listWindow.windowId, structPtr->printIndex, row); - AddTextPrinterParameterized(listSub->listWindow.windowId, listSub->listWindow.fontId, listSub->itemTextBuffer, 8, (row << 4) + 1, TEXT_SKIP_DRAW, NULL); - if (++listSub->listWindow.numPrinted >= listSub->listWindow.numToPrint) + AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->itemTextBuffer, 8, (row << 4) + 1, TEXT_SKIP_DRAW, NULL); + if (++structPtr->listWindow.numPrinted >= structPtr->listWindow.numToPrint) { // Finished printing items. If icons were being drawn, draw the // window tilemap and graphics. Otherwise just do the graphics - if (listSub->iconDrawFunc != NULL) - CopyWindowToVram(listSub->listWindow.windowId, COPYWIN_FULL); + if (structPtr->iconDrawFunc != NULL) + CopyWindowToVram(structPtr->listWindow.windowId, COPYWIN_FULL); else - CopyWindowToVram(listSub->listWindow.windowId, COPYWIN_GFX); + CopyWindowToVram(structPtr->listWindow.windowId, COPYWIN_GFX); return LT_INC_AND_PAUSE; } else { - listSub->listPtr += listSub->itemSize; - listSub->printIndex++; + structPtr->listPtr += structPtr->itemSize; + structPtr->printIndex++; return LT_CONTINUE; } case 1: @@ -251,42 +251,42 @@ static u32 LoopedTask_PrintListItems(s32 state) static bool32 ShouldShowUpArrow(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - return (list->windowState.windowTopIndex != 0); + return (structPtr->windowState.windowTopIndex != 0); } static bool32 ShouldShowDownArrow(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - struct PokenavListWindowState *windowState = &list->windowState; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *subPtr = &structPtr->windowState; - return (windowState->windowTopIndex + windowState->entriesOnscreen < windowState->listLength); + return (subPtr->windowTopIndex + subPtr->entriesOnscreen < subPtr->listLength); } static void MoveListWindow(s32 delta, bool32 printItems) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - struct PokenavListWindowState *windowState = &list->windowState; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *subPtr = &structPtr->windowState; if (delta < 0) { - if (windowState->windowTopIndex + delta < 0) - delta = -1 * windowState->windowTopIndex; + if (subPtr->windowTopIndex + delta < 0) + delta = -1 * subPtr->windowTopIndex; if (printItems) - PrintListItems(windowState->listPtr, windowState->windowTopIndex + delta, delta * -1, windowState->listItemSize, delta, &list->sub); + PrintListItems(subPtr->listPtr, subPtr->windowTopIndex + delta, delta * -1, subPtr->listItemSize, delta, &structPtr->list); } else if (printItems) { - s32 index = sMoveWindowDownIndex = windowState->windowTopIndex + windowState->entriesOnscreen; - if (index + delta >= windowState->listLength) - delta = windowState->listLength - index; + s32 index = sMoveWindowDownIndex = subPtr->windowTopIndex + subPtr->entriesOnscreen; + if (index + delta >= subPtr->listLength) + delta = subPtr->listLength - index; - PrintListItems(windowState->listPtr, index, delta, windowState->listItemSize, windowState->entriesOnscreen, &list->sub); + PrintListItems(subPtr->listPtr, index, delta, subPtr->listItemSize, subPtr->entriesOnscreen, &structPtr->list); } - CreateMoveListWindowTask(delta, &list->sub); - windowState->windowTopIndex += delta; + CreateMoveListWindowTask(delta, &structPtr->list); + subPtr->windowTopIndex += delta; } static void CreateMoveListWindowTask(s32 delta, struct PokenavListSub *list) @@ -305,8 +305,8 @@ static u32 LoopedTask_MoveListWindow(s32 state) { s32 oldY, newY; bool32 finished; - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - struct PokenavListSub *subPtr = &list->sub; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListSub *subPtr = &structPtr->list; switch (state) { @@ -342,23 +342,23 @@ static u32 LoopedTask_MoveListWindow(s32 state) bool32 PokenavList_IsMoveWindowTaskActive(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - return IsLoopedTaskActive(list->sub.loopedTaskId); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return IsLoopedTaskActive(structPtr->list.loopedTaskId); } static struct PokenavListWindowState *GetPokenavListWindowState(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - return &list->windowState; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return &structPtr->windowState; } int PokenavList_MoveCursorUp(void) { - struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); - if (windowState->selectedIndexOffset != 0) + if (structPtr->selectedIndexOffset != 0) { - windowState->selectedIndexOffset--; + structPtr->selectedIndexOffset--; return 1; } if (ShouldShowUpArrow()) @@ -371,13 +371,13 @@ int PokenavList_MoveCursorUp(void) int PokenavList_MoveCursorDown(void) { - struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); - if (windowState->windowTopIndex + windowState->selectedIndexOffset >= windowState->listLength - 1) + if (structPtr->windowTopIndex + structPtr->selectedIndexOffset >= structPtr->listLength - 1) return 0; - if (windowState->selectedIndexOffset < windowState->entriesOnscreen - 1) + if (structPtr->selectedIndexOffset < structPtr->entriesOnscreen - 1) { - windowState->selectedIndexOffset++; + structPtr->selectedIndexOffset++; return 1; } if (ShouldShowDownArrow()) @@ -391,20 +391,20 @@ int PokenavList_MoveCursorDown(void) int PokenavList_PageUp(void) { s32 scroll; - struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); if (ShouldShowUpArrow()) { - if (windowState->windowTopIndex >= windowState->entriesOnscreen) - scroll = windowState->entriesOnscreen; + if (structPtr->windowTopIndex >= structPtr->entriesOnscreen) + scroll = structPtr->entriesOnscreen; else - scroll = windowState->windowTopIndex; + scroll = structPtr->windowTopIndex; MoveListWindow(scroll * -1, TRUE); return 2; } - else if (windowState->selectedIndexOffset != 0) + else if (structPtr->selectedIndexOffset != 0) { - windowState->selectedIndexOffset = 0; + structPtr->selectedIndexOffset = 0; return 1; } return 0; @@ -412,112 +412,112 @@ int PokenavList_PageUp(void) int PokenavList_PageDown(void) { - struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); if (ShouldShowDownArrow()) { - s32 windowBottomIndex = windowState->windowTopIndex + windowState->entriesOnscreen; - s32 scroll = windowState->entriesOffscreen - windowState->windowTopIndex; + s32 windowBottomIndex = structPtr->windowTopIndex + structPtr->entriesOnscreen; + s32 scroll = structPtr->entriesOffscreen - structPtr->windowTopIndex; - if (windowBottomIndex <= windowState->entriesOffscreen) - scroll = windowState->entriesOnscreen; + if (windowBottomIndex <= structPtr->entriesOffscreen) + scroll = structPtr->entriesOnscreen; MoveListWindow(scroll, TRUE); return 2; } else { s32 cursor, lastVisibleIndex; - if (windowState->listLength >= windowState->entriesOnscreen) + if (structPtr->listLength >= structPtr->entriesOnscreen) { - cursor = windowState->selectedIndexOffset; - lastVisibleIndex = windowState->entriesOnscreen; + cursor = structPtr->selectedIndexOffset; + lastVisibleIndex = structPtr->entriesOnscreen; } else { - cursor = windowState->selectedIndexOffset; - lastVisibleIndex = windowState->listLength; + cursor = structPtr->selectedIndexOffset; + lastVisibleIndex = structPtr->listLength; } lastVisibleIndex -= 1; if (cursor >= lastVisibleIndex) return 0; - windowState->selectedIndexOffset = lastVisibleIndex; + structPtr->selectedIndexOffset = lastVisibleIndex; return 1; } } u32 PokenavList_GetSelectedIndex(void) { - struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); - return windowState->windowTopIndex + windowState->selectedIndexOffset; + return structPtr->windowTopIndex + structPtr->selectedIndexOffset; } u32 PokenavList_GetTopIndex(void) { - struct PokenavListWindowState *windowState = GetPokenavListWindowState(); + struct PokenavListWindowState *structPtr = GetPokenavListWindowState(); - return windowState->windowTopIndex; + return structPtr->windowTopIndex; } void PokenavList_EraseListForCheckPage(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - list->eraseIndex = 0; - list->loopedTaskId = CreateLoopedTask(LoopedTask_EraseListForCheckPage, 6); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->eraseIndex = 0; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_EraseListForCheckPage, 6); } void PrintCheckPageInfo(s16 delta) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - list->windowState.windowTopIndex += delta; - list->eraseIndex = 0; - list->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->windowState.windowTopIndex += delta; + structPtr->eraseIndex = 0; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); } void PokenavList_ReshowListFromCheckPage(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - list->eraseIndex = 0; - list->loopedTaskId = CreateLoopedTask(LoopedTask_ReshowListFromCheckPage, 6); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->eraseIndex = 0; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_ReshowListFromCheckPage, 6); } bool32 PokenavList_IsTaskActive(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - return IsLoopedTaskActive(list->loopedTaskId); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + return IsLoopedTaskActive(structPtr->loopedTaskId); } void PokenavList_DrawCurrentItemIcon(void) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - struct PokenavListWindowState *windowState = &list->windowState; - list->sub.iconDrawFunc(list->sub.listWindow.windowId, windowState->windowTopIndex + windowState->selectedIndexOffset, (list->sub.listWindow.unkA + windowState->selectedIndexOffset) & 0xF); - CopyWindowToVram(list->sub.listWindow.windowId, COPYWIN_MAP); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavListWindowState *subPtr = &structPtr->windowState; + structPtr->list.iconDrawFunc(structPtr->list.listWindow.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->list.listWindow.unkA + subPtr->selectedIndexOffset) & 0xF); + CopyWindowToVram(structPtr->list.listWindow.windowId, COPYWIN_MAP); } static u32 LoopedTask_EraseListForCheckPage(s32 state) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); switch (state) { case 0: - ToggleListArrows(&list->sub, 1); + ToggleListArrows(&structPtr->list, 1); // fall-through case 1: - if (list->eraseIndex != list->windowState.selectedIndexOffset) - EraseListEntry(&list->sub.listWindow, list->eraseIndex, 1); + if (structPtr->eraseIndex != structPtr->windowState.selectedIndexOffset) + EraseListEntry(&structPtr->list.listWindow, structPtr->eraseIndex, 1); - list->eraseIndex++; + structPtr->eraseIndex++; return LT_INC_AND_PAUSE; case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - if (list->eraseIndex != list->windowState.entriesOnscreen) + if (structPtr->eraseIndex != structPtr->windowState.entriesOnscreen) return LT_SET_STATE(1); - if (list->windowState.selectedIndexOffset != 0) - EraseListEntry(&list->sub.listWindow, list->eraseIndex, list->windowState.selectedIndexOffset); + if (structPtr->windowState.selectedIndexOffset != 0) + EraseListEntry(&structPtr->list.listWindow, structPtr->eraseIndex, structPtr->windowState.selectedIndexOffset); return LT_INC_AND_PAUSE; } @@ -525,9 +525,9 @@ static u32 LoopedTask_EraseListForCheckPage(s32 state) case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - if (list->windowState.selectedIndexOffset != 0) + if (structPtr->windowState.selectedIndexOffset != 0) { - MoveListWindow(list->windowState.selectedIndexOffset, FALSE); + MoveListWindow(structPtr->windowState.selectedIndexOffset, FALSE); return LT_INC_AND_PAUSE; } return LT_FINISH; @@ -537,7 +537,7 @@ static u32 LoopedTask_EraseListForCheckPage(s32 state) if (PokenavList_IsMoveWindowTaskActive()) return LT_PAUSE; - list->windowState.selectedIndexOffset = 0; + structPtr->windowState.selectedIndexOffset = 0; return LT_FINISH; } return LT_FINISH; @@ -545,35 +545,35 @@ static u32 LoopedTask_EraseListForCheckPage(s32 state) static u32 LoopedTask_PrintCheckPageInfo(s32 state) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; switch (state) { case 0: - PrintCheckPageTrainerName(&list->windowState, &list->sub); + PrintCheckPageTrainerName(&structPtr->windowState, &structPtr->list); break; case 1: - PrintMatchCallFieldNames(&list->sub, 0); + PrintMatchCallFieldNames(&structPtr->list, 0); break; case 2: - PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_STRATEGY); + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_STRATEGY); break; case 3: - PrintMatchCallFieldNames(&list->sub, 1); + PrintMatchCallFieldNames(&structPtr->list, 1); break; case 4: - PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_POKEMON); + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_POKEMON); break; case 5: - PrintMatchCallFieldNames(&list->sub, 2); + PrintMatchCallFieldNames(&structPtr->list, 2); break; case 6: - PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_INTRO_1); + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_INTRO_1); break; case 7: - PrintMatchCallFlavorText(&list->windowState, &list->sub, CHECK_PAGE_INTRO_2); + PrintMatchCallFlavorText(&structPtr->windowState, &structPtr->list, CHECK_PAGE_INTRO_2); break; default: return LT_FINISH; @@ -583,30 +583,30 @@ static u32 LoopedTask_PrintCheckPageInfo(s32 state) static u32 LoopedTask_ReshowListFromCheckPage(s32 state) { - struct PokenavList *list; + struct PokenavList *structPtr; struct PokenavListWindowState *windowState; - struct PokenavListSub *subPtr; + struct PokenavListSub *subPtr0; s32 r5, *ptr; if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; - list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - windowState = &list->windowState; - subPtr = &list->sub; + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + windowState = &structPtr->windowState; + subPtr0 = &structPtr->list; switch (state) { case 0: // Rewrite the name of the trainer whose check page was just being viewed. // This is done to erase the red background it had. - PrintMatchCallListTrainerName(windowState, subPtr); + PrintMatchCallListTrainerName(windowState, subPtr0); return LT_INC_AND_PAUSE; case 1: - ptr = &list->eraseIndex; - if (++(*ptr) < list->windowState.entriesOnscreen) + ptr = &structPtr->eraseIndex; + if (++(*ptr) < structPtr->windowState.entriesOnscreen) { - EraseListEntry(&subPtr->listWindow, *ptr, 1); + EraseListEntry(&subPtr0->listWindow, *ptr, 1); return LT_PAUSE; } @@ -617,7 +617,7 @@ static u32 LoopedTask_ReshowListFromCheckPage(s32 state) { s32 r4 = windowState->windowTopIndex; r5 = -r4; - EraseListEntry(&subPtr->listWindow, r5, r4); + EraseListEntry(&subPtr0->listWindow, r5, r4); windowState->selectedIndexOffset = r4; *ptr = r5; return LT_INC_AND_PAUSE; @@ -629,7 +629,7 @@ static u32 LoopedTask_ReshowListFromCheckPage(s32 state) { s32 r4 = windowState->windowTopIndex + windowState->entriesOnscreen - windowState->listLength; r5 = -r4; - EraseListEntry(&subPtr->listWindow, r5, r4); + EraseListEntry(&subPtr0->listWindow, r5, r4); windowState->selectedIndexOffset = r4; *ptr = r5; return LT_INC_AND_PAUSE; @@ -637,55 +637,55 @@ static u32 LoopedTask_ReshowListFromCheckPage(s32 state) } return LT_SET_STATE(4); case 2: - MoveListWindow(list->eraseIndex, FALSE); + MoveListWindow(structPtr->eraseIndex, FALSE); return LT_INC_AND_PAUSE; case 3: if (!PokenavList_IsMoveWindowTaskActive()) { - list->eraseIndex = 0; + structPtr->eraseIndex = 0; return LT_INC_AND_CONTINUE; } return LT_PAUSE; case 4: - PrintListItems(windowState->listPtr, windowState->windowTopIndex + list->eraseIndex, 1, windowState->listItemSize, list->eraseIndex, &list->sub); + PrintListItems(windowState->listPtr, windowState->windowTopIndex + structPtr->eraseIndex, 1, windowState->listItemSize, structPtr->eraseIndex, &structPtr->list); return LT_INC_AND_PAUSE; case 5: if (IsPrintListItemsTaskActive()) return LT_PAUSE; - if (++list->eraseIndex >= windowState->listLength || list->eraseIndex >= windowState->entriesOnscreen) + if (++structPtr->eraseIndex >= windowState->listLength || structPtr->eraseIndex >= windowState->entriesOnscreen) return LT_INC_AND_CONTINUE; return LT_SET_STATE(4); case 6: - ToggleListArrows(subPtr, 0); + ToggleListArrows(subPtr0, 0); return LT_FINISH; } return LT_FINISH; } -static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 offset, s32 entries) +static void EraseListEntry(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) { u8 *tileData = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); u32 width = listWindow->width * 64; - offset = (listWindow->unkA + offset) & 0xF; - if (offset + entries <= 16) + a1 = (listWindow->unkA + a1) & 0xF; + if (a1 + a2 <= 16) { - CpuFastFill8(PIXEL_FILL(1), tileData + offset * width, entries * width); + CpuFastFill8(PIXEL_FILL(1), tileData + a1 * width, a2 * width); CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); } else { - u32 v3 = 16 - offset; - u32 v4 = entries - v3; + u32 v3 = 16 - a1; + u32 v4 = a2 - v3; - CpuFastFill8(PIXEL_FILL(1), tileData + offset * width, v3 * width); + CpuFastFill8(PIXEL_FILL(1), tileData + a1 * width, v3 * width); CpuFastFill8(PIXEL_FILL(1), tileData, v4 * width); CopyWindowToVram(listWindow->windowId, COPYWIN_GFX); } - for (entries--; entries != -1; offset = (offset + 1) & 0xF, entries--) - ClearRematchPokeballIcon(listWindow->windowId, offset); + for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) + ClearRematchPokeballIcon(listWindow->windowId, a1); CopyWindowToVram(listWindow->windowId, COPYWIN_MAP); } @@ -744,7 +744,7 @@ static void PrintMatchCallFieldNames(struct PokenavListSub *list, u32 fieldId) CopyWindowRectToVram(list->listWindow.windowId, COPYWIN_GFX, 0, top << 1, list->listWindow.width, 2); } -static void PrintMatchCallFlavorText(struct PokenavListWindowState *windowState, struct PokenavListSub *list, u32 checkPageEntry) +static void PrintMatchCallFlavorText(struct PokenavListWindowState *a0, struct PokenavListSub *list, u32 checkPageEntry) { // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = { @@ -755,7 +755,7 @@ static void PrintMatchCallFlavorText(struct PokenavListWindowState *windowState, }; u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; - const u8 *str = GetMatchCallFlavorText(windowState->windowTopIndex, checkPageEntry); + const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry); if (str != NULL) { @@ -894,8 +894,8 @@ static void ToggleListArrows(struct PokenavListSub *list, bool32 invisible) static void SpriteCB_RightArrow(struct Sprite *sprite) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - sprite->y2 = list->windowState.selectedIndexOffset << 4; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + sprite->y2 = structPtr->windowState.selectedIndexOffset << 4; } #define sTimer data[0] @@ -940,9 +940,9 @@ static void SpriteCB_UpArrow(struct Sprite *sprite) void PokenavList_ToggleVerticalArrows(bool32 invisible) { - struct PokenavList *list = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); - list->sub.upArrow->sInvisible = invisible; - list->sub.downArrow->sInvisible = invisible; + struct PokenavList *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_LIST); + structPtr->list.upArrow->sInvisible = invisible; + structPtr->list.downArrow->sInvisible = invisible; } #undef sTimer diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 7d668c67f..318ed520d 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -105,7 +105,7 @@ static const u8 sHelpBarTextColors[3] = TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; -static const struct CompressedSpriteSheet sSpinningPokenavSpriteSheet[] = +static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] = { { .data = sSpinningPokenav_Gfx, @@ -114,7 +114,7 @@ static const struct CompressedSpriteSheet sSpinningPokenavSpriteSheet[] = } }; -static const struct SpritePalette sSpinningNavgearPalettes[] = +static const struct SpritePalette gSpinningNavgearPalettes[] = { { .data = sSpinningPokenav_Pal, @@ -583,10 +583,10 @@ static void InitPokenavMainMenuResources(void) u8 spriteId; struct Pokenav_MainMenu *menu = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); - for (i = 0; i < ARRAY_COUNT(sSpinningPokenavSpriteSheet); i++) - LoadCompressedSpriteSheet(&sSpinningPokenavSpriteSheet[i]); + for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) + LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); - Pokenav_AllocAndLoadPalettes(sSpinningNavgearPalettes); + Pokenav_AllocAndLoadPalettes(gSpinningNavgearPalettes); menu->palettes = ~1 & ~(0x10000 << IndexOfSpritePaletteTag(0)); spriteId = CreateSprite(&sSpinningPokenavSpriteTemplate, 220, 12, 0); menu->spinningPokenav = &gSprites[spriteId]; diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 2e8cc40b5..29dd62621 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -324,7 +324,7 @@ static const match_call_text_data_t sWallyTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -static const struct MatchCallLocationOverride sWallyLocationData[] = { +const struct MatchCallLocationOverride sWallyLocationData[] = { { FLAG_HIDE_MAUVILLE_CITY_WALLY, MAPSEC_VERDANTURF_TOWN }, { FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, MAPSEC_NONE }, { FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, MAPSEC_VICTORY_ROAD }, diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 828bd525d..16ba48070 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -146,7 +146,7 @@ static const struct WindowTemplate sMapSecInfoWindowTemplate = #include "data/region_map/city_map_entries.h" -static const struct OamData sCityZoomTextSprite_OamData = +const struct OamData sCityZoomTextSprite_OamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, diff --git a/src/record_mixing.c b/src/record_mixing.c index 4365f2cb3..6efded838 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -285,7 +285,7 @@ static void ReceiveExchangePacket(u32 multiplayerId) static void PrintTextOnRecordMixing(const u8 *src) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, src, 0, 1, 0, NULL); CopyWindowToVram(0, COPYWIN_FULL); } diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 951572636..fd2b3a06b 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -67,8 +67,6 @@ struct RecordedBattleSave u32 checksum; }; -STATIC_ASSERT(sizeof(struct RecordedBattleSave) <= SECTOR_DATA_SIZE, RecordedBattleSaveFreeSpace); - EWRAM_DATA u32 gRecordedBattleRngSeed = 0; EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0; EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE] = {0}; diff --git a/src/region_map.c b/src/region_map.c index a4db1cb04..09e2d69bf 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -64,7 +64,7 @@ struct MultiNameFlyDest // Static RAM declarations -static EWRAM_DATA struct RegionMap *sRegionMap = NULL; +static EWRAM_DATA struct RegionMap *gRegionMap = NULL; static EWRAM_DATA struct { void (*callback)(void); @@ -516,49 +516,49 @@ void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed) void InitRegionMapData(struct RegionMap *regionMap, const struct BgTemplate *template, bool8 zoomed) { - sRegionMap = regionMap; - sRegionMap->initStep = 0; - sRegionMap->zoomed = zoomed; - sRegionMap->inputCallback = zoomed == TRUE ? ProcessRegionMapInput_Zoomed : ProcessRegionMapInput_Full; + gRegionMap = regionMap; + gRegionMap->initStep = 0; + gRegionMap->zoomed = zoomed; + gRegionMap->inputCallback = zoomed == TRUE ? ProcessRegionMapInput_Zoomed : ProcessRegionMapInput_Full; if (template != NULL) { - sRegionMap->bgNum = template->bg; - sRegionMap->charBaseIdx = template->charBaseIndex; - sRegionMap->mapBaseIdx = template->mapBaseIndex; - sRegionMap->bgManaged = TRUE; + gRegionMap->bgNum = template->bg; + gRegionMap->charBaseIdx = template->charBaseIndex; + gRegionMap->mapBaseIdx = template->mapBaseIndex; + gRegionMap->bgManaged = TRUE; } else { - sRegionMap->bgNum = 2; - sRegionMap->charBaseIdx = 2; - sRegionMap->mapBaseIdx = 28; - sRegionMap->bgManaged = FALSE; + gRegionMap->bgNum = 2; + gRegionMap->charBaseIdx = 2; + gRegionMap->mapBaseIdx = 28; + gRegionMap->bgManaged = FALSE; } } void ShowRegionMapForPokedexAreaScreen(struct RegionMap *regionMap) { - sRegionMap = regionMap; + gRegionMap = regionMap; InitMapBasedOnPlayerLocation(); - sRegionMap->playerIconSpritePosX = sRegionMap->cursorPosX; - sRegionMap->playerIconSpritePosY = sRegionMap->cursorPosY; + gRegionMap->playerIconSpritePosX = gRegionMap->cursorPosX; + gRegionMap->playerIconSpritePosY = gRegionMap->cursorPosY; } bool8 LoadRegionMapGfx(void) { - switch (sRegionMap->initStep) + switch (gRegionMap->initStep) { case 0: - if (sRegionMap->bgManaged) - DecompressAndCopyTileDataToVram(sRegionMap->bgNum, sRegionMapBg_GfxLZ, 0, 0, 0); + if (gRegionMap->bgManaged) + DecompressAndCopyTileDataToVram(gRegionMap->bgNum, sRegionMapBg_GfxLZ, 0, 0, 0); else LZ77UnCompVram(sRegionMapBg_GfxLZ, (u16 *)BG_CHAR_ADDR(2)); break; case 1: - if (sRegionMap->bgManaged) + if (gRegionMap->bgManaged) { if (!FreeTempTileDataBuffersIfPossible()) - DecompressAndCopyTileDataToVram(sRegionMap->bgNum, sRegionMapBg_TilemapLZ, 0, 0, 1); + DecompressAndCopyTileDataToVram(gRegionMap->bgNum, sRegionMapBg_TilemapLZ, 0, 0, 1); } else { @@ -570,54 +570,54 @@ bool8 LoadRegionMapGfx(void) LoadPalette(sRegionMapBg_Pal, 0x70, 0x60); break; case 3: - LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, sRegionMap->cursorSmallImage); + LZ77UnCompWram(sRegionMapCursorSmallGfxLZ, gRegionMap->cursorSmallImage); break; case 4: - LZ77UnCompWram(sRegionMapCursorLargeGfxLZ, sRegionMap->cursorLargeImage); + LZ77UnCompWram(sRegionMapCursorLargeGfxLZ, gRegionMap->cursorLargeImage); break; case 5: InitMapBasedOnPlayerLocation(); - sRegionMap->playerIconSpritePosX = sRegionMap->cursorPosX; - sRegionMap->playerIconSpritePosY = sRegionMap->cursorPosY; - sRegionMap->mapSecId = CorrectSpecialMapSecId_Internal(sRegionMap->mapSecId); - sRegionMap->mapSecType = GetMapsecType(sRegionMap->mapSecId); - GetMapName(sRegionMap->mapSecName, sRegionMap->mapSecId, MAP_NAME_LENGTH); + gRegionMap->playerIconSpritePosX = gRegionMap->cursorPosX; + gRegionMap->playerIconSpritePosY = gRegionMap->cursorPosY; + gRegionMap->mapSecId = CorrectSpecialMapSecId_Internal(gRegionMap->mapSecId); + gRegionMap->mapSecType = GetMapsecType(gRegionMap->mapSecId); + GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, MAP_NAME_LENGTH); break; case 6: - if (sRegionMap->zoomed == FALSE) + if (gRegionMap->zoomed == FALSE) { CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0); } else { - sRegionMap->scrollX = sRegionMap->cursorPosX * 8 - 0x34; - sRegionMap->scrollY = sRegionMap->cursorPosY * 8 - 0x44; - sRegionMap->zoomedCursorPosX = sRegionMap->cursorPosX; - sRegionMap->zoomedCursorPosY = sRegionMap->cursorPosY; - CalcZoomScrollParams(sRegionMap->scrollX, sRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); + gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 0x34; + gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 0x44; + gRegionMap->zoomedCursorPosX = gRegionMap->cursorPosX; + gRegionMap->zoomedCursorPosY = gRegionMap->cursorPosY; + CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0); } break; case 7: GetPositionOfCursorWithinMapSec(); UpdateRegionMapVideoRegs(); - sRegionMap->cursorSprite = NULL; - sRegionMap->playerIconSprite = NULL; - sRegionMap->cursorMovementFrameCounter = 0; - sRegionMap->blinkPlayerIcon = FALSE; - if (sRegionMap->bgManaged) + gRegionMap->cursorSprite = NULL; + gRegionMap->playerIconSprite = NULL; + gRegionMap->cursorMovementFrameCounter = 0; + gRegionMap->blinkPlayerIcon = FALSE; + if (gRegionMap->bgManaged) { - SetBgAttribute(sRegionMap->bgNum, BG_ATTR_SCREENSIZE, 2); - SetBgAttribute(sRegionMap->bgNum, BG_ATTR_CHARBASEINDEX, sRegionMap->charBaseIdx); - SetBgAttribute(sRegionMap->bgNum, BG_ATTR_MAPBASEINDEX, sRegionMap->mapBaseIdx); - SetBgAttribute(sRegionMap->bgNum, BG_ATTR_WRAPAROUND, 1); - SetBgAttribute(sRegionMap->bgNum, BG_ATTR_PALETTEMODE, 1); + SetBgAttribute(gRegionMap->bgNum, BG_ATTR_SCREENSIZE, 2); + SetBgAttribute(gRegionMap->bgNum, BG_ATTR_CHARBASEINDEX, gRegionMap->charBaseIdx); + SetBgAttribute(gRegionMap->bgNum, BG_ATTR_MAPBASEINDEX, gRegionMap->mapBaseIdx); + SetBgAttribute(gRegionMap->bgNum, BG_ATTR_WRAPAROUND, 1); + SetBgAttribute(gRegionMap->bgNum, BG_ATTR_PALETTEMODE, 1); } - sRegionMap->initStep++; + gRegionMap->initStep++; return FALSE; default: return FALSE; } - sRegionMap->initStep++; + gRegionMap->initStep++; return TRUE; } @@ -629,23 +629,23 @@ void BlendRegionMap(u16 color, u32 coeff) void FreeRegionMapIconResources(void) { - if (sRegionMap->cursorSprite != NULL) + if (gRegionMap->cursorSprite != NULL) { - DestroySprite(sRegionMap->cursorSprite); - FreeSpriteTilesByTag(sRegionMap->cursorTileTag); - FreeSpritePaletteByTag(sRegionMap->cursorPaletteTag); + DestroySprite(gRegionMap->cursorSprite); + FreeSpriteTilesByTag(gRegionMap->cursorTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); } - if (sRegionMap->playerIconSprite != NULL) + if (gRegionMap->playerIconSprite != NULL) { - DestroySprite(sRegionMap->playerIconSprite); - FreeSpriteTilesByTag(sRegionMap->playerIconTileTag); - FreeSpritePaletteByTag(sRegionMap->playerIconPaletteTag); + DestroySprite(gRegionMap->playerIconSprite); + FreeSpriteTilesByTag(gRegionMap->playerIconTileTag); + FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag); } } u8 DoRegionMapInputCallback(void) { - return sRegionMap->inputCallback(); + return gRegionMap->inputCallback(); } static u8 ProcessRegionMapInput_Full(void) @@ -653,26 +653,26 @@ static u8 ProcessRegionMapInput_Full(void) u8 input; input = MAP_INPUT_NONE; - sRegionMap->cursorDeltaX = 0; - sRegionMap->cursorDeltaY = 0; - if (JOY_HELD(DPAD_UP) && sRegionMap->cursorPosY > MAPCURSOR_Y_MIN) + gRegionMap->cursorDeltaX = 0; + gRegionMap->cursorDeltaY = 0; + if (JOY_HELD(DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN) { - sRegionMap->cursorDeltaY = -1; + gRegionMap->cursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_DOWN) && sRegionMap->cursorPosY < MAPCURSOR_Y_MAX) + if (JOY_HELD(DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX) { - sRegionMap->cursorDeltaY = +1; + gRegionMap->cursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_LEFT) && sRegionMap->cursorPosX > MAPCURSOR_X_MIN) + if (JOY_HELD(DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN) { - sRegionMap->cursorDeltaX = -1; + gRegionMap->cursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_RIGHT) && sRegionMap->cursorPosX < MAPCURSOR_X_MAX) + if (JOY_HELD(DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX) { - sRegionMap->cursorDeltaX = +1; + gRegionMap->cursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } if (JOY_NEW(A_BUTTON)) @@ -685,8 +685,8 @@ static u8 ProcessRegionMapInput_Full(void) } if (input == MAP_INPUT_MOVE_START) { - sRegionMap->cursorMovementFrameCounter = 4; - sRegionMap->inputCallback = MoveRegionMapCursor_Full; + gRegionMap->cursorMovementFrameCounter = 4; + gRegionMap->inputCallback = MoveRegionMapCursor_Full; } return input; } @@ -695,35 +695,35 @@ static u8 MoveRegionMapCursor_Full(void) { u16 mapSecId; - if (sRegionMap->cursorMovementFrameCounter != 0) + if (gRegionMap->cursorMovementFrameCounter != 0) return MAP_INPUT_MOVE_CONT; - if (sRegionMap->cursorDeltaX > 0) + if (gRegionMap->cursorDeltaX > 0) { - sRegionMap->cursorPosX++; + gRegionMap->cursorPosX++; } - if (sRegionMap->cursorDeltaX < 0) + if (gRegionMap->cursorDeltaX < 0) { - sRegionMap->cursorPosX--; + gRegionMap->cursorPosX--; } - if (sRegionMap->cursorDeltaY > 0) + if (gRegionMap->cursorDeltaY > 0) { - sRegionMap->cursorPosY++; + gRegionMap->cursorPosY++; } - if (sRegionMap->cursorDeltaY < 0) + if (gRegionMap->cursorDeltaY < 0) { - sRegionMap->cursorPosY--; + gRegionMap->cursorPosY--; } - mapSecId = GetMapSecIdAt(sRegionMap->cursorPosX, sRegionMap->cursorPosY); - sRegionMap->mapSecType = GetMapsecType(mapSecId); - if (mapSecId != sRegionMap->mapSecId) + mapSecId = GetMapSecIdAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY); + gRegionMap->mapSecType = GetMapsecType(mapSecId); + if (mapSecId != gRegionMap->mapSecId) { - sRegionMap->mapSecId = mapSecId; - GetMapName(sRegionMap->mapSecName, sRegionMap->mapSecId, MAP_NAME_LENGTH); + gRegionMap->mapSecId = mapSecId; + GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, MAP_NAME_LENGTH); } GetPositionOfCursorWithinMapSec(); - sRegionMap->inputCallback = ProcessRegionMapInput_Full; + gRegionMap->inputCallback = ProcessRegionMapInput_Full; return MAP_INPUT_MOVE_END; } @@ -732,26 +732,26 @@ static u8 ProcessRegionMapInput_Zoomed(void) u8 input; input = MAP_INPUT_NONE; - sRegionMap->zoomedCursorDeltaX = 0; - sRegionMap->zoomedCursorDeltaY = 0; - if (JOY_HELD(DPAD_UP) && sRegionMap->scrollY > -0x34) + gRegionMap->zoomedCursorDeltaX = 0; + gRegionMap->zoomedCursorDeltaY = 0; + if (JOY_HELD(DPAD_UP) && gRegionMap->scrollY > -0x34) { - sRegionMap->zoomedCursorDeltaY = -1; + gRegionMap->zoomedCursorDeltaY = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_DOWN) && sRegionMap->scrollY < 0x3c) + if (JOY_HELD(DPAD_DOWN) && gRegionMap->scrollY < 0x3c) { - sRegionMap->zoomedCursorDeltaY = +1; + gRegionMap->zoomedCursorDeltaY = +1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_LEFT) && sRegionMap->scrollX > -0x2c) + if (JOY_HELD(DPAD_LEFT) && gRegionMap->scrollX > -0x2c) { - sRegionMap->zoomedCursorDeltaX = -1; + gRegionMap->zoomedCursorDeltaX = -1; input = MAP_INPUT_MOVE_START; } - if (JOY_HELD(DPAD_RIGHT) && sRegionMap->scrollX < 0xac) + if (JOY_HELD(DPAD_RIGHT) && gRegionMap->scrollX < 0xac) { - sRegionMap->zoomedCursorDeltaX = +1; + gRegionMap->zoomedCursorDeltaX = +1; input = MAP_INPUT_MOVE_START; } if (JOY_NEW(A_BUTTON)) @@ -764,8 +764,8 @@ static u8 ProcessRegionMapInput_Zoomed(void) } if (input == MAP_INPUT_MOVE_START) { - sRegionMap->inputCallback = MoveRegionMapCursor_Zoomed; - sRegionMap->zoomedCursorMovementFrameCounter = 0; + gRegionMap->inputCallback = MoveRegionMapCursor_Zoomed; + gRegionMap->zoomedCursorMovementFrameCounter = 0; } return input; } @@ -776,29 +776,29 @@ static u8 MoveRegionMapCursor_Zoomed(void) u16 y; u16 mapSecId; - sRegionMap->scrollY += sRegionMap->zoomedCursorDeltaY; - sRegionMap->scrollX += sRegionMap->zoomedCursorDeltaX; - RegionMap_SetBG2XAndBG2Y(sRegionMap->scrollX, sRegionMap->scrollY); - sRegionMap->zoomedCursorMovementFrameCounter++; - if (sRegionMap->zoomedCursorMovementFrameCounter == 8) + gRegionMap->scrollY += gRegionMap->zoomedCursorDeltaY; + gRegionMap->scrollX += gRegionMap->zoomedCursorDeltaX; + RegionMap_SetBG2XAndBG2Y(gRegionMap->scrollX, gRegionMap->scrollY); + gRegionMap->zoomedCursorMovementFrameCounter++; + if (gRegionMap->zoomedCursorMovementFrameCounter == 8) { - x = (sRegionMap->scrollX + 0x2c) / 8 + 1; - y = (sRegionMap->scrollY + 0x34) / 8 + 2; - if (x != sRegionMap->zoomedCursorPosX || y != sRegionMap->zoomedCursorPosY) + x = (gRegionMap->scrollX + 0x2c) / 8 + 1; + y = (gRegionMap->scrollY + 0x34) / 8 + 2; + if (x != gRegionMap->zoomedCursorPosX || y != gRegionMap->zoomedCursorPosY) { - sRegionMap->zoomedCursorPosX = x; - sRegionMap->zoomedCursorPosY = y; + gRegionMap->zoomedCursorPosX = x; + gRegionMap->zoomedCursorPosY = y; mapSecId = GetMapSecIdAt(x, y); - sRegionMap->mapSecType = GetMapsecType(mapSecId); - if (mapSecId != sRegionMap->mapSecId) + gRegionMap->mapSecType = GetMapsecType(mapSecId); + if (mapSecId != gRegionMap->mapSecId) { - sRegionMap->mapSecId = mapSecId; - GetMapName(sRegionMap->mapSecName, sRegionMap->mapSecId, MAP_NAME_LENGTH); + gRegionMap->mapSecId = mapSecId; + GetMapName(gRegionMap->mapSecName, gRegionMap->mapSecId, MAP_NAME_LENGTH); } GetPositionOfCursorWithinMapSec(); } - sRegionMap->zoomedCursorMovementFrameCounter = 0; - sRegionMap->inputCallback = ProcessRegionMapInput_Zoomed; + gRegionMap->zoomedCursorMovementFrameCounter = 0; + gRegionMap->inputCallback = ProcessRegionMapInput_Zoomed; return MAP_INPUT_MOVE_END; } return MAP_INPUT_MOVE_CONT; @@ -806,35 +806,35 @@ static u8 MoveRegionMapCursor_Zoomed(void) void SetRegionMapDataForZoom(void) { - if (sRegionMap->zoomed == FALSE) + if (gRegionMap->zoomed == FALSE) { - sRegionMap->scrollY = 0; - sRegionMap->scrollX = 0; - sRegionMap->unk_040 = 0; - sRegionMap->unk_03c = 0; - sRegionMap->unk_060 = sRegionMap->cursorPosX * 8 - 0x34; - sRegionMap->unk_062 = sRegionMap->cursorPosY * 8 - 0x44; - sRegionMap->unk_044 = (sRegionMap->unk_060 << 8) / 16; - sRegionMap->unk_048 = (sRegionMap->unk_062 << 8) / 16; - sRegionMap->zoomedCursorPosX = sRegionMap->cursorPosX; - sRegionMap->zoomedCursorPosY = sRegionMap->cursorPosY; - sRegionMap->unk_04c = 0x10000; - sRegionMap->unk_050 = -0x800; + gRegionMap->scrollY = 0; + gRegionMap->scrollX = 0; + gRegionMap->unk_040 = 0; + gRegionMap->unk_03c = 0; + gRegionMap->unk_060 = gRegionMap->cursorPosX * 8 - 0x34; + gRegionMap->unk_062 = gRegionMap->cursorPosY * 8 - 0x44; + gRegionMap->unk_044 = (gRegionMap->unk_060 << 8) / 16; + gRegionMap->unk_048 = (gRegionMap->unk_062 << 8) / 16; + gRegionMap->zoomedCursorPosX = gRegionMap->cursorPosX; + gRegionMap->zoomedCursorPosY = gRegionMap->cursorPosY; + gRegionMap->unk_04c = 0x10000; + gRegionMap->unk_050 = -0x800; } else { - sRegionMap->unk_03c = sRegionMap->scrollX * 0x100; - sRegionMap->unk_040 = sRegionMap->scrollY * 0x100; - sRegionMap->unk_060 = 0; - sRegionMap->unk_062 = 0; - sRegionMap->unk_044 = -(sRegionMap->unk_03c / 16); - sRegionMap->unk_048 = -(sRegionMap->unk_040 / 16); - sRegionMap->cursorPosX = sRegionMap->zoomedCursorPosX; - sRegionMap->cursorPosY = sRegionMap->zoomedCursorPosY; - sRegionMap->unk_04c = 0x8000; - sRegionMap->unk_050 = 0x800; + gRegionMap->unk_03c = gRegionMap->scrollX * 0x100; + gRegionMap->unk_040 = gRegionMap->scrollY * 0x100; + gRegionMap->unk_060 = 0; + gRegionMap->unk_062 = 0; + gRegionMap->unk_044 = -(gRegionMap->unk_03c / 16); + gRegionMap->unk_048 = -(gRegionMap->unk_040 / 16); + gRegionMap->cursorPosX = gRegionMap->zoomedCursorPosX; + gRegionMap->cursorPosY = gRegionMap->zoomedCursorPosY; + gRegionMap->unk_04c = 0x8000; + gRegionMap->unk_050 = 0x800; } - sRegionMap->unk_06e = 0; + gRegionMap->unk_06e = 0; FreeRegionMapCursorSprite(); HideRegionMapPlayerIcon(); } @@ -843,60 +843,60 @@ bool8 UpdateRegionMapZoom(void) { bool8 retVal; - if (sRegionMap->unk_06e >= 16) + if (gRegionMap->unk_06e >= 16) { return FALSE; } - sRegionMap->unk_06e++; - if (sRegionMap->unk_06e == 16) + gRegionMap->unk_06e++; + if (gRegionMap->unk_06e == 16) { - sRegionMap->unk_044 = 0; - sRegionMap->unk_048 = 0; - sRegionMap->scrollX = sRegionMap->unk_060; - sRegionMap->scrollY = sRegionMap->unk_062; - sRegionMap->unk_04c = (sRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); - sRegionMap->zoomed = !sRegionMap->zoomed; - sRegionMap->inputCallback = (sRegionMap->zoomed == FALSE) ? ProcessRegionMapInput_Full : ProcessRegionMapInput_Zoomed; - CreateRegionMapCursor(sRegionMap->cursorTileTag, sRegionMap->cursorPaletteTag); + gRegionMap->unk_044 = 0; + gRegionMap->unk_048 = 0; + gRegionMap->scrollX = gRegionMap->unk_060; + gRegionMap->scrollY = gRegionMap->unk_062; + gRegionMap->unk_04c = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8); + gRegionMap->zoomed = !gRegionMap->zoomed; + gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? ProcessRegionMapInput_Full : ProcessRegionMapInput_Zoomed; + CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag); UnhideRegionMapPlayerIcon(); retVal = FALSE; } else { - sRegionMap->unk_03c += sRegionMap->unk_044; - sRegionMap->unk_040 += sRegionMap->unk_048; - sRegionMap->scrollX = sRegionMap->unk_03c >> 8; - sRegionMap->scrollY = sRegionMap->unk_040 >> 8; - sRegionMap->unk_04c += sRegionMap->unk_050; - if ((sRegionMap->unk_044 < 0 && sRegionMap->scrollX < sRegionMap->unk_060) || (sRegionMap->unk_044 > 0 && sRegionMap->scrollX > sRegionMap->unk_060)) + gRegionMap->unk_03c += gRegionMap->unk_044; + gRegionMap->unk_040 += gRegionMap->unk_048; + gRegionMap->scrollX = gRegionMap->unk_03c >> 8; + gRegionMap->scrollY = gRegionMap->unk_040 >> 8; + gRegionMap->unk_04c += gRegionMap->unk_050; + if ((gRegionMap->unk_044 < 0 && gRegionMap->scrollX < gRegionMap->unk_060) || (gRegionMap->unk_044 > 0 && gRegionMap->scrollX > gRegionMap->unk_060)) { - sRegionMap->scrollX = sRegionMap->unk_060; - sRegionMap->unk_044 = 0; + gRegionMap->scrollX = gRegionMap->unk_060; + gRegionMap->unk_044 = 0; } - if ((sRegionMap->unk_048 < 0 && sRegionMap->scrollY < sRegionMap->unk_062) || (sRegionMap->unk_048 > 0 && sRegionMap->scrollY > sRegionMap->unk_062)) + if ((gRegionMap->unk_048 < 0 && gRegionMap->scrollY < gRegionMap->unk_062) || (gRegionMap->unk_048 > 0 && gRegionMap->scrollY > gRegionMap->unk_062)) { - sRegionMap->scrollY = sRegionMap->unk_062; - sRegionMap->unk_048 = 0; + gRegionMap->scrollY = gRegionMap->unk_062; + gRegionMap->unk_048 = 0; } - if (sRegionMap->zoomed == FALSE) + if (gRegionMap->zoomed == FALSE) { - if (sRegionMap->unk_04c < (128 << 8)) + if (gRegionMap->unk_04c < (128 << 8)) { - sRegionMap->unk_04c = (128 << 8); - sRegionMap->unk_050 = 0; + gRegionMap->unk_04c = (128 << 8); + gRegionMap->unk_050 = 0; } } else { - if (sRegionMap->unk_04c > (256 << 8)) + if (gRegionMap->unk_04c > (256 << 8)) { - sRegionMap->unk_04c = (256 << 8); - sRegionMap->unk_050 = 0; + gRegionMap->unk_04c = (256 << 8); + gRegionMap->unk_050 = 0; } } retVal = TRUE; } - CalcZoomScrollParams(sRegionMap->scrollX, sRegionMap->scrollY, 0x38, 0x48, sRegionMap->unk_04c >> 8, sRegionMap->unk_04c >> 8, 0); + CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk_04c >> 8, gRegionMap->unk_04c >> 8, 0); return retVal; } @@ -907,42 +907,42 @@ static void CalcZoomScrollParams(s16 scrollX, s16 scrollY, s16 c, s16 d, u16 e, s32 var3; s32 var4; - sRegionMap->bg2pa = e * gSineTable[rotation + 64] >> 8; - sRegionMap->bg2pc = e * -gSineTable[rotation] >> 8; - sRegionMap->bg2pb = f * gSineTable[rotation] >> 8; - sRegionMap->bg2pd = f * gSineTable[rotation + 64] >> 8; + gRegionMap->bg2pa = e * gSineTable[rotation + 64] >> 8; + gRegionMap->bg2pc = e * -gSineTable[rotation] >> 8; + gRegionMap->bg2pb = f * gSineTable[rotation] >> 8; + gRegionMap->bg2pd = f * gSineTable[rotation + 64] >> 8; var1 = (scrollX << 8) + (c << 8); - var2 = d * sRegionMap->bg2pb + sRegionMap->bg2pa * c; - sRegionMap->bg2x = var1 - var2; + var2 = d * gRegionMap->bg2pb + gRegionMap->bg2pa * c; + gRegionMap->bg2x = var1 - var2; var3 = (scrollY << 8) + (d << 8); - var4 = sRegionMap->bg2pd * d + sRegionMap->bg2pc * c; - sRegionMap->bg2y = var3 - var4; + var4 = gRegionMap->bg2pd * d + gRegionMap->bg2pc * c; + gRegionMap->bg2y = var3 - var4; - sRegionMap->needUpdateVideoRegs = TRUE; + gRegionMap->needUpdateVideoRegs = TRUE; } static void RegionMap_SetBG2XAndBG2Y(s16 x, s16 y) { - sRegionMap->bg2x = (x << 8) + 0x1c00; - sRegionMap->bg2y = (y << 8) + 0x2400; - sRegionMap->needUpdateVideoRegs = TRUE; + gRegionMap->bg2x = (x << 8) + 0x1c00; + gRegionMap->bg2y = (y << 8) + 0x2400; + gRegionMap->needUpdateVideoRegs = TRUE; } void UpdateRegionMapVideoRegs(void) { - if (sRegionMap->needUpdateVideoRegs) + if (gRegionMap->needUpdateVideoRegs) { - SetGpuReg(REG_OFFSET_BG2PA, sRegionMap->bg2pa); - SetGpuReg(REG_OFFSET_BG2PB, sRegionMap->bg2pb); - SetGpuReg(REG_OFFSET_BG2PC, sRegionMap->bg2pc); - SetGpuReg(REG_OFFSET_BG2PD, sRegionMap->bg2pd); - SetGpuReg(REG_OFFSET_BG2X_L, sRegionMap->bg2x); - SetGpuReg(REG_OFFSET_BG2X_H, sRegionMap->bg2x >> 16); - SetGpuReg(REG_OFFSET_BG2Y_L, sRegionMap->bg2y); - SetGpuReg(REG_OFFSET_BG2Y_H, sRegionMap->bg2y >> 16); - sRegionMap->needUpdateVideoRegs = FALSE; + SetGpuReg(REG_OFFSET_BG2PA, gRegionMap->bg2pa); + SetGpuReg(REG_OFFSET_BG2PB, gRegionMap->bg2pb); + SetGpuReg(REG_OFFSET_BG2PC, gRegionMap->bg2pc); + SetGpuReg(REG_OFFSET_BG2PD, gRegionMap->bg2pd); + SetGpuReg(REG_OFFSET_BG2X_L, gRegionMap->bg2x); + SetGpuReg(REG_OFFSET_BG2X_H, gRegionMap->bg2x >> 16); + SetGpuReg(REG_OFFSET_BG2Y_L, gRegionMap->bg2y); + SetGpuReg(REG_OFFSET_BG2Y_H, gRegionMap->bg2y >> 16); + gRegionMap->needUpdateVideoRegs = FALSE; } } @@ -950,10 +950,10 @@ void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y) { CalcZoomScrollParams(x, y, 0x38, 0x48, 0x100, 0x100, 0); UpdateRegionMapVideoRegs(); - if (sRegionMap->playerIconSprite != NULL) + if (gRegionMap->playerIconSprite != NULL) { - sRegionMap->playerIconSprite->x2 = -x; - sRegionMap->playerIconSprite->y2 = -y; + gRegionMap->playerIconSprite->x2 = -x; + gRegionMap->playerIconSprite->y2 = -y; } } @@ -996,22 +996,22 @@ static void InitMapBasedOnPlayerLocation(void) case MAP_TYPE_ROUTE: case MAP_TYPE_UNDERWATER: case MAP_TYPE_OCEAN_ROUTE: - sRegionMap->mapSecId = gMapHeader.regionMapSectionId; - sRegionMap->playerIsInCave = FALSE; + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + gRegionMap->playerIsInCave = FALSE; mapWidth = gMapHeader.mapLayout->width; mapHeight = gMapHeader.mapLayout->height; x = gSaveBlock1Ptr->pos.x; y = gSaveBlock1Ptr->pos.y; - if (sRegionMap->mapSecId == MAPSEC_UNDERWATER_SEAFLOOR_CAVERN || sRegionMap->mapSecId == MAPSEC_UNDERWATER_MARINE_CAVE) - sRegionMap->playerIsInCave = TRUE; + if (gRegionMap->mapSecId == MAPSEC_UNDERWATER_SEAFLOOR_CAVERN || gRegionMap->mapSecId == MAPSEC_UNDERWATER_MARINE_CAVE) + gRegionMap->playerIsInCave = TRUE; break; case MAP_TYPE_UNDERGROUND: case MAP_TYPE_UNKNOWN: if (gMapHeader.allowEscaping) { mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); - sRegionMap->mapSecId = mapHeader->regionMapSectionId; - sRegionMap->playerIsInCave = TRUE; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapLayout->width; mapHeight = mapHeader->mapLayout->height; x = gSaveBlock1Ptr->escapeWarp.x; @@ -1019,8 +1019,8 @@ static void InitMapBasedOnPlayerLocation(void) } else { - sRegionMap->mapSecId = gMapHeader.regionMapSectionId; - sRegionMap->playerIsInCave = TRUE; + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; mapWidth = 1; mapHeight = 1; x = 1; @@ -1029,16 +1029,16 @@ static void InitMapBasedOnPlayerLocation(void) break; case MAP_TYPE_SECRET_BASE: mapHeader = Overworld_GetMapHeaderByGroupAndId((u16)gSaveBlock1Ptr->dynamicWarp.mapGroup, (u16)gSaveBlock1Ptr->dynamicWarp.mapNum); - sRegionMap->mapSecId = mapHeader->regionMapSectionId; - sRegionMap->playerIsInCave = TRUE; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->playerIsInCave = TRUE; mapWidth = mapHeader->mapLayout->width; mapHeight = mapHeader->mapLayout->height; x = gSaveBlock1Ptr->dynamicWarp.x; y = gSaveBlock1Ptr->dynamicWarp.y; break; case MAP_TYPE_INDOOR: - sRegionMap->mapSecId = gMapHeader.regionMapSectionId; - if (sRegionMap->mapSecId != MAPSEC_DYNAMIC) + gRegionMap->mapSecId = gMapHeader.regionMapSectionId; + if (gRegionMap->mapSecId != MAPSEC_DYNAMIC) { warp = &gSaveBlock1Ptr->escapeWarp; mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); @@ -1047,13 +1047,13 @@ static void InitMapBasedOnPlayerLocation(void) { warp = &gSaveBlock1Ptr->dynamicWarp; mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); - sRegionMap->mapSecId = mapHeader->regionMapSectionId; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; } - if (IsPlayerInAquaHideout(sRegionMap->mapSecId)) - sRegionMap->playerIsInCave = TRUE; + if (IsPlayerInAquaHideout(gRegionMap->mapSecId)) + gRegionMap->playerIsInCave = TRUE; else - sRegionMap->playerIsInCave = FALSE; + gRegionMap->playerIsInCave = FALSE; mapWidth = mapHeader->mapLayout->width; mapHeight = mapHeader->mapLayout->height; @@ -1064,29 +1064,29 @@ static void InitMapBasedOnPlayerLocation(void) xOnMap = x; - dimensionScale = mapWidth / gRegionMapEntries[sRegionMap->mapSecId].width; + dimensionScale = mapWidth / gRegionMapEntries[gRegionMap->mapSecId].width; if (dimensionScale == 0) { dimensionScale = 1; } x /= dimensionScale; - if (x >= gRegionMapEntries[sRegionMap->mapSecId].width) + if (x >= gRegionMapEntries[gRegionMap->mapSecId].width) { - x = gRegionMapEntries[sRegionMap->mapSecId].width - 1; + x = gRegionMapEntries[gRegionMap->mapSecId].width - 1; } - dimensionScale = mapHeight / gRegionMapEntries[sRegionMap->mapSecId].height; + dimensionScale = mapHeight / gRegionMapEntries[gRegionMap->mapSecId].height; if (dimensionScale == 0) { dimensionScale = 1; } y /= dimensionScale; - if (y >= gRegionMapEntries[sRegionMap->mapSecId].height) + if (y >= gRegionMapEntries[gRegionMap->mapSecId].height) { - y = gRegionMapEntries[sRegionMap->mapSecId].height - 1; + y = gRegionMapEntries[gRegionMap->mapSecId].height - 1; } - switch (sRegionMap->mapSecId) + switch (gRegionMap->mapSecId) { case MAPSEC_ROUTE_114: if (y != 0) @@ -1116,11 +1116,11 @@ static void InitMapBasedOnPlayerLocation(void) x++; break; case MAPSEC_UNDERWATER_MARINE_CAVE: - GetMarineCaveCoords(&sRegionMap->cursorPosX, &sRegionMap->cursorPosY); + GetMarineCaveCoords(&gRegionMap->cursorPosX, &gRegionMap->cursorPosY); return; } - sRegionMap->cursorPosX = gRegionMapEntries[sRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - sRegionMap->cursorPosY = gRegionMapEntries[sRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; + gRegionMap->cursorPosX = gRegionMapEntries[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapEntries[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } static void RegionMap_InitializeStateBasedOnSSTidalLocation(void) @@ -1139,40 +1139,40 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void) switch (GetSSTidalLocation(&mapGroup, &mapNum, &xOnMap, &yOnMap)) { case SS_TIDAL_LOCATION_SLATEPORT: - sRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; + gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY; break; case SS_TIDAL_LOCATION_LILYCOVE: - sRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; + gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY; break; case SS_TIDAL_LOCATION_ROUTE124: - sRegionMap->mapSecId = MAPSEC_ROUTE_124; + gRegionMap->mapSecId = MAPSEC_ROUTE_124; break; case SS_TIDAL_LOCATION_ROUTE131: - sRegionMap->mapSecId = MAPSEC_ROUTE_131; + gRegionMap->mapSecId = MAPSEC_ROUTE_131; break; default: case SS_TIDAL_LOCATION_CURRENTS: mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum); - sRegionMap->mapSecId = mapHeader->regionMapSectionId; - dimensionScale = mapHeader->mapLayout->width / gRegionMapEntries[sRegionMap->mapSecId].width; + gRegionMap->mapSecId = mapHeader->regionMapSectionId; + dimensionScale = mapHeader->mapLayout->width / gRegionMapEntries[gRegionMap->mapSecId].width; if (dimensionScale == 0) dimensionScale = 1; x = xOnMap / dimensionScale; - if (x >= gRegionMapEntries[sRegionMap->mapSecId].width) - x = gRegionMapEntries[sRegionMap->mapSecId].width - 1; + if (x >= gRegionMapEntries[gRegionMap->mapSecId].width) + x = gRegionMapEntries[gRegionMap->mapSecId].width - 1; - dimensionScale = mapHeader->mapLayout->height / gRegionMapEntries[sRegionMap->mapSecId].height; + dimensionScale = mapHeader->mapLayout->height / gRegionMapEntries[gRegionMap->mapSecId].height; if (dimensionScale == 0) dimensionScale = 1; y = yOnMap / dimensionScale; - if (y >= gRegionMapEntries[sRegionMap->mapSecId].height) - y = gRegionMapEntries[sRegionMap->mapSecId].height - 1; + if (y >= gRegionMapEntries[gRegionMap->mapSecId].height) + y = gRegionMapEntries[gRegionMap->mapSecId].height - 1; break; } - sRegionMap->playerIsInCave = FALSE; - sRegionMap->cursorPosX = gRegionMapEntries[sRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; - sRegionMap->cursorPosY = gRegionMapEntries[sRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; + gRegionMap->playerIsInCave = FALSE; + gRegionMap->cursorPosX = gRegionMapEntries[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN; + gRegionMap->cursorPosY = gRegionMapEntries[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN; } static u8 GetMapsecType(u16 mapSecId) @@ -1300,20 +1300,20 @@ static void GetPositionOfCursorWithinMapSec(void) u16 y; u16 posWithinMapSec; - if (sRegionMap->mapSecId == MAPSEC_NONE) + if (gRegionMap->mapSecId == MAPSEC_NONE) { - sRegionMap->posWithinMapSec = 0; + gRegionMap->posWithinMapSec = 0; return; } - if (!sRegionMap->zoomed) + if (!gRegionMap->zoomed) { - x = sRegionMap->cursorPosX; - y = sRegionMap->cursorPosY; + x = gRegionMap->cursorPosX; + y = gRegionMap->cursorPosY; } else { - x = sRegionMap->zoomedCursorPosX; - y = sRegionMap->zoomedCursorPosY; + x = gRegionMap->zoomedCursorPosX; + y = gRegionMap->zoomedCursorPosY; } posWithinMapSec = 0; while (1) @@ -1333,13 +1333,13 @@ static void GetPositionOfCursorWithinMapSec(void) else { x--; - if (GetMapSecIdAt(x, y) == sRegionMap->mapSecId) + if (GetMapSecIdAt(x, y) == gRegionMap->mapSecId) { posWithinMapSec++; } } } - sRegionMap->posWithinMapSec = posWithinMapSec; + gRegionMap->posWithinMapSec = posWithinMapSec; } static bool8 RegionMap_IsMapSecIdInNextRow(u16 y) @@ -1352,7 +1352,7 @@ static bool8 RegionMap_IsMapSecIdInNextRow(u16 y) } for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++) { - if (GetMapSecIdAt(x, y) == sRegionMap->mapSecId) + if (GetMapSecIdAt(x, y) == gRegionMap->mapSecId) { return TRUE; } @@ -1362,11 +1362,11 @@ static bool8 RegionMap_IsMapSecIdInNextRow(u16 y) static void SpriteCB_CursorMapFull(struct Sprite *sprite) { - if (sRegionMap->cursorMovementFrameCounter != 0) + if (gRegionMap->cursorMovementFrameCounter != 0) { - sprite->x += 2 * sRegionMap->cursorDeltaX; - sprite->y += 2 * sRegionMap->cursorDeltaY; - sRegionMap->cursorMovementFrameCounter--; + sprite->x += 2 * gRegionMap->cursorDeltaX; + sprite->y += 2 * gRegionMap->cursorDeltaY; + gRegionMap->cursorMovementFrameCounter--; } } @@ -1386,20 +1386,20 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) template = sRegionMapCursorSpriteTemplate; sheet.tag = tileTag; template.tileTag = tileTag; - sRegionMap->cursorTileTag = tileTag; + gRegionMap->cursorTileTag = tileTag; palette.tag = paletteTag; template.paletteTag = paletteTag; - sRegionMap->cursorPaletteTag = paletteTag; - if (!sRegionMap->zoomed) + gRegionMap->cursorPaletteTag = paletteTag; + if (!gRegionMap->zoomed) { - sheet.data = sRegionMap->cursorSmallImage; - sheet.size = sizeof(sRegionMap->cursorSmallImage); + sheet.data = gRegionMap->cursorSmallImage; + sheet.size = sizeof(gRegionMap->cursorSmallImage); template.callback = SpriteCB_CursorMapFull; } else { - sheet.data = sRegionMap->cursorLargeImage; - sheet.size = sizeof(sRegionMap->cursorLargeImage); + sheet.data = gRegionMap->cursorLargeImage; + sheet.size = sizeof(gRegionMap->cursorLargeImage); template.callback = SpriteCB_CursorMapZoomed; } LoadSpriteSheet(&sheet); @@ -1407,46 +1407,46 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) spriteId = CreateSprite(&template, 0x38, 0x48, 0); if (spriteId != MAX_SPRITES) { - sRegionMap->cursorSprite = &gSprites[spriteId]; - if (sRegionMap->zoomed == TRUE) + gRegionMap->cursorSprite = &gSprites[spriteId]; + if (gRegionMap->zoomed == TRUE) { - sRegionMap->cursorSprite->oam.size = SPRITE_SIZE(32x32); - sRegionMap->cursorSprite->x -= 8; - sRegionMap->cursorSprite->y -= 8; - StartSpriteAnim(sRegionMap->cursorSprite, 1); + gRegionMap->cursorSprite->oam.size = SPRITE_SIZE(32x32); + gRegionMap->cursorSprite->x -= 8; + gRegionMap->cursorSprite->y -= 8; + StartSpriteAnim(gRegionMap->cursorSprite, 1); } else { - sRegionMap->cursorSprite->oam.size = SPRITE_SIZE(16x16); - sRegionMap->cursorSprite->x = 8 * sRegionMap->cursorPosX + 4; - sRegionMap->cursorSprite->y = 8 * sRegionMap->cursorPosY + 4; + gRegionMap->cursorSprite->oam.size = SPRITE_SIZE(16x16); + gRegionMap->cursorSprite->x = 8 * gRegionMap->cursorPosX + 4; + gRegionMap->cursorSprite->y = 8 * gRegionMap->cursorPosY + 4; } - sRegionMap->cursorSprite->data[1] = 2; - sRegionMap->cursorSprite->data[2] = (IndexOfSpritePaletteTag(paletteTag) << 4) + 0x101; - sRegionMap->cursorSprite->data[3] = TRUE; + gRegionMap->cursorSprite->data[1] = 2; + gRegionMap->cursorSprite->data[2] = (IndexOfSpritePaletteTag(paletteTag) << 4) + 0x101; + gRegionMap->cursorSprite->data[3] = TRUE; } } static void FreeRegionMapCursorSprite(void) { - if (sRegionMap->cursorSprite != NULL) + if (gRegionMap->cursorSprite != NULL) { - DestroySprite(sRegionMap->cursorSprite); - FreeSpriteTilesByTag(sRegionMap->cursorTileTag); - FreeSpritePaletteByTag(sRegionMap->cursorPaletteTag); + DestroySprite(gRegionMap->cursorSprite); + FreeSpriteTilesByTag(gRegionMap->cursorTileTag); + FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag); } } // Unused static void SetUnkCursorSpriteData(void) { - sRegionMap->cursorSprite->data[3] = TRUE; + gRegionMap->cursorSprite->data[3] = TRUE; } // Unused static void ClearUnkCursorSpriteData(void) { - sRegionMap->cursorSprite->data[3] = FALSE; + gRegionMap->cursorSprite->data[3] = FALSE; } void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) @@ -1458,7 +1458,7 @@ void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) if (IsEventIslandMapSecId(gMapHeader.regionMapSectionId)) { - sRegionMap->playerIconSprite = NULL; + gRegionMap->playerIconSprite = NULL; return; } if (gSaveBlock2Ptr->playerGender == FEMALE) @@ -1469,49 +1469,49 @@ void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag) LoadSpriteSheet(&sheet); LoadSpritePalette(&palette); spriteId = CreateSprite(&template, 0, 0, 1); - sRegionMap->playerIconSprite = &gSprites[spriteId]; - if (!sRegionMap->zoomed) + gRegionMap->playerIconSprite = &gSprites[spriteId]; + if (!gRegionMap->zoomed) { - sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 8 + 4; - sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 8 + 4; - sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; + gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 8 + 4; + gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 8 + 4; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; } else { - sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 16 - 0x30; - sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 16 - 0x42; - sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; + gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 16 - 0x30; + gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 16 - 0x42; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; } } static void HideRegionMapPlayerIcon(void) { - if (sRegionMap->playerIconSprite != NULL) + if (gRegionMap->playerIconSprite != NULL) { - sRegionMap->playerIconSprite->invisible = TRUE; - sRegionMap->playerIconSprite->callback = SpriteCallbackDummy; + gRegionMap->playerIconSprite->invisible = TRUE; + gRegionMap->playerIconSprite->callback = SpriteCallbackDummy; } } static void UnhideRegionMapPlayerIcon(void) { - if (sRegionMap->playerIconSprite != NULL) + if (gRegionMap->playerIconSprite != NULL) { - if (sRegionMap->zoomed == TRUE) + if (gRegionMap->zoomed == TRUE) { - sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 16 - 0x30; - sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 16 - 0x42; - sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; - sRegionMap->playerIconSprite->invisible = FALSE; + gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 16 - 0x30; + gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 16 - 0x42; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapZoomed; + gRegionMap->playerIconSprite->invisible = FALSE; } else { - sRegionMap->playerIconSprite->x = sRegionMap->playerIconSpritePosX * 8 + 4; - sRegionMap->playerIconSprite->y = sRegionMap->playerIconSpritePosY * 8 + 4; - sRegionMap->playerIconSprite->x2 = 0; - sRegionMap->playerIconSprite->y2 = 0; - sRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; - sRegionMap->playerIconSprite->invisible = FALSE; + gRegionMap->playerIconSprite->x = gRegionMap->playerIconSpritePosX * 8 + 4; + gRegionMap->playerIconSprite->y = gRegionMap->playerIconSpritePosY * 8 + 4; + gRegionMap->playerIconSprite->x2 = 0; + gRegionMap->playerIconSprite->y2 = 0; + gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconMapFull; + gRegionMap->playerIconSprite->invisible = FALSE; } } } @@ -1523,8 +1523,8 @@ static void UnhideRegionMapPlayerIcon(void) static void SpriteCB_PlayerIconMapZoomed(struct Sprite *sprite) { - sprite->x2 = -2 * sRegionMap->scrollX; - sprite->y2 = -2 * sRegionMap->scrollY; + sprite->x2 = -2 * gRegionMap->scrollX; + sprite->y2 = -2 * gRegionMap->scrollY; sprite->sY = sprite->y + sprite->y2 + sprite->centerToCornerVecY; sprite->sX = sprite->x + sprite->x2 + sprite->centerToCornerVecX; if (sprite->sY < -8 || sprite->sY > DISPLAY_HEIGHT + 8 || sprite->sX < -8 || sprite->sX > DISPLAY_WIDTH + 8) @@ -1545,7 +1545,7 @@ static void SpriteCB_PlayerIconMapFull(struct Sprite *sprite) static void SpriteCB_PlayerIcon(struct Sprite *sprite) { - if (sRegionMap->blinkPlayerIcon) + if (gRegionMap->blinkPlayerIcon) { if (++sprite->sTimer > 16) { @@ -1561,8 +1561,8 @@ static void SpriteCB_PlayerIcon(struct Sprite *sprite) void TrySetPlayerIconBlink(void) { - if (sRegionMap->playerIsInCave) - sRegionMap->blinkPlayerIcon = TRUE; + if (gRegionMap->playerIsInCave) + gRegionMap->blinkPlayerIcon = TRUE; } #undef sY @@ -1634,7 +1634,7 @@ static void GetMapSecDimensions(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *h bool8 IsRegionMapZoomed(void) { - return sRegionMap->zoomed; + return gRegionMap->zoomed; } bool32 IsEventIslandMapSecId(u8 mapSecId) @@ -2024,7 +2024,11 @@ static void CB_ExitFlyMap(void) { SetMainCallback2(CB2_ReturnToPartyMenuFromFlyMap); } - TRY_FREE_AND_SET_NULL(sFlyMap); + if (sFlyMap != NULL) + { + free(sFlyMap); + sFlyMap = NULL; + } FreeAllWindowBuffers(); } break; diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index b854c899e..782a05c75 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -30,10 +30,10 @@ struct GFRomHeader u32 pokedexFlag; u32 mysteryEventFlag; u32 pokedexCount; - u8 playerNameLength; + u8 unk1; u8 unk2; - u8 pokemonNameLength1; - u8 pokemonNameLength2; + u8 unk3; + u8 unk4; u8 unk5; u8 unk6; u8 unk7; @@ -79,8 +79,8 @@ struct GFRomHeader u32 pcItemsOffset; u32 giftRibbonsOffset; u32 enigmaBerryOffset; - u32 enigmaBerrySize; - const u8 * moveDescriptions; + u32 mapViewOffset; + u32 unk19; u32 unk20; }; @@ -110,24 +110,23 @@ static const struct GFRomHeader sGFRomHeader = { .pokedexFlag = FLAG_RECEIVED_POKEDEX_FROM_BIRCH, .mysteryEventFlag = FLAG_SYS_MYSTERY_EVENT_ENABLE, .pokedexCount = NATIONAL_DEX_COUNT, - .playerNameLength = PLAYER_NAME_LENGTH, - .unk2 = 10, - .pokemonNameLength1 = POKEMON_NAME_LENGTH, - .pokemonNameLength2 = POKEMON_NAME_LENGTH, - // Two of the below 12s are likely move/ability name length, given their presence in this header - .unk5 = 12, - .unk6 = 12, - .unk7 = 6, - .unk8 = 12, - .unk9 = 6, - .unk10 = 16, - .unk11 = 18, - .unk12 = 12, - .unk13 = 15, - .unk14 = 11, - .unk15 = 1, - .unk16 = 8, - .unk17 = 12, + .unk1 = 0x07, + .unk2 = 0x0a, + .unk3 = 0x0a, + .unk4 = 0x0a, + .unk5 = 0x0c, + .unk6 = 0x0c, + .unk7 = 0x06, + .unk8 = 0x0c, + .unk9 = 0x06, + .unk10 = 0x10, + .unk11 = 0x12, + .unk12 = 0x0c, + .unk13 = 0x0f, + .unk14 = 0x0b, + .unk15 = 0x01, + .unk16 = 0x08, + .unk17 = 0x0c, .saveBlock2Size = sizeof(struct SaveBlock2), .saveBlock1Size = sizeof(struct SaveBlock1), .partyCountOffset = offsetof(struct SaveBlock1, playerPartyCount), @@ -160,7 +159,7 @@ static const struct GFRomHeader sGFRomHeader = { .pcItemsOffset = offsetof(struct SaveBlock1, pcItems), .giftRibbonsOffset = offsetof(struct SaveBlock1, giftRibbons), .enigmaBerryOffset = offsetof(struct SaveBlock1, enigmaBerry), - .enigmaBerrySize = sizeof(struct EnigmaBerry), - .moveDescriptions = NULL, + .mapViewOffset = offsetof(struct SaveBlock1, mapView), + .unk19 = 0x00000000, .unk20 = 0x00000000, // 0xFFFFFFFF in FRLG }; diff --git a/src/rotating_gate.c b/src/rotating_gate.c index e2fd575a1..f839d22c3 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -612,10 +612,12 @@ static const u8 sRotatingGate_ArmLayout[][4 * 2] = }, }; -static EWRAM_DATA u8 sRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0}; -static EWRAM_DATA const struct RotatingGatePuzzle *sRotatingGate_PuzzleConfig = NULL; -static EWRAM_DATA u8 sRotatingGate_PuzzleCount = 0; +// ewram +static EWRAM_DATA u8 gRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0}; +static EWRAM_DATA const struct RotatingGatePuzzle *gRotatingGate_PuzzleConfig = NULL; +static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0; +// text static s32 GetCurrentMapRotatingGatePuzzleType(void) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(FORTREE_CITY_GYM) && @@ -638,9 +640,9 @@ static void RotatingGate_ResetAllGateOrientations(void) s32 i; u8 *ptr = (u8 *)GetVarPointer(VAR_TEMP_0); - for (i = 0; i < sRotatingGate_PuzzleCount; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - ptr[i] = sRotatingGate_PuzzleConfig[i].orientation; + ptr[i] = gRotatingGate_PuzzleConfig[i].orientation; } } @@ -681,12 +683,12 @@ static void RotatingGate_LoadPuzzleConfig(void) switch (puzzleType) { case PUZZLE_FORTREE_CITY_GYM: - sRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; - sRotatingGate_PuzzleCount = ARRAY_COUNT(sRotatingGate_FortreePuzzleConfig); + gRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; + gRotatingGate_PuzzleCount = ARRAY_COUNT(sRotatingGate_FortreePuzzleConfig); break; case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6: - sRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; - sRotatingGate_PuzzleCount = ARRAY_COUNT(sRotatingGate_TrickHousePuzzleConfig); + gRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; + gRotatingGate_PuzzleCount = ARRAY_COUNT(sRotatingGate_TrickHousePuzzleConfig); break; case PUZZLE_NONE: default: @@ -694,7 +696,7 @@ static void RotatingGate_LoadPuzzleConfig(void) } for (i = 0; i < ROTATING_GATE_PUZZLE_MAX - 1; i++) - sRotatingGate_GateSpriteIds[i] = MAX_SPRITES; + gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; } static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) @@ -708,15 +710,15 @@ static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) s16 y = gSaveBlock1Ptr->pos.y - 2; s16 y2 = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H; - for (i = 0; i < sRotatingGate_PuzzleCount; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - s16 x3 = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; - s16 y3 = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; + s16 x3 = gRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 y3 = gRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && - sRotatingGate_GateSpriteIds[i] == MAX_SPRITES) + gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) { - sRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); + gRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); } } } @@ -728,7 +730,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) u8 spriteId; s16 x, y; - const struct RotatingGatePuzzle *gate = &sRotatingGate_PuzzleConfig[gateId]; + const struct RotatingGatePuzzle *gate = &gRotatingGate_PuzzleConfig[gateId]; if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1) template = sSpriteTemplate_RotatingGateRegular; @@ -825,20 +827,20 @@ static void RotatingGate_DestroyGatesOutsideViewport(void) s16 y = gSaveBlock1Ptr->pos.y - 2; s16 y2 = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H; - for (i = 0; i < sRotatingGate_PuzzleCount; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - s16 xGate = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; - s16 yGate = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; + s16 xGate = gRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 yGate = gRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; - if (sRotatingGate_GateSpriteIds[i] == MAX_SPRITES) + if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) continue; if (xGate < x || xGate > x2 || yGate < y || yGate > y2) { - struct Sprite *sprite = &gSprites[sRotatingGate_GateSpriteIds[i]]; + struct Sprite *sprite = &gSprites[gRotatingGate_GateSpriteIds[i]]; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); - sRotatingGate_GateSpriteIds[i] = MAX_SPRITES; + gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; } } } @@ -860,9 +862,9 @@ static s32 RotatingGate_CanRotate(u8 gateId, s32 rotationDirection) orientation = RotatingGate_GetGateOrientation(gateId); - shape = sRotatingGate_PuzzleConfig[gateId].shape; - x = sRotatingGate_PuzzleConfig[gateId].x + MAP_OFFSET; - y = sRotatingGate_PuzzleConfig[gateId].y + MAP_OFFSET; + shape = gRotatingGate_PuzzleConfig[gateId].shape; + x = gRotatingGate_PuzzleConfig[gateId].x + MAP_OFFSET; + y = gRotatingGate_PuzzleConfig[gateId].y + MAP_OFFSET; // Loop through the gate's "arms" clockwise (north, south, east, west) for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) @@ -889,15 +891,15 @@ static s32 RotatingGate_HasArm(u8 gateId, u8 armInfo) s32 isLongArm = armInfo % 2; s8 armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; - s32 shape = sRotatingGate_PuzzleConfig[gateId].shape; + s32 shape = gRotatingGate_PuzzleConfig[gateId].shape; return sRotatingGate_ArmLayout[shape][armOrientation * 2 + isLongArm]; } static void RotatingGate_TriggerRotationAnimation(u8 gateId, s32 rotationDirection) { - if (sRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) + if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) { - struct Sprite *sprite = &gSprites[sRotatingGate_GateSpriteIds[gateId]]; + struct Sprite *sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]]; sprite->data[1] = rotationDirection; sprite->data[2] = RotatingGate_GetGateOrientation(gateId); } @@ -955,10 +957,10 @@ bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y) if (!GetCurrentMapRotatingGatePuzzleType()) return FALSE; - for (i = 0; i < sRotatingGate_PuzzleCount; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - s16 gateX = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; - s16 gateY = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; + s16 gateX = gRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 gateY = gRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { @@ -993,10 +995,10 @@ bool8 CheckForRotatingGatePuzzleCollisionWithoutAnimation(u8 direction, s16 x, s if (!GetCurrentMapRotatingGatePuzzleType()) return FALSE; - for (i = 0; i < sRotatingGate_PuzzleCount; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - s16 gateX = sRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; - s16 gateY = sRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; + s16 gateX = gRotatingGate_PuzzleConfig[i].x + MAP_OFFSET; + s16 gateY = gRotatingGate_PuzzleConfig[i].y + MAP_OFFSET; if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c index 4581f6e5b..2e919f550 100644 --- a/src/rotating_tile_puzzle.c +++ b/src/rotating_tile_puzzle.c @@ -81,11 +81,14 @@ static const u8 sMovement_FaceUp[] = MOVEMENT_ACTION_STEP_END }; -static void SaveRotatingTileObject(u8, u8); -static void TurnUnsavedRotatingTileObject(u8, u8); +// This file's functions. +static void SaveRotatingTileObject(u8 eventTemplateId, u8 arg1); +static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 arg1); +// EWRAM vars EWRAM_DATA static struct RotatingTilePuzzle *sRotatingTilePuzzle = NULL; +// code void InitRotatingTilePuzzle(bool8 isTrickHouse) { if (sRotatingTilePuzzle == NULL) @@ -98,7 +101,8 @@ void FreeRotatingTilePuzzle(void) { u8 id; - TRY_FREE_AND_SET_NULL(sRotatingTilePuzzle); + if (sRotatingTilePuzzle != NULL) + FREE_AND_SET_NULL(sRotatingTilePuzzle); id = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[id]); diff --git a/src/save.c b/src/save.c index 52cdaa5dd..dafc20868 100644 --- a/src/save.c +++ b/src/save.c @@ -73,12 +73,6 @@ struct SAVEBLOCK_CHUNK(struct PokemonStorage, 8), // SECTOR_ID_PKMN_STORAGE_END }; -// These will produce an error if a save struct is larger than the space -// alloted for it in the flash. -STATIC_ASSERT(sizeof(struct SaveBlock2) <= SECTOR_DATA_SIZE, SaveBlock2FreeSpace); -STATIC_ASSERT(sizeof(struct SaveBlock1) <= SECTOR_DATA_SIZE * (SECTOR_ID_SAVEBLOCK1_END - SECTOR_ID_SAVEBLOCK1_START + 1), SaveBlock1FreeSpace); -STATIC_ASSERT(sizeof(struct PokemonStorage) <= SECTOR_DATA_SIZE * (SECTOR_ID_PKMN_STORAGE_END - SECTOR_ID_PKMN_STORAGE_START + 1), PokemonStorageFreeSpace); - u16 gLastWrittenSector; u32 gLastSaveCounter; u16 gLastKnownGoodSector; diff --git a/src/scrcmd.c b/src/scrcmd.c index f76d09871..d8d543df4 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1179,7 +1179,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx) bool8 ScrCmd_createvobject(struct ScriptContext *ctx) { - u8 graphicsId = ScriptReadByte(ctx); + u16 graphicsId = ScriptReadByte(ctx); u8 virtualObjId = ScriptReadByte(ctx); u16 x = VarGet(ScriptReadHalfword(ctx)); u32 y = VarGet(ScriptReadHalfword(ctx)); @@ -2383,4 +2383,4 @@ bool8 ScrCmd_checkfollower(struct ScriptContext *ctx) { CheckPlayerHasFollower(); return FALSE; -} +} \ No newline at end of file diff --git a/src/script.c b/src/script.c index 4728e739c..20d8d2ef3 100644 --- a/src/script.c +++ b/src/script.c @@ -447,3 +447,10 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script); InitRamScript(script, scriptSize, MAP_GROUP(UNDEFINED), MAP_NUM(UNDEFINED), NO_OBJECT); } + +u8* ReadWord(u8 index) +{ + struct ScriptContext *ctx = &sScriptContext1; + + return (T1_READ_PTR(&ctx->data[index])); +} diff --git a/src/script_movement.c b/src/script_movement.c index 10517dfc8..92f36e92d 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -6,6 +6,7 @@ #include "constants/event_objects.h" #include "constants/event_object_movement.h" +// static functions static void ScriptMovement_StartMoveObjects(u8 priority); static u8 GetMoveObjectsTaskId(void); static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 objEventId, const u8 *movementScript); @@ -16,8 +17,10 @@ static void ScriptMovement_UnfreezeActiveObjects(u8 taskId); static void ScriptMovement_MoveObjects(u8 taskId); static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 objEventId, const u8 *movementScript); -static EWRAM_DATA const u8 *sMovementScripts[OBJECT_EVENTS_COUNT] = {0}; +// EWRAM_DATA +static EWRAM_DATA const u8 *gMovementScripts[OBJECT_EVENTS_COUNT] = {0}; +// text bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript) { u8 objEventId; @@ -164,12 +167,12 @@ static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId) static void SetMovementScript(u8 moveScrId, const u8 *movementScript) { - sMovementScripts[moveScrId] = movementScript; + gMovementScripts[moveScrId] = movementScript; } static const u8 *GetMovementScript(u8 moveScrId) { - return sMovementScripts[moveScrId]; + return gMovementScripts[moveScrId]; } static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 objEventId, const u8 *movementScript) diff --git a/src/siirtc.c b/src/siirtc.c index 0e598f717..5f4fc0a23 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -4,7 +4,6 @@ #include "gba/gba.h" #include "siirtc.h" -#include "config.h" #define STATUS_INTFE 0x02 // frequency interrupt enable #define STATUS_INTME 0x08 // per-minute interrupt enable diff --git a/src/slot_machine.c b/src/slot_machine.c index cb6a380d6..1dfa026e5 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1390,7 +1390,7 @@ static bool8 SlotTask_HandleBetInput(struct Task *task) // SLOTTASK_MSG_NEED_3_COINS static bool8 SlotTask_PrintMsg_Need3Coins(struct Task *task) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); CopyWindowToVram(0, COPYWIN_FULL); sSlotMachine->state = SLOTTASK_WAIT_MSG_NEED_3_COINS; @@ -1655,7 +1655,7 @@ static bool8 SlotTask_NoMatches(struct Task *task) // SLOTTASK_ASK_QUIT static bool8 SlotTask_AskQuit(struct Task *task) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, gText_QuitTheGame, 0, 1, 0, 0); CopyWindowToVram(0, COPYWIN_FULL); CreateYesNoMenuParameterized(0x15, 7, 0x214, 0x180, 0xE, 0xF); @@ -1687,7 +1687,7 @@ static bool8 SlotTask_HandleQuitInput(struct Task *task) // SLOTTASK_MSG_MAX_COINS static bool8 SlotTask_PrintMsg_MaxCoins(struct Task *task) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, gText_YouveGot9999Coins, 0, 1, 0, 0); CopyWindowToVram(0, COPYWIN_FULL); sSlotMachine->state = SLOTTASK_WAIT_MSG_MAX_COINS; @@ -1708,7 +1708,7 @@ static bool8 SlotTask_WaitMsg_MaxCoins(struct Task *task) // SLOTTASK_MSG_NO_MORE_COINS static bool8 SlotTask_PrintMsg_NoMoreCoins(struct Task *task) { - DrawDialogueFrame(0, FALSE); + DrawDialogueFrame(0, 0); AddTextPrinterParameterized(0, FONT_NORMAL, gText_YouveRunOutOfCoins, 0, 1, 0, 0); CopyWindowToVram(0, COPYWIN_FULL); sSlotMachine->state = SLOTTASK_WAIT_MSG_NO_MORE_COINS; @@ -1756,10 +1756,14 @@ static bool8 SlotTask_FreeDataStructures(struct Task *task) FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Number); FREE_AND_SET_NULL(sImageTable_DigitalDisplay_Pokeball); FREE_AND_SET_NULL(sImageTable_DigitalDisplay_DPad); - TRY_FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); - TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); - TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); - TRY_FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); + if (sImageTable_ReelTimePikachu != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); + if (sImageTable_ReelTimeMachineAntennae != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); + if (sImageTable_ReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); + if (sImageTable_BrokenReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); FREE_AND_SET_NULL(sMenuGfx); FREE_AND_SET_NULL(sSelectedPikaPowerTile); FREE_AND_SET_NULL(sReelOverlay_Tilemap); @@ -3861,15 +3865,21 @@ static void ReelTime_EndFailure(struct Task *task) static void LoadReelTimeWindowTilemap(s16 a0, s16 a1) { s16 i; + for (i = 4; i < 15; i++) + { LoadBgTilemap(1, &sReelTimeWindow_Tilemap[a1 + (i - 4) * 20], 2, 32 * i + a0); + } } static void ClearReelTimeWindowTilemap(s16 a0) { u8 i; + for (i = 4; i < 15; i++) + { LoadBgTilemap(1, sEmptyTilemap, 2, 32 * i + a0); + } } #undef tState @@ -4106,44 +4116,32 @@ static void CreateCreditPayoutNumberSprites(void) CreateCoinNumberSprite(x, 23, TRUE, i); } -#define sIsPayout data[0] -#define sDigitMin data[1] -#define sDigitMax data[2] -#define sCurNum data[3] // Only used to determine whether the sprite has already been updated to show the correct digit - -static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 digitMult) +static void CreateCoinNumberSprite(s16 x, s16 y, bool8 isPayout, s16 a3) { struct Sprite *sprite = &gSprites[CreateSprite(&sSpriteTemplate_CoinNumber, x, y, 13)]; sprite->oam.priority = 2; - sprite->sIsPayout = isPayout; - sprite->sDigitMin = digitMult; - sprite->sDigitMax = digitMult * 10; - sprite->sCurNum = -1; + sprite->data[0] = isPayout; + sprite->data[1] = a3; + sprite->data[2] = a3 * 10; + sprite->data[3] = -1; } static void SpriteCB_CoinNumber(struct Sprite *sprite) { u16 tag = sSlotMachine->coins; - if (sprite->sIsPayout) + if (sprite->data[0]) tag = sSlotMachine->payout; - if (sprite->sCurNum != tag) + if (sprite->data[3] != tag) { - // Convert total to current digit - sprite->sCurNum = tag; - tag %= (u16)sprite->sDigitMax; - tag /= (u16)sprite->sDigitMin; - - tag += GFXTAG_NUM_0; + sprite->data[3] = tag; + tag %= (u16)sprite->data[2]; + tag /= (u16)sprite->data[1]; + tag += 7; sprite->sheetTileStart = GetSpriteTileStartByTag(tag); SetSpriteSheetFrameTileNum(sprite); } } -#undef sIsPayout -#undef sDigitMin -#undef sDigitMax -#undef sCurNum - static void CreateReelBackgroundSprite(void) { u8 spriteId = CreateSprite(&sSpriteTemplate_ReelBackground, 88, 72, 15); @@ -4180,7 +4178,8 @@ static void CreateReelTimePikachuSprite(void) static void DestroyReelTimePikachuSprite(void) { DestroySprite(&gSprites[sSlotMachine->reelTimePikachuSpriteId]); - TRY_FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); + if (sImageTable_ReelTimePikachu != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimePikachu); } static void SpriteCB_ReelTimePikachu(struct Sprite *sprite) @@ -4309,8 +4308,10 @@ static void DestroyReelTimeMachineSprites(void) for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeMachineSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimeMachineSpriteIds[i]]); - TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); - TRY_FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); + if (sImageTable_ReelTimeMachineAntennae != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachineAntennae); + if (sImageTable_ReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_ReelTimeMachine); for (i = 0; i < ARRAY_COUNT(sSlotMachine->reelTimeNumberSpriteIds); i++) DestroySprite(&gSprites[sSlotMachine->reelTimeNumberSpriteIds[i]]); @@ -4327,7 +4328,8 @@ static void DestroyReelTimeShadowSprites(void) static void DestroyBrokenReelTimeMachineSprite(void) { DestroySprite(&gSprites[sSlotMachine->reelTimeBrokenMachineSpriteId]); - TRY_FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); + if (sImageTable_BrokenReelTimeMachine != NULL) + FREE_AND_SET_NULL(sImageTable_BrokenReelTimeMachine); } #define sDelayTimer data[0] diff --git a/src/start_menu.c b/src/start_menu.c index 11189ee83..90230c3dd 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -42,10 +42,9 @@ #include "text_window.h" #include "trainer_card.h" #include "window.h" -#include "union_room.h" -#include "constants/battle_frontier.h" -#include "constants/rgb.h" #include "constants/songs.h" +#include "union_room.h" +#include "constants/rgb.h" // Menu actions enum @@ -139,7 +138,7 @@ static bool8 FieldCB_ReturnToFieldStartMenu(void); static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; -static const u8* const sPyramidFloorNames[FRONTIER_STAGES_PER_CHALLENGE + 1] = +static const u8* const sPyramidFloorNames[] = { gText_Floor1, gText_Floor2, @@ -393,7 +392,7 @@ static void ShowSafariBallsWindow(void) static void ShowPyramidFloorWindow(void) { - if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == FRONTIER_STAGES_PER_CHALLENGE) + if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == 7) sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1); else sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2); diff --git a/src/tileset_anims.c b/src/tileset_anims.c index 6a7589e36..3676006a6 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -537,7 +537,7 @@ const u16 *const gTilesetAnims_BattlePyramid_StatueShadow[] = { gTilesetAnims_BattlePyramid_StatueShadow_Frame2 }; -static const u16 *const sTilesetAnims_BattleDomeFloorLightPals[] = { +static const u16 *const gTilesetAnims_BattleDomeFloorLightPals[] = { gTilesetAnims_BattleDomePals0_0, gTilesetAnims_BattleDomePals0_1, gTilesetAnims_BattleDomePals0_2, @@ -1167,7 +1167,7 @@ static void QueueAnimTiles_BattlePyramid_StatueShadow(u16 timer) static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(gTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(gTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); BlendPalette(0x80, 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) != TASK_NONE) { @@ -1178,7 +1178,7 @@ static void BlendAnimPalette_BattleDome_FloorLights(u16 timer) static void BlendAnimPalette_BattleDome_FloorLightsNoBlend(u16 timer) { - CpuCopy16(sTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(sTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); + CpuCopy16(gTilesetAnims_BattleDomeFloorLightPals[timer % ARRAY_COUNT(gTilesetAnims_BattleDomeFloorLightPals)], &gPlttBufferUnfaded[0x80], 32); if ((u8)FindTaskIdByFunc(Task_BattleTransition_Intro) == TASK_NONE) { BlendPalette(0x80, 16, gPaletteFade.y, gPaletteFade.blendColor & 0x7FFF); diff --git a/src/trade.c b/src/trade.c index 25614c91a..dd0851bbd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2195,7 +2195,7 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) sTradeMenuData->timer++; break; case GFXTAG_MENU_TEXT_COUNT: - LoadSpritePalette(&sSpritePalette_TradeScreenText); + LoadSpritePalette(&gSpritePalette_TradeScreenText); sTradeMenuData->timer++; break; case GFXTAG_MENU_TEXT_COUNT + 1: @@ -2435,7 +2435,7 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal) { bool8 playerHasNationalDex = player.hasNationalDex; bool8 playerIsChampion = player.isChampion; @@ -2496,7 +2496,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, u8 isEventLegal) { bool8 hasNationalDex = player.hasNationalDex; @@ -3744,7 +3744,7 @@ static bool8 AnimateTradeSequenceCable(void) gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x2 = 0; gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 = 0; StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); + CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]); FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); sTradeData->state++; @@ -4244,7 +4244,7 @@ static bool8 AnimateTradeSequenceWireless(void) gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x2 = 0; gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 = 0; StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); + CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]); FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); sTradeData->state++; @@ -4813,7 +4813,7 @@ static void CheckPartnersMonForRibbons(void) { u8 i; u8 numRibbons = 0; - for (i = 0; i < (MON_DATA_UNUSED_RIBBONS - MON_DATA_CHAMPION_RIBBON); i ++) + for (i = 0; i < 12; i ++) { numRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_CHAMPION_RIBBON + i); } diff --git a/src/trainer_hill.c b/src/trainer_hill.c index dad6b97ea..39c6202a0 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -32,21 +32,23 @@ #include "constants/trainer_hill.h" #include "constants/trainer_types.h" +#define HILL_TAG_NORMAL 0 +#define HILL_TAG_VARIETY 1 +#define HILL_TAG_UNIQUE 2 +#define HILL_TAG_EXPERT 3 + #define HILL_MAX_TIME 215999 // 60 * 60 * 60 - 1 -struct FloorTrainers +// EWRAM +struct TrHillStruct2 { - u8 name[HILL_TRAINERS_PER_FLOOR][HILL_TRAINER_NAME_LENGTH]; - u8 facilityClass[HILL_TRAINERS_PER_FLOOR]; + u8 floorId; + struct TrHillTag tag; + struct TrHillFloor floors[NUM_TRAINER_HILL_FLOORS]; }; -static EWRAM_DATA struct { - u8 floorId; - struct TrainerHillChallenge challenge; - struct TrainerHillFloor floors[NUM_TRAINER_HILL_FLOORS]; -} *sHillData = NULL; - -static EWRAM_DATA struct FloorTrainers *sFloorTrainers = NULL; +static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL; +static EWRAM_DATA struct TrHillRoomTrainers *sRoomTrainers = NULL; EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL; // This file's functions. @@ -67,7 +69,7 @@ static void GetGameSaved(void); static void SetGameSaved(void); static void ClearGameSaved(void); static void GetChallengeWon(void); -static void TrainerHillSetMode(void); +static void TrainerHillSetTag(void); static void SetUpDataStruct(void); static void FreeDataStruct(void); static void TrainerHillDummy(void); @@ -200,12 +202,12 @@ static const u16 *const *const sPrizeListSets[] = static const u16 sEReader_Pal[] = INCBIN_U16("graphics/trainer_hill/ereader.gbapal"); static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; -static const struct TrainerHillChallenge *const sChallengeData[NUM_TRAINER_HILL_MODES] = +static const struct TrHillTag *const sDataPerTag[] = { - [HILL_MODE_NORMAL] = &sChallenge_Normal, - [HILL_MODE_VARIETY] = &sChallenge_Variety, - [HILL_MODE_UNIQUE] = &sChallenge_Unique, - [HILL_MODE_EXPERT] = &sChallenge_Expert, + &sDataTagNormal, + &sDataTagVariety, + &sDataTagUnique, + &sDataTagExpert, }; // Unused. @@ -236,15 +238,15 @@ static void (* const sHillFunctions[])(void) = [TRAINER_HILL_FUNC_SET_GAME_SAVED] = SetGameSaved, [TRAINER_HILL_FUNC_CLEAR_GAME_SAVED] = ClearGameSaved, [TRAINER_HILL_FUNC_GET_WON] = GetChallengeWon, - [TRAINER_HILL_FUNC_SET_MODE] = TrainerHillSetMode, + [TRAINER_HILL_FUNC_SET_TAG] = TrainerHillSetTag, }; -static const u8 *const sModeStrings[NUM_TRAINER_HILL_MODES] = +static const u8 *const sTagMatchStrings[] = { - [HILL_MODE_NORMAL] = gText_NormalTagMatch, - [HILL_MODE_VARIETY] = gText_VarietyTagMatch, - [HILL_MODE_UNIQUE] = gText_UniqueTagMatch, - [HILL_MODE_EXPERT] = gText_ExpertTagMatch, + gText_NormalTagMatch, + gText_VarietyTagMatch, + gText_UniqueTagMatch, + gText_ExpertTagMatch, }; static const struct ObjectEventTemplate sTrainerObjectEventTemplate = @@ -259,17 +261,18 @@ static const struct ObjectEventTemplate sTrainerObjectEventTemplate = static const u32 sNextFloorMapNum[NUM_TRAINER_HILL_FLOORS] = { - [TRAINER_HILL_1F - 1] = MAP_NUM(TRAINER_HILL_2F), - [TRAINER_HILL_2F - 1] = MAP_NUM(TRAINER_HILL_3F), - [TRAINER_HILL_3F - 1] = MAP_NUM(TRAINER_HILL_4F), - [TRAINER_HILL_4F - 1] = MAP_NUM(TRAINER_HILL_ROOF) + MAP_NUM(TRAINER_HILL_2F), + MAP_NUM(TRAINER_HILL_3F), + MAP_NUM(TRAINER_HILL_4F), + MAP_NUM(TRAINER_HILL_ROOF) }; -static const u8 sTrainerPartySlots[HILL_TRAINERS_PER_FLOOR][PARTY_SIZE / 2] = +static const u8 sTrainerPartySlots[][PARTY_SIZE / 2] = { {0, 1, 2}, {3, 4, 5} }; +// code void CallTrainerHillFunction(void) { SetUpDataStruct(); @@ -284,7 +287,7 @@ void ResetTrainerHillResults(void) gSaveBlock2Ptr->frontier.savedGame = 0; gSaveBlock2Ptr->frontier.unk_EF9 = 0; gSaveBlock1Ptr->trainerHill.bestTime = 0; - for (i = 0; i < NUM_TRAINER_HILL_MODES; i++) + for (i = 0; i < 4; i++) SetTimerValue(&gSaveBlock1Ptr->trainerHillTimes[i], HILL_MAX_TIME); } @@ -297,7 +300,7 @@ u8 GetTrainerHillOpponentClass(u16 trainerId) { u8 id = trainerId - 1; - return gFacilityClassToTrainerClass[sFloorTrainers->facilityClass[id]]; + return gFacilityClassToTrainerClass[sRoomTrainers->facilityClass[id]]; } void GetTrainerHillTrainerName(u8 *dst, u16 trainerId) @@ -306,7 +309,7 @@ void GetTrainerHillTrainerName(u8 *dst, u16 trainerId) u8 id = trainerId - 1; for (i = 0; i < HILL_TRAINER_NAME_LENGTH; i++) - dst[i] = sFloorTrainers->name[id][i]; + dst[i] = sRoomTrainers->name[id][i]; } u8 GetTrainerHillTrainerFrontSpriteId(u16 trainerId) @@ -326,14 +329,15 @@ void InitTrainerHillBattleStruct(void) s32 i, j; SetUpDataStruct(); - sFloorTrainers = AllocZeroed(sizeof(*sFloorTrainers)); + sRoomTrainers = AllocZeroed(sizeof(*sRoomTrainers)); - for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) + for (i = 0; i < 2; i++) { for (j = 0; j < HILL_TRAINER_NAME_LENGTH; j++) - sFloorTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j]; - - sFloorTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass; + { + sRoomTrainers->name[i][j] = sHillData->floors[sHillData->floorId].trainers[i].name[j]; + } + sRoomTrainers->facilityClass[i] = sHillData->floors[sHillData->floorId].trainers[i].facilityClass; } SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer); FreeDataStruct(); @@ -341,7 +345,8 @@ void InitTrainerHillBattleStruct(void) void FreeTrainerHillBattleStruct(void) { - TRY_FREE_AND_SET_NULL(sFloorTrainers); + if (sRoomTrainers != NULL) + FREE_AND_SET_NULL(sRoomTrainers); } static void SetUpDataStruct(void) @@ -350,20 +355,15 @@ static void SetUpDataStruct(void) { sHillData = AllocZeroed(sizeof(*sHillData)); sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; - - // This copy depends on the floor data for each challenge being directly after the - // challenge header data, and for the field 'floors' in sHillData to come directly - // after the field 'challenge'. - // e.g. for HILL_MODE_NORMAL, it will copy sChallenge_Normal to sHillData->challenge and - // it will copy sFloors_Normal to sHillData->floors - CpuCopy32(sChallengeData[gSaveBlock1Ptr->trainerHill.mode], &sHillData->challenge, sizeof(sHillData->challenge) + sizeof(sHillData->floors)); + CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); TrainerHillDummy(); } } static void FreeDataStruct(void) { - TRY_FREE_AND_SET_NULL(sHillData); + if (sHillData != NULL) + FREE_AND_SET_NULL(sHillData); } void CopyTrainerHillTrainerText(u8 which, u16 trainerId) @@ -428,7 +428,7 @@ static void GiveChallengePrize(void) { u16 itemId = GetPrizeItemId(); - if (sHillData->challenge.numFloors != NUM_TRAINER_HILL_FLOORS || gSaveBlock1Ptr->trainerHill.receivedPrize) + if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS || gSaveBlock1Ptr->trainerHill.receivedPrize) { gSpecialVar_Result = 2; } @@ -456,7 +456,7 @@ static void CheckFinalTime(void) else if (GetTimerValue(&gSaveBlock1Ptr->trainerHill.bestTime) > gSaveBlock1Ptr->trainerHill.timer) { SetTimerValue(&gSaveBlock1Ptr->trainerHill.bestTime, gSaveBlock1Ptr->trainerHill.timer); - gSaveBlock1Ptr->trainerHillTimes[gSaveBlock1Ptr->trainerHill.mode] = gSaveBlock1Ptr->trainerHill.bestTime; + gSaveBlock1Ptr->trainerHillTimes[gSaveBlock1Ptr->trainerHill.tag] = gSaveBlock1Ptr->trainerHill.bestTime; gSpecialVar_Result = 0; } else @@ -529,9 +529,9 @@ static void BufferChallengeTime(void) static void GetAllFloorsUsed(void) { SetUpDataStruct(); - if (sHillData->challenge.numFloors != NUM_TRAINER_HILL_FLOORS) + if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS) { - ConvertIntToDecimalStringN(gStringVar1, sHillData->challenge.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1); + ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1); gSpecialVar_Result = FALSE; } else @@ -592,9 +592,9 @@ void PrintOnTrainerHillRecordsWindow(void) AddTextPrinterParameterized3(0, FONT_NORMAL, x, 2, sRecordWinColors, TEXT_SKIP_DRAW, gText_TimeBoard); y = 18; - for (i = 0; i < NUM_TRAINER_HILL_MODES; i++) + for (i = 0; i < 4; i++) { - AddTextPrinterParameterized3(0, FONT_NORMAL, 0, y, sRecordWinColors, TEXT_SKIP_DRAW, sModeStrings[i]); + AddTextPrinterParameterized3(0, FONT_NORMAL, 0, y, sRecordWinColors, TEXT_SKIP_DRAW, sTagMatchStrings[i]); y += 15; total = GetTimerValue(&gSaveBlock1Ptr->trainerHillTimes[i]); minutes = total / (60 * 60); @@ -637,23 +637,23 @@ void LoadTrainerHillObjectEventTemplates(void) return; SetUpDataStruct(); - for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) + for (i = 0; i < 2; i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; CpuFill32(0, gSaveBlock1Ptr->objectEventTemplates, sizeof(gSaveBlock1Ptr->objectEventTemplates)); floorId = GetFloorId(); - for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) + for (i = 0; i < 2; i++) { u8 bits; eventTemplates[i] = sTrainerObjectEventTemplate; eventTemplates[i].localId = i + 1; eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass); - eventTemplates[i].x = sHillData->floors[floorId].map.trainerCoords[i] & 0xF; - eventTemplates[i].y = ((sHillData->floors[floorId].map.trainerCoords[i] >> 4) & 0xF) + 5; + eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF; + eventTemplates[i].y = ((sHillData->floors[floorId].display.coords[i] >> 4) & 0xF) + 5; bits = i << 2; - eventTemplates[i].movementType = ((sHillData->floors[floorId].map.trainerDirections >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; - eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].map.trainerRanges >> bits) & 0xF; + eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP; + eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF; eventTemplates[i].script = TrainerHill_EventScript_TrainerBattle; gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1; } @@ -669,14 +669,14 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) return TRUE; } -static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floorWidth is always 16 +static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 stride) // stride is always 16 { bool8 impassable; u16 metatile; u16 elevation; - impassable = (sHillData->floors[floorId].map.collisionData[y] >> (15 - x) & 1); - metatile = sHillData->floors[floorId].map.metatileData[floorWidth * y + x] + NUM_METATILES_IN_PRIMARY; + impassable = (sHillData->floors[floorId].display.collisionData[y] >> (15 - x) & 1); + metatile = sHillData->floors[floorId].display.metatileData[stride * y + x] + NUM_METATILES_IN_PRIMARY; elevation = 3 << MAPGRID_ELEVATION_SHIFT; return ((impassable << MAPGRID_COLLISION_SHIFT) & MAPGRID_COLLISION_MASK) | elevation | (metatile & MAPGRID_METATILE_ID_MASK); @@ -684,7 +684,7 @@ static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floo void GenerateTrainerHillFloorLayout(u16 *mapArg) { - s32 y, x; + s32 i, j; u16 *src, *dst; u8 mapId = GetCurrentTrainerHillMapId(); @@ -705,25 +705,24 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg) mapId = GetFloorId(); src = gMapHeader.mapLayout->map; gBackupMapLayout.map = mapArg; - // Dimensions include border area loaded beyond map - gBackupMapLayout.width = HILL_FLOOR_WIDTH + 15; - gBackupMapLayout.height = HILL_FLOOR_HEIGHT + 14; + gBackupMapLayout.width = 31; + gBackupMapLayout.height = 35; dst = mapArg + 224; // First 5 rows of the map (Entrance / Exit) are always the same - for (y = 0; y < HILL_FLOOR_HEIGHT_MARGIN; y++) + for (i = 0; i < 5; i++) { - for (x = 0; x < HILL_FLOOR_WIDTH; x++) - dst[x] = src[x]; + for (j = 0; j < 16; j++) + dst[j] = src[j]; dst += 31; src += 16; } // Load the 16x16 floor-specific layout - for (y = 0; y < HILL_FLOOR_HEIGHT_MAIN; y++) + for (i = 0; i < 16; i++) { - for (x = 0; x < HILL_FLOOR_WIDTH; x++) - dst[x] = GetMetatileForFloor(mapId, x, y, HILL_FLOOR_WIDTH); + for (j = 0; j < 16; j++) + dst[j] = GetMetatileForFloor(mapId, j, i, 16); dst += 31; } @@ -813,8 +812,8 @@ u16 LocalIdToHillTrainerId(u8 localId) bool8 GetHillTrainerFlag(u8 objectEventId) { - u32 trainerIndexStart = GetFloorId() * HILL_TRAINERS_PER_FLOOR; - u8 bitId = gObjectEvents[objectEventId].localId - 1 + trainerIndexStart; + u32 floorId = GetFloorId() * 2; + u8 bitId = gObjectEvents[objectEventId].localId - 1 + floorId; return gSaveBlock2Ptr->frontier.trainerFlags & gBitTable[bitId]; } @@ -822,24 +821,24 @@ bool8 GetHillTrainerFlag(u8 objectEventId) void SetHillTrainerFlag(void) { u8 i; - u8 trainerIndexStart = GetFloorId() * HILL_TRAINERS_PER_FLOOR; + u8 floorId = GetFloorId() * 2; - for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) + for (i = 0; i < 2; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i]; break; } } if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - for (i = 0; i < HILL_TRAINERS_PER_FLOOR; i++) + for (i = 0; i < 2; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i]; break; } } @@ -862,14 +861,14 @@ static void CreateNPCTrainerHillParty(u16 trainerId, u8 firstMonId) u8 trId, level; s32 i, floorId, partySlot; - if (trainerId == 0 || trainerId > HILL_TRAINERS_PER_FLOOR) + if (trainerId == 0 || trainerId > 2) return; trId = trainerId - 1; SetUpDataStruct(); level = GetHighestLevelInPlayerParty(); floorId = GetFloorId(); - for (i = firstMonId, partySlot = 0; i < firstMonId + PARTY_SIZE / 2; i++, partySlot++) + for (i = firstMonId, partySlot = 0; i < firstMonId + 3; i++, partySlot++) { u8 id = sTrainerPartySlots[trId][partySlot]; struct Pokemon *mon = &gEnemyParty[i]; @@ -891,7 +890,7 @@ void FillHillTrainersParties(void) { ZeroEnemyPartyMons(); CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0); - CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, PARTY_SIZE / 2); + CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, 3); } // This function is unused, but my best guess is @@ -936,7 +935,7 @@ u8 GetNumFloorsInTrainerHillChallenge(void) u8 floors; SetUpDataStruct(); - floors = sHillData->challenge.numFloors; + floors = sHillData->tag.numFloors; FreeDataStruct(); return floors; @@ -990,20 +989,16 @@ static void GetChallengeWon(void) gSpecialVar_Result = TRUE; } -static void TrainerHillSetMode(void) +static void TrainerHillSetTag(void) { - gSaveBlock1Ptr->trainerHill.mode = gSpecialVar_0x8005; + gSaveBlock1Ptr->trainerHill.tag = gSpecialVar_0x8005; gSaveBlock1Ptr->trainerHill.bestTime = gSaveBlock1Ptr->trainerHillTimes[gSpecialVar_0x8005]; } -// Determines which prize list to use from the set of prize lists. -static u8 GetPrizeListId(bool8 allowTMs) +static u8 GetPrizeListId(bool8 maxTrainers) { u8 prizeListId, i, modBy; - // The initial selection depends on the trainer numbers for the completed challenge. - // These don't change with the available challenge modes, so Normal/Unique will always - // have a prizeListId of 8, and Variety/Expert will have a prizeListId of 24. prizeListId = 0; for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++) { @@ -1011,10 +1006,8 @@ static u8 GetPrizeListId(bool8 allowTMs) prizeListId ^= sHillData->floors[i].trainerNum2 & 0x1F; } - // In practice, the conditional below is always true. - // The 2nd half of the lists in both sets of lists all have a TM as the "grand prize", while the 1st half do not, - // so taking the mod of the (total / 2) ensures that a prize list without a TM will be used. - if (allowTMs) + // Not possible to win TMs with fewer than 8 trainers + if (maxTrainers) modBy = NUM_TRAINER_HILL_PRIZE_LISTS; else modBy = NUM_TRAINER_HILL_PRIZE_LISTS / 2; @@ -1027,64 +1020,38 @@ static u16 GetPrizeItemId(void) { u8 i; const u16 *prizeList; - s32 trainerNumSum = 0, prizeListSetId, minutes, id; + s32 var = 0, prizeListSetId, minutes, id; - // First determine which set of prize lists to use. The sets of lists only differ in - // what TMs they can offer as the "grand prize" for a time under 12 minutes. - // Which set of lists gets used is based on the sum of all the trainer numbers for that - // challenge. These don't change with the available challenge modes, so Normal will always - // have a prizeListSetId of 0, and Unique/Variety/Expert will have a prizeListSetId of 1. for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++) { - trainerNumSum += sHillData->floors[i].trainerNum1; - trainerNumSum += sHillData->floors[i].trainerNum2; + var += sHillData->floors[i].trainerNum1; + var += sHillData->floors[i].trainerNum2; } - prizeListSetId = trainerNumSum / 256; - prizeListSetId %= (int)ARRAY_COUNT(sPrizeListSets); - // Now get which prize list to use from the set. See GetPrizeListId for details. - // The below conditional will always be true, because a Trainer Hill challenge can't be entered - // until the player has entered the Hall of Fame (FLAG_SYS_GAME_CLEAR is set) and because all - // of the available challenge modes have the full 8 trainers (NUM_TRAINER_HILL_TRAINERS). - if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->challenge.numTrainers == NUM_TRAINER_HILL_TRAINERS) + prizeListSetId = var / 256; + prizeListSetId %= 2; + if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->tag.numTrainers == NUM_TRAINER_HILL_TRAINERS) i = GetPrizeListId(TRUE); else i = GetPrizeListId(FALSE); - // 1 is added to Expert mode's prize list selection because otherwise it has the same prizes as Variety - if (gSaveBlock1Ptr->trainerHill.mode == HILL_MODE_EXPERT) + if (gSaveBlock1Ptr->trainerHill.tag == HILL_TAG_EXPERT) i = (i + 1) % NUM_TRAINER_HILL_PRIZE_LISTS; - // After the above (non-random) calculations, the following are the possible prize list selections: - // sPrizeListSets[0][8] (Normal) - // sPrizeListSets[1][4] (Variety) - // sPrizeListSets[1][8] (Unique) - // sPrizeListSets[1][5] (Expert) prizeList = sPrizeListSets[prizeListSetId][i]; - - // Which prize is given from the list depends on the time scored. - // The prize for any time after 12 minutes is the same in every list. - // The prizes for a time under 12 minutes are: - // - ITEM_TM11_SUNNY_DAY (Normal) - // - ITEM_ELIXIR (Variety) - // - ITEM_TM19_GIGA_DRAIN (Unique) - // - ITEM_TM31_BRICK_BREAK (Expert) - // As an additional note, if players were allowed to enter a Trainer Hill challenge before - // entering the Hall of Fame, there would be 1 additional prize possibility (ITEM_MAX_ETHER) - // as Normal / Unique modes would use sPrizeListSets[0][3] / sPrizeListSets[1][3] respectively. minutes = (signed)(gSaveBlock1Ptr->trainerHill.timer) / (60 * 60); if (minutes < 12) - id = 0; // Depends on list + id = 0; else if (minutes < 13) - id = 1; // ITEM_ETHER + id = 1; else if (minutes < 14) - id = 2; // ITEM_MAX_POTION + id = 2; else if (minutes < 16) - id = 3; // ITEM_REVIVE + id = 3; else if (minutes < 18) - id = 4; // ITEM_FLUFFY_TAIL + id = 4; else - id = 5; // ITEM_GREAT_BALL + id = 5; return prizeList[id]; } diff --git a/src/tv.c b/src/tv.c index 2f3d17ee2..b9d064026 100644 --- a/src/tv.c +++ b/src/tv.c @@ -373,21 +373,21 @@ static const u8 *const sTV3CheersForPokeblocksTextGroup[] = { }; static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = { - [BRAVOTOWER_STATE_INTRO] = BravoTrainerBattleTower_Text_Intro, - [BRAVOTOWER_STATE_NEW_RECORD] = BravoTrainerBattleTower_Text_NewRecord, - [BRAVOTOWER_STATE_LOST] = BravoTrainerBattleTower_Text_Lost, - [BRAVOTOWER_STATE_WON] = BravoTrainerBattleTower_Text_Won, - [BRAVOTOWER_STATE_LOST_FINAL] = BravoTrainerBattleTower_Text_LostFinal, - [BRAVOTOWER_STATE_SATISFIED] = BravoTrainerBattleTower_Text_Satisfied, - [BRAVOTOWER_STATE_UNSATISFIED] = BravoTrainerBattleTower_Text_Unsatisfied, - [BRAVOTOWER_STATE_UNUSED_1] = BravoTrainerBattleTower_Text_None1, - [BRAVOTOWER_STATE_UNUSED_2] = BravoTrainerBattleTower_Text_None2, - [BRAVOTOWER_STATE_UNUSED_3] = BravoTrainerBattleTower_Text_None3, - [BRAVOTOWER_STATE_UNUSED_4] = BravoTrainerBattleTower_Text_None4, - [BRAVOTOWER_STATE_RESPONSE] = BravoTrainerBattleTower_Text_Response, - [BRAVOTOWER_STATE_RESPONSE_SATISFIED] = BravoTrainerBattleTower_Text_ResponseSatisfied, - [BRAVOTOWER_STATE_RESPONSE_UNSATISFIED] = BravoTrainerBattleTower_Text_ResponseUnsatisfied, - [BRAVOTOWER_STATE_OUTRO] = BravoTrainerBattleTower_Text_Outro + gTVBravoTrainerBattleTowerText00, + gTVBravoTrainerBattleTowerText01, + gTVBravoTrainerBattleTowerText02, + gTVBravoTrainerBattleTowerText03, + gTVBravoTrainerBattleTowerText04, + gTVBravoTrainerBattleTowerText05, + gTVBravoTrainerBattleTowerText06, + gTVBravoTrainerBattleTowerText07, + gTVBravoTrainerBattleTowerText08, + gTVBravoTrainerBattleTowerText09, + gTVBravoTrainerBattleTowerText10, + gTVBravoTrainerBattleTowerText11, + gTVBravoTrainerBattleTowerText12, + gTVBravoTrainerBattleTowerText13, + gTVBravoTrainerBattleTowerText14 }; static const u8 *const sTVContestLiveUpdatesTextGroup[] = { @@ -723,7 +723,7 @@ static const u8 *const sTVInSearchOfTrainersTextGroup[] = { // Secret Base Secrets TV Show states for actions that can be taken in a secret base // The flags that determine whether or not the action was taken are commented -static const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] = +const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] = { SBSECRETS_STATE_USED_CHAIR, // SECRET_BASE_USED_CHAIR SBSECRETS_STATE_USED_BALLOON, // SECRET_BASE_USED_BALLOON @@ -1449,7 +1449,7 @@ static void InterviewAfter_BravoTrainerPokemonProfile(void) } } -void BravoTrainerPokemonProfile_BeforeInterview1(u16 move) +void BravoTrainerPokemonProfile_BeforeInterview1(u16 a0) { TVShow *show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX]; InterviewBefore_BravoTrainerPkmnProfile(); @@ -1457,7 +1457,7 @@ void BravoTrainerPokemonProfile_BeforeInterview1(u16 move) if (sCurTVShowSlot != -1) { DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX); - show->bravoTrainer.move = move; + show->bravoTrainer.move = a0; show->bravoTrainer.kind = TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE; } } @@ -1490,9 +1490,9 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0); show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.towerBattleOutcome; if (gSaveBlock2Ptr->frontier.towerLvlMode == FRONTIER_LVL_50) - show->bravoTrainerTower.btLevel = FRONTIER_MAX_LEVEL_50; + show->bravoTrainerTower.btLevel = 50; else - show->bravoTrainerTower.btLevel = FRONTIER_MAX_LEVEL_OPEN; + show->bravoTrainerTower.btLevel = 100; show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004; StorePlayerIdInNormalShow(show); show->bravoTrainerTower.language = gGameLanguage; @@ -4371,9 +4371,6 @@ static void DoTVShowBravoTrainerPokemonProfile(void) ShowFieldMessage(sTVBravoTrainerTextGroup[state]); } -// This is the TV show triggered by accepting the reporter's interview in the lobby of Battle Tower. -// The reporter had asked the player if they were satisfied or not with the challenge, and then asked -// for a one word Easy Chat description of their feelings about the challenge. static void DoTVShowBravoTrainerBattleTower(void) { TVShow *show; @@ -4384,83 +4381,85 @@ static void DoTVShowBravoTrainerBattleTower(void) state = sTVShowState; switch(state) { - case BRAVOTOWER_STATE_INTRO: + case 0: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); - if (show->bravoTrainerTower.numFights >= FRONTIER_STAGES_PER_CHALLENGE) - sTVShowState = BRAVOTOWER_STATE_NEW_RECORD; + if (show->bravoTrainerTower.numFights >= 7) + sTVShowState = 1; else - sTVShowState = BRAVOTOWER_STATE_LOST; + sTVShowState = 2; break; - case BRAVOTOWER_STATE_NEW_RECORD: - // The TV show states a "new record" was achieved as long as all the battles in the challenge were attempted, - // regardless of any previous records or whether the final battle was won or lost. - if (show->bravoTrainerTower.btLevel == FRONTIER_MAX_LEVEL_50) + case 1: + if (show->bravoTrainerTower.btLevel == 50) + { StringCopy(gStringVar1, gText_Lv50); + } else + { StringCopy(gStringVar1, gText_OpenLevel); + } ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights); if (show->bravoTrainerTower.wonTheChallenge == TRUE) - sTVShowState = BRAVOTOWER_STATE_WON; + sTVShowState = 3; else - sTVShowState = BRAVOTOWER_STATE_LOST_FINAL; + sTVShowState = 4; break; - case BRAVOTOWER_STATE_LOST: + case 2: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); ConvertIntToDecimalString(1, show->bravoTrainerTower.numFights + 1); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = BRAVOTOWER_STATE_SATISFIED; + sTVShowState = 5; else - sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; + sTVShowState = 6; break; - case BRAVOTOWER_STATE_WON: + case 3: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = BRAVOTOWER_STATE_SATISFIED; + sTVShowState = 5; else - sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; + sTVShowState = 6; break; - case BRAVOTOWER_STATE_LOST_FINAL: + case 4: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.defeatedSpecies]); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = BRAVOTOWER_STATE_SATISFIED; + sTVShowState = 5; else - sTVShowState = BRAVOTOWER_STATE_UNSATISFIED; + sTVShowState = 6; break; - case BRAVOTOWER_STATE_SATISFIED: + case 5: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); - sTVShowState = BRAVOTOWER_STATE_RESPONSE; + sTVShowState = 11; break; - case BRAVOTOWER_STATE_UNSATISFIED: + case 6: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); - sTVShowState = BRAVOTOWER_STATE_RESPONSE; + sTVShowState = 11; break; - case BRAVOTOWER_STATE_UNUSED_1: - sTVShowState = BRAVOTOWER_STATE_RESPONSE; + case 7: + sTVShowState = 11; break; - case BRAVOTOWER_STATE_UNUSED_2: - case BRAVOTOWER_STATE_UNUSED_3: - case BRAVOTOWER_STATE_UNUSED_4: + case 8: + case 9: + case 10: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); - sTVShowState = BRAVOTOWER_STATE_RESPONSE; + sTVShowState = 11; break; - case BRAVOTOWER_STATE_RESPONSE: + case 11: CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]); if (show->bravoTrainerTower.interviewResponse == 0) - sTVShowState = BRAVOTOWER_STATE_RESPONSE_SATISFIED; + sTVShowState = 12; else - sTVShowState = BRAVOTOWER_STATE_RESPONSE_UNSATISFIED; + sTVShowState = 13; break; - case BRAVOTOWER_STATE_RESPONSE_SATISFIED: - case BRAVOTOWER_STATE_RESPONSE_UNSATISFIED: + case 12: + case 13: CopyEasyChatWord(gStringVar1, show->bravoTrainerTower.words[0]); TVShowConvertInternationalString(gStringVar2, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); TVShowConvertInternationalString(gStringVar3, show->bravoTrainerTower.pokemonName, show->bravoTrainerTower.pokemonNameLanguage); - sTVShowState = BRAVOTOWER_STATE_OUTRO; + sTVShowState = 14; break; - case BRAVOTOWER_STATE_OUTRO: + case 14: TVShowConvertInternationalString(gStringVar1, show->bravoTrainerTower.trainerName, show->bravoTrainerTower.language); StringCopy(gStringVar2, gSpeciesNames[show->bravoTrainerTower.species]); TVShowDone(); diff --git a/src/union_room.c b/src/union_room.c index 05b41a088..9a743dbab 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4318,7 +4318,7 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) for (i = 0; i < gPlayerPartyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= UNION_ROOM_MAX_LEVEL + if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) count++; } diff --git a/src/union_room_chat.c b/src/union_room_chat.c index f8513b9f4..9890bc1f8 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -2160,7 +2160,8 @@ static bool32 IsDisplaySubtask0Active(void) static void FreeDisplay(void) { FreeSprites(); - TRY_FREE_AND_SET_NULL(sDisplay); + if (sDisplay) + FREE_AND_SET_NULL(sDisplay); FreeAllWindowBuffers(); gScanlineEffect.state = 3; diff --git a/tools/gbagfx/Makefile b/tools/gbagfx/Makefile index 8728fa8d0..b4244aa8d 100644 --- a/tools/gbagfx/Makefile +++ b/tools/gbagfx/Makefile @@ -1,10 +1,8 @@ CC = gcc CFLAGS = -Wall -Wextra -Werror -Wno-sign-compare -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK -CFLAGS += $(shell pkg-config --cflags libpng) LIBS = -lpng -lz -LDFLAGS += $(shell pkg-config --libs-only-L libpng) SRCS = main.c convert_png.c gfx.c jasc_pal.c lz.c rl.c util.c font.c huff.c diff --git a/tools/mid2agb/agb.cpp b/tools/mid2agb/agb.cpp index caa6f0ecd..d4d79f133 100644 --- a/tools/mid2agb/agb.cpp +++ b/tools/mid2agb/agb.cpp @@ -18,7 +18,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -#include #include #include #include @@ -504,7 +503,7 @@ void PrintAgbTrack(std::vector& events) ResetTrackVars(); break; case EventType::Tempo: - PrintByte("TEMPO , %u*%s_tbs/2", static_cast(round(60000000.0f / static_cast(event.param2))), g_asmLabel.c_str()); + PrintByte("TEMPO , %u*%s_tbs/2", 60000000 / event.param2, g_asmLabel.c_str()); PrintWait(event.time); break; case EventType::InstrumentChange: diff --git a/tools/rsfont/Makefile b/tools/rsfont/Makefile index 92e44b545..0bc88a42b 100644 --- a/tools/rsfont/Makefile +++ b/tools/rsfont/Makefile @@ -1,10 +1,8 @@ CC ?= gcc CFLAGS = -Wall -Wextra -Werror -std=c11 -O2 -DPNG_SKIP_SETJMP_CHECK -CFLAGS += $(shell pkg-config --cflags libpng) LIBS = -lpng -lz -LDFLAGS += $(shell pkg-config --libs-only-L libpng) SRCS = main.c convert_png.c util.c font.c