Hunter's Moon (Thalamus, 1987)
Thalamus's 1987 shooter — "128 levels", code, graphics and sound effects by martin-walker, music by matt-gray — whose sound-effects engine Stefano Tognon reverse-engineered in sidin #14 because its effects ("the hives seems to be true living") are, in his words, "the most realistic you can find into a game" (source: s-sidin14-hunters-moon). Gray lists it among his 1987 freelance jobs (source: s-c64com-matt-gray-interview).
Facts#
- The music runs in Gray's own driver (matt-gray-player); the effects in Walker's separate engine, which must be initialised before play because it clears the SID. Tognon suggests the effects' use of all three voices "is why music is not played during game play" (source: s-sidin14-hunters-moon).
- The Serpent Demo file — a Gray demo tune of the same engine generation — carries three unused tracks and two undeclared patterns that Tognon identifies as "from Hunter's Moon tune (Serpent Demo was spread across the Hunter's Moon game)" (source: s-sidin15-serpent-demo-player).
- Tognon's listing is a PSID with 16 "songs" = 16 effects: explosion, star cell, choose system, alternative choose, bell, short tick, long drill, plonk, fire, bell 2, bonus, launching, after bonus, stage start, middle, enemy explosion ("Hunter's Moon / Martin Walker / 1987 Thalamus", code at
$0900, "extracted from original TAP"; sid-format; source: s-sidin14-hunters-moon).
The sound-effects engine#
- Trigger: store a table index into
indexInTable,+7or+14(one per voice); effects use one voice (fire), two (plonk) or three (bells, explosion), so a shot can sound over another effect.playSoundruns once per frame: load the registers from the tables on a new index, count the loop, apply the effects (source: s-sidin14-hunters-moon; sid-player-routine). - Tables (13 × 32 entries): AD, SR, pulse width packed
XY→$0YX0, frequency lo/hi, control register at start and a second one after the loop counter expires, loop length, frequency lo/hi step, frequency effect 1–6 (add, subtract, looped add/subtract, add-then-subtract, subtract-then-add), pulse step (bounce$08xx–$0Exx), frequency effect 2 (1 swap lo/hi bytes, 2 subtract andEOR #$DF, 3 subtract andEOR #$12, 4 add oscillator-3 noise$D41B AND $0Fto the high byte) (source: s-sidin14-hunters-moon; randomization-and-probability, pulse-width-modulation). - Long effects: explosion (
$0C/$0D/$0E) and star cell arm a 50-frame ($32) window in which voices 2–3 accept no new index (source: s-sidin14-hunters-moon). - Two decoded effects: fire = index
$12, triangle, SR$30, loop 6, frequency$E0F0byte-swapped every frame; plonk = triangle + ring modulation ($15) with a looped up/down pitch step of$0Don voice 2 against a silent triangle modulator on voice 3 stepping the opposite way — "a vibrato like sound, but is uses ring modulation" (source: s-sidin14-hunters-moon; ring-modulation-and-sync).
Related#
matt-gray · matt-gray-player · martin-walker · sid-player-routine · ring-modulation-and-sync · randomization-and-probability · driller · sanxion · sidin · sound-effects
Sources#
s-sidin14-hunters-moon · s-sidin15-serpent-demo-player · s-c64com-matt-gray-interview