|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)damage.c 5.3 (Berkeley) 6/18/88"; ! 20: #endif /* not lint */ ! 21: ! 22: # include "trek.h" ! 23: ! 24: /* ! 25: ** Schedule Ship.damages to a Device ! 26: ** ! 27: ** Device `dev1' is damaged in an amount `dam'. Dam is measured ! 28: ** in stardates, and is an additional amount of damage. It should ! 29: ** be the amount to occur in non-docked mode. The adjustment ! 30: ** to docked mode occurs automatically if we are docked. ! 31: ** ! 32: ** Note that the repair of the device occurs on a DATE, meaning ! 33: ** that the dock() and undock() have to reschedule the event. ! 34: */ ! 35: ! 36: damage(dev1, dam) ! 37: int dev1; /* device index */ ! 38: double dam; /* time to repair */ ! 39: { ! 40: register int i; ! 41: register struct event *e; ! 42: int f; ! 43: register int dev; ! 44: ! 45: /* ignore zero damages */ ! 46: if (dam <= 0.0) ! 47: return; ! 48: dev = dev1; ! 49: ! 50: printf("\t%s damaged\n", Device[dev].name); ! 51: ! 52: /* find actual length till it will be fixed */ ! 53: if (Ship.cond == DOCKED) ! 54: dam *= Param.dockfac; ! 55: /* set the damage flag */ ! 56: f = damaged(dev); ! 57: if (!f) ! 58: { ! 59: /* new damages -- schedule a fix */ ! 60: schedule(E_FIXDV, dam, 0, 0, dev); ! 61: return; ! 62: } ! 63: /* device already damaged -- add to existing damages */ ! 64: /* scan for old damages */ ! 65: for (i = 0; i < MAXEVENTS; i++) ! 66: { ! 67: e = &Event[i]; ! 68: if (e->evcode != E_FIXDV || e->systemname != dev) ! 69: continue; ! 70: /* got the right one; add on the new damages */ ! 71: reschedule(e, e->date - Now.date + dam); ! 72: return; ! 73: } ! 74: syserr("Cannot find old damages %d\n", dev); ! 75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.