wileymud-1.187b/
wileymud-1.187b/attic/
wileymud-1.187b/attic/bin/
wileymud-1.187b/attic/lib/
wileymud-1.187b/attic/lib/adm/
wileymud-1.187b/attic/lib/man/
wileymud-1.187b/attic/lib/new-wld/
wileymud-1.187b/attic/lib/new-wld/default/
wileymud-1.187b/attic/lib/old/
wileymud-1.187b/attic/lib/wld/
wileymud-1.187b/attic/public_html/
wileymud-1.187b/attic/public_html/gfx/
wileymud-1.187b/attic/src/bin/
wileymud-1.187b/attic/src/etc/
wileymud-1.187b/attic/src/libauth-4.0-p5/
wileymud-1.187b/attic/src/sedna/
wileymud-1.187b/backups/
wileymud-1.187b/bin/
wileymud-1.187b/docs/
wileymud-1.187b/etc/
wileymud-1.187b/lib/
wileymud-1.187b/lib/adm/
wileymud-1.187b/lib/boards/
wileymud-1.187b/lib/log/
wileymud-1.187b/lib/man/
wileymud-1.187b/lib/ply/
wileymud-1.187b/lib/ply/a/
wileymud-1.187b/lib/ply/b/
wileymud-1.187b/lib/ply/c/
wileymud-1.187b/lib/ply/d/
wileymud-1.187b/lib/ply/g/
wileymud-1.187b/lib/ply/k/
wileymud-1.187b/lib/ply/m/
wileymud-1.187b/lib/ply/s/
wileymud-1.187b/lib/ply/t/
wileymud-1.187b/public_html/gfx/
wileymud-1.187b/src/bin/
wileymud-1.187b/src/convert/attic/
wileymud-1.187b/src/convert/obj/
wileymud-1.187b/src/convert/perl/
wileymud-1.187b/src/convert/perl/MudConvert/
wileymud-1.187b/src/convert/perl/MudConvert/DUMP/
wileymud-1.187b/src/convert/perl/MudConvert/Report/
wileymud-1.187b/src/convert/perl/MudConvert/WileyMUD/
wileymud-1.187b/src/convert/perl/output/
wileymud-1.187b/src/convert/perl/output/DUMP/
wileymud-1.187b/src/convert/perl/output/Report/
wileymud-1.187b/src/convert/perl/output/WileyMUD/
wileymud-1.187b/src/etc/
wileymud-1.187b/src/etc/init.d/
wileymud-1.187b/src/etc/rc.d/
wileymud-1.187b/src/etc/rc.d/init.d/
wileymud-1.187b/src/lib/
wileymud-1.187b/src/lib/adm/
wileymud-1.187b/src/lib/boards/
wileymud-1.187b/src/lib/log/
wileymud-1.187b/src/lib/man/
wileymud-1.187b/src/lib/ply/
wileymud-1.187b/src/lib/ply/a/
wileymud-1.187b/src/lib/ply/b/
wileymud-1.187b/src/lib/ply/c/
wileymud-1.187b/src/lib/ply/d/
wileymud-1.187b/src/lib/ply/e/
wileymud-1.187b/src/lib/ply/f/
wileymud-1.187b/src/lib/ply/g/
wileymud-1.187b/src/lib/ply/h/
wileymud-1.187b/src/lib/ply/i/
wileymud-1.187b/src/lib/ply/j/
wileymud-1.187b/src/lib/ply/k/
wileymud-1.187b/src/lib/ply/l/
wileymud-1.187b/src/lib/ply/m/
wileymud-1.187b/src/lib/ply/n/
wileymud-1.187b/src/lib/ply/o/
wileymud-1.187b/src/lib/ply/p/
wileymud-1.187b/src/lib/ply/q/
wileymud-1.187b/src/lib/ply/r/
wileymud-1.187b/src/lib/ply/s/
wileymud-1.187b/src/lib/ply/t/
wileymud-1.187b/src/lib/ply/u/
wileymud-1.187b/src/lib/ply/v/
wileymud-1.187b/src/lib/ply/w/
wileymud-1.187b/src/lib/ply/x/
wileymud-1.187b/src/lib/ply/y/
wileymud-1.187b/src/lib/ply/z/
wileymud-1.187b/src/obj/
wileymud-1.187b/src/utils/
wileymud-1.187b/src/utils/mobmaker/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#include "include/structs.h"
#include "include/main.h"
#include "include/utils.h"
#include "include/make_index.h"
#include "include/parse_wiley.h"
#include "include/dump_report.h"

#define _DUMP_NIGHTMARE_C
#include "include/dump_nightmare.h"

void dump_as_nightmare(zones *Zones, rooms *Rooms, shops *Shops)
{
    FILE                                   *ofp,
                                           *fp2;
    char                                    filename[256],
                                            domainname[256],
                                            dirname[256],
                                            subdirname[256];
    char                                    mudpath[256],
                                            roomname[256],
                                            mudname[256],
                                            doorname[256],
                                            outpath[256];
    int                                     i,
                                            j,
                                            k,
                                            x;
    int                                     LowRoom,
                                            HighRoom;
    pair                                   *ZoneSort;
    char                                   *TmpDesc,
                                           *HackDesc;

/* Ensure that each domain exists in our directory structure. */
    ZoneSort = (pair *)get_mem(Zones->Count, sizeof(pair));
    bzero(ZoneSort, sizeof(pair) * Zones->Count);
    for (i = 0; i < Zones->Count; i++) {
	sprintf(domainname, "%s_%d", remap_name(Zones->Zone[i].Name), Zones->Zone[i].Number);
	sprintf(dirname, "%s/%s%s/%s", OutputDir, NIGHTMARE_SUBDIR, NIGHTMARE_DOMAIN,
		domainname);
	sprintf(filename, "mkdir -p %s", dirname);
	system(filename);
	sprintf(filename, "%s/README", dirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "#ZONEDATA\n");
	fprintf(ofp, "Name\t%s~\n", Zones->Zone[i].Name);
	fprintf(ofp, "Author\tThe Wiley Gang~\n");
	LowRoom = INT_MAX;
	HighRoom = INT_MIN;
	for (j = 0; j < Rooms->Count; j++) {
	    if ((remap_zone_vnum(Zones, Rooms->Room[j].Zone) == i) ||
		((Rooms->Room[j].Number >= (!i ? 0 : Zones->Zone[i - 1].Top + 1))&&
		 (Rooms->Room[j].Number <= Zones->Zone[i].Top)
		)) {
		LowRoom = min(LowRoom, Rooms->Room[j].Number);
		HighRoom = max(HighRoom, Rooms->Room[j].Number);
	    }
	}
	ZoneSort[i].x = i;
	ZoneSort[i].y = LowRoom;
	fprintf(ofp, "VNUMs\t%d %d\n", LowRoom, HighRoom);
	fprintf(ofp, "Time\t%d\n", Zones->Zone[i].Time);
	fprintf(ofp, "Mode\t%d\n", Zones->Zone[i].Mode);
	fprintf(ofp, "End\n\n");
	fclose(ofp);
/* There, now we have some setup work to do... */
	sprintf(subdirname, "%s/adm", dirname);
	sprintf(filename, "mkdir -p %s/adm", dirname);
	system(filename);
	sprintf(filename, "%s/README", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "                         /domains/%s/adm\n", domainname);
	fprintf(ofp, "               The Administrative Directory for %s\n", domainname);
	fprintf(ofp, "\n");
	fprintf(ofp, "This directory contains all files necessary for domain\n");
	fprintf(ofp, "administration.  The following files are required for any standard\n");
	fprintf(ofp, "domain, but not for secondary domains or realms:\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "void.c - The place people go when their environment is destructed\n");
	fprintf(ofp, "freezer.c - The place people go when they go net-dead\n");
	fprintf(ofp, "cache.c - The place hidden items go to hide\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "The access object is used in any realm or domain which is giving out\n");
	fprintf(ofp, "access which is nonstandard.  This is traditionally handled through\n");
	fprintf(ofp, "the 'grant' command.\n");
	fclose(ofp);

	sprintf(filename, "%s/access.c", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "/*    %s/%s/adm/access.c\n", NIGHTMARE_DOMAIN, domainname);
	fprintf(ofp, " *    From the Nightmare V Object Library\n");
	fprintf(ofp, " *    the access object for the %s domain\n", domainname);
	fprintf(ofp, " *    created by Descartes of Borg 960302\n");
	fprintf(ofp, " */\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "#include <lib.h>\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "inherit LIB_ACCESS;\n");
	fclose(ofp);

	sprintf(filename, "%s/cache.c", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "/*    /domains/%s/adm/cache.c\n", domainname);
	fprintf(ofp, " *    from the Nightmare V Object Library\n");
	fprintf(ofp, " *    room where hidden objects are stored\n");
	fprintf(ofp, " *    created by Descartes of Borg 960302\n");
	fprintf(ofp, " */\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "#include <lib.h>\n");
	fprintf(ofp, "#include <room.h>\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "inherit LIB_ROOM;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "void create() {\n");
	fprintf(ofp, "    room::create();\n");
	fprintf(ofp, "    SetShort( \"The cache\");\n");
	fprintf(ofp, "    SetLong( \"Things are hidden here.\");\n");
	fprintf(ofp,
		"    SetProperties( ([ \"storage room\" : 1, \"logout\" : ROOM_START ]) );\n");
	fprintf(ofp, "}\n");
	fclose(ofp);

	sprintf(filename, "%s/freezer.c", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "/*    /domains/%s/adm/freezer.c\n", domainname);
	fprintf(ofp, " *    from the Nightmare V Object Library\n");
	fprintf(ofp, " *    room that stores net-dead people\n");
	fprintf(ofp, " *    created by Descartes of Borg 960302\n");
	fprintf(ofp, " */\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "#include <lib.h>\n");
	fprintf(ofp, "#include <config.h>\n");
	fprintf(ofp, "#include <rooms.h>\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "inherit LIB_ROOM;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "static private object *Old;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "void create() {\n");
	fprintf(ofp, "    room::create();\n");
	fprintf(ofp, "    SetNoClean(1);\n");
	fprintf(ofp, "    SetProperties(([ \"login\" : ROOM_START, \"no teleport\" : 1 ]));\n");
	fprintf(ofp, "    SetShort( \"The freezer\");\n");
	fprintf(ofp, "    SetLong( \"The local freezer.  Go down to leave.\");\n");
	fprintf(ofp, "    SetObviousExits(\"d\");\n");
	fprintf(ofp, "    SetExits( ([ \"down\" : ROOM_START ]) );\n");
	fprintf(ofp, "    Old = ({});\n");
	fprintf(ofp, "    call_out(\"clean_room\", MAX_NET_DEAD_TIME);\n");
	fprintf(ofp, "}\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "static void clean_room() {\n");
	fprintf(ofp, "    object *clean_me;\n");
	fprintf(ofp, "    object ob;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "    foreach(ob in filter(all_inventory(), (: !living($1) :)))\n");
	fprintf(ofp, "      ob->eventDestruct();\n");
	fprintf(ofp, "    if( !sizeof(filter(all_inventory(), (: living :))) ) {\n");
	fprintf(ofp, "        Old = ({});\n");
	fprintf(ofp, "        call_out((: clean_room :), MAX_NET_DEAD_TIME);\n");
	fprintf(ofp, "        return;\n");
	fprintf(ofp, "    }\n");
	fprintf(ofp, "    clean_me = (all_inventory() & Old);\n");
	fprintf(ofp, "    Old = all_inventory() - clean_me;\n");
	fprintf(ofp, "    foreach(ob in clean_me) ob->eventDestruct();\n");
	fprintf(ofp, "    call_out((: clean_room :), MAX_NET_DEAD_TIME);\n");
	fprintf(ofp, "}\n");
	fclose(ofp);

	sprintf(filename, "%s/void.c", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "/*    /domains/%s/adm/void.c\n", domainname);
	fprintf(ofp, " *    from the Nightmare V Object Library\n");
	fprintf(ofp, " *    place where people go when their environments accidentally are\n");
	fprintf(ofp, " *    destructed\n");
	fprintf(ofp, " *    created by Descartes of Borg 960302\n");
	fprintf(ofp, " */\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "#include <lib.h>\n");
	fprintf(ofp, "#include <rooms.h>\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "inherit LIB_ROOM;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "void create() {\n");
	fprintf(ofp, "    room::create();\n");
	fprintf(ofp, "    SetShort(\"the void\");\n");
	fprintf(ofp, "    SetLong(\"The void.  Go down to get out.\");\n");
	fprintf(ofp, "    SetExits( ([ \"down\" : ROOM_START ]) );\n");
	fprintf(ofp, "}\n");
	fclose(ofp);

	sprintf(filename, "mkdir -p %s/etc", dirname);
	system(filename);

/* These are unused at present and might not always be needed... */

	sprintf(filename, "mkdir -p %s/armour", dirname);
	system(filename);
	sprintf(filename, "mkdir -p %s/fish", dirname);
	system(filename);
	sprintf(filename, "mkdir -p %s/meal", dirname);
	system(filename);
	sprintf(filename, "mkdir -p %s/npc", dirname);
	system(filename);
	sprintf(filename, "mkdir -p %s/save", dirname);
	system(filename);
	sprintf(filename, "mkdir -p %s/weapon", dirname);
	system(filename);

/* This is the virtual room server */

	sprintf(subdirname, "%s/virtual", dirname);
	sprintf(filename, "mkdir -p %s/virtual", dirname);
	system(filename);
	sprintf(filename, "%s/README", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "                       /domains/%s/virtual\n", domainname);
	fprintf(ofp, "                 Virtual Rooms for the %s Domain\n", domainname);
	fprintf(ofp, "\n");
	fprintf(ofp, "Here is a virtual grid server setup for a 25 by 25 room grid.\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "What happens is when some objects references an object in\n");
	fprintf(ofp, "/domains/%s/virtual/grassland/ but finds no file there, it\n",
		domainname);
	fprintf(ofp, "calls compile_object() in /domains/%s/virtual/server.c.  That\n",
		domainname);
	fprintf(ofp, "function returns an object which serves as the non-existent object.\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "The virtual server looks at the file name like:\n");
	fprintf(ofp, "/domains/%s/virtual/grassland/15,12\n", domainname);
	fprintf(ofp, "\n");
	fprintf(ofp, "That tells it to clone /domains/%s/virtual/grassland.c and pass it\n",
		domainname);
	fprintf(ofp,
		"15, 12 as the argument to create().  Thus grassland.c is able to set up\n");
	fprintf(ofp,
		"exits and such for its location at 15, 12 on the virtual grassland grid.\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "You can thus write your own virtual grid, say for a forest, simply by\n");
	fprintf(ofp, "writing a forest.c like the grassland.c given here.\n");
	fprintf(ofp, "\n");
	fclose(ofp);

	sprintf(filename, "mkdir -p %s/virtual/grassland", dirname);
	system(filename);

	sprintf(filename, "%s/grassland.c", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "/*    /domains/%s/virtual/grassland.c\n", domainname);
	fprintf(ofp, " *    from the Nightmare V Object Library\n");
	fprintf(ofp, " *    created by Descartes of Borg 960302\n");
	fprintf(ofp, " */\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "#include <lib.h>\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "inherit LIB_ROOM;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "static private int XPosition, YPosition;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "static void SetLongAndItems();\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "varargs static void create(int x, int y) {\n");
	fprintf(ofp, "    string n, s, e, w;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "    SetNoReplace(1);\n");
	fprintf(ofp, "    room::create();\n");
	fprintf(ofp, "    XPosition = x;\n");
	fprintf(ofp, "    YPosition = y;\n");
	fprintf(ofp, "    SetClimate(\"temperate\");\n");
	fprintf(ofp, "    SetProperties( ([ \"light\" : 2 ]) );\n");
	fprintf(ofp,
		"    SetShort(x == 25 ? \"the edge of a grassy plain\" : \"endless grasslands\");\n");
	fprintf(ofp, "    SetLongAndItems();\n");
	fprintf(ofp, "    if( x == 25 ) e = __DIR__ + random(25) + \",\" + y;\n");
	fprintf(ofp, "    else e = __DIR__ + (x+1) + \",\" + y;\n");
	fprintf(ofp, "    if( x == 1 ) w = __DIR__ + random(25) + \",\" + y;\n");
	fprintf(ofp, "    else w = __DIR__ + (x-1) + \",\" + y;\n");
	fprintf(ofp, "    if( y == 25 ) n = __DIR__ + x + \",\" + random(25);\n");
	fprintf(ofp, "    else n = __DIR__ + x + \",\" + (y+1);\n");
	fprintf(ofp, "    if( y == 1 ) s = __DIR__ + x+ \",\" + random(25);\n");
	fprintf(ofp, "    else s = __DIR__ + x + \",\" + (y-1);\n");
	fprintf(ofp,
		"    SetGoMessage(\"The grass abruptly ends at a great VOID!  You cannot pass.\");\n");
	fprintf(ofp, "    if( n ) AddExit(\"north\", __DIR__ + n);\n");
	fprintf(ofp, "    if( s ) AddExit(\"south\", __DIR__ + s);\n");
	fprintf(ofp, "    if( e ) AddExit(\"east\", __DIR__ + e);\n");
	fprintf(ofp, "    if( w ) AddExit(\"west\", __DIR__ + w);\n");
	fprintf(ofp, "}\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "static void SetLongAndItems() {\n");
	fprintf(ofp, "    mapping inv, items;\n");
	fprintf(ofp, "    string str;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "    inv = ([]);\n");
	fprintf(ofp,
		"    str = \"You stand amidst an endless sea of tall grasses, gently waving\"\n");
	fprintf(ofp,
		"        \" in the breeze.  Quiet, peaceful, hypnotic.  You might as well\"\n");
	fprintf(ofp, "        \" become one of the beckoning blades...\";\n");
	fprintf(ofp,
		"    items = ([ \"grassland\" : \"The peaceful ocean of grass goes on forever.\",\n");
	fprintf(ofp,
		"        \"grass\" : \"It seems soft yet strong, edible if you were a cow.\" ]);\n");
	fprintf(ofp, "    if( !random(50) ) {\n");
	fprintf(ofp,
		"        str += \"  A small circle of stones and some burnt wood stands out\"\n");
	fprintf(ofp, "            \" from the grass a bit.\";\n");
	fprintf(ofp, "        items[({ \"stones\", \"rocks\" })] =\n");
	fprintf(ofp,
		"            \"They are smallish stones, set close in a circle to prevent\"\n");
	fprintf(ofp,
		"            \" a fire within from spreading to the sometimes dry grass\"\n");
	fprintf(ofp, "            \" which is all around you.\";\n");
	fprintf(ofp,
		"        items[({ \"twigs\", \"sticks\", \"kindling\", \"wood\", \"burnt wood\" })] =\n");
	fprintf(ofp,
		"              \"Though long since burnt to nothing, scattered kindling \"\n");
	fprintf(ofp,
		"              \"and burnt wood lie about as a memory of travellers who have \"\n");
	fprintf(ofp, "              \"passed through\";\n");
	fprintf(ofp, "        if( random(2) ) {\n");
	fprintf(ofp, "            string thing;\n");
	fprintf(ofp, "\n");
	fprintf(ofp,
		"            foreach(thing in ({ \"twigs\", \"sticks\", \"kindling\", \"wood\" }))\n");
	fprintf(ofp, "              SetSearch(thing, function(object who, string str) {\n");
	fprintf(ofp, "                  object ob;\n");
	fprintf(ofp, "                  string thing2;\n");
	fprintf(ofp, "\n");
	fprintf(ofp,
		"                  if( !(ob = new(DIR_STANDARD_DOMAIN \"/etc/pole\")) )\n");
	fprintf(ofp, "                    return 0;\n");
	fprintf(ofp, "                  who->eventPrint(\"You find a fishing pole!\");\n");
	fprintf(ofp,
		"                  eventPrint((string)who->GetName() + \" finds a fishing pole \"\n");
	fprintf(ofp, "                             \"among the abandoned campsite.\", who);\n");
	fprintf(ofp,
		"                  foreach(thing2 in ({ \"twigs\", \"sticks\", \"kindling\", \"wood\"}))\n");
	fprintf(ofp, "                    RemoveSearch(thing2);\n");
	fprintf(ofp, "                  if( !((int)ob->eventMove(this_player())) ) {\n");
	fprintf(ofp, "                      who->eventPrint(\"You drop the pole!\");\n");
	fprintf(ofp,
		"                      eventPrint((string)who->GetName() + \" drops the pole.\",\n");
	fprintf(ofp, "                                 who);\n");
	fprintf(ofp, "                      ob->eventMove(this_object());\n");
	fprintf(ofp, "                  }\n");
	fprintf(ofp, "                  return 1;\n");
	fprintf(ofp, "              });\n");
	fprintf(ofp, "        }\n");
	fprintf(ofp, "    }\n");
	fprintf(ofp, "    else if( !random(10) )\n");
	fprintf(ofp, "      SetSmell(\"default\", \"You smell a distant camp fire.\");\n");
	fprintf(ofp, "    if( !random(25) )\n");
	fprintf(ofp, "      inv[DIR_STANDARD_DOMAIN \"/npc/traveller\"] = random(3) + 1;\n");
	fprintf(ofp, "    else if( !random(4) )\n");
	fprintf(ofp,
		"      SetListen(\"default\", \"You hear voices whispering in the distance.\");\n");
	fprintf(ofp, "    SetLong(str);\n");
	fprintf(ofp, "    SetItems(items);\n");
	fprintf(ofp, "    SetInventory(inv);\n");
	fprintf(ofp, "}\n");
	fclose(ofp);

	sprintf(filename, "%s/server.c", subdirname);
	ofp = open_file(filename, "w");
	fprintf(ofp, "/*    /domains/%s/virtual/server.c\n", domainname);
	fprintf(ofp, " *    from the Nightmare V Object Library\n");
	fprintf(ofp, " *    created by Descartes of Borg 960302\n");
	fprintf(ofp, " */\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "object compile_object(string file) {\n");
	fprintf(ofp, "    string *path;\n");
	fprintf(ofp, "    object ob;\n");
	fprintf(ofp, "    int x, y;\n");
	fprintf(ofp, "\n");
	fprintf(ofp, "    if( previous_object() != master() ) return 0;\n");
	fprintf(ofp, "    path = explode(file, \"/\");\n");
	fprintf(ofp, "    if( sizeof(path) != 5 ) return 0;\n");
	fprintf(ofp, "    if( file_size(__DIR__ + path[3] + \".c\") < 1 ) return 0;\n");
	fprintf(ofp, "    if( sscanf(path[4], \"%%d,%%d\", x, y) != 2 ) return 0;\n");
	fprintf(ofp, "    if( !(ob = new(__DIR__ + path[3], x, y)) ) return 0;\n");
	fprintf(ofp, "    return ob;\n");
	fprintf(ofp, "}\n");
	fclose(ofp);

/* Ye GODS that be alot of setup.... ok, time for the meat now! */

	sprintf(subdirname, "%s/room", dirname);
	sprintf(filename, "mkdir -p %s/room", dirname);
	system(filename);
	sprintf(mudpath, "%s/%s/room", NIGHTMARE_DOMAIN, domainname);

	for (j = 0; j < Rooms->Count; j++) {
	    if ((remap_zone_vnum(Zones, Rooms->Room[j].Zone) == i) ||
		((Rooms->Room[j].Number >= (!i ? 0 : Zones->Zone[i - 1].Top + 1))&&
		 (Rooms->Room[j].Number <= Zones->Zone[i].Top)
		)) {
		sprintf(roomname, "%s_%d.c", remap_name(Rooms->Room[j].Name),
			Rooms->Room[j].Number);
		sprintf(filename, "%s/%s", subdirname, roomname);
		sprintf(mudname, "%s/%s", mudpath, roomname);
		ofp = open_file(filename, "w");

#ifdef DEBUG
		fprintf(stderr, "Dumping %s\n", filename);
#endif
		fprintf(ofp, "// Automated conversion of WileyMUD by Quixadhal\n");
		fprintf(ofp, "// Original:   WileyMUD III, Room [#%d]\n",
			Rooms->Room[j].Number);
		fprintf(ofp, "// Target:     Nightmare IVr2.5, %s\n", mudname);
		fprintf(ofp, "// Performed:  %s\n", timestamp());
		fprintf(ofp, "\n");

/* Setup basic file now... */

		fprintf(ofp, "#include <lib.h>\n");
		fprintf(ofp, "\n");
		fprintf(ofp, "inherit LIB_ROOM;\n");
		fprintf(ofp, "\n");

		fprintf(ofp, "static void create() {\n");
		fprintf(ofp, "    room::create();\n");
		if (Rooms->Room[j].Flags & ROOM_DARK)
		    fprintf(ofp, "    SetProperty(\"light\", 0);\n");
		else
		    fprintf(ofp, "    SetProperty(\"light\", 2);\n");

/* Climate is a poor substitute for sector types... adjust manually. */

		if (Rooms->Room[j].Flags & ROOM_INDOORS)
		    fprintf(ofp, "    SetClimate(\"indoors\");\n");
		else
		    switch (Rooms->Room[j].Sector) {
			case SECT_INDOORS:
			    fprintf(ofp, "    SetClimate(\"indoors\");\n");
			    break;
			case SECT_FOREST:
			    fprintf(ofp, "    SetClimate(\"tropical\");\n");
			    break;
			case SECT_HILLS:
			    fprintf(ofp, "    SetClimate(\"arid\");\n");
			    break;
			case SECT_MOUNTAIN:
			    fprintf(ofp, "    SetClimate(\"arctic\");\n");
			    break;
		    }

		fprintf(ofp, "\n");
		fprintf(ofp, "    SetShort(\"%s\");\n", Rooms->Room[j].Name);
		TmpDesc = my_strdup(Rooms->Room[j].Description);

		if (!(HackDesc = (char *)strtok(TmpDesc, "\n")))
		    fprintf(ofp, "    SetLong(\"%s\");\n", TmpDesc);
		else {
		    fprintf(ofp, "    SetLong(\"%s\"\n", HackDesc);
		    while ((HackDesc = (char *)strtok(NULL, "\n")))
			if (HackDesc)
			    fprintf(ofp, "        \" %s\"\n", HackDesc);
		    fprintf(ofp, "        );\n");
		}
		free(TmpDesc);

		fprintf(ofp, "\n");
		k = 0;
		if (Rooms->Room[j].Flags & ROOM_NOATTACK) {
		    k = 1;
		    fprintf(ofp, "    SetProperty(\"no attack\", 1);\n");
		}
		if (Rooms->Room[j].Flags & ROOM_NOSTEAL) {
		    k = 1;
		    fprintf(ofp, "    SetProperty(\"no steal\", 1);\n");
		}
		if (Rooms->Room[j].Flags & ROOM_NOSUMMON) {
		    k = 1;
		    fprintf(ofp, "    SetProperty(\"no teleport\", 1);\n");
		}
		if (Rooms->Room[j].Flags & ROOM_NOMAGIC) {
		    k = 1;
		    fprintf(ofp, "    SetProperty(\"no magic\", 1);\n");
		}
		if (k)
		    fprintf(ofp, "\n");

		if (Rooms->Room[j].ExtraCount > 0) {
		    fprintf(ofp, "    SetItems( ([\n");
		    for (k = 0; k < Rooms->Room[j].ExtraCount; k++) {
			if (Rooms->Room[j].Extra[k].Keyword->Count > 0) {
			    if (Rooms->Room[j].Extra[k].Keyword->Count > 1)
				fprintf(ofp, "        ({ \"%s\"",
					Rooms->Room[j].Extra[k].Keyword->Word[0]);
			    else
				fprintf(ofp, "        \"%s\"",
					Rooms->Room[j].Extra[k].Keyword->Word[0]);
			    for (x = 1; x < Rooms->Room[j].Extra[k].Keyword->Count; x++)
				fprintf(ofp, ", \"%s\"",
					Rooms->Room[j].Extra[k].Keyword->Word[x]);
			    if (Rooms->Room[j].Extra[k].Keyword->Count > 1)
				fprintf(ofp, " }) :\n");
			    else
				fprintf(ofp, " :\n");

			    TmpDesc = my_strdup(Rooms->Room[j].Extra[k].Description);

			    if (!(HackDesc = (char *)strtok(TmpDesc, "\n")))
				fprintf(ofp, "        \"%s\"\n", TmpDesc);
			    else {
				fprintf(ofp, "        \"%s\"\n", HackDesc);
				while ((HackDesc = (char *)strtok(NULL, "\n")))
				    if (HackDesc)
					fprintf(ofp, "        \" %s\"\n", HackDesc);
			    }
			    free(TmpDesc);
			    if (k < Rooms->Room[j].ExtraCount - 1)
				fprintf(ofp, "        ,\n");
			}
		    }
		    fprintf(ofp, "        ]) );\n");
		}

		if (Rooms->Room[j].ExitCount > 0) {
		    fprintf(ofp, "    SetExits( ([\n");
		    for (k = 0; k < Rooms->Room[j].ExitCount; k++) {
			/*
			 * Unlike extra descriptions, exits have an implied keyword of their direction. Thus, even if
			 * Count < 1, the exit will still be valid. 
			 */
			switch (Rooms->Room[j].Exit[k].Error) {
			    case EXIT_OK:
			    case EXIT_NON_EUCLIDEAN:
			    case EXIT_ONE_WAY:
				if (Rooms->Room[j].Exit[k].Keyword->Count > 0) {
				    fprintf(ofp, "        ({ \"%s\"",
					    exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				    for (x = 0; x < Rooms->Room[j].Exit[k].Keyword->Count; x++)
					fprintf(ofp, ", \"%s\"",
						Rooms->Room[j].Exit[k].Keyword->Word[x]);
				    fprintf(ofp, " }) :\n");
				} else {
				    fprintf(ofp, "        \"%s\" :\n",
					    exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				}
				sprintf(outpath, "%s/%s_%d/room", NIGHTMARE_DOMAIN,
					remap_name(Zones->Zone[remap_zone_vnum(Zones,
									       Rooms->Room
									       [remap_room_vnum
										 
										 
										 
										 
										 
										 
										 
										 
										 
										 
										 
										 (Rooms,
										  Rooms->
										  Room[j].Exit
										  [k].
										  Room)].Zone)].
						   Name), Rooms->Room[remap_room_vnum(Rooms,
										      Rooms->
										      Room[j].
										      Exit[k].
										      Room)].
					Zone);
				fprintf(ofp, "        \"%s/%s_%d\"\n", outpath,
					remap_name(room_name
						   (Rooms, Rooms->Room[j].Exit[k].Room)),
					Rooms->Room[j].Exit[k].Room);
				if (k < Rooms->Room[j].ExitCount - 1)
				    fprintf(ofp, "        ,\n");
				/*
				 * Keys would require that objects be done... ignore. Descriptions are not supported in 
				 * Nightmare... you would have to add it as an AddItem call, but then it would be "look 
				 * at north" instead of "look north".... ignore for now. 
				 */
				break;
			}
		    }
		    fprintf(ofp, "        ]) );\n");
		}

		/*
		 * NOW, we can go setup the doors... we need a default door as well. 
		 */

		if (Rooms->Room[j].ExitCount > 0) {
		    for (k = 0; k < Rooms->Room[j].ExitCount; k++) {
			switch (Rooms->Room[j].Exit[k].Type) {
			    case EXIT_OPEN:
			    case EXIT_OPEN_ALIAS:
				break;
			    default:
				sprintf(doorname, "%s/etc/%s_%d_%s_door.c", dirname,
					remap_name(room_name
						   (Rooms, Rooms->Room[j].Exit[k].Room)),
					Rooms->Room[j].Exit[k].Room,
					exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				fprintf(ofp, "    SetDoor( \"%s\", \"%s\" );\n",
					exit_name_lower(Rooms->Room[j].Exit[k].Direction),
					doorname);
				fp2 = open_file(doorname, "w");
				fprintf(fp2, "/*    /domains/%s/etc/%s_%d_%s_door.c\n",
					domainname,
					remap_name(room_name
						   (Rooms, Rooms->Room[j].Exit[k].Room)),
					Rooms->Room[j].Exit[k].Room,
					exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				fprintf(fp2, " *    from Nightmare LPMud\n");
				fprintf(fp2, " *    created by Descartes of Borg 951027\n");
				fprintf(fp2, " */\n");
				fprintf(fp2, "\n");
				fprintf(fp2, "#include <lib.h>\n");
				fprintf(fp2, "\n");
				fprintf(fp2, "inherit LIB_DOOR;\n");
				fprintf(fp2, "\n");
				fprintf(fp2, "static void create() {\n");
				fprintf(fp2, "    door::create();\n");
				fprintf(fp2, "    SetId(\"%s\", \"door\");\n",
					exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				fprintf(fp2,
					"    SetShort(\"%s\", \"a cracked wooden door\");\n",
					exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				fprintf(fp2,
					"    SetLong(\"%s\", \"The door is cracked and has seen better days.\"\n",
					exit_name_lower(Rooms->Room[j].Exit[k].Direction));
				fprintf(fp2, "    SetId(\"%s\", \"door\");\n",
					exit_name_lower(RevDir
							[Rooms->Room[j].Exit[k].Direction]));
				fprintf(fp2,
					"    SetShort(\"%s\", \"a cracked wooden door\");\n",
					exit_name_lower(RevDir
							[Rooms->Room[j].Exit[k].Direction]));
				fprintf(fp2,
					"    SetLong(\"%s\", \"The door is cracked and has seen better days.\"\n",
					exit_name_lower(RevDir
							[Rooms->Room[j].Exit[k].Direction]));
				fprintf(fp2, "    SetClosed(1);\n");
				fprintf(fp2, "}\n");
				fclose(fp2);
				if (k < Rooms->Room[j].ExitCount - 1)
				    fprintf(ofp, "        ,\n");
				/*
				 * Keys would require that objects be done... ignore. Descriptions are not supported in 
				 * Nightmare... you would have to add it as an AddItem call, but then it would be "look 
				 * at north" instead of "look north".... ignore for now. 
				 */
				break;
			}
		    }
		}
		fprintf(ofp, "}\n");
		fclose(ofp);
	    }
	}
    }
}