Microsoft PowerPoint _ HalfLife_20030618_ppt
Transcrição
Microsoft PowerPoint _ HalfLife_20030618_ppt
UNI VE R SI T Y OF P ADE R BO R N Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler Projektgruppe KIMAS – Half-Life Überblick 1/26 UNI VE R SI T Y OF P ADE R BO R N Half-Life Die Half-Life Welt Programmstruktur Modifikationen Bot´s Projektgruppe KIMAS – Half-Life 2/26 1 Half-Life UNI VE R SI T Y OF P ADE R BO R N 1997 von Valve Software entwickelt von Sierra On-Line vertrieben Modifikation der Quake Engine basiert auf Quake 1 mit Teile von Quake 2 und eigenen Erweiterungen „Einige“ der Verantwortlichen z.B. Gabe Newell kamen von Microsoft ;-) Projektgruppe KIMAS – Half-Life Half-Life 3/26 UNI VE R SI T Y OF P ADE R BO R N Skeletal Animation System Rendering (16-bit color, colored lighting) Monster AI Decal System Real-Time DSP DLL´s Direct X Single/Multiplayer-Sourcen frei verfügbar Binaries der Engine nur unter Microsoft Windows Projektgruppe KIMAS – Half-Life 4/26 2 Überblick UNI VE R SI T Y OF P ADE R BO R N Half-Life Die Half-Life Welt Programmstruktur Modifikationen Bot´s Projektgruppe KIMAS – Half-Life Half-Life Welt 5/26 UNI VE R SI T Y OF P ADE R BO R N Die Half-Life Welt besteht aus zwei Arten von Objekten: 1. Solids (Wände, Decken, ..., ohne Funktion) 2. Entities • Point-based ( statisch, aber auch Monster ) • Brush-based ( dynamisch ) Projektgruppe KIMAS – Half-Life 6/26 3 Half-Life Welt UNI VE R SI T Y OF P ADE R BO R N Gleicher Aufbau wie in Quake: Vektoren (für Richtungen, etc.) Maps (Positionierung der Solids und Entities, werden im Editor erzeugt und nach .bsp kompiliert) Binary Space Partitioning (schnelle Datenstruktur für Echtzeitrendersysteme) Kolisionserkennung (über Bounding-Boxes, an Achsen ausgerichtet, werden nicht gedreht) Projektgruppe KIMAS – Half-Life Half-Life Welt 7/26 UNI VE R SI T Y OF P ADE R BO R N Skeletal Animation System Knochen werden bewegt Polygon-Netze um die Knochen werden durch die Bewegung verformt Berechung der Modelle zur Laufzeit Größere Flexibilität wesentlich höhere Anzahl von Polygonen (6000+) Projektgruppe KIMAS – Half-Life 8/26 4 Überblick UNI VE R SI T Y OF P ADE R BO R N Half-Life Die Half-Life Welt Programmstruktur Modifikationen Bot´s Projektgruppe KIMAS – Half-Life Programmstruktur 9/26 UNI VE R SI T Y OF P ADE R BO R N Code in C++ Server - hl.dll (bzw. mp.dll) Steuern der Entities (Monster, Waffen, ...) Client - cl_dll.dll Enthält das gesamte UserInterface DLL (Dynamic Link Library) Ermöglicht einem Prozess eine Funktion zu benutzen die nicht zu seinem Ausführbaren Code gehört Projektgruppe KIMAS – Half-Life 10/26 5 UNI VE R SI T Y OF P ADE R BO R N Programmstruktur Interaktionschema: S e r ve r (h l. d ll /m p . d ll) C lie n t -UI (c l_ d ll. d ll) G iv e F n p t r s To Dll() G e t E n t it y AP I() G a m e DLLIn it () E n g in e (Ha lf-Life G a m e E x e c u t a b le ) Projektgruppe KIMAS – Half-Life Programmstruktur 11/26 UNI VE R SI T Y OF P ADE R BO R N Klassendiagramme Server: http://www-math.upb.de/~tegeler/kimas/server_class_diagram.png Client: http://www-math.upb.de/~tegeler/kimas/client_class_diagram.png Vererbung Alle Objekte stammen von CBaseEntity ab (zu finden in cbase.cpp) Projektgruppe KIMAS – Half-Life 12/26 6 Überblick UNI VE R SI T Y OF P ADE R BO R N Half-Life Die Half-Life Welt Programmstruktur Modifikationen Bot´s Projektgruppe KIMAS – Half-Life Modifikationen 13/26 UNI VE R SI T Y OF P ADE R BO R N Modifikationen (Mod´s) sind Änderungen am Spielablauf, z.B. an: Waffen, Monstern, GUI, Regeln, ... Der wohl bekannteste Half-Life Mod´s: Counter-Strike Projektgruppe KIMAS – Half-Life 14/26 7 Modifikationen UNI VE R SI T Y OF P ADE R BO R N Was benötigt man um aktuelle Half-Life Mod´s zu erstellen? C++ Compiler (der DLL´s erstellen kann die mit den von Microsoft Visual C++ kompatibel sind, z.B. MingW32, MSVC++ 6.0, ...) SDK 2.3 (Standart oder Full) Half-Life 1.1.1.0 Projektgruppe KIMAS – Half-Life Modifikationen 15/26 UNI VE R SI T Y OF P ADE R BO R N Geschwindigkeit der RPG: R p g . c p p (in F o llo wTh in k): ... p e v->ve lo c ity=p e v->ve lo c ity*1 0 ; ... DropXP: P la ye r. c p p (in Dro p P la ye rIte m ): ... CW e a p o n Bo x *p W e a p o n Bo x = (CW e a p o n Bo x *)C Ba s e E n tity::C re a te ( . .. , Ko o rd in a te n , . ..); ... Projektgruppe KIMAS – Half-Life 16/26 8 Überblick UNI VE R SI T Y OF P ADE R BO R N Half-Life Die Half-Life Welt Programmstruktur Modifikationen Bot´s Projektgruppe KIMAS – Half-Life Bot´s 17/26 UNI VE R SI T Y OF P ADE R BO R N Half-Life bietet keine Schnittstelle für Bot´s Deshalb Implementierung durch: Einbettung des Bot´s in ein Mod DLL´s ausnutzen, und eine Bot.dll zwischen die Engine und dem Server (hl.dll) zu mogeln Projektgruppe KIMAS – Half-Life 18/26 9 UNI VE R SI T Y OF P ADE R BO R N Bot´s Interaktionschema: S eBrovte r (h l.(dblol /tm . d pll.)d ll) C lie n t -UI (c l_ d ll. d ll) G iv e F n p t r s To Dll() G e t E n t it y AP I() G a m e DLLIn it () E n g in e (Ha lf-Life G a m e E x e c u t a b le ) Projektgruppe KIMAS – Half-Life Bot´s 19/26 UNI VE R SI T Y OF P ADE R BO R N Der Bot wird mit FakeClient als virtueller Spieler erzeugt, zählt also als Spieler: Bot erzeugen Bo tE n t=g _ e n g fu n c s .p fn C re a te F a ke C lie n t(“Bo t“); ... C lie n tC o n n e c t( Bo tE n t, “Bo tNa m e “, “1 2 7 .0 .0 .1 “, p tr); C lie n tP u tIn S e rve r( Bo tE n t); Bot steuern ... p fn R u n P la ye rMo ve ( Bo tE n t , Blic kR ic h tu n g , Vo rG , R e c h ts G , Ho c h G , Ta s te , Im p u ls , Da u e r); ... Projektgruppe KIMAS – Half-Life 20/26 10 UNI VE R SI T Y OF P ADE R BO R N Bot´s Sicht des Bot´s am Beispiel-Code fo r (i =1 ; i <=g p G lo b a ls ->m a xC lie n ts ; i++) { e d ic t_ t *p P la ye r = INDE XE NT(i); ve c 2 LO S = ( p P la ye r->v.o rig in – p E d ic t->v.o rig in ).Ma ke 2 D(); ... flDo t = Do tp ro d u c t ( ve c 2 LO S , g p G lo b a ls ->v. fo rwa rd .Ma ke 2 D() ); if ( flDo t > 0 .5 0 ) { //im S ic h tfe ld UTIL_ Tra c e Lin e { . . . } } e ls e { ...} //Lin e z u m Zie l //a u s s e rh a lb d e s S ic h tfe ld s } Projektgruppe KIMAS – Half-Life Bot´s 21/26 UNI VE R SI T Y OF P ADE R BO R N aus den Engine-Headerdatein (common\com_model.h): # d e fin e MAX_ C LIE NTS 3 2 # d e fin e MAX_ E DIC TS 9 0 0 es können also nur 32 Bots erzeugt werden! (bei Quake gab es keine genaue aussage) und 900 Entities insgesamt (ca. genau soviele wie in Quake) Projektgruppe KIMAS – Half-Life 22/26 11 Bot´s UNI VE R SI T Y OF P ADE R BO R N Und wenn „32“ Agenten nicht genug sind? Bot als eignende Entity programmieren Keine weitern Einschränkungen größer Programmieraufwand Bot als Monster programmieren evtl. Einschränkung durch das erben von CMonster ca. genau so viel wie bei üblichen Bot implementationen Projektgruppe KIMAS – Half-Life Bot´s 23/26 UNI VE R SI T Y OF P ADE R BO R N Unserer KimasBot: Projektgruppe KIMAS – Half-Life 24/26 12 UNI VE R SI T Y OF P ADE R BO R N Gegenüberstellung Funktion Quake Half-Life Bot´s (max) ??? 32 Entities (max) 1024 900 OpenGL * * Direct X * Skeletal Animation System * Rendering 8-bit 16-bit Colored lighting * Decal System * Real-Time DSP * Maps als BSP * * Datenstruktur (Bewegung, Richtung, ...) Vektor Vektor Ausführbare Dateien QuakeVM DLL Kollisionserkennung Bounding-Boxes Bounding-Boxes Projektgruppe KIMAS – Half-Life Weitere Informationen 25/26 UNI VE R SI T Y OF P ADE R BO R N Half-Life FAQ von Steve Cook: http://www.planethalflife.com/hlsdk2/sdk2_articles.htm Half-Life programming: http://www.planethalflife.com/hlprogramming/tutorials.asp Gamedesign and programming resources: http://www.resourcecode.de Botman´s Homepage: http://www.planethalflife.com/botman/ Projektgruppe KIMAS – Half-Life 26/26 13 Kommentare im Source Code ;-) UNI VE R SI T Y OF P ADE R BO R N TOP3 3: // this is the most hacked, evil, bastardized thing I've ever seen. 2: // this is not a hack or temporary fix, this is how things should be. 1: // Huh? Projektgruppe KIMAS – Half-Life 27/26 14