Skip to content

Releases

ShiningSource 0.8.5

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 19:54

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 to ux0:data/ShiningSource/ (any name ending in .gba),
    start it, and send us ux0: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 5F1DB1A8 and 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.zip and 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.gz and run
    ./ss2_linux64 your-rom.gba (no launcher yet; LINUX.txt has the settings).
  • PS Vita: see above.

ShiningSource 0.8.4

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 18:05

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.
  • 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 5F1DB1A8 and 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.zip and 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.gz and run
    ./ss2_linux64 your-rom.gba (no launcher yet; LINUX.txt has the settings).

ShiningSource 0.8.1

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 16:47

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 5F1DB1A8 and 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.zip and 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.gz and run
    ./ss2_linux64 your-rom.gba (no launcher yet; LINUX.txt has the settings).

ShiningSource 0.8

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 16:12

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_relay is 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=1 for 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.md has 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 5F1DB1A8 and 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.zip and 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.gz and run
    ./ss2_linux64 your-rom.gba (no launcher yet; LINUX.txt has 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 Pre-release
Pre-release

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 14:58

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 folder saves at
    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 gives 5F1DB1A8 and 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.zip and start
    ShiningSource.exe.
  • Linux x64: unpack ShiningSource-0.7.5-linux-x64.tar.gz and run
    ./ss2_linux64 your-rom.gba (no launcher yet; LINUX.txt has 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 Pre-release
Pre-release

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 12:49

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 gives 5F1DB1A8 and
    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.zip and start
    ShiningSource.exe.
  • Linux x64: unpack ShiningSource-0.7.4-linux-x64.tar.gz and run
    ./ss2_linux64 your-rom.gba (no launcher yet; LINUX.txt has 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 Pre-release
Pre-release

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 10:00

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 gives 5F1DB1A8 and the same sound there too.
  • Windows x64: the play-through gives 5F1DB1A8 and 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.zip and 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 Pre-release
Pre-release

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 09:47

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=0 turns
    it off.

Install

  • Windows: unpack ShiningSource-0.7.2-windows-x64.zip and 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 Pre-release
Pre-release

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 08:53

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.log no 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.zip and 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 Pre-release
Pre-release

Choose a tag to compare

@MatyMeatBoy MatyMeatBoy released this 13 Nov 06:57

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=0 gives 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.zip and start
    ShiningSource.exe. ss_relay.exe in 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.