PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : directX-level-editor


2paul
28.03.2004, 14:03
ich habe einen directX-level-editor geschrieben.
es ist noch eine sehr einfache version,
die konfiguration läuft über txt-files.

damit lassen sich frei begehbare modelle mit kollisionsabfrage erstellen.

aber bei interesse wird es sicher irgendwann eine grafische
version geben.

ich möchte an dieser stelle gar nicht so viel dazu sagen,
die infos sind alle online :

infos und downloads zum level-editor:
http://www.goalkeeper2004.de/stadion_index.htm

das ganze ist natürlich nur unter windoof-dosen lauffähig,
benötigt dafür aber kaum recourcen.

bei schwierigkeiten, fragen oder programm-bugs

mail me...
paul@goalkeeper2004.de


Scavi
28.03.2004, 16:40
Und was ist deine Frage ? Das hier ist doch kein Werbeforum oder gibts den Quellcode frei ?

2paul
28.03.2004, 20:50
willste den haben...

das is kein thema :-)

is in blitz3d geschrieben...

2paul
03.04.2004, 11:52
ok, bei mir gibts was neues...

erstmal is das modell jetzt einigemassen begehbar.
( ein tip, sauber modellieren :-)
so nah kommt man mit cinema gar nicht ran,
jede kleine lücke is in spielen sichtbar )

das modell und texturen sowie die cinema-datein sind upgedated.

######

dann hab ich die gravitation verbessert,
( klappt schon fast, nur auf treppen ruscht er noch ein wenig )
und es is auch keine exponenzelle beschleunigung.
ich hab mich erstmal auf eine lineare beschränkt.

######

und jetzt kommst :-)

die ersten events sind möglich...
( hab ich nen tutorial zu geschrieben )

interaktion mit den modellen,

integriert sind mausveränderung und
programmierte events, heisst :
positions-,dreh-,skallierungs- veränderung
auf mausklick...

auch eine farbliche veränderung bei auswahl is möglich...

türen sind damit schon zu realisieren.

ist blöd zu beschreiben,
guckts euch einfach an...

########

jetzt kommen irgendwann noch animierte events,
heisst:
bei auslösen ( mausklick ) läuft eine vorgegebene animation ab.

Scavi
03.04.2004, 12:32
Falsches Forum! Das sollte eher in "Projekte".

2paul
03.04.2004, 13:42
ja ich mach da denn auch nen eintrag,
wenns richtig läuft

ok, und da ich ja immer noch versuch
leute für das projekt zu begeistern,
poste ich hier mal ganz frech den quell-code....

das is jetzt natürlich nur das main,
die variablen-deklaration und das einlesen der txt
sind da jetzt nicht mit bei...

klar, für wirklich grosse projekte,
quake, counterstrike eigenet sich diese sprache
wohl weniger,

das aber nur, weil ein verteiltes arbeiten
schwer möglich ist...

blitz3d bietet wirklich alles was man zum spiele-programmieren braucht,
und man kommt ratzfatz ans ziel...

ich war am anfang auch skeptisch,
aber die möglichkeiten sind echt überzeugend...

und vor all dem simple,
eben für spiele optimiert...

nicht diesen ganze balast,
den die anderen sprachen mit sich rumschleppen...

also bei interesse,
wisst ihr ja wie ihr mich kriegt..

oki
der paule



PositionEntity sceneCamPiv,cam_position_X,cam_position_Y,cam_position_Z
CameraRange cam,1,cam_sichtreichweite
TurnEntity cam,cam_drehung_X,cam_drehung_Y,cam_drehung_Z

If kamera_licht_on_off
cam_lite=CreateLight(2,sceneCamPiv)
PositionEntity cam_lite,0,cam_licht_hoehe,0
LightRange cam_lite,cam_licht_reichweite
LightColor cam_lite,cam_licht_Rot,cam_licht_GRUEN,cam_licht_BLAU
EndIf

a = 1
For li.licht = Each licht

licht_Handle(a)=CreateLight(2)

PositionEntity licht_handle(a),li\position_X,li\position_Y,li\position_Z
LightRange licht_handle(a),li\reichweite
LightColor licht_handle(a),li\ROT,li\GRUEN,li\BLAU
a = a + 1
Next

a = 1
For mo.model = Each model
model_handle(a) = LoadMesh(mo\datei_name$)

PositionEntity model_handle(a),mo\position_X,mo\position_Y,mo\position_Z
ScaleEntity model_handle(a),mo\groessenfaktor_X#,mo\groessenfaktor_Y#,mo\groessenfaktor_Z#
TurnEntity model_handle(a),mo\drehung_X,mo\drehung_Y,mo\drehung_Z

If mo\maus_pick_event_on_off Then EntityPickMode model_handle(a),2,True
a = a + 1
Next

a = 1
For ani_mo.anim_model = Each anim_model
ani_model_handle(a) = LoadAnimMesh(ani_mo\datei_name$)

Animate ani_model_handle(a),ani_mo\anim_modus,ani_mo\anim_geschwindigkeit#,ani_mo\start_frame,ani_mo\end_frame

PositionEntity ani_model_handle(a),ani_mo\position_X,ani_mo\position_Y,ani_mo\position_Z
ScaleEntity ani_model_handle(a),ani_mo\groessenfaktor_X#,ani_mo\groessenfaktor_Y#,ani_mo\groessenfaktor_Z#
TurnEntity ani_model_handle(a),ani_mo\drehung_X,ani_mo\drehung_Y,ani_mo\drehung_Z

a = a + 1
Next

If himmel\on_off

skyplane1t = LoadTexture("gfx/"+himmel\textur_name$)
skyplane1 = CreatePlane(1)

PositionEntity skyplane1,0,himmel\hoehe,0
ScaleTexture skyplane1t,himmel\groessenfaktor_textur_X,himmel\groessenfaktor_textur_Y
PositionTexture skyplane1t,himmel\positionsfaktor_textur_X#,himmel\positionsfaktor_textur_Y#

EntityTexture skyplane1,skyplane1t
TurnEntity skyplane1,0,0,180;

EndIf

If boden\on_off

grouplane1t = LoadTexture("gfx/"+boden\textur_name$)
grouplane1 = CreatePlane(1)

PositionEntity grouplane1,0,boden\hoehe,0
ScaleTexture grouplane1t,boden\groessenfaktor_textur_X,boden\groessenfaktor_textur_Y
PositionTexture grouplane1t,boden\positionsfaktor_textur_X#,boden\positionsfaktor_textur_Y#

EntityTexture grouplane1,grouplane1t
TurnEntity grouplane1,0,90,0;

EndIf

If def_maus_on_off
gfx_maus = LoadImage("gfx/"+def_maus_dateiname$)
MaskImage gfx_maus,def_maus_mask_ROT,def_maus_mask_GRUEN,def_maus_mask_BLAU

EndIf

If kollision_on_off

Collisions COLLISION_PLAYER,COLLISION_OBSTICLE,2,2
EntityType sceneCamPiv,COLLISION_PLAYER
EntityRadius sceneCamPiv, cam_kollisions_radius

EntityType grouplane1,COLLISION_OBSTICLE

For a = 1 To anzahl_modelle_animiert

EntityType ani_model_handle(a),COLLISION_OBSTICLE

Next
For a = 1 To anzahl_modelle_nicht_animiert

EntityType model_handle(a),COLLISION_OBSTICLE
Next

EndIf

; Setup the frame limiting code
framePeriod = 1000 / timeFPS
frameTime = MilliSecs() - framePeriod

Repeat

; Here we limit the frames....
Repeat
frameElapsed = MilliSecs() - frameTime
Until frameElapsed
frameTicks = frameElapsed / framePeriod

; Calculate tweening
frameTween# = Float(frameElapsed Mod framePeriod) / Float(framePeriod)

; Do the scene updating..
For frameLimit = 1 To frameTicks

If frameLimit = frameTicks Then CaptureWorld
frameTime = frameTime + framePeriod

; Update everything in our world, and catch up on missed frames..
UpdateScene

; Let blitz do its stuff updating..
UpdateWorld
Next

; Render the whole world, it has been updated above...
RenderWorld frameTween

curTime = MilliSecs()
If curTime > checkTime Then
checkTime = curTime + 1000
curFPS = fpscounter
fpscounter = 0
Else
fpscounter = fpscounter + 1
End If
;##################################


e=CameraPick(cam,(aufloesung_breite/2),(aufloesung_hoehe/2))
If e<>entity#
If entity Then EntityColor entity,255,255,255
entity#=e


EndIf

a = 1
li_maus_taste = MouseHit(1)
For mo.model = Each model

If entity# = model_handle(a) ;And li_maus_taste = 1 ;And mo\maus_pick_event_on_off

For pro_event.programm_events = Each programm_events
If mo\maus_pick_event_ID = pro_event\maus_pick_event_ID

If pro_event\aendere_maus_on_off
b = 1
For mau.event_maus = Each event_maus
If pro_event\maus_ID = mau\maus_ID

DrawImage gfx_event_maus(b), ((aufloesung_breite/2)-mau\verschiebung_X),((aufloesung_hoehe/2)-mau\verschiebung_X)


EndIf
b = b + 1
Next
EndIf

EntityColor model_handle(a),pro_event\farbaenderung_ROT,pro_event\farbaenderung_GRUEN,pro_event\farbaenderung_BLAU

If li_maus_taste = 1

If pro_event\alpha_on_off
EntityAlpha model_handle(a),pro_event\alpha#
EndIf


MoveEntity model_handle(a),pro_event\position_X,pro_event\position_Y,pro_event\position_Z
ScaleEntity model_handle(a),pro_event\groessenfaktor_X#,pro_event\groessenfaktor_Y#,pro_event\groessenfaktor_Z#
TurnEntity model_handle(a),pro_event\drehung_X,pro_event\drehung_Y,pro_event\drehung_Z

EndIf
EndIf
Next
EndIf

a = a + 1
Next

If Not entity#
If def_maus_on_off
DrawImage gfx_maus, ((aufloesung_breite/2)+def_maus_verschieb_X),((aufloesung_hoehe/2)+def_maus_verschieb_Y)
EndIf
EndIf

;###################################

y = 20
If text_an = 1
;Text 0,0,himmel\positionsfaktor_textur_Y#
Text 20,y,"Bildwiederhol-Frequenz: "+curFPS

For a = 1 To 20
y = y + text_abstand
Text 20,y,text_anzeige$(a)
Next
EndIf

Flip
Until KeyHit(tast_beenden)

End



Function UpdateScene()
; Update our scene...

; Get the mouse speeds, no smoothing here to keep this simple.
mXs# = MouseXSpeed()
mYs# = MouseYSpeed()

; Note the global turning here to keep the camera straight, try switching true to false
; and see what happens...
TurnEntity sceneCamPiv,0,-(mXs#/3),0,True
TurnEntity cam,(mYs#/3),0,0

; Strafing..
If KeyDown(tast_left) Then MoveEntity sceneCamPiv,-nav_geschw_seite,0,0
If KeyDown(tast_right) Then MoveEntity sceneCamPiv,nav_geschw_seite,0,0

If KeyDown(tast_hoch) Then MoveEntity sceneCamPiv,0,nav_geschw_hoch_runter,0
If KeyDown(tast_runter) Then MoveEntity sceneCamPiv,0,-nav_geschw_hoch_runter,0


; Move the player backwards and forwards...
If KeyDown(tast_vor) Then MoveEntity sceneCamPiv,0,0,nav_geschw_vor_zurueck
If KeyDown(tast_zur) Then MoveEntity sceneCamPiv,0,0,-nav_geschw_vor_zurueck

If KeyDown(tast_grav_an) Then gravitation = 1
If KeyDown(tast_grav_aus) Then gravitation = 0


If gravitation = 1 And EntityCollided(sceneCamPiv,COLLISION_OBSTICLE) = False
grav_kraft = grav_kraft + grav_faktor
MoveEntity sceneCamPiv,0,-grav_kraft,0
EndIf
If EntityCollided(sceneCamPiv,COLLISION_OBSTICLE)
grav_kraft = 0
EndIf

; lock the mouse in the middle of the screen so that MouseX/YSpeed() work properly
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

If KeyDown(tast_tag) Then fog = 1
If KeyDown(tast_nacht) Then fog = 0

If KeyDown(tast_text_an) Then text_an = 1
If KeyDown(tast_text_aus) Then text_an = 0

If KeyDown(tast_wire_an)=True Then wireframe_on_off = 1
If KeyDown(tast_wire_aus)=True Then wireframe_on_off = 0

WireFrame wireframe_on_off

If KeyDown(tast_anti_ali_an)=True Then anti_alias_on_off = 1
If KeyDown(tast_anti_ali_aus)=True Then anti_alias_on_off = 0


AntiAlias anti_alias_on_off

If KeyDown(tast_dither_an)=True Then dither_on_off = 1
If KeyDown(tast_dither_aus)=True Then dither_on_off = 0

Dither dither_on_off

If fog
CameraFogMode cam,cam_nebel_nacht_on_off
CameraFogRange cam,cam_nebel_reichweite_nacht_vorne,cam_nebel_reichweite_nacht_hinten
CameraClsColor cam,cam_clear_screen_nacht_BLAU,cam_clear_screen_nacht_GRUEN,cam_clear_screen_nacht_ROT
CameraFogColor cam,cam_nebel_nacht_ROT,cam_nebel_nacht_GRUEN,cam_nebel_nacht_BLAU

a = 1
For mo.model = Each model
If mo\alpha_on_off
EntityAlpha model_handle(a),mo\alpha_nacht#
EndIf
If mo\blend_on_off
EntityBlend model_handle(a),mo\blend_nacht
EndIf

a = a + 1
Next

am_light=licht_helligkeit_nacht

Else
CameraFogMode cam,cam_nebel_tag_on_off
CameraFogRange cam,cam_nebel_reichweite_tag_vorne,cam_nebel_reichweite_tag_hinten
CameraClsColor cam,cam_clear_screen_tag_ROT,cam_clear_screen_tag_GRUEN,cam_clear_screen_tag_BLAU
CameraFogColor cam,cam_nebel_tag_ROT,cam_nebel_tag_GRUEN,cam_nebel_tag_BLAU

a = 1
For mo.model = Each model
If mo\alpha_on_off
EntityAlpha model_handle(a),mo\alpha_tag#
EndIf
If mo\blend_on_off
EntityBlend model_handle(a),mo\blend_tag
EndIf

a = a + 1
Next

am_light=licht_helligkeit_tag
EndIf


AmbientLight am_light,am_light,am_light
End Function

Scavi
03.04.2004, 19:47
Ist das ne Skritsprache ? Worauf basiert sie ?

2paul
04.04.2004, 01:00
bin mir nicht sicher,
aber ich glaub, dass ganze is in assambler geschrieben...

aber nagel mich nicht drauf fest,
laufen tuts auf jeden fall 100%ig

und fettes hilfe-bord,
und 1000 tutorials,

ich kann es nur empfehlen,
auch für 2D

Scavi
04.04.2004, 14:49
Hmm, aber es nutzt DirectX, oder ?

2paul
04.04.2004, 18:18
yoooh genau,
und das kriegt er auch wirklich gut hin...

hab das gtanze unter win95 auf einem 600ter,
rennt...

Scavi
05.04.2004, 11:31
Also eine Art SDL für DirectX ?

2paul
06.04.2004, 11:26
genau....

aber die sprache bietet alle elemente,
die man so braucht

functions
listen
alle schleifen...
und und und...

ich mein ich hab auch c und c++ und java gelernt,
aber das is sooooo aufwendig...

das hier geht richtig fix...

und darauf steh ich irgendwie :-)

und ich bin noch an keine grenze gekommen,
goalkeeper hat 20.000 zeilen code,
und rennt :-)

gruss und so
paule

2paul
14.04.2004, 08:53
update :

ok, hab noch ein paar features implementiert,

distanz für mausevents ist einstellbar,
globaler sound
event-sound
zeitgesteuerte events
leitern
lichtschalter
sichtbare lichter
auswirkung von events auf kamera

dabei wurde erstmal wert drauf gelegt,
statische modelle zu verwenden,

animierte objekte werden folgen.

und alles wie gehabt,
alles lässt sich über die txt-files einstellen

zu finden unter
www.goalkeeper2004.de/data/level_edit/level_edit_example.exe


ok, und wer vom hammer die volle dröhnung bekommen hat,
kann dann nochmal versuchen, die lichter als fahrstuhl zu benutzen,
das geht :-)

na wie findet ihr das ???

2paul
14.04.2004, 10:46
hier noch ein paar screenshots

http://www.goalkeeper2004.de/data/level_edit_features.jpg

Scavi
14.04.2004, 12:02
Immernoch falsches Forum, verschiebt das denn nun mal jemand ?

2paul
14.04.2004, 19:34
ich glaub wir sind hier allein... :-)

ich mach noch ne richtige päsi wenns fertig is,
die kommt denn unter projekte, ok ???

Scavi
15.04.2004, 14:43
Yo, glaub ich auch. Da fragt man sich, wofür es Moderatoren gibt. Sach mal, braucht man für die Sachen die man entwickelt dann zum Ausführen irgendwelche DLLs ?

2paul
15.04.2004, 19:48
neee, das is alles in der .exe,
die ist dafür einigermassen fett,
aber das könnte man auch noch optimieren,
damit hab ich mich aber noch nicht beschäftigt...

gruss
paule

Scavi
16.04.2004, 11:36
Aha, wie definierst du fett ? ..in MB ? Kann man die Ressourcen in die Exe einbinden ?

2paul
16.04.2004, 15:02
die exe is jetzt 1.2 mb....
für den editor

2mb für das spiel...
also auch nicht zu fett

ressourcen ???
er macht alles alleine,
du schriebst code,
er macht die exe,
und da is dann alles drin,
was er braucht...

Scavi
17.04.2004, 13:34
Ich meine mit Ressourcen Texturen, Sounds, Musik, Dialoge usw. ..Sind die mit drin ?

2paul
17.04.2004, 20:19
nööö, die sind extern,
gucks dir doch mal an :-)

hab gerade den ersten raketen-werfer gebastelt,
der is aber noch nicht hochgeladen...

2paul
18.04.2004, 22:07
noch nen lüttes update...

ich hoffe mit dem jetzigen update
sollte das "memory access vialoation"-problem
behoben sein....

#####

und...

es gibt die ersten rocket-laucher
und man kann auch selber ballern....

das schöne an den lauchern is,
dass wie gewohnt voll einstellbar sind,

der erste hat eine langsame feuerfrequenz,
ebenso ein hohe ungenauigkeit,

dem 2. hingegeen sollte man nicht zu nah kommen :-)

#####

hier nochmal der neue offizelle link

www.goalkeeper2004.de/level_edit.htm

2paul
22.04.2004, 20:10
ok, wenn es schon so blöde rocket la(u)cher gibt,
muss ich euch ja auch das geeignete werkzeug geben,
sie zu bekämpfen...

wir kommen zum ersten waffen-update...

dazu muss ich sagen,
dass es mir wirklich schwer gefallen is,
shotguns und uzis zu basteln...
ich habe 2 kinder, und halte nicht allzuviel davon...

nichtsdestotrotz lässt sich nicht bestreiten,
dass darin der reiz des spiels besteht,
für verschiedene aufgaben verschiedene waffen...

ok, ich stehe eigentlich eher auf magie und schwerter,
aber das is noch zu heftig für den anfang

also ganz normal counterstrike-equitment...
granaten und raketenwerfer werden noch folgen,
messer sicher erst sehr spät...

was mir jetzt vorschwebt sind bewegte ziele,
nicht gleichmässig...
die sollen schon angreifen....
na schaun wir mal...

zu den jetztigen waffen lässt sich sagen,
die shotgun hat nur eine sehr kurze reichweite,
die pistole ist nur zur veranschaulichung
mit sichtbaren geschossen ausgestattet
kommt noch raus..
die sniper hat nen feinen zoom
und behindert einen beim tür öffnen...

##########

meine frage wäre...
bei wem tritt auch der fehler auf,
dass der hammer keine auswirkung
auf die kamera hat ???

is das sehr häufig...??
bei mir gehts und bei meinem tester nicht ???

naja...we will see...

2paul
24.04.2004, 14:19
moving targets....

zu beginn möchte ich euch bitten
mit der uzi ein herz auf die wand zu malen
für den frieden auf der welt :-)

am anfang hatte ich die einschusslöcher
auch auf türen, bis ich denn feststellte,
dass die dableiben wenn die tür geöffnet wird...
und das so scheisse aus...

aber das mach ich noch...

ok, ihr werdet zu beginn keine veränderung merken,
da die moving-targets deaktiviert sind...

warum ich das gemacht habe,
werdet ihr sehen,
wenn ihr sie aktiviert

ihr müsst nur euer "config"-verzeichnis löschen,
und das "config_hard_boiled"-verzeichnis in "config" umbenennen...

aber wer dann nicht schon im fallen
die uzi in der hand hat,
is selber schuld :-)

und selbst dann seid ihr tot...

am anfang waren die dinger schon schwer zu kriegen,
aber seit ich ihnen das öffnen von tür beigebracht hab,
sind die eigentlich unbesiegbar....

das sieht zwar noch ein wenig scheisse aus,
wie die das machen...
aber das ändere ich noch...

vielleicht hier nochmal der richtige link
www.goalkeeper2004.de/level_edit_fameset.htm

2paul
01.05.2004, 11:08
ok, ich bin zwar noch nicht ganz soweit,
aber ich habe gestern,
das erste mal eine vollkommen durchlöcherte tür aufgehen sehen,
die auf einem anderen rechner ausgelöst wurde

willkommen in der welt des netzes

ich habe zwar noch ein paar schwierigkeiten,
wie die synchronistation der beweglichen objekte,
( dass überall zur gleichen zeit der hammer oder fahrstuhl
an der selben stelle ist )
aber ansonsten sieht das alles schon ganz lauffähig aus...

ok, aber was nützt das ganze,
wenn es nur im LAN spielbar ist ???
das is mist !!!

im internet, that´s it :-)

ok, mein weiteres konzept sieht vor,
dass sich der server ( auf dem das spiel gestartet wird )
im internet auf einem zentralen server anmeldet...

jedeR der/die spielen möchte,
kann die liste aller verfügbaren server abfragen,
und sich darauf einklinken...

das konzept is nicht neu,
- quake
- counterstrike
- far cry
- warcraft
- ...

der gipfel wäre dann eine verbundene welt,
bei der mensch von einem level in der anderen welcheln kann,
sowas wie everquest
aber soweit bin ich noch lange nicht

so...
nun mein problem....
ich habe nur LAN, kein ISDN oder DSL,
würde mich freuen, wenn sich ein paar leute
bei mir melden würde, die sowas haben,
mit ein wenig ahnung von netzwerkspielen
um das ganze mal zu testen...

ich weiss nämlich nicht,
ob ich mit dem jetzigen system klarkomme...
ich verwende directPlay über TCP/IP,
vielleicht muss ich das noch ändern...

ihr kriegt mich wie immer unter

paul@goalkeeper2004.de

oki

2paul
02.05.2004, 01:28
UDP !!!!! :mauer:

für echtzeit-netzwerk-spiele nimmt man UDP... :mauer:

hättet ihr mir das nicht gleich sagen können ??? :-)

2paul
09.05.2004, 10:34
netzwerk-preview

ok, dies is nur eine beta,
aber es geht....

was geht noch nicht ???

join game -> lan game -> nur mit IP nicht mit namen

erstmal nur 2 clients können sich connecten,

die beiden können sich noch nicht sehen

was geht ???

im single-player modus,
heisst create game und niemand loggt sich ein,
ist das system voll funktionstüchtig...

der netzwerktrafic ist,
( wenn man dem windoof-task-manager glauben schenken darf )
von 60 kbyte / sec bei der verwendung von directPlay über TCP/IP
auf 4 kbyte / sec bei UDP gesunken

warum lad eine unfertige version hoch ???

vielleicht gibts ja leute die das mal im www testen wollen

wie geht das ???

einwählen
eigene ipadresse ermitteln, mit "ipconfig" in der ms-dos-oberfläche
diese ip-adresse an einen 2. weitersenden,
der sich dann auch einloggen kann...
mit create -game neues spiel starten,

der 2. muss sich dann mit der ip-adresse mit join-game einloggen

is noch nicht so spannend ich weiss,
aber bald gibts dann hoffentlich
nicht richtige test-version

das serverfenster is manchmal nur mit esc zum schliessen zu bewegen

wär nett wenn ich ne meldung bekommt,
obs geht oder nicht...

hier im LAN rennts hervorragend
www.goalkeeper2004.de/data/level_edit/netz_beta.exe

oki

2paul
16.05.2004, 15:25
ok leute, das netzwerkspielen wird konfortabel,

startet ihr ein neues spiel,
stösst der server ein php-script auf www.2paul.de an,
dieses script macht einen eintrag in die mysql-datenbank
solange der server läuft,
meldet er sich jede minute beim 2paul-server,
und aktualisiert die anzahl der spieler, die gerade spielen,
den level, der gerade gespielt wird, und den zeitstempel

sooo, kommt jetzt ein anderer auf die idee mit "join-game"
-> "internet-game" nach aktuellen spielen zu suchen,
stösst dieser ein anderes script an,
- dies durchsucht erstmal alle einträge, und löscht alles was älter als 2min ist
aus der datenbank...
- liest die komplette liste aller server aus, die zur zeit online sind...

ein klick genügt und ihr seid connected...

anfängliche planungen über cgi und dynamische txt-files habe ich verworfen,
eine php-mysql-lösung erschien mir am schnellsten und sichersten

ich habe die ersten tests mit milkshape3d gefahren,
konvertieren von mdl files ins directX- oder .b3d-format,
läuft ausgezeichnet,
das nächste update wird also die ersten animierten charactere enthalten

www.goalkeeper2004.de/data/level_edit/netz_beta_2.exe

2paul
17.05.2004, 22:10
das ging ja fixer als ich dachte :-)

der erste charakter is drin....
der sniper_man...

ich lad das jetzt noch nicht hoch,
nur mal eben als message...

ich habe ein fertiges couterstrike-mdl-modell genommen,
mit milkshape decompiliert,
dann hat man so um die 1 mio smd-files,
für jede kleine animations-frequenz eine datei...

dann hab ich die haupdatei mit dem mesh importiert,
und dann eben jede anmation die ich haben wollte,
auch wieder importiert, milkshape übernimmt dann die animation,

diese musste ich dann nach ein wenig experimentieren,
wieder alle einzeln abspeichern...
also ich hab jetzt erstmal, ohne aktion, rennen, springen,
schiessen eine hand, schiessen gewehr
ich habe mich für das b3d-format entschieden,
es gibt einen exporter aus milkshape dafür,
als directx wäre ebenso möglich, nur sind die datein dann grösser,

so damit wären die körper und animationen im spiel...
mussten dann nur noch bei positions-veränderungen des spielers
an den anderen spieler übergeben werden, fertig :-)

ok,ok, ein paar probleme sind da noch...
ich muss die waffen mitanimieren, das wird nicht so einfach,
aber sonst siehts nicht aus...

vielleicht noch ein paar weitere gedanken zur spielidee...
ich will insgesamt 3 spieler-charaktere haben,
- sniper_man
- einen magier, priester
- einen berserker, mit fetten waffen
alle 3 heldentypen spielen gegen die maschine,
die eben nur aus maschinen besteht...
die maschine bleibt unbesiegbar...
nein, nicht dass der mensch immer verliert,
aber die maschine lässt sich beliebig hochschrauben,
bis sie wieder unbesiegbar ist...
je nachdem auf welcher schwierigkeitsstufe man spielen will...

ich mein, ich will schon mehr als 3 leute in einem spiel haben,
nur eben nur 3 charaktere, alle mit besonderen eigenschaften,
und nur das zusammenspiel dieser eigenschaften machen einen sieg möglich...

weiterhin weiss die maschine immer gegen wieviel leute sie spielt,
heisst, ich versuche das so hinzubekommen,
dass es doppelt so schwer wird zu siegen, wenn 2 leute spielen,
anstatt einem...

ich bin mir durchaus bewusst, dass das einige arbeit machen wird,
jeder level muss seine KI besitzen, ich werde knoten-punkte festlegen,
wo die maschinen gute ausgangspositionen besitzen,
vielleicht auch koordiniertes vorgehen....

die anzahl der maschinen-charaktere werd ich am anfang gering halten,
vielleicht auch so 3 stück, weil: die muss ich ja auch animieren,
nicht so fett, aber sowas kostet immer viel zeit...

ich freu mich schon richtig,
bald hat das programmieren sein vorläufiges ende,
und ich bin nur noch am modellieren und animieren... :-)

http://www.goalkeeper2004.de/data/level_edit/screen.jpg

2paul
20.05.2004, 22:04
formate und tools :

ok, ich hab mir jetzt in die ganze geschichte reingearbeitet,
so fass ich das hier mal zusammen...

das bezieht sich jetzt erstmal auf halflife und cs,
quake und unreal wird irgendwann folgen

vielleicht als erstes, für alle freunde von cinema4d,
es gibt keine möglichkeit animierte objekte aus milkshape
nach cinema zu bekommen, statische objekte ist kein problem,
das geht über das .obj-format von wavefont(maya)...
und das ist wirklich verwunderlich, da milkshape irre viel importieren
und exportieren kann...aber nicht ändern

bsp:
ist eigentlich nur das compilierte wad-format, not more,
bsp sind von der halflife-engine lesbar.

wad:
das eigentliche format für halflife level, und das kann wirklich ne menge,
schon fast unglaublich, texturen, geometrie, sound, licht, schatten...
ich weiss gar nicht genau was alles, für mich sind wads nicht so interessant,
da ich mit meinen werkzeugen es nicht bearbeiten und einbauen kann.
das heisst nicht, dass es nicht schon sehr viele nette leute gibt,
die im wad-format feinste textur-paks zusammengestellt hätten...
wie krieg ich was aus ner wad raus ???
erstmal der hammer-editor(ehem. worldcraft), aber der kann nichts exportieren,
für meine zwecke eignet sich besser wally ein reines texturing-tool,
was auch bmp oder jpg´s exportieren kann, somit kann ich diese texturen aus den
wad-files verwenden..

mdl:
das format für animierte charaktere, gibt es massenhaft fertige modelle im netz,
mdl ist auch nur ein compiliertes format von spm-files, dazu gehört dann noch eine
qc-file und die texturen im bmp-format...
ok, die texturen können so genommen werden...
die qc-file ist nicht weiter interessant, ist eine txt für den compiler
decompilieren kann man das direkt mit milkshape3d..

spm
eine decompilierte mdl hat immer eine referenz-spm, in der ist das modell gespeichert,
je nach modell sind da dann noch 1mio..:-), naja 800-1000 sinds schon spm files,
in denen sind die animationen gespeichert, ok, bearbeiten lässt sich das ganze mit
milkshape, dazu erst die referenz-spm importieren, das modell ohne animationen,
und dann einfach noch die gewünschte animation importieren, thats it...
und wie gesagt, milkshape kann dann in eine menge formate exportieren,
ich hab mich wie gesagt für das blitzeigene b3d-format entschieden...

mein einzigstes problem ist, dass das b3d-format keine bones unterstützt,
wie ich das mitbekommen habe wird daran gearbeitet, noch gibt es ein anderes format,
welches blitz lesen könnte, was bones unterstützt, directX kennt sowas auch nicht
ohne hilfe...heisst ich kann meine waffen oder andere dinge nicht einfach mit
dem bone des animierten objekts verbinden....shiet, ich hab mir jetzt halt damit
geholfen, einfach die waffen in milkshape an den knochen zu hängen, und das ganze
kompletto zu exportieren, is natürlich doppelt und dreifach gemoppelt, aber es geht :-)

ebenso ist es ohne bones nicht möglich, die animationen extern abzuspeichern,
heisst für jede animation muss ich das komplette modell nochmal in b3d konvertieren..
dafür ist b3d echt lütt in der datenmenge und lässt sich hervorragend packen,
somit wird die datenmenge nicht allzu gross...

ok, das war´s für´s erste, ich erhebe keinen anspruch auf vollkommene richtigkeit,
das meiste weiss ich schon 100%ig, aber man weiss ja nie..

na, liegt ihr alle voll in der ecke ??? ( vatertag )

2paul
21.05.2004, 15:16
fetter fehler...

wenn man .bsp decompiliert bekommt man .map,
die .map enthält die geometriedaten
und kann auch sound und licht aufnehmen,

die .map benutzt dann die .wad, in der nur die texturen
gespeichert sind...

sorry paule

2paul
08.06.2004, 14:45
hey leute,

ich muss euch noch einmal mit screenshots vertrösten,
bin immer noch nicht wieder online,
wird wohl sicher auch noch ein paar tage dauern...

http://www.goalkeeper2004.de/fight_the_engine/screens_E_Werk_level.jpg

ich sitz eigentlich die ganze zeit an dem ersten level,
dabei hab ich erstmal darauf wert gelegt
diese lightmaps einzubauen,

ok, ich bekomm es nicht so gut hin wie valve :-(
die haben ja richtig schöne schatten,
zumindestens auf den guten maps

vielleicht kann ich da mit c.o.f.f.e.e noch was lösen,
das ist eine cinema4d eigene programmiersprache,
aber da bin ich noch nicht weiter...

also hab ich erstmal nur bodenschatten,
eben mit dieser beschriebenen methode,
nur schatten in der draufsicht mit cinema4d gerendert,
das dann auf eine fläche projeziert, die ein wenig über dem boden liegt,
soooo das sah immer noch scheisse aus,
also musste ich noch ein invertiertes bild nehmen,
und das als alpha-kanal auf die selbe fläche legen
und ich denke das ergebnis lässt sich sehen...

senkrechte schatten lassen sich ohne script
nur mit sehr viel handarbeit einbauen,
und das mach ich nicht, das is mir zu heftig

zum besseren verständnis hier mal die beiden maps,
schatten und alpha-schatten...

http://www.goalkeeper2004.de/fight_the_engine/schatten.jpg

ok, kommen wir zum 2. aspekt der lightmaps,
dieser wird in 3D-tools als glanzlicht bezeichnet,

reflektionen von lichtern auf wänden und am boden...
das ist um einiges einfacher,
ich habe einfach zu jeder lampe 2 sprites definiert
die einfach auf die wand oder den boden gelegt werden
und damit für den glanz-effekt sorgen

sehr gut auf dem ersten screenshot zu sehen...

sprites-erklärung:
sprites sind 2d-grafiken die in die 3d-welt legt werden,
durch verschiedene mapping-verfahren können unterschiedliche effekte erzielt werden,
z.b. hab ich die einschusslöcher oder sichtbaren lichter genauso gemacht
dabei kann man für einen sprite einstellen,
ob er fest im 3d-raum liegt oder sich immer auf die kamera ausrichtet

http://www.goalkeeper2004.de/fight_the_engine/lampen_sprites.jpg

zum besseren verständnis hier die sprites für die neon-lampe des ersten screenshots
der erste ist das sichtbare licht innerhalb der lampe
der zweite ist die wandreflexion
der dritte die bodenreflektion, diese grafik hab ich heller gemacht,
die wirkliche grafik ist viel dunkler

soooo, das waren die maps,
aber das macht immer noch keine vernünftige beleuchtung

erstmal hab ich das ambient-light heruntergedreht,
da das immer zu sehr "flachen" oberflächen führt,
und habe dafür ein direktionales licht ersetzt
dadurch werden aber die nicht beleuchteten flächen sehr dunkel,
also hab ich noch ein gegenlicht auch als direktionales licht eingefügt
das hab ich eben in der helligkeit reduziert,
bis es passte

ok, das war das licht,
kommen wir zum level-konzept

die menschen entstehen auf dem zentralen platz mit dem stier

in der stadt gibt es 3 einstiegspunkte für maschinen
mit X markiert...

die maschinen bekommen zufällige missionen,
- stellung halten
- patrolie
- angriff
- wechsel-position

weiterhin wird für die maschinen pro platz eine zufällige anzahl ausgewürfelt,
sodass das alles jedes mal anders aussieht

ziel ist es ja in diesen grossen blauen kasten einzudringen
das E-Werk, aber es wäre fatal da direkt anzugreifen,
da ja die maschinen aus der stadt irgendwann zu tor kommen,
den menschen also in den rücken fallen würden,
also erst die stadt säubern, um sich dann in ruhe an die verteidigungsanlage
innerhalb des werks zu machen...

das werk selber kann man auf 3 arten erstürmen,
fetter vordereingang, seiteneingang und über das dach...

das ganze ist angelehnt an assault und italy
falls jemand die maps kennt

ok, für die ganz interessierten hab ich den level zum probe-surfen mal hochgeladen
ohne gegner und das werk is auch noch nicht fertig...
als test hab ich mal ein paar fettere modelle von fahrzeugen eingebaut,
( gesamt-scene 5500 polygone ohne fahrzeuge -
fahrzeuge zusammen 4000 polygone
aber rennt auch voll auf dem 600ter :-) )

http://www.goalkeeper2004.de/fight_the_engine/kampf_um_das_E_Werk.exe

ok, weiss nicht wann ich mal wieder online bin

oki
paule

2paul
15.06.2004, 13:42
ich bin der groessste :-)
( ok, mit meinen 2,04m kann ich das wohl fast auch mit recht behaupten )

hab gerade die glass-animation programmiert,
hat echt keine stunde gedauert...

wollte das erst mit cinema machen,
alles von hand animieren und denn irgendwie exportieren,

blitz machts möglich,
ich exportiere jede scheibe so wie sie ist als eigenes .x modell
vorher zerschneide ich es noch ein wenig,
damit ich ein paar oberflächen mehr bekomme..

kollidiert dann irgendwas mit der scheibe,
zerhacke ich das ganze teil in seine einzelteile,
jedes polygon wird dann ein eigenes objekt,
noch eine kleine gravitation - ein wenig drehung
dann noch noch ne kollisionsabfrage
und schon liegen die splitter fein säuberlich verteilt
in der gegend rum :-)

die syntax kommt wiedermal von jemand anderem,
ich habs nur umgebaut und eingebaut...

könnt ihr euch vorstellen wie schön ich da die maschinen
nach ihrem ableben zerfetzen kann, mit nem fetten knall,
und einer schönen explosion :-)

apropose knall...granaten gehen auch schon :-)

und bei den gegnern hab ich auch schon ne weiteres konzept,
die hauptgegner der ersten serie werden hubschrauber,
ergänzt durch kleine flieger und eben den stehenden geschützen,
die stehenden geschütze sollen dann einmal, normal schiessen können,
aber eben auch granaten werfen, für den nahkampf...

der hubschrauber wird unverletzlich, heisst mach ruhig dein magazin leer,
der is immer noch da....
er bekommt verschiedene kleine hit-zonen, an denen er verletztlich is,
rotor oben und hinten, unten nen tank, für den bauch-schuss,
und die lenkeinheit im cokpit
genau der richtige job für den sniper-man,

problem is nur, er wird mit vielen zufälligen bewegungen ausgestattet,
das braucht zeit zum zielen,
also unter attack nicht wirklich möglich...

so kommt der teamplay-charakter stärker zum ausdruck,
einer lenkt ihn ab und rennt durch dunkle gassen
der andere befördert ihn dann in den maschinen-himmel

und sein ende hab ich auch schon vor augen,
erst ne schöne rauchanimation an der trefferstelle,
er kommt langsam ins taumeln, immer stärker,
bis er irgendwann mit irgenwas kollidiert,
dann zerlegts ihn in seine einzelteile

und da mein sniper-man wohl eher dem typus des jägers entspricht,
wird es wohl 4 menschen-klassen geben,
der wahre dieb, kann sich dann kurzzeitig unsichtbar machen,
haft-minen anbringen, fallen ( kontakt-bomben ) legen,usw...

ansonsten hab ich noch ein wenig zeit in die performance gesteckt,
als erstes hab ich den ganzen laden nochmal umgemodelt,
die alte geschichte mit den 2 exe-files und den 2 fenstern is geschichte,
ein modell - ein fenster, da hab ich gedacht, das is es,
nicht mehr alles doppelt rechnen und updaten, das sollte es doch bringen... :-)

nix da... :-(

das hat vielleicht 2 bilder/sec gebracht... ???

bis ich denn mal irgendwann darauf kam, das antialiasing auszuschalten...

das brachte 15 bilder/sec ... :-)

bei mir läuft er jetzt mit lockern 37 frames/sec,
selbst mit den "grossen" fahrzeugen
und ich hab immer die langsamsten bildwiedrholraten,
mit den leuten, mit denen ich´s vergleichen hab..


http://www.goalkeeper2004.de/fight_the_engine/screen_glass_granate.jpg

ok, dass solche spielerein ein wenig performance kosten is klar :-)

aber das is ja nur kurz,
der is dann schon schnell wieder oben


also läuft alles...
gruss der paule

2paul
22.06.2004, 13:30
http://www.goalkeeper2004.de/fight_the_engine/gfx/helicopter_pivots.jpg

erklärung helicopter:

2 kollisions-objekte:

- main-collisions-objekt

dieses objekt bestimmt die flugbahn
dass er nicht zu weit runtergeht
sich nicht zu nah an häuser ranwagt, usw...
ich gehe davon aus, dass die lenkenheit vorne im cockpit
seinen job versteht und keine fehler macht
somit beschüzt dieses objekt den helicopter
so ist es bedeutend einfacher für mich,
als ihn immer wieder daran zu erinnern,
nicht zu tief, nicht zu nah an häuser, usw...

- explosions-collisions-objekt

irgendwann ist er dann ja verletzt,
um nicht zu sagen vernichtend getroffen
dann schalt ich einfach das main-collisions-objekt aus
kollisiert dann das explosions-collisions-objekt mit irgendetwas
macht´s bummm...wie gross dieses objekt im endeffekt sein wird,
weiss ich noch nicht, ist nur eine prinzipielle darstellung


erklärung pivot:

pivots sind einfach nur punkte in der 3d-welt
beschrieben durch die position und drehung
in den 3 achsen...

pivots wie auch alle anderen objekte lassen sich hierachisch gliedern,
heisst einer wird parent ( eltern ) der andere wird child ( kind )...

wie im wahren leben, kann das kind machen was es will,
es hat keinen einfluss auf die eltern :-)
bewegen sich hingegen die eltern, hat das kind keine wahl
und es ist an die bewegung der eltern gebunden...

erklärung der achsen :

- X - rot

wird nicht dargesellt, da diese achse von uns weg zeigt

- Y - grün

ist eigentlich immer die höhen-achse

- Z - blau

ist die hauptachse für die fortbewegung

beispiel in blitz:

syntax:

TranslateEntity objekt,X-wert,Y-wert,Z-wert,True

das letzte True bedeutet globale werte werden verwendet,
im gegensatz dazu gebe es noch die lokalen werte,
die sich auf die eigenen ausrichung beziehen...

gravitation würde also wie folgt aussehen

TranslateEntity helicopter,0,-gravitions_kraft,0,True

erklärung der helicopter-piviots:

- main-pivot

es wird wohl aus 2 pivots bestehen,
eins für die hauptausrichtung und die fortbewegung
dies is der vater aller bewegungen,
hier wird die fortbewegung und drehung festgelegt,

eins für die zufälligen bewegungen des körpers
es ist kind des ersten pivots
hier werden die zufälligen bewegungen eingebaut,
auch die neigung für beschleunigungen,
einfach alles was den körper angeht
alle weiteren pivots und auch der gesamte körper(mesh) werden
kind dieses pivots

- die beiden rotor-pivots

sie sind einfach nur kulisse, die haben nichts anderes zu tun,
als brav kind zu sein, und sich jeweils um die richtige achse zu drehen
main-rotor dreht sich um die Y - achse
heck-rotor um die X-achse

- interessant wird noch das launcher-pivot

es wird wohl aus 2 pivots bestehen
alle sind natürlich erstmal wieder kinder des main-pivots
so ABER auf das geschütz kommt es an,
wenn das geschütz nicht ballern kann, nützt das ja alles nicht,
und da es ja, wie in real-life nur einen begrenzten drehradius hat
würde sich auch der hubschrauber drehen, um wieder in schussbahn zu gelangen

main-lancher-pivot

ist für das gesamte geschütz zuständig
das kann sich nur um die Y-achse drehen,
der öffnungswinkel könnte 90° und -90° betragen,
heisst das gesamte geschütz kann voll nach vorne und
auch zu beiden seiten ballern, ohne dass der gesamte hubschrauber reagieren muss
nur hinten ist er schutzlos

kanonen-rohr-pivot

hat die selbe position und drehung wie das main-lancher-pivot
und ist natürlich auch das kind des main-lancher-pivots
kann sich aber nur in X-richung drehen
eben dass die kanone auch fast senkrecht nach unten schiessen kann...

haupt-bewegung

neben den zufälligen bewegungen, die aus turbulenzen und lenkmanövern resultieren
bekommt er natürlich eine eine max-geschwindigkeit,
er wird am anfang nur stehen können und vorwärts fliegen,
vielleicht treff ich ja mal einen, der von helicoptern ahnung hat,
der mir dann sagen kann, ob so´ne geschosse auch das rückwärts-fliegen drauf haben
aus filmen weiss ich dass die dinger sich beim beschleunigen immer nach vorne neigen
( also guckt er in deine richtung und senkt die nase, sieh zu dass du irgendwo rein kommst )-

die einzigste wirkliche schwäche die so eine kampfmaschine hat,
ist der begrenzte schuss-radius und langsamkeit seiner gesamt drehung,
das vordere geschütz dreht schnell und die kanone sogar noch schneller
aber bis sich so eine tonnenschweres monster in der luft zur drehung überzeugen lässt,
vergeht schon die eine oder andere millisekunde,

ganz im gegensatz zu euch, ihr dreht euch um 180° in 10 millisec oder so...

das weiss natürlich auch die lenkeinheit
somit wird er natürlich versuchen, sich immer die gegner in seinem winkel auszusuchen,
heisst, selbst wenn der eine spieler ganz nah is, aber von hinten kommt,
und der andere in ruhe in einiger entfernung auf dem dach mit der sniper sitzt,
wird er bevor er sich dreht, lieber einmal kurz die nase senken,
und zack is er bei dem auf dem dach...

vielleicht nochmal zu den waffen...

er bekommt am anfang nur die bord-kanone,
ich denke, das is schon heftig genug,
solange sniper-man alleine is,
werden dann die menschen besser,
wird er dann auch so nette raketen-baterien an den flügeln bekommen,
wie in real-life...
und wenn das nicht reicht...
bekommt er noch stehende feuernde objekte an den seitentüren,
wie in real-life

persönlicher kommentar :

ich hasse die dinger, echt...
aber sie faszinieren mich auch,
wie oft hab ich mir ne sniper oder zwille gewünscht,
wenn diese dinger in formation über meinen wald gedonnert sind,
jetzt kann ich se endlich vom himmel holen :-)

##########

so und da ich jetzt schon sooooooo viel gelabert hab,
kommt es auf ein paar zeilen mehr auch nicht an,
und ich erklär mal kurz wie sowas ich blitz aussehen könnte

##########

erklärung typen

typen in blitz3d sind sowas was man in c struct nennen würde,
aber auch der vergleich mit einer tabelle in einer datenbank wäre passend,
es ist einfach eine verkettete liste...
ein Typ besteht aus Fields

###########

erklärung datentypen

integer sind default, werden also nicht gekennzeichnet
strings werden mit $ gekennzeichnet
floats mit #

that´s it...

kein bool ???

wozu bool wenn ich int´s hab :-)

lassen sich aber genauso benutzen :-)

also blitz-syntax ( "//" für alle c -programmierer in blitz is das zeichen dafür ";" )

Global seh_ich_dich //deklaration als globale variable - integer

seh_ich_dich = 10 // irgendwann wird irgend ein wert zugewiesen

If seh_ich_dich // heisst ist der wert für seh_ich_dich 1 oder grösser

Endif

##########

ok, zurück zum helicopter
was will da erzeugen ???

Type helicopter

was brauch ich alles für den ???

Field datei_name$ //wo liegt der haupkörper
Field obj // handle für den körper, das ist dann die entität

Field main_pivot // handle für das pivot
Field pos_X // globale position
Field pos_Y
Field pos_Z
Field dreh_X // globale drehung
Field dreh_Y
Field dreh_Z

das soll für den anfang reichen

End Type

erzeuge neuen helicopter namens "heli"

heli.helicopter = New helicopter

"\" sind die trennzeichen um auf die felder eines typs zuzugreifen

heli\datei_name = "modells_texturen/heli.X"

heli\obj = LoadMesh ( heli\datei_name ) // jetzt hab ich das modell geladen und zugewiesen

heli\main_pivot = CreatePivot ()

EntityParent heli\obj,heli\main_pivot // der körper wird kind des pivots

dann muss ich die werte für position und drehung zuweisen

heli\pos_X = 17
heli\pos_Y = 83
...

PositionEntity heli\main_pivot,heli\pos_X,heli\pos_Y,heli\pos_Z,True // globale position und drehung werden zugewiesen
RotateEntity heli\main_pivot,heli\dreh_X,heli\dreh_Y,heli\dreh_Z,True

das war´s eigentlich schon...

er ist jetzt da und auch da wo er hin soll

für diesen einfachen fall, hätte ich kein pivot gebraucht,
nur so zur erklärung...

jetzt kann ich mit mit solchen befehlen wie

MoveEntity heli\main_pivot,0,0,angriffsgeschwindigkeit

ihn fortbewegen, fliegen tut er nach vorne, also in Z richtung,
also bleiben X und Y auf 0...

##########

so machen wir nur kurz die kollision

Const COLL_HELICOPTER = 1 // konstante variable wird zugewiesen,
Const COLL_HAUPT_MODELL = 2 // gross und klein wird irgnoriert, nur für bessere lesbarkeit

jetzt wird die kollision definiert
die "2" steht für das kollisionsverfahren, in diesem fall sphere-to-polygone,
die "1" steht für die behandlungs-methode, in diesem fall stop

Collision COLL_HELICOPTER,COLL_HAUPT_MODELL,2,1

jetzt wird dem main_pivot der collisions-typ und der radius zugewiesen

EntityType heli\main_pivot,COLL_HELICOPTER
EntityRadius heli\main_pivot,100

so nun kann nichts mehr passieren, ich kann ihn quer durch die weltgeschichte jagen,
und er wird brav, wenn er mit einem umgebungsobjekt kollidiert anhalten...
( dass natürlich noch ein umgebungsobjekt geladen werden und
als COLL_HAUPT_MODELL zugewiesen werden muss, is klaro )

das wäre das ende meiner kleinen blitz-schulung,
damit ich sowas fortführe, bräuchte in feedback...

#########

und vielleicht noch zum schluss ein spruch an alle zweifler und kritiker:

ich gehörte ja selbst dazu,
als ich den fussball-manager angefangen hab,
wollte ich die ganze mathematik in perl schreiben,
und blitz nur die grafik überlassen...
im endeffekt läuft alles mit blitz...
und zwar superschnell...

ich denke nicht, dass sich viele von euch mit den
mathematischen problemen der simulation auseinander gesetzt haben
es gehört zu den aufwendigsten und schwierigsten,
aber nur so lassen sich reale fragestellungen analysieren

diese blitz-engine simuliert 34 spieltage a 9 begegnungen 90 min lang mit 22 spielern
alle mit verschiedenen werten, und wenn man mal 100 sesions rechnen lässt,
kann man sich vorstellen, wie viel er zu tun hat,
und wie schnell er das dafür löst...

ok, jetzt bei dieser 3d-geschichte überzeugt blitz eigentlich noch mehr,
es gibt keine bugs, zumindestens is mir noch nichts übern weg gelaufen
das ganze funktioniert wirklich, unglaublich aber wahr :-)

und jetzt nachdem ich 20.000 zeilen 2d-code (fussball-manger)
und schon sicher wieder die selbe menge an 3d-code hinter mir habe
und von mir behaupten würde, den befehlssatz zu kennen,
und 95% aller befehle schon selber verwendet zu haben,
kann ich immer noch voller überzeugung sagen,
ich bin noch nicht anfangen blitz zu programmieren,
ich brauchte bisher immer nur auf das zurückgreifen,
was sowie schon offen darlag...
meine eigene experimentier-freudigkeit war noch nie gefragt,
alles is in hülle und fülle vorhanden
es gibt ausreichnend dokumentierte beispiele,
und jede fragestellung wurde schon behandelt...

einfach geil.... :-)

okisens
paule

2paul
22.06.2004, 13:31
ok, sorry ich komm nur einmal die woche zum posten...
so kommts alles auf´n mal..

AVALON

ich könnte jetzt von den grossen helden der artus-sage reden,
oder aber von der priesterin morgane aus marion zimmer bradley´s büchern

aber das was mich bei diesem spiel inspirierte ist der film AVALON
einige werden ihn sicher kennen,

wenn man das intro gesehen hat,
könnten bösen zungen behaupten, ich hätte alles geklaut,

das is aber nicht so...

ich überlege schon seid anfang an, wie meine maschinen aussehen könnten,
irgendwann kam es dann, hubschrauber, geil, that´s it,
und dann fiel es mir wie schuppen von augen,
Ash aus dem film sieht aus, wie mein sniper-man,
geil, dann mach ich den heli auch nur an gewissen stellen verwundbar, usw...

ich war sogar kurzzeitig überlegen, ob ich das spiel nicht umbenennen soll,
und versuch kontakt zu den machern aufzunehmen,
aber ich denk das gibt nur probleme,
so spiel ich mit dem gedanken, das ganze nur "engine" zu nennen,
aber mal sehen...

zum film:
mein aktuell absoluter lieblingsfilm,
aber für die freunde der seichten kunst,
mit schnellen schnitten und viel bammbamm und bummbumm,
wird er nichts sein,
es ist eher was für liebhaber anspruchsvollens fernsehens...

warum erzähl ich das alles...

dieser film wird mich noch weiter bei der produktion begleiten...
ich bin ja erst am anfang...

anders wie im film,
wird bei mir das team gewinnen, auch wenn nur einer überlebt,
und die mission zu ende führt...

magier werden die mächtigsten menschen,
leider auch einigermassen schwach an lebenspunkte,
somit braucht jeder magier krieger an seiner seite,
die ihn aus der schussbahn bringen und ihm die zeit geben,
seine macht zu entfalten..

weiterhin wäre ein punktesystem denkbar,
für jede abgeschossene maschine bekommt der spieler und das team punkte,
für jeden toten in den eigenen reihe gibts abzug,
diese werden in der zentralen datenbank gespeichert,
ist eine gewisse punkteanzahl erreicht, gibts neue fähigkeiten oder waffen

naja, das war jetzt ein wenig vorrausgedacht...

##########

kommen wir der rubrik selbstkritik,
da ich ja öfters auch so sprüche bring, wie :
"ich bin der grösste "
muss das auch mal sein :-)

ich hatte ja wirklich erwartet, dass das das aller erste is was höre...

" was ???? deine map vergleichste mit italy und assault "

jaaaa, ich weiss ich habe lang nicht die klasse dieser maps,
alles is supergrade und einfallslos...

ok, ok, es is meine erste map, ich werd mich noch steigern

und der nächste punkt is, dass die map null mit hubschraubern zusammenspielt...
hätte ich gewusst, dass sniper-man heli´s runterholen muss,
hätt ich doch noch ein paar unterstellmöglichkeiten eingebaut,
brücken oder so,
aber ich bin davon ausgegangen, nur diese lütten flieger zu haben,
und da war es mir erstmal wichtig, alles einfach und übersichtlich zu haben,
damit ich die maschinchen auch schön in ihrem verhalten studieren kann...

versprochen, ich werd mich bessern...

###########

und vielleicht nochmal ein grundsätzlicher spruch...

was ich hier abbilde ist kein spiel,
es ist die realität...
und das macht mich unendlich traurig..

aus mitgefühl der menschheit gegenüber hat der heli nur eine bordkanone,
in echt sitzen an der stelle 4 sehr schnell feuernde maschinengewehre,
und von diesen maschinen gibt es viele in allen arten und formen,
und sie werden auch gegen menschen eingesetzt...
und es bedarf keiner grosser maschine, die all das schlechte verkörpert,
es gibt genug menschen die bereit sind, sich sogar daran erfreuen,
diese maschinen zu benutzen...

und nochwas...

die maschine !!! die hat sowieso gewonnen,
hol soviele hubschrauber runter, wie du kannst,
du bleibst teil des systems,
du bist in deinem handlungsspielraum genau auf die möglichkeiten reduziert,
die die maschine dir lässt

danke fürs zuhören
paulsens

2paul
22.06.2004, 13:32
[ok, leute, ich weiss das is tooo much,
aber ihr habt ja eine woche zum lesen,
vorher bin ich nicht wieder da...

die beschreibung der hubschrauber-pivots
habe ich vor der umsetzung geschrieben,
( so zur einstimmung, was will ich da eigentlich bauen )

die realität sieht ein wenig komplexer aus
aber vom prinzip her kann ich es so stehenlassen

ich habe ihn so programmiert, dass ich eigentlich in der KI-steuerung
nur noch seinen ziel-bewegungspunkt ändern muss,
die flugbahn macht er dann alleine,
schön mit beschleunigung und abbremsen in allen richtungen,
wie es sich gehört...

die kanone vorne agiert vollkommen unabhängig von dem rest
sie versucht sich immer auf dich auszurichten,
sie hat eine relativ langsame drehgeschwindigkeit, 2° / frame, ebenso wie das rohr
biste einigermassen im winkel, feuert das ding

ich hab jetzt erstmal 2 KI stufen gebaut,
Traning : is einfach nur zum zeigen, und er zieht so seine bahn
Normal : is dann schon mit umschalten auf attacke
da folgt er dir auf schritt und tritt,
is aber dafür viel zu lahm...

das lässt sich in der global.txt umstellen
eingeschaltet ist zur zeit der traings-mode...

die rotorbewegungen werden bei einigen sicher spackig aussehen,
das liegt an der bildwiederholung, die ist ja überall anders...
das muss ich noch ändern....

der Real-Mode, den bau ich noch....

so von wegen,
gegner ist hinter mir -> volle beschleunigung,dabei drehung um 180°
-> neu ausrichten -> attacke...
so kommt er immer von vorn, und immer mit speed...

das ganze ist jetzt erstmal nur im single-player getestet,
und er richtet sich auch immer auf den spieler am server aus,

kommen mehrere hinzu -> setzte ziel-bewegungspunkt möglichst mittig
damit du alle erwischen kannst -> bleibe möglichst immer in bewegung
-> dreh dich nie auf der stelle....



######

aber das kommt später...
erstmal arbeite ich jetzt altes auf...
durch zäune ballern, leitern in den leveln..
levelausbau...
andere gegner...
missionsobjekte, damit man auch gewinnen kann...
benutzer-menue...

usw....

achja, klettern geht mit
space halten und vor klickern,
sniper-man kommt überall hoch

########

das mit dem zielen hat mir auch noch nicht recht gefallen,
das war für mich schon echt zu schwierig,
( ich bin auch kein baller-genie, ganz im gegenteil :-) )
aber wenn man sich auch noch vorstellt,
dass der die ganze zeit speed macht,
dann erwischt man ihn nie....

also gibts ne zeilerkennung :-)
am anfang hatte ich das ganze statisch,
also sobald ziel im visier feste anzeige...

die jetzte variante sie auf das ziel auszurichten gefällt mir besser,
es steigert die dynamik und hilft beim zielen...
eine überlegung wäre auch,
dass die kamera auf das ziel einrastet...
das wäre dann der simple mode...

naja, schaun wir mal...

übrigens hat da mal wieder der gute alte tangens verwendung gefunden,
ich musste lachen als ich das schrieb,
hätten das meine lehrer von damals gewusst,

ok, das war´s jetzt aber,

wie sagt der jäger so schön,
"weidmanns heil", oder ist das hier unpassend :-)

http://www.goalkeeper2004.de/fight_the_engine/gfx/screen_ziel_erfassung.jpg

paul

ok sag ich noch mal schnell, wo es das gibt

http://www.goalkeeper2004.de/fight_the_engine/

habs gestern nochmal auf dem 600ter laufen lassen, da war er bei granaten-glass ganz schön am abspacken, auch is mir die bildwiderholung noch nicht hoch genug, das liegt an den heftigen modellen, kein spiel hat solche modelle drin...

selbst bei max payne was immer die fettesten hardwareansprüche hat, sehen räder aus wie von fred feuerstein, oder so...

Scavi
22.06.2004, 18:31
Wenn du weiter so machst, wird das hier noch ein ganz nützliches Tutorial! Sag ma, wo hastn du die ganzen Modelle und Bilder her ?

2paul
26.06.2004, 14:42
schön mal wieder von dir zu hören :-)
ich beschäftige mich mittlerweile 4 jahre mit 3d-animation,
da kommt was zusammen an modellen,
kann nicht mehr sagen, wo ???

da gibts auf jeden fall, jede menge spieletexturen
http://planethalflife.com/wadfather/

gruss
paule

2paul
06.07.2004, 12:35
ok, hab nen bischen gequake wegen der grafik bekommen,
so hab dort noch ein bischen geforscht,
und bin auf eine weitere form des multi-texturing gestossen,
die erste war diese geschichte mit der alpha-map für zäune,
dann gibt es noch die enviroment-map,
dabei wird eine textur als kugel auf das objekt gelegt
aber nur als spiegelung, damit lassen sich so glanz-metall-effekte erzeugen,

problem, er überlagert dabei die grundmaterial-textur,
es lassen sich zwar grundfarben einstellen,
aber so richtig ( wie in cinema wo ich für jeden kanal ne neue textur nehmen kann )
geit dat net

es gibt auch echte spielelung in blitz
aber nur als fläche nicht auf körpern

weiterhin hab ich noch einen glanzlicht-effekt für die einzelnen modelle einführt,
und eben mal nen vernünftigen himmel...

ich hab jetzt das config menue erweitert,
dass man eben noch lautstärke, tasten, grafik-auflösung,spiel-schwierigkeit und so einstellen kann
( schuss-taste -> mausabfrage geit noch nett )

hubi auf low-poly umgebaut
durch zäune schiessen
leiterobjekte
fahrstuhl geht endlich...abfrage geändert -> no collision anymore -> distance thats it
heli trifft endlich vernünftig

und dann eben diese ganze geschichte mit glass-granate optimiert,
hatte damals den direktesten weg gewählt :-) wie immer...
in dem moment der explosion findet eine polygone-polygon-collisions-erkennung statt,
( sehr rechenaufwendig ) dann werden die teile in einzelnen objekte angelegt
( zeitaufwendig, viele speicherzugriffe )

jetzt:
wenn er die welt generiert, generiert er die scherben gleich mit,
damit konnte ich distanz-abfragen vom explosisions-mittelpunkt machen,
( keine poly-poly-abfrage mehr )
und die letzte optimierung is, dass ich die bodenhöhe definiert hab,
mit collisions-abfragen fängt er erst kurz vor dem aufprall an,
das funktioniert zwar nicht immer,( fenster im 2. stock, eine seite tief andere hoch )
aber erstmal...

hatte schon überlegt, dies komplett zu lassen,
und das glass einfach durch den boden abrauschen zu lassen...
naja, schaun wir mal...

auf jeden fall packs nu auch der 600ter

stuktur wiedermal verändert,
die sprites und sounds sind jetzt in einem globalen ordner,
und werden nicht mehr unter level abgespeichert...
damit jetzt irgendwann leute extern level bauen können

#####

dann hab ich noch ein problem,
hab jetzt mal mit nebel gespielt,
aber das klappt nicht mit sprites,
damit wird der sprite in seiner wahren form ( quadrat ) sichtbar,
das sieht echt scheisse aus, weiss jemand ne lösung ???

#####

ok, das wird schon wieder so viel :-(
das problem mit dem ich mich aktuell beschäftige
( immer 10 probleme gleichzeitig :-) )
is dieser blöde senkrechte schatten,
mit cinema lässt sich das nicht lösen,
ich dachte es wäre möglich, aber sehr aufwendig,
aber so wie ich mir das gedacht hab, gehts gar nicht

so spiel ich echt mit dem gedanken genauso ein ding zu schreiben,
wie die jungs von value, wenn die ihre bsp´s kompelieren,
auswertung der lichtquellen und bestimmung der nicht beleuchteten stellen,
und daraus dann ne shadow-map generieren
( aber da sitz ich sicher ewig dran )

aber rein technisch sollte das funktionieren,
in blitz kann ich in einen textur-buffer rendern

man müsste also "nur" jede fläche in kleine flächen unterteilen,
dann abfragen ob sie "im sichtbereich des direktinalen licht" sind ( blitz -> EntityInView)

#####

und ein nettes feature hab ich noch eingebaut,
er durchsucht jetzt das verzeichnis "music",
alles was auf ".mp3" endet wird in eine liste aufgenommen,
und dann spielt er das halt zufällig ab,
dann muss man nicht immer das selbe hören :-)

2paul
09.07.2004, 13:45
ok, meine neusten maschinen heissen roller-blaster,
manche von euch werden sie an diese druidekas aus star-wars erinnern...
diese ballernden reifen...
nur glänzen die in dem film nicht so doll... :-)

ok, die steuerung ist um einiges aufweniger als beim heli,
das bedingt sich in erster linie aus der tatsache,
dass es boden-tuppen sind, die eben an allen möglichen ecken hängen bleiben können,

das problem hatte ich ja damals schon,
mit meiner ersten feuernden objekten,

jetzt hab ich wieder eine kollisions-vektor-abfrage eingebaut,
dann richtet er sich an der wand/zaun/usw aus,
und bewegt sich 15 frames in diese richtung,
danach richtet er sich wieder neu aufs ziel aus,
und bewegt sich dann in die richtung weiter...

damit kriegt ich ihn eigentlich um alle ecken rum...

problem sind natürlich innen liegende ecken...
wo er sich dann so richtig schön verkeilen kann,
da wird mir wohl keine wahl bleiben,
ich werde diese bereiche definieren müssen,
und ihm dann eine andere anweisung geben müssen...

z.b. am zaun-tor...
1000 ecken und kanten, komische winkel, usw...
dann sag ich ihm einfach, wenn du in diesem bereich bist und das tor durchqueren willst
richte dich erstmal auf da und dahin aus, dann bewege dich bis da und da hin,
dann tue dies dann jenes...
und wenn du da bist, kannste wieder frei durchstarten,
anders gehts nicht...

ich werd natürlich versuchen nur 2 stritte zu verwenden,
die für alle tor-durchquerungen funktionieren,
und die ich dann auch extern definieren kann,
sodass sich das alle parameter an neue maps anpassen lassen...

das gleiche werd ich wohl an treppen machen müssen,
wenn du da und da bist und hoch willst,
musste erst da und da hin gehen, und dann dalang, ansonsten wird das nie was... usw...
nen bischen nervenaufreibend...

das einzigst nette daran is,
dass es für alle bodentruppen gleich ist,
mensch muss es also nur einmal machen...

##########

und da ich schon wieder in sabbellaune bin :-)
wollte ich noch was grundsätzliches zum programm-ablauf sagen...

eigentlich hab ich schon lange mit dieser frage gerechnet
" du hast ne bildwiederholung von 37 - ich von 70,
denn läuft mein spiel ja schneller... "

wenn ich von frames rede, meine ich die aktualisierungen des spiels,
und die liegt zur zeit immer bei 30...
damals waren es mal 60...
vielleicht muss ich noch mehr runter...

30 mal pro sec wird das spiel aktualisiert,
egal wie hoch deine bildwiederholung ist,
und wenn er das dann irgendwann gar nicht schaffen sollte
irgendwas darzustellen, er versucht die 30 frames zu halten...

so und den rest der power, den er dann noch übrig hat,
an cpu-leistung und grafik-leistung,
das benutzt er voll, um so viel bildwiederholungen zu schaffen wie möglich,
in blitz wird das rendertween genannt

########

der grundsätzlich aufbau sieht so aus

- einlesen der haupt-variablen
- menue-anzeige
- nach "create game" -> einlesen der level-variablen
- aufbau der welt - client
- aufbau der welt - server
( dabei werden serverseitig nur noch ein paar zusätzliche kollisionsabfragen eingefügt )
- dann kommt die endlosschleife, in der die spieleakualisierung bei client und server stattfinden
und eben auch die welt gerendert wird..

2paul
13.07.2004, 10:28
moin...

ok, erstmal lässt mir das mit der grafik keine ruhe,
hab mir mal zum vergleich "return to castle wolfenstein" angesehen,
die haben gar keine schatten-maps !!!!
und das ganze is von ID...
und soooo alt is das nun auch wieder nicht, 3 jahre
( klar in der informatik ist das fast ein zeitalter :-) )

das was diese professionellen leveldesigner einfach drauf haben,
is, alles so weit aneinander anzupassen, dass es einheitlich wirkt,

im gegensatz zu mir, ich zieh alles was ich kriegen kann,
such mir die schönsten sachen raus, und klatsch das in eine map,
und das kann natürlich nicht passen...

naja, das soll sich ja ändern,
mein nächster level wird nen heli-hangar,
vielleicht kennt ja jemand ne site mit nen paar pics,
dass ich mir nicht wieder alles aus finger saugen muss,
und das nicht so ein desaster wird wie bei dem e-werk

#####

ok, zu der steuerung der roller-blaster,
ich werde um diese festen pfade nicht herumkommen,
aber die sind wirklich nur für den notfall,
ich hab mir da was anderes nettes ausgedacht...

ich bin einmal durch meine map gelaufen,
und hab mir diese ganzen blöden ecken, wo er immer hängen bleibt, aufgeschrieben,
die in ne externe liste und eingelesen,

sooo, ballert er jetzt frontal irgendwo gegen,
richtet er sich nicht mehr auf seinen ziel-punkt aus,
sondern durchsucht erstmal diese liste,
und richtet sich auf den nächst-liegenden aus ...

thats it :-)

damit kriegt ich ihn durch dieses kistengewühl,
an den autos vorbei, eigentlich fast überall hin

ok, ein paar dinge wird er erstmal nicht dürfen,
z.b. in häuser, da krieg ich ihn so nicht wieder raus,
aber da bau ich einfach für den spieler unsichtbare barrieren ein,
wo er denn gegen rennt und umkehrt

und dann gabs da eigentlich nur noch ein problem,
diese geschichte, ziel-punkt liegt direkt hinter eine haus,
er ballert also immer wieder dagegen, sucht nen bischen rechts, nen bischen links,
but no way out...
das hab ich so gelöst, dass er denn einfach ein zufällige zeit einrastet auf eine richtung,
denn rennt er erstmal los, und interessiert sich nicht für seinen zielpunkt,
danach kann er sich dann wieder ausrichten,
es klappt zwar nicht immer gleich beim ersten versuch,
aber richtig kleben bleiben tut er auch nicht mehr...

sooo, dann noch eine zufällige umschaltung auf andere ziel-punkte,
falls er doch mal hängt, kommt er spätenstens dann frei..
und schon ballern die reifen mit 13m/frame durch meine welt :-)
schneller als menschen, aber er brauch ja immer zeit,
um sich auszuklappen um ballern zu können,

für das trainings-niveau reicht das,
kommt er dann in die nähe von menschen,
richtet er sich auf die aus, ab ner bestimmten distanz fängt er an mit aufbauen und ballern

im normal-mode kriegen se dann schlauere pfade,
und rennen dir nicht immer gleich vor die flinte,
und kriegen auch punkte an denen sie ausharren und warten ( schlüssel-positionen )

über den real-mode mach ich mir noch keinen kopp,
da muss ich, das ganze erstmal in action sehen

########

auch wenn ich schon wieder langsam in den bereich komm,
mecker zu kriegen, wegen zu viel text,
will ich noch kurz was zu der letzten maschine sagen...

sie ist noch nicht wirklich spruchreif,
aber ich dachte so an energie-bälle,
es gäbe generatoren, die diese bälle produzieren,
sie haben relativ wenig lebensenergie und geringe feuerpower,
bei jedem eigenen schuss verlieren sie lebensenergie,
bis sie sich dann vollkommen verbraucht haben,

als spezial-funktion kann sich aber dieser ball entscheiden,
sich selbst in einen schuss zu verwandeln,
und seinen verbleibende energie auf einmal auf den gegner zu feuern

von der spiel-idee her sollen diese dinger halt nerven,
da sie überall auftauchen können und somit für stetige spannung sorgen,
kein ruhiges hocken mit der sniper auf irgend nem dach,
nein, da kommt schon wieder so ein "mistvieh",
also wieder schnellfeuer-gewehr raus, platt machen,
usw...

###

neue version ist online
http://www.goalkeeper2004.de/fight_the_engine/
am heli noch nichts geändert, nur die roller rollern richtig los :-)

oki

2paul
23.07.2004, 12:14
konzept einer intelligenten maschine

ok, ich sag schon mal sorry, das wird wieder länger,
aber versprochen kein blitz code, alles rein konzeptionell,
und auch das niveau hab ich höher angesetzt :-)
( ich versuchs zumindest )

ok, die wenigsten von euch werden sich meine roller in aktion angesehen haben,
und das is schade, da ich sie eigentlich für euch so hochgeladen hatte,
beim nächsten update können sie ballern,
und dann kann man die bewegungspfade nicht mehr sehen,
die wie ja schon erwähnt frei generiert sind,
anhand von den patroilen-punkten und den eck-punkten,

sooo, aber das ganze saugt natürlich performance,
10 maschinen laufen da, alle mit kollisionsabfrage bei den vielen polygonen im level,
hinzu kommt die permante aktualisierung übers netz,
das ist bei zunahme der maschinen und menschen pro spiel nicht leistbar,
zumindestens wenn an dem server auch gespielt werden soll,
hinzu kommt, dass die wege ja auch nicht optimal sind,

mein konzept sieht nun so aus,
dass ich ihn sagen wir mal 1000 mal einen weg laufen lass,
immer mit fetten zufällen, und die schnellsten 20 merkt er sich,
diese 20 werden dann dem level-designer vorgelegt,
und der trifft die auswahl der besten 10, oder so...
dadurch wird das ganze natürlich statischer, vorgegebener,
das würde ich dadurch kompensieren, dass ich mehr zufälle
und mehr patrollien-punkte einbauen würde....

so damit hätte man schönere pfade,
man könnte die kollisionsobjekte weglassen,
und der server bräuchte nur noch bekannt geben,
für welchen pfad sich die maschine entschieden hat,
nicht mehr die permanente aktualisierung,

da das ganze ja noch nicht wirklich schön animiert ist,
die bewegungen ruckeln ja noch ziemlich,
könnte man so ein script schreiben, was die bewegungen glättet,
besonders die ruckartigen drehungen kompensiert

so das funktioniert natürlich nur bis zu dem zeitpunkt,
wo der fight beginnt, dann schaltet ja die maschine auf angriff,
und verlässt alle pfade, dann muss natürlich die kollision aktiviert werden,
falls er den kampf überlebt ( wir wollen es nicht hoffen :-) )
läuft er halt zum nächstliegenden patroilen-punkt.

nächste stufe :

wie hat deep blue - kasparow besiegt ???
intelligenz ???

nein !!!!

datenmenge und schlaue heuristiken,
sie haben dem rechner halt ne megafette datenbank
mit jeder menge erstklassiger spiele mit auf den weg gegeben,
dann brauchte er nur noch auswählen,
dieser zug 30%ige erfolgchance, dieser 70%, usw....

jetzt wirds ein wenig unheimlich,
ich bekomm bei sowas immer ein etwas mulmiges gefühl,
selbstlernende systeme...

ab einer bestimmten stufe wird es ja immer schwieriger die maschine
intelligent einzustellen, und vor allem, man müsste es für jeden level machen,
das ist so gar nicht leistbar ohne 100 tester, oder so...
wie wäre es also, wenn die maschine aus ihren fehlern lernt,
und natürlich auch aus ihren positiven aktionen....

der server könnte die maschinendaten loggen,
wie z.b. todes-position, position des schützen, usw...
diese werden dann ein die zentrale datenbank übermittelt,
auf befehl des benutzers...

die datenbank filtert erstmal,
wenn die daten von schlechten spielern kommen,(schlechte quote)
werden die daten verworfen,
bei guten spielern wird ausgewertet,
um eben gewisse verhaltensmusten zu vermeiden,
z.b. wenn du an dieser position bist und einen gegner angreifst,
der an der und der position ist, führt das fast immer zum tod,
hingegen suche diese und diese position die hat fast immer zum erfolg geführt,
daraus wird dann ein neues datenpaket generiert,
was auf die server verteilt wird, dann kommen wieder neue daten zurück, usw...

ich denke nur so ist ein so komplexes system unter so vielfältigen möglichkeiten händelbar
natürlich ist das nur ein bruchteil der komplexität von schach,
aber der server hat ja auch keine 2 min zeit zum nachdenken :-)

ich hoffe, dass das projekt diese stufe erreicht,
nicht, dass ich es unbedengt programmieren möchte,
nur, dann hab ich´s geschafft, dann wirds gespielt :-)

und die tatsache, der ich es zu verdanken habe, mir jetzt wieder über solche
sachen gedanken machen zu können, ist, dass ich 2 nette herren gefunden hab,
die mit cinema level bauen wollen... :-)

www.getimpressed.de

oki

2paul
27.07.2004, 12:04
ok, irgendwie verbirgt sich hinter meinen flotten sprüchen auch eine angst,
ich benutze blitz, eine script-sprache, kann also locker irgendwann passieren,
dass ich an eine grenze komm, an der es einfach nicht mehr weitergeht...
in c passiert sowas nicht, und wenn es passiert, hats auch kein anderer,
somit is das denn auch wieder vertretbar...

so zum beispiel mit dem import vom bsp-format, man müsste in c nen converter schreiben,
der geometriedaten ausliest, oder so....

und genau in solchen momenten zieht blitz wiedermal nen trumpf aus der tasche :-)
blitz unterstützt eine form von bsp, kompletto mit lightmaps und so,
das öffnet das tor zum absolut aktuellen, weitverbreitesten map-format :-)
einfach nur geil .....

2paul
14.08.2004, 20:18
aok, ich werde mal ein wenig mehr erzählen, über die maschine,
die ich in meinem spiel so herzhaft bekämpfen will.

DNA-Prozessoren

heutige rechner arbeiten nach dem "von-neumann" prinzip.
sequenzelle abarbeitung von anfragen, er fängt vorne an und hört hinten auf.
der mensch ist dadurch überlegen, da er eben parallel denkt.
ich kann mir die schuhe zubinden, dabei radio hören und mich dabei unterhalten,
kann dabei den gestank der strasse wahrnehmen, und die oberfläche der jeans fühlen,
seh im augenwinkel die sonne auf der scheibe und denke dran, was ich morgen zur party anziehe,
alles in einem moment -> paralleles denken

es gibt sogenannte "NP"-probleme(nicht in polominärer zeit lösbar)
viele reale logistische (transport,KI) probleme sind NP-probleme.
für diese fragestellungen werden eben diese DNA-prozessoren gebaut.
zellen mit infos(DNA) werden durch den prozessor gedonnert,
treffen dabei ihre entscheidungen und werden anschliessend ausgewertet, parallel.
die einführung solcher systeme würde die rechenleistung im vergleich zu heutigen rechnern
um ein vielfaches erhöhen.

ein weiterer vorteil ist der energie-verbrauch.
ein entscheidendes problem von "autonomen intelligenten systemen"
(so nennts der GMD und frauenhofer - robotoren ) ist die energieversorgung.
es wäre technisch viel mehr möglich, doch dann bräuchten die robotoren fette
drehstrom-anbindungen um agieren zu können.
DNA-rechner benutzen biologisches material als datenspeicher.
nicht mehr halbleiter-technologie (silitium,usw).
der energieverbrauch solcher systeme ist nur noch ein bruchteil.
nah am rechnerischen optimum.

ok, die verwenden keine menschlichen gene, ich glaub künstlich gezüchtete,
brauchen se ja auch nicht, so viele informationen pro gen werden nicht benötigt.

evolutions-bausteine

dazu gibts dann diese evolutions-bausteine, die die hardware für die problemstellung optimieren,
heisst der output des prozessors geht wieder als input in den evo-baustein,
der analysiert das, und verändert dabei den prozessor.
der mensch optimiert nur noch den evo-baustein.

bio-informatik

wie schon oben erwähnt, wenn biologisches material als speicher verwendet wird,
benötigt das system minimale energie. ich versuchs mal an einem beispiel.
chipkarten werden mit biosensoren ausgestattet. durch das auflegen eines fingers
wird die spannung zwischen den rillen des fingerabdrucks gemessen,
dadurch wird ein graubild erzeugt, was eine 100%ige authentizierung zulässt.
der stromversorung könnte aus der handwärme gewonnen werden.

mustererkennung

ich weiss nicht, ob ihr minority-report gesehen habt, iris-scan an jeder ecke.
überall gibt es kameras, auf marktplätzen, am bahnhof, in einkaufszentren,
noch dürfen sie es nicht, aber die verfahren werden entwickelt.
die vergleichen dann die aufgenommenen bilder mit bildern aus strafregistern,
selbstständig, das macht der rechner, noch funktionierts nicht 100%,
so legt der rechner dem mensch mehrere mögliche kanidaten vor,
die ähnliche gesichtsstrukturen haben.

selbstlernende systeme

das was ich jetzt schreibe, entstammt einem spiegel-artikel von vor 7 jahren.
die waren sicher auch nicht aktuell mit ihrem beitrag, also ist das vielleicht der stand,
von vor 10-15 jahren.

angefangen hat das ganze durch ein spiel " creatures ",
es hat einen biorhytmus integriert. bewegungsbedürfnis, essen, liebe, schlafen, usw...
der programmierer lies 2 von den viechern auf einem rechner laufen.
und obwohl es nicht programmiert war, kam er irgendwann wieder rein,
und sah wie die beiden sich den ball zugeworfen haben,
normal war, ball wegwerfen, wiederholen, wieder wegwerfen....

das haben sich natürlich gleich die freaks aus dem grossen 5-eckigen-gebäude angesehen.
im pentagon haben se den besten flugsimulator den es gibt, laut bericht,
er simuliert alles druck, flugbewegungen, einfach alles...
problem: hat ein pilot 100 stunden auf dem ding gesessen,
versteht er den algorithmus des gegners.
wir kennen das sicher alle aus baller-games,
2 mal in die selbe falle gerannt, bei nächsten mal weiss man wie es geht.

die haben angefangen solche creaturen für den flugsimulator zu züchten.
heisst, die haben diesem programm alle werkzeuge gegeben, gas geben, höhenruder
und was es da sonst noch so alles in so´m flugzeug gibt,
dann haben se ihn auf eine bestimmte höhe gebracht und abstürzen lassen,
generation um generation, bis der erste anfing das steuer rumzureissen,
dadurch gabs eine kreisel-bewegung, der flieger blieb länger in der luft,
alle weiteren generationen konnten dann auf dieses wissen zurückgreifen,
haben also alle das ruder rumgerissen...

mittlerweile ( stand siehe oben ) können die alles fliegen,
die riskantesten flugmanöver,
diese vom rechner selbst generierte information ist für menschen nicht lesbar,
binär-code, kann nur mit rauslöschen und gucken was er dann nicht mehr kann,
ermittelt werden, wo und welches wissen er schon angesammelt hat.
jaaa, aber unsere rüstungsexperten denken ja weiter.
da dieses projekt so erfolgreich war, sieht die zukunft unserer kampf-piloten mager aus.
maschinen können mit über 10facher erdanziehungskraft (g) beschleunigt werden,
bei menschen ist da eine natürliche grenze -> bewusstloskeit
und maschinen können auf das gesamte wissen aller generationen zurückgreifen.
die treffen fast optimale entscheindungen, durch überschlagsrechnungen,
heuristiken, statistische abfragen, mehr is das nicht

" 1 + 1 "

ich brauch jetzt nur noch diese ganze infos zusammensetzten,
was hab ich dann irgendwann ???
holywood hats uns ja schon in verschiedenen farben auf grossleinwand präsentiert

#######

is nicht ganz das thema, aber vielleicht interessierts ja jemand...
HAARP
weather and mind-control, gibt das mal ein,
und du wirst einen fetten sateliten-schüssel-park in alaska finden.
der uns permant mit der frohen amerikanschen kunden versorgt.
und zwar über hoch-frequenzen direkt ins hirn...
das gibts schon 10 jahre,oder so, wird permanent ausgebaut.

#######

und vielleicht noch mal ein "beam me up, scotty"
geht -> es is möglich materie durch den raum zu bewegen,
das, was zur zeit noch nicht hinkriegen, is,
die materie auch so wieder zusammenzusetzten, wie es war

#######

und um das ganze abzurunden, noch ein ausflug in die hochrechnung,
statistik, operation research...

"die grenzen des wachstums" vom club of rome (falsch geschieben)
1970 trafen sich führende wissenschaftler, aller herren länder,
und der verschiedensten fachbereiche,
und haben dieses buch geschrieben, dabei ging es um genau HEUTE,
genauer gesagt um das jahr 2000.
und sie machen einem recht deutlich, was wird, wenn sich nichts grundlegendes ändert.

ich will hier mal die aussage in einem satz zusammenfassen
" rein rechnerisch hat die erde und der mensch keine chance,
der mensch hat keine natürlichen feinde, also killt er sich selbst,
er raubt sich die grundlage seines seins, die erde,
und das mit offenen augen..."
vielleicht noch 100jahre, vielleicht mehr,
vielleicht aber auch weniger,
und wir haben es endgültig geschafft,
und ein leben wird nur noch in erdlöchern, oder unter glasskuppeln möglich sein,
was es sein wird, was uns den garaus macht, ist dabei eigentlich eher zweit-rangig,
is es, das trinkwasser, die luft, flut-katastrophen, radioaktivität, schwindende athmospäre,
nur eins is sicher, was auch immer da kommen mag,
es wird kommen,
zumindestens mathematisch gesehen "

ich hab das thema mit 2 angesehenen mathe-profs diskutiert,
die haben die aussage bestätigt.

so dumm, waren noch nichtmal die urvölker,
wenn´s da klar war, dass der stamm nicht über den winter kommt,
sind die alten gegangen, um das überleben der jungen zu sichern.

aber dann müsste man dem halbtoten fahrrad-fahrer,
der auf der strasse liegt, weil ihn nen auto überfahren hat, erklären,
dass der rettungshubschrauber nicht kommt,
weil der im endeffekt das leben von allen gefährdet...

###########

bleibt mir eigentlich nur noch eins zu sagen...

" fight the engine "

2paul
17.08.2004, 14:13
ok, noch ist es still in diesem friedlichen bulgarischen bergdörfchen,
mit der uralten bibliothek, der hüterin von wissen und weisheit längst vergangener tage.

doch schon bald werden hier kampf-hubschrauber kreisen
und verrückte scharfschützen auf dächern ihre opfer auflauern

http://www.goalkeeper2004.de/fight_the_engine/screens/1.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/2.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/3.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/4.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/5.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/6.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/7.jpg
http://www.goalkeeper2004.de/fight_the_engine/screens/8.jpg

kommen wir gleich zum thema selbstkritik...
scheisse, viel zu lieb,
oh, mann, das is mir erst am ende eingefallen,
ich will hier nen battle stattfinden lassen,
da muss ja eigentlich schon was zu sehen sein,
von der zerstörung....,
ansonsten bin ich natürlich megastolz,
die arbeit hat sich gelohnt, counter-strike-niveau hab ich :-)
vielleicht sogar nen bischen besser :-)
obwohl das natürlich eindeutig der verdienst von fredborg und blazeer ist,
die skandinavier haben das echt drauf :-)

ok, kommen wir zu den technischen daten...
level hat irgendwas um die 8400 polys,
das is echt ganz gut, wenn man sich überlegt,
dass die sniper aus CS 1500 polys hat,
ich muss auch zugeben, ich war echt knickerig :-)

renderzeit mit giles
21 aktive lichter
15 davon mit schatten

VIER minuten :-)

waaaaahhhhh, der hat doch sicher die null vergessen :-)
neee, ich hab die global illumination (radiosity) wechgelassen,
jeremy birn wusste schon wovon er redet, das ist mal sicher
wie ich das gemacht hab, erfahrt ihr in der tutorial oder 3d ecke.

"sonnen-setup mit giles - ohne GI"

Scavi
17.08.2004, 16:44
Respekt !! Sieht gut aus. Sach mal, hast du dir auch so ne Art Leveleditor geschrieben?

2paul
19.08.2004, 11:35
thx,

neee, gemoddelt wird in cinema4d, und denn mal giles beleuchtet

2paul
14.09.2004, 12:00
ok, fertig ist sie noch nicht, die allianz-arena,
es fehlen noch ein paar nette details,
aber dazu muss ich mich erst noch auf texturen-jagd begeben...

ich denk, fertige level gibts auch erst bei der veröffentlichung.
aber so mal als walk-through hab ichs mal hochgeladen.

an ein paar stelle sind noch löcher, die muss ich noch flicken,
und den roller und den heli hab ich auch noch nicht eingestellt,

ok, ok, die texturen sind auch nicht soo schön,
liegt wohl daran, dass sie grösstenteils von mir stammen,
nur ein paar von blaz hab ich da eingebaut...

aber ansonsten ist es mal wieder ein kleines polygon-wunder :-)
9000 polys, oder so, und das bei der grösse und so einem modell...
dabei frisst die kuppel am meisten, da sie 2 mal drin ist,
wegen der textur, das kriegt man mit einer geometrie nicht hin,
polyoptimierung konnte auch nicht verwendet werden,
weil das die UVW-tags zerstört hätte.

131 lichtquelle...
renderzeit mit giles bei 12-fach-soft-shadow -> 4 stunden...
ja bei soft-shadows brauchste keine Global Illumination, um die rechenzeit zu ansteigen zu lassen,
das macht er auch schon von ganz alleine....
so richtig soft sind die schatten aber noch nicht,
da muss ich wohl auch noch mal bei.

die mission wird hier wohl so aussehen,
dass sniper-man eine bombe in der spielfeld-mitte entschärfen muss.

der nächste einsatz für sniper-man bringt ihn in die kaukasischen berge,
da muss er nen helicopter-hangar hochjagen....

ich baller jetzt erstmal alle 4 level, die ich für die veröffentlichung brauch, durch,
und denn mach ich mich wieder an KI und programmieren

der level is als download available, auf meiner webseite

http://www.goalkeeper2004.de/fight_the_engine

würd mich für eure bildwiederholfequenzen interessieren,
wird oben links ausgegeben...

http://www.goalkeeper2004.de/fight_the_engine/gfx/stadion/1.jpg
http://www.goalkeeper2004.de/fight_the_engine/gfx/stadion/2.jpg
http://www.goalkeeper2004.de/fight_the_engine/gfx/stadion/3.jpg
http://www.goalkeeper2004.de/fight_the_engine/gfx/stadion/4.jpg
http://www.goalkeeper2004.de/fight_the_engine/gfx/stadion/5.jpg
http://www.goalkeeper2004.de/fight_the_engine/gfx/stadion/6.jpg

2paul
13.10.2004, 16:05
ok, dieser thread wird jetzt eingestellt,
ich bin einfach auf zu vielen boards,

alles weitere auf meiner seite

http://www.goalkeeper2004.de/fight_the_engine

thanks, dass ich hier meine messages posten durfte,

oki
der paule