#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <zlib.h>
/* including main header file */
#include "mud.h"
/*
* load_world_data()
*
* called from load_muddata in utils.c
*/
/* Called in load_muddata
* Just to load the world on starup/copyover */
void load_world_data()
{
/*save_zworld();
log_string("*** WORLD *** Saved World.\n\r"); */
load_zworld();
log_string("*** WORLD *** Loaded ZWorld.");
}
/* cmd to forcefuly save the world */
void cmd_save_world(D_MOBILE * ch, char *arg)
{
stc("Saving zworld structure...\n\r", ch);
save_zworld();
stc("Save zworld complete!\n\r", ch);
}
/* cmd to forcerful reload the world */
void cmd_revert_world(D_MOBILE * ch, char *arg)
{
stc("Reverting zworld structure...\n\r", ch);
load_zworld();
stc("Revert zworld complete!\n\r", ch);
}
/*
* load/save_world()
*
* New Load/save world functions
* Thank you Tyche for the zlib functions =)
*/
void save_zworld()
{
gzFile *fp;
fp = gzopen(WORLD_FILE2,"wb9");
gzwrite(fp,map,sizeof(map));
gzclose(fp);
}
void load_zworld()
{
gzFile *fp;
fp = gzopen(WORLD_FILE2,"rb9");
gzread(fp,map,sizeof(map));
gzclose(fp);
}
/*
* cmd_load_image()
*
* Loads a 1000x750 raw image file
* into the map on current ch's z axis
*/
void cmd_load_image(D_MOBILE * ch, char *arg)
{
FILE * fp;
int graph1, graph2, graph3, x, y;
stc("Loading Image to current Depth\n\r", ch);
if( !( fp = fopen( "../world/hworld.raw", "rb" ) ) )
{
printf("Error: Cannot open file?\n");
return;
}
for (y = 0; y < MAX_Y; y++)
{
for (x = 0; x < MAX_X; x++)
{
graph1 = fgetc(fp);
graph2 = fgetc(fp);
graph3 = fgetc(fp);
map[y][x] = return_sector_number(graph1, graph2, graph3);
}
}
printf("Sucessfuly loaded file\n");
fclose( fp );
}
/* cmd_save_image()
*
* Outputs a raw image file based on map
* currently broken
*/
void cmd_save_image(D_MOBILE * ch, char *arg)
{
FILE * fp;
int graph1, graph2, graph3, x, y;
stc("Saving ../world/hworld_output.raw\n\r", ch);
if( !( fp = fopen( "../world/hworld_output.raw", "w" ) ) )
{
printf("Error: Cannot open file?\n");
return;
}
for (x = 0; x < MAX_X; x++)
{
for (y = 0; y < MAX_Y; y++)
{
graph1 = sector_table[map[y][x]].red;
graph1 = sector_table[map[y][x]].green;
graph1 = sector_table[map[y][x]].blue;
fputc(graph1, fp);
fputc(graph2, fp);
fputc(graph3, fp);
}
}
printf("Sucessfuly saved file\n");
fclose( fp );
}
/*
* return_sector_number()
*
* Takes the RBG values from the image
* and finds the correct sector_table entry
* and returns the internal sector number
*/
int return_sector_number(int r, int g, int b)
{
int i;
int final;
for (i = 0; i < MAX_SECTOR; i++)
{
if (sector_table[i].red == r && sector_table[i].green == g && sector_table[i].blue == b)
{
final = sector_table[i].sector;
break;
}
else
final = MAX_SECTOR + 1;
}
return final;
}
/*
* cmd_load_small()
*
* Loads a small image into current ch's x/y location
* Used for loading premade maps/citys/dungeons
* into the world ontop of the actual map
*/
void cmd_load_small(D_MOBILE * ch, char *arg)
{
FILE * fp;
int graph1, graph2, graph3, x, y;
stc("Loading Small Image to current area\n\r", ch);
if( !( fp = fopen( "../world/vandagard.raw", "r" ) ) )
{
printf("Error: Cannot open file?\n");
return;
}
for (y = ch->y; y < (ch->y + 51); y++)
{
for (x = ch->x; x < (ch->x + 51); x++)
{
graph1 = fgetc(fp);
graph2 = fgetc(fp);
graph3 = fgetc(fp);
map[y][x] = return_sector_number(graph1, graph2, graph3);
}
}
printf("Sucessfuly loaded small file\n");
fclose( fp );
}
void cmd_goto_inside(D_M * ch, char * arg)
{
int x;
int y;
char buf[MAX_BUFFER];
for (y = 0; y < MAX_Y; y++)
{
for (x = 0; x < MAX_X; x++)
{
if (map[x][y] == 16)
{
sprintf(buf, "Inside X = %d, inside Y = %d\n\r", x, y);
stc(buf, ch);
break;
}
}
}
return;
}