TUTORIAL 3 - HELLO, QWORLD !
von SumFuka
"Ey Caramba!". Ok, du hast nun die Vorkenntnisse zum compilen der
qagamex86.dll - wenn du das noch nicht geschafft hast, dann musst du dir die
anderen Tutorials nochmal genau durchlesen.
In diesem Tutorial werden wir nicht wirklich "Hello, Qworld!"
in der Console ausgeben (langweilig!), wir werden dafür lieber die
Geschwindigkeit der Raketen verändern. Dazu werden wir das ein
oder andere über
Raketen in Quake dabei lernen. Jetzt aber los!
1. SICHERE DEINEN CODEBESTAND
Es ist immer empfehlenswert eine originale Version des Quellcodes in Reichweite
zu haben. Stell dir vor, du verpfuschst deinen Quellcode (löschst
wichtige Zeilen, oder was auch immer), dann wirst du ein Backup brauchen!
Und bevor
du jedes mal den kompletten Source aus der .exe Datei neu installierst, laß
uns einfach quake3\source unverändert behalten. MACHE KEINE ÄNDERUNGEN
in quake\source!! Wir werden unsere Mods in extra Unterverzeichnissen erstellen...
laß uns damit anfangen, das Verzeichnis quake3\mymod zu erstellen.
Ok, nun kopieren wir einfach alles von quake3\source in quake\mymod.
Von nun ab wird nur noch auf quake3\mymod\code\quake3sdk.dsw doppelgeklickt.
Von nun ab gelten alle Tutorials für dieses Verzeichnis (es mag lohnenswert
sein auf dem Desktop eine Verknüpfung zur .dsw Datei zu erstellen).
Wenn du im vorherigen Tutorial die Ausgabeverzeichnisse richtig gesetzt
hast, sollte
die .dll Datei für mymod im Verzeichnis quake3\mymod kompiliert werden.
Kompiliere den "Game" Teil und überprüfe dies!
Wann immer wir mit einem Tutorial fertig sind, und unseren Codezustand
wieder aufs Original zurücksetzen wollen, kopieren wir einfach quake3\source
in quake3\mymod hinein. Du kannst so viele Mod Verzeichnisse erstellen, wie
es dir Spaß macht. Ich habe meistens mehr als einen Mod in Bearbeitung...
quake3\rail, quake3\cts, etc... nur deine Festplatte setzt die Grenze!
2. SUCHE ETWAS INTERESSANTES
Laß uns nun quake3sdk.dsw in MSVC laden. Maximiere das Fenster, du wirst
all die Informationen brauchen, die deine Desktopauflösung dir bieten
kann. Stelle sicher, dass "game" als aktives Projekt ausgewählt
ist.Gehe links unten auf die Ordnerlasche "Dateien" und suche die
Quellcode Datei "g_missile.c" in dem Baum. Sobald du diese hast,
mache einen Doppelklick darauf. Voila, der Code steht nun im Editorfenster.
Gehe nun in Zeile 621 (falls es nicht genau dort steht, musst
du selbst im Quellcode ein wenig suchen) und schau dir dort die fire_rocket
Funktion an:
Jetzt ist genau die richtige Zeit um sich die passenden Hintergrundinformationen
in unserem Artikel
über Entities zu holen!
Schon wieder zurück? Großartig. Die oberste Zeile
im Funktionsrumpf erzeugt ein neues Entity (genannt bolt). Die G_Spawn()
Funktion
erzeugt ein "leeres" Entity... Die nächste Aufgabe ist es
all die kleinen Details (welche Art Entity ist es? Was sind die Eigenschaften?
...) zuzuweisen. Das tun die etwa nächsten ca. 20 Zeilen im Code.
Zuerst wird dem bolt "rocket" zugewiesen, und das
Entity soll in 10 Sekunden wieder "denken" (think) (die Zeitangaben
sind in 1/1000 Sekunden in der Quake-Welt, d.h. 1000 ist gleichzusetzen mit
einer Sekunde). Wenn eine Rakete "denkt", dann wird sie die Funktion
G_ExplodeMissile aufrufen. In anderen Worten, wenn die Rakete bisher nichts
berührt hat, so wird sie von selbst nach 10 Sekunden explodieren. Dieser
Mechanismus verhindert es, das Raketen unendlich lange im Raum umherfliegen.
Geschickt haben wir etwas über das Spiel herausgefunden,
nur in dem wir in den Code hineingeschaut haben. Mal sehen, was wir sonst
noch so herausbekommen können...
Wir sehen, dass eine Rakete 100 Schaden verursacht (egal ob
direkt ODER splash), und dass der Radius der Splash Damage 120 Einheiten beträgt.
Ein paar Zeilen weiter unten erfahren wir, dass sich eine Rakete mit 900 Einheiten
pro Sekunde fortbewegt. Außerdem gibt es noch eine ganze Menge an Konstanten
in dieser Funktion (constanten sind normalerweise GROSS GESCHRIEBEN)... bei
den meisten kann man erahnen, um was es sich handelt. "ET_MISSILE"
bedeuted z.B. "Entitiy Type: Missile" (im Gegensatz zu z.B. Item
oder einem Spieler).
3. UNSERE ERSTEN ÄNDERUNGEN IM CODE
Lasst uns die Zeile mit Vectorscale ändern, so dass die danach folgendermaßen
aussieht:
Drücke F7 zum kompilieren der .dll Datei. Lade Quake (die
Verknüpfung muß nun auf +set fs_game mymod angepasst werden) und
überprüfe, ob es funktioniert hat. Die Raketen sollten nun deutlich
langsamer fliegen!
Du hast es geschafft! Das erste richtige Tutorial! Laß
uns in diesem Temp weitermachen!