Commit Graph

2195 Commits

Author SHA1 Message Date
github-actions[bot] 7690db37ca chore(ios): update app-repo.json [skip ci] 2026-10-07 19:08:27 +00:00
bryanthaboi 7ac15ebbf7 Merge pull request #2749 from bryanthaboi/dev
asdf
v0.3.61
2026-10-07 14:54:20 -04:00
bryanthaboi 3f834580dd Merge branch 'dev' of https://github.com/bryanthaboi/gen1recomp into dev 2026-10-07 14:31:40 -04:00
bryanthaboi e69b408744 union for all 2026-10-07 14:31:38 -04:00
bryanthaboi 7eb96ddb4d Merge pull request #2745 from thibautbus/fix/rs-secret-base-owner-name
Name a Ruby or Sapphire secret base from the cart's own row
2026-10-07 12:11:34 -04:00
bryanthaboi de6c5f5b89 Merge pull request #2747 from thibautbus/feat/metric-pokedex-units
Print Pokédex heights and weights in metric units when a mod gives them
2026-10-07 12:11:15 -04:00
HimioneGranger 0937e3f24b Add native Black/White battle-sprite importer with complete animations (#2598)
* Add native Black and White battle sprite importer and shared provider

* Reduce Gen 5 import scheduling and duplicate atlas work

* Play long Gen 5 idle animations from independent part tracks

* Skip part tracks when a late frame cannot be composed

* Fix importer picker lifecycle, Xbox formats, and CI coverage

* Fix Linux Gen 5 test discovery and picker regression checks

* Preserve original Gen 5 sprite resolution in provider API 2

* Trim importer comments and documentation
2026-10-07 12:10:37 -04:00
thibautbus 1caddb54e4 Print the Gen 3 Pokédex heights and weights in metric units
FireRed/LeafGreen's, Ruby/Sapphire's and Emerald's Pokédex pages print a species' height in feet and inches and its weight in pounds, converted from the cart's decimetres and hectograms; the localized carts print metres and kilograms. A mod can now give a Gen 3 species its metric height and weight the way it can on Red/Blue and Gold/Silver: the Gen 3 dexEntry schema takes heightM and weightKg, and a patch carries them into the dex table Pokemon.dexEntry reads.

src/core/game3/pokedex_units.lua tells whether a species has them, without loading the dex table itself, and formats them with one decimal and a comma before Strings("m") and Strings("kg"). FireRed/LeafGreen's entry page uses them for a seen or caught species, resolved once per species and caught state rather than on every draw; Ruby/Sapphire's and Emerald's entry pages use them for a caught species, each aligning the digits as its imperial weight does (two spaces per missing digit on Ruby/Sapphire's native page, as the cart's metric printer shifts the number by a digit's width, pokeruby src/pokedex.c:4300; {UNK_SPACER} on Emerald's), and keep the cart's unknown rows for a seen one.
2026-10-07 17:29:17 +02:00
thibautbus 722c2fc45e Print Gold and Silver's Pokédex heights and weights in metric units
The #DEX page prints the US cart's height in feet and inches, with the foot and inch tiles, and its weight in pounds; the localized carts print metres and kilograms ("TAI  ???m", "PDS  ???kg"). A mod can now give a species its metric height and weight the way it can on Red/Blue: mod.content.pokemon:patch(id, { dexEntry = { heightM = ..., weightKg = ... } }). src/core/gen2/PokedexText.lua copies them onto the #DEX entry beside the cart's own values, and the page then prints them with one decimal and a comma, right-aligned before the "m" and "kg" labels, "???" until the species is caught; the printout draws the same body, and the plain page drawn without the cache's dex sheet prints the metric values as it prints the imperial ones. The Gen 2 pokemon schema declares the dexEntry fields the #DEX page reads.

The Pokédex resolves the "m" and "kg" labels when it opens (PokedexMenu.new) rather than on every frame.
2026-10-07 17:29:17 +02:00
thibautbus 20a0fc65cd Print the metric unknown height and weight on a seen Red/Blue entry
The Pokédex page prints a species' dexEntry.heightM and weightKg when it carries them ("GR. %.1fm", "GEW. %.1fkg"), the way the localized carts print metres and kilograms. An entry seen but not caught printed nothing there, where the imperial fields print their question marks (engine/menus/pokedex.asm:449-450) and the localized carts their own mask ("GR.  ???m", "GEW  ???kg"). It now prints "GR. ???m" and "GEW. ???kg", which a translation mod words like the two formats.

The entry page resolves both masks when it opens (DexEntryMenu.new) rather than on every frame; the printer's one-off render still looks them up itself.
2026-10-07 16:04:25 +02:00
github-actions[bot] 19929cf471 chore(ios): update app-repo.json [skip ci] 2026-10-07 13:58:51 +00:00
thibautbus f7b9006a8c Name a Ruby or Sapphire secret base from the cart's own row
A secret base is named after its owner: the owner's name, then the row the US carts append ("'s BASE"): Emerald's gText_ApostropheSBase, which Ruby and Sapphire's text aliases point at their gOtherText_PlayersBase. SB.name fills the STR_VAR_1 of Emerald's European rows, but Ruby and Sapphire's European rows name the owner with the player placeholder ("BASIS v. {PLAYER}", "BASE DE {PLAYER}"), which the German cart fills with the owner's name (pokeruby/src/secret_base.c:642, de_sub_8073174), and the TV's map name appended the row after the owner's name. With a translation mod, a base was named "MAYBASE DE " followed by the player's own name.

SB.nameWith fills either placeholder with the owner, or appends the row where it has none; the secret base's name and the TV's map name both use it.

The registry lists draw every registered base's name on every frame, so the rendered row is kept per row text, label and catalog state, and naming another owner only fills it.
2026-10-07 15:56:34 +02:00
bryanthaboi c68ba87907 Merge pull request #2743 from thibautbus/fix/rs-starter-category-utf8
Cut Ruby and Sapphire's starter category by characters
2026-10-07 09:46:17 -04:00
bryanthaboi 2f720e6d19 Merge pull request #2744 from bryanthaboi/dev
followups
v0.3.60
2026-10-07 09:45:52 -04:00
thibautbus d0cbee79de Cut Ruby and Sapphire's starter category by characters
The starter selection labels a starter with its category's first 11
characters (pokeruby/src/starter_choose.c:522), but cut the string at 11
bytes. An English category fits, but a translated one can be written in
multi-byte UTF-8: a Japanese category, three bytes a character, was cut
in the middle of its fourth character, and an accented letter can be cut
the same way. The label now keeps 11 characters (FrlgFont.truncate).
2026-10-07 15:19:47 +02:00
bryanthaboi cafb6e63da followups 2026-10-07 09:14:37 -04:00
github-actions[bot] e7ed41d16f chore(ios): update app-repo.json [skip ci] 2026-10-07 10:17:28 +00:00
bryanthaboi 56b28b99d1 Merge pull request #2741 from bryanthaboi/dev v0.3.59 2026-10-07 06:09:52 -04:00
bryanthaboi fcdaecd496 CLOSES #2726, CLOSES #2727, CLOSES #2729, CLOSES #2730, CLOSES #2731, CLOSES #2733, CLOSES #2734, CLOSES #2735, CLOSES #2736, CLOSES #2737, CLOSES #2740 2026-10-07 06:04:57 -04:00
bryanthaboi 2f89018cb3 home / migration box work 2026-10-07 04:19:41 -04:00
github-actions[bot] f25f0e429a chore(ios): update app-repo.json [skip ci] 2026-10-07 00:25:13 +00:00
bryanthaboi 1def5995a4 Merge pull request #2728 from bryanthaboi/dev v0.3.58 2026-10-06 20:18:46 -04:00
bryanthaboi 21a64419fd PR #2725: strip comments, drop unused FilePicker.SAVE and ensureDecompressed 2026-10-06 20:13:27 -04:00
bryanthaboi 96d03d7581 Merge pull request #2725 from pokeparadox/dev 2026-10-06 20:05:59 -04:00
bryanthaboi 1c46326ab9 Merge pull request #2579 from flaviodelima/fix/battle-text-ttf-advance
# Conflicts:
#	src/battle/BattleState.lua
2026-10-06 20:05:48 -04:00
bryanthaboi c926b0f2d4 PR #2724: strip test comments 2026-10-06 20:02:32 -04:00
bryanthaboi 3cbf780369 Merge pull request #2724 from thibautbus/feat/rs-translation-runtime 2026-10-06 20:00:47 -04:00
bryanthaboi 07f9f8796c PR #2716: raw joysticks read axes 1/2 only, speed rows show 0/1, strip comments 2026-10-06 20:00:34 -04:00
bryanthaboi 74694e452a Merge pull request #2716 from Nexhas28/feat/sdl-controller-support 2026-10-06 19:56:51 -04:00
bryanthaboi 93cd84d232 follow up 2026-10-06 19:45:14 -04:00
bryanthaboi e7d5b86c93 CLOSES #2484, CLOSES #2600, CLOSES #2694, CLOSES #2708, CLOSES #2713, CLOSES #2723 2026-10-06 19:00:50 -04:00
bryanthaboi 4ecf6f371f launcher pauncher 2026-10-06 17:26:40 -04:00
Kevin Winfield-Pantoja 5b927d875f Merge branch 'bryanthaboi:dev' into dev 2026-10-06 22:17:17 +01:00
PokeParadox ad2daac7fb Import RetroArch RZIP-compressed .srm saves
SrmDecompress unwraps #RZIPv files (chunk walk fixed for exact-EOF
chunks, LÖVE decompress container arg). SaveFileIO.readSource only
unwraps compression -- size policy stays in importToSlot so gen3
128 KiB and gen2 footer saves pass through. Save picker accepts .srm
(FilePicker.SAVE + chooseSav filters), FilePicker.SAVE moved above
return. Covered by tests/save_rzip_test.lua.
2026-10-06 22:15:45 +01:00
PokeParadox f8ed24ff6e Import ROM from .zip/.7z archives
RomArchive sniffs magic, probes platform mount capability (zip/7z,
cached), unwraps first accepted-size ROM (prefer known SHA-1). Wired
into startData, filedropped game-tab zip routing, chooseRom picker
exts, FileBrowser rom filter (hidden when capability probe fails).
2026-10-06 21:45:25 +01:00
thibautbus 2d404a7dc7 Resolve Ruby and Sapphire's party prompts again each time the menu opens
The prompt a mode shows (Choose a POKéMON., Move to where?...) was kept on the party menu for the rest of the session. PartyMenu.show now clears it, like the menu's other per-open state, so a prompt is resolved once per opening.
2026-10-06 22:27:57 +02:00
thibautbus 870411b88e Translate the contest move effect description on Ruby and Sapphire's summary
The CONTEST MOVES page printed the contest effect's description as the contest moves pack has it. It now goes through SummaryData.contestEffectDescription, as Emerald's summary does, resolved once per effect while the summary is open.
2026-10-06 22:27:57 +02:00
thibautbus 359f41ff76 Print Ruby and Sapphire's party menu prompts from the cart's text
The party menu's prompts (Do what with {STR_VAR_1}?, Choose a POKéMON., Move to where?...) printed the rse/party pack's copies, plain English strings that also dropped the POKéMON's name from Do what with {STR_VAR_1}?. They now read the script cache by their PartyMenuPromptTexts slot, with the selected POKéMON's name as STR_VAR_1, the pack's copy as the fallback; a prompt is resolved once for the menu or mode that shows it.
2026-10-06 22:27:57 +02:00
thibautbus 117af9f40c Resolve Ruby and Sapphire's party menu actions once per menu
Data.drawActions looked each action's text up in the script cache on every frame. It now draws the texts the party menu resolves once for each action list (action_texts, exposed as PartyMenu._actionTextsFor), as Emerald's and FireRed's menus already do.
2026-10-06 22:27:57 +02:00
thibautbus 6a5d69adb8 Print Ruby and Sapphire's party menu actions from the cart's text
The Ruby/Sapphire party menu printed its actions from the rse/menus
pack's cursor options, plain English strings the extractor copied from
sPokemonMenuActions, and a field move's English label, so a translation
mod's SUMMARY, SWITCH, ITEM and the others never showed. The actions now
read the script cache by the labels sPokemonMenuActions points at
(pokeruby/src/pokemon_menu.c:126), with the pack's copy as the fallback,
and a field move prints its move's name, as the cart does; Emerald's
party menu does the same since gen1recomp#2678.
2026-10-06 22:27:57 +02:00
thibautbus 2700e0b073 Print Ruby and Sapphire's Easy Chat words translated
The Ruby/Sapphire Easy Chat editor, mail composer and reader, Dewford
trendy phrase editor and trainer card printed each word's cart text
(EasyChatText.rawWord) and the pickers each group's and word's raw
name, and the TV and the Dewford line naming the new trend got the raw
words too, so a translation mod's Easy Chat vocabulary never showed
there. They now print EasyChatText.word and groupName, as the other
game3 screens do, each screen keeping a word it resolves until it opens
again; the comparisons the scripts rely on (changed phrases, the
Mystery Event words, the trend's comparison) keep the raw text.

Gabby and Ty's last quote is printed from the cart's bytes, so a
translated word the cart's charset cannot hold (a Japanese one on a US
cart) keeps the cart's word there instead of printing "????".
2026-10-06 22:27:57 +02:00
thibautbus 31351ae2e9 Read Ruby and Sapphire's native screens' cart text from the script cache
The Ruby/Sapphire shop, decoration menus, move relearner and contest
paintings printed the cart strings their extractors copied into their
packs (textBytes, keyed by the strings' pokeruby labels), so a
translation never reached them. The script cache holds the same strings
under the same labels, where a mod's text overrides land: these screens
now read it there, with the pack's copy as the fallback, the way
Emerald's screens do (RomText.irOr). The shop, the decoration menus and
the move relearner keep each text they resolve until the screen opens
again, the painting its caption once it is built.

A hall painting's caption names the trainer, then the POKéMON, as the
US cart does; the European carts name the POKéMON first, their
possessive row starting with a space (" von ", " de ", " di ",
pokeruby/src/contest_painting.c:234), and so does the caption now
when the row does.
2026-10-06 22:27:57 +02:00
thibautbus bb568d3283 Read Ruby and Sapphire's Pokédex text from the cart
The native Ruby/Sapphire Pokédex printed the entry's two description
pages from the entries pack, and its labels (?????POKéMON, CRY OF,
REGISTRATION COMPLETE...) and search screen from the chrome packs'
English copies, so a translation never reached them: the Emerald path's
Strings() lookup does not cover the native one, and the search screen's
labels are Emerald's (gText_Dex*), which Ruby and Sapphire's cache does
not have.

The entries pack now keeps the pret label of each description pointer
(DexDescription_Treecko_1 and _2; each edition words its entries in its
own way under the same labels), and the Ruby/Sapphire Pokédex pack the
DexText_ label of each search title and description (DexText_ABC...);
the pack's version moves to 1 and the entries are ready on Ruby and
Sapphire only with their labels, so a cache imported without them is
imported again. The screen reads them from the script cache by those
labels, its own labels by their gDexText_* labels and the category
through Strings(), as Emerald's does, with the pack's copy as the
fallback.

The category is followed by what the unknown-category string has after
its question marks, as only the English cart does
(pokeruby/src/pokedex.c:4228): " POKéMON" in English, "ポケモン" in
Japanese, nothing in the European strings ("?????", "POKéMON ?????"),
whose carts print the category alone.

The Japanese size comparison row is a suffix ("の おおきさくらべ"), so
the screen prints the player's name before it.
2026-10-06 22:27:57 +02:00
thibautbus b5988d4654 Expand Ruby and Sapphire's placeholders from the script cache
The runtime expanded Ruby and Sapphire's {EVIL_TEAM}, {GOOD_LEADER},
{VERSION}, {RIVAL} and {KUN} (and the other version-dependent names)
from text/placeholders.lua, the values the extractor reads from the US
cart, so a translation never reached them: the team leaders stayed MAXIE
and ARCHIE, the rival MAY or BRENDAN, the version RUBY or SAPPHIRE, and
the Japanese honorific empty. Each value is a cart string the script
cache also holds under its pokeruby label (gExpandedPlaceholder_Maxie,
_May, _Ruby, _Kun...); the placeholders now read it from there, with the
extract's value as the fallback, the way Emerald's do.

The labels are defined once, in text_placeholders_extract.lua
(rsSymbols, the evil and good teams swapped by edition), and both the
Ruby/Sapphire import and the message box read them from there.
2026-10-06 22:27:41 +02:00
github-actions[bot] b42505039e chore(ios): update app-repo.json [skip ci] 2026-10-06 20:12:55 +00:00
bryanthaboi 1d6eb56524 Merge pull request #2722 from bryanthaboi/dev
Gen 3 online: all versions on the relay, event catalog, link room pre…
v0.3.57
2026-10-06 16:01:19 -04:00
bryanthaboi 070a55da91 Fix luacheck warning in rs_mystery_event_mons 2026-10-06 15:58:45 -04:00
bryanthaboi 697e064fd2 Gen 3 online: all versions on the relay, event catalog, link room presence 2026-10-06 15:48:54 -04:00
github-actions[bot] 9f0b1d0313 chore(ios): update app-repo.json [skip ci] 2026-10-06 18:04:44 +00:00
bryanthaboi 8b97b064d8 Merge pull request #2718 from bryanthaboi/dev
CLOSES #2693, CLOSES #2697, CLOSES #2698, CLOSES #2699, CLOSES #2701,…
v0.3.56
2026-10-06 13:55:06 -04:00