Repository navigation
Releases
ShiningSource 0.8.5
ShiningSource 0.8.5
Shining Soul II (Europe) as a native program for Windows x64, Android and
Linux x64, and, for the first time, a package for the PS Vita that has never
been run. What the port is and does is in the 0.8 notes.
No ROM, BIOS or game data is included: you supply your own cartridge dump
(SHA-1 aa1288be9257337abdfe3034898cf6c7aa778fbc). Online, 0.8.5 plays with
0.8.4: nothing in the link changed.
New
- PS Vita, untested alpha (
ShiningSource-0.8.5-vita-UNTESTED.vpk). A
console cannot give the game the Game Boy Advance's memory at its real
addresses, so the game's memory lives inside the program and every access is
redirected to it. That scheme is proved on a PC: a Windows program built
with it, with the real addresses made inaccessible, gives the reference hash
and sound. The Vita package is built with the Vita SDK and accepted by its
packaging tools. It has never run: not on a Vita, not on any ARM
processor. It may not start. No options menu, online or achievements in
it. To try it (HENkaku / Ensō): install the package with VitaShell, copy
your own ROM toux0:data/ShiningSource/(any name ending in.gba),
start it, and send usux0:data/ShiningSource/log.txt. A dark red screen
for five seconds means no ROM was found. Circle is A, Cross is B. - Android: the start screen no longer offers a delay. A number there
selected the older way of playing online, in which everybody waits for the
slowest player. Android now always uses the direct one, as the PC does. - Sprite rotation takes its sines from a table of whole numbers, so every
processor computes the same values.
Checked
- The scripted 32,000-frame play-through gives
5F1DB1A8and the same sound
on the development build, Windows x64 (from the packaged files) and the
program built with the consoles' memory scheme. - Android emulator against a Windows player through a local relay (before the
delay field was removed, with no delay set): the session is joined and
played at 59.4 game frames a second with the picture shown, the sound never
empty. - The ARM64 half of the Android package, in the emulator's ARM translation:
every frame hash equals the reference up to frame 3000, where the
translation stops because it cannot deliver the memory faults the port
tolerates (a real phone can; the Linux ARM64 virtual machine runs the whole
play-through).
Not checked
- The Vita package: nothing of it has run.
- The Android and Linux packages of this version were built, not run again
(0.8.4's were, and the code they share with Windows passes here). - Everything listed as not checked in 0.8.4 and 0.8.
In progress, not in this version
- PS4, PS5 and Switch builds; the party's defeat online with a player gone;
removing the game's stray memory accesses at their source.
Install
- Windows: unpack
ShiningSource-0.8.5-windows-x64.zipand start
ShiningSource.exe. - Android: install
ShiningSource-0.8.5-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it). - Linux x64: unpack
ShiningSource-0.8.5-linux-x64.tar.gzand run
./ss2_linux64 your-rom.gba(no launcher yet;LINUX.txthas the settings). - PS Vita: see above.
ShiningSource 0.8.4
ShiningSource 0.8.4
Shining Soul II (Europe) as a native program for Windows x64, Android and
Linux x64. This version carries everything done since 0.8.1. (There is no
0.8.2 or 0.8.3.) What the port is and does is in the
0.8 notes.
No ROM, BIOS or game data is included: you supply your own cartridge dump
(SHA-1 aa1288be9257337abdfe3034898cf6c7aa778fbc). Online, play 0.8.4 with
0.8.4: nothing in the packets changed, but what is new is decided by each
player's program.
Online
- A dungeon level, tested by script. Three scripted players enter the
first dungeon, fight (enemies fall, items drop and are taken) and pass the
level's exit together (tools/net_exit_test.sh). Until now the scripted
sessions only walked. With it:- the others pass the exit after a player's program was ended in the fight
(the rule 0.8 applied from reading the code); - a player cut off for 30 seconds during fights is taken in again, with the
same enemies and the same events in the same order on every player.
- the others pass the exit after a player's program was ended in the fight
- Enemies leave a departed player's character alone. They used to go for
it and stand beside it for the rest of the level (an enemy beside it at 72
of 74 samples). A player that left for good is now handed to the game as a
defeated one, which the enemies pass over. A player that may still return
(given up for silence) stands as before until the party passes into the
next map: marking it at once would leave it "defeated" on the others'
screens after it came back.
Picture
- Experimental: a larger status display. Off by default ("Experimental:
larger status" in the game's options menu, a checkbox on the launcher's
Video page; enhanced mode only). On a large window the field is drawn large
and the HP, SP and Soul bars and the L and R menus stay small beside it.
With the option on they are drawn with larger pixels, sharp, at their
corners: 1.5 to 1.8 times the field's on a 16:9 window, twice on a wider
one. If the layer cannot be drawn, the picture stays whole and the option
switches itself off for that run. With the option off the picture is the
same as before, pixel for pixel. - One boss scene's line handler waits for a display flag nothing raised; it
is raised now. That scene was not reached in a test.
Launcher (Windows)
- The Saves page's buttons were pressed in a test (0.8.1 had this already).
Checked
- The scripted 32,000-frame play-through gives
5F1DB1A8and the same sound
on the development build and Windows x64, from the packaged files too; the
picture hashes at 240, 284, 427 and 480 columns are those of 0.7.1 with the
status display option off. - The dungeon level, three players, one run each: nobody gone; a program
ended in the fight; a 30-second outage during fights. - Regressions on the released source: three players with one program ended in
the first field (the others go on), three players with a player cut off 30
seconds (whole again), a newcomer joining two players (joined). - The status display option on, in a window (sound muted): the game keeps its
speed, no picture left out; the layer was inspected in dumps and window
shots of the first field, the town's hall, a message, the status page and
the L and R menus. - After the release, the Linux x64 package as published, in a Debian 12
virtual machine (no window): the play-through gives the same hash and the
same sound, a two-player session runs to its end, and a player cut off for
30 seconds is taken in again. - After the release, the Android emulator (x86_64): the play-through gives
the same hash and the same sound, twice. A first attempt right after the
emulator had started left no result, as with 0.7.4; with the status display
option on and the picture shown, the game ran at 58 frames a second on that
slow device, leaving pictures out.
Not checked
- The larger status display by a person: on a real display, in full
screen, at other window sizes; its menu entry and launcher checkbox were not
clicked in a test. That is why it is experimental. - The party's defeat online with a player gone: in one scripted run, with
one seat gone and the two others down, the level did not end. There is no
run of the same without a gone seat to compare with, so it is not known
whether the gone seat is the cause. Listed as a known problem. - A player that quits cleanly in the dungeon (one run ended before it could
tell), a 10-second outage in the dungeon, what a departed character looks
like on screen once it counts as defeated. - Everything listed as not checked in 0.8.
Known problems
- Those of 0.8, and: with a player gone and everybody else defeated, the
level may not end (see above).
Install
- Windows: unpack
ShiningSource-0.8.4-windows-x64.zipand start
ShiningSource.exe. - Android: install
ShiningSource-0.8.4-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it). - Linux x64: unpack
ShiningSource-0.8.4-linux-x64.tar.gzand run
./ss2_linux64 your-rom.gba(no launcher yet;LINUX.txthas the settings).
ShiningSource 0.8.1
ShiningSource 0.8.1
A correction to 0.8, the first public release. Everything in the
0.8 notes holds; this version changes two things.
No ROM, BIOS or game data is included: you supply your own cartridge dump
(SHA-1 aa1288be9257337abdfe3034898cf6c7aa778fbc). Online, play 0.8.1 with
0.8.1.
Fixed
- A player returning after a long outage could be written off at once.
When the others gave a silent player up (15 seconds), a comparison of two
clock readings taken a millisecond apart could come out as "away for 49
days": that player was then marked as not expected back, and on its return
it was told the session was over instead of being taken in again. It
happened every time on Linux (found by running the 0.8 package there) and
depended on timing elsewhere. In 0.7.5 and 0.8; not in 0.7.4. - The launcher's Saves page: its buttons were listed as not pressed in a test.
They are now: a copy is kept, and after the save changed the copy is put
back with the changed save kept as another copy.
Checked
-
Two players with a player cut off for 30 seconds, three runs, and three
players on the 64-bit build, one run: whole again every time. -
The scripted 32,000-frame play-through gives
5F1DB1A8and the same sound
on the development build and Windows x64. -
Before this correction, the 0.8 Linux package in Debian 12 virtual machines
(x64 the published file, ARM64 built from the same source): the
play-through gives the same hash and the same sound and a two-player
session runs to its end on both; the outage case failed on both, which is
how the fault was found. With the corrected line the outage case was run on
ARM64 there: whole again. -
After the release, the 0.8.1 Linux x64 package as published, in a Debian 12
virtual machine (no window): the play-through gives the same hash and the
same sound, a two-player session runs to its end, and a player cut off for
30 seconds is taken in again, twice out of two runs.
Not checked
- Everything listed as not checked in 0.8.
Install
- Windows: unpack
ShiningSource-0.8.1-windows-x64.zipand start
ShiningSource.exe. - Android: install
ShiningSource-0.8.1-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it). - Linux x64: unpack
ShiningSource-0.8.1-linux-x64.tar.gzand run
./ss2_linux64 your-rom.gba(no launcher yet;LINUX.txthas the settings).
ShiningSource 0.8
ShiningSource 0.8
Superseded by 0.8.1: in 0.8 a player returning after
a long outage could be told the session was over (always on Linux, a matter
of timing elsewhere).
The first public release. Shining Soul II (Europe) as a native program for
Windows x64, Android and Linux x64: widescreen, online for 2 to 4 players,
achievements. The versions before it (0.1 to 0.7.5) were test builds for a
small group of players.
No ROM, BIOS or game data is included: you supply your own cartridge dump
(SHA-1 aa1288be9257337abdfe3034898cf6c7aa778fbc).
Online, 0.8 meets 0.7 to 0.7.5 (nothing in the packets changed), but what is
new is decided by the host's program and by each player's own. Play 0.8
with 0.8.
What you get
- The game itself: every function of the cartridge is the decompilation's
C, compiled unchanged for your machine. Not an emulator and not a static
recompilation. Saves work as on the cartridge, with a backup of the save
before the last one. - Picture: the console's picture at a whole scale inside a border, or a
wide view that shows more of the map (up to twice the console's width)
without stretching anything, with the status display at the screen's edges.
Sprites the cartridge blinks to fake transparency are drawn at half
strength instead. VSync, variable refresh, or neither. - Online for 2 to 4 players through a small relay (a public one is the
default;ss_relayis included to run your own): the game's own
MULTIPLAYER MODE, with crossplay between Windows, Linux and Android.
Nobody waits for a slow player. A player whose connection drops is taken in
again and receives what it missed; a player who leaves stays as a standing
character and the others play on. - Comfort: skip scenes with Start (a vote online), every key and
controller button reassignable, touch controls on Android, an options menu
in the game (Escape, or Select + Start), English and Spanish. - Achievements: the RetroAchievements set of your ROM is followed while
you play (sending unlocks to your account is off by default), the port's
own twelve, and Rebel mode with cheats and its own save. - Launcher (Windows): checks your ROM, all settings, online, dated copies
of your save.
New since 0.7.5
- A player that is gone no longer holds the others in a map. With three
players and one program closed in the first field, the other two could not
leave it: the scene there waits for every player's arrival. Measured with a
scripted session and fixed; the others now go on through every change of
map of that session, whether the player crashed or quit. The same rule was
applied, from reading the game's code, to the exits of a level, the portal
back, the boss portals and the party's defeat. - The item shop, proven. Players reported a crash on opening a shop in
multiplayer and no crash record was ever sent. A scripted route now walks
to every counter of the town, alone and with two players: on a build without
the 0.4 correction the item shop crashes exactly as reported, and on this
version it sells, buys and closes. The weapon and armour shops, the
blacksmith, the appraiser, the storage and the Start menu's pages are
walked the same way. - Music. Every one of the game's 399 songs was played through the sound
engine in a survey: none silent, no track lost, no command the engine does
not know. The areas reported without music are therefore a matter of when
the game asks for a song. One such case is changed: a song asked for again
while it was still fading out was left to fade into silence (on the
cartridge the fade ends while the next map loads); it now starts again. - Joining a game in progress, as an experiment. Off by default
(SS_NET_JOIN=1for every player; they meet in a room of their own). A
program started later is let in when the party enters a dungeon map, and
follows it from there. Nobody is let in while the party stays in the town.
docs/JOIN_IN_PROGRESS.mdhas the mechanism and its limits. - Linux x64 is a package of the release (
.tar.gz, started from a terminal).
Checked
- The scripted 32,000-frame play-through gives
5F1DB1A8and the same sound
on the development build and Windows x64, from the packaged files too. - A player gone: three players with one program ended in the first field (the
others were stuck before, go on now), ended in the next area, one that
quits, two players with the client gone (the host goes on alone). One run
each; one repeated on the released source. - Online regressions on the released source: three players with a player cut
off 30 seconds (whole again), a newcomer joining two players (joined), a
session of three on the 64-bit build through four changes of map. - The town: eleven single-player routes on the development build, three of
them (item shop, weapon shop, storage) on the 64-bit build drawn 427
columns wide; two players with the item shop and the weapon shop open. - The song survey gives the same result on both builds.
- The Windows package with a window (144 Hz display, sound muted, ten
seconds): 59.65 game frames a second, no picture left out, the sound
reserve never empty; the launcher starts. - The Android emulator (x86_64): the play-through gives the same hash and the
same sound. With the picture, while the same PC was also running a virtual
machine, the game ran at 46 frames a second, so that run says nothing about
speed. - From 0.7.4 and 0.7.5, unchanged code: outages of 3 to 75 seconds with two to
four players (60 of 60 whole again), two outages in one session, a change
of map with a player cut off.
Not checked
- A real network. Every online test ran on one machine through a local
relay that drops, holds or cuts packets. Sessions between real places were
played by a few people with earlier versions, not measured. - By a person, with this version: combat online, the music by ear, the
transparencies in the scenes that were reported, a real controller, a
phone, Linux with a window, signing in to RetroAchievements. - After the release, the Linux x64 package in a virtual machine: the
play-through and a two-player session pass, the outage case failed. See
0.8.1. - The rules for a gone player at level exits, portals, boss portals and the
party's defeat: no scripted session reaches them yet. - Fights, items and many enemies appearing during an outage.
- The music correction was never seen at work: no scripted session produces
the case. Tell us where the music is missing. - The launcher's Saves page: drawn in a test, its buttons not pressed.
- Joining a game in progress beyond the scripted first maps: fights, exits,
bosses, two newcomers at once.
Known problems
- A player the others gave up (15 seconds of silence) while they pass into the
next map cannot come back into that session; its game is told the session
is over. - When player 1 (the host) leaves, the session ends for everybody: the game
gives the host the enemies and the items. - After the host's program has really ended, the others can only walk for up
to a minute before the error appears. - A sprite that starts to alternate blinks once or twice before it is drawn
steadily. - Enemies still go for a standing character whose player is gone.
Install
- Windows: unpack
ShiningSource-0.8-windows-x64.zipand start
ShiningSource.exe. The launcher asks for your ROM the first time. - Android: install
ShiningSource-0.8-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it). - Linux x64: unpack
ShiningSource-0.8-linux-x64.tar.gzand run
./ss2_linux64 your-rom.gba(no launcher yet;LINUX.txthas the settings).
Reports are welcome as GitHub issues. A crash on Windows writes
shiningsource_crash.log beside the program, and an online session writes
shiningsource_net.log: attach them.
ShiningSource 0.7.5
ShiningSource 0.7.5
Native port of Shining Soul II (Europe) for Windows x64, Android and Linux
x64. No ROM, BIOS or game data is included: you supply your own cartridge
dump (SHA-1 aa1288be9257337abdfe3034898cf6c7aa778fbc).
Online, 0.7.5 meets 0.7 to 0.7.4 (nothing in the packets changed). What is new
here is decided by the host's program, so the host should update first.
Online: a change of map while a player's connection is gone
0.7.4 brought a lost connection back, tested in one field. This release
follows the session out of that field, to the world map and into the first
dungeon (tools/net_outage_map.sh), with a player cut off on the way.
- A player given up while the others entered a dungeon was sent everything
it had missed and still stayed on the world map for the rest of the session,
alone. The game starts a dungeon behind a barrier that every player has to
pass together, and the others had passed it without that player. Now the
host keeps such a player out and its game is told the session is over,
instead of leaving it in a world that differs. - A player that left for good no longer holds the others on the world map.
The game waits there until everybody has chosen the same place; a player
that will not come back now counts as having chosen. A player that may still
return is waited for, as the game has it. - A player the others gave up is forgotten after two minutes, the time it
waits itself. - With a fixed delay (
SS_NET_DELAY, not the default) a returning player's
program stood still until the host's program ended. It is now told the
session is over. - Needed no change: four players, two outages in one session (the same player
twice, two players at different times or at once, the host and a player at
once), an outage inside the dungeon.
Launcher (Windows)
- Saves page. Shows your save and the backup of the one before, for the
normal game and for Rebel mode; keeps dated copies in the foldersavesat
the press of a button; puts a copy back after first keeping the present save
as another copy, so a restore loses nothing.
Checked
- Three players, a change of map with a player cut off before it (10 and 30
seconds, a player or the host), after choosing the dungeon (10 seconds: four
runs, one of them the 64-bit build; 30 seconds: kept out cleanly, three
runs), a player that never returns, a player that quits. Most cases one to
three runs. - Four players: a player cut 30 seconds and the host cut 10 seconds, three
runs each. Two outages in one session: eleven runs, all whole again. - The released source, built again: an outage in the dungeon heals, a player
cut 30 seconds after choosing is kept out as described, the scripted
32,000-frame play-through gives5F1DB1A8and the same sound on the
development build and Windows x64. - The Saves page was drawn in a test with a save and a copy present.
Not checked
- The Saves page's buttons were not pressed in a test: copying and putting
back are a few lines each and were read, not run. - Fights, items and many enemies appearing during an outage: the scripted
players reach the dungeon but not its enemies. - The end of a level with a departed player. By reading the game's code,
the exit counts every player standing ready, so a character left standing
may hold the others on the level. Not tested and not changed yet. - What the kept-out player sees on its screen (its program runs on with the
game's own communication error). - A real network, a phone, Linux with a window. The Linux x64 package of this
version was built and not run; 0.7.4 was run in a virtual machine. - Everything listed as not checked in 0.7.4 and before.
Install
- Windows: unpack
ShiningSource-0.7.5-windows-x64.zipand start
ShiningSource.exe. - Linux x64: unpack
ShiningSource-0.7.5-linux-x64.tar.gzand run
./ss2_linux64 your-rom.gba(no launcher yet;LINUX.txthas the settings). - Android: install
ShiningSource-0.7.5-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it).
ShiningSource 0.7.4
ShiningSource 0.7.4
Native port of Shining Soul II (Europe) for Windows x64 and Android. No ROM,
BIOS or game data is included: you supply your own cartridge dump (SHA-1
aa1288be9257337abdfe3034898cf6c7aa778fbc).
Online, 0.7.4 meets 0.7 to 0.7.3 (nothing in the packets changed), but only a
player with 0.7.4 gets what is new here, and a host with an older version
takes nobody in again. Everybody should update, the host first.
Online: a connection that drops comes back
Measured first, with a relay that cuts one player off for a while
(tools/net_outage_test.sh):
- Before, any silence longer than two thirds of a second, even one far
below the 15-second limit, left that player frozen on the others' screens,
and them on its own, for the rest of the session, although the game's events
went on. After 15 seconds the two sides had given each other up for good. - Now a short gap heals by itself, and a player the others had given up is
taken in again when its packets return. It is sent every event it missed, in
order and once each (enemies, items, changes), while the others play on
without waiting. - A player who hears nothing at all from the server knows it is its own
connection and gives nobody up; it waits up to two minutes. The window title
says so. - The host is waited for a minute instead of 15 seconds. The price: when the
host's program has really ended, the others stand in a world where only
walking works for a minute before the error appears. - If the events cannot be replayed (too many were missed, or the host runs an
older version), the returning player is told the session is over instead of
being let in with a world that differs.
Also
- The experimental LT / RT option can be switched in the game's options menu
(Escape, or Select + Start), not only in the launcher.
Checked
-
Two and three players on one machine, a player or the host cut off for 3,
10 and 30 seconds, five runs each: 60 of 60 sessions whole again (same
events in the same order on every player, nothing frozen, nobody left out).
Before the change: 0 of 36. -
The same with a bad network (60 to 80 ms each way, 5% of packets lost): 18
of 18. A player away 75 seconds: 4 of 4. Everybody cut at once: 4 of 4. The
64-bit Windows build: 3 of 3. -
A returning player was 169 to 262 events behind and had them in 0.08 to
0.14 seconds (0.5 to 1.0 on the bad network). -
The released source, built again: a player away 30 seconds and a host away
10 seconds heal; the scripted 32,000-frame play-through gives5F1DB1A8and
the same sound on the development build and Windows x64. -
After the release, from the same source: the play-through gives the same
hash and the same sound in the Android emulator (x86_64). The first attempt,
started while the emulator was still booting, ended at frame 28,380 without
a report or a crash record; the repeat ran through. -
After the release, on Linux x64 and Linux ARM64 (Debian 12 virtual machines,
no window): the play-through gives the same hash and the same sound, a
two-player session through a relay built there runs to its end, and a player
cut off for 30 seconds is taken in again (one run each).
Not checked
- A real network. The outage is the relay not forwarding, on one machine.
A connection that returns with another address (Wi-Fi to mobile data), a
phone, a suspended laptop: not tried. - A change of map while a player is away, and fights during an outage: the
scripted session only walks in the first field. - Four players, two outages in one session.
- Linux with a window. The Linux x64 package added to this release was
only ever run without one: picture, sound and a controller on a real desktop
are untried. - An online session on Android with this version.
- Everything listed as not checked in 0.7.3 and before.
Install
- Windows: unpack
ShiningSource-0.7.4-windows-x64.zipand start
ShiningSource.exe. - Linux x64: unpack
ShiningSource-0.7.4-linux-x64.tar.gzand run
./ss2_linux64 your-rom.gba(no launcher yet;LINUX.txthas the settings). - Android: install
ShiningSource-0.7.4-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it).
ShiningSource 0.7.3
ShiningSource 0.7.3
Native port of Shining Soul II (Europe) for Windows x64 and Android. No ROM,
BIOS or game data is included: you supply your own cartridge dump (SHA-1
aa1288be9257337abdfe3034898cf6c7aa778fbc).
Online, 0.7.3 plays with 0.7, 0.7.1 and 0.7.2: nothing in the link changed.
A correction to 0.7.2, for slow devices only. On a machine that draws every
picture in time nothing changes.
Fixed
- 0.7.2 left out far too many pictures on a slow device. Once it had left
one out, the next picture waited for a moment that had been pushed into the
future: three of four pictures went missing (15 a second) and the display
was no longer used to pace the game. Found by running 0.7.2 in the Android
emulator, which is such a slow device. Now only as many pictures are left
out as it takes to keep the game at its speed.
Checked
- Android emulator (x86_64, software graphics), 1,500 frames with the picture:
the game ran at 42 frames a second when no picture is ever left out, with
the sound reserve at 1.7 ms; with 0.7.3 at its normal speed, showing 46
pictures a second, the sound never empty. The scripted 32,000-frame
play-through gives5F1DB1A8and the same sound there too. - Windows x64: the play-through gives
5F1DB1A8and the same sound; with
every picture slowed by 25 ms the game keeps 59.6 frames a second (37.9
without leaving pictures out); at normal speed no picture is left out.
Not checked
- A real phone (ARM64). The emulator runs the x86_64 half of the package.
- Everything listed as not checked in 0.7.2, 0.7.1 and 0.7.
Install
- Windows: unpack
ShiningSource-0.7.3-windows-x64.zipand start
ShiningSource.exe. - Android: install
ShiningSource-0.7.3-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it).
ShiningSource 0.7.2
ShiningSource 0.7.2
Native port of Shining Soul II (Europe) for Windows x64 and Android. No ROM,
BIOS or game data is included: you supply your own cartridge dump (SHA-1
aa1288be9257337abdfe3034898cf6c7aa778fbc).
Superseded by 0.7.3: on a slow device this version leaves out three of
four pictures. Use 0.7.3.
Online, 0.7.2 plays with 0.7 and 0.7.1: nothing in the link changed.
A release for slower machines, phones above all. Nothing else changed since
0.7.1.
Speed
- Drawing the picture costs about a third less. Backgrounds are drawn a
tile row at a time and each pixel stops at the first layer that shows
something. On the development PC: 1.4 -> 0.9 ms a frame in the classic
picture, 2.1 -> 1.4 ms at the widest. The picture is the same, pixel for
pixel (see Checked). - A machine that cannot draw every picture no longer slows the game down.
Until now every frame waited for its picture: on a slow device the game ran
in slow motion and the sound broke up. Now the game keeps its speed and the
sound its pace, and pictures are left out instead (never more than three in
a row). On a machine that keeps up, nothing changes.SS_FRAMESKIP=0turns
it off.
Install
- Windows: unpack
ShiningSource-0.7.2-windows-x64.zipand start
ShiningSource.exe. - Android: install
ShiningSource-0.7.2-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it).
Checked
- The scripted 32,000-frame play-through gives
5F1DB1A8, and the same sound,
on the development build and Windows x64. - The picture: one hash over all 32,000 pictures of that play-through is the
same as with 0.7.1 at 240, 284, 427 and 480 columns. The transparency bench
(49 cases) has no failing case. - With every picture slowed by 25 ms (a test setting), Windows x64: the game
ran at 37.9 frames a second before, with the sound reserve empty; now at
59.6, with 546 of 1,500 pictures left out and the sound never empty. - 0.7.1, the same source but for the two changes above, ran the play-through
identically on Linux x64, Linux ARM64 and in the Android emulator.
Not checked
- A real phone. Leaving pictures out was tested by making this PC slow on
purpose, not on a slow device. - A display that paces the game at 60 Hz on a slow machine (the test display
is 144 Hz). - Everything listed as not checked in 0.7.1 and 0.7: the sound by ear, the
transparencies in the scenes the players reported, combat online, a real
controller.
Known
- While pictures are being left out, blinking that is not a sprite (a menu
option) may show as blinking instead of smoothed.
ShiningSource 0.7.1
ShiningSource 0.7.1
Native port of Shining Soul II (Europe) for Windows x64 and Android. No ROM,
BIOS or game data is included: you supply your own cartridge dump (SHA-1
aa1288be9257337abdfe3034898cf6c7aa778fbc).
Online, 0.7.1 plays with 0.7: nothing in the link changed.
Transparency, done again with a test bench
The cartridge fakes transparency by showing a sprite one frame and hiding it
the next. The part of the port that recognises those sprites and draws them
steadily at half strength was rewritten, this time against a bench that
measures the result (tools/tests/flicker_bench.py, 49 cases: the old code
failed 27 of them, the new one none).
- A sprite is followed by what it shows, not by its slot in the sprite table,
so it is still recognised when the game reorders its sprites, when two things
alternate with each other (a fallen player and the marker over it), and in
the two-frames-on, two-frames-off rhythm of an enemy appearing or dying. - A moving sprite keeps its half-strength copy on it instead of leaving one
behind (the picture at doors, and around a character entering or leaving). - Smoothing of other blinking only touches pixels whose content stayed in
place, so nothing that moves is blurred. - Limits: a sprite that starts to alternate blinks once or twice before it is
recognised, and one that moves in irregular steps can be a pixel off for a
frame.
Sound and pacing
- A reserve of sound. The game's samples reached the sound device with only
a few milliseconds to spare, so any late frame could make a click. There are
now about 35 ms in reserve, kept there by a speed correction too small to
hear (0.4%). - Display pacing has a floor. When the display paces the game (60 and
120 Hz) and the driver returns early (VSync forced off, a minimised window),
the game no longer runs fast: it falls back to its own clock.
Also
- Enhanced mode: the border around the picture is drawn once and kept (about a
thousand rectangles a frame before). - The per-frame picture work costs less than half of what it did.
- 4 MiB less memory for everybody (a developer's buffer was in every build).
- The picture comes back after a graphics driver reset.
- Rebel mode: a damaged Rebel save with a good backup beside it is restored
from the backup instead of being replaced by a copy of the normal save. shiningsource_net.logno longer grows without limit (256 KiB and one older
file).- A crash on a thread other than the game's is reported as such.
Install
- Windows: unpack
ShiningSource-0.7.1-windows-x64.zipand start
ShiningSource.exe. - Android: install
ShiningSource-0.7.1-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it).
Checked
- The scripted 32,000-frame play-through gives
5F1DB1A8, and the same sound,
on the development build and Windows x64. - The transparency bench: 49 cases, none failing. One of them is the game's
own alternating sprite (the player's body); the others are the same patterns
put into the sprite table by the bench. - With a window on a 144 Hz display: 16.74 ms a frame, none late, the sound
reserve never empty; a simulated 60 and 120 Hz display keeps 16.74 ms. - The measurements are in OPTIPORT.md.
- After the release, from the same source: the play-through gives the same
hash and the same sound on Linux x64 and Linux ARM64 (Debian 12 virtual
machines, with a two-player session through a local relay in each), and in
the Android emulator (x86_64), where the game was also started with its
picture and left cleanly.
Not checked
- The sound was measured, not listened to. The reserve and the speed
correction are new: tell us if anything sounds different. - The transparencies in the scenes the players reported (enemies appearing, a
fallen companion, doors): the bench reproduces their patterns, not those
scenes. - A real 60 Hz display, a real graphics driver reset, a real controller, a
phone. - Android on a phone (ARM64): the emulator runs the x86_64 half.
- Everything listed as not checked in 0.7 (combat online, a hosted server).
ShiningSource 0.7
ShiningSource 0.7
Native port of Shining Soul II (Europe) for Windows x64 and Android. No ROM,
BIOS or game data is included: you supply your own cartridge dump (SHA-1
aa1288be9257337abdfe3034898cf6c7aa778fbc).
Online, 0.7 only meets 0.7. Every player in a room needs this version.
Online
- One order of messages for everybody. Until now each player's messages
arrived in order, but how they interleaved with the other players' differed
from machine to machine. Every message now goes through player 1 and every
machine acts on them in the same order. - Enemies that only some players had. The game can start two enemies at a
time; several arriving together lost the third on that machine: an enemy the
others saw and it did not. They wait their turn now. - Less latency: what a burst of the game's messages needs (a map entry,
several enemies acting) leaves and is acted on in one frame. - More ways to meet, on the launcher's Online page: the official server
(the default), Host on this PC (starts the server that comes with the
port and lists this PC's addresses with a Copy button) and Connect by IP
(paste the host's address). To host for players outside your own network,
UDP port 47900 has to reach your PC. - The display paces the game online too (since online became the default, a
60 or 120 Hz display was repeating a frame every few seconds for everybody).
Sound
- The sound engine was rewritten after the cartridge's own driver. A song
that is stopped and asked for again continues instead of starting over (the
game does that at every room change and menu close); the Game Boy style
channels sound as the driver makes them; samples that played 27% sharp are
in tune; vibrato and reverb are there. All 74 pieces of music and the
effects pass an audit of the whole song table. - Music in multiplayer. In a game started from the multiplayer lobby the
cartridge plays music only in the town and the first field: every other
stage is silent by the game's own choice. The port lets each stage play the
song it has in a single-player game (SS_MP_MUSIC=0gives the cartridge's
silence back).
Inside the game
- Options menu: Escape, Select + Start on a controller, or Back on Android.
Screen mode, border or sides, full screen, VSync, volume, smoothing, skip
scene, quit; each applies at once and is remembered. Alone the game is
paused; online it runs on behind the menu. Escape no longer closes the game. - The port's own texts use the game's typeface, read from your ROM while
you play. - Skip scene covers long dialogue sequences (the guide in the first field,
and the others told the same way). It stops at a question instead of
answering for you. Online it is a vote, and the windows stop waiting instead
of anything running fast. - Experimental (launcher, page Quality of life, off by default): LT / RT
step the L and R bars backwards; D and F on the keyboard.
Picture
- Correct pacing at every refresh rate: a multiple of 60 Hz paces the game,
any other rate from 59 Hz up keeps the game's clock with VSync, and a slower
display no longer slows the game down. - The half-strength copy of a sprite the game alternates moves on with it, so
a label over a walking companion is no longer blurred; it also follows the
camera. - Where a map ends beside the view the fade is wider and curved; the sides
around a dark screen sink and rise with the game's own fade.
Also
- Android: the game no longer aborts on its way out.
- The Android package always carries both game images built from the same
source.
Install
- Windows: unpack
ShiningSource-0.7-windows-x64.zipand start
ShiningSource.exe.ss_relay.exein the same folder is the server that
Host on this PC starts. - Android: install
ShiningSource-0.7-android.apk(arm64-v8a and x86_64,
Android 5 or later; signed with a debug key, so Android asks to allow it).
Checked
- The scripted 32,000-frame play-through gives
5F1DB1A8, and the same sound,
on the development build and Windows x64. - Online on one machine, 2 to 4 players with latency and loss simulated:
every machine acts on the messages in the same order in every session; the
voted skips of the introduction and of the guide's dialogue work for three
players. - The options menu with a window: opens, pauses, changes take effect and are
written back. - The sound audit of all 428 entries of the song table.
Not checked
- Combat online with the new order. The scripted sessions do not reach a
place where enemies die and respawn, so the two fixes for enemies rest on
reading the game's code. A real session is the test. - Music by ear: everything about sound was measured, nothing listened to. The
area the players reported silent was not reached by a scripted run. - A game played through a server hosted from the launcher.
- A real controller (the menu's Select + Start, LT / RT).
- This package on Android (0.6 was run in the emulator).
- Sprites the game alternates, in the scenes the players reported: a test bench
for them is being built.
Known
- Joining a game in progress is not possible.
- When player 1 leaves, the session ends for everybody and the game starts
again at the title.