304 lines
11 KiB
Plaintext
304 lines
11 KiB
Plaintext
{{ ---------------------------------------------------------------------------------------------------------
|
|
|
|
Hive-Computer-Projekt: Boulder Dash - Hive-Version
|
|
|
|
http://hive-project.de
|
|
|
|
Basierend auf dem Fanprojekt diverser Propellerköpfe:
|
|
|
|
http://forums.parallax.com/forums/default.aspx?f=33&m=263404
|
|
|
|
Besonderer Dank an Pex "Mahoney" Tufvesson für die coole Musik!:
|
|
|
|
http://mahoney.c64.org
|
|
http://www.livet.se/visa
|
|
|
|
|
|
Tasten:
|
|
|
|
ESC Stop Button A
|
|
Space Pause Button B
|
|
LShift Start
|
|
LCTRL Select
|
|
Cursor
|
|
|
|
Anpassungen für den Hive
|
|
|
|
09-01-2010 - Entfernung der Hardwareerkennung
|
|
- Anpassung Konfiguration an Hive/Bellatrix
|
|
- Gamecontr. entfernt
|
|
- Auskommentierung Sound
|
|
12-01-2010 - Soundadapter optimiert
|
|
- Scrolltext im Titelbildschirm eingefügt
|
|
19-04-2010 - Anpassung an TriOS: Boulder läuft jetzt auch aus dem Verzeichnis. Bedingt durch das
|
|
neue, etwas trägere WAV-Soundsystem, habe ich einige Effekte durch HSS/SFX ersetzt.
|
|
|
|
Zur Hive-Version: Das Game an sich - also der ursprüngliche Basiscode aus dem Parallax-Forum - läuft
|
|
auf einem einzigen Propellerchip! Was war zu tun um diese Version an den Hive anzupassen:
|
|
|
|
1. Der Code kann im wesentlichen fast ausschließlich auf Bellatrix laufen. Dafür müssen die entsprechenden
|
|
Belegungen der IO-Pins für Video und Keyboard angepasst werden.
|
|
2. Da Bellatrix keinen Sound ausgeben kann, sondern diese Aufgabe im Hive Administra übernimmt, muß die
|
|
Soundausgabe angepasst werden. Im Originalcode übernimmt das Objekt "sound.spin" diese Aufgabe - welches
|
|
wieder den SIDemu in einer getrennten Cog startet. Hier zeigt sich die Stärke der SPIN-Objekte: Für die
|
|
Anpassung brauchte ich einfach nur ein neues Objekt gleicher Struktur definieren, ohne das Hauptprogramm
|
|
zu ändern. Dieses neue Soundobjekt startet ebenfalls eine Cog, welche einzig die Aufgabe hat die Kommunikation
|
|
zu Regnatix/Administra zu realisieren.
|
|
3. Regnatix-Code: Tja, die Königin kann bei der ganzen Sache Däumchen drehen, denn sie hat nur folgend Aufgaben
|
|
in einer einzigen Cog zu bewältigen:
|
|
- Bellatrix-Code laden
|
|
- SFX-Slots in Administra initialisieren
|
|
- Warten bis Bellatrix einen Ton von sich geben möchte und Übermittlung dieser
|
|
Tonesequenz an Administra
|
|
|
|
Damit werden natürlich auf der einen Seite massig Ressourcen in Bellatrix gegenüber dem ursprünglichen Code frei
|
|
und es sind durch die Verwendung von HSS/SFX + Waveplayer + SDCard mehr Möglichkeiten gegeben.
|
|
|
|
Bellatrix-Code : 20,5 KByte
|
|
Regnatix-Code : 3,2 KByte
|
|
|
|
Bei diesen Werten ist zu beachten, dass der Regnatix das blanke IOS mit 2,6 KByte eingebunden hat - ohne Optimierung,
|
|
denn ein Großteil der IOS-Routinen sind in diesem Fall ungenutzt.
|
|
|
|
Zeitaufwand : ca. 3 nette Abende ;)
|
|
|
|
drohne235
|
|
|
|
--------------------------------------------------------------------------------------------------------- }}
|
|
|
|
|
|
OBJ
|
|
ios : "ios"
|
|
' debugx : "pterm" 'debug
|
|
|
|
CON
|
|
|
|
_CLKMODE = XTAL1 + PLL16X
|
|
_XINFREQ = 5_000_000
|
|
|
|
CON
|
|
|
|
_music_on = 1
|
|
_music_off = 2
|
|
_moving_sound1 = 3
|
|
_moving_sound2 = 4
|
|
_boulder_sound = 5
|
|
_diamond_sound = 6
|
|
_pick_sound = 7
|
|
_explosion_sound = 8
|
|
_crack_sound = 9
|
|
_magic_wall_sound_on = 10
|
|
_magic_wall_sound_off = 11
|
|
_amoeba_sound_on = 12
|
|
_amoeba_sound_off = 13
|
|
_time_ending_sound = 14
|
|
_bonus_point_sound = 15
|
|
_cover_sound = 16
|
|
|
|
VAR
|
|
|
|
byte parastr[64]
|
|
byte fl_musicon
|
|
|
|
PUB main | a,b,c,i,n,stradr
|
|
|
|
'initialisierung
|
|
ios.start 'ios initialisieren
|
|
' ios.startram 'code für test im ram, sollte bei bin-datei auskommentiert werden
|
|
|
|
' debugx.start(115200)
|
|
|
|
ios.admsetsyssnd(0) 'systemsounds abschalten
|
|
ios.sddmact(ios#DM_USER) 'wieder in userverzeichnis wechseln
|
|
ios.print(string("Boulder Dash - Loading..."))
|
|
|
|
'bellatrix-code laden
|
|
ios.parastart
|
|
parastr[0] := 0
|
|
ios.paranext(@parastr)
|
|
|
|
case parastr[0]
|
|
"n":
|
|
ios.belload(@beln) 'grafiktreiber ntsc laden
|
|
other:
|
|
ios.belload(@belp) 'grafiktreiber pal laden
|
|
|
|
ios.sddmact(ios#DM_USER) '???
|
|
|
|
'sfx-slots setzen
|
|
ios.sfx_setslot(@fx_moving_sound1, 0)
|
|
ios.sfx_setslot(@fx_moving_sound2, 1)
|
|
ios.sfx_setslot(@fx_boulder_sound,2)
|
|
ios.sfx_setslot(@fx_diamond_sound,3)
|
|
ios.sfx_setslot(@fx_pick_sound,4)
|
|
ios.sfx_setslot(@fx_amoeba_sound,5)
|
|
ios.sfx_setslot(@fx_time_sound,6)
|
|
ios.sfx_setslot(@fx_cover_sound,7)
|
|
ios.sfx_setslot(@fx_bonus,8)
|
|
ios.sfx_setslot(@fx_crack,9)
|
|
ios.sfx_setslot(@fx_explosion,10)
|
|
ios.sfx_setslot(@fx_wall,11)
|
|
|
|
|
|
'soundadapter
|
|
repeat
|
|
case ios.bus_getchar2
|
|
|
|
_music_on: 'titelmusik
|
|
ios.admsetsound(ios#SND_HSSOFF) 'hss ausschalten
|
|
ios.admsetsound(ios#SND_WAVON) 'wav einschalten
|
|
n := ios.wav_play(@wav1)
|
|
fl_musicon := 1
|
|
|
|
_music_off:
|
|
if fl_musicon
|
|
ios.wav_stop
|
|
ios.admsetsound(ios#SND_WAVOFF) 'wav ausschalten
|
|
ios.admsetsound(ios#SND_HSSON) 'hss anschalten
|
|
fl_musicon := 0
|
|
|
|
_moving_sound1:
|
|
ios.sfx_fire(0,1)
|
|
|
|
_moving_sound2:
|
|
ios.sfx_fire(1,1)
|
|
|
|
_boulder_sound:
|
|
ios.sfx_fire(2,1)
|
|
waitcnt(clkfreq / 30 + cnt)
|
|
|
|
_diamond_sound:
|
|
b?
|
|
b := b & $FF
|
|
byte[@fx_diamond_sound+2] := b
|
|
ios.sfx_setslot(@fx_diamond_sound,3)
|
|
ios.sfx_fire(3,1)
|
|
waitcnt(clkfreq / 30 + cnt)
|
|
|
|
_pick_sound:
|
|
ios.sfx_fire(4,2)
|
|
waitcnt(clkfreq / 3 + cnt)
|
|
|
|
_explosion_sound: 'explosion
|
|
ios.sfx_fire(10,1)
|
|
waitcnt(clkfreq * 3 + cnt)
|
|
|
|
_crack_sound: 'eingang
|
|
ios.sfx_fire(9,1)
|
|
waitcnt(clkfreq / 3 + cnt)
|
|
|
|
_magic_wall_sound_on:
|
|
ios.sfx_fire(11,2)
|
|
|
|
_magic_wall_sound_off:
|
|
|
|
_amoeba_sound_on:
|
|
ios.sfx_fire(5,2)
|
|
|
|
_amoeba_sound_off:
|
|
|
|
_time_ending_sound:
|
|
ios.sfx_fire(6,2)
|
|
|
|
_bonus_point_sound: 'bonus
|
|
ios.sfx_fire(8,2)
|
|
waitcnt(clkfreq * 4 + cnt)
|
|
|
|
_cover_sound:
|
|
b?
|
|
b := b & $FF
|
|
byte[@fx_cover_sound+2] := b
|
|
ios.sfx_setslot(@fx_cover_sound,7)
|
|
ios.sfx_fire(7,1)
|
|
waitcnt(clkfreq / 30 + cnt)
|
|
|
|
|
|
|
|
DAT
|
|
|
|
wav1 byte "bd.wav",0 ' titelmusik
|
|
|
|
beln byte "bd_ntsc.bel",0 ' bella-code, ntsc-version
|
|
belp byte "bd_pal.bel",0
|
|
|
|
'basisschwingung modulation hüllkurve
|
|
'Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
|
|
fx_moving_sound1 byte $06, $02, $01, $08, $00, $00, $00, $00, $FF, $00, $00, $D0
|
|
fx_moving_sound2 byte $06, $02, $01, $0F, $00, $00, $00, $00, $FF, $00, $00, $D0
|
|
fx_boulder_sound byte $06, $01, $FF, $0F, $01, $03, $01, $00, $FF, $00, $00, $80
|
|
fx_diamond_sound byte $01, $01, $E0, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
fx_pick_sound byte $01, $01, $E0, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
fx_explosion_sound byte $01, $01, $E0, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
fx_crack_sound byte $06, $02, $10, $0F, $00, $00, $00, $00, $FF, $00, $00, $D0
|
|
fx_magic_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
fx_amoeba_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
fx_time_sound byte $02, $05, $FF, $0F, $10, $00, $01, $00, $FF, $00, $00, $40
|
|
fx_bonus_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
fx_cover_sound byte $01, $01, $80, $0F, $00, $00, $00, $00, $FF, $00, $00, $80
|
|
|
|
fx_bonus
|
|
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
|
|
byte $03,$03,$FF,$0F,$02,$00,$05,$00,$FF,$01,$50,$11
|
|
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
|
|
|
|
fx_crack
|
|
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
|
|
byte $01,$22,$01,$0F,$11,$00,$05,$00,$55,$01,$50,$11
|
|
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
|
|
|
|
fx_explosion
|
|
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
|
|
byte $06,$04,$10,$0F,$00,$00,$00,$00,$FF,$01,$50,$11
|
|
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
|
|
|
|
fx_wall
|
|
' Wav Len Fre Vol LFO LFW FMa AMa Att Dec Sus Rel
|
|
byte $04,$FF,$FF,$0F,$01,$00,$01,$00,$FF,$06,$20,$00
|
|
byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
|
|
|
|
|
|
DAT
|
|
{
|
|
|
|
sfx-struktur:
|
|
|
|
wav len freq vol grundschwingung
|
|
lfo lfw fma ama modulation
|
|
att dec sus rel hüllkurve
|
|
seq (optional)
|
|
|
|
wav wellenform
|
|
0 sinus (0..500hz)
|
|
1 schneller sinus (0..1khz)
|
|
2 dreieck (0..500hz)
|
|
3 rechteck (0..1khz)
|
|
4 schnelles rechteck (0..4khz)
|
|
5 impulse (0..1,333hz)
|
|
6 rauschen
|
|
len tonlänge $0..$fe, $ff endlos
|
|
freq frequenz $00..$ff
|
|
vol lautstärke $00..$0f
|
|
|
|
lfo low frequency oscillator $ff..$01
|
|
lfw low frequency waveform
|
|
$00 sinus (0..8hz)
|
|
$01 fast sine (0..16hz)
|
|
$02 ramp up (0..8hz)
|
|
$03 ramp down (0..8hz)
|
|
$04 square (0..32hz)
|
|
$05 random
|
|
$ff sequencer data
|
|
fma frequency modulation amount
|
|
$00 no modulation
|
|
$01..$ff
|
|
ama amplitude modulation amount
|
|
$00 no modulation
|
|
$01..$ff
|
|
att attack $00..$ff
|
|
dec decay $00..$ff
|
|
sus sustain $00..$ff
|
|
rel release $00..$ff
|
|
|
|
|
|
|
|
} |