Community-Tutorials (Source)

Model Import Tutorial 2 - prop_physik + Zerstörbare Models

Teil 1 des Tutorials: http://www.mapping-tutorials.de/forum/showthread.php?t=1597
Teil 2 des Tutorials: http://www.mapping-tutorials.de/forum/showthread.php?t=1706

Heute erstellen wir als erstes ein prop_physic Model und danach kümmern wir uns um das Zerstören von Models.

Ihr solltet mein 1. Tutorial schon gelesen haben, da ich an manchen Stellen darauf zurückgreifen werde. Aber jetzt geht’s erstmal los.

1. Prop_physic

Ihr macht ein Model wie im 1. Tutorial beschrieben wurde. Die Physikalischen Eigenschaften werden von der Kollisionsbox bestimmt. Also macht diese Ordentlich. :D

Jetzt exportiert ihr die propdata.txt mit dem Programm GCFScape. Um GCFScape installieren zu können braucht ihr wiederum dieses Programm: Microsoft.net Framework
Link : http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&displaylang=en

Die propdata.txt ist zu finden in der Datei counterstrike –source shared.gcf und dort in cstrike\scripts. Ihr extrahiert sie in ein beliebiges Verzeichnis. Sie enthält alle möglichen Befehle die wir brauchen. $$ damit Kennzeichne ich meine Kommentare.

WOOD $$Gibt es für so ziemlich jedes Material

// Base damage modifiers for wooden objects
// DON'T USE THIS FOR A PROP. USE THE NON.BASE ONES.
"Wooden.Base" $$ die Definition von Wooden.Base
{
"dmg.bullets" "0.75" $$ wie viel % an Schaden durch die
"dmg.club" "2.0" $$ Waffen hinzugeführt wird
"dmg.explosive" "1.5"

"breakable_model" "WoodChunks" $$ Chunks sind Splitter
"breakable_skin" "0" (propdata.txt ganz unten)
}

// Wooden blocks, less than 1 foot cubed.
// i.e pieces of board, branches.
"Wooden.Small" $$ das gebt ihr dann in eure .qc ein
{
"base" "Wooden.Base" $$benutzt alle Eigenschaften von Wooden.Base
"health" "20" $$ Leben (bis zur Zerstörung)

"breakable_count" "2" $$ bei Zerstörung kommen 2 kleine Holzsplitter
}

Jetzt aber zurück zum eigentlichen Vorgang. Die qc sieht bei mir dann so aus:

$modelname box_gib.mdl

$cdmaterials models\box
//$staticprop $$ muss unbedingt gelöscht werden.

$keyvalues { "prop_data" { "base" "Wooden.Small" } } $$damit werden die physikkalischen Eigenschaften zugeordnet.

$surfaceprop "wood"

$scale 1

$body studio "./box_gib"

$sequence idle "box_gib" fps 1

$collisionmodel "box_gib_phys.smd"
{

$Mass 2
}

Jetzt noch kompilieren und ihr hab eine Kiste, die ihr rumschmeißen könnt. Allerdings geht sie kaputt sobald 30 Schaden verursacht wurden und zerfällt in 2 Kleine Holzsplitter.
Um das zu ändern kann man noch den Leben wert ändern.

$keyvalues { "prop_data" { "base" "Wooden.Small"
"health" "300" }
}

Jetzt verträgt die Kiste wesentlich mehr Schaden. Wenn ihr Englisch versteht, könnt ihr euch die propdata.txt noch mal näher anschauen.
Nochmal ne Zusammenfassung:

$staticprop löschen
$keyvalues { "prop_data" { "base" "Wooden.Small" } } einfügen

2. Zerstörbare Models

Ihr modelt ein ganz normales und einfaches Model. Ich hab eine Kiste gemacht.

Ihr achtet drauf, dass alles auf dem 0 Punkt ist und macht danach das, was auf dem Bild ist.
(Origin -werte anpassen; auch auf 0)

colo013.jpg

Jetzt exportieren und das Kollisionsmodel (euermodel_phys) nicht vergessen.

Nun müsst ihr euch vorstellen, dass bei den zerstörbaren Objekten das originale Objekt verschwindet und dafür beliebig viele neue kommen. Also machen wir ein neues ( zu Demonstrationszwecken reicht eins.) Ich hab den Kistenboden genommen. Er hat die gleichen Maße und sitzt auf dem Mittelpunkt wie die Kiste auch. ( Eine Kistenwand dürfte nicht auf dem Mittelpunkt sitzen.) Am besten ihr modelt in der gleichen Scene wie das Originalmodel um zu wissen, welches Teil wo sein muss.
( WICHTIG )
Dann muss das Gleiche wie auf dem Bild mit dem Objekt gemacht werden. Ihr müsst die Gleichen Origin Werte wie bei dem Original Objekt einstellen sonst erscheint euer Kistenteil an der falschen Stelle. Also immer 0,0,0 ( WICHTIG )
Auch das exportieren und auch dafür ein Kollisionsmodel machen.

Tipp: Die Gib´s, so werden die abgebrochenen Stücke genannt, sollten ungefähr so aussehen wie das Original Model sonst sieht es blöd aus. Also ihr hab einen Tisch. Dann könntet ihr ihn bei Beschuss in Platte + 4 Beine zerfallen lassen. Da jedes Teil eine Physikengine hat würde der Tisch dann komplett zerfallen.
Wenn ihr allerdings nur ein Bein macht, verschwindet bei Beschuss der Tisch und ein Bein erscheint in der selben Sekunde. Unrealistisch, nicht wahr !
Auch ist es nützlich die Gib´s in der gleichen Scene wie das Original Model zu modeln, da wisst ihr wo sie hinkommen sollen. Sieht auch Scheisse aus, wenn ein Tischbein in der Mitte spawnt, oder ?

3. Die .qc

Als erstes Kompiliert ihr natürlich alle Texturen. Doch jetzt kommt nicht das Model sondern das Model_Gib also in unserem Fall der Kistenboden. Er wird so kompiliert, als wäre es ein eigenständiges Model.
Nun kommt das Originalmodel dran.
Diese kleine Zeile wird in die qc geschrieben.

$collisiontext {
break { "model" "box_gib" "health" "30" "fadetime" "0" }
}

Mein Model heißt box und der Kistenboden heißt box_gib. Was die beiden anderen Sachen sollen weiß ich nicht genau, da man dem Kistenboden ja über diesen Befehl auch health zuweisen kann.

$keyvalues { "prop_data" { "base" "wooden.large" } }


Diese beiden Definitionen hab ich gefunden doch falls es mir einer sagen könnte wäre ich Dankbar.:
• "health" "#" will set your objects health if you want it to break more or want the object to disappear when shot.
• "fadetime" "#" will set how long it takes for your objects to fade away.

Hier meine Referenz .qc :

$modelname box.mdl
$cdmaterials models\box
$keyvalues { "prop_data" { "base" "wooden.large" } }

$surfaceprop "wood"

$scale 1

$collisiontext {
break { "model" "box_gib" "health" "30" "fadetime" "0" }
break { "model" "box_gib2" "health" "5" "fadetime" "0" }
}
$body studio "./box"

$sequence idle "box" fps 1

$collisionmodel "box_phys.smd"
{
// Mass in kilograms
$Mass 10
}


Diese qc geht davon aus, dass Euer .._gib Model im \models Verzeichnis und in keinem Unterordner ist.

So ich weiß das war jetzt komplizierter aber ich hoffe immer noch Verständlich. Bei Fragen/Problemen wie immer hierher Posten und ich helfe gerne. :zweifel: Ich hab das selber noch nicht perfektioniert und wenn ich etwas besser Weiß, werde ich das tut sofort aktualisieren. Ich bin auch nur ein Mensch ... :eek: