src/hcode/btech/mech.tech.saverepair.c

Go to the documentation of this file.
00001 
00002 /*
00003  * $Id: mech.tech.saverepair.c,v 1.1.1.1 2005/01/11 21:18:26 kstevens Exp $
00004  *
00005  * Author: Markus Stenberg <fingon@iki.fi>
00006  *
00007  *  Copyright (c) 1997 Markus Stenberg
00008  *  Copyright (c) 1998-2002 Thomas Wouters
00009  *  Copyright (c) 2000-2002 Cord Awtry
00010  *       All rights reserved
00011  *
00012  * Created: Fri Mar 14 19:17:19 1997 fingon
00013  * Last modified: Thu Oct 30 18:42:58 1997 fingon
00014  *
00015  */
00016 
00017 #include "mech.h"
00018 #include "mech.events.h"
00019 #include "mech.tech.h"
00020 
00021 static FILE *cheat_file;
00022 static int ev_type;
00023 
00024 #define CHESA(var) fwrite(&var, sizeof(var), 1, cheat_file)
00025 #define CHELO(var)  if (!fread(&var, sizeof(var), 1, f)) return
00026 
00027 static void save_event(MUXEVENT * e)
00028 {
00029         MECH *mech = (MECH *) e->data;
00030         int data = (int) e->data2;
00031         int t;
00032 
00033         t = e->tick - muxevent_tick;
00034         t = MAX(1, t);
00035         if(e->function == very_fake_func)
00036                 t = 0 - t;
00037         CHESA(mech->mynum);
00038         CHESA(ev_type);
00039         CHESA(t);
00040         CHESA(data);
00041 }
00042 
00043 void saverepairs(FILE * f)
00044 {
00045         int i;
00046         dbref d = -1;
00047 
00048         cheat_file = f;
00049         for(i = FIRST_TECH_EVENT; i <= LAST_TECH_EVENT; i++) {
00050                 ev_type = i;
00051                 muxevent_gothru_type(i, save_event);
00052         }
00053         CHESA(d);
00054 }
00055 
00056 void loadrepairs(FILE * f)
00057 {
00058         dbref d, player;
00059         int type;
00060         int data;
00061         int time;
00062         MECH *mech;
00063         int loaded = 0;
00064         int fake;
00065 
00066         if(feof(f))
00067                 return;
00068         fread(&d, sizeof(d), 1, f);
00069         while (d > 0 && !feof(f)) {
00070                 loaded++;
00071                 CHELO(type);
00072                 CHELO(time);
00073                 CHELO(data);
00074                 fake = (time < 0);
00075                 time = abs(time);
00076                 if(!(mech = FindObjectsData(d)))
00077                         continue;
00078                 player = data / PLAYERPOS;
00079                 data = data % PLAYERPOS;
00080                 if(fake)
00081                         FIXEVENT(time, mech, data, very_fake_func, type);
00082                 else
00083                         switch (type) {
00084                         case EVENT_REPAIR_MOB:
00085                                 FIXEVENT(time, mech, data, muxevent_tickmech_mountbomb, type);
00086                                 break;
00087                         case EVENT_REPAIR_UMOB:
00088                                 FIXEVENT(time, mech, data, muxevent_tickmech_umountbomb,
00089                                                  type);
00090                                 break;
00091                         case EVENT_REPAIR_REPL:
00092                                 FIXEVENT(time, mech, data, muxevent_tickmech_repairpart,
00093                                                  type);
00094                                 break;
00095                         case EVENT_REPAIR_REPLG:
00096                                 FIXEVENT(time, mech, data, muxevent_tickmech_replacegun,
00097                                                  type);
00098                                 break;
00099                         case EVENT_REPAIR_REPAP:
00100                                 FIXEVENT(time, mech, data, muxevent_tickmech_repairpart,
00101                                                  type);
00102                                 break;
00103                         case EVENT_REPAIR_REPENHCRIT:
00104                                 FIXEVENT(time, mech, data, muxevent_tickmech_repairenhcrit,
00105                                                  type);
00106                                 break;
00107                         case EVENT_REPAIR_REPAG:
00108                                 FIXEVENT(time, mech, data, muxevent_tickmech_repairgun, type);
00109                                 break;
00110                         case EVENT_REPAIR_REAT:
00111                                 FIXEVENT(time, mech, data, muxevent_tickmech_reattach, type);
00112                                 break;
00113                         case EVENT_REPAIR_RELO:
00114                                 FIXEVENT(time, mech, data, muxevent_tickmech_reload, type);
00115                                 break;
00116                         case EVENT_REPAIR_FIX:
00117                                 FIXEVENT(time, mech, data, muxevent_tickmech_repairarmor,
00118                                                  type);
00119                                 break;
00120                         case EVENT_REPAIR_FIXI:
00121                                 FIXEVENT(time, mech, data, muxevent_tickmech_repairinternal,
00122                                                  type);
00123                                 break;
00124                         case EVENT_REPAIR_SCRL:
00125                                 FIXEVENT(time, mech, data, muxevent_tickmech_removesection,
00126                                                  type);
00127                                 break;
00128                         case EVENT_REPAIR_SCRG:
00129                                 FIXEVENT(time, mech, data, muxevent_tickmech_removegun, type);
00130                                 break;
00131                         case EVENT_REPAIR_SCRP:
00132                                 FIXEVENT(time, mech, data, muxevent_tickmech_removepart,
00133                                                  type);
00134                                 break;
00135                         case EVENT_REPAIR_REPSUIT:
00136                                 FIXEVENT(time, mech, data, muxevent_tickmech_replacesuit,
00137                                                  type);
00138                                 break;
00139                         }
00140                 CHELO(d);
00141         }
00142         if(loaded)
00143                 fprintf(stderr, "LOADED: %d tech events.\n", loaded);
00144 }

Generated on Mon May 28 04:25:23 2007 for BattletechMUX by  doxygen 1.4.7