Talos Mud Development Blog

One mans quest to blog about Mud Development

GateWay Event: Search for the Jade Monkey

leave a comment »

Players on a game I admin, GateWay have asked that I run some events on a timed schedule to give them something to do and to encourage other players to log in at the same time.  So being the only active admin on the game and only having access to the world directory for the Orient Domain, I’ve decided to run an Event I will call: Search for the Jade Monkey.

I’ve experience in running table top games.  Long wild campaigns that span hours at a time and years in length.  But all the tools are at my finger tips (Dice, paper, and pencil), and planning amounts to little more then wild thoughts, and a notebook (or 10).  But the amount of depth that has gone into the development of my areas, and Holiday Parties on the game are not something that bodes well for this event.  The game is so ancient and lacking in tools to facilitate roleplaying that I have to do more pre-planning and code development.

I’ve also had lots of experience reading my players and knowing how to guide them and anticipate where they are going with the story.  I don’t know the playing style of these new players and am not sure how well they will follow the scripted storyline or where I need them to go. I am anxious about it.

Written by Troy

February 22, 2010 at 9:55 pm

Posted in Development

Tagged with ,

Social Combat (Update)

leave a comment »

It’s interesting how quickly a thought can be flipped on it’s head. In trying to balance a fine line between player free will and a scripted believable social combat mechanism, the conversation has taken a very interesting course.

Somehow the conversation got turned to emotional hitpoints. So with a list of Emotions, you can begin with a pool of emotion hitpoints and you assign them as you wish to outline the emotional status of your character. If you want a fearless fighter, he might just have 10 Fear Hitpoints, and 0 Purity Hitpoints or he could be more balanced. Whatever the system pans out to be, the breakthrough really comes from the concept of a developing a hit location system for social combat.

Tonitrus asked, “Could you have emotional armor? Or emotional Weapons?” The Answer of course is YES! What are they? I don’t really know.

Well, I actually do have some vague outline’ish type ideas on how they could work… Emotional Armor… It’s not really Armor, it’s more events that provide you with Damage Reduction to a Specific Emotion. An Example of play:

Your mudwife kisses you (+2 DR to Happiness Attacks)
Bubba, your boss, yells at you for doing bad job.
(Happiness Attack!)
(Bubba recieves +1 to his Social Attacks against you, because of his Social Standing vs You, [He’s your BOSS!])
Bubba seems furious.
(Bubba’s Anger Level gives him +2 to attack)
You are stressed.
(-1 Emotional Defense)
(Happiness is affected by 4 Points of damage)
Your Wifes’ kiss reminds you of good times.
(Damage Reduced to 2 points)

There’s all kinds of interesting ‘armors’ that you can provide examples for. Weapons I am still fuzzy on. Of course built correctly this system could be huge in a game where there are a lot of players interacting with each other at the same time and would make an interesting experiment.

Written by Troy

February 21, 2010 at 1:53 am

Consensual social combat

leave a comment »

Over at http://www.mudlab.org last night I proposed a method of consensual PvP Social Combat that lets players really customize their responses to attacks.

It works like a survey.  You have five options:
Disregard (Ignore the Attack)
Strongly Disagree (Fully Reverse the Attack)
Disagree (Partially Reverse the Attack)
Agree (Partially Accept the Attack)
Strongly Agree (Fully Accept the Attack)

My core development value on social combat is the fact that in no way do we allow griefers to take away player’s free will to play their characters the way that they want too.  Since there is a large complexity to translating emotions to stats that can be affected without removing that sacred free will.  This is not a problem when it comes to PvE and social combat with NPC’s. Each skill will have two resolution systems that need to be determined.  The first and most important is the PvP Resolution.  Each Combat skill has four player responses which allows the attacked to determine how it affects them.  The second resolution system is PvE.  Which will need to evaluate the emotional state of the NPC and determine the NPC’s response.  The PvE response will be the most complicated system to develop as it the writer of the skill needs to progmattically determine what emotional state the NPC needs to be in for the skill to affect them. 

Let’s start with an example:

Bubba is a bard who wants to tell a scary story that he learned to have Bobby be afraid of him:

Bubba begins a story called, Scary Night [Fear Affect]

“Night fell upon … ”

Select Response: Disregard (Ignore), Strongly Disagree (Become Friendly), Disagree (Increase Relationship), Agree (Gain Shaken Response to Bubba), Strongly Agree (Become afraid of Bubba)

>Agree

Bobby is slightly shaken by Bubba’s story.

Simple enough, now we have allowed Bobby to determine if his attitude and emotional state is in the same direction that Bubba is trying to force it too.  Perhaps Bobby enjoys Scary Stories, or maybe Bubba is telling the story during brunch with Bobby.  And Bobby finds it amusing. Or again Bubba may be telling it at night around a spooky campfire.  These are things that make it progmattically difficult to force a response from another player, and even if it did, it would revoke player free will.

PvE example: anything in [] is going to be proto-code to highlight what is going on behind the scenes.  Bubba is trying to scare Nancy away so that he can get past the receptionist.

Office.

Nancy the NPC is sitting behind the desk, blocking access to her bosses office.

>Orate Scary Night to Nancy

You begin telling Nancy the Scary Night Story.

[Poll Emotional Axis: from -10 to +10

Lust/Repulsion:  – 1

Anger/Affection: 0

Confidence/Fear: +1

Guilt/Comfort: 0

Corruption/Purity: 0]

(Nancy is in a pretty blah emotional state, she can be scared, and she can be seduced)

[Poll Knowledge and Responses to Bubba:

Nancy’s reputation + Nancy’s Prestige = Nancy’s Response Modifier

Bubba’s reputation + Bubba’s Prestige + Bubba’s Fame = Bubba’s Influence Modifier

Compare Faction Allegiances]

[-Fear/Courage Axis * 1/Nancy’s Response Modifier] + die Roll vs [Scary Night Skill * (Bubba’s Influence modifier/100) + die Roll + Faction Difference.

then the system evokes the appropriate response.

 There is the possibility for Attack/Defense combo’s that would mimic physical combat, but that’s another thought process that would have to be gone down later.

Written by Troy

February 18, 2010 at 9:33 am

Posted in Design, Social Combat

Physical.c (cont…)

leave a comment »

Okay so so far here’s the prototypes’s for physical.c, I won’t go into the code but a listing of the calls is a good thing too:

int SetEyeColor(string color);
int SetOrigHairColor(string color);
int SetHairColor(string color);
int SetOrigBuild(int build);
int SetHeight(int height);
int SetWeight(int weight);
int IncreaseHeight(int height);
int DecreaseHeight(int height);
int IncreaseWeight(int weight);
int DecreaseWeight(int weight);
string GetEyeColor();
string GetHairColor();
string GetOrigHairColor();
int GetHeight();
int GetWeight();
string GetDescBuild(int build);
string GetDescOrigBuild(int build);

Written by Troy

February 6, 2010 at 8:38 am

Character Physical Stats

leave a comment »

I’ve put aside the Weather System for a couple of days as I try to figure out all the intricacies in actually displaying the information. And Have begun working on physical.c which will be included in base.c (maybe player.c, I’ll have to check the inheritance tree!). My aim here is to allow players and wizards to set the ht, wt, hair color, build, eye color, and other physical non-combat/skill related stats that I want available.

I’ve built it specifically so that we can open up such fun things as food having nutirional values so that you can get fat or thin, you can have potions or magic that increases or decreases your size, areas that only allow certain heights to walk through with out being hampered. You will also be able to dye your hair, or shave your hair, etc….

I have hardcoded some intial ht/wt limits which won’t let a certain race start off as beyond a certain range, but I’ll have to take a look at the RACES_D and see if I can integrate it there, but that would make it a compat busters, and I was the one who hacked the 2.1.13r RACES_D for Craty and busted everyones compat, but made it much more dynamic.

Of course with the physical descriptions set up we get a step closer to having dynamic Descriptions for our players and npc’s.

Written by Troy

February 5, 2010 at 8:43 am

Weather System

leave a comment »

I’ve often come back to making a weather system because I really believe that a highly integrated well developed weather system adds a huge amount of immersion in the game, and really helps set the ‘mood’ of the game.

So in 2.1.18 of DS I rewrote the SEASON_D and added rain and wind, but it was just there. So I’ve spent the last day or two breaking down the system and really taking an indepth look at the way that the system works. I decided to break it out a little more and develop independent Daemons for each part of the whole.

PERCIPITATION_D obviously controls all of the Percipitation and the transitions between each stage. But it does not determine what is being Percipitated. It simply says we need to percipitate.

WIND_D, can’t get much simpler then this little Daemon. How strongly is the wind blowing and what direction is the wind blowing in. Since we’ve broken this out it can be used for a lot of other things! Like a Hot Air Balloon which is blown about by the wind!

TEMPERATURE_D simply just tracks the temp according to the day and season.

Written by Troy

January 19, 2010 at 10:09 pm

SEASON_D Changes

leave a comment »

Well I am still converting my old 2.1.18 code to 3.0 and had to start hacking on the SEASONS_D

I’ve added the following time Sections: Evening, Afternoon and I had to put the weather changes aside until I have more time.  To fix an issue that I had with one of my NPC’s I had to add some sefuns:

int query_noon()  { return (SEASONS_D->GetTimeOfDay() == “noon”); }
int query_afternoon(){return (SEASONS_D->GetTimeOfDay() == “afternoon”); }
int query_evening() { return (SEASONS_D->GetTimeOfDay() == “evening”); }
int query_dawn()   { return (SEASONS_D->GetTimeOfDay() == “dawn”); }
int query_morning() { return (SEASONS_D->GetTimeOfDay() == “morning”); }
int query_twilight(){ return (SEASONS_D->GetTimeOfDay() == “twilight”); }
int query_night()  { return (SEASONS_D->GetTimeOfDay() == “night”); }
int query_midnight(){ return (SEASONS_D->GetTimeOfDay() == “midnight”) ; }

Written by Troy

January 18, 2010 at 8:55 am

Old Code Converted To 3.0

leave a comment »

So I imported my old domain from 2.1.18 all the way up to the current 3.0, but man there are some crazy little changes that occured.  Like new verbs that upset the addactions that I had coded up.  Here’s what I learned:

create an object that uses this code:

environment(this_player())->addaction_function();

OLD CODE: stage.c

static void create() {
    room::create();
    SetClimate(“indoors”);
    SetAmbientLight(30);
    SetTown(“Talos”);
    SetShort(“White Dove Inn – Performers Stage”);
    SetLong( (: LongDesc :) );
    SetExits( ([
 “east” : “/domains/talos/whitedoveinn/room/dancefloor2.c”
      ]) );
    SetItems( ([
       : “A pull rope to open and close the curtains.”
      ]) );

     add_action(“pull_rope”,”pull”);
}

 

New Code: stage.c

 SetInventory(([
  WDI_OBJ”stage_rope.c”: 1,
 ]) );

 

New Code: stage_rope.c

#include <lib.h>
#include “../whitedoveinn.h”

inherit LIB_DUMMY;
inherit LIB_PULL;

int pullRope(object who);

static void create()
{
 dummy::create();
 SetKeyName(“rope”);
 SetId(({“rope”, “curtain rope” }));
 SetShort(“a curtain rope”);
 SetLong(“A rope used to open and close the curtain.”);
 SetPull( (: pullRope :) );
}

int pullRope(object who)
{
 write(“Trying to ‘Pull Rope’\n”);
 environment(this_player())->pull_rope();
 return 1;
}

There are two very important facts here: on the object you need to have the LIB_DUMMY so that it doesn’t show up in the room inventory, and then all you have to do is have your item call the code alread created: environment(this_player())->pull_rope();

Shizam!

Written by Troy

January 18, 2010 at 6:39 am

Posted in Convesions

Tagged with , ,

Streets

leave a comment »

So streets are going to be the cornerstone of the urban setting of TalosMUD. Each Street is going to dynamically create the description of the ‘room’ based upon the street type, the buildings contained there. So Right Now we are adding the following functionality to the street_room.c:
//Prototypes:
//Sets:
void SetStreetName(string StreetName);
void SetStreetLights(int i);
void SetStreetWidth(int i);
void SetRoadType(int i);
void SetGuardRotation(int TimeInterval);
//Gets:
string GetStreetName();
int GetStreetLights();
int GetStreetWidth();
int GetRoadType();
int GetGuardRotation();

int DetermineWealth();
void AddBuilding(string Direction, string BuildingFileName);
void EstablishExits();
void GenerateDescription();
void EstablishLongs();

While we are on the topic of streets it is relevant to talk about what buildings are going to be. They are virtual constructs that will be the lifeblood of the city. The street will call the buildings to determine the descriptions and the longs of the ‘room’

Written by Troy

January 17, 2010 at 4:01 pm