Browsing articles in "Tutorials"
Apr
30

Tutorial III – Graphical User Interface

By BaShoR  //  Tutorials  //  No Comments

Originally posted on Mapping-Tutorials.de on Wed 06 Aug 2008 13:39:49

Du wolltest schon immer wissen, wie du dein CSS-Game persönlicher gestalten kannst?

Dann bist du hier genau richtig! In diesem Tutorial gehe ich darauf ein, wie man seinen Hintergrund und sein Gamemenü bearbeitet!

Hier ein  Schritt für Schritt Tutorial mit Ergänzungen:

1. Hintergrund-Bild ändern:

VTFEdit runterladen
Bild aussuchen.

Auf  ‘File’ -> ‘Import’ drücken und Bild einfügen.
Jetzt lädt er, das kann ein bischen dauern.
File -> Save as
Vorrücken in cstrike/materials/console //eventuell Ordner erstellen
und abspeichern als Background01.vtf

Alternativ: normale Textur im .vtf Format erstellen und als background01.vtf in
cstrike/materials/console speichern.

Noch eine Ergänzung:

2. Counterstrike: Source Logo entfernen

Das Counterstrike: Source im Hintergrund bekommt ihr weg, in dem ihr im cstrike/resource Ordner die
“Clientsheme.res” (wenn nicht vorhanden
Download von GC-Gaming.de // Rechtsklick speichern unter) öffnet und folgende Zeilen sucht:

// Top-left corner of the “Counter-Strike” on the main screen
“Main.Title1.X”      “32″
“Main.Title1.Y”      “180″
“Main.Title1.Color”   “255 255 255 255″

// Top-left corner of the “SOURCE” on the main screen
“Main.Title2.X”      “380″
“Main.Title2.Y”      “205″
“Main.Title2.Color”   “255 255 255 80″

Dann ändert ihr einfach die jeweils unterste im Vierer Block in
“Main.Title1.Color”   “0 0 0 0″

und

“Main.Title2.Color”   “0 0 0 0″

3. Ändern des Gamemenus:

Die Datei, die ihr zum ändern der CSS Menü Punkte braucht befindet sich in cstrike/resource. Sie heißt “Gamemenu.res”.
Falls diese bei euch auch nicht vorhanden ist ist hier wieder der Download von GC-Gaming.de //Rechtsklick Speichern unter und in cstrike/resource setzen.
Dann öffnet ihr am besten die Datei mit einem texteditor.

Erklärung des Codes:
(Rotes sind Erklärungen, und wird somit nicht in der File vorhanden sein)

“1″//Stelle, an der der Menü Punkt sitzt.
{
“label” “#GameUI_GameMenu_ResumeGame” // Was wird angezeigt (hier ein Punkt, der Sprachen erkennt und einsetzt, es gehen aber auch einfache zeichenfolgen wie “Spiel fortsetzen”.
“command” “ResumeGame” // Der Befehl, Standardmäßig sind alle voreingetragen, es gehen aber auch consolen Befehle wie connect, exec beispiel.cfg uvm, ihr müsst nur darauf achten, dass bei consolen Befehlen “engine” davorstehen muss (z.B. “engine connect 1.1.1.1:27025; password esel
“OnlyInGame” “1″ // (0/1) Zeigt an ob der Menü Punkt nur angezeigt wird, wenn man gerade auf einem Server/ Im laufenden Spiel ist, dies ist z.B. wichtig für Punkte, die ohne ein laufendes Spiel unnütz sind (Spiel fortsetzen etc.)
}

Falls ihr zwischen den einzelnen Befehlen eine Zeile freilassen wollt setzt dazwischen einfach

“Platz”
{
“label” “”
“command” “”
“OnlyInGame” “0/1″
}

ein. Da alle Felder leer sind, wird einfach der Platz freigelassen.

Diese Hilfe habe ich mit meinem und dem Wissen aus r99ts Tutorials zusammengestellt.
Ich habe es selbstständig um ein paar Punkte verkürzt und erweitert.
Vielen Dank an r99t.

4. Hintergrund Sound einfügen:

Wählt eure Wunschmusik und nennt sie in “gamestartup1″ um (Format wmv, wma, mp3)

Packt die Datei anschließend in  “C:\Programme\Steam\SteamApps\acc\counter-strike source\cstrike\sound\ui” (Ordner notfalls erstellen)


5. Fensterfarben/Console ändern

Sourcesheme bearbeiten:
Klick

Apr
30

Tutorial II – Zombiemod/escape Maps

By BaShoR  //  Tutorials  //  No Comments

Originally posted on Mapping-Tutorials.de on Wed 09 Apr 2008

Zombie MoD

Da sich in den letzten Wochen Fragen über das Thema Zombiemod gehäuft haben,
bin ich auf die Idee gekommen diesen Thread mit FAQs, Anleitungen und Nützlichen Links für Zombiemod zu eröffnen.
Natürlich solltet ihr bevor ihr an den Zombiemod rangeht ein einigermaßen intaktes Fachwissen über das Mappen mitbringen.

1.) Zuerst einmal, was ist ZombieMod für CSS und was benötige ich in meiner Map um diese für Zombiemod startklar zu machen?

Der Zombiemod ist eine rein serverseitige Modifikation. Ihr müsst lediglich Models und Sounds von den mit Zombiemod betriebenen Servern herunterladen.
In eurer Map benötigt ihr nichts besonderes. Es reicht eine einfach Deathmatch-Map mit Kaufzonen.

Natürlich wäre eine ganz normale Map wie de_dust2 (ohne Bombspots natürlich) nicht sehr gut ausbalanciert, da wie ihr sicher wisst die Zombies einiges aushalten und das A und O bei Zombiemaps gute Verstecke (Barrikaden, zu erklimmende Kistenstapel etc.) sind.

Damit wären wir schon bei Punkt

2.) Wie erstelle ich gute Campingspots, die aber gleichzeitig nicht unfair werden?

Normalerweise werden bei Zombiemod hohe Kistenstapel oder verbarrikadierte Räume erstellt um den Menschen eine Überlebenschance zu bieten, es gibt aber durchaus andere Methoden, wie die nicht sehr gern gesehenen Rohre, ihr müsst eurer Fantasie einfach freien Lauf lassen. ;)
Beispiele hierzu werde ich euch anhand mehrerer Beispiele und Bilder schmackhaft machen:

2.1) Kistenstapel:

Kistenstapel sind variabel einsetzbar. Man kann sie mit mehreren Aufgängen versehen, zum Beispiel wenn mehr nach Teamplay gefragt ist, oder sie aber auch mit nur ein paar kleinen Kisten an einer Seite zugänglich machen wenn das Versteck auch für nicht Teamspieler interessant werden soll ;)

Als Beispiel habe ich dieses Bild mit zwei Aufgängen gewählt:

kisten

2.2) Barrikaden:

Barrikaden werden vorallem für enge Räume verwendet. Sie sind einfach zu erstellen und eine Herrausforderung sowohl für Zombies als auch für die Menschen. Bei Barrikaden ist darauf zu achten, dass der Raum mindestens zwei Eingänge hat (meist eine Tür und ein Fenster), damit es für die Zombies, vorallem auf Servern mit unendlich Munition nicht zu schwer wird.
In diesen Räumen werden meist Getränkeautomaten oder Sofas zum Blocken verwendet, die vor die jeweiligen Türen/Fenster geschoben werden, darauf gehe ich aber in Punkt 3 nocheinmal genauer ein.

3.) Barrikaden? Wie erstelle ich diese am Besten?

barricade

Als erstes gibt es zu sagen, dass Barrikaden meistens mit prop_physics_multiplayer und nicht wie oft gemeint mit einfachen prop_physics erstellt werden.
Die Erklärung hierfür ist, dass prop_physics_multiplayer im Gegensatz zur normalen Version vom Server beeinflussbar sind und eine Art schwachen trigger_push in ihrer Mitte aufweisen.
Der trigger_push ist vorallem auf Servern wichtig, die kein Teleportscript bei hängengebliebenen Spielern aufweisen, die sonst die ganze Zeit gefangen in dem jeweiligen Gegenstand verbringen müssten.
Vom Server beeinflussbar, hingegen bedeutet, dass der ServerAdmin Einfluss auf die schwere von diesen Gegenständen nehmen kann. Dies wird durch den Befehl phys_pushscale “x” geregelt, der aber aber nur zusammen mit sv_turbophysics “1″ aktiv wird. Dies bewirkt, dass man mit der “Benutzen-taste” die Gegenstände leicht wegschieben kann. Umso höher der Wert, desto niedriger das Gewicht des Gegenstandes. Zur Orientierung: Der Wert auf einem normalen Server beträgt 1, der auf einem durchschnittlichen ZombieServer ca. 2.5.

Welche Barrikaden werden normalerweise verwendet?
Verwendbar sind eigentlich alle Dinge, die mit prop_physics laufen.
Die meist verwendeten Gegenstände sind aber:
Getränkeautomaten: models/props/cs_office/vending_machine.mdl
Bücherregale: models/props/cs_office/bookshelf1.mdl (und viele andere)
Sofas: models/props/cs_office/sofa.mdl (und ihre Sessel)
Kisten/Schachtel: models/props/cs_assault/dryer_box.mdl

Es sind auch sehr viele andere Dinge möglich, seht euch einfach mal auf anderen Maps und in eurem Modelbrowser um ;)

4.) “Ausbrechen verhindern”

Bei Zombiemod wird sehr viel herumgeklettert, und deshalb solltet ihr alle Plätze, wo am besten niemand hingelangen sollte (unfaire Wassertürme/Dächer) mit der Playersclip Textur umziehen, die im Texturbrowser unter dem Namen toolsclip zufinden ist.

5.) Meine Map ist jetzt fertig, aber wieso “laggt” sie bei mehreren Spielern so stark?

Der FPSabfall ist normalerweise auf Zombiemaps normal, ihr solltet euch dennoch wundern, wenn mehr als 40% der Framerate einbricht (net_graph 3 lässt euch sehen wieviele F(rames)P(er)S(econd) ihr habt).
Sollte es euch zuviel erscheinen, vorallem wenn ihr alleine auf einem lokalen Server tested, solltet ihr euch aufjedenfall die Optimierungstutorials von ColonelBurton, die ihr ohnehin schon kennen solltet zu Herzen nehmen:
[1] [2]
Sollte das nichts nützen könnt ihr natürlich an details, wie props und decals sparen!

6.) Sonstiges

Ihr könnt in Zombiemaps eigentlich so ziemlich alles verwenden. Gerne gesehen werden z.B. geheime Waffenräume oder ein paar Eastereggs.
Vertraut euch also vor dem Release eurer Map mit Triggern, Inputs und Outputs. So könnt ihr eventuell ein paar neue Dinge miteinbringen.

Zum Schluss bleibt zu sagen, das Ambiente entscheidet neben der Balance am meisten mit über den Erfolg eurer Map. Wählt eine stimmungsvolle Kulisse, die wie aus einem Horrorfilm geschnitten scheint. Macht eure Map aber dennoch nicht zu Dunkel, denn die meisten Spieler werden leicht frustriert wenn wie aus dem Nichts etwas unvorhergesehenes auf sie zustürmt.

Ansonsten bleibt noch zu sagen, viel Erfolg bei eurer Zombie Map ;)

Fragen, Verbesserungsvorschläge und Kritiken sind erwünscht.


Zombie Escape

Da ich eine Anfrage von jimpanse bekommen habe, ein kleines Tutorial über Zombie Escape im Stil des [CSS] HowTo: ZombieMoD Threads zu erstellen, werde ich euch heute in die Kunst des für ze-Mappens einweisen ;)

1.) Zuerst einmal, was ist ZombieEscape für CSS und was benötige ich in meiner Map um diese für ZombieEscape startklar zu machen?

ZombieEscape ist genau wie ZomieMoD für CSS eine rein Serverseitige Modifikation.
Ein Spieler wird am Anfang der Runde durch den Server getriggert zum Zombie und versucht die anderen “Flüchtlinge” auch zu verwandeln. Die CTs, sprich Menschen müssen versuchen in ein Zielgebiet zu kommen.
Dennoch sollten in eurer Map einige wichtige Elemente nicht fehlen.

2.) Fluchtwege:

Es sollten verschiedene Fluchtwege offen gehalten werden, die den Menschen eine reelle Chance zur Flucht bieten, aber auch eine Herrausforderung sein sollen, denn die Zombies laufen ja schneller als die Menschen.

2.1) Standard Fluchtwege mit Sprungpassagen:

Am besten erstellt man eine kleine Anfangsplattform, von der aus man über verschiedene Ebenen (bzw. Plattformen) einen Laufweg mit Zwischenräumen, in die man Fallen kann hat. Allerdings ist bei solchen Fluchtwegen darauf zu achten, dass die Spieler die scheitern entweder wieder an den Spawn/einen Checkpoint teleportiert werden, oder selbständig wieder zurücklaufen können.

Beispiele:

Selbstständiges zurücklaufen: Der Spieler fällt herunter, und muss über eine Leiter wieder zum Anfang.
1

Teleporter: Der Spieler fällt herunter, fällt in einen trigger_teleport und wird sofort zum zugehörigen info_teleport_destination am Checkpoint zurückgebeamt
2

Wasser: Der Spieler fällt auch hier herunter, wird aber nicht zum Spawn zurückgeschickt, sondern kann gleich (durch das Waser verlangsamt) zum nächsten Checkpoint schwimmen
3

2.2) Standard Wege + Vehikel

Es werden normale Wege wie in 2.1 erstellt, aber an bestimmten Stellen gibt es z.B. Boote oder Hubschrauber, die durch ein geschicktes Sprungmanöver oder einen Knopfdruck erreicht werden können. Man kann sie auch einfach irgendwo abstellen, sodass die schnellsten (und somit besten Spieler) den Vorteil der Fahrzeuge erhalten.

Tutorials für Fahrzeuge:
Boot
Helikopter

Bei Fahrzeugen ist jedoch wichtig, dass diese erst ca. 5 Sekunden nach dem erreichen losfahren und auch irgendwann wieder landen ;) Ausserdem sollten sie nicht zu schnell (sprich: Uneinholbar sein).

3.) Balance

Ich weiß, ich erwähne das immer wieder, es müssen alle Wege ungefähr gleich schnell sein, falls ihr seperate baut. Denn sonst sind mögliche Gegner nicht in der Lage euch einzuholen, falls ihr mit einem Boot mit gefühlten 500km/h flüchtet ;)

Falls ihr dennoch ein Fahrzeug des Effektes willen schnell Fahren lasst, macht euch klar, dass ihr Alternativen wie andere Fahrzeuge oder trigger_pushes einsetzt.

4.) Ende der Map

Es ist geschafft, die Menschen sind vor den Zombies entkommen an den Punkt, den ihr euch vorgestellt habt! Doch was nun? Die Zombies holen immer weiter auf und sind drauf und dran euch zu erwischen.

Dafür gibt es verschiedene Lösungen, bei denen ihr Kreativ sein solltet. Möglichkeiten wären z.B. ein Bereich, der wenn ihn ein CT (Mensch) erreicht zum Ende des Spiels durch ein getriggertes game_end führt.
Andere Möglichkeiten wären z.B. wie die in zm_boatescape eingesetzte Atmonbombe.
Es wird ein Knopf gedrückt, der einen Text auf dem Bildschirm erscheinen lässt (point_servercommand: say text) und nach ein paar Sekunden einen mächtigen trigger_hurt auslöst, der alle Zombies und zurückgebliebene Menschen sprichwörtlich pulverisiert, hier solltet ihr aber einen Wert jenseits der 100000er Marke wählen, da jeder Server seine Zombies individuell mit HealthPoints bestückt.

5.) Allgemeine Zusammenfassung

Bei Zombie Escape ist eigentlich alles erlaubt, solange es fair bleibt.
Bei den Wegen und Zielen ist eure Kreativität gefragt, denn hier kann ich nur einen kleinen Einblick in die Mechanik des Mods geben.

Kreative Ideen wie z.B. ein Knopf, der ein Hindernis für andere Spieler aufstellt (z.B. herunterfallende, den weg blockierende, aber dennoch zerstörbare Kisten) sind hierbei Pflicht, denn es sollen ja nicht alle ze_maps gleich sein ;)
Am besten ihr schaut euch ein paar beliebte an und sammelt Ideen.

Apr
30

Tutorial I – Spawnprotection CSS

By BaShoR  //  Tutorials  //  No Comments

Originally posted on Mapping-Tutorials.de on Sat 13 Dec 2008 19:14:54

Guten Tag alle miteinander,
Ich werde euch heute eine Form der Spawnprotection näher bringen, die natürlich auch abwandelbar,umbaubar und auf mehrere Situationen anwendbar ist.
Aus diesem Grund ist das Tutorial auch ein bischen komplex und sollte nur mit umfassenden Kenntnissen im In-/Out-put System umgesetzt werden.

Hier findet ihr ein Video, wie das dann Ingame aussieht (in dieser Version habe ich ohne ein point_servercommand wie unten erklärt gearbeitet)

Was brauchen wir dafür?
Pro Spawn:
2x trigger_multiple:
**1x trigger_multiple (Nummer eins/alle gleich)
**1x trigger_multiple (Nummer zwei/alle gleich)

Insgesamt:
2x filter_damage_type
1x logic_auto
1x func_movelinear

Also als erstes brauchen wir für jeden Spawn mindestens einen Brush mit der TriggerTextur. Diesen Brush machen wir zu einem trigger_multiple und nennen ihn “protection”. Ein Brush wird unter jedem Spawnpunkt gesetzt (Spawn in einer gewissen Höhe anbringen, damit die Spieler in denTrigger fallen).
Wahlweise kann man auch vor jedem Spawn noch eine Wand aus diesen Triggern aufstellen, falls es passieren sollte, dass ein Spieler nicht erfasst wird.

Nun brauchen wir einen “filter_damage_type”.
Diesem geben wir den Namen “damage_off”
und stellen ihn folgendermaßen ein:

Name: damage_off
filter_mode: Allow entities that match criteria
Damage Type: BULLET

Danach nehmen wir uns alle vorher erstellten “protection” Trigger vor und geben ihnen folgende Outputs:

OnTrigger | !activator | Setdamagefilter | damage_off | 0.0

Und wenn man den Schaden in diesem Raum nach einer gewissen Zeit wieder anmachen möchte (Dieser Punkt fällt bei einem komplett geschützen Raum mit Teleportern weg):

OnEndTouch | protection | Disable | 14.0 (Wert dem Ausschalten der Spawnprotection anpassen)

1

(Wenn sich einer der Spieler nun aus seinem Trigger bewegt werden alle abgeschalten und somit wird falls man später die Protection aufhebt aber jemand anderes wieder in den Trigger tritt niemand mehr unsterblich)

Dann bastelt ihr noch ein logic_auto, damit am Beginn der Runde alle Trigger wieder aktiviert werden.
Output des selbigen:

OnMapSpawn | protection | Enable | 0.0

Damit wäre das Schützen der Spieler erledigt.

Nun fragt ihr euch sicher, wie ihr es am besten wieder hinbekommt, dass die Spieler wieder angreifbar sind.

Dazu benötigt ihr an einer Seite der Map soviele 1 Unit dicke trigger_multiples wie Spielerspawns.
Diese müssen am Anfang in ihren Flags auf disabled stehen.


2

Diese trigger_multiples nennt ihr am besten “damage_enabler” und gebt ihnen die folgenden Outputs:

OnStartTouch | !activator | Setdamagefilter | damage_on | 0.0

Richtig, ihr erkennt nun oben im Output, dass dafür ein weiteres filter_damage_type mit dem Namen “damage_on” gebraucht wird,
ein solches erstellen wir auch gleich:

Name: damage_on
Filter mode: Disallow entities that match criteria
Damage Type: BULLET

Diese am Rand erstellten Trigger müssen nun ja auch noch irgendwie aktiviert werden und den Spieler berühren.
Dazu erstellt ihr in den triggern einfach ein “func_movelinear” Entity.

(siehe Oberes Bild)

Dieses nennt ihr “rush” und gebt ihm bei
Speed einen möglichst hohen Wert (z.B. 9999),
tragt bei
Movedirection den Weg zum anderen Ende der Map (in Units) ein
und bei
Move Distance die Distanz, die zurückzulegen ist

Dann gebt ihr ihm folgende Outputs:

OnFullyClosed | rush | open | 0.0
OnFullyOpen | rush | close | 0.0

Tragt nun bei Parent den Namen eurer 1 Unit trigger_multiples (hier: damage_enabler) ein.

Zum Schluss, um zu gewährleisten, wann und ob der Schaden wieder abgestellt wird braucht ihr euer logic_auto wieder.

Tragt dort in die Outputs folgendes ein:

OnMapSpawn | damage_enabler | Disable | 0.0
OnMapSpawn | damage_enabler | Enable | 15.0 (Wann soll die Spawnprotection aufgehoben werden? + Freezetime)
OnMapSpawn | rush | Open | 15.0 (selbe Zeit wie oben)

Hier nochmal ein Gesamtüberblick:

3

Und nochmal alle wichtigen Outputs im Überblick:

outputs

Dasselbe geht natürlich auch ohne das func_movelinear wenn ihr z.B. einen Bereich wollt, indem man immer geschützt ist.
Beispiele dafür die denkbar wären, wäre eventuell ein Spawn für Deathmatch (Am Ausgang einen/mehrere Trigger mit
OnStartTouch | !activator | Setdamagefilter | damage_on | 0.0 hinstellen)
oder ein Raum mit Teleportern (um das info_teleport_destination denselbigen Trigger).

Download Beispielmap.

Natürlich könnt ihr das Ganze auch mit point_servercommands ansagen lassen.

Platziert hierfür ein point_servercommand und gebt ihm einen Namen.
Danach gebt ihr dem logic_auto die Outputs:

OnMapSpawn | Name des point_servercommand | command | say Spawnprotection enabled | 0.0

OnMapSpawn | Name des point_servercommand | command | say Spawnprotection disabled | 15 (selbe Zeit wie wann die Spawnprotection ausgeschalten wird).

Ich hoffe es funktioniert alles bei euch (bei mir gings ) und ich konnte einigen von euch helfen. Fragen, Anregungen, Verbesserungsvorschläge und Wünsche an mich.