X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=include%2Fship.h;h=83db8c034caa6f68eb4487527559d7ad1166f517;hp=8cc05ebada03a476d4dcd401b935160e16d2dc05;hb=HEAD;hpb=7e2008e7f4a7eac9b44ed6e3fa2a7d7dcb0c49bf diff --git a/include/ship.h b/include/ship.h index 8cc05ebad..83db8c034 100644 --- a/include/ship.h +++ b/include/ship.h @@ -1,6 +1,6 @@ /* * Empire - A multi-player, client/server Internet based war game. - * Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak, + * Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak, * Ken Stevens, Steve McClure, Markus Armbruster * * Empire is free software: you can redistribute it and/or modify @@ -31,33 +31,19 @@ * Thomas Ruschak, 1992 * Ken Stevens, 1995 * Steve McClure, 1998 - * Markus Armbruster, 2004-2009 + * Markus Armbruster, 2004-2020 */ #ifndef SHIP_H #define SHIP_H -#include +#include "file.h" #include "item.h" -#include "queue.h" #include "retreat.h" #include "types.h" -#define SHP_TYPE_MAX 46 #define SHIP_MINEFF 20 -/* bit masks for the autonav mode flags */ - -#define AN_AUTONAV bit(2) -#define AN_STANDBY bit(3) -#define AN_LOADING bit(4) -#define AN_SCUTTLE bit(5) /* Auto-scuttle of trade ships */ - -/* TMAX is the number of cargo holds a ship use in the autonav code. */ -#define TMAX 6 - - -#define MAXSHPPATH 28 #define MAXSHPNAMLEN 24 struct shpstr { @@ -80,20 +66,10 @@ struct shpstr { short shp_mission; /* mission code */ short shp_radius; /* mission radius */ /* end of part matching struct empobj */ - coord shp_destx[2]; /* location for ship destination */ - coord shp_desty[2]; - i_type shp_tstart[TMAX]; /* what goods to pick up at start point */ - i_type shp_tend[TMAX]; /* what goods to pick up at end point */ - short shp_lstart[TMAX]; /* How much do we pick up at the start */ - short shp_lend[TMAX]; /* How much do we pick up at the end */ - unsigned char shp_autonav; /* autonavigation flags */ short shp_item[I_MAX+1]; /* amount of items on board */ short shp_pstage; /* plague stage */ - short shp_ptime; /* how many etus remain in this stage */ + short shp_ptime; /* how many ETUs remain in this stage */ short shp_access; /* Last tick mob was updated (MOB_ACCESS) */ - unsigned char shp_mobquota; /* mobility quota */ - char shp_path[MAXSHPPATH]; - int shp_follow; char shp_name[MAXSHPNAMLEN]; /* name set with the "name" command */ coord shp_orig_x; coord shp_orig_y; /* Where we were built */ @@ -104,8 +80,6 @@ struct shpstr { struct mchrstr { short m_item[I_MAX+1]; /* load limit */ - int m_lcm; /* units of lcm to build */ - int m_hcm; /* units of hcm to build */ int m_armor; /* how well armored it is */ int m_speed; /* how fast it can go */ int m_visib; /* how well it can be seen */ @@ -115,9 +89,12 @@ struct mchrstr { unsigned char m_nxlight; /* maximum number of xlight planes */ unsigned char m_nchoppers; /* maximum number of choppers */ char *m_name; /* full name of type of ship */ + short m_mat[I_MAX+1]; /* materials to build 100% */ + /* only I_LCM and I_HCM non-zero */ + int m_bwork; /* work to build 100% */ int m_tech; /* tech required to build */ int m_cost; /* how much it costs to build */ - long m_flags; /* what special things can this ship do */ + int m_flags; /* what special things can this ship do */ unsigned char m_nplanes; /* maximum number of planes this ship holds */ unsigned char m_nland; /* maximum number of units this ship holds */ signed char m_type; /* index in mchr[] */ @@ -127,8 +104,6 @@ struct mchrstr { #define M_TORP bit(1) /* fire torpedoes */ #define M_DCH bit(2) /* drop depth charges on subs */ #define M_FLY bit(3) /* launch and recover planes */ -/* M_MSL will be automatically set in init_mchr() if m_nplanes > 0 - and M_FLY is not set */ #define M_MSL bit(4) /* launch missiles */ #define M_OIL bit(5) /* drill for oil */ #define M_SONAR bit(6) /* locate submarines */ @@ -151,22 +126,22 @@ struct mchrstr { #define putship(n, p) ef_write(EF_SHIP, (n), (p)) #define getshipp(n) ((struct shpstr *)ef_ptr(EF_SHIP, (n))) -extern struct mchrstr mchr[SHP_TYPE_MAX + 2]; - -/* Work required for building 100% */ -#define SHP_BLD_WORK(lcm, hcm) (20 + (lcm) + 2 * (hcm)) - - /* return codes from shp_check_nav */ -#define CN_NAVIGABLE 0 -#define CN_LANDLOCKED 1 -#define CN_CONSTRUCTION 2 -#define CN_ERROR -1 +#define MCHR_SZ 128 +extern struct mchrstr mchr[MCHR_SZ]; enum { SHP_AIROPS_EFF = 50, /* min. efficiency for air ops */ SHP_TORP_SHELLS = 3 /* number of shells used by a torpedo */ }; +/* Whether and why a ship is stuck in a sector */ +enum shp_stuck { + SHP_STUCK_NOT, /* not stuck */ + SHP_STUCK_CONSTRUCTION, /* sector not efficient enough */ + SHP_STUCK_CANAL, /* ship lacks M_CANAL */ + SHP_STUCK_IMPASSABLE /* sector type not navigable */ +}; + extern int m_armor(struct mchrstr *, int); extern int m_speed(struct mchrstr *, int); extern int m_visib(struct mchrstr *, int); @@ -188,4 +163,21 @@ extern double shp_fire_range(struct shpstr *); extern int shp_usable_guns(struct shpstr *); extern double shp_torp_hitchance(struct shpstr *, int); +/* src/lib/subs/shpsub.c */ +extern int shp_may_nav(struct shpstr *, struct shpstr *, char *); +extern void shp_sel(struct nstr_item *, struct emp_qelem *); +extern struct ulist *shp_insque(struct shpstr *, struct emp_qelem *); +extern void shp_nav_stay_behind(struct emp_qelem *, natid); +extern void shp_nav_put(struct emp_qelem *, natid); +extern int shp_sweep(struct emp_qelem *, int, int, natid); +extern enum shp_stuck shp_check_nav(struct shpstr *, struct sctstr *); +extern int sect_has_dock(struct sctstr *); +extern int shp_hardtarget(struct shpstr *); +extern int shp_nav_dir(struct emp_qelem *, int, natid); +extern int shp_nav_gauntlet(struct emp_qelem *, int, natid); +extern int shp_missile_defense(coord, coord, natid, int); +extern void shp_missdef(struct shpstr *, natid); +extern double shp_mobcost(struct shpstr *); +extern void shp_set_tech(struct shpstr *, int); + #endif