btmux/autom4te.cache/
btmux/doc/.svn/
btmux/event/.svn/
btmux/game/.svn/
btmux/game/bin/.svn/
btmux/game/data/.svn/
btmux/game/logs/.svn/
btmux/game/maps/
btmux/game/maps/.svn/
btmux/game/maps/.svn/prop-base/
btmux/game/maps/.svn/props/
btmux/game/maps/.svn/text-base/
btmux/game/maps/.svn/wcprops/
btmux/game/mechs/
btmux/game/mechs/.svn/
btmux/game/mechs/.svn/prop-base/
btmux/game/mechs/.svn/props/
btmux/game/mechs/.svn/text-base/
btmux/game/mechs/.svn/wcprops/
btmux/game/text/.svn/
btmux/include/.svn/
btmux/misc/
btmux/misc/.svn/
btmux/misc/.svn/prop-base/
btmux/misc/.svn/props/
btmux/misc/.svn/text-base/
btmux/misc/.svn/wcprops/
btmux/python/
btmux/python/.svn/
btmux/python/.svn/prop-base/
btmux/python/.svn/props/
btmux/python/.svn/text-base/
btmux/python/.svn/wcprops/
btmux/src/.svn/prop-base/
btmux/src/.svn/props/
btmux/src/.svn/text-base/
btmux/src/.svn/wcprops/
btmux/src/hcode/.svn/
btmux/src/hcode/btech/
btmux/src/hcode/btech/.svn/
btmux/src/hcode/btech/.svn/prop-base/
btmux/src/hcode/btech/.svn/props/
btmux/src/hcode/btech/.svn/text-base/
btmux/src/hcode/btech/.svn/wcprops/
btmux/src/hcode/include/.svn/
/*
 * $Id: mech.tech.saverepair.c,v 1.1.1.1 2005/01/11 21:18:26 kstevens Exp $
 *
 * Author: Markus Stenberg <fingon@iki.fi>
 *
 *  Copyright (c) 1997 Markus Stenberg
 *  Copyright (c) 1998-2002 Thomas Wouters
 *  Copyright (c) 2000-2002 Cord Awtry
 *       All rights reserved
 *
 * Created: Fri Mar 14 19:17:19 1997 fingon
 * Last modified: Thu Oct 30 18:42:58 1997 fingon
 *
 */

#include "mech.h"
#include "mech.events.h"
#include "mech.tech.h"

static FILE *cheat_file;
static int ev_type;

#define CHESA(var) fwrite(&var, sizeof(var), 1, cheat_file)
#define CHELO(var)  if (!fread(&var, sizeof(var), 1, f)) return

static void save_event(MUXEVENT * e)
{
    MECH *mech = (MECH *) e->data;
    int data = (int) e->data2;
    int t;

    t = e->tick - muxevent_tick;
    t = MAX(1, t);
    if (e->function == very_fake_func)
	t = 0 - t;
    CHESA(mech->mynum);
    CHESA(ev_type);
    CHESA(t);
    CHESA(data);
}

void saverepairs(FILE * f)
{
    int i;
    dbref d = -1;

    cheat_file = f;
    for (i = FIRST_TECH_EVENT; i <= LAST_TECH_EVENT; i++) {
	ev_type = i;
	muxevent_gothru_type(i, save_event);
    }
    CHESA(d);
}

void loadrepairs(FILE * f)
{
    dbref d, player;
    int type;
    int data;
    int time;
    MECH *mech;
    int loaded = 0;
    int fake;

    if (feof(f))
	return;
    fread(&d, sizeof(d), 1, f);
    while (d > 0 && !feof(f)) {
	loaded++;
	CHELO(type);
	CHELO(time);
	CHELO(data);
	fake = (time < 0);
	time = abs(time);
	if (!(mech = FindObjectsData(d)))
	    continue;
	player = data / PLAYERPOS;
	data = data % PLAYERPOS;
	if (fake)
	    FIXEVENT(time, mech, data, very_fake_func, type);
	else
	    switch (type) {
	    case EVENT_REPAIR_MOB:
		FIXEVENT(time, mech, data, muxevent_tickmech_mountbomb, type);
		break;
	    case EVENT_REPAIR_UMOB:
		FIXEVENT(time, mech, data, muxevent_tickmech_umountbomb, type);
		break;
	    case EVENT_REPAIR_REPL:
		FIXEVENT(time, mech, data, muxevent_tickmech_repairpart, type);
		break;
	    case EVENT_REPAIR_REPLG:
		FIXEVENT(time, mech, data, muxevent_tickmech_replacegun, type);
		break;
	    case EVENT_REPAIR_REPAP:
		FIXEVENT(time, mech, data, muxevent_tickmech_repairpart, type);
		break;
	    case EVENT_REPAIR_REPENHCRIT:
		FIXEVENT(time, mech, data, muxevent_tickmech_repairenhcrit, type);
		break;
	    case EVENT_REPAIR_REPAG:
		FIXEVENT(time, mech, data, muxevent_tickmech_repairgun, type);
		break;
	    case EVENT_REPAIR_REAT:
		FIXEVENT(time, mech, data, muxevent_tickmech_reattach, type);
		break;
	    case EVENT_REPAIR_RELO:
		FIXEVENT(time, mech, data, muxevent_tickmech_reload, type);
		break;
	    case EVENT_REPAIR_FIX:
		FIXEVENT(time, mech, data, muxevent_tickmech_repairarmor, type);
		break;
	    case EVENT_REPAIR_FIXI:
		FIXEVENT(time, mech, data, muxevent_tickmech_repairinternal,
		    type);
		break;
	    case EVENT_REPAIR_SCRL:
		FIXEVENT(time, mech, data, muxevent_tickmech_removesection, type);
		break;
	    case EVENT_REPAIR_SCRG:
		FIXEVENT(time, mech, data, muxevent_tickmech_removegun, type);
		break;
	    case EVENT_REPAIR_SCRP:
		FIXEVENT(time, mech, data, muxevent_tickmech_removepart, type);
		break;
	    case EVENT_REPAIR_REPSUIT:
		FIXEVENT(time, mech, data, muxevent_tickmech_replacesuit, type);
		break;
	    }
	CHELO(d);
    }
    if (loaded)
	fprintf(stderr, "LOADED: %d tech events.\n", loaded);
}