KONZEPT:
Koerperzonen fuer das neue Kampfsystem im Wunderland
AUTOREN:
Elric, Holger, Gum
UEBERBLICK:
Ein Schaden trifft einen oder mehrere Teile des Koerpers. Und
zwar eine Koerperzone (oder Kombination) aus folgenden. Deswegen
muss bei einem Living gesetzt werden, welche Koerperzonen es
ueberhaupt hat.
Die (B)ody(Z)ones:
BZ_TRUNK - Rumpf ohne Extremitaeten
BZ_ARM - Arme
BZ_LEG - Beine
BZ_HAND - Haende
BZ_FEET - Fuesse
BZ_HEAD - Kopf
BZ_TAIL - Schwanz
BZ_WING - Fluegel
Ein Lebewesen besteht also aus einer Kombination von Koerperzonen,
die miteinander verbunden sind und in gewisser Weise von einander
abhaengig sind. (Das Abhacken von BZ_ARM fuehrt auch zum Verlust
von BZ_HAND.)
Fuer die meisten Lebewesen gibt es Standard-Bodies, die dem Magier
die Arbeit abnehmen. Man kann sie mittels CreateBody() setzen.
Derzeit gibt es:
BODYTYPE_HUMANOID - Humanoide (Mensch, Kaeuer, Gnom etc)
BODYTYPE_HORSE - Pferdaehnliche (Pferd, Esel, Reh)
BODYTYPE_FISH - Fische (2 Brust-, 2 After-, Ruecken- und
Schwanzflosse)
BODYTYPE_INSECT - Insekten mit 6 Beinen ohne Fluegel
BODYTYPE_INSECT1 - Insekten mit 2 Fluegeln
BODYTYPE_INSECT2 - Insekten mit 4 Fluegeln
BODYTYPE_SPIDER - Spinne (8 Beine)
BODYTYPE_DRAGON - Drache (4 Beine, 1 Kopf, 2 Fluegel, Schwanz)
BODYTYPE_CAT - Katzen, Loewen etc.
BODYTYPE_TREE - Baeume (je 6 Aeste/Zweige, Stamm und Krone)
BODYTYPE_REPTILE - Echsen (4 Beine, 4 Klauen, Kopf, Schwanz)
BODYTYPE_SNAKE - Schlangen
BODYTYPE_BIRD - Voegel
BODYTYPE_MONKEY - Humanoide mit Schwanz
BODYTYPE_BEAR - Tier mit 4 Tatzen und ohne Schwanz
Wem das nicht reicht, muss die Koerperzonen seiner Monster selbst
deklarieren. Dazu gibt es AddBodyZone().
Angeben sollte man fuer die Zonen:
BZO_TYP (0) - Unique-Name: ein eindeutiger Bezeichner
BZO_NAME (1) - Name, der bei Treffern ausgegeben wird
BZO_PLURAL (2) - Pluralform des Namens
BZO_GENDER (3) - Grammatikalisches Geschlecht der Zone
BZO_NAME_ADJ (4) - Adjektiv (links, rechts, hinten, vorn etc.)
BZO_DAM_FACTOR (5) - Wie stark ein Treffer auf diese Zone auf
das Lebewesen insgesamt wirkt
BZO_HIT_CHANCE (6) - Prozentsatz, wie wahrscheinlich ein Treffer
hier ist
BZO_CORPSE (7) - Leichenteilobjekt, wenn es eins geben soll
BZO_ARMOUR (8) - Array aus Ruestungen, die diese Zone schuetzen
BZO_WEAPON (9) - Waffe/Schild, die/das von dieser Zone
getragen wird
BZO_FLAGS (10) - Flags fuer Funktionen, z.B. angreifende Zone,
waffentragende Zone, Todeszone, tragende Zone
BZO_CONNECTED (11) - mit dieser Zone verbundene andere Zonen
BZO_TRUNCATED (12) - Ist die Zone abgetrennt?
Zum dauerhaften Entfernen von Koerperzonen gibt es RemoveBodyzone(),
Fuer das zeitweise Abschneiden TruncateBodyzone() und fuer das
Wieder-Annaehen RestoreBodyzone(). Ausserdem besteht die Moeglichkeit
saemtliche Offsets (Werte zu den einzelnen Keys einer Bodyzone)
mittels QueryBodyzone() abzufragen und einige Offsets auch mittels
SetBodyzone() zu veraendern.
Die einzelnen Werte der Bodyzonen haben vor allem ihre Auswirkungen
auf das Kampfgeschehen. BZO_HIT_CHANCE ist fuer die Berechnung im
Attack() - um auszurechnen, wo man hintrifft.
BZO_DAM_FACTOR ist ein Faktor, der angibt, wie stark ein Treffer
auf diese Zone auf das Monster insgesamt wirkt. Dann waeren 20%
etwa so zu verstehen, dass der Treffer (100) auf den Arm zu 20%
auf das Gesamtmonster wirkt. Also 20 Schadenspunkte, die abzuziehen
waeren.
Einige Properties beziehen sich auf die Bodyzonen. Z.B. P_MAX_HANDS,
P_USED_HANDS, in Verbindung damit auch P_WEAPONS und P_ARMOURS. (Eine
Koerperzone, die abgetrennt ist, kann auch keine Ruestung tragen.)
Ebenso werden sich die "natuerlichen" Angriffsmoeglichkeiten der
Lebewesen auf Koerperzonen beziehen. Angreifen kann ein Lebewesen
nur, wenn es eine attackierende oder waffenfaehige/-tragende
Koerperzone hat.
SIEHE AUCH:
TruncateBodyzone(L), AddBodyzone(L), CreateBody(L), GetZonesByType(L),
GetBodyType(L), RestoreBodyzone(L), QueryBodyzone(L), GetBodyzones(L),
RestoreAllBodyzones(L), SetBodyzone(L), RemoveBodyzone(L),
P_MAX_HANDS, P_USED_HANDS, P_WEAPONS, P_ARMOURS, AddHandsAttack(L)
|