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 <strings.h>
#include <string.h>
#include "include/structs.h"
#include "include/main.h"
#include "include/utils.h"

#include "include/parse_wiley.h"

#define _DUMP_ISLES_C
#include "include/dump_isles.h"

const int                               isles_convertsectors[] = { ISLES_SECT_INSIDE,
    ISLES_SECT_INSIDE,
    ISLES_SECT_CITY,
    ISLES_SECT_FIELD,
    ISLES_SECT_FOREST,
    ISLES_SECT_HILLS,
    ISLES_SECT_MOUNTAIN,
    ISLES_SECT_WATER_SWIM,
    ISLES_SECT_WATER_NOSWIM,
    ISLES_SECT_AIR,
    ISLES_SECT_UNDERWATER
};

const int                              *isles_convertsector = &isles_convertsectors[1];

extern const char                       terrains[];
extern const char                      *terrain;
extern const int                        exit_dir_to_bit[];

int isles_qcmp_zone_vnum(const void *a, const void *b)
{
    return (((const pair *)b)->y - ((const pair *)a)->y);
}

void dump_as_isles(zones *Zones, rooms *Rooms, shops *Shops)
{
    FILE                                   *ofp,
                                           *listfp;
    char                                    filename[256],
                                            tmpstr[256];
    int                                     i,
                                            j,
                                            k,
                                            x;

    /*
     * int LastMob, LastLoc; 
     */
    int                                     LowRoom,
                                            HighRoom;
    pair                                   *ZoneSort;

    ZoneSort = (pair *)get_mem(Zones->Count, sizeof(pair));
    bzero(ZoneSort, sizeof(pair) * Zones->Count);
    for (i = 0; i < Zones->Count; i++) {
	sprintf(filename, "%s/%s/%s_%d.zone", OutputDir, ISLES_SUBDIR,
		remap_name(Zones->Zone[i].Name), Zones->Zone[i].Number);
	ofp = open_file(filename, "w");
	if (Verbose)
	    fprintf(stderr, "Dump of Zone \"%s\"[#%d]...\n", remap_name(Zones->Zone[i].Name),
		    Zones->Zone[i].Number);
	else if (!Quiet) {
	    sprintf(tmpstr, "#%d Dump of Zone \"%s\"[#%d]...", i + 1,
		    remap_name(Zones->Zone[i].Name), Zones->Zone[i].Number);
	    fprintf(stderr, "%s", tmpstr);
	    for (x = strlen(tmpstr); x < 79; x++)
		fprintf(stderr, " ");
	    for (x = strlen(tmpstr); x < 79; x++)
		fprintf(stderr, "\b");
	    fflush(stderr);
	}
	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;

/* ZONE */

	fprintf(ofp, "#ZONEDATA\n");
	fprintf(ofp, "Name\t%s~\n", Zones->Zone[i].Name);
	fprintf(ofp, "Author\tThe Wiley Gang~\n");
	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");
	fprintf(ofp, "#MOBDATA\n#0\n\n");
	fprintf(ofp, "#OBJDATA\n#0\n\n");
	fprintf(ofp, "#ROOMDATA\n");
	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)
		)) {
		long                                    OldValue = 0,
		    NewValue = 0;

		if (Verbose)
		    fprintf(stderr, "  (%d) Writing \"%s\"[#%d]\n", i,
			    Rooms->Room[i].Name, Rooms->Room[i].Number);
		else if (!Quiet)
		    spin(stderr);

		fprintf(ofp, "#%d\n", Rooms->Room[j].Number);
		fprintf(ofp, "Name\t%s~\n", Rooms->Room[j].Name);
		fprintf(ofp, "Descr\n%s~\n", Rooms->Room[j].Description);

/*
 * flag and sectors need translation
 * a nice routine should be written... I'm lazy... this is cheap and cheezy!
 */
		OldValue = Rooms->Room[j].              Flags;

		if (OldValue & ROOM_DARK)
		    NewValue |= ISLES_ROOM_DARK;
		if (OldValue & ROOM_DEATH)
		    NewValue |= ISLES_ROOM_IMMORTAL;
		if (OldValue & ROOM_NOMOB)
		    NewValue |= ISLES_ROOM_NO_MOB;
		if (OldValue & ROOM_INDOORS)
		    NewValue |= ISLES_ROOM_INDOORS;
		if (OldValue & ROOM_NOATTACK)
		    NewValue |= ISLES_ROOM_SAFE;
		/*
		 * if(OldValue & ROOM_NOSTEAL) NewValue |= 
		 */
		if (OldValue & ROOM_NOSUMMON)
		    NewValue |= ISLES_ROOM_NO_RECALL;
		/*
		 * if(OldValue & ROOM_NOMAGIC) NewValue |= 
		 */
		if (OldValue & ROOM_PRIVATE)
		    NewValue |= ISLES_ROOM_PRIVATE;
		/*
		 * if(OldValue & ROOM_SOUND) NewValue |= 
		 */
		fprintf(ofp, "Flags\t%ld\n", NewValue);
		fprintf(ofp, "Sector\t%d\n", isles_convertsector[Rooms->Room[j].Sector]);

		for (k = 0; k < Rooms->Room[j].ExtraCount; k++) {
		    fprintf(ofp, "ExtraDescr\t");
		    if (Rooms->Room[j].Extra[k].Keyword->Count > 0) {
			fprintf(ofp, "%s", Rooms->Room[j].Extra[k].Keyword->Word[0]);

			for (x = 0; x < Rooms->Room[j].Extra[k].Keyword->Count; x++) {
			    fprintf(ofp, " %s", Rooms->Room[j].Extra[k].Keyword->Word[x]);
			}
		    }
		    fprintf(ofp, "~\n%s~\n", Rooms->Room[j].Extra[k].Description);
		}
/* Resets need to be done here.... later... */
		for (k = 0; k < Rooms->Room[j].ExitCount; k++) {
		    switch (Rooms->Room[j].Exit[k].Error) {
			case EXIT_OK:
			case EXIT_NON_EUCLIDEAN:
			case EXIT_ONE_WAY:
			    fprintf(ofp, "Door\t%d %d %d %d\n%s~\n", Rooms->Room[j].Exit[k].Direction, 0,	/* reset 
														 * flags... 
														 * later... 
														 */
				    Rooms->Room[j].Exit[k].KeyNumber,
				    Rooms->Room[j].Exit[k].Room,
				    Rooms->Room[j].Exit[k].Description);
			    if (Rooms->Room[j].Exit[k].Keyword->Count > 0) {
				fprintf(ofp, "%s", Rooms->Room[j].Exit[k].Keyword->Word[0]);

				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");
		    }
		}
		fprintf(ofp, "End\n\n");
	    }
	}
	fprintf(ofp, "#0\n\n");
	fprintf(ofp, "#$\n");
	fclose(ofp);
	if (Verbose)
	    fprintf(stderr, "done.\n");
	else if (!Quiet) {
	    fprintf(stderr, "done.\r");
	    fflush(stderr);
	}
    }
    if (!Quiet)
	fprintf(stderr, "\n");
    if (!Quiet)
	fprintf(stderr, "Generating zone list...");
    qsort(ZoneSort, Zones->Count, sizeof(pair), isles_qcmp_zone_vnum);
    sprintf(filename, "%s/%s/zone.list", OutputDir, ISLES_SUBDIR);
    listfp = open_file(filename, "w");
    for (i = Zones->Count - 1; i >= 0; i--) {
	if (!Quiet)
	    spin(stderr);
	sprintf(filename, "%s_%d.zone", remap_name(Zones->Zone[ZoneSort[i].x].Name),
		Zones->Zone[i].Number);
	fprintf(listfp, "%s\n", filename);
    }
    fprintf(listfp, "$\n");
    fclose(listfp);
    if (!Quiet)
	fprintf(stderr, "done.\n");
}