Browsed by
Category: My Projects

My Projects

Mod: Wizzes can’t be killed

Mod: Wizzes can’t be killed

Add this block of code to the beginning of varargs int eventDie(mixed agent) in /lib/player.c.


int mhp, msp, mmp;
string *limb_arr = ({});

if(!agent) agent = previous_object();
if(!agent) agent = this_object();

if(wizardp(agent)) {
mhp = agent->GetMaxHealthPoints();
msp = agent->GetMaxStaminaPoints();
mmp = agent->GetMaxMagicPoints();
agent->AddHP(mhp);
agent->AddStaminaPoints(msp);
agent->AddMagicPoints(mmp);
if(agent->GetPoison() > 0) agent->AddPoison(0 - agent->GetPoison());
limb_arr = agent->GetLimbs();
foreach(string limb in limb_arr) {
agent->HealLimb(limb);
}
return 1;
}

This code is formed such that when a wizard should die, they are instead healed and restored to full health, stamina, and magic.

This code falls under the Dead Souls license.

No Zapping Arch Wizzes

No Zapping Arch Wizzes

Here’s how to prevent zapping of arch wizards:

In /verbs/creators/zap.c, change:


if(!living(ob)) {
write("You can only zap living things.");
return 1;
}
else name = ob->GetName();

to


if(!living(ob)) {
write("You can only zap living things.");
return 1;
} else if (archp(ob)) {
write("You can't zap an Arch!");
return 1;
} else name = ob->GetName();

Dead Souls 2.3a1 Wordy Exit Code

Dead Souls 2.3a1 Wordy Exit Code

This is my update to the /lib/exits.c, /lib/std/room.c and /lib/interactive.c to allow for worded exits in verbose mode, and the usual short exits in brief mode.

Examples:

  • Verbose:
    • Creators’ Hall
    • Immortals come here to communicate with each other about the world they are building. The Adventurer’s Guild is north. The Arch Room is south. To visit the Dead Souls test and development mud, go west. The test lab facilities are east.
    • There are five obvious exits: west, north, east, south, and up.
  • Brief:
    • Creators’ Hall [n, s, e, w, u]

This code includes my HideExit Modifications:nod:

As usual, please see the license at Dead Souls.net, this code is not GPL.

Update: Moved one block of code in GenerateVerboseExits() in room.c to allow you to HideExit() enters. (Example: HideExit(“enter office”); )

Update 2: Fixed a problem with grammar by adding (Example: “desc” : “gate leading”) to the SetSide Mapping. If there is no “desc”, it will show “door” in the verbose exits. This was needed to be able to colorize the door based on its open/closed status. Added a modified door.c and door.h for this purpose.

Dead Souls HideExit code

Dead Souls HideExit code

This is my update to the /lib/exits.c and /lib/std/room.c to make obvious exits easier to use and worth with. It adds the following:

  • a sub-mapping to the Exits mapping in exits.c to include ([ “obv” : 0 or 1 ]).
  • HideExit(dir), which hides the given exit (and should be used in your room code to hide exits)
  • GetObvMap(), which returns a mapping of direction and hidden [Example where south is hidden by HideExit(“south”): ([ “west” : 1, “north” : 1, “east” : 1, “south” : 0 ]) ].

Room Exits default to Obvious, so there is no need to set them. The old SetObviousExits and its related functions are still included and valid for compatibility purposes.

I will be releasing another version of this code for use with muds who want more than the [n, s, e, w, u] exit list.

:thumbsup:

Insert this code into /lib/exits.c:

//Use this to get whether or not an exit is obvious.
int GetExitObv( string str ) {
    if( !Exits[str] ) return 0;
    else return Exits[str]["obv"];
}

//Use this or GetFullExitData to get a mapping of obvious or not, to use for visible/invisible doors in std/room.c
mapping GetObvMap() {
    mapping ret = ([]);
    foreach(string key in keys(Exits)){
	ret[key] = Exits[key]["obv"];
    }

    return ret;
}

//Use this to hide an exit
int HideExit( string dir ) {
	  return Exits[dir]["obv"] = 0;
}

Replace the existing GenerateObviousExits() in /lib/std/room.c with this:

 int GenerateObviousExits(){
    string *normals;
    string *exits;
    string dir_string, enters;
    mapping obv;

    exits = GetExits();
    obv = GetObvMap();

    enters = "";
    normals = ({ "north", "south", "east", "west", "up", "down" });
    normals += ({ "northeast", "southeast", "northwest", "southwest" });
    normals += ({ "out" });
    dir_string = "";

    if(sizeof(GetEnters(1)-({0}))){
			foreach(string enter in this_object()->GetEnters(1)){
			    if (obv["enter "+enter] == 1) {
				    enters += "enter "+enter;
				    if(member_array(enter,this_object()->GetEnters(1)) !=
				     sizeof(this_object()->GetEnters(1)) -1) {
							  enters +=", ";
				    }
			    }
			}
    }

    if(member_array("north",exits) != -1 && obv["north"] == 1) dir_string += "n, ";
    if(member_array("south",exits) != -1 && obv["south"] == 1) dir_string += "s, ";
    if(member_array("east",exits) != -1 && obv["east"] == 1) dir_string += "e, ";
    if(member_array("west",exits) != -1 && obv["west"] == 1) dir_string += "w, ";
    if(member_array("northeast",exits) != -1 && obv["northeast"] == 1) dir_string += "ne, ";
    if(member_array("northwest",exits) != -1 && obv["northwest"] == 1) dir_string += "nw, ";
    if(member_array("southeast",exits) != -1 && obv["southeast"] == 1) dir_string += "se, ";
    if(member_array("southwest",exits) != -1 && obv["southwest"] == 1) dir_string += "sw, ";
    if(member_array("up",exits) != -1 && obv["up"] == 1) dir_string += "u, ";
    if(member_array("down",exits) != -1 && obv["down"] == 1) dir_string += "d, ";
    if(member_array("out",exits) != -1 && obv["out"] == 1) dir_string += "out, ";

    if(sizeof(this_object()->GetEnters(1) - ({0}) )) {
			if(sizeof(this_object()->GetExits())) dir_string += ", ";
			dir_string += enters;
    }

    if(last(dir_string,2) == ", ") dir_string = truncate(dir_string,2);
    dir_string = replace_string(dir_string,", , ",", ");
    if(ObviousVisible) SetObviousExits(dir_string);
    return 1;
}
MSNTV2 Boot Tutorial

MSNTV2 Boot Tutorial

Well, it’s 3AM, but I got my first MSNTV2 server running using linux kernel 2.6.12.5, so here’s a writeup on how it’s done.

This is provided with no guarantee of accuracy or completeness

This tutorial assumes the following:

  • You will be installing a hard drive into the MSNTV2 box via an IDE cable.
    • (The process for a USB drive is similar, with the exception that you must compile the kernel as such to be able to boot from USB, and you must append rootwait=10 to the CMDLINE file)
  • You have soldered an IDE header onto the MSNTV2 motherboard
  • You have already patched the BIOS of the MSNTV2 (See “Getting into the service menu” and “Flashing the patch” on the Toc2rta Wiki
  • You already have a CompactFlash card prepared as detailed in the Toc2rta Wiki, with:
    • a CMDLINE file (root=/dev/hdc3 init=/sbin/init console=ttyS0,115200)
    • BIOS.BIN (You’ll have to search Google for it)
    • (We will be compiling the VMLINUX.BIN in this tutorial)
  • You are currently using the hard drive you wish to install into the MSNTV2. It currently has:

Note: The CompactFlash card is known as /dev/hda to the MSNTV2 box. Once the drive is installed into the MSNTV2, it will be known as /dev/hdc (If the drive has no jumpers present) or /dev/hdd (If jumpered as ‘slave’).

For those trying to compile it for themselves, and for myself for later reference:

  1. Download linux-2.6.12.5.tar.gz
  2. Move linux-2.6.12.5.tar.gz to /usr/src/ (mv linux-2.6.12.5.tar.gz /usr/src)
  3. Change directories to /usr/src/ (cd /usr/src)
  4. Extract linux-2.6.12.5.tar.gz into /usr/src/ (tar -xvf linux-2.6.12.5.tar.gz)
  5. Add the .config file:
    1. Download the attachment to this article
    2. Change directories to where the attachment was downloaded (Example: cd ~/Desktop/)
    3. Copy it to the /usr/src/linux-2.6.12.5/ folder and rename it to .config (cp msntv2-config-2.6.12.5 /usr/src/linux-2.6.12.5/.config)
  6. Make the kernel and modules:
    1. Change directories to /usr/src/linux-2.6.12.5 (cd /usr/src/linux-2.6.12.5)
    2. Make sure the source code has no temporary files, etc (make clean)
    3. Build the Kernel (make)
      1. If you are prompted whether or not to include an item that was not included in the .config, just press Enter, and it will select the default recommended setting.
    4. Install the modules (make modules_install)
  7. Copy the vmlinux.bin to the first partition of your CF card.
    1. Mount your CF card if not already done. Note: Many GUIs will do this for you. The mounted path and device may vary. (Example: mount /dev/sda1 /media/sda1)
    2. Copy the vmlinux.bin from /usr/src/linux-2.6.12.5/arch/i386/boot/compressed/vmlinux.bin to the first partition of your CF card. (Example, assuming a USB card reader mounted to /media/sda1: cp /usr/src/linux-2.6.12.5/arch/i386/boot/compressed/vmlinux.bin /media/sda1/) 
  8. Edit your /etc/fstab file: (See attachments for an example of a modified fstab)
    1. Change any references of /dev/hda to /dev/hdc
    2. Remove or comment out any /dev/cdrom entry
    3. [Experimental, for me at least] Add an entry for the first partition of the CompactFlash (/dev/hda1 none vfat defaults 0 0)
  9. Install this hard drive onto the MSNTV2 using an EIDE ribbon cable.

Picture of my current setup:

2×16 Character LCD Display

2×16 Character LCD Display

Built with the PC Starter Kit (“LCD Kit 04”) from the good folks at 411 Technology Systems, it is mounted in a computer case spacer to be mounted in a computer.

You can buy LCDs along with the PC Starter Kit, which includes the parallel port kit and a CD with schematics, code, and other plans and goodies on it (“AN-CD-01”).

You can either purchase from their eBay Store or their Web Store (LCDs | Kits & Other Stuff)

And, they pack everything in baggies, and LCDs are put into ESD bags, and shipped in boxes so things don’t get dropped, crushed, smushed, etc. And yes, I’ve bought from them again and again, and I highly recommend them for LCD stuff.