Lunar Porter takes any controller, not the first one
A controller does not always arrive on pad nought. The front end hands out the numbers the host gave it, so a game that reads only the first one works on the machine it was written on and silently does nothing on the next - which is the shape of "the pad is detected, Pad shows it, and the game ignores it". Four reads and three ORs. One person flies this and which socket they plugged into is not a thing they should have to know. Presence is any of the four bits rather than the low one, for the same reason. The manifest's pad column takes several fixtures now, comma separated, and they fill the pads in turn. So cosmosLanderPadOne holds nothing on pad nought and flies the whole landing on pad one - a test that fails on the version of this program that shipped an hour ago. Also confirmed while looking: raylib 6 does refresh which gamepads are ready every frame in PollInputEvents, so a hot-plugged pad should be seen. Whatever is stopping that is above us and worth a separate look. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
This commit is contained in:
co-authored by
Claude Opus 5
parent
6def343e97
commit
f7be843ed9
@@ -25,7 +25,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -15,7 +15,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -32,7 +32,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -22,7 +22,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -22,7 +22,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
CosmOS
|
||||
> Lander
|
||||
Down safely.
|
||||
finished
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
[exit 0]
|
||||
@@ -108,7 +108,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -27,7 +27,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -15,7 +15,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -13,7 +13,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
@@ -22,7 +22,7 @@ Mode.sbx 48
|
||||
Flip.sbx 173
|
||||
Sprite.sbx 442
|
||||
Depth.sbx 672
|
||||
Lander.sbx 1553
|
||||
Lander.sbx 1571
|
||||
Pad.sbx 264
|
||||
Crash.sbx 632
|
||||
vars.script 50
|
||||
|
||||
Binary file not shown.
@@ -1023,6 +1023,16 @@ padTest | testPrograms/padTest.asm | run | -
|
||||
# is the whole of the game's difficulty in two fixtures.
|
||||
cosmosLanderCrash | CosmOS/Source/cosmos.asm | run | - | 60000000 | disks/cosmos.img | lander.keys | landerFall.pad
|
||||
cosmosLanderSoft | CosmOS/Source/cosmos.asm | run | - | 60000000 | disks/cosmos.img | lander.keys | landerSoft.pad
|
||||
# ---- And the same landing, flown from the second controller ----
|
||||
#
|
||||
# Two pad fixtures, comma separated: the first holds nothing and the second is the recording
|
||||
# that lands. So the flying is done entirely on pad ONE, and a game that read only pad nought
|
||||
# would sit there and crash.
|
||||
#
|
||||
# Which is not hypothetical - it is what this did. A controller does not always arrive on
|
||||
# nought; the front end hands out the numbers the host gave it, so reading only the first
|
||||
# works on the machine it was written on and silently does nothing on the next one.
|
||||
cosmosLanderPadOne | CosmOS/Source/cosmos.asm | run | - | 60000000 | disks/cosmos.img | lander.keys | landerIdle.pad,landerSoft.pad
|
||||
# ---- And the thing that says whether a controller is being seen at all ----
|
||||
#
|
||||
# Three states look identical from inside a game that is not responding: a pad the front end
|
||||
|
||||
+15
-3
@@ -255,12 +255,24 @@ while IFS='|' read -r name src mode stdin limit disk keys pad; do
|
||||
# what makes a device that only a person could otherwise exercise into one the
|
||||
# recordings cover - the same argument as the keyboard fixture above.
|
||||
if [ "$pad" != "-" ]; then
|
||||
if [ ! -f "$INPUT/$pad" ]; then
|
||||
# ---- Commas for more than one ----
|
||||
#
|
||||
# --pad fills the pads in turn, so naming two puts the second on pad one.
|
||||
# That is worth being able to say: a game that reads only the first pad works
|
||||
# on the machine it was written on and silently does nothing on one where the
|
||||
# host handed out a different number.
|
||||
padMissing=""
|
||||
IFS=',' read -r -a padList <<< "$pad"
|
||||
for one in "${padList[@]}"; do
|
||||
one="$(trim "$one")"
|
||||
if [ ! -f "$INPUT/$one" ]; then padMissing="$one"; break; fi
|
||||
EMUARGS+=(--pad "$INPUT/$one")
|
||||
done
|
||||
if [ -n "$padMissing" ]; then
|
||||
FAIL=$((FAIL + 1)); FAILED_NAMES+=("$name")
|
||||
report "FAIL" "$name" "missing pad fixture $pad"
|
||||
report "FAIL" "$name" "missing pad fixture $padMissing"
|
||||
continue
|
||||
fi
|
||||
EMUARGS+=(--pad "$INPUT/$pad")
|
||||
fi
|
||||
[ "$limit" != "-" ] && EMUARGS+=(--cycles "$limit")
|
||||
# A disk starts fresh for every test, so a test cannot pass because of what a
|
||||
|
||||
Reference in New Issue
Block a user