1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life...

27
Projektgruppe KIMAS – Half-Life 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler

Transcript of 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life...

Page 1: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 1/26

UNIVERSITY OF

PADERBORN

Projektgruppe KIMAS

Half-Life

18.06.2003

Lars Tegeler

Page 2: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 2/26

UNIVERSITY OF

PADERBORNÜberblick

Half-Life

Die Half-Life Welt

Programmstruktur

Modifikationen

Bot´s

Page 3: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 3/26

UNIVERSITY OF

PADERBORNHalf-Life

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 ;-)

Page 4: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 4/26

UNIVERSITY OF

PADERBORNHalf-Life

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

Page 5: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 5/26

UNIVERSITY OF

PADERBORNÜberblick

Half-Life

Die Half-Life Welt

Programmstruktur

Modifikationen

Bot´s

Page 6: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 6/26

UNIVERSITY OF

PADERBORNHalf-Life Welt

Die Half-Life Welt besteht aus zwei Artenvon Objekten:

1. Solids(Wände, Decken, ..., ohne Funktion)

2. Entities • Point-based ( statisch, aber auch Monster )• Brush-based ( dynamisch )

Page 7: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 7/26

UNIVERSITY OF

PADERBORNHalf-Life Welt

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 Echtzeitrender-systeme)

Kolisionserkennung(über Bounding-Boxes, an Achsen ausgerichtet, werden nicht gedreht)

Page 8: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 8/26

UNIVERSITY OF

PADERBORNHalf-Life Welt

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+)

Page 9: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 9/26

UNIVERSITY OF

PADERBORNÜberblick

Half-Life

Die Half-Life Welt

Programmstruktur

Modifikationen

Bot´s

Page 10: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 10/26

UNIVERSITY OF

PADERBORNProgrammstruktur

Code in C++

Server - hl.dll (bzw. mp.dll)Steuern der Entities (Monster, Waffen, ...)

Client - cl_dll.dllEnthä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

Page 11: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 11/26

UNIVERSITY OF

PADERBORNProgrammstruktur

Engine(Half-Life Game Executable)

Server(hl.dll /mp.dll)

Client-UI(cl_dll.dll)

GiveFnptrsToDll()

GetEntityAPI()

GameDLLInit()

Interaktionschema:

Page 12: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 12/26

UNIVERSITY OF

PADERBORNProgrammstruktur

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

VererbungAlle Objekte stammen von CBaseEntity ab

(zu finden in cbase.cpp)

Page 13: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 13/26

UNIVERSITY OF

PADERBORNÜberblick

Half-Life

Die Half-Life Welt

Programmstruktur

Modifikationen

Bot´s

Page 14: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 14/26

UNIVERSITY OF

PADERBORNModifikationen

Modifikationen (Mod´s) sind Änderungen amSpielablauf, z.B. an:

Waffen, Monstern, GUI, Regeln, ...

Der wohl bekanntesteHalf-Life Mod´s:

Counter-Strike

Page 15: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 15/26

UNIVERSITY OF

PADERBORNModifikationen

Was benötigt man um aktuelle Half-LifeMod´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

Page 16: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 16/26

UNIVERSITY OF

PADERBORNModifikationen

Geschwindigkeit der RPG:

DropXP:

Rpg.cpp (in FollowThink):...pev->velocity=pev->velocity*10; ...

Player.cpp (in DropPlayerItem):...CWeaponBox *pWeaponBox = (CWeaponBox *)CBaseEntity::Create( ..., Koordinaten , ...); ...

Page 17: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 17/26

UNIVERSITY OF

PADERBORNÜberblick

Half-Life

Die Half-Life Welt

Programmstruktur

Modifikationen

Bot´s

Page 18: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 18/26

UNIVERSITY OF

PADERBORNBot´s

Half-Life bietet keine Schnittstelle für Bot´sDeshalb 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

Page 19: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 19/26

UNIVERSITY OF

PADERBORNBot´s

Engine(Half-Life Game Executable)

Server(hl.dll /mp.dll)

Client-UI(cl_dll.dll)

GiveFnptrsToDll()

GetEntityAPI()

GameDLLInit()

Bot(bot.dll)

Interaktionschema:

Page 20: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 20/26

UNIVERSITY OF

PADERBORNBot´s

Der Bot wird mit FakeClient als virtueller Spieler erzeugt, zählt also als Spieler: Bot erzeugen

Bot steuern

BotEnt=g_engfuncs.pfnCreateFakeClient(“Bot“);...ClientConnect( BotEnt, “BotName“, “127.0.0.1“, ptr);ClientPutInServer( BotEnt);

...pfnRunPlayerMove( BotEnt , BlickRichtung, VorG, RechtsG,

HochG, Taste, Impuls, Dauer); ...

Page 21: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 21/26

UNIVERSITY OF

PADERBORNBot´s

Sicht des Bot´s am Beispiel-Code

for (i =1; i <=gpGlobals->maxClients; i++){ edict_t *pPlayer = INDEXENT(i); vec2LOS = ( pPlayer->v.origin – pEdict->v.origin).Make2D(); ... flDot = Dotproduct ( vec2LOS, gpGlobals->v.forward.Make2D() ); if ( flDot > 0.50 ) { //im Sichtfeld

UTIL_TraceLine{ ...} //Line zum Ziel

} else { ...} //ausserhalb des Sichtfelds}

Page 22: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 22/26

UNIVERSITY OF

PADERBORNBot´s

aus den Engine-Headerdatein(common\com_model.h):

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)

#define MAX_CLIENTS 32#define MAX_EDICTS 900

Page 23: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 23/26

UNIVERSITY OF

PADERBORNBot´s

Und wenn „32“ Agenten nicht genug sind?

Bot als eignende Entity programmierenKeine weitern Einschränkungengrößer Programmieraufwand

Bot als Monster programmierenevtl. Einschränkung durch das erben von

CMonster ca. genau so viel wie bei üblichen Bot

implementationen

Page 24: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 24/26

UNIVERSITY OF

PADERBORNBot´s

Unserer KimasBot:

Page 25: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 25/26

UNIVERSITY OF

PADERBORNGegenü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

Page 26: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 26/26

UNIVERSITY OF

PADERBORNWeitere Informationen

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/

Page 27: 1/26 UNIVERSITY OF PADERBORN Projektgruppe KIMAS – Half-Life Projektgruppe KIMAS Half-Life 18.06.2003 Lars Tegeler.

Projektgruppe KIMAS – Half-Life 27/26

UNIVERSITY OF

PADERBORNKommentare im Source Code ;-)

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?