Homeentitysong

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, +7 or +14 (one per voice); effects use one voice (fire), two (plonk) or three (bells, explosion), so a shot can sound over another effect. playSound runs 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 and EOR #$DF, 3 subtract and EOR #$12, 4 add oscillator-3 noise $D41B AND $0F to 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 $E0F0 byte-swapped every frame; plonk = triangle + ring modulation ($15) with a looped up/down pitch step of $0D on 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).

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

source file wiki/entities/hunters-moon.md · graph