Browse Source

Commit some previous work on built in data.

Beoran 8 years ago
parent
commit
a7a0f4acbc
7 changed files with 1219 additions and 121 deletions
  1. 196 5
      src/woe/world/art.go
  2. 336 20
      src/woe/world/being.go
  3. 178 4
      src/woe/world/item.go
  4. 266 5
      src/woe/world/skill.go
  5. 186 11
      src/woe/world/technique.go
  6. 11 11
      src/woe/world/world.go
  7. 46 65
      woe.geany

+ 196 - 5
src/woe/world/art.go

@@ -1,10 +1,9 @@
 package world
 
-type Art struct {
-    // An art is a special case of technique that requires Essence, 
-    // and consumes JP in stead of MP
-    Technique
-}
+// An art is a special case of technique that requires Essence, 
+// and consumes JP in stead of MP
+type Art Technique
+
 
 
 type BeingArt struct {
@@ -16,3 +15,195 @@ type BeingArt struct {
 
 
 
+/* Arcane Tone Earth Sun Tree Flame Snow Bolt Omen */
+
+var ArtList = []Art {
+    /* Arcane arts, need more later */ 
+    { 
+      Skill  : "skill_arcane",  
+      Entity : Entity { ID: "art_scry", Name: "Scry", 
+      Short  : "Sense mobiles in the current zone", },
+      Effect : "arcane",
+      Level  : 1,
+      Cost   : 10,
+    },
+
+    { 
+      Skill  : "skill_arcane",  
+      Entity : Entity { ID: "art_melt", Name: "Melt", 
+      Short  : "A piercing art attack aganst one being", },      
+      Effect : "arcane",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_tone",  
+      Entity : Entity { ID: "art_hope_popsong", Name: "Hope Popsong", 
+      Short  : "An encouraging song. Restores some MP.", },      
+      Effect : "restore mp",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_tone",  
+      Entity : Entity { ID: "art_scream", Name: "Scream", 
+      Short  : "Scream that cause sound damage and may scare weaker foes away.", },
+      Effect : "tone",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_earth",  
+      Entity : Entity { ID: "art_sand", Name: "Sand", 
+      Short  : "Darkens the sight of a foe with sand, causing them to miss more often.", },
+      Effect : "cause blind",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_earth",  
+      Entity : Entity { ID: "art_boom", Name: "Boom", 
+      Short  : "Small explosion attack against one being.", },      
+      Effect : "blast",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    
+    { 
+      Skill  : "skill_sun",  
+      Entity : Entity { ID: "art_flash", Name: "Flash", 
+      Short  : "Blinds foes and purifies corrupted beings.", },      
+      Effect : "laser",
+      Level  : 1,
+      Cost   : 10,
+    },
+    
+    { 
+      Skill  : "skill_sun",
+      Entity : Entity { ID: "art_sunbeam", Name: "Sunbeam", 
+      Short  : "Small laser attack against one foe.", },      
+      Effect : "laser",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_tree",  
+      Entity : Entity { ID: "art_poison", Name: "poison", 
+      Short  : "Small toxic attack against one opponent.", },      
+      Effect : "toxic",
+      Level  : 1,
+      Cost   : 30,
+    },
+    { 
+      Skill  : "skill_tree",
+      Entity : Entity { ID: "art_invigorate", Name: "Invigorate", 
+      Short  : "Slighly heals the HP and MP of one's self.", },      
+      Effect : "heal",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    { 
+      Skill  : "skill_",  
+      Entity : Entity { ID: "art_", Name: "", 
+      Short  : "", },      
+      Effect : "",
+      Level  : 1,
+      Cost   : 30,
+    },
+    
+    
+    
+    
+    
+    
+    
+        
+     
+}
+
+
+ 

+ 336 - 20
src/woe/world/being.go

@@ -13,8 +13,8 @@ type Aptitudes struct {
     Exploits    []BeingExploit
 }
 
-/* Kind of a being*/
-type BeingKind struct {
+/* Kind of a being or "Kin" for short*/
+type Kin struct {
     Entity
     // Talent modifiers of the species
     Talents
@@ -23,26 +23,42 @@ type BeingKind struct {
     Aptitudes 
     // Arts multiplier in %. If zero arts cannot be used.
     Arts        float64
+    // Technique multiplier in %. If zero techniques cannot be used.
+    Techniques  float64
+    // Learning speed in % 
+    Learning    float64
+    // How much of the being is mechanical. 
+    // Affects healing arts and medication, and the ability to install parts.
+    Mechanical  float64
+    // Level of Corruption
+    Corruption  float64
     // If players can choose this or not
     Playable    bool
 }
 
 
-func NewBeingKind(id ID, name string) * BeingKind {
-    res := new(BeingKind)
+func NewKin(id ID, name string) * Kin {
+    res := new(Kin)
     res.ID = id;
     res.Name = name
     return res
 }
 
-/* Profession of a being */
-type Profession struct {
+/* Job of a being */
+type Job struct {
     Entity
     // Talent modifiers of the profession
     Talents
     // Vitals modifiers of the profession
     Vitals
-    Aptitudes    
+    // Map of skills that this job starts with and their levels.
+    Skills      map[ID] int
+    // Same for arts and techniques and exploits
+    Arts        map[ID] int
+    Techniques  map[ID] int
+    Exploits    map[ID] int
+    // if a player can choose this or not    
+    Playable    bool
 }
 
 
@@ -79,7 +95,7 @@ var Genders = struct {
 
     Gender {
     Entity : Entity{ ID: "genderless", Name: "Genderless"},
-    Talents : Talents { Toughness: 1, Wisdom: 1 }, 
+    Talents : Talents { Toughness: 1, Emotion: 1 }, 
     },
     
 }
@@ -97,23 +113,323 @@ var GenderMap = map[ID]*Gender {
 
 
 
-/* All BeingKinds of  WOE */
-var BeingKindList = [] BeingKind {  
+/* All Kins of  WOE */
+var KinList = [] Kin {  
     {   Entity: Entity {
-            ID: "kin_", Name: "Human",
+            ID: "kin_human", Name: "Human",
             Short: "The primordial conscious beings on Earth.",
             Long: 
-            `Humans are the primordial kind of conscious beings on Earth. The excel at nothing in particular, but are fast learners.`,      
+`Humans are the primordial kind of conscious beings on Earth. 
+They excel at nothing in particular, but are fast learners.`,      
         },
         // No talents because humans get no talent bonuses
         // No stats either because no bonuses there either.
         Arts : 1.0,
         Playable : true,
     },
+    {   Entity: Entity {
+            ID: "kin_neosa", Name: "Neosa",
+            Short: "Nimble beings, skilled in the Arts.",
+            Long: 
+`Neosa are descendents of humans genetically modified to be lite, agile 
+and skilled with the Numen Arts. They are less tough and strong, and less adept
+with techniques`,
+        },
+        
+        // AGI+1 EMO+1 STR-1 TOU-1 
+        Talents : Talents { Strength : -1, Toughness: -1, 
+            Agility : 1, Emotion : 1, },
+        Arts        : 1.5,
+        Techniques  : 0.5,
+        Playable    : true,
+    },
+    {   Entity: Entity {
+            ID: "kin_mantu", Name: "Mantu",
+            Short: "Hardy, stocky beings, skilled in the Techniques.",
+            Long: 
+`Mantu are descendents of humans genetically modified to be hardy, stocky 
+and skilled with Techniques. They are somewhat less agine and less adept with 
+Numen Arts than humans.`,
+        },
+        // STR+1 1 TOU+1  AGI-1 EMO-1 
+        Talents : Talents { Strength : +1, Toughness: +1, 
+            Agility : -1, Emotion : -1, },
+        
+        Arts : 0.8,
+        Techniques : 1.2,
+        Playable : true,
+    },
+    {   Entity: Entity {
+            ID: "kin_cyborg", Name: "Cyborg",
+            Short: "Human enhanced with robotic parts. ",
+            Long: 
+`Cyborgs are humans who either through neccesity or through their own will, 
+have been enhanced with robotic parts. They are far more skilled with 
+Techniques, and can install some Parts, but their Nummen arts are only half 
+as effective. They are partially mechanical and healing arts and medication 
+is not as effective on them, but they can be repaired.`,
+        },
+        // STR+1 1 TOU+1 DEX+1 INT+1 
+        Talents : Talents { Strength : +1, Toughness: +1, 
+            Dexterity : +1, Intelligence: +1, },
+        Arts : 0.5,
+        Techniques : 1.25,
+        Mechanical : 0.5,
+        Playable : true,
+    },
+    {   Entity: Entity {
+            ID: "kin_android", Name: "Android",
+            Short: "Human shaped biomchanical robot at the service of humans. ",
+            Long: 
+`Androids are conscious human shaped robots with the imperative to serve humans.  
+Highly effective with Techniques, and can install many Parts, but cannot use 
+any Nummen arts. Since thay are not alive, they technically cannot die.`,
+        },
+        // STR+1 1 TOU+1 DEX+1 INT+1 
+        Talents : Talents { Strength : +2, Toughness: +2, 
+            Dexterity : +2, Intelligence: +2, },
+        Arts : 0.0,
+        Techniques : 1.5,
+        Mechanical : 1.0,
+        Playable : true,
+    },
+    
+    {   Entity: Entity {
+            ID: "kin_maverick", Name: "Maverick",
+            Short: "Human shaped biomechanical robot running wild. ",
+            Long: 
+`Mavericks are androids in which the imperative to serve humans has 
+been destroyed or disabled.  Highly effective with Techniques, and can install 
+many Parts, but cannot use any Nummen arts. Since thay are not alive, they 
+technically cannot die.  They are feared by Humans and hated by Androids.`,
+        },
+        // STR+1 1 TOU+1 DEX+1 INT+1 
+        Talents : Talents { Strength : +3, Toughness: +3, 
+            Dexterity : +2, Intelligence: +2, Charisma: -2 },
+        Arts : 0.0,
+        Techniques : 1.5,
+        Mechanical : 1.0,
+        Playable : false,
+    },
+    
+    
+    {   Entity: Entity {
+            ID: "kin_robot", Name: "Robot",
+            Short: "Nonconscious mechanical robot. ",
+            Long: 
+`In the wars of the past many robots were built for offense or defense. 
+Unfortunately, they are self repairing and often even able to replicate 
+if they find suitable materials. No wonder they are still prowling
+the Earth millennia after.`,
+        },
+        // STR+1 1 TOU+1 DEX+1 INT+1 
+        Talents : Talents { Strength : +4, Toughness: +4, 
+            Dexterity : +2, Intelligence: +2, Charisma: -4},
+        Arts : 0.0,
+        Techniques : 1.5,
+        Mechanical: 1.0,
+        Playable : false,
+    },
+    
+    {   Entity: Entity {
+            ID: "kin_drone", Name: "Drone",
+            Short: "Flying combat robot. ",
+            Long: 
+`Out of control robots are a pain, out of control flying robots even more so!
+They might be less though than normal robots, but they move extremely quickly.
+`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +2, 
+            Agility: +4, Dexterity : +2, Intelligence: +2, Charisma: -4},
+        Arts : 0.0,
+        Techniques : 1.5,
+        Mechanical : 1.0,
+        Playable : false,
+
+    },
+    {   Entity: Entity {
+            ID: "kin_turret", Name: "Turret",
+            Short: "Immobile automated defense system. ",
+            Long: 
+`
+The ancients would set up robotic defense system to guard certain areas.
+These defense systems might be immobile, but they are deadly accurate.
+Furthermore they are extremely resillient and self repairing. 
+No wonder they are still actve after all these years.
+`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +4, 
+            Agility: -4, Dexterity : +4, Intelligence: +4, Charisma: -4},
+        Arts : 0.0,
+        Techniques : 1.5,
+        Mechanical : 1.0,
+        Playable : false,
+    },
+    
+    {   Entity: Entity {
+            ID: "kin_beast", Name: "Beast",
+            Short: "Beast that prowls the wild. ",
+            Long: 
+`Due to the damage to the ecosystem, beasts have rapidly evolved in the last 
+60000 years. As a result, most all of them, even the plant eaters, are ferocious 
+and aggressive, to protect themselves and their offspring from Humans.`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +2, 
+            Agility : +1, Intelligence: -5, },
+    },
+
+    {   Entity: Entity {
+            ID: "kin_bird", Name: "Bird",
+            Short: "Flying being that prowls the wild. ",
+            Long: 
+`Beasts can be dangerous, flying beasts are all the more so! 
+They might be less resillient, but all the more agile.`,
+        },
+        Talents : Talents { Strength : +1, Toughness: +1, 
+            Agility : +3, Intelligence: -5, },
+    },
+
+    {   Entity: Entity {
+            ID: "kin_fish", Name: "Fish",
+            Short: "Fish like being that swims the seas or rivers. ",
+            Long: 
+`Now you know why you were always told not to swim in rivers or seas.
+Fish dart through the water, attacking with their razor sharp teeth.
+`,
+        },
+        Talents : Talents { Strength : +3, Toughness: +2, 
+            Agility : +2, Intelligence: -5, },
+    },
+
+    {   Entity: Entity {
+            ID: "kin_amphibian", Name: "Amphibian",
+            Short: "Being that lives both on land and in the water. ",
+            Long: 
+`Covered with a slimy skin and often toxic, these being can not only swim 
+but also purse you on land.`,
+        },
+        Talents : Talents { Strength : +1, Toughness: +2, 
+            Agility : +1, Dexterity: +1, Intelligence: -5, },
+    },
+
+    {   Entity: Entity {
+            ID: "kin_reptile", Name: "Reptile",
+            Short: "Scaly creepy crawling beasts.",
+            Long: 
+`Reptiles have been around for a long time, and it looks they will be around for 
+a long time still. They may be slow, especially in colder weather, nevertheless
+they remain dangerous.
+`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +2, 
+            Agility: -1, Intelligence: -5, },
+    },
+    {   Entity: Entity {
+            ID: "kin_crustacean", Name: "Custacian",
+            Short: "Beast protected by a tough shell",
+            Long: 
+`You might find it hard to inflict any damage to these well armoured beings.
+Their shells protect them against damage and allow them to live in the water
+and as well on the land.`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +4, 
+                            Intelligence: -5,  },
+    },
+    {   Entity: Entity {
+            ID: "kin_insect", Name: "Insect",
+            Short: "Beast with articulated legs and bodies.",
+            Long: 
+`The climate of Earth hs shifted dramaticaly over the last 60000 years,
+and as a result, larger creepy crawlers became more successful.
+`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +4,  Intelligence: -5, },
+    },
+
+
+    {   Entity: Entity {
+            ID: "kin_aquatic", Name: "beast",
+            Short: "Aquatic beast. ",
+            Long: 
+`Whether in the rivers or the deep seas, these soft bodies creatures 
+are often toxic and quite dangerous.`,
+        },
+        Talents : Talents { Strength : +2, Dexterity: +2, Intelligence: -5, },
+    },
+    {   Entity: Entity {
+            ID: "kin_corrupted", Name: "corrupted",
+            Short: "Beast corupted by Omen. ",
+            Long: 
+`Some animals became corrupted by Omen. As a result, they became much stronger 
+and more resillient. Fortunately, the Omen is weak against certain Numen arts.
+Beware, their attacks might be contageous...`,
+        },
+        Talents : Talents { Strength : +4, Toughness: +4, 
+            Agility : +1, Intelligence: -3, Wisdom: -5 },
+    },
+    {   Entity: Entity {
+            ID: "kin_deceased", Name: "Deceased",
+            Short: "Deceased biological being animated by Omen. ",
+            Long: 
+`Some living beings become corrupted by Omen to the point that they remain
+animated even after their biological bodies have already stopped functioning.
+Such beings are termed the Deceased. They are resillient, strong and cunning. 
+Fortunately, the Omen is weak against certain Numen arts. But beware, their 
+attacks might be contageous...
+`,
+        },
+        Talents : Talents { Strength : +2, Toughness: +2, 
+            Agility : +1, Intelligence: -1, Wisdom: -7 },
+    },
+    
+
 }
 
 
 
+/* All jobs of WOE 
+ * agent        officer     guardian
+ * worker       brawler     builder
+ * hunter       gunsman     rogue
+ * explorer     ranger      rebel
+ * tinker       engineer    wrecker 
+ * homemaker    musician    trader
+ * scholar      scientist   hacker
+ * medic        cleric      artist
+ * esper        dilettante  (not playable) Danger
+ * 
+ * 
+ * hunter scholar esper worker medic agent officer cleric guardian ranger wrecker engineer tinker scientist 
+ * 
+ * 
+ * 
+
+Officer                 STR + 1
+Worker                  TOU + 1
+Engineer                DEX + 1
+Hunter                  AGI + 1
+Scholar                 INT + 1
+Doctor                  WIS +1
+Cleric                  CHA + 1
+
+ * 
+ * 
+*/
+var JobList = [] Job {  
+    {   Entity: Entity {
+            ID: "job_hunter", Name: "Hunter",
+            Short: "Hunter who chases beasts and mavericks.",
+            Long: 
+`Hunters protect human settlements from Beasts and Mavericks, and try to keep their numbers down.
+`,      
+        },
+        Talents : Talents { Dexterity: +2 },            
+        Skills : map[ID] int{ "skill_guns": 10,  },
+        Playable: true,
+    },
+}
+
+
 
 
 
@@ -173,7 +489,7 @@ type Talents struct {
     Intelligence    int     `xml:"Talents>INT,omitempty"`
     Wisdom          int     `xml:"Talents>WIS,omitempty"`
     Charisma        int     `xml:"Talents>CHA,omitempty"`
-    Essence         int     `xml:"Talents>ESS,omitempty"`
+    Emotion         int     `xml:"Talents>EMO,omitempty"`
 }
   
 
@@ -198,8 +514,8 @@ type Being struct {
     
     // Essentials
     Gender          
-    BeingKind    
-    Profession
+    Kin    
+    Job
     Level           int
     
     // A being has talents.
@@ -244,7 +560,7 @@ func (me *Being) Quickness() int {
 }
 
 func (me * Being) Knack() int {
-    return (me.Dexterity * 2 + me.Essence) / 3
+    return (me.Dexterity * 2 + me.Emotion) / 3
 }
     
     
@@ -262,12 +578,12 @@ func (me * Being) Zeal() int {
 
 
 func (me * Being) Numen() int {
-      return (me.Essence * 2 + me.Dexterity) / 3
+      return (me.Emotion * 2 + me.Dexterity) / 3
 }
 
 // Generates a prompt for use with the being/character
 func (me * Being) ToPrompt() string {
-    if me.Essence > 0 {
+    if me.Emotion > 0 {
         return fmt.Sprintf("HP:%s MP:%s JP:%s LP:%s", me.HP.TNM(), me.MP.TNM(), me.JP.TNM, me.LP.TNM())
     } else {
         return fmt.Sprintf("HP:%s MP:%s LP:%s", me.HP.TNM(), me.MP.TNM(), me.LP.TNM())
@@ -277,7 +593,7 @@ func (me * Being) ToPrompt() string {
 
 // Generates an overview of the essentials of the being as a string.
 func (me * Being) ToEssentials() string {
-    return fmt.Sprintf("%s lvl %d %s %s %s", me.Name, me.Level, me.Gender.Name, me.BeingKind.Name, me.Profession.Name)
+    return fmt.Sprintf("%s lvl %d %s %s %s", me.Name, me.Level, me.Gender.Name, me.Kin.Name, me.Job.Name)
 }
 
 // Generates an overview of the physical talents of the being as a string.
@@ -287,7 +603,7 @@ func (me * Being) ToBodyTalents() string {
 
 // Generates an overview of the mental talents of the being as a string.
 func (me * Being) ToMindTalents() string {
-    return fmt.Sprintf("INT: %3d    WIS: %3d    CHA: %3d    ESS: %3d", me.Intelligence, me.Wisdom, me.Charisma, me.Essence)
+    return fmt.Sprintf("INT: %3d    WIS: %3d    CHA: %3d    EMO: %3d", me.Intelligence, me.Wisdom, me.Charisma, me.Emotion)
 }
 
 // Generates an overview of the equipment values of the being as a string.

+ 178 - 4
src/woe/world/item.go

@@ -1,11 +1,185 @@
 package world
 
+type DamageKind string
+const (
+    DAMAGE_CUT          DamageKind = "cut"
+    DAMAGE_CRUSH        DamageKind = "crush"
+    DAMAGE_PIERCE       DamageKind = "pierce"
+    DAMAGE_HEAT         DamageKind = "heat"
+    DAMAGE_COLD         DamageKind = "cold"
+    DAMAGE_SHOCK        DamageKind = "shock"
+    DAMAGE_TOXIC        DamageKind = "toxic"
+    DAMAGE_LASER        DamageKind = "laser"
+    DAMAGE_BLAST        DamageKind = "blast"
+    DAMAGE_TONE         DamageKind = "tone"
+    DAMAGE_CORRUPTION   DamageKind = "corruption"
+    DAMAGE_ARCANE       DamageKind = "arcane"
+    DAMAGE_HEAL         DamageKind = "heal"
+    DAMAGE_REPAIR       DamageKind = "repair"
+)
+    
+    
+
+
+
+type ItemKind string
+
+const (
+    ITEM_MEDICINE   ItemKind = "medicine"
+    
+    ITEM_CAP        ItemKind = "cap"
+    ITEM_RIBBON     ItemKind = "ribbon"    
+    ITEM_HAT        ItemKind = "hat"
+    ITEM_SCARF      ItemKind = "scarf"
+    ITEM_CIRCLET    ItemKind = "circlet"
+    ITEM_HEADGEAR   ItemKind = "headgear"
+    ITEM_CROWN      ItemKind = "crown"
+    ITEM_HELMET     ItemKind = "helmet"
+    
+    ITEM_CAPE       ItemKind = "cape"
+    ITEM_COAT       ItemKind = "coat"
+    ITEM_ROBE       ItemKind = "robe"
+    ITEM_VEST       ItemKind = "vest"
+    ITEM_CHEST      ItemKind = "chest"
+    ITEM_SUIT       ItemKind = "suit"
+    ITEM_ARMOR      ItemKind = "armor"
+
+    ITEM_SANDAL     ItemKind = "sandal"
+    ITEM_SHOE       ItemKind = "shoe"
+    ITEM_BOOT       ItemKind = "boot"
+    
+
+ 
+ //not sure...   
+    ITEM_PANTS      ItemKind = "pants"
+    ITEM_SKIRT      ItemKind = "skirt"
+    ITEM_GREAVES    ItemKind = "greaves"  
+    ITEM_RING       ItemKind = "ring"
+    ITEM_BRACELET   ItemKind = "bracelet"
+    ITEM_ARMLET     ItemKind = "armlet"
+    ITEM_SLEEVE     ItemKind = "sleeve"
+    ITEM_PAULDRON   ItemKind = "pauldron"
+    ITEM_GAUNTLET   ItemKind = "gauntlet"
+    ITEM_NECKLACE   ItemKind = "necklace"
+    ITEM_EARRING    ItemKind = "earring"
+    ITEM_LAMP       ItemKind = "lamp"
+    ITEM_FLASHLIGHT ItemKind = "flashlight"
+  // sure again
+   
+    ITEM_SWORD      ItemKind = "sword"
+    ITEM_TWOHANDER  ItemKind = "twohander"
+    ITEM_KNIFE      ItemKind = "knife"
+    ITEM_DAGGER     ItemKind = "dagger"
+    ITEM_GLOVE      ItemKind = "glove"
+    ITEM_CLAW       ItemKind = "claw"
+    ITEM_WAND       ItemKind = "wand"
+    ITEM_STAFF      ItemKind = "staff"
+    ITEM_FOCUS      ItemKind = "focus"
+    
+    // Not sure if these will be implemented.
+    
+    ITEM_AXE        ItemKind = "axe"
+    ITEM_MAUL       ItemKind = "maul"
+    ITEM_SPEAR      ItemKind = "spear"
+    ITEM_NAGINATA   ItemKind = "naginata"
+    ITEM_BOW        ItemKind = "bow"
+    ITEM_CROSSBOW   ItemKind = "crossbow"
+    ITEM_ARROW      ItemKind = "arrow"
+    ITEM_BOLT       ItemKind = "bolt"
+
+    // But these below are planned.
+    
+    ITEM_NEEDLER    ItemKind = "needler"
+    ITEM_HANDGUN    ItemKind = "handgun"
+    ITEM_LASERGUN   ItemKind = "lasergun"
+    ITEM_MACHINEGUN ItemKind = "machinegun"
+    ITEM_CANNON     ItemKind = "cannon"
+    ITEM_BAZOOKA    ItemKind = "bazooka"
+    
+    ITEM_NEEDLE     ItemKind = "needle"
+    ITEM_BULLET     ItemKind = "bullet"
+    ITEM_CELL       ItemKind = "cell"
+    ITEM_ROCKET     ItemKind = "rocket"
+    
+    ITEM_EXPLOSIVE  ItemKind = "explosive"
+    ITEM_GRENADE    ItemKind = "grenade"
+    ITEM_REPAIR     ItemKind = "repair"
+    ITEM_ORE        ItemKind = "ore"
+    ITEM_INGOT      ItemKind = "ingot"
+    ITEM_METAL      ItemKind = "metal"
+    ITEM_PLANT      ItemKind = "plant"
+    ITEM_FRUIT      ItemKind = "fruit"
+    ITEM_WOOD       ItemKind = "wood"
+    ITEM_FOOD       ItemKind = "food"
+    ITEM_TRAP       ItemKind = "trap"
+    ITEM_HANDCUFFS  ItemKind = "handcuffs"
+    ITEM_CHEMICAL   ItemKind = "chemical"
+    ITEM_FISH       ItemKind = "fish"
+    ITEM_MEAT       ItemKind = "meat"
+    ITEM_HIDE       ItemKind = "hide"
+    ITEM_LEATHER    ItemKind = "leather"
+    ITEM_FIBER      ItemKind = "fiber"
+    ITEM_CLOTH      ItemKind = "cloth"
+    ITEM_CERAMIC    ItemKind = "ceramic"
+    ITEM_POLYMER    ItemKind = "polymer"
+    
+    // android parts
+    // AGI, STR, CHA 
+    ITEM_LEGPARTS   ItemKind = "legparts"
+    // DEX, STR, CHA
+    ITEM_ARMPARTS   ItemKind = "armparts"
+    // TOU, CHA
+    ITEM_BODYPARTS  ItemKind = "bodyparts"
+    // INT, WIS, CHA
+    ITEM_HEADPARTS  ItemKind = "headparts"
+    
+    
+    ITEM_           ItemKind = ""
+)
+
+type EquipWhere string
+
+const (
+    EQUIP_NONE      EquipWhere = "none"
+    EQUIP_HEAD      EquipWhere = "head"
+    EQUIP_TORSO     EquipWhere = "torso"
+    EQUIP_OFFHAND   EquipWhere = "offhand"
+    EQUIP_DOMINANT  EquipWhere = "dominant"
+    EQUIP_AMMO      EquipWhere = "ammo"    
+    EQUIP_FEET      EquipWhere = "feet"
+    EQUIP_FOCUS     EquipWhere = "focus"
+    EQUIP_PHONE     EquipWhere = "phone"
+    
+    EQUIP_GLOVES    EquipWhere = "gloves"
+    EQUIP_NECK      EquipWhere = "neck"
+    EQUIP_LEGS      EquipWhere = "legs"
+    EQUIP_ARMS      EquipWhere = "arms"
+    EQUIP_RIGHTRING EquipWhere = "rightring"
+    EQUIP_LEFTRING  EquipWhere = "leftring"
+    EQUIP_LIGHT     EquipWhere = "light"
+    EQUIP_          EquipWhere = ""    
+)
+
 type Item struct {
     Entity
-    Quality     int
-    Price       int
-    Type        int
-    Equippable  int
+    Quality       int
+    Price         int
+    Kind          ItemKind
+    Damage        DamageKind
+    // equipment location,  "none" if not equippable
+    Equippable    EquipWhere
+    // Level of crafing skill needed to craft this, or of harvesting skill to harvest this, 
+    // or of mining skill to mine this. Negative if cannot be crafted nor harvested, nor mined.    
+    Level         int
+    // Id's of ingredients to craft this item. Empty if it cannot be crafted.
+    Ingredients []ID
+    // Id of item this item can be upgraded/enhanced to. empty or "none" if cannot be upgraded.
+    Upgrade       ID
+    // ID of item this item can degrade into. empty or "none" if cannot be degraded.
+    Degrade       ID
+    // ID of technique/art/item to craft this item teaches when used, empty or none if it teaches nothing.
+    // If it'ss a skill, the XP of teaching is determine by the Quality of the item.   
+    Teaches       ID
 }
 
 type ItemPointer struct {

+ 266 - 5
src/woe/world/skill.go

@@ -1,17 +1,278 @@
 package world
 
+const (
+    TALENT_NONE ID = "TALENT_NONE"
+    TALENT_STR  ID = "STR"
+    TALENT_TOU  ID = "TOU"
+    TALENT_AGI  ID = "AGI"
+    TALENT_DEX  ID = "DEX"
+    TALENT_INT  ID = "INT"
+    TALENT_WIS  ID = "WIS"
+    TALENT_CHA  ID = "CHA"
+    TALENT_EMO  ID = "EMO"
+)
+    
+
 type Skill struct {
     Entity
-    Kind              int
-    
-    derived           func (m * Being)  int 
-    talent          * int 
+    Kind              ID
+    Talent            ID
+    derived           func (m * Being)  int
 }
 
 type BeingSkill struct {
     being       * Being
-    technique   * Skill
+    skill       * Skill
+    talent      * int
+    Experience    int
+    Next          int
+    Level         int
+}
+
+type JobSkill struct {
     Experience    int
     Level         int
+    
+    
+}
+
+/* Requires Arts to be useful:
+ * Arcane Tone Moon Sun Tree Flame Snow Bolt Omen
+ * 
+ * Requires techniques to be useful: 
+ * Rage, Sleight, Robotech, Stealth, Medical, 
+ * 
+ * Don't strictly need techniques but they are desirable:
+ * Shield, Lore, Hacking, Barter, Social, Bravery, Survival, Knife, Acrobatics, Travelling, Science, Engineering
+ * 
+ * Optionally could use some techniques:
+ * Sword, Cannon, Fist, Mauls, Toiling,  Gun, Polearm,  Explosives, 
+ * 
+ * Other's don't really require techniques. These are armor wearing skills, 
+ * and crafting skills (crafting info is stored in the item info in stead of in a technique).
+ * 
+ */
+
+
+var SkillList = []Skill {
+    { Entity : Entity { ID: "skill_sword", Name: "Sword", 
+      Short: "Fighting with swords and katanas.", },
+      Talent : TALENT_STR,
+    },
+    { Entity : Entity { ID: "skill_cannon", Name: "Cannon", 
+      Short: "Use and shooting of cannons, launchers and bazookas", },
+      Talent : TALENT_STR,
+    },
+    { Entity : Entity { ID: "skill_medium_gear", Name: "Medium Gear", 
+      Short: "Use of medium gear such as vests, gear and shoes.", },  
+      Talent : TALENT_STR,
+    },
+    { Entity : Entity { ID: "skill_weaponsmith", Name: "Weaponsmith", 
+      Short: "Crafting of hand to hand style weapons.", },  
+      Talent : TALENT_STR,
+    },
+    { Entity : Entity { ID: "skill_mining", Name: "Mining", 
+      Short: "Mining of minerals.", },  
+      Talent : TALENT_STR,
+    },
+    { Entity : Entity { ID: "skill_rage", Name: "Rage",
+      Short: "Techniques of beasts.", },
+      Talent : TALENT_STR,
+    },
+ 
+
+    { Entity : Entity { ID: "skill_fist", Name: "Fist", 
+      Short: "Martial arts and unarmed fighting, use of gloves.", },
+      Talent : TALENT_TOU,
+    },
+    { Entity : Entity { ID: "skill_mauls", Name: "Mauls", 
+      Short: "Fighting with heavy meelee weapons such as axes and hammers", },
+      Talent : TALENT_TOU,
+    },
+    { Entity : Entity { ID: "skill_heavy_gear", Name: "Heavy Gear", 
+      Short: "Use of heavy gear such as armor suits, helmets and boots.", },  
+      Talent : TALENT_TOU,
+    },
+    { Entity : Entity { ID: "skill_armorer", Name: "Armorer", 
+      Short: "Crafing of heavy equipment and armor.", },
+      Talent : TALENT_TOU,
+    },
+    { Entity : Entity { ID: "skill_toiling", Name: "Toiling", 
+      Short: "Physical exertion and carrying heavy loads.", },
+      Talent : TALENT_TOU,
+    },    
+    { Entity : Entity { ID: "skill_survival", Name: "Survival", 
+      Short: "Fishing and hunting skills, recovering biological ingredients.", },
+      Talent : TALENT_TOU,
+    },
+
+
+    { Entity : Entity { ID: "skill_knife", Name: "Knife",
+      Short: "Fighting with knives, daggers.", },
+      Talent : TALENT_DEX,
+    },
+    { Entity : Entity { ID: "skill_sleight", Name: "Sleight", 
+      Short: "Disarming of traps, picking of locks and pickpocketing from beasts.", },
+      Talent : TALENT_DEX,
+    },
+    { Entity : Entity { ID: "skill_gun", Name: "Gun", 
+      Short: "Use and shooting of guns and bowguns", },
+      Talent : TALENT_DEX,
+    },
+    { Entity : Entity { ID: "skill_gunsmith", Name: "Gunsmith", 
+      Short: "Crafting of guns , cannons and other ranged weapons.", },
+      Talent : TALENT_DEX,
+    },
+    { Entity : Entity { ID: "skill_outfitter", Name: "Outfitter", 
+      Short: "Crafting of medium weight equipment.", },
+      Talent : TALENT_DEX,
+    },
+    { Entity : Entity { ID: "skill_robotic", Name: "Robotic", 
+      Short: "Special techniques of robots and androids.", },
+      Talent : TALENT_DEX,
+    },
+
+
+
+    { Entity : Entity { ID: "skill_polearm", Name: "Polearm", 
+      Short: "Fighting with pole arms such as spears, lances and naginatas.", },
+      Talent : TALENT_AGI,
+    },
+
+    { Entity : Entity { ID: "skill_shield", Name: "Shield",
+      Short: "Use of bucklers and shields and shield relates techniques.", },  
+      Talent : TALENT_AGI,
+    },
+    { Entity : Entity { ID: "skill_light_gear", Name: "Light Gear", 
+      Short: "Use of light gear such as robes, caps and sandals.", },
+      Talent : TALENT_AGI,
+    },
+    { Entity : Entity { ID: "skill_acrobatics", Name: "Acrobatics", 
+      Short: "Evading attacks, running away from danger.", },
+      Talent : TALENT_AGI,
+    },
+    { Entity : Entity { ID: "skill_stealth", Name: "Stealth", 
+      Short: "Stealthy movement and suprising opponents.", },
+      Talent : TALENT_AGI,
+    },
+    { Entity : Entity { ID: "skill_traveling", Name: "Traveling", 
+      Short: "Efficient traveling and skills to reduce MP efficiency", },
+      Talent : TALENT_AGI,
+    },
+ 
+ 
+    { Entity : Entity { ID: "skill_explosives", Name: "Explosives", 
+      Short: "Crafting, use and disarming of bombs and explosives.", },
+      Talent : TALENT_INT,
+    },    
+    { Entity : Entity { ID: "skill_science", Name: "Science", 
+      Short: "Crafting of healing items and poisons and using them.", },
+      Talent : TALENT_INT,
+    },
+    { Entity : Entity { ID: "skill_lore", Name: "Lore", 
+      Short: "General and historic knowledge.", },
+      Talent : TALENT_INT,
+    },
+    { Entity : Entity { ID: "skill_medical", Name: "Medical", 
+      Short: "Healing techniques and use of medication.", },
+      Talent : TALENT_INT,
+    },
+    { Entity : Entity { ID: "skill_engineering", Name: "Engineering", 
+      Short: "Crafting of android parts, repair and construction of machines", },
+      Talent : TALENT_INT,
+    },    
+    { Entity : Entity { ID: "skill_hacking", Name: "Hacking", 
+      Short: "Knowledge of computers, boosting of machines", },
+      Talent : TALENT_INT,
+    },
+
+        
+    { Entity : Entity { ID: "skill_barter", Name: "Barter", 
+      Short: "Trading and bribing", },
+      Talent : TALENT_CHA,
+    },
+    { Entity : Entity { ID: "skill_social", Name: "Social", 
+      Short: "Talking to NPC's and convincing them. Supportive group techniques and leadership skills.", },
+      Talent : TALENT_CHA,
+    },
+    { Entity : Entity { ID: "skill_arcane", Name: "Arcane Arts", 
+      Short: "Extraordinary Numen Arts.", },  
+      Talent : TALENT_CHA,
+    },
+    { Entity : Entity { ID: "skill_tone", Name: "Tone Arts", 
+      Short: "Numen arts that control sound and buffing effects.", },  
+      Talent : TALENT_CHA,
+    },
+    { Entity : Entity { ID: "skill_tailor", Name: "Tailor", 
+      Short: "Crafting of light clothes and equipment.", },  
+      Talent : TALENT_CHA,
+    },
+    { Entity : Entity { ID: "skill_cooking", Name: "Cooking",
+      Short: "Crafting of food, for temporary boosts.", },  
+      Talent : TALENT_CHA,
+    },
+
+
+    { Entity : Entity { ID: "skill_earth", Name: "Earth Arts",
+      Short: "Numen arts that control earth and explosive effects.", },  
+      Talent : TALENT_WIS,
+    },
+    { Entity : Entity { ID: "skill_sun", Name: "Sun Arts", 
+      Short: "Numen arts that control light and purification.", },  
+      Talent : TALENT_WIS,
+    },
+    { Entity : Entity { ID: "skill_tree", Name: "Tree Arts", 
+      Short: "Numen arts that control living beings, nature and healing.", },  
+      Talent : TALENT_WIS,
+    },
+    { Entity : Entity { ID: "skill_bravery", Name: "Bravery", 
+      Short: "Courage and mental resistance.", },  
+      Talent : TALENT_WIS,
+    },
+    { Entity : Entity { ID: "skill_jeweler", Name: "Jeweler", 
+      Short: "Crafting of jewels mundane and imbued with Numen.", },  
+      Talent : TALENT_WIS,
+    },
+    { Entity : Entity { ID: "skill_artistic", Name: "Artistic", 
+      Short: "Graphical and plastic arts to craft artworks.", },  
+      Talent : TALENT_WIS,
+    },
+    
+    { Entity : Entity { ID: "skill_staff", Name: "Staff", 
+      Short: "Fighting with staves and wands.", },
+      Talent : TALENT_EMO,
+    },
+    { Entity : Entity { ID: "skill_flame", Name: "Flame Arts", 
+      Short: "Numen arts that control fire and heat.", },  
+      Talent : TALENT_EMO,
+    },
+    { Entity : Entity { ID: "skill_snow", Name: "Snow Arts", 
+      Short: "Numen arts that control water, ice and cold.", },  
+      Talent : TALENT_EMO,
+    },
+    { Entity : Entity { ID: "skill_bolt", Name: "Bolt Arts", 
+      Short: "Numen arts that control electricity, wind and air.", },  
+      Talent : TALENT_EMO,
+    },
+    { Entity : Entity { ID: "skill_numensmith", Name: "Numensmith",
+      Short: "Crafting of wands, rods and other items enhanced with Numen.", },  
+      Talent : TALENT_EMO,
+    },
+    { Entity : Entity { ID: "skill_omen", Name: "Omen Arts",
+      Short: "Arts that use Omen in stead of Numen, by Corrupted beings", },
+      Talent : TALENT_EMO,
+    },
+
+    
 }
 
+
+/*
+ *  Other ideas: 
+ *  ESS, AGI
+ * 
+ *  
+ * Cooking -- Food for various bufffs 
+ * 
+ */
+

+ 186 - 11
src/woe/world/technique.go

@@ -1,13 +1,20 @@
 package world
 
 
+/* Techniques, arts, exploits and and crafts are special or specific abilities 
+ * that fall under a generic skill. Crafts are not stored in a separate 
+ * static list. Rather the crafting requirements are stored in the item list 
+ * which is loaded from disk. Beings then have a list of the ID's of items they 
+ * have learned to craft.
+ */
+ 
 type Technique struct {
     Entity
-    Kind        int
-    Effect      int
+    Kind        ID
+    Effect      ID
     Level       int
     Cost        int
-    SkillID     int
+    Skill       ID
     skill     * Skill
     onUse       func (me * Technique, caster * Being, targets ...*Being) (bool)
 }
@@ -16,26 +23,194 @@ type Technique struct {
 type BeingTechnique struct {
     being       * Being
     technique   * Technique
-    Experience    int
-    Level         int
+    Being         ID
+    Technique     ID
 }
 
 /* An exploit is a special technique that can only be used a few times 
  * per day.
+ * 
+ * Maximum amount of uses (integer math!)
+ * EXPLOIT_RANK = 1 + (EXPLOIT_LEVEL / 10)
+ * Uses.Max = 1 + (SKILL_LEVEL / (10 * EXPLOIT_RANK))
+ * 
  */
-type Exploit struct {
-    // it's a special case of a technique
-    Technique
-}
+type Exploit    Technique
+
 
 type BeingExploit struct {
     being       * Being
     exploit     * Exploit
-    Experience    int
-    Level         int
+    Being         ID
+    Exploit       ID
     // How many times the exploit may be used.
     Uses          Vital
 }
 
 
 
+func CraftCookOmlet(caster * Being, targets ...*Being) bool {
+    return true
+} 
+
+
+/* Generic rage technique performer. */
+func DoRageTechnique(me * Technique, caster * Being, targets ...*Being) bool {    
+    return true
+}
+      
+
+/*
+ * 
+ * Requires techniques to be useful: 
+ * Rage, Sleight, Robotech, Stealth, Medical, 
+ */
+
+
+var TechniqueList = []Technique {
+    /* Rage techiques, need more later */ 
+    { 
+      Skill  : "skill_rage",  
+      Entity : Entity { ID: "tech_bite", Name: "Bite", 
+      Short  : "A beast's bite attack.", },      
+      Effect : "crush",
+      Level  : 1,
+      Cost   : 1,
+      onUse  : func (me * Technique, caster * Being, targets ...*Being) bool {
+            return true
+     }, 
+      
+    },
+    
+    { 
+      Skill  : "skill_rage",  
+      Entity : Entity { ID: "tech_claw", Name: "Claw",
+      Short  : "A beast's claw attack.", },      
+      Effect : "cut",
+      Level  : 1,
+      Cost   : 1,
+    },
+            
+    { 
+      Skill  : "skill_rage",  
+      Entity : Entity { ID: "tech_sting", Name: "Sting",
+      Short  : "A beast's sting attack.", },      
+      Effect : "pierce",
+      Level  : 1,
+      Cost   : 1,
+      onUse  : DoRageTechnique,
+    },
+    
+    { 
+      Skill  : "skill_horn",  
+      Entity : Entity { ID: "tech_sting", Name: "Horn",
+      Short  : "A beast's horn attack.", },      
+      Effect : "pierce",
+      Level  : 1,
+      Cost   : 1,
+    },
+    
+    /* Sleight techniques, need more later  */
+    { 
+      Skill  : "skill_sleight",  
+      Entity : Entity { ID: "tech_distract", Name: "Distract",
+      Short  : "Distract an opponent, makes you likely to steal for one turn.", },
+      Effect : "distract",
+      Level  : 1,
+      Cost   : 20,
+    },
+    
+    { 
+      Skill  : "skill_sleight",  
+      Entity : Entity { ID: "tech_steal", Name: "Steal",
+      Short  : "Attempt to steal an item from an opponent.", },
+      Effect : "steal",
+      Level  : 1,
+      Cost   : 10,
+    },
+    
+    /* Robotic techniques need more later. */
+    { 
+      Skill  : "skill_robotic",  
+      Entity : Entity { ID: "tech_spark", Name: "Spark",
+      Short  : "Minor shock damage to one opponent", },
+      Effect : "shock",
+      Level  : 1,
+      Cost   : 10,
+    },
+    
+    { 
+      Skill  : "skill_robotic",  
+      Entity : Entity { ID: "tech_drill", Name: "Drill",
+      Short  : "Minor piercing damage to one opponent", },
+      Effect : "pierce",
+      Level  : 1,
+      Cost   : 10,
+    },
+    
+    { 
+      Skill  : "skill_robotic",  
+      Entity : Entity { ID: "tech_saw", Name: "Saw",
+      Short  : "Minor cutting damage to one opponent", },
+      Effect : "cut",
+      Level  : 1,
+      Cost   : 10,
+    },
+    
+    { 
+      Skill  : "skill_robotic",  
+      Entity : Entity { ID: "tech_stomp", Name: "Stomp",
+      Short  : "Minor crushing damage to one opponent", },
+      Effect : "crush",
+      Level  : 1,
+      Cost   : 10,
+    },
+    
+    /* Stealth skills */    
+    { 
+      Skill  : "skill_stealth",  
+      Entity : Entity { ID: "tech_tiptoe", Name: "Tiptoe",
+      Short  : "Walk more silently for a short time", },
+      Effect : "stealth",
+      Level  : 1,
+      Cost   : 20,
+    },
+
+    { 
+      Skill  : "skill_stealth",  
+      Entity : Entity { ID: "tech_hide", Name: "Hide",
+      Short  : "Attempt to hide, giving you a chance to ambush your opponent.", },
+      Effect : "hide",
+      Level  : 1,
+      Cost   : 40,
+    },
+    
+    /* Medical skills */
+    { 
+      Skill  : "skill_medical",  
+      Entity : Entity { ID: "tech_diagnose", Name: "Diagnose",
+      Short  : "Get detailed infomation on the status of one being.", },
+      Effect : "diagnose",
+      Level  : 1,
+      Cost   : 20,
+    },
+    
+    { 
+      Skill  : "skill_medical",
+      Entity : Entity { ID: "tech_first_aid", Name: "First Aid",
+      Short  : "Slightly heals HP, restores one LP of one being.", },
+      Effect : "heal",
+      Level  : 1,
+      Cost   : 20,
+    },
+    
+}
+
+
+
+
+
+
+
+
+

+ 11 - 11
src/woe/world/world.go

@@ -25,8 +25,8 @@ type World struct {
     
     /* Skills, etc that exist in this world */
     genders         map[ID] *Gender    
-    species         map[ID] *BeingKind
-    professions     map[ID] *Profession
+    kins            map[ID] *Kin
+    professions     map[ID] *Job
     skills          map[ID] *Skill
     arts            map[ID] *Art
     techniques      map[ID] *Technique
@@ -34,8 +34,8 @@ type World struct {
     
     /* Botha array and map are needed for serialization. */
     Genders         [] Gender
-    Species         [] BeingKind
-    Professions     [] Profession
+    Kins            [] Kin
+    Jobs     [] Job
     Skills          [] Skill
     Arts            [] Art
     Techniques      [] Technique
@@ -45,14 +45,14 @@ type World struct {
 
 
 
-func (me * World) AddBeingKind(toadd * BeingKind) {
-    me.species[toadd.ID] = toadd
-    me.Species = append(me.Species, *toadd)
+func (me * World) AddKin(toadd * Kin) {
+    me.kins[toadd.ID] = toadd
+    me.Kins = append(me.Kins, *toadd)
 }
 
-func (me * World) AddProfession(toadd * Profession) {
+func (me * World) AddJob(toadd * Job) {
     me.professions[toadd.ID] = toadd
-    me.Professions = append(me.Professions, *toadd)
+    me.Jobs = append(me.Jobs, *toadd)
 }
 
 func (me * World) AddSkill(toadd * Skill) {
@@ -90,7 +90,7 @@ func NewWorld(name string, motd string) (*World) {
     world := new(World)
     world.Name = name
     world.MOTD = motd
-    world.species = make(map[ID] *BeingKind)
+    world.kins = make(map[ID] *Kin)
     
     world.AddWoeDefaults()
     return world;
@@ -129,7 +129,7 @@ func (me * World) Save(dirname string) (err error) {
 }
 
 func (me * World) onLoad() {
-    for _, v := range me.Species {me.species[v.ID] = &v }
+    for _, v := range me.Kins {me.kins[v.ID] = &v }
 }
 
 func LoadWorld(dirname string, name string) (result *World, err error) {

+ 46 - 65
woe.geany

@@ -23,71 +23,52 @@ long_line_behaviour=1
 long_line_column=80
 
 [files]
-current_page=11
-FILE_NAME_0=11178;C;0;EUTF-8;0;1;0;%2Fusr%2Flocal%2Finclude%2Fmruby.h;0;4
-FILE_NAME_1=8011;C;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Flibtelnet%2Futil%2Ftelnet-chatd.c;0;4
-FILE_NAME_2=697;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2FTupfile;0;4
-FILE_NAME_3=235;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmain.rb;0;2
-FILE_NAME_4=623;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fsecurity.rb;0;2
-FILE_NAME_5=1301;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fserdes.rb;0;2
-FILE_NAME_6=521;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Ftry.sitef;0;4
-FILE_NAME_7=348;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Faccount.rb;0;2
-FILE_NAME_8=99;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fserver%2Fserver.go;0;4
-FILE_NAME_9=158;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fserver%2Fclient.go;0;4
-FILE_NAME_10=2274;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Ftelnet%2Fcodes.go;0;4
-FILE_NAME_11=2718;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Ftelnet%2Ftelnet.go;0;4
-FILE_NAME_12=51;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Ftelnet%2Frfc1143.go;0;4
-FILE_NAME_13=317;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fwoe.go;0;4
-FILE_NAME_14=1249;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fmonolog%2Fmonolog.go;0;4
-FILE_NAME_15=295;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fbin%2Ft_month_report;0;2
-FILE_NAME_16=3275;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fsitef.rb;0;2
-FILE_NAME_17=152;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmotd.rb;0;2
-FILE_NAME_18=35;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Faccount%2FD%2FDyon%2FDyon.account;0;4
-FILE_NAME_19=40;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Faccount%2FB%2FBeoran%2FBeoran.account;0;4
-FILE_NAME_20=29;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Faccount%2Fa%2Faxl%2Faxl.account;0;4
-FILE_NAME_21=18;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Fmotd;0;4
-FILE_NAME_22=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fcharacter.rb;0;2
-FILE_NAME_23=137;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Flog.rb;0;2
-FILE_NAME_24=382;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fclient.rb;0;2
-FILE_NAME_25=245;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmode.rb;0;2
-FILE_NAME_26=414;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmode%2Fcharacter.rb;0;2
-FILE_NAME_27=669;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmode%2Fsetup.rb;0;2
-FILE_NAME_28=6413;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Farch%2Fdl%2Fmud%2Frelease%2Ftmud-3.0.0%2Ftclient.rb;0;2
-FILE_NAME_29=2622;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Farch%2Fdl%2Fmud%2Frelease%2Ftmud-3.0.0%2Fconfig.yaml;0;4
-FILE_NAME_30=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmode%2Fnormal.rb;0;2
-FILE_NAME_31=814;Sh;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fwork%2Febp2git%2Febp_make_all_gitignores;0;4
-FILE_NAME_32=5662;Sh;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fwork%2Febp2git%2Febp_make_gitignore;0;4
-FILE_NAME_33=1452;None;0;EUTF-8;0;1;0;%2Fusers%2Fnmbs_ebp%2Fr17%2F.gitignore;0;4
-FILE_NAME_34=3659;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fmonolog.rb;0;2
-FILE_NAME_35=4541;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fsitef.rb;0;2
-FILE_NAME_36=186;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2FREADME;0;4
-FILE_NAME_37=3171;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Ftelnet%2Fcodes.rb;0;2
-FILE_NAME_38=1223;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fserdes.rb;0;2
-FILE_NAME_39=1;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_serdes.rb;0;2
-FILE_NAME_40=1389;C;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Flibtelnet%2Flibtelnet.c;0;4
-FILE_NAME_41=11028;C;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Flibtelnet%2Flibtelnet.h;0;4
-FILE_NAME_42=2505;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fwork%2Fatw%2Fscrapeme%2Fatw_logs_scraper.rb;0;2
-FILE_NAME_43=319;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Faccount.rb;0;2
-FILE_NAME_44=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fansi.rb;0;2
-FILE_NAME_45=11942;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fclient.rb;0;2
-FILE_NAME_46=1187;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fbeing.rb;0;2
-FILE_NAME_47=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fcharacter.rb;0;2
-FILE_NAME_48=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fmobile.rb;0;2
-FILE_NAME_49=10;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fserver.rb;0;2
-FILE_NAME_50=2724;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fcserver.rb;0;2
-FILE_NAME_51=923;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Ffserver.rb;0;2
-FILE_NAME_52=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_monolog.rb;0;2
-FILE_NAME_53=722;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Fwoe%2Ftest_settings.rb;0;2
-FILE_NAME_54=366;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Fwoe%2Fsettings.rb;0;2
-FILE_NAME_55=558;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_sitef.rb;0;2
-FILE_NAME_56=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_rfc1143.rb;0;2
-FILE_NAME_57=319;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_telnet.rb;0;2
-FILE_NAME_58=3497;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Ftelnet.rb;0;2
-FILE_NAME_59=6705;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Flib%2Frfc1143.rb;0;2
-FILE_NAME_60=90;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Fwoe%2Ftest_server.rb;0;2
-FILE_NAME_61=11;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fatto%2Flib%2Fatto%2Frun.rb;0;2
-FILE_NAME_62=1597;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fatto%2Flib%2Fatto%2Ftest.rb;0;2
-FILE_NAME_63=7;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fbin%2Fwoe;0;2
+current_page=20
+FILE_NAME_0=235;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmain.rb;0;2
+FILE_NAME_1=1301;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fserdes.rb;0;2
+FILE_NAME_2=521;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Ftry.sitef;0;4
+FILE_NAME_3=348;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Faccount.rb;0;2
+FILE_NAME_4=99;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fserver%2Fserver.go;0;4
+FILE_NAME_5=158;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fserver%2Fclient.go;0;4
+FILE_NAME_6=2274;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Ftelnet%2Fcodes.go;0;4
+FILE_NAME_7=2718;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Ftelnet%2Ftelnet.go;0;4
+FILE_NAME_8=51;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Ftelnet%2Frfc1143.go;0;4
+FILE_NAME_9=317;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fwoe.go;0;4
+FILE_NAME_10=1249;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fmonolog%2Fmonolog.go;0;4
+FILE_NAME_11=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Faccount.go;0;4
+FILE_NAME_12=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fart.go;0;4
+FILE_NAME_13=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fbeing.go;0;4
+FILE_NAME_14=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fcharacter.go;0;4
+FILE_NAME_15=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fentity.go;0;4
+FILE_NAME_16=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Finventory.go;0;4
+FILE_NAME_17=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fitem.go;0;4
+FILE_NAME_18=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fmobile.go;0;4
+FILE_NAME_19=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Froom.go;0;4
+FILE_NAME_20=5576;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fskill.go;0;4
+FILE_NAME_21=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Ftechnique.go;0;4
+FILE_NAME_22=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fworld.go;0;4
+FILE_NAME_23=0;Go;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fsrc%2Fwoe%2Fworld%2Fzone.go;0;4
+FILE_NAME_24=295;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fbin%2Ft_month_report;0;2
+FILE_NAME_25=3275;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fsitef.rb;0;2
+FILE_NAME_26=152;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmotd.rb;0;2
+FILE_NAME_27=35;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Faccount%2FD%2FDyon%2FDyon.account;0;4
+FILE_NAME_28=40;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Faccount%2FB%2FBeoran%2FBeoran.account;0;4
+FILE_NAME_29=29;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Faccount%2Fa%2Faxl%2Faxl.account;0;4
+FILE_NAME_30=18;None;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fvar%2Fmotd;0;4
+FILE_NAME_31=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fcharacter.rb;0;2
+FILE_NAME_32=137;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Flog.rb;0;2
+FILE_NAME_33=382;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fclient.rb;0;2
+FILE_NAME_34=245;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Fdata%2Fscript%2Fmode.rb;0;2
+FILE_NAME_35=6413;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Farch%2Fdl%2Fmud%2Frelease%2Ftmud-3.0.0%2Ftclient.rb;0;2
+FILE_NAME_36=2622;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Farch%2Fdl%2Fmud%2Frelease%2Ftmud-3.0.0%2Fconfig.yaml;0;4
+FILE_NAME_37=1;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_serdes.rb;0;2
+FILE_NAME_38=2505;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fwork%2Fatw%2Fscrapeme%2Fatw_logs_scraper.rb;0;2
+FILE_NAME_39=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_monolog.rb;0;2
+FILE_NAME_40=722;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Fwoe%2Ftest_settings.rb;0;2
+FILE_NAME_41=558;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_sitef.rb;0;2
+FILE_NAME_42=0;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_rfc1143.rb;0;2
+FILE_NAME_43=319;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Ftest_telnet.rb;0;2
+FILE_NAME_44=90;Ruby;0;EUTF-8;0;1;0;%2Fhome%2Fbjorn%2Fsrc%2Fwoe%2Ftest%2Fwoe%2Ftest_server.rb;0;2
 
 [VTE]
 last_dir=/home/bjorn/src/woe