260 lines
9.7 KiB
Plaintext
260 lines
9.7 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
|
|
|
|
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"
|
|
|
|
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]
|
|
|
|
PUB main | a,b,c
|
|
|
|
'initialisierung
|
|
ios.start 'ios initialisieren
|
|
' ios.startram 'code für test im ram, sollte bei bin-datei auskommentiert werden
|
|
ios.admsetsyssnd(0) 'systemsounds abschalten
|
|
ios.sddmact(ios#DM_USER) 'wieder in userverzeichnis wechseln
|
|
ios.print(string("Boulder Dash - Loading..."))
|
|
waitcnt(clkfreq*3+cnt)
|
|
|
|
'bellatrix-code laden
|
|
ios.parastart
|
|
parastr[0] := 0
|
|
ios.paranext(@parastr)
|
|
|
|
case parastr[0]
|
|
"n":
|
|
waitcnt(cnt + 200_000_000) 'warte bis bel fertig ist
|
|
ios.belload(@beln) 'grafiktreiber ntsc laden
|
|
other:
|
|
waitcnt(cnt + 200_000_000) 'warte bis bel fertig ist
|
|
ios.belload(@belp) 'grafiktreiber pal laden
|
|
|
|
'sfx-slots setzen
|
|
ios.sfx_setslot2(@fx_moving_sound1, 0)
|
|
ios.sfx_setslot2(@fx_moving_sound2, 1)
|
|
ios.sfx_setslot2(@fx_boulder_sound,2)
|
|
ios.sfx_setslot2(@fx_diamond_sound,3)
|
|
ios.sfx_setslot2(@fx_pick_sound,4)
|
|
ios.sfx_setslot2(@fx_explosion_sound,5)
|
|
ios.sfx_setslot2(@fx_crack_sound,6)
|
|
ios.sfx_setslot2(@fx_magic_sound,7)
|
|
ios.sfx_setslot2(@fx_amoeba_sound,8)
|
|
ios.sfx_setslot2(@fx_time_sound,9)
|
|
ios.sfx_setslot2(@fx_bonus_sound,10)
|
|
ios.sfx_setslot2(@fx_cover_sound,11)
|
|
|
|
'soundadapter
|
|
repeat
|
|
ios.bus_putchar2($1) 'kommando: sound abfragen
|
|
a := ios.bus_getchar2 'soundcode einlesen
|
|
case a
|
|
_music_on: 'titelmusik
|
|
ios.wav_play(@wav1)
|
|
_music_off:
|
|
ios.wav_stop
|
|
_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_setslot2(@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:
|
|
ios.wav_play(@wav3) 'explosion
|
|
waitcnt(clkfreq * 2 + cnt)
|
|
ios.wav_stop
|
|
_crack_sound:
|
|
ios.wav_play(@wav4) 'eingang
|
|
waitcnt(clkfreq * 1 + cnt)
|
|
ios.wav_stop
|
|
_magic_wall_sound_on:
|
|
_magic_wall_sound_off:
|
|
_amoeba_sound_on:
|
|
_amoeba_sound_off:
|
|
_time_ending_sound:
|
|
ios.sfx_fire(9,2)
|
|
_bonus_point_sound:
|
|
ios.wav_play(@wav2) 'bonus
|
|
waitcnt(clkfreq * 2 + cnt)
|
|
ios.wav_stop
|
|
_cover_sound:
|
|
b?
|
|
b := b & $FF
|
|
byte[@fx_cover_sound+2] := b
|
|
ios.sfx_setslot2(@fx_cover_sound,15)
|
|
ios.sfx_fire(15,1)
|
|
waitcnt(clkfreq / 30 + cnt)
|
|
|
|
|
|
|
|
DAT
|
|
|
|
wav1 byte "bd2.wav",0 ' titelmusik
|
|
wav2 byte "bd3.wav",0 ' bonus
|
|
wav3 byte "bd4.wav",0 ' boom
|
|
wav4 byte "bd5.wav",0 ' eingang
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
} |