diff --git a/mobile/ios/app-repo.json b/mobile/ios/app-repo.json index ac4e8828..b00dc5e1 100644 --- a/mobile/ios/app-repo.json +++ b/mobile/ios/app-repo.json @@ -11,7 +11,57 @@ "localizedDescription": "Gen1Recomp - A native Lua / LÖVE2D recreation of Gen 1 Poke", "tintColor": "3b5ca8", "category": "games", - "versions": [] + "versions": [ + { + "version": "0.1.64", + "date": "2026-08-03", + "size": 9317129, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.64/gen1recomp-0.1.64-ios.ipa", + "localizedDescription": "Download the correct version for your computer below.\n\n## Contributors\n\n- @bryanthaboi\n- @ShaneMcGovernIE" + }, + { + "version": "0.1.63", + "date": "2026-08-03", + "size": 9316977, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.63/gen1recomp-0.1.63-ios.ipa", + "localizedDescription": "Download the correct version for your computer below.\n\n## Issues closed\n\n- #623 Game Corner Prize Exchange various issues\n- #624 Coins purschase menu missing your current money and coins\n- #636 Inaccurate Old Man tutorial in yellow + misc issues relating to him\n- #637 True color broken on Hall of Fame and Party Stats when using the wide battle option\n- #639 Pokédex can't show the correct stats when you catch 100 or more pokémon + overly simplified layout\n- #650 Rocket Hideout Progression Bug - Stuck with door closed after defeating Jessie and James in Yellow\n- #697 Missaligned HUD on Hall of Fame\n- #704 Player doesn't follow Prof. Oak to the Hall of Fame on the first screen\n- #722 Issues with Giovanni in Silph C.O.\n\n## Contributors\n\n- @bryanthaboi" + }, + { + "version": "0.1.62", + "date": "2026-08-03", + "size": 9309934, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.62/gen1recomp-0.1.62-ios.ipa", + "localizedDescription": "Download the correct version for your computer below.\n\n## Contributors\n\n- @bryanthaboi" + }, + { + "version": "0.1.61", + "date": "2026-08-03", + "size": 9052744, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.61/gen1recomp-0.1.61-ios.ipa", + "localizedDescription": "Download the correct version for your computer below.\n\n## Issues closed\n\n- #325 Launcher crashes importing a mod .zip with non-ASCII characters in the filename (Windows)\n- #646 Fuchsia City Pokemon not being added to Pokedex.\n- #651 Parasect trading NPC mute and deaf\n- #665 fix: file path sanitizing is needed\n- #706 Champion theme playing too late\n- #709 Fainted Pokemon plays its normal cry instead of the pitched-down, slower faint cry\n- #719 Silph C.O workers dialog bug.\n\n## Contributors\n\n- @bryanthaboi\n- @castdrian\n- @jherediagu\n- @johnjohto\n- @ShaneMcGovernIE\n- hernan" + }, + { + "version": "0.1.60", + "date": "2026-08-02", + "size": 8337730, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.60/gen1recomp-0.1.60-ios.ipa", + "localizedDescription": "Download the correct version for your computer below.\n\n## Issues closed\n\n- #596 No rival theme\n- #641 PP UP UI\n- #648 The revive item does not return the divided experience to fallen Pokemon that participated in battle.\n- #677 Gamespeed 3x\n- #683 Rival theme not playing in Oak's Lab\n- #689 Corrupted color on table in Celadon City using Advanced Colors preset\n- #694 Missing sound effect when falling from boulder holes\n- #695 Pressing B on the PC should bring you back to the previous screen, not turn it off\n\n## Contributors\n\n- @bryanthaboi\n- @castdrian\n- @ShaneMcGovernIE\n- @spiritsnails\n- Shane McGovern" + }, + { + "version": "0.1.59", + "date": "2026-08-02", + "size": 8334731, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.59/gen1recomp-0.1.59-ios.ipa", + "localizedDescription": "Download the correct version for your computer below.\n\n## Issues closed\n\n- #668 No Jingle playing when receiving first Pokemon from Oak\n- #671 faint animation error\n\n## Contributors\n\n- @bryanthaboi\n- @castdrian\n- @jherediagu\n- @spiritsnails\n- Shane McGovern" + }, + { + "version": "0.1.58", + "date": "2026-08-02", + "size": 8331163, + "downloadURL": "https://github.com/bryanthaboi/gen1recomp/releases/download/v0.1.58/gen1recomp-0.1.58-ios.ipa", + "localizedDescription": "Gen1Recomp - A native Lua / LÖVE2D recreation of Gen 1 Poke" + } + ] } ] } diff --git a/src/core/Game.lua b/src/core/Game.lua index e99a5734..97662298 100644 --- a/src/core/Game.lua +++ b/src/core/Game.lua @@ -574,7 +574,7 @@ function Game:keypressed(key) return elseif key == "1" then -- cycle GAME SPEED (0.25X → 200X, logic only; audio unaffected); - -- R2/L2 on gamepad do the same (see gamepadpressed) + -- shoulders/triggers on gamepad do the same (see gamepadpressed) self:_cycleSpeed(1) return elseif key == "2" then @@ -666,14 +666,17 @@ function Game:gamepadpressed(joystick, button) end) selectHeld = ok and down == true end - -- shoulder buttons cycle GAME SPEED (R2/rightshoulder = faster, - -- L2/leftshoulder = slower; same as keyboard hotkey 1). Skip while - -- Select is held so Select+L can reach displayChordDigit ("7"). + -- shoulder buttons and analog triggers cycle GAME SPEED (R1/RB or + -- R2/RT = faster, L1/LB or L2/LT = slower; same as keyboard hotkey + -- 1). LÖVE reports an analog trigger as gamepadpressed once it + -- crosses the press threshold, so a trigger pull lands here like any + -- other pad button. Skip while Select is held so Select+L can reach + -- displayChordDigit ("7"). if not selectHeld then - if button == "rightshoulder" then + if button == "rightshoulder" or button == "righttrigger" then self:_cycleSpeed(1) return - elseif button == "leftshoulder" then + elseif button == "leftshoulder" or button == "lefttrigger" then self:_cycleSpeed(-1) return end diff --git a/tests/engine/speed_shoulders_triggers_test.lua b/tests/engine/speed_shoulders_triggers_test.lua new file mode 100644 index 00000000..0d9438d6 --- /dev/null +++ b/tests/engine/speed_shoulders_triggers_test.lua @@ -0,0 +1,64 @@ +-- The built-in GAME SPEED hotkeys on controller: the shoulder buttons +-- (L1/R1) and the analog triggers (L2/R2) all cycle the engine speed +-- ladder, R-side faster and L-side slower, exactly like keyboard hotkey +-- 1. Anything else must still fall through to the top-state pad +-- routing and never touch the speed ladder. LÖVE reports an analog +-- trigger as gamepadpressed once it crosses the press threshold, so +-- "lefttrigger"/"righttrigger" land here like any other pad button. +-- No pokered cite: port-only (gap C2). +-- luajit tests/engine/speed_shoulders_triggers_test.lua + +package.path = "./?.lua;./?/init.lua;" .. package.path + +local T = require("tests.harness") +local check, eq = T.check, T.eq +love = love or require("tests.love_stub") + +local Game = require("src.core.Game") +local Input = require("src.core.Input") +Input:init() + +local dirs = {} +local game = { + save = { options = { speed = 1 } }, + _cycleSpeed = function(self, dir) + dirs[#dirs + 1] = dir + self.save.options.speed = self.save.options.speed + dir + end, + stack = { top = function() return nil end }, +} +function game:writeOptions() end + +local function last() + return dirs[#dirs] +end + +-- ---- shoulders ---------------------------------------------------------- +dirs = {} +Game.gamepadpressed(game, nil, "rightshoulder") +eq(last(), 1, "R1 speeds up") +Game.gamepadpressed(game, nil, "leftshoulder") +eq(last(), -1, "L1 slows down") + +-- ---- analog triggers ---------------------------------------------------- +dirs = {} +Game.gamepadpressed(game, nil, "righttrigger") +eq(last(), 1, "R2 speeds up") +Game.gamepadpressed(game, nil, "lefttrigger") +eq(last(), -1, "L2 slows down") + +-- ---- everything else falls through to the top-state pad routing --------- +local routed = nil +game.stack.top = function() + return { onGamepadPressed = function(_, b) routed = b end } +end +Game.gamepadpressed(game, nil, "a") +eq(routed, "a", "a normal button still reaches the top-state pad routing") +routed = nil +Game.gamepadpressed(game, nil, "rightshoulder") +check(routed == nil, "the speed buttons are consumed, never routed to a menu") +Game.gamepadpressed(game, nil, "lefttrigger") +check(routed == nil, "a trigger pull is consumed the same way") +check(#dirs == 4, "only the speed buttons touched the speed ladder") + +T.finish("speed_shoulders_triggers")