ODE START=main.htm=*no parameters*
ODE UPDATE=main.htm=*no parameters*
ODE SET WORLD GRAVITY=main.htm=x#, y#, z#
ODE SET WORLD ERP=main.htm=value#
ODE SET WORLD CFM=main.htm=value#
ODE SET WORLD STEP=main.htm=step#
ODE SET WORLD QUICK STEP NUM ITERATIONS=main.htm=value
ODE SET STEP MODE=main.htm=mode
ODE END=main.htm=*no parameters*
ODE CREATE STATIC SPHERE=main.htm=object
ODE CREATE STATIC BOX=main.htm=object
ODE CREATE STATIC TRIANGLE MESH=main.htm=object
ODE CREATE DYNAMIC SPHERE=main.htm=object
ODE CREATE DYNAMIC BOX=main.htm=object
ODE CREATE DYNAMIC BOX=main.htm=object
ODE CREATE DYNAMIC TRIANGLE MESH=main.htm=object
ODE CREATE DYNAMIC CYLINDER=main.htm=object
ODE CREATE STATIC UNIVERSE=main.htm=*no parameters*
ODE DESTROY OBJECT=main.htm=object
ODE SET LINEAR VELOCITY=main.htm=object, x#, y#, z#
ODE SET ANGULAR VELOCITY=main.htm=object, x#, y#, z#
ODE SET BODY ROTATION=main.htm=object, x#, y#, z#
ODE SET BODY MASS=main.htm=object, mass#
ODE SET GRAVITY=main.htm=object, mode
ODE SETSURFACE MODE=main.htm=object, mode, state
ODE SETSURFACE MODE CONTACT MU2=main.htm=object, state
ODE SETSURFACE MODE CONTACT BOUNCE=main.htm=object, state
ODE SETSURFACE MODE CONTACT SOFT ERP=main.htm=object, state
ODE SETSURFACE MODE CONTACT SOFT CFM=main.htm=object, state
ODE SETSURFACE MODE CONTACT MOTION1=main.htm=object, state
ODE SETSURFACE MODE CONTACT MOTION2=main.htm=object, state
ODE SETSURFACE MODE CONTACT SLIP1=main.htm=object, state
ODE SETSURFACE MODE CONTACT SLIP2=main.htm=object, state
ODE SETSURFACE MODE CONTACT APPROX0=main.htm=object, state
ODE SETSURFACE MODE CONTACT APPROX11=main.htm=object, state
ODE SETSURFACE MODE CONTACT APPROX12=main.htm=object, state
ODE SETSURFACE MODE CONTACT APPROX1=main.htm=object, state
ODE SET CONTACT=main.htm=object, mode, value#
ODE SET CONTACT MU2=main.htm=object, value#
ODE SET CONTACT FDIR1=main.htm=object, value#
ODE SET CONTACT BOUNCE =main.htm=object, value#
ODE SET CONTACT VELOCITY=main.htm=object, value#
ODE SET CONTACT SOFT ERP=main.htm=object, value#
ODE SET CONTACT SOFT CFM=main.htm=object, value#
ODE SET CONTACT MOTION1=main.htm=object, value#
ODE SET CONTACT Motion2=main.htm=object, value#
ODE SET CONTACT SLIP1=main.htm=object, value#
ODE SET CONTACT SLIP2=main.htm=object, value#
ODE COLLISION MESSAGE EXISTS=main.htm=*no parameters*
ODE COLLISION GET MESSAGE=main.htm=*no parameters*
ODE GET OBJECT A=main.htm=*no parameters*
ODE GET OBJECT B=main.htm=*no parameters*
ODE GET OBJECT A VELOCITY X=main.htm=*no parameters*
ODE GET OBJECT A VELOCITY Y=main.htm=*no parameters*
ODE GET OBJECT A VELOCITY Z=main.htm=*no parameters*
ODE GET OBJECT B VELOCITY X=main.htm=*no parameters*
ODE GET OBJECT B VELOCITY Y=main.htm=*no parameters*
ODE GET OBJECT B VELOCITY Z=main.htm=*no parameters*
ODE GET BODY LINEAR VELOCITY X=main.htm=*no parameters*
ODE GET BODY LINEAR VELOCITY Y=main.htm=*no parameters*
ODE GET BODY LINEAR VELOCITY Z=main.htm=*no parameters*
ODE GET OBJECT A ANGULAR VELOCITY X=main.htm=*no parameters*
ODE GET OBJECT A ANGULAR VELOCITY Y=main.htm=*no parameters*
ODE GET OBJECT A ANGULAR VELOCITY Z=main.htm=*no parameters*
ODE GET OBJECT B ANGULAR VELOCITY X=main.htm=*no parameters*
ODE GET OBJECT B ANGULAR VELOCITY Y=main.htm=*no parameters*
ODE GET OBJECT B ANGULAR VELOCITY Z=main.htm=*no parameters*
ODE ADD FORCE=main.htm=object, x#, y#, z#, x1#, y1#, z1#
ODE GET BODY HEIGHT=main.htm=(object)
ODE GET BODY ADJUSTMENT X=main.htm=(object)
ODE GET BODY ADJUSTMENT Y=main.htm=(object)
ODE GET BODY ADJUSTMENT Z=main.htm=(object)
ODE SET RESPONSE=main.htm=object, mode
ODE GET OBJECT A CONTACT=main.htm=*no parameters*
ODE GET OBJECT B CONTACT=main.htm=*no parameters*
ODE ADD FORCE RELATIVE=main.htm=object, x#, y#, z#, x1#, y1#, z1#
ODE SET DYNAMIC MINIMUM=main.htm=min#
ODE SET STATIC MINIMUM=main.htm=min#
ODE SET FORCE MULTIPLIER=main.htm=multiplier#
ODE SET MAXIMUM SPEED=main.htm=speed#
ODE SET BODY POSITION=main.htm=ibject, x#, y#, z#
Ode keywords.ini file
You can use ode add force relative, it's much more predictable than ode add force.
For example, in my open source ode bowling game i use it like
ODE ADD FORCE RELATIVE "object","force direction x", "force direction y","force direction z",0,0,0
Same applies to Ode add force.
I included the game mainloops source code so you can examine it to find the better example
` *** SILMUKKA ***
`Tässä kohtaa suoritetaan silmukkaa ladatuilla medioilla
DO `Toistetaan allaolevia käskyjä
`Sijoitetaan lattian efekti
`Haetaan kameran sijainti vektoriin
set vector4 1,camera position x(),camera position y(),camera position z(),1.0
`Asetetaan efekti haettuun vektoriin
set effect constant vector 2,"EyePos",1
`Äänet jos laskemme kaadot
if lasketaan = 0
`Niin kauan kun meillä on törmäys toistetaan allaolevaa
while ode collision message exists()
ode collision get message `Haetaan törmäyksen tiedot
Obj1 = ode get object a() : Obj2 = ode get object b() `Haetaan törmäävien numerot
`Keilapallon äänet, jos törmäävä on keilapallo niin
if Obj1=100
if Obj2 = 1 and sound playing(1) = 0 then play sound 1 `Jos toinen on lattia niin toistetaan vierimisääntä
if kolari(obj2) = 0 `Jos toinen on keila ja sitä ei ole testattu
if Obj2 =>10 and Obj2=<99 then play sound 2 : kolari(obj2) = 1`Varmistetaan että kysessä on keila ja toistetaan ääni
endif
if Obj2<10 `Jos toinen kappale on jokin tason osa
if koppi(Obj2) = 0 then play sound 3 : koppi(obj2) = 1 `Jota ei ole vielä toistettu niin toistetaan ääni
endif
endif
endwhile `Toistettava loppuu
endif `Testi loppuu
`Äänet jos kaatoja ei lasketa
if lasketaan = 1
`Niin kauan kun meillä on törmäys toistetaan allaolevaa
while ode collision message exists()
ode collision get message `Haetaan törmäyksen tiedot
Obj1 = ode get object a() : Obj2 = ode get object b() `Haetaan törmäävien numerot
`Jos törmäävä on mailjoen siivooja
if Obj2 = 103
if siivottu(obj1) = 0 `Jos siivottavaa ei ole testattu vielä
if Obj1 =>10 and Obj1=<99 then play sound 2 : siivottu(obj1) = 1 `Jos siivotta on keila niin toistetaan ääni
endif
endif
endwhile `Silmukka loppuu
endif `Testi loppuu
`Logiikka keilanpuhdistajalle pallon tippuminen alas laukaisee logiikan,
if object position y(100)+300>0 `Jos pallo on vielä radalla `Kaatoja ei enää lasketa
ode set linear velocity 103,0,1,0 `Pidetään porttia ylhäällä
else `Jos pallo on tippunut alas
lasketaan = 1 `Ei lasketa kaatoja
if sound playing (4) = 0 then play sound 4 `Siivojaa alkaa surista
if object position y(103)> 0+object size y(1)/2+object size y(103)/2+pallokoko `Liikutetaan porttia
ode set linear velocity 103,0,-15,-30 `vinosti alas
endif `Seuraava testi
if object position y(103)=<0+object size y(1)/2+object size y(103)/2+pallokoko
if object position z(103)<pituus `Liikutetaan porttia
ode set linear velocity 103,0,0,30 `Poispäin
endif
endif
if object position y(103)<0 then exit
endif
`Hallitaan liikkeitä testien perusteella
zliike# = abs(mousemovey()/8) `pituusulottuvuudessa
xliike# = mousemovex()/2 `leveysulottuvuudessa
xliikkunut = xliikkunut + xliike# `päivitetään osoittiminen kohta leveysulottuvuudessa
zliikkunut = zliikkunut + zliike# `ja pituusulottuvuudessa
set object speed 105,zliike#*20 `Asetetaan pelaajan liikkumanopeus
`Testit jos palloa ei ole laukaistu
if laukaistu = 0
`Liikutetaan pelaajaa
move object left 105,xliike#/10 `Liikutetaan leveyssunnassa hiiren perusteella
move object 105,0-zliike#/2 `Liikutetaan pituussuunnassa hiiren perusteella
position object 101,xliikkunut,korkeus,zliikkunut `Sijoitetaan laukaisukohdan osoitin liikkuneen perusteella
ode set linear velocity 100,xliike#*2.1,1,zliike#*10 `Liikutetaan oden palloa antamalla voimaa
`Testataan pallon laukaisu jos annetaan käsky ja pallo ei ole laukaistu ja liikkeessä
if mouseclick()=1 and zliike#>5 `Testataan laukaisemiselta, vauhti täytyy olla jonkin verran
ode set linear velocity 100,0,0,0 `Resetoidaan pallon nopeus
`Lisätään voimaa osoittimen suuntaan, mikä määrrää pallon liikeradan. Merkitään ylös laukaisu
ODE ADD FORCE RELATIVE 100,xliikkunut-object position x(100),0,zliikkunut-object position z(100),0,0,0 : laukaistu = 1
endif
`Testataan yliastumiselta, samalla tavalla
if object position z(100)>raja `Testataan yliastumiselta haettuun rajaan
ode set linear velocity 100,0,0,0 `Resetoidaan nopeus
`Lisätään mukaan vähän oikeaa satunnaisuutta
ODE ADD FORCE RELATIVE 100,xliikkunut-object position x(100)+(rnd(leveys)-leveys/2),0,zliikkunut-object position z(100),0,0,0 : laukaistu = 1
endif
endif
`Jos on laukaistu, niin testataan laukaisemiseen liittyvät tekijät
if laukaistu = 1 and lasketaan = 0 `Varmistetaan että laskemme kaadetut
dec haivytys#,5 `Jos olemme kerran laukaisseet osoitinta ei tarvita
fade object 101,haivytys# `Häivytetään osoitin kunnes se katoaa
`Jos pallo on radalla niin jahdataan kameralla
if object position z(100) < pituus `Niin kauan kun pallo on radalla
if (object position z(100)-75)>camera position z(0) and object position z(100)<pituus-leveys/2 then inc kameraz#,4 `Jos pallo on edellä niin kiritään
if (object position y(100)+object size y(100)*2)<camera position y(0) and object position y(100)>0 then dec kameray#,0.5 `Jos pallo on alempana niin lasketaan
endif
`Sijoitetaan kamera edellä laskettuihin arvoihin.
position camera object position x(100), kameray#, kameraz#
`Testataan keilat kaatumisilta
for x = 10 to 10+keiloja `käydään läpi yksitellen
if testattu(x) = 0 `Jos kyseistä keilaa ei ole testattu niin sitten testataan
`Testataan onko tämä keila kaatunut tai tippunut
if object angle x(x)>45 and object angle x(x)<315 or object angle z(x)>45 and object angle z(x)<360 or object position y(x)<object size y(x)/3
testattu(x) = 1 `Varmistetaan ettei keilaa testata toista kertaa
inc kaadetut,1 `Päivitetään kaadettujen keilojen lukumäärä
endif
endif
next x
endif
`Muut testit
if escapekey() then exit `Escape hyppää ulos silmukasta
ODE UPDATE `Päivitetään ode
SYNC `Päivitetään visuaalinen maailma
LOOP `Toistetaan kaikki uudelleen
Note: it needs newest ODE that Ian M posted in the DLL talk
Note 2: Im from finland so sorry for comments and variable names
EDIT: Before Batvink or any other gets to say it there is a tutorial on the older newsletter:
http://www.thegamecreators.com/data/newsletter/newsletter_issue_34.html#8
(2b)||C!(2b) (It's C++) vs. TO B OR NOT 2B (It's DarkBasic!)