Criminal activities cheat sheet (PSI)
Im Folgenden ein paar Details zu den Diebstählen:
Inhaltsverzeichnis
Die allgemeine Struktur
Wie setzt sich ein Diebstahlszenario zusammen?
- In öffentlichen Räumen gibt es Personenmengen (crowds).
- Crowds bestehen aus mehreren Personen. Objektiv hängt die Anzahl der Personen von der Tageszeit und vom Ort ab.
- Gyges kann aber nicht alle Personen sehen. Wieviele Personen er sehen kann, hängt von seinen Fähigkeiten ab (oder anders formuliert, in welchem Zustand er ist). Dazu siehe Table of Abilities. Die Spalte (can_choose_percentage) definiert, welchen Prozentanteil von Leuten er sehen kann.
- Wenn Gyges die Menge betrachtet, werden also einige Personen fixiert, die als potentielle Opfer in Frage kommen.
- Jetzt sind aber nicht alle Opfer gleich. Die Tabelle (Table of Victim Types) definiert, um welche Art von Opfer es sich handelt. Die Spalte (appearance_probability) legt fest, wie wahrscheinlich es ist, dass es sich objektiv gesehen (also unabhängig davon, wieviele Personen Gyges sehen kann) um eine Person von Typ x handelt.
- Beispiel: Es gibt essende Personen (EatingVictim). Die wahrscheinlichkeit, dass ich wenn ich eine Person ansehe, ein essendes Opfer vorfinde, ist 20%.
- Was kann Gyges mit einer Person in der Menge machen? Das wird in der Tabelle (Table of Options) festgelegt.
- Die Spalte (Option_Type) definiert nur einen eindeutigen Namen. Die Option selbst wird als Text in der Spalte (Option_Text) beschrieben.
- Die Spielerin sieht jedoch nur jene Optionen, die sie auch ausführen kann. Für manche Aktionen braucht man einen gewissen Gegenstand (Need_item) und/oder eine bestimmte Fähigkeit (Need_Ability). Die Menge der möglichen Fähigkeiten oder Zustände werden, wie bereits erwähnt, von der (Table of Abilities) festgelegt. Die Fähigkeitslevels können von einer bestimmten Punktezahl abhängen.
- Jede Handlung hat eine gewisse Erfolgswahrscheinlichkeit. Die Basiswahrscheinlichkeit hängt von der Handlung ab und wird definiert in der (Table of Options) im Attribut (Success_Probability). Die Wahrscheinlichkeit wird jedoch durch einen Faktor verändert, der von der Art der Person abhängt (Schüchterne Personen sind leichter zu bestehlen als Aggressive odedr als Gildenmitglieder, etc.). Der Faktor wird definiert in (Table of Victim Types) in der Spalte (impact).
- Zum letzten Bestandteil kommt man, wenn man sich fragt: Was ist die Belohnung für einen erfolgreichen Diebstahl? Und da ist die Antwort: Ein Gegenstand und eine Geldbörse (oder nur eines von beiden).
- Die Beschreibung der Gegenstände erfolgt in (Table of Spoil Articles); man gibt dort eine eindeutige Identifikationsnummer, einen Artikelnamen und eine Artikelbeschreibung an.
- Die Beschreibung der Geldbörsen, jedenfalls etwas, wo Geld drinnen ist, erfolgt in (Table of Preyed_Money_Bags) was ähnlich läuft wie bei den Gegenständen (ID, Name, Beschreibung).
- Der Wert der Gegenstände und der Barwert, der im Geldbörsl ist, hängt vom Opfertyp ab. Die sind wie erwähnt in der (Table of Victim Types) zu finden. Die EUR-Werte werden in den Spalten (Spoil_Value) für den Wert der Gegenstände und (Wallet_Liquidity) für den Barwert im Geldbörsl angegeben. Durch diese Festlegung wird erreicht, dass der Wert irgendwie mit der Bedeutung des Diebesszenarios (und der Schwierigkeit) zusammenhängt.
- Gut, und wie kommt das alles zusammen zu einem Diebstahlszenario?
- Die zwei Tabellen, die die einzelnen Festlegungen zusammenführen, sind (Table of Concrete_Victims) und (Table of theft_issues):
- In der (Table of Concrete_Victims) werden als erstes die Personen beschrieben. Jede Person hat eine eindeutige Nummer zur Identifikation. Dann kommt eine textuelle Beschreibung der Person. Die Spalte (VTID) definiert, um welchen Opfertyp es sich handelt (hier muss man die ID des Opfertyps angeben, was in der Table of VictimTypes nachgeschaut werden kann). Die Spalten (carries_x) und (carries_money) definieren, welchen Gegenstand und welches Geldbörsl die Person hat - wieder mit ID-Nummern, die in den Tabellen Table of Spoil_Articles) und (Table of Preyed_Money_Bags) zu finden sind. Damit sind die Personen eindeutig beschrieben.
- Wir haben aber gesagt, dass Gyges bestimmte Handlungen auf die Person machen kann. Hier tritt die (Table of theft_issues) in Aktion. Hier wird die Person mit den Handlungen, die Gyges mit ihr ausführen kann, verbunden. Die Spalte (PID) legt die Person fest, indem die PersonenID von (Table of Concrete_Victims) angegeben wird. Die Spalte (Option_Type) legt eine Handlung fest, und zwar eine, die in (Table of Options) angegeben ist. Es ist sinnvoll, dass für eine Person mehrere Handlungen möglich sind. Das realisiert man, indem man einfach zwei Zeilen definiert, wo die (PID) gleich bleibt, die Option in (Option_Type) sich aber ändert. Weiters wird pro Eintrag eine Erfolgsmeldung (Spalte: Success_Text) und eine Niederlagemeldung (Spalte: Failure_Text) angezeigt.
Anhand eines konkreten Beispiels
Wir wollen folgendes Diebstahlszenario zusammenbauen: Eine große, langhaarige Blondine (sorry ^^) steht bei der Schottentor-Station und wartet auf ihre U-Bahn. Sie ist abgelenkt, da sie mit der einen Hand telefoniert. Auf ihrer linken Schulter hängt eine schwarz-weiße Hello-Kitty-Handtasche; eher lose. Man kann sich aufgrund dieser Situation mehrere (mehr oder weniger wahrscheinliche) Szenarios überlegen:
- Das naheliegendste: Die Handtasche schnappen und weglaufen
- Nach dem Telefongespräch mit ihr flirten und unauffällig in die Tasche greifen. (Eher unwahrscheinlich als Bettler mit Lumpenkleidung)
- Spiel den Betrunkenen und remple sie an. Wenn ihr die Handtasche runterfällt, fällst du mit ihr. Während du am Boden liegst, greifst du in die Tasche, entschuldigst dich und gehst.
Wie müssen dazu die Einträge in den Tabellen aussehen? Welche Zusatzentscheidungen müssen noch getroffen werden?
Fangen wir genau umgekehrt an wie oben, und zwar bei der Tabelle:
Table of Concrete_Victims
Wir nehmen die nächste freie ID, das sei 55. Außerdem kennen wir schon die Beschreibung der Person. Wenn man das einträgt, erhält man:
PID Lookout_Description carries_x carries_money VTID 55 "Große Blondine mit schwarz-weißer Hello-Kittie-Handtasche"
Die nächsten zwei Spalten (carries_x) und (carries_money) verlangen eine Identifikationsnummer (ID) für den Gegenstand, den das Opfer trägt und die Geldbörse. Die IDs existieren wahrscheinlich noch nicht (außer du hast vorher schon die Gegenstände eingetragen), also muss man sie definieren, und das macht man in der (Table of Spoil Articles) und (Table of Preyed_Money_Bags).
Table of Spoil Articles & Table of Preyed_Money_Bags
Hier muss man sich entscheiden, was Gyges bei einem Erfolgreichen Diebstahl erbeuten soll. Wenn er nichts erbeuten soll, dann ist hier nichts einzutragen, sondern einfach in carries_x und carries_money "--" eintragen. Das wäre hin und wieder vielleicht witzig (wenn man eine lustige Erfolgsmeldung und Failure-Meldung dafür schreibt), aber diesmal fixieren wir einen Gegenstand und eine Geldbörse:
Table of Preyed_Money_Bags M_ID money_container Container_D 7 "Hello-Citty-Geldbörse" "Aus Japan kommt wohl nur putziges Zeug."
Hier geht man wieder wie oben vor: freie ID suchen, Artikelname und Artikelbeschreibung formulieren. (Das Ganze sollte in Englisch passieren; falls es nicht möglich sein sollte, müssen wir Übersetzer finden) Dasselbe für den Beutegegenstand in der anderen Tabelle:
Table of Spoil Articles A_ID Article_Name Article_Description 8 "iPod Nano" "Ein Mp3-Player von Apple. Du dankst Steve Jobbs und deinem Diebesgeschick."
Die IDs 7 und 8 kommen nun in den halbfertigen Eintrag aus der (Table of Concrete_Victims):
PID Lookout_Description carries_x carries_money VTID 55 "Große Blondine mit schwarz-weißer Hello-Kittie-Handtasche" 8 7
Damit ist der Eintrag jedoch noch immer nicht fertig. Wir brauchen noch eine Entscheidung, um welchen Opfertyp es sich handelt. Die spalte VTID ist dafür zuständig und verlangt eine Opertyp-ID. Dazu sehen wir in der Table of VictimTypes nach:
Table of Victim Types
Table of Victim Types VictimType VTID descr appearance_probability impact Spoil_Value Wallet_Liquidity EatingVictim 1 "eats something" 20 300 2EUR 10EUR ShyVictim 2 "Easy Victim." 32 150 5EUR 50EUR IntractableVictim 3 "Hard Victim." 10 80 15EUR 100EUR AggressiveVictim 4 "for Cooperation." 10 60 50EUR 150EUR BusyStudent 5 "Medium Victim." 26 120 70EUR 200EUR UndercoverPolice 6 "V...." 1 10 100EUR 300EUR Clanmember 7 "for a well-trained Gyges." 1 30 300EUR 500EUR
Wir können übrigens auch darauf verzichten, einen konkreten Opfer-Typ anzugeben, wenn das irgendwie sinnvoll ist. Dann wird im Spiel einer der festgelegten Victim-Types zufällig zugewiesen.
Angenommen, wir sind mit den aktuellen VictimTypes nicht zufrieden und wollen einen neuen Erstellen, dann könnte das so aussehen:
Table of Victim Types VictimType VTID descr appearance_probability impact Spoil_Value Wallet_Liquidity BusyWaiting 8 "???" 15 115 10EUR 20EUR
Die Beschreibung des VictimTypes wird zur Zeit nicht verwendet und ich weiß auch nicht, wofür sie verwendet werden könnte (für Vorschläge bin ich dankbar) - ansonsten zunächst mal ignorieren.
Die Auftrittswahrscheinlichkeit habe ich mit 15% angesetzt. Die Summe der Auftrittswahrscheinlichkeiten aller VictimTypes muss zwar nicht zwangsläufig 100% sein (das Spiel läuft auch so), aber man sollte immer mal wieder schauen, dass man die Wahrscheinlichkeiten anpasst, um nicht auf zu hohe Werte zu kommen (Ich erspar mir, auf den Algorithmus genauer einzugehen).
Der Impact beeinflusst die Erfolgswahrscheinlichkeit einer bestimmten Option. Dieser Wert wird mit der Wahrscheinlichkeit der Option einfach multipliziert (und durch 100 dividiert; Prozentangaben gibt man üblicherweise im Intervall zwischen 0 und 1 an). 200 würde demnach bedeuten, dass sich die Wahrscheinlichkeit verdoppelt. (Wer wollte Philosophie studieren, um Statistik und Mathematik zu entgehen? Sorry ^^)
Spoil_Value ist der EUR-Wert für die Beute, also in unserem Fall: für den iPod Nano. Wallet_Liquidity ist der Inhalt der Hello-Kitty-Geldbörse.
Damit ist ein neuer Opfertyp #8 definiert. Die ID tragen wir nun in unsere Personenbeschreibung in Concrete_Victim ein und sind damit endlich fertig mit diesem Eintrag:
PID Lookout_Description carries_x carries_money VTID 55 "Große Blondine mit schwarz-weißer Hello-Kittie-Handtasche" 8 7 8
Jetzt brauchen wir nur noch die Handlungsmöglichkeiten und die Kompetenzen Gyges für die Handlungen festlegen, das geschieht in der Table of Theft_Issues:
Table of Theft_Issues
Table of theft_issues PID Option_Type Success_Text Failure_Text 55
Wir wissen, dass wir bei PID die ID des gerade erstellten Concrete_Victim-Eintrags eintragen. Jeztt kommen die Handlungsoptionen, die wir uns ganz zu Beginn schon überlegt haben. Die Optionen werden jedoch in einer anderen Tabelle festgelegt, also müssen wir nachschauen:
Table of Options Option_Type Option_Text Success_Probability Need_item Need_Ability cut_rucksack "Rucksack aufschneiden." 30 nothing Single_Amateur simple_steal "Einfach bestehlen." 10 nothing Single_Amateur distract "Das Opfer ablenken." 40 nothing Single_Amateur distract_ball "Lass die schwarze Kugel neben ihn fallen und sag ihm, dass er etwas verloren hat." 75 Blackball Single_Amateur theft_of_food "Stehle dem Opfer das Essen." 60 nothing Survival
Nagut, sagen wir, wir nehmen mal die Basisoption "simple_steal", und definieren außerdem noch zwei andere Optionen:
Table of Options Option_Type Option_Text Success_Probability Need_item Need_Ability Beggar_Flirt "Flirte mit ihr" 15 nothing Single_Amateur Professional_Flirt "Setz deinen Charme ein" 70 nothing Single_Profi Simul_Drunk "Spiel den Betrunkenen" 15 nothing Survival Simul_Drunk_1 "Spiel den Betrunkenen" 25 nothing Single_Amateur Simul_Drunk_2 "Spiel den Betrunkenen" 80 nothing Single_Profi
An diesen neuen Einträgen kann man folgendes sehen:
- Man kann mehrere Einträge mit derselben Beschreibung erstellen. Man muss nur darauf achten, dass der Option_Type eindeutig ist. Je nach Fähigkeit (Single_Amateur - Single_Profi - ...) kann man die Wahrscheinlichkeit steigern.
- Die Fähigkeitslevels sind hier nicht definiert sondern nur von der Table of Abilities verwendet:
Table of Abilities alev can_choose_percentage score_needed Survival 15 0 Single_Amateur 5 5 Multi_Amateur 10 20 Single_Profi 15 50 Multi_Profi 25 100 God 100 999
Wenn du noch zusätzliche Fähigkeiten oder Zustandslevels haben möchtest, kannst du die hier eintragen. Ich verzichte mal drauf. Die Änderung von einem Level zum Anderen muss auch nicht unbedingt nach Score gehen; technisch gesehen kann man da sicher andere Dinge machen (falls jemand einen Vorschlag hat, einfach nur nachfragen und das Entwicklungsteam kann schauen, was sich machen lässt). Nungut, da die Optionen nun geklärt sind, können wir den Eintrag von Theft_issues vervollständigen. Für jede Option brauchen wir einen Eintrag (also eine Zeile):
Table of theft_issues PID Option_Type Success_Text Failure_Text 55 simple_steal "Du schnappst dir die Handtasche und läufst so schnell du kannst. Nach 2km merkst du, dass niemand hinter dir her ist und freust dich über deine Beute." "Du versuchst, dir die Handtasche zu schnappen, doch sie klebt förmlich an der Schulter der Blondine." 55 Beggar_Flirt "Nach dem Telefonanruf sprichst du sie mit deinen schönsten Bettler-Augen an und machst ihr Komplimente. Kaum zu glauben, aber sie springt darauf an. Du schmiegst dich an ihre Seite, und greifst unbemerkt in ihre Handtasche." "Nach dem Telefonanruf sprichst du sie mit deinen schönsten Bettler-Augen an. Leider hilft nicht einmal der freunndlichste Blick der Welt gegen Alkoholgeruch und zerlumpter Kleidung. Sie rümpft die Nase und du versuchst gar nicht erst, in die Nähe ihrer Handtasche zu gelangen. Das war wohl nix!"
Ich verzichte auf die restlichen 4 Einträge - da funktioniert es genau so. Damit ist das Szenario komplett. Ich hoffe, es war hilfreich, um die Vielfalt der Tabellen mitsamt den Verweisen und Konventionen zu durchblicken. Wenn es Fragen, Anregungen oder Vorschläge gibt, einfach hier posten. --Andyk 22:12, 4. Jun. 2009 (UTC)