1 /* 2 * Empire - A multi-player, client/server Internet based war game. 3 * Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak, 4 * Ken Stevens, Steve McClure, Markus Armbruster 5 * 6 * Empire is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 * 19 * --- 20 * 21 * See files README, COPYING and CREDITS in the root of the source 22 * tree for related information and legal notices. It is expected 23 * that future projects/authors will amend these files as needed. 24 * 25 * --- 26 * 27 * nuke.h: Definitions for things having to do with nukes 28 * 29 * Known contributors to this file: 30 * Dave Pare, 1986 31 * Markus Armbruster, 2004-2020 32 */ 33 34 #ifndef NUKE_H 35 #define NUKE_H 36 37 #include "file.h" 38 #include "item.h" 39 #include "types.h" 40 41 #define MIN_DRNUKE_CONST 0.001 42 43 struct nukstr { 44 /* initial part must match struct empobj */ 45 signed ef_type: 8; 46 unsigned nuk_seqno: 12; 47 unsigned nuk_generation: 12; 48 int nuk_uid; /* unit ID (nuke #) */ 49 time_t nuk_timestamp; /* Last time this nuke was touched */ 50 natid nuk_own; 51 coord nuk_x, nuk_y; /* current loc of device */ 52 signed char nuk_type; /* index in nchr[] */ 53 signed char nuk_effic; /* unused, always 100% */ 54 signed char nuk_mobil; /* unused, always 0 */ 55 unsigned char nuk_off; /* repairs stopped? (unused) */ 56 short nuk_tech; /* nuke's tech level */ 57 char nuk_stockpile; /* group membership */ 58 coord nuk_opx, nuk_opy; /* Op sector coords, unused */ 59 short nuk_mission; /* mission code, unused */ 60 short nuk_radius; /* mission radius, unused */ 61 /* end of part matching struct empobj */ 62 int nuk_plane; /* UID of transporting plane, or -1 */ 63 }; 64 65 struct nchrstr { 66 char *n_name; /* warhead unit name */ 67 int n_blast; /* blast radius */ 68 int n_dam; /* damage at center */ 69 short n_mat[I_MAX+1]; /* materials to build 100% */ 70 /* only I_LCM, I_HCM, I_OIL, I_RAD non-zero */ 71 int n_bwork; /* work to build 100% */ 72 int n_tech; /* tech needed to build */ 73 int n_cost; /* how much it costs to build */ 74 int n_weight; 75 int n_flags; /* description of capability */ 76 signed char n_type; /* index in nchr[] */ 77 }; 78 79 #define N_NEUT bit(0) /* Neutron bomb (low damage, high fallout) */ 80 81 #define getnuke(n, p) ef_read(EF_NUKE, (n), (p)) 82 #define putnuke(n, p) ef_write(EF_NUKE, (n), (p)) 83 #define getnukep(n) ((struct nukstr *)ef_ptr(EF_NUKE, (n))) 84 85 #define NCHR_SZ 64 86 extern struct nchrstr nchr[NCHR_SZ]; 87 88 /* src/lib/common/cargo.c */ 89 extern void nuk_carrier_change(struct nukstr *, int, int, int); 90 extern int nuk_on_plane(struct plnstr *); 91 92 #endif 93