User Tools

Site Tools


z:objekte

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
z:objekte [2007/07/30 17:19]
jjp
z:objekte [2015/08/23 13:59] (current)
Line 3: Line 3:
  
 ===== Gameplay-Werte ===== ===== Gameplay-Werte =====
-Schaden, Hitpoints etc. Alle Zahlenwerte müssen als Integer repräsentiert werden, da floats fürs Einlesen nicht verwendet werden dürfen und für meinen Fixed-Datentyp zumindest vorerst kein String-Parser existiert.+Schaden, Hitpoints etc. Aus Gründen eines deterministischen Spielverlaufs muss dafür Sorge getragen werden, dass für das Einlesen der Werte an keiner Stelle ein Fließkommawert benutzt wird. Es braucht also einen String-Parser, der meinen selbstgebauten Fixed-Datentyp direkt einlesen kann.
  
-Für Schaden würde ich vorschlagen, dass jede Einheit einem bestimmten Schadenstyp zugeordnet ist, gegen den andere Einheiten Schadensreduktion besitzen können. Im Prinzip wie bei Earth, nur dass die Schadenskategorien eben nicht sinnlos fest sind, sondern einfach durch hochzählenden int beliebig festgelegt werden. Dadurch kann jede Einheit einen individuellen Schadenstyp haben und jede Einheit kann individuell gegen jede andere mit Stärken oder Schwächen (negative Rüstungswerte) ausgestattet werden. Der Einfachheit halber hat jede Einheit nur einen Schadenstyp, das ist für unsere Zwecke vollauf ausreichend. Keiner dieser Werte wird ingame angezeigt.+Für Schaden würde ich vorschlagen, dass jede Einheit einem bestimmten Schadenstyp zugeordnet ist, gegen den andere Einheiten Schwächen haben können. Im Prinzip umgekehrt wie bei Earth (Schwäche als Multiplikator des Schadens), nur dass die Schadenskategorien eben nicht sinnlos fest sind, sondern einfach durch hochzählenden int beliebig festgelegt werden. Dadurch kann jede Einheit einen individuellen Schadenstyp haben und jede Einheit kann individuell gegen jede andere mit Stärken oder Schwächen (Schwäche < oder > 1) ausgestattet werden. Der Einfachheit halber hat jede Einheit nur einen Schadenstyp, das ist für unsere Zwecke vollauf ausreichend. Keiner dieser Werte wird ingame angezeigt, weil das den Spieler potentiell nur verwirren würde.
  
  
Line 11: Line 11:
   * Objektbezeichner (string) - interner Identifizierer für den Objekttyp   * Objektbezeichner (string) - interner Identifizierer für den Objekttyp
   * Objekttyp (string) - Neutral, Robot, Fahrzeug, Gebäude, Geschütz   * Objekttyp (string) - Neutral, Robot, Fahrzeug, Gebäude, Geschütz
-  * Hitpoints (int) - 0 für unsterblich +  * Hitpoints (decimal) - 0 für unsterblich 
-  * Panzerung vs X (int) - X für den Schadenstyp (ebenfalls int), Wert in Prozent +  * Anfälligkeit vs X (decimal) - X für den Schadenstyp (int), Wert als Multiplikator des Schadens 
-  * Bounding Radius (int) - Begrenzungskreis bestimmt, welchen Platz die Einheit auf dem Terrain einnimmt (für Wegfindung/Steering)+  * Bounding Radius (decimal) - Begrenzungskreis bestimmt, welchen Platz die Einheit auf dem Terrain einnimmt (für Wegfindung/Steering)
   * Hit Boxes (Quader) - Hitzonen für die Waffenprojektile, (beliebig viele) einfache Quader sollten diesen Job hinreichend erfüllen und sind recht einfach auf Kollision zu testen.   * Hit Boxes (Quader) - Hitzonen für die Waffenprojektile, (beliebig viele) einfache Quader sollten diesen Job hinreichend erfüllen und sind recht einfach auf Kollision zu testen.
 +
  
  
 ==== Roboter und Fahrzeuge ==== ==== Roboter und Fahrzeuge ====
-  * max. Geschwindigkeit (int+  * max. Geschwindigkeit (decimal
-  * max. Turnspeed (int)+  * max. Turnspeed (decimal)
   * (Beschleunigung? Evtl. für Steering benötigt, noch nicht sicher)   * (Beschleunigung? Evtl. für Steering benötigt, noch nicht sicher)
   * Schadenstyp (int) - wie oben beschrieben   * Schadenstyp (int) - wie oben beschrieben
-  * Schadenswert (int) - wie viel Schaden die Einheit vom Schadenstyp anrichtet +  * Schadenswert (decimal) - wie viel Schaden die Einheit vom Schadenstyp anrichtet 
-  * Schwankung Schaden (int) - Absolutwert der Schwankung des Schadens (falls gewünscht) +  * Schwankung Schaden (decimal) - Absolutwert der Schwankung des Schadens (falls gewünscht) 
-  * Fahrer treffen (int) - Wahrscheinlichkeit, dass der Schaden den Fahrer des Fahrzeugs trifft, sofern möglich, Wert in Promille+  * Fahrer treffen (decimal) - Wahrscheinlichkeit, dass der Schaden den Fahrer des Fahrzeugs trifft, sofern möglich
   * Schussgeschwindigkeit (int) - die Dauer eines Schussvorgangs(dabei sollte die Animationsgeschwindigkeit angepasst werden). In Gameticks   * Schussgeschwindigkeit (int) - die Dauer eines Schussvorgangs(dabei sollte die Animationsgeschwindigkeit angepasst werden). In Gameticks
 +  * Zeitpunkt des Projektilaustritts (decimal) - der Zeitpunkt innerhalb des Schussanimationszyklus, zu dem das Projektil die Waffe verlässt (relativ zur Schussgeschwindigkeit)
 +  * Schusspause (int) - Pause zwischen zwei aufeinanderfolgenden Schüssen, in Gameticks.
   * Projektil (string) - Projektilobjekt, das die Waffe abfeuert   * Projektil (string) - Projektilobjekt, das die Waffe abfeuert
-  * Reichweite (int) - Waffenreichweite+  * Reichweite (decimal) - Waffenreichweite
   * zum Schießen stehen? (bool) - Einheit kann nur im Stehen feuern   * zum Schießen stehen? (bool) - Einheit kann nur im Stehen feuern
-  * min/max/default horizontaler Winkel der Waffe (int) - Wie weit kann die Waffe in der Horizontalen gedreht werden? +  * min/max/default horizontaler Winkel der Waffe (decimal) - Wie weit kann die Waffe in der Horizontalen gedreht werden? 
-  * min/max/default vertikaler Winkel der Waffe (int) - Wie weit kann die Waffe in der Vertikalen gedreht werden? +  * min/max/default vertikaler Winkel der Waffe (decimal) - Wie weit kann die Waffe in der Vertikalen gedreht werden? 
-  * Drehgeschwindigkeit der Waffe (int) - Wie schnell dreht sich die Waffe?+  * Drehgeschwindigkeit der Waffe (decimal) - Wie schnell dreht sich die Waffe?
   * Anzahl Rohre pro Schuss (int) - Wie viele Rohre der grafisch definierten feuern gleichzeitig?   * Anzahl Rohre pro Schuss (int) - Wie viele Rohre der grafisch definierten feuern gleichzeitig?
-  * Reparaturgeschwindigkeit (int) - Hitpoints pro Sekunde oder etwas in der Art für Reparaturfahrzeug.+  * Reparaturgeschwindigkeit (decimal) - Hitpoints pro Gametick oder etwas in der Art für Reparaturfahrzeug.
  
-Frage: Was ist, wenn eine Waffe eine "Vorlaufanimation" hat, bevor sich der eigentliche Schuss löst? Wegen Synchronisation kann nicht auf das Ende einer Animation gewartet werden, also einfach einen Zeitparameter als Verzögerung dazutun, der dann manuell synchronisiert werden muss? 
-Vorschlag dazu: die Schussgeschwindigkeit ist gleichzeitig die Verzögerung. D.h. der Schaden passiert immer am Ende des Schussvorgangs. Dürfte relativ gut mit den meisten Animationen übereinstimmen und erfordert keine manuelle Anpassung. Komplizierter wäre es einen Wert zwischen 0 und 1 zusätzlich zu definieren der festlegt zu welchem Zeitpunkt relativ im Bezug auf die Schussdauer der Schaden passiert.  
  
 ==== Gebäude ==== ==== Gebäude ====
Line 47: Line 48:
  
 ==== Projektile ==== ==== Projektile ====
-  * Projektilgeschwindigkeit (int) - Geschwindigkeit des abgefeuerten Geschosses+  * Projektilgeschwindigkeit (decimal) - Geschwindigkeit des abgefeuerten Geschosses
   * Projektiltyp (string) - z. B. ballistisch, gerade, Strahl   * Projektiltyp (string) - z. B. ballistisch, gerade, Strahl
   * Projektilgröße (Quader) - quasi Bounding Box des Projektils im Sinne des Gameplays   * Projektilgröße (Quader) - quasi Bounding Box des Projektils im Sinne des Gameplays
-  * Splash Damage (int) - Schadensbereich+  * Splash Damage (decimal) - Schadensbereich
  
  
Line 76: Line 77:
 Weiterhin muss definiert werden, von wo aus Schüsse starten (und wie diese aussehen), also Nodes oder Bones als Waffenrohre deklarieren. Dazu braucht es auch noch die Info, ob alle Rohre gleichzeitig (z. B. Psycho) oder abwechselnd (z. B. Raketenwerfer) feuern sollen (aber das ist eigentlich wieder eine Gameplay-Sache). Weiterhin muss definiert werden, von wo aus Schüsse starten (und wie diese aussehen), also Nodes oder Bones als Waffenrohre deklarieren. Dazu braucht es auch noch die Info, ob alle Rohre gleichzeitig (z. B. Psycho) oder abwechselnd (z. B. Raketenwerfer) feuern sollen (aber das ist eigentlich wieder eine Gameplay-Sache).
  
 +
 +===== Beispiel =====
 +Ein Entwurf für eine Beschreibungsdatei für einen Roboter:
 +
 +<code xml>
 +<?xml version="1.0" encoding="utf-8"?>
 +<robot id="grunt">
 +  <basic>
 +    <!-- Number of hitpoints -->
 + <hitpoints>300</hitpoints>
 + <!-- Damage multipliers to increase or reduce damage taken from a specific damage type -->
 + <damage_mult type="1">1.2</damage_mult>
 + <damage_mult type="4">0.9</damage_mult>
 + <!-- The bounding radius specifies the space the object occupies on the map -->
 + <bounding_rad>15.0</bounding_rad>
 + <!-- Define hitboxes for projectile collision -->
 + <hitbox x1="-5.0" y1="-5.0" z1="0.0" x2="0.0" y2="0.0" z2="5.0" />
 + <hitbox x1="0.0" y1="0.0" z1="0.0" x2="5.0" y2="5.0" z2="10.0" />
 +  </basic>
 +  
 +  <moving>
 +    <!-- The unit's velocity -->
 + <velocity>20.0</velocity>
 + <!-- Turnspeed -->
 + <turnspeed>5.0</turnspeed>
 +  </moving>
 +  
 +  <weapon>
 +    <!-- The type of damage this unit deals -->
 + <damage_type>0</damage_type>
 + <!-- The amount of damage the unit deals -->
 + <damage>25.0</damage>
 + <!-- Variance of the damage dealt -->
 + <damage_variance>2.0</damage_variance>
 + <!-- Probability that this unit hits the driver of a vehicle instead of the vehicle. -->
 + <hit_driver_prob>0.05</hit_driver_prob>
 + <!-- Time in game ticks for firing a single shot -->
 + <shoot_duration>30</shoot_duration>
 + <!-- Relative time after which the projectile is created when firing -->
 + <shoot_out>0.7</shoot_out>
 + <!-- Time in game ticks between two shots -->
 + <shoot_pause>50</shoot_pause>
 + <!-- Projectile object to be used with this weapon -->
 + <projectile>grunt_projectile</projectile>
 + <!-- Range of fire -->
 + <shoot_range>30.0</shoot_range>
 + <!-- Does the unit need to stand still when shooting? -->
 + <shoot_stand>true</shoot_stand>
 + <!-- Weapon turning in horizontal: Min/max/default angle in degrees and turn speed in degrees/gametick-->
 + <horiz_angle min="-45" max="45" default="0" speed="1" />
 + <!-- Weapon turning in vertical: Min/max/default angle in degrees and turn speed -->
 + <vert_angle min="-15" max="30" default="0" speed="0.5" />
 + <!-- How many of the barrels defined in the rendering section actually fire per shot? -->
 + <barrels>1</barrels>
 +  </weapon>
 +  
 +  
 +  <rendering>
 +    <!-- Define nodes to attach meshes etc. to -->
 +    <node x="0" y="0" z="0">root</node>
 +
 + <!-- Define the meshes and their placement -->
 + <mesh material="grunt_mat" attach="node" id="root">grunt</mesh>
 +
 + <!-- Define the unit's states and the animations and particle effects accompanying those -->
 + <state name="idle0">
 +   <animation loop="false">grunt:idle0</animation>
 + </state>
 +
 + <state name="moving">
 +   <animation loop="true">grunt:walking</animation>
 + </state>
 +
 + <state name="shooting">
 +   <animation loop="false">grunt:shooting</animation>
 +   <particle attach="bone" id="grunt:weapon">grunt_smoke</particle>
 + </state>
 +
 + <!-- Declare bones or nodes as weapon barrels, this is where the projectiles will be emerging from -->
 + <barrel type="bone" id="grunt:weapon" />
 +  </rendering>
 +  
 +  
 +</robot>
 +
 +</code>
z/objekte.1185808756.txt.gz · Last modified: 2015/08/23 14:03 (external edit)