Mercurial > ~darius > hgwebdir.cgi > paradise_server
diff src/plasma.c @ 6:8c6d5731234d
First entry of Paradise Server 2.9 patch 10 Beta
author | darius |
---|---|
date | Sat, 06 Dec 1997 04:37:04 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plasma.c Sat Dec 06 04:37:04 1997 +0000 @@ -0,0 +1,130 @@ +/*-------------------------------------------------------------------------- +NETREK II -- Paradise + +Permission to use, copy, modify, and distribute this software and its +documentation, or any derivative works thereof, for any NON-COMMERCIAL +purpose and without fee is hereby granted, provided that this copyright +notice appear in all copies. No representations are made about the +suitability of this software for any purpose. This software is provided +"as is" without express or implied warranty. + + Xtrek Copyright 1986 Chris Guthrie + Netrek (Xtrek II) Copyright 1989 Kevin P. Smith + Scott Silvey + Paradise II (Netrek II) Copyright 1993 Larry Denys + Kurt Olsen + Brandon Gillespie +--------------------------------------------------------------------------*/ + +#include "config.h" +#include <stdio.h> +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/shm.h> +#include "defs.h" +#include "struct.h" +#include "data.h" +#include "shmem.h" + + + + + +/*-----------------------------VISIBLE FUNCTIONS---------------------------*/ + +/*--------------------------------NPLASMATORP------------------------------*/ +/* + * This function fires a plasma torp. It checks a number of conditions to + * see if it is allowable to fire a plasma torp. If so the the plasma if + * fire. The two styles of plasma torp are ones that fire in the direction + * the ship is going and ones that can fire independent of the ships + * direction. + */ + +void +nplasmatorp(course, type) + unsigned char course; /* direction plasma should go */ + int type; /* type of plasma */ +{ + register int i; /* looping var */ + register struct plasmatorp *k;/* to point to plasma torp */ + + if (weaponsallowed[WP_PLASMA] == 0) + { /* are plasmas enabled */ + warning("Plasmas haven't been invented yet."); + return; + } + if (me->p_ship.s_plasma.cost <= 0) + { /* ship can have plasma */ + warning("Weapon's Officer: Captain, this ship can't carry plasma torpedoes!"); + return; + } + if (!(me->p_specweap & SFNPLASMAARMED)) + { /* ship equiped with plasma */ + warning("Weapon's Officer: Captain, this ship is not armed with plasma torpedoes!"); + return; + } + if (me->p_flags & PFWEP) + { /* ship not w-temped */ + warning("Plasma torpedo launch tube has exceeded the maximum safe temperature!"); + return; + } + if (me->p_nplasmatorp == MAXPLASMA) + { + warning("Our fire control system limits us to 1 live torpedo at a time captain!"); + return; + } + if (me->p_fuel < myship->s_plasma.cost) + { /* have enough fuel? */ + warning("We don't have enough fuel to fire a plasma torpedo!"); + return; + } + if (me->p_flags & PFREPAIR) + { /* not while in repair mode */ + warning("We cannot fire while our vessel is undergoing repairs."); + return; + } + if ((me->p_cloakphase) && (me->p_ship.s_type != ATT)) + { + warning("We are unable to fire while in cloak, captain!"); + return; /* not while cloaked */ + } + + if (!check_fire_warp() + || !check_fire_warpprep() + || !check_fire_docked()) + return; + me->p_nplasmatorp++; /* inc plasma torps fired */ + me->p_fuel -= myship->s_plasma.cost; /* take off the fuel */ + me->p_wtemp += myship->s_plasma.wtemp; /* do the w-temp */ + for (i = me->p_no * MAXPLASMA, k = &plasmatorps[i]; + i < (me->p_no + 1) * MAXPLASMA; i++, k++) + { + if (k->pt_status == PTFREE) /* find a free plasma to fire */ + break; + } + + k->pt_no = i; /* set plasmas number */ + k->pt_status = type; /* set what type plasma is */ + k->pt_owner = me->p_no; /* set the owner */ + k->pt_team = me->p_team; /* set the team */ + k->pt_x = me->p_x; /* set starting coords */ + k->pt_y = me->p_y; + if (myship->s_nflags & SFNPLASMASTYLE) /* depending on type set */ + k->pt_dir = course; /* any direction */ + else + k->pt_dir = me->p_dir; /* or straight ahead of ship */ + k->pt_damage = myship->s_plasma.damage; /* set the damage it will do */ + k->pt_speed = myship->s_plasma.speed; /* set its speed */ + k->pt_war = me->p_hostile | me->p_swar; /* who it doesn't like */ + k->pt_fuse = myship->s_plasma.fuse; /* how long it will live */ + k->pt_turns = myship->s_plasma.aux; /* how much will it track */ +} + +/*-------------------------------------------------------------------------*/ + + + + + +/*------END OF FILE-----*/