mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-25 23:11:15 +02:00
1905261c5b
CLOSES #1483, CLOSES #1610, CLOSES #1615, CLOSES #1646, CLOSES #1649, CLOSES #1651, CLOSES #1653, CLOSES #1656, CLOSES #1683, CLOSES #1685, CLOSES #1686, CLOSES #1687, CLOSES #1688, CLOSES #1689, CLOSES #1690, CLOSES #1693, CLOSES #1694, CLOSES #1695, CLOSES #1696, CLOSES #1702, CLOSES #1704, CLOSES #1705, CLOSES #1706, CLOSES #1707, CLOSES #1708, CLOSES #1710, CLOSES #1711, CLOSES #1712, CLOSES #1713, CLOSES #1716, CLOSES #1717, CLOSES #1718, CLOSES #1719, CLOSES #1720, CLOSES #1721, CLOSES #1725, CLOSES #1732, CLOSES #1745, CLOSES #1748, CLOSES #1749, CLOSES #1751, CLOSES #1754
150 lines
7.1 KiB
Python
150 lines
7.1 KiB
Python
"""REQUIRED_SYMBOLS delta between pokegold.sym and pokecrystal.sym.
|
|
|
|
make_gold_manifest.REQUIRED_SYMBOLS names 341 symbols by hand. 25 of them do
|
|
not exist in pokecrystal.sym: Crystal renamed the credits mons, split the
|
|
trainer-card / Pokegear / pack-pals blocks by player gender, split the two
|
|
FontsExtra tiles apart, and replaced the whole Gold/Silver intro movie and
|
|
title screen. DROP_SYMBOLS lists those 25 and ADD_SYMBOLS the verified
|
|
replacements; the intro, title and splash names come from
|
|
crystal_movie_symbols.MOVIE_SYMBOLS (that file is the pinned CT-9 list and is
|
|
not edited here). MOBILE_SYMBOLS is the Mobile System GB art, which no Gold
|
|
or Silver ROM carries at all.
|
|
|
|
Every name below was checked against ../pokecrystal-symbols/pokecrystal.sym.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from crystal_movie_symbols import MOVIE_SYMBOLS
|
|
|
|
# Gold-only names, grouped by what replaces them.
|
|
DROP_SYMBOLS = frozenset({
|
|
# engine/movie/title.asm:364-373 -- no tilemap; DrawTitleGraphic composes.
|
|
"TitleScreenGFX1", "TitleScreenGFX2", "TitleScreenGFX3",
|
|
"TitleScreenGFX4", "TitleScreenTilemap",
|
|
# engine/movie/credits.asm:610-613
|
|
"CreditsBellossomGFX", "CreditsTogepiGFX",
|
|
"CreditsElekidGFX", "CreditsSentretGFX",
|
|
# gfx/misc.asm:44
|
|
"GameFreakLogoStarsGFX",
|
|
# engine/gfx/player_gfx.asm:114,117,120,203,206
|
|
"ChrisPicAndTrainerCardGFX",
|
|
# engine/gfx/color.asm:1330,1333
|
|
"PokegearPals",
|
|
# engine/gfx/cgb_layouts.asm:818,821
|
|
"_CGB_PackPals.PackPals",
|
|
# gfx/font.asm:51,63
|
|
"FontsExtra_SolidBlackAndUpArrowGFX",
|
|
# engine/movie/intro.asm:1 -- CrystalIntro is a different program.
|
|
"Intro_WaterGFX1", "Intro_WaterTilemap", "Intro_WaterMeta",
|
|
"Intro_WaterGFX2",
|
|
"Intro_GrassGFX1", "Intro_GrassTilemap", "Intro_GrassMeta",
|
|
"Intro_GrassGFX2",
|
|
"Intro_FireGFX1", "Intro_FireGFX2", "Intro_FireGFX3",
|
|
})
|
|
|
|
# Crystal replacements, minus the intro/title/splash ones MOVIE_SYMBOLS owns.
|
|
ADD_SYMBOLS = frozenset({
|
|
# engine/movie/credits.asm:610-613
|
|
"CreditsPichuGFX", "CreditsSmoochumGFX",
|
|
"CreditsDittoGFX", "CreditsIgglybuffGFX",
|
|
# engine/gfx/player_gfx.asm:114,117,120,203,206
|
|
"ChrisCardPic", "KrisCardPic", "TrainerCardGFX", "ChrisPic", "KrisPic",
|
|
# engine/gfx/color.asm:1330,1333
|
|
"MalePokegearPals", "FemalePokegearPals",
|
|
# engine/gfx/cgb_layouts.asm:818,821
|
|
"_CGB_PackPals.ChrisPackPals", "_CGB_PackPals.KrisPackPals",
|
|
# engine/events/fishing_gfx.asm:41 -- Kris' half of the fishing pose.
|
|
"KrisFishingGFX",
|
|
# gfx/font.asm:51,63 -- black is 1bpp at tile $60, up_arrow 2bpp at $61.
|
|
"FontsExtra_SolidBlackGFX", "FontsExtra2_UpArrowGFX",
|
|
# main.asm:425-448 -- the pic-animation pointer tables, absent from Gold.
|
|
"AnimationPointers", "AnimationIdlePointers",
|
|
"BitmasksPointers", "FramesPointers",
|
|
"UnownAnimationPointers", "UnownAnimationIdlePointers",
|
|
"UnownBitmasksPointers", "UnownFramesPointers",
|
|
# engine/tilesets/tileset_anims.asm -- the five Crystal-only anim steps.
|
|
"AnimateFountainTile",
|
|
"ForestTreeLeftAnimation", "ForestTreeRightAnimation",
|
|
"ForestTreeLeftAnimation2", "ForestTreeRightAnimation2",
|
|
# engine/overworld/wildmons.asm:493-524 -- Raikou and Entei only.
|
|
"InitRoamMons",
|
|
# data/events/unown_walls.asm:7,15 -- the four Ruins of Alph wall words
|
|
# and the menu box each one is drawn in.
|
|
"UnownWalls", "MenuHeaders_UnownWalls",
|
|
# data/battle_tower/classes.asm:6 and data/battle_tower/parties.asm:1 --
|
|
# the Battle Tower roster, which no Gold or Silver ROM carries; the
|
|
# sprites table is engine/events/battle_tower/battle_tower.asm:1578
|
|
# INCLUDE "data/trainers/sprites.asm".
|
|
"BattleTowerTrainers", "BattleTowerMons", "BTTrainerClassSprites",
|
|
# data/battle_tower/unknown.asm:1, copied into wBT_OTTrainerData whole.
|
|
"BattleTowerTrainerData",
|
|
# engine/events/battle_tower/load_trainer.asm:24,112 -- the two rejection
|
|
# loops whose `maskbits` / `cp` pair carries the sample ceiling. Crystal
|
|
# 1.0 and 1.1 differ only in the trainer one (:29-37), so it is read out
|
|
# of the cart rather than written down.
|
|
"LoadOpponentTrainerAndPokemon.resample",
|
|
"LoadRandomBattleTowerMon.resample",
|
|
})
|
|
|
|
# Mobile System GB art, all of it present in the international v1.0 object:
|
|
# mobile/*.asm assembles there, only the menus that reach it are Japan-only.
|
|
MOBILE_SYMBOLS = frozenset({
|
|
# mobile/mobile_5c.asm:290,293,296,753,756-771,866,874,878
|
|
"AsciiFontGFX", "PichuAnimatedMobileGFX", "ElectroBallMobileGFX",
|
|
"PichuBorderMobileGFX", "Stadium2N64GFX", "Stadium2N64Tilemap",
|
|
"Stadium2N64Attrmap", "PasswordTopTilemap", "PasswordBottomTilemap",
|
|
"PasswordShiftTilemap", "ChooseMobileCenterTilemap",
|
|
"MobilePasswordAttrmap", "ChooseMobileCenterAttrmap",
|
|
"MobilePasswordPalettes",
|
|
# mobile/mobile_5e.asm:2,5,8,11,14,18,925,928,931,934,941
|
|
"MobileCardGFX", "ChrisSilhouetteGFX", "KrisSilhouetteGFX",
|
|
"MobileCard2GFX", "CardLargeSpriteAndFolderGFX", "CardSpriteGFX",
|
|
"DialpadTilemap", "DialpadAttrmap", "DialpadGFX", "DialpadCursorGFX",
|
|
"MobileCardListGFX",
|
|
# mobile/mobile_5f.asm:84,87,91,3528,3534,3537
|
|
"HaveWantGFX", "MobileSelectGFX", "HaveWantMap", "PokemonNewsGFX",
|
|
"PokemonNewsTileAttrmap", "PokemonNewsPalettes",
|
|
# mobile/mobile_5b.asm:206,209,212,215,758
|
|
"MobileSystemSplashScreen_InitGFX.Tiles",
|
|
"MobileSystemSplashScreen_InitGFX.Tilemap",
|
|
"MobileSystemSplashScreen_InitGFX.Attrmap",
|
|
"MobileSplashScreenPalettes", "MobileAdapterCheckGFX",
|
|
# mobile/mobile_42.asm:1733-1763 and mobile/mobile_40.asm:6921,6924
|
|
"MobileTradeSpritesGFX", "MobileTradeGFX", "MobileTradeTilemapLZ",
|
|
"MobileTradeAttrmapLZ", "MobileCable1GFX", "MobileCable2GFX",
|
|
"UnusedMobilePulsePalettes", "MobileTradeBGPalettes",
|
|
"MobileTradeOB1Palettes", "MobileTradeOB2Palettes",
|
|
"MobileAdapterPalettes", "MobileTradeLightsGFX",
|
|
"MobileTradeLightsPalettes",
|
|
# mobile/mobile_45_2.asm:1362,1365,1368 and
|
|
# mobile/mobile_45_sprite_engine.asm:311
|
|
"PichuBorderMobileOBPalettes", "PichuBorderMobileBGPalettes",
|
|
"PichuBorderMobileTilemapAttrmap", "MobileDialingGFX",
|
|
# mobile/mobile_12.asm:1007,1010, mobile/mobile_22.asm:518,
|
|
# mobile/mobile_41.asm:1115, mobile/fixed_words.asm:3231
|
|
"MobileUpArrowGFX", "MobileDownArrowGFX", "EZChatCursorGFX",
|
|
"MobileDialingFrameGFX", "SelectStartGFX",
|
|
# engine/menus/main_menu.asm:24 and gfx/font.asm:58
|
|
"MobileMenuGFX", "MobilePhoneTilesGFX",
|
|
# engine/link/mystery_gift.asm:1606,1920,1923
|
|
"MysteryGiftGFX", "CardTradeGFX", "CardTradeSpriteGFX",
|
|
})
|
|
|
|
|
|
def crystal_required(gold_required):
|
|
"""Apply the delta to make_gold_manifest.REQUIRED_SYMBOLS."""
|
|
gold = frozenset(gold_required)
|
|
stale = sorted(DROP_SYMBOLS - gold)
|
|
if stale:
|
|
raise SystemExit(
|
|
"crystal_symbol_deltas: DROP_SYMBOLS names that Gold no longer "
|
|
"requires: " + ", ".join(stale))
|
|
extra = ADD_SYMBOLS | MOBILE_SYMBOLS | set(MOVIE_SYMBOLS)
|
|
collisions = sorted(extra & gold)
|
|
if collisions:
|
|
raise SystemExit(
|
|
"crystal_symbol_deltas: ADD names already in the Gold set: "
|
|
+ ", ".join(collisions))
|
|
return frozenset((gold - DROP_SYMBOLS) | extra)
|