Subversion Repositories forest

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/trunk/_private/_old/Baumwand-Experiment/Forest.DBA
0,0 → 1,1016
rem Nightmare Forest
rem by Daniel Marschall
 
rem ToDo:
rem Nebel-Himmel-Probleme
rem DynArray
rem Steifen am Boden
rem Radar wackelt
rem Verifizieren der Dateien
rem :startgame weglassen
rem Streifen am Boden und am Himmel...
rem Baum teiltransparenz
rem Radar lieber als Matrix. Viele Probleme wie z.B. mit Skorpion transparenz
rem Unscharfes Radar, Radar ganz dyn. zeichnen? Rader stay on top
rem Menü: musik aus --> an: loop von position 0!
rem Horizont machen...
rem breitbild
rem mausumkehrung einstellbar
rem die gegner kommen erst nach einer bestimmten zeit. spawnen weit weg vom spieler
rem stars.bmp (5000px) braucht lange zum laden. 1000px ist verpixelt
 
// Read configuration
open to read 1, "config.txt"
read string 1, dummy$ : rem header
framerate = fileReadInt(1)
clockSpeedFactor = fileReadInt(1)
clockBlinksPerSecond = fileReadInt(1)
clockShowSeconds = fileReadInt(1)
beginClockSeconds = fileReadInt(1)
enemyRotateSmoothness = fileReadInt(1)
maxRunEnergy = fileReadInt(1)
waterLevel = fileReadInt(1)
waterMovement = fileReadInt(1)
sound3dVolumeCor = fileReadInt(1)
invertMouse = fileReadInt(1)
test = fileReadInt(1)
camerarange = fileReadInt(1)
close file 1
 
rem SCHEISSE! bei 3000 ist die framerate total am arsch! was mach ich nur?
rem #constant cMaxTrees 3000
#constant cMaxTrees 200
 
#constant cMapSizeX 10000
#constant cMapSizeZ 10000
#constant idxMonsterBase 1000
 
#constant cMaxEnemies 20 : rem todo: 0 heißt 1 , das ist verwirrend
 
rem Setup & Startbildschirm
if check display mode( desktop width(), desktop height(), screen depth() ) then set display mode desktop width(), desktop height(), screen depth()
hide mouse
 
randomize timer()
 
Sync On
Sync Rate framerate
 
load bitmap "bitmap\titlescreen.jpg"
 
gosub _menu
 
_startgame:
 
ink rgb(255, 230, 0), 0
load bitmap "bitmap\titlescreen.jpg"
text 28, 550, "Level wird geladen..."
 
sync
 
rem Setup
Set camera range 1, camerarange
Autocam off
 
runEnergy# = maxRunEnergy
clockSeconds = beginClockSeconds
 
gosub _create_floor
gosub _create_sky
gosub _create_trees
gosub _draw_trees
gosub _create_water
gosub _create_radar
 
rem Bildschirm neu aufbauen
cls
sync
 
rem Lichtversuch
make light 1
 
rem Radar vorbereiten
radarpointcolor = 150
 
gosub _create_enemies
gosub _setupClock
 
Rem Forest atmo
load sound "sound\forestbg.wav", 1
loop sound 1
 
load sound "music\pause.wav", 5
 
load sound "sound\walk.wav", 10
 
rem Pause Menu
load image "bitmap\titlescreen.jpg",95
sprite 95,0,0,95
set sprite 95, 1, 0
hide sprite 95
 
rem Hauptschleife
do
Disable EscapeKey
gosub _handle_weather
gosub _handle_player
gosub _handle_radar
gosub _handle_enemies
gosub _handleClock
if EscapeKey() = 1
repeat
sync
until not (EscapeKey() = 1)
gosub _pausemenu
endif
sync
loop
 
_pausemenu:
rem TODO: geht nicht
rem show sprite 95
rem load bitmap "bitmap\titlescreen.jpg",0
gosub _stop_game_sounds
loop sound 5
repeat
text 28, 550, "Pause. ESC=Weiter. Runter=Ende."
sync
if DownKey() = 1
goto _exit
ENDIF
UNTIL EscapeKey() = 1
repeat
sync
until not (EscapeKey() = 1)
stop sound 5
loop sound 1
hide sprite 95
rem TODO: das bringt nix. wenn man die maus bewegt, wird nach der pause die kamera gescrollt
set cursor 0, 0
return
 
_handle_weather:
rem Wetter
color ambient light rgb(64,64,128)
rem set ambient light 1
set ambient light 50
if fog available() = 1
fog on
fog distance 600
fog color rgb(0, 0, 0)
endif
if test = 1
SET MATRIX WIREFRAME ON 1
SET MATRIX WIREFRAME ON 3
endif
rem test
remstart
xx = xx - 1
if xx <= 0 then xx = 100
set object specular 126, 0
SET OBJECT SPECULAR POWER 126,xx
 
set object specular 127, 0
SET OBJECT SPECULAR POWER 127,xx
remend
rem fade object 126, xx
rem fade object 127, xx
rem test trees
remstart
pX# = Camera Position X()
pZ# = Camera Position Z()
 
eX# = Object Position X(126)
eZ# = Object Position Z(126)
 
deltaX# = pX#-eX#
deltaZ# = pZ#-eZ#
 
aa# = atanfull(deltaX#, deltaZ#)
rotate object 126, 0, aa#, 0
remend
 
rem Stars are moving
scroll object texture 2, 0.00002, 0
rem TODO: doch lieber eine plane mit scroll object texture?
rem man kann "fog" einschalten, aber "ambient light" (problem) ausmachen per set object
if waterMovement > 0
if waterdir=0
watermov=watermov+1
if watermov=waterMovement
waterdir=1
endif
ENDIF
if waterdir=1
watermov=watermov-1
if watermov=-1
waterdir=0
endif
ENDIF
endif
position matrix 3, watermov, waterLevel, watermov
return
 
_handle_enemies:
pX# = Camera Position X()
pZ# = Camera Position Z()
for t = 0 to cMaxEnemies
eX# = Object Position X(idxMonsterBase+t)
eY# = Object Position Y(idxMonsterBase+t)
eZ# = Object Position Z(idxMonsterBase+t)
eRX# = Object Angle X(idxMonsterBase+t)
eRY# = Object Angle Y(idxMonsterBase+t)
eRZ# = Object Angle Z(idxMonsterBase+t)
deltaX# = pX#-eX#
deltaZ# = pZ#-eZ#
 
rem TODO: cor file
yPosOffset# = 20
dist# = sqrt( deltaX#*deltaX# + deltaZ#*deltaZ# )
if clockSeconds > 1
if not sound playing(idxMonsterBase+t)
set sound volume idxMonsterBase+t, 0
rem TODO: beliebiges startoffset?
loop sound idxMonsterBase+t
endif
endif
rem The mixing of 3dsound is bullshit (too loud from far distance, and not very loud on close distance),
rem so we mix the volume ourself
if sound3dVolumeCor>0 and dist#<sound3dVolumeCor then set sound volume idxMonsterBase+t, (1-(dist#/sound3dVolumeCor))*100
if dist# > 10 : rem <-- at least a distance of 10 so that atanfull() does not bug, when deltas becomes 0
if dist# < enemyAwarenessRadius(t)
enemyAngle(t) = atanfull(deltaX#, deltaZ#)
enemyAngle(t) = WrapValue(enemyAngle(t)+180)
enemyCurSpeed(t) = enemyMaxSpeed(t)
else
if enemyWalkTimeout(t) <= 0
enemyWalkTimeout(t) = RndBetween(enemyWalkTimeoutMin(t), enemyWalkTimeoutMax(t))
enemyAngle(t) = RndBetween(0,359)
enemyCurSpeed(t) = RndBetween(0, enemyMaxSpeed(t))
ENDIF
enemyWalkTimeout(t) = enemyWalkTimeout(t) - 1
endif
if enemyCurSpeed(t) = 0
gosub scorpChangeToIdle
else
gosub scorpChangeToWalk
rem TODO: also make animation slower/faster
endif
 
a# = WrapValue(enemyAngle(t) + 180)
XTest# = Newxvalue(eX#, a#, enemyCurSpeed(t))
ZTest# = Newzvalue(eZ#, a#, enemyCurSpeed(t))
if XTest# > 0 and XTest# < cMapSizeX then eX# = XTest#
if ZTest# > 0 and ZTest# < cMapSizeZ then eZ# = ZTest#
if XTest# <= 0 or XTest# >= cMapSizeX or ZTest# <= 0 or ZTest# >= cMapSizeZ
rem Kehrtwende, um den Kartenrand zu verlassen
enemyAngle(t) = WrapValue(enemyAngle(t)+180)
enemyWalkTimeout(t) = RndBetween(enemyWalkTimeoutMin(t), enemyWalkTimeoutMax(t))
enemyCurSpeed(t) = RndBetween(0, enemyMaxSpeed(t))
endif
eY# = floorHeight#(eX#, eZ#) + yPosOffset#
Position Object idxMonsterBase+t, eX#, eY#, eZ#
Position Sound idxMonsterBase+t, eX#, eY#, eZ#
eRY# = smoothRotate#(eRY#, enemyAngle(t), enemyRotateSmoothness)
rotate object idxMonsterBase+t, eRX#, eRY#, eRZ#
endif
next
return
 
_handle_player:
set cursor 0, 0
oldcAY# = cAY#
oldcAX# = cAX#
X# = camera position x()
Y# = camera position y()
Z# = camera position z()
 
if invertMouse = 1
cAX# = WrapValue(cAX# - MousemoveY() * 0.2)
else
cAX# = WrapValue(cAX# + MousemoveY() * 0.2)
endif
cAY# = WrapValue(cAY# + MousemoveX() * 0.2)
cAZ# = Camera angle Z()
 
rem Sprungroutine
jumpBoost = 1
if sprungdelay > 0 then dec sprungdelay
if MouseClick() = 2 and sprung = 0 and sprungrev = 0 and sprungdelay = 0 and obentimer = 0 then sprung = sprung + 5
if sprung > 0
if sprungrev = 0
if obentimer = 0
if sprung < 70 then sprung = sprung + 5
if sprung > 69 then sprung = sprung + 2
endif
if sprung > 79 and obentimer < 5 then obentimer = obentimer + 1
if obentimer > 2
obentimer = 0
sprungrev = 1
endif
else
if sprungrev = 1
sprung = sprung - 5
if sprung < 1
sprungrev = 0
sprung = 0
sprungdelay = 15
endif
endif
endif
endif
rem Laufen
speedboost# = 1
 
if upPressed()+downPressed()+leftPressed()+rightPressed() = 0
runEnergy# = runEnergy# + 2
stop sound 10
else
if not sound playing(10) then loop sound 10
energyChanged = 0
if ShiftKey()+ControlKey() = 1 : rem shift+control at the same time = walk normal
rem TODO: es ruckelt trotzdem noch
if ControlKey()=1 and runEnergy#>0 : rem Energy >1 , damit es nicht ruckelt (run-walk-run-walk-run-walk) . 3 = walk regain
speedboost# = 2
runEnergy# = runEnergy# - 1
energyChanged = 1
endif
if ShiftKey()=1
speedboost# = 0.5
runEnergy# = runEnergy# + 0.5
energyChanged = 1
endif
endif
if not energyChanged then runEnergy# = runEnergy# + 1
if upPressed()
XTest# = Newxvalue(X#, cAY#, 7*speedboost#)
ZTest# = Newzvalue(Z#, cAY#, 7*speedboost#)
if XTest# > 0 and XTest# < cMapSizeX then X# = XTest#
if ZTest# > 0 and ZTest# < cMapSizeZ then Z# = ZTest#
endif
if downPressed()
XTest# = Newxvalue(X#, Wrapvalue(cAY# - 180), 5*(speedboost#/2))
ZTest# = Newzvalue(Z#, Wrapvalue(cAY# - 180), 5*(speedboost#/2))
if XTest# > 0 and XTest# < cMapSizeX then X# = XTest#
if ZTest# > 0 and ZTest# < cMapSizeZ then Z# = ZTest#
endif
if leftPressed()
XTest# = Newxvalue(X#, Wrapvalue(cAY# - 90), 5*(speedboost#/1.3))
ZTest# = Newzvalue(Z#, Wrapvalue(cAY# - 90), 5*(speedboost#/1.3))
if XTest# > 0 and XTest# < cMapSizeX then X# = XTest#
if ZTest# > 0 and ZTest# < cMapSizeZ then Z# = ZTest#
endif
if rightPressed()
XTest# = Newxvalue(X#, Wrapvalue(cAY# + 90), 5*(speedboost#/1.3))
ZTest# = Newzvalue(Z#, Wrapvalue(cAY# + 90), 5*(speedboost#/1.3))
if XTest# > 0 and XTest# < cMapSizeX then X# = XTest#
if ZTest# > 0 and ZTest# < cMapSizeZ then Z# = ZTest#
endif
endif
if runEnergy# > maxRunEnergy then runEnergy# = maxRunEnergy
print "Run energy: ", runEnergy#
 
Rem Rotate camera
cTestX# = WrapValue(cAX# - 180)
if cTestX# > 225 then cAX# = 45
if cTestX# < 135 then cAX# = 315
YRotate camera CurveAngle(cAY#, oldcAY#, 24)
XRotate camera CurveAngle(cAX#, oldcAX#, 24)
 
Rem Position Camera
Y# = floorHeight#(X#, Z#) + 85 + sprung*jumpBoost
Position Camera X#, Y#, Z#
 
Rem Position Listener
Position Listener X#, Y#, Z#
Rotate Listener 0, cAY#, 0
 
rem Sky sphere follows player
position object 2, X#, Y#, Z#
rem zrotate object 51, cAY#
return
 
_fademenu:
if fade > 100 then fadedir = 0
if fade < 50 then fadedir = 1
if fadedir = 1
fade = fade + 2.5
else
fade = fade - 2.5
endif
rem Beleuchtet
ink rgb(255, fade, 0), 0
set text font "Tahoma"
set text size 26
if menu = 1
if pos = 1 then text 260, 255, "Neues Spiel starten"
if pos = 2 then text 260, 285, "Spiel laden"
if pos = 3 then text 260, 315, "Einstellungen"
if pos = 4 then text 260, 345, "Spiel beenden"
endif
if menu = 3
if pos = 1
if sound = 1 then text 260, 255, "Ton: An"
if sound = 0 then text 260, 255, "Ton: Aus"
endif
if pos = 2
if music = 1 then text 260, 285, "Musik: An"
if music = 0 then text 260, 285, "Musik: Aus"
endif
if pos = 3 then text 260, 315, "Hauptmenü"
endif
rem Normal
ink rgb(255, 230, 0), 0
if menu = 1
if pos <> 1 then text 260, 255, "Neues Spiel starten"
if pos <> 2 then text 260, 285, "Spiel laden"
if pos <> 3 then text 260, 315, "Einstellungen"
if pos <> 4 then text 260, 345, "Spiel beenden"
endif
if menu = 3
if pos <> 1
if sound = 1 then text 260, 255, "Ton: An"
if sound = 0 then text 260, 255, "Ton: Aus"
endif
if pos <> 2
if music = 1 then text 260, 285, "Musik: An"
if music = 0 then text 260, 285, "Musik: Aus"
endif
if pos <> 3 then text 260, 315, "Hauptmenü"
endif
sync
return
 
_handle_radar:
rem Leuchtpunkt
if radarpointrev = 0
inc radarpointcolor, 3
else
dec radarpointcolor, 3
endif
if radarpointcolor > 255
radarpointrev = 1
radarpointcolor = 254
endif
if radarpointcolor < 150
radarpointrev = 0
radarpointcolor = 149
endif
rem Bäume
for t = 0 to cMaxTrees
x = (baumx(t) / 62.5) + 7.5
y = screen height() - 7.5 - (baumz(t) / 62.5)
rem ink rgb(0, radarpointcolor, 0), 0
ink rgb(0, 50, 0), 0
circle x, y, 1
circle x, y, 0
next i
rem Player
x = (X# / 62.5) + 7.5
y = screen height() - 7.5 - (Z# / 62.5)
ink rgb(0, 0, radarpointcolor), 0
circle x, y, 1
circle x, y, 0
rem Enemies
for t = 0 to cMaxEnemies
x = (object position x(idxMonsterBase+t) / 62.5) + 7.5
y = screen height() - 7.5 - (object position z(idxMonsterBase+t) / 62.5)
ink rgb(radarpointcolor, 0, 0), 0
circle x, y, 1
circle x, y, 0
next
return
 
_draw_trees:
// TODO: mit clone object arbeiten?
load image "bitmap\tree.bmp", 4
make object plain 52, 200, 400
make mesh from object 52, 52
add limb 52, 1, 52
rotate limb 52, 1, 0, 90, 0
make mesh from object 52, 52
delete object 52
// Methode 1: 1 Baum = 1 Object
for t = 0 to cMaxTrees
make object 1500+t, 52, 4
rx = baumx(t)
rz = baumz(t)
position object 1500+t, rx, floorHeight#(rx, rz)+190, rz
set object 1500+t, 1, 1, 0
next t
// Methode 2: Alle Bäume = 1 Objekt
remstart
make object 52, 52, 0 : rem TODO: da ist ein baum an offset 0,0,0
for t = 0 to cMaxTrees
add limb 52, t+1, 52
rx = baumx(t)
rz = baumz(t)
offset limb 52, t, rx, floorHeight#(rx, rz), rz
next t
make mesh from object 52, 52
delete object 52
make object 52, 52, 4
position object 52, 0, 190, 0
set object 52, 1, 1, 0
remend
rem test todo
 
rx = 500
rz = 500
load image "bitmap\dark-forest.jpg", 127
MAKE OBJECT BOX 127, 500, 350, 500
position object 127, rx, floorHeight#(rx,rz)+175, rz
rem set object 127, 1, 0, 0, 0, 0, 1, 0
texture object 127, 127
 
rx = 1700
rz = 500
load image "bitmap\dark-forest2.jpg", 126
MAKE OBJECT CYLINDER 126, 350
scale object 126, 180, 100, 180 : rem percent!
position object 126, rx, floorHeight#(rx,rz)+150, rz
set object 126, 1, 0, 0, 0, 0, 1, 0
rem texture object 126, 126
rem Make flat mesh piece
make object plain 998,300,300
hide object 998
make mesh from object 1,998
delete object 998
rem const
h=-40
li=0
end_x = 400
end_y = 400
for i = 0 to 10
w = RndBetween(150,250)
a = a + RndBetween(-80,80)
start_x = end_x
start_y = end_y
center_x = start_x + (w/2) * cos(a)
center_y = start_y + (w/2) * sin(a)
end_x = start_x + w * cos(a)
end_y = start_y + w * sin(a)
li=li+1
add limb 126,li,1
rotate limb 126, li, 0, -a, 0
offset limb 126,li,center_x,floorHeight#(center_x,center_y)+h,center_y
next
set object cull 126, 0
set object ambient 126, 0
texture object 126, 126
return
 
_create_trees:
dim baumx(cMaxTrees)
dim baumz(cMaxTrees)
for t = 0 to cMaxTrees
repeat
x = rnd(cMapSizeX)
z = rnd(cMapSizeZ)
ok = 1
if isInCircle(x,z,5000,5000,2000) then ok=0 : rem TODO: später für büschel anwenden
until ok=1
baumx(t) = x
baumz(t) = z
NEXT
return
 
_menu:
load bitmap "bitmap\titlescreen.jpg"
set text font "times"
set text size 27
fade = 100
pos = 1
menu = 1
sound = 1
do
gosub _fademenu
if ( downkey() = 1 and pos < 4 and menu = 1 ) or ( downkey() = 1 and pos < 3 and menu = 3 )
inc pos
while downkey() = 1
gosub _fademenu
endwhile
endif
if upkey() = 1 and pos > 1
dec pos
while upkey() = 1
gosub _fademenu
endwhile
endif
if returnkey() = 1
if menu = 1
if pos = 1 then gosub _startgame
if pos = 2
rem load bitmap "bitmap\titlescreen.jpg"
rem menu = 2
rem pos = 1
endif
if pos = 3
load bitmap "bitmap\titlescreen.jpg"
menu = 3
pos = 1
endif
if pos = 4 then end
else
if menu = 3
if pos = 1
if sound = 1
sound = 0
else
sound = 1
endif
load bitmap "bitmap\titlescreen.jpg"
endif
if pos = 2
if music = 1
music = 0
else
music = 1
endif
load bitmap "bitmap\titlescreen.jpg"
endif
if pos = 3
load bitmap "bitmap\titlescreen.jpg"
menu = 1
pos = 1
endif
endif
endif
while returnkey() = 1
gosub _fademenu
endwhile
endif
loop
return
 
_create_enemies:
dim enemySpeed(cMaxEnemies)
dim enemyDir(cMaxEnemies)
dim enemyWalkTimeout(cMaxEnemies)
dim enemyWalkTimeoutMin(cMaxEnemies)
dim enemyWalkTimeoutMax(cMaxEnemies)
dim enemyAwarenessRadius(cMaxEnemies)
dim enemyCurSpeed(cMaxEnemies)
dim enemyMaxSpeed(cMaxEnemies)
dim enemyAngle(cMaxEnemies)
dim enemyCurrentAnim(cMaxEnemies)
for t = 0 to cMaxEnemies
if t=0
Load 3Dsound "test.wav",idxMonsterBase+t
else
Clone Sound idxMonsterBase+t, idxMonsterBase
endif
x# = RndBetween(1000, 9000)
z# = RndBetween(1000, 9000)
enemyAwarenessRadius(t) = RndBetween(600, 1300)
enemyMaxSpeed(t) = RndBetween(1, 4)
enemyWalkTimeoutMin(t) = 200
enemyWalkTimeoutMax(t) = 300
if t = 0
animScorpIdleStart = 0
Load object "obj\scorpion\ScorpIdle.x", idxMonsterBase+t
animScorpIdleEnd = total object frames(idxMonsterBase+t)
animScorpWalkStart = animScorpIdleEnd+1
Append object "obj\scorpion\ScorpWalk.x", idxMonsterBase+t, animScorpWalkStart
animScorpWalkEnd = total object frames(idxMonsterBase+t)
else
Clone Object idxMonsterBase+t, idxMonsterBase
endif
y# = floorHeight#(x#, z#) : rem TODO + yPosOffset#
position object idxMonsterBase+t, x#, y#, z#
Position Sound idxMonsterBase+t, x#, y#, z#
fix object pivot idxMonsterBase+t
gosub scorpChangeToWalk
set object collision on idxMonsterBase+t
NEXT
return
 
scorpChangeToIdle:
rem TODO: smoothness (interpolation)
if enemyCurrentAnim(t) <> 1
loop object idxMonsterBase+t, animScorpIdleStart, animScorpIdleEnd
enemyCurrentAnim(t) = 1
endif
return
 
scorpChangeToWalk:
rem TODO: smoothness (interpolation)
if enemyCurrentAnim(t) <> 2
loop object idxMonsterBase+t, animScorpWalkStart, animScorpWalkEnd
enemyCurrentAnim(t) = 2
endif
return
 
_setupClock:
set text font "arial" : set text size 30 : set text transparent
// Session variables
clockTickCounter=0
clockCurrentMidDot=0
clockTicksPerSecond = framerate
return
 
_handleClock:
if mod(clockTickCounter*clockBlinksPerSecond, clockTicksPerSecond) = 0
clockCurrentMidDot = 1 - clockCurrentMidDot
endif
if mod(clockTickCounter*clockSpeedFactor, clockTicksPerSecond) = 0
clockSeconds = clockSeconds + 1
endif
gosub _printClock
 
clockTickCounter = clockTickCounter + 1
RETURN
 
_create_water:
remstart
make object plain 3, 20000, 20000
load image "bitmap\GM01B02.bmp", 3
texture object 3, 3
position object 3, 0, waterLevel, 0
xrotate object 3, 90
set object light 3, 1
ghost object on 3
remend
 
remstart
make object plain 3, 10000, 10000
load image "bitmap\GM01B02a.bmp",3
texture object 3, 3
xrotate object 3, 90
position object 3, 5000,waterLevel, 5000
set object ambient 3,0
ghost object on 3
remend
remstart
rem TODO: geht nicht zusammen mit fog
make object plain 3, 10000, 10000
load image "bitmap\GM01B02c.bmp", 3
texture object 3, 3
xrotate object 3, 90
position object 3, 5000, waterLevel, 5000
set object ambient 3, 0
rem set object ambient 3, 1
rem ghost object on 3
remend
make matrix 3, cMapSizeX+2*waterMovement, cMapSizeZ+2*waterMovement, 15, 15
load image "bitmap\water.bmp", 3
prepare matrix texture 3, 3, 1, 1
fill matrix 3, 0, 1
position matrix 3, 0, waterLevel, 0
ghost matrix on 3
set matrix 3, 0, 0, 1, 1, 1, 1, 1
update matrix 3
return
 
_create_floor:
rem Boden
make matrix 1, cMapSizeX, cMapSizeZ, 15, 15
 
load image "bitmap\forest_floor_texture.jpg", 1
prepare matrix texture 1, 1, 1, 1
fill matrix 1, 0, 1
set matrix 1, 0, 0, 1, 1, 1, 1, 1
randomize matrix 1, 130
rem TEST
rem TODO: aber man kann 40,40 nicht updaten?!
set matrix height 1, 10, 10, 1000
update matrix 1
remstart
currentmatrix=1
for z=1 to 20
for x=1 to 20
rem Get matrix heights
rem print x, " - ", z
rem sync
rem sleep 100
h8#=get matrix height(currentmatrix,x,z-1)
h4#=get matrix height(currentmatrix,x-1,z)
h#=get matrix height(currentmatrix,x,z)
h2#=get matrix height(currentmatrix,x,z)
rem Calculate projected angle X using heights
x1#=(x-1)*25.0 : y1#=h#
x2#=(x+0)*25.0 : y2#=h4#
dx#=x2#-x1#
dy#=y2#-y1#
ax#=atanfull(dx#,dy#)
ax#=wrapvalue(90-ax#)
rem Calculate projected angle Z using heights
z1#=(z-1)*25.0 : y1#=h2#
z2#=(z+0)*25.0 : y2#=h8#
dz#=z2#-z1#
dy#=y2#-y1#
az#=atanfull(dz#,dy#)
az#=wrapvalue(90-az#)
rem Make normal from projected angle
nx#=sin(ax#)
ny#=cos(ax#)
nz#=sin(az#)
rem Setting matrix normal for smoothness
set matrix normal currentmatrix,x,z,nx#,ny#,nz#
next x
next z
update matrix currentmatrix
remend
return
 
_create_sky:
if test = 1
load image "bitmap\tree.bmp", 2
else
load image "bitmap\stars.bmp", 2
endif
 
make object sphere 2, (landsize * 2) - 500
 
rem make object sphere 2, -4000
set object collision off 2
rem scale object 2, 2000, 750, 2000
scale object 2, 600, 120, 600
set object 2, 1, 0, 0, 0, 0, 1, 1
texture object 2, 2
rem fade object 2, 0
backdrop off
if test = 1
backdrop on
set object wireframe 2, 1
endif
return
 
_create_radar:
rem Karte - Abstand zur Kamera: 1.1
remstart
load image "map\ST01L01a.bmp", 5
make object plain 51, 0.352, 0.352
lock object on 51
position object 51, -0.6908, -0.4675, 1.1
ghost object on 51
texture object 51, 5
remend
rem Karte - Abstand zur Kamera: 1.5
load image "map\ST01L01a.bmp", 5
make object plain 51, 0.48, 0.48
lock object on 51
position object 51, -0.942, -0.6375, 1.5
ghost object on 51
texture object 51, 5
return
 
_printClock:
if clockCurrentMidDot = 0
middle$ = " "
else
middle$ = ":"
endif
min = clockSeconds/60
hours = min/60
if clockShowSeconds
secsText$ = middle$+TwoDigit$(mod(clockSeconds,60))
else
secsText$ = ""
endif
print "Time: ", TwoDigit$(mod(hours,24)), middle$, TwoDigit$(mod(min,60)), secsText$
return
 
rem Rotate smooth, and rotate in the direction with the lowest distance
rem "turn object left" ist das kommando
function smoothRotate#(von#, nach#, smoothness)
if (von# > 270) and (nach# < 90)
ret# = WrapValue(von# + (360 - von# + nach#)/smoothness)
else
if (von# < 90) and (nach# > 270)
ret# = WrapValue(von# - (360 - nach# + von#)/smoothness)
else
ret# = von# + (nach# - von#)/smoothness
endif
endif
endfunction ret#
 
function floorHeight#(X#, Z#)
rem TODO: implement water
ret# = Get Ground Height(1, X#, Z#)
ENDFUNCTION ret#
 
function upPressed()
ret = UpKey()=1 or keystate(17)=1 or joystick up()=1
ENDFUNCTION ret
 
function leftPressed()
ret = LeftKey()=1 or keystate(30)=1 or joystick left()=1
ENDFUNCTION ret
 
function rightPressed()
ret = RightKey()=1 or keystate(32)=1 or joystick right()=1
ENDFUNCTION ret
 
function downPressed()
ret = DownKey()=1 or keystate(31)=1 or joystick down()=1
ENDFUNCTION ret
 
function TwoDigit$(value)
if value < 10
ret$ = "0"+STR$(value)
else
ret$ = STR$(value)
ENDIF
ENDFUNCTION ret$
 
function mod(num,modulus)
value=num-((num/modulus)*modulus)
endfunction value
 
function fileReadInt(fileNum)
read string 1, s$
ret=val(s$)
ENDFUNCTION ret
 
function RndBetween(a,b)
ret = a+Rnd(b-a)
ENDFUNCTION ret
 
function isInCircle(pX#,pY#,cX#,cY#,cR#)
ret = sqrt( (pX#-cX#)*(pX#-cX#) + (pY#-cY#)*(pY#-cY#) ) <= cR#
ENDFUNCTION ret
 
_stop_game_sounds:
Stop Sound 1 : rem sound\forestbg.wav
Stop Sound 5 : rem music\pause.wav
Stop Sound 10 : rem sound\walk.wav
for t = 0 to cMaxEnemies
Stop Sound idxMonsterBase+t
next t
return
 
_exit:
exit
/trunk/_private/_old/Baumwand-Experiment/dark-forest.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/_private/_old/Baumwand-Experiment/dark-forest.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/_private/_old/Baumwand-Experiment/dark-forest2.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/_private/_old/Baumwand-Experiment/dark-forest2.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property