[btech-checkins] CVS: btechmux/src/hcode/btech autogun.c,1.1.1.1,1.1.1.1.2.1 btmacros.h,1.12.2.18,1.
Brought to you by:
twouters
Update of /cvsroot/btech/btechmux/src/hcode/btech In directory sc8-pr-cvs1:/tmp/cvs-serv2119/src/hcode/btech Modified Files: Tag: btmux_1_4-branch autogun.c btmacros.h map.c map.los.c mech.advanced.c mech.combat.c mech.combat.misc.c mech.consistency.c mech.contacts.c mech.damage.c mech.fire.c mech.h mech.lite.c mech.los.c mech.move.c mech.notify.c mech.physical.c mech.sensor.c mech.sensor.functions.c mech.update.c mech.utils.c p.map.h p.mech.advanced.h p.mech.fire.h p.mech.utils.h weapons.fasa.h weapons.h weapons.vrt.h Removed Files: Tag: btmux_1_4-branch .depend Makefile Log Message: Merge with the Bitkeeper repository at http://btechmux.bkbits.net/btechmux-stable (the 'stable' branch.) This adds a cleaner build system (no recursive make, for one) and a host of small features as seen on 3030MUX. Index: autogun.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/autogun.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.2.1 diff -C2 -d -r1.1.1.1 -r1.1.1.1.2.1 *** autogun.c 3 Jan 2002 01:01:14 -0000 1.1.1.1 --- autogun.c 30 Sep 2003 01:38:35 -0000 1.1.1.1.2.1 *************** *** 166,171 **** if (MechTeam(t) == MechTeam(mech)) continue; ! if (!(map->LOSinfo[mech->mapnumber][t-> ! mapnumber] & MECHLOSFLAG_SEEN)) continue; if ((targetrange[target_count] = --- 166,170 ---- if (MechTeam(t) == MechTeam(mech)) continue; ! if (!(MechToMech_LOSFlag(map, mech, t) & MECHLOSFLAG_SEEN)) continue; if ((targetrange[target_count] = Index: btmacros.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/btmacros.h,v retrieving revision 1.12.2.18 retrieving revision 1.12.2.19 diff -C2 -d -r1.12.2.18 -r1.12.2.19 *** btmacros.h 14 Sep 2003 10:37:29 -0000 1.12.2.18 --- btmacros.h 30 Sep 2003 01:38:35 -0000 1.12.2.19 *************** *** 163,166 **** --- 163,173 ---- #define SetMechPKiller(a) (MechPrefs(a) |= MECHPREF_PKILL) #define UnSetMechPKiller(a) (MechPrefs(a) &= ~MECHPREF_PKILL) + #define MechSLWarn(a) (MechPrefs(a) & MECHPREF_SLWARN) + #define MechAutoFall(a) (MechPrefs(a) & MECHPREF_AUTOFALL) + #define MechArmorWarn(a) (!(MechPrefs(a) & MECHPREF_NOARMORWARN)) + #define MechAmmoWarn(a) (!(MechPrefs(a) & MECHPREF_NOAMMOWARN)) + #define MechFailStand(a) (!(MechPrefs(a) & MECHPREF_NOFAILSTAND)) + #define MechAutoconSD(a) (MechPrefs(a) & MECHPREF_AUTOCON_SD) + #define MechNoFriendlyFire(a) (MechPrefs(a) & MECHPREF_NOFRIENDLYFIRE) #define MechWalkXPFactor(a) (a)->rd.wxf #define MechPilot(a) (a)->pd.pilot *************** *** 345,356 **** #define StunCrew(a) MECHEVENT(a, EVENT_UNSTUN_CREW, unstun_crew_event, 60, 0) ! #define Burning(a) event_count_type_data(EVENT_VEHICLEBURN, (void *) a) ! #define BurningSide(a,side) event_count_type_data_data(EVENT_VEHICLEBURN, (void *) a, (void *) side) #define StopBurning(a) event_remove_type_data(EVENT_VEHICLEBURN, (void *) a) #define StopBurningSide(a,side) event_remove_type_data_data(EVENT_VEHICLEBURN, (void *) a, (void *) side) ! #define Extinguishing(a) event_count_type_data(EVENT_VEHICLE_EXTINGUISH, (void *) a) ! #define Jellied(a) MechCritStatus(a) & JELLIED #define Exploding(a) event_count_type_data(EVENT_EXPLODE, (void *) a) ! #define Dumping(a) event_count_type_data(EVENT_DUMP, (void *) a) #define Dumping_Type(a,type) (event_count_type_data_data(EVENT_DUMP, (void *) a, (void *) type) || event_count_type_data_data(EVENT_DUMP, (void *) a, (void *) 0)) #define DumpingData(a,data2) event_get_type_data(EVENT_DUMP, (void *) a, (void *) data2) --- 352,363 ---- #define StunCrew(a) MECHEVENT(a, EVENT_UNSTUN_CREW, unstun_crew_event, 60, 0) ! #define Burning(a) event_count_type_data(EVENT_VEHICLEBURN, (void *) a) ! #define BurningSide(a,side) event_count_type_data_data(EVENT_VEHICLEBURN, (void *) a, (void *) side) #define StopBurning(a) event_remove_type_data(EVENT_VEHICLEBURN, (void *) a) #define StopBurningSide(a,side) event_remove_type_data_data(EVENT_VEHICLEBURN, (void *) a, (void *) side) ! #define Extinguishing(a) event_count_type_data(EVENT_VEHICLE_EXTINGUISH, (void *) a) ! #define Jellied(a) (MechCritStatus(a) & JELLIED) #define Exploding(a) event_count_type_data(EVENT_EXPLODE, (void *) a) ! #define Dumping(a) event_count_type_data(EVENT_DUMP, (void *) a) #define Dumping_Type(a,type) (event_count_type_data_data(EVENT_DUMP, (void *) a, (void *) type) || event_count_type_data_data(EVENT_DUMP, (void *) a, (void *) 0)) #define DumpingData(a,data2) event_get_type_data(EVENT_DUMP, (void *) a, (void *) data2) *************** *** 648,654 **** #define StartSpinning(mech) (MechCritStatus(mech) |= SPINNING) ! #define IsLit2(mech) (MechCritStatus(mech) & SLITE_LIT) ! #define IsLit3(mech) (MechSpecialsStatus(mech) & SLITE_ON) ! #define IsLit(mech) (IsLit2(mech) || IsLit3(mech)) #define OkayCritSect(sect,num,ok) OkayCritSect2(mech,sect,num,ok) --- 655,661 ---- #define StartSpinning(mech) (MechCritStatus(mech) |= SPINNING) ! #define MechLit(mech) (MechCritStatus(mech) & SLITE_LIT) ! #define MechLites(mech) (MechSpecialsStatus(mech) & SLITE_ON) ! #define IsLit(mech) (MechLit(mech) || MechLites(mech)) #define OkayCritSect(sect,num,ok) OkayCritSect2(mech,sect,num,ok) *************** *** 794,797 **** --- 801,813 ---- #define MechIsObservator(mech) (MechCritStatus(mech) & OBSERVATORIC) + + /* Macros related to map.h stuff */ + #define MechLOSFlag_WoodCount(flag) \ + (((flag) / MECHLOSFLAG_WOOD) % MECHLOSMAX_WOOD) + #define MechLOSFlag_WaterCount(flag) \ + (((flag) / MECHLOSFLAG_WATER) % MECHLOSMAX_WATER) + + #define MechToMech_LOSFlag(map, from, to) \ + ((map)->LOSinfo[from->mapnumber][to->mapnumber]) #endif /* BTMACROS_H */ Index: map.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/map.c,v retrieving revision 1.1.1.1.2.5 retrieving revision 1.1.1.1.2.6 diff -C2 -d -r1.1.1.1.2.5 -r1.1.1.1.2.6 *** map.c 6 Dec 2002 14:28:42 -0000 1.1.1.1.2.5 --- map.c 30 Sep 2003 01:38:36 -0000 1.1.1.1.2.6 *************** *** 36,39 **** --- 36,40 ---- #include "p.debug.h" + void debug_fixmap(dbref player, void *data, char *buffer) { *************** *** 228,235 **** } ! void map_loadmap(dbref player, void *data, char *buffer) { - MAP *map; - char *args[1]; char openfile[50]; char terr, elev; --- 229,234 ---- } ! int map_load(MAP * map, char * mapname) { char openfile[50]; char terr, elev; *************** *** 239,259 **** int i, j = 0, height, width, filemode; ! map = (MAP *) data; ! ! if (!CheckData(player, map)) ! return; ! ! DOCHECK(mech_parseattributes(buffer, args, 1) != 1, ! "Invalid number of arguments!"); ! if (strlen(args[0]) >= MAP_NAME_SIZE) ! args[MAP_NAME_SIZE] = 0; ! sprintf(openfile, "%s/", MAP_PATH); ! strcat(openfile, args[0]); ! DOCHECK(!(fp = ! my_open_file(openfile, "r", &filemode)), ! tprintf("Unable to read %s!", args[0])); del_mapobjs(map); /* Just in case */ - notify(player, tprintf("Loading %s", args[0])); - /* free the old map if there is one there for some reason */ if (map->map) { for (i = 0; i < map->map_height; i++) --- 238,249 ---- int i, j = 0, height, width, filemode; ! if (strlen(mapname) >= MAP_NAME_SIZE) ! mapname[MAP_NAME_SIZE] = 0; ! sprintf(openfile, "%s/%s", MAP_PATH, mapname); ! fp = my_open_file(openfile, "r", &filemode); ! if (!fp) { ! return -1; ! } del_mapobjs(map); /* Just in case */ if (map->map) { for (i = 0; i < map->map_height; i++) *************** *** 264,268 **** height > MAPY || width < 1 || width > MAPX) { SendError(tprintf("Map #%d: Invalid height and/or width", ! map->mynum)); width = DEFAULT_MAP_WIDTH; height = DEFAULT_MAP_HEIGHT; --- 254,258 ---- height > MAPY || width < 1 || width > MAPX) { SendError(tprintf("Map #%d: Invalid height and/or width", ! map->mynum)); width = DEFAULT_MAP_WIDTH; height = DEFAULT_MAP_HEIGHT; *************** *** 296,302 **** } if (!strcmp(GetTerrainName_base(terr), "Unknown")) { ! SendError(tprintf ! ("Map #%d: Invalid terrain at %d,%d: '%c'", map->mynum, ! j, i, terr)); terr = GRASSLAND; } --- 286,291 ---- } if (!strcmp(GetTerrainName_base(terr), "Unknown")) { ! SendError(tprintf("Map #%d: Invalid terrain at %d,%d: '%c'", ! map->mynum, j, i, terr)); terr = GRASSLAND; } *************** *** 305,313 **** } if (i != height) { ! SendError(tprintf ! ("Error: EOF reached prematurely. (x%d != %d || y%d != %d)", j, ! width, i, height)); my_close_file(fp, &filemode); ! return; } map->grav = 100; --- 294,301 ---- } if (i != height) { ! SendError(tprintf("Error: EOF reached prematurely. " ! "(x%d != %d || y%d != %d)", j, width, i, height)); my_close_file(fp, &filemode); ! return -2; } map->grav = 100; *************** *** 324,334 **** if (!MapNoBridgify(map)) make_bridges(map); ! sprintf(map->mapname, args[0]); ! notify(player, "Loading complete!"); my_close_file(fp, &filemode); ! notify(player, "Clearing Mechs off Newly Loaded Map"); ! if (player != 1) map_clearmechs(player, data, ""); } --- 312,352 ---- if (!MapNoBridgify(map)) make_bridges(map); ! sprintf(map->mapname, mapname); my_close_file(fp, &filemode); + return 0; + } ! void map_loadmap(dbref player, void *data, char *buffer) ! { ! MAP *map; ! char *args[1]; ! ! map = (MAP *) data; ! ! if (!CheckData(player, map)) ! return; ! ! DOCHECK(mech_parseattributes(buffer, args, 1) != 1, ! "Invalid number of arguments!"); ! notify(player, tprintf("Loading %s", args[0])); ! switch (map_load(map, args[0])) { ! case -1: ! notify(player, "Map not found."); ! return; ! case -2: ! notify(player, "Map invalid."); ! return; ! case 0: ! notify(player, "Map loaded."); ! break; ! default: ! notify(player, "Unknown error while loading map!"); ! return; ! } ! ! if (player != 1) { ! notify(player, "Clearing Mechs off Newly Loaded Map"); map_clearmechs(player, data, ""); + } } Index: map.los.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/map.los.c,v retrieving revision 1.3.2.9 retrieving revision 1.3.2.10 diff -C2 -d -r1.3.2.9 -r1.3.2.10 *** map.los.c 10 Dec 2002 13:04:17 -0000 1.3.2.9 --- map.los.c 30 Sep 2003 01:38:36 -0000 1.3.2.10 *************** *** 291,295 **** } ! if (!IsLit3(mech)) continue; --- 291,295 ---- } ! if (!MechLites(mech)) continue; Index: mech.advanced.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.advanced.c,v retrieving revision 1.3.2.5 retrieving revision 1.3.2.6 diff -C2 -d -r1.3.2.5 -r1.3.2.6 *** mech.advanced.c 8 Aug 2002 11:46:29 -0000 1.3.2.5 --- mech.advanced.c 30 Sep 2003 01:38:36 -0000 1.3.2.6 *************** *** 23,26 **** --- 23,27 ---- #include "mech.h" #include "mech.events.h" + #include "coolmenu.h" #include "p.mech.ecm.h" #include "mech.ecm.h" *************** *** 1726,1727 **** --- 1727,1834 ---- return; } + + #define MECHPREF_FLAG_INVERTED 0x01 + #define MECHPREF_FLAG_NEGATIVE 0x02 + + static struct mechpref_info { + unsigned char bit; + unsigned char flags; + char * name; + char * msg; + } mech_preferences[] = { + { MECHPREF_PKILL, MECHPREF_FLAG_INVERTED, "MWSafety", + "MechWarrior Safeties flipped" }, + { MECHPREF_SLWARN, 0, "SLWarn", + "The warning when lit by searchlight is now" }, + { MECHPREF_AUTOFALL, MECHPREF_FLAG_NEGATIVE, "AutoFall", + "Suicidal jumps off cliffs toggled" }, + { MECHPREF_NOARMORWARN, MECHPREF_FLAG_INVERTED, "ArmorWarn", + "Low-armor warnings turned" }, + { MECHPREF_NOAMMOWARN, MECHPREF_FLAG_INVERTED, "AmmoWarn", + "Warning when running out of Ammunition switched" }, + { MECHPREF_AUTOCON_SD, MECHPREF_FLAG_NEGATIVE, "AutoconShutdown", + "Autocon on shutdown units turned" }, + { MECHPREF_NOFRIENDLYFIRE, 0, "FFSafety", + "Friendly Fire Safeties flipped" }, + }; + #define NUM_MECHPREFERENCES (sizeof(mech_preferences) / sizeof(struct mechpref_info)) + + static MECH *target_mech; + + static char *display_mechpref(int i) + { + static char buf[256]; + struct mechpref_info info = mech_preferences[i]; + char * state; + + if (((MechPrefs(target_mech) & info.bit) && + (info.flags & MECHPREF_FLAG_INVERTED)) || + (!(MechPrefs(target_mech) & info.bit) && + !(info.flags & MECHPREF_FLAG_INVERTED))) { + if (info.flags & MECHPREF_FLAG_NEGATIVE) + state = "%ch%cgOFF%cn"; + else + state = "%ch%crOFF%cn"; + } else { + if (info.flags & MECHPREF_FLAG_NEGATIVE) + state = "%ch%crON%cn"; + else + state = "%ch%cgON%cn"; + } + + sprintf(buf, " %-40s%s", info.name, state); + return buf; + } + + void mech_mechprefs(dbref player, void * data, char * buffer) + { + MECH * mech = (MECH *) data; + int nargs; + char *args[2]; + coolmenu *c; + + cch(MECH_USUALSMO); + nargs = mech_parseattributes(buffer, args, 1); + if (!nargs) { + /* Show mechprefs */ + target_mech = mech; + c = SelCol_FunStringMenuK(1, "Mech Preferences", display_mechpref, + NUM_MECHPREFERENCES); + ShowCoolMenu(player, c); + KillCoolMenu(c); + } else { + int i; + struct mechpref_info info; + char *newstate; + + for (i = 0; i < NUM_MECHPREFERENCES; i++) { + if (strcasecmp(args[0], mech_preferences[i].name) == 0) + break; + } + if (i == NUM_MECHPREFERENCES) { + notify(player, tprintf("Unknown MechPreference: %s", args[0])); + return; + } + info = mech_preferences[i]; + if (MechPrefs(mech) & info.bit) + MechPrefs(mech) &= ~(info.bit); + else + MechPrefs(mech) |= (info.bit); + + if (((MechPrefs(target_mech) & info.bit) && + (info.flags & MECHPREF_FLAG_INVERTED)) || + (!(MechPrefs(target_mech) & info.bit) && + !(info.flags & MECHPREF_FLAG_INVERTED))) { + if (info.flags & MECHPREF_FLAG_NEGATIVE) + newstate = "%ch%cgOFF%cn"; + else + newstate = "%ch%crOFF%cn"; + } else { + if (info.flags & MECHPREF_FLAG_NEGATIVE) + newstate = "%ch%crON%cn"; + else + newstate = "%ch%cgON%cn"; + } + notify(player, tprintf("%s %s", info.msg, newstate)); + } + } Index: mech.combat.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.combat.c,v retrieving revision 1.7.2.11 retrieving revision 1.7.2.12 diff -C2 -d -r1.7.2.11 -r1.7.2.12 *** mech.combat.c 3 Jun 2003 18:26:42 -0000 1.7.2.11 --- mech.combat.c 30 Sep 2003 01:38:36 -0000 1.7.2.12 *************** *** 504,508 **** { ishex = 1; ! if (!IsArtillery(weaptype) && MechLockFire(mech)) /* look for enemies in the default hex cause they may have moved */ if ((tempMech = --- 504,508 ---- { ishex = 1; ! if (!sight && !IsArtillery(weaptype) && MechLockFire(mech)) /* look for enemies in the default hex cause they may have moved */ if ((tempMech = *************** *** 572,576 **** DOCHECK0(mapx < 0 || mapx >= mech_map->map_width || mapy < 0 || mapy >= mech_map->map_height, "Map coordinates out of range!"); ! if (!IsArtillery(weaptype)) /* look for enemies in that hex... */ if ((tempMech = --- 572,576 ---- DOCHECK0(mapx < 0 || mapx >= mech_map->map_width || mapy < 0 || mapy >= mech_map->map_height, "Map coordinates out of range!"); ! if (!sight && !IsArtillery(weaptype)) /* look for enemies in that hex... */ if ((tempMech = *************** *** 609,612 **** --- 609,615 ---- ((MechTarget(mech) != tempMech->mynum) || Locking(mech)), "You need a stable lock to fire on that target!"); + DOCHECK0(MechTeam(tempMech) == MechTeam(mech) && + MechNoFriendlyFire(mech), + "You can't fire on a teammate with FFSafeties on!"); DOCHECK0(MechType(tempMech) == CLASS_MW && MechType(mech) != CLASS_MW && Index: mech.combat.misc.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.combat.misc.c,v retrieving revision 1.5.2.2 retrieving revision 1.5.2.3 diff -C2 -d -r1.5.2.2 -r1.5.2.3 *** mech.combat.misc.c 21 Jul 2002 23:20:48 -0000 1.5.2.2 --- mech.combat.misc.c 30 Sep 2003 01:38:36 -0000 1.5.2.3 *************** *** 144,147 **** --- 144,151 ---- SetWCheck(mech); + + if (!MechAmmoWarn(mech)) + return; + for (i = 0; i < NUM_CRITICALS; i++) { cl = CritsInLoc(mech, i); Index: mech.consistency.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.consistency.c,v retrieving revision 1.6.2.2 retrieving revision 1.6.2.3 diff -C2 -d -r1.6.2.2 -r1.6.2.3 *** mech.consistency.c 6 Dec 2002 14:20:39 -0000 1.6.2.2 --- mech.consistency.c 30 Sep 2003 01:38:36 -0000 1.6.2.3 *************** *** 310,313 **** --- 310,315 ---- calc_ints(mech, &ints_c, &ints_tot); for (i = 0; i < NUM_SECTIONS; i++) { + if (!GetSectOInt(mech, i)) + continue; armor += MyGetSectOArmor(mech, i); armor += MyGetSectORArmor(mech, i); *************** *** 425,428 **** --- 427,432 ---- } for (i = 0; i < NUM_SECTIONS; i++) { + if (!(GetSectOInt(mech, i))) + continue; armor += MyGetSectOArmor(mech, i); armor += MyGetSectORArmor(mech, i); Index: mech.contacts.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.contacts.c,v retrieving revision 1.6.2.4 retrieving revision 1.6.2.5 diff -C2 -d -r1.6.2.4 -r1.6.2.5 *** mech.contacts.c 13 Jul 2002 14:18:22 -0000 1.6.2.4 --- mech.contacts.c 30 Sep 2003 01:38:36 -0000 1.6.2.5 *************** *** 164,171 **** statusstr[sptr++] = 'B'; ! if (IsLit3(target)) statusstr[sptr++] = 'L'; ! if (IsLit2(target)) statusstr[sptr++] = 'l'; --- 164,171 ---- statusstr[sptr++] = 'B'; ! if (MechLites(target)) statusstr[sptr++] = 'L'; ! if (MechLit(target)) statusstr[sptr++] = 'l'; *************** *** 221,225 **** case 2: cRet = Destroyed(mechTarget) ? 'D' : ! IsLit2(mechTarget) ? 'l' : IsLit3(mechTarget) ? 'L' : ' '; break; case 3: --- 221,225 ---- case 2: cRet = Destroyed(mechTarget) ? 'D' : ! MechLites(mechTarget) ? 'L' : MechLit(mechTarget) ? 'l' : ' '; break; case 3: Index: mech.damage.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.damage.c,v retrieving revision 1.5.2.9 retrieving revision 1.5.2.10 diff -C2 -d -r1.5.2.9 -r1.5.2.10 *** mech.damage.c 7 Dec 2002 18:28:20 -0000 1.5.2.9 --- mech.damage.c 30 Sep 2003 01:38:36 -0000 1.5.2.10 *************** *** 224,236 **** } } ! if (seriousness > 0) mech_notify(wounded, MECHALL, tprintf("%sWARNING: %s%s Armor %s", ! MySeriousColorStr(wounded, ! seriousness), ! ShortArmorSectionString ! (MechType(wounded), ! MechMove(wounded), hitloc), ! isrear ? " (Rear)" : "", MySeriousStr(wounded, ! seriousness))); return intDamage > 0 ? intDamage : 0; } --- 224,233 ---- } } ! if (seriousness > 0 && MechArmorWarn(wounded)) mech_notify(wounded, MECHALL, tprintf("%sWARNING: %s%s Armor %s", ! MySeriousColorStr(wounded, seriousness), ! ShortArmorSectionString(MechType(wounded), ! MechMove(wounded), hitloc), ! isrear ? " (Rear)" : "", MySeriousStr(wounded, seriousness))); return intDamage > 0 ? intDamage : 0; } Index: mech.fire.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.fire.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** mech.fire.c 18 Jan 2002 14:21:53 -0000 1.2 --- mech.fire.c 30 Sep 2003 01:38:36 -0000 1.2.2.1 *************** *** 136,139 **** --- 136,140 ---- "Your tank is started! You can not extinguish the flames while your tank is started!"); DOCHECK(!Burning(mech), "This unit is not on fire!"); + DOCHECK(Extinguishing(mech), "You're already trying to put out the fire!"); mech_notify(mech, MECHALL, "You begin to exitinguish the fires!"); *************** *** 141,144 **** --- 142,169 ---- MECHEVENT(mech, EVENT_VEHICLE_EXTINGUISH, vehicle_extinquish_fire_event, VEHICLE_EXTINGUISH_TICK, 0); + } + + /* + * Mechs entering level 2 water, or proning in level 1 water should + * extinguish any inferno currently burning. + */ + void water_extinguish_inferno(MECH * mech) + { + int elev = MechElevation(mech); + MAP * map = getMap(mech->mapindex); + + if (!InWater(mech) || MechType(mech) != CLASS_MECH || + !Jellied(mech) || (elev == -1 && !Fallen(mech))) + return; + + event_remove_type_data(EVENT_BURN, (void *) mech); + MechCritStatus(mech) &= ~JELLIED; + + mech_notify(mech, MECHALL, "The flames extinguish in a roar of steam!"); + MechLOSBroadcast(mech, "is surrounded by a plume of steam as the flames extinguish."); + + /* According to FASA, the inferno jelly should keep on burning on the + * water hex. We'll just add some steam (smoke) instead. */ + add_decoration(map, MechX(mech), MechY(mech), TYPE_SMOKE, SMOKE, 120); } Index: mech.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.h,v retrieving revision 1.9.2.8 retrieving revision 1.9.2.9 diff -C2 -d -r1.9.2.8 -r1.9.2.9 *** mech.h 10 Dec 2002 13:50:53 -0000 1.9.2.8 --- mech.h 30 Sep 2003 01:38:36 -0000 1.9.2.9 *************** *** 569,573 **** /* Mech Preferences list */ ! #define MECHPREF_PKILL 0x01 /* Are you sure you want to kill MWs? */ typedef struct { --- 569,580 ---- /* Mech Preferences list */ ! #define MECHPREF_PKILL 0x01 /* Kill MWs anyway */ ! #define MECHPREF_SLWARN 0x02 /* Warn when lit by slite */ ! #define MECHPREF_AUTOFALL 0x04 /* Jump off cliffs (don't try to avoid) */ ! #define MECHPREF_NOARMORWARN 0x08 /* Don't warn when armor is getting low */ ! #define MECHPREF_NOAMMOWARN 0x10 /* Don't warn when ammo is getting low */ ! #define MECHPREF_STANDANYWAY 0x20 /* Try to stand even when BTH too high */ ! #define MECHPREF_AUTOCON_SD 0x40 /* Autocon on non-started units */ ! #define MECHPREF_NOFRIENDLYFIRE 0x80 /* Disallow firing on teammates */ typedef struct { Index: mech.lite.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.lite.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.2.1 diff -C2 -d -r1.1.1.1 -r1.1.1.1.2.1 *** mech.lite.c 3 Jan 2002 01:01:28 -0000 1.1.1.1 --- mech.lite.c 30 Sep 2003 01:38:36 -0000 1.1.1.1.2.1 *************** *** 18,55 **** #include "p.mech.utils.h" ! void cause_lite(MECH * mech, MECH * tempMech) { ! /* Selectively and _creatively_ cause light */ ! /* uh. huh. right. */ ! /* See where from mech is facing, compare it to bearing to to mech */ ! /* if within front arc, target's lit */ ! if (IsLit2(tempMech)) ! return; /* No senseless waste of effort */ ! if (!(InWeaponArc(mech, MechFX(tempMech), ! MechFY(tempMech)) & FORWARDARC)) return; ! /* Time for _light_ */ ! MechCritStatus(tempMech) |= SLITE_LIT; } void end_lite_check(MECH * mech) { ! MAP *map; ! MECH *t; int i; ! if (!IsLit2(mech)) return; ! if (!(map = FindObjectsData(mech->mapindex))) return; for (i = 0; i < map->first_free; i++) { if (!(t = FindObjectsData(map->mechsOnMap[i]))) continue; ! if ((MechSpecialsStatus(t) & SLITE_ON) && ! FaMechRange(t, mech) < LITE_RANGE) ! if (InWeaponArc(t, MechFX(mech), MechFY(mech)) & FORWARDARC) ! return; } MechCritStatus(mech) &= ~SLITE_LIT; } --- 18,75 ---- #include "p.mech.utils.h" ! /* If the target is in the front arc, and Line of Sight is not blocked ! * (by terrain, water hexes or more than 2 'points' of wood) and in ! * range, the target is lit. ! */ ! static int mech_lites_target(MECH * mech, MECH * target) { ! MAP * map = getMap(mech->mapindex); ! int losflag = MechToMech_LOSFlag(map, mech, target); ! if (!MechLites(mech)) ! return 0; ! if (FaMechRange(mech, target) > LITE_RANGE) ! return 0; ! if (!(InWeaponArc(mech, MechFX(target), ! MechFY(target)) & FORWARDARC)) ! return 0; ! if ((losflag & MECHLOSFLAG_BLOCK) || ! MechLOSFlag_WoodCount(losflag) > 2 || ! MechLOSFlag_WaterCount(losflag) != 0) ! return 0; ! return 1; ! } ! ! void cause_lite(MECH * mech, MECH * tempMech) ! { ! if (MechLit(tempMech)) return; ! if (mech_lites_target(mech, tempMech)) { ! MechCritStatus(tempMech) |= SLITE_LIT; ! if (MechSLWarn(tempMech)) ! mech_notify(tempMech, MECHALL, "You are being illuminated!"); ! } } void end_lite_check(MECH * mech) { ! MAP * map = getMap(mech->mapindex); ! MECH * t; int i; ! if (!MechLit(mech)) return; ! if (!map) return; for (i = 0; i < map->first_free; i++) { + if (i == mech->mapnumber) + continue; if (!(t = FindObjectsData(map->mechsOnMap[i]))) continue; ! if (mech_lites_target(t, mech)) ! return; } MechCritStatus(mech) &= ~SLITE_LIT; + if (MechSLWarn(mech)) + mech_notify(mech, MECHALL, "You are no longer being illuminated."); } Index: mech.los.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.los.c,v retrieving revision 1.2.2.4 retrieving revision 1.2.2.5 diff -C2 -d -r1.2.2.4 -r1.2.2.5 *** mech.los.c 24 Jun 2002 14:11:42 -0000 1.2.2.4 --- mech.los.c 30 Sep 2003 01:38:36 -0000 1.2.2.5 *************** *** 286,291 **** /* Possibly do a quickie check only */ if (mech && target) { ! if (map->LOSinfo[mech-> ! mapnumber][target->mapnumber] & MECHLOSFLAG_PARTIAL) MechStatus(target) |= PARTIAL_COVER; else --- 286,290 ---- /* Possibly do a quickie check only */ if (mech && target) { ! if (MechToMech_LOSFlag(map, mech, target) & MECHLOSFLAG_PARTIAL) MechStatus(target) |= PARTIAL_COVER; else *************** *** 293,298 **** return Sensor_ToHitBonus(mech, target, ! map->LOSinfo[mech->mapnumber][target->mapnumber], ! map->maplight, hexRange, wAmmoMode); } return 0; --- 292,297 ---- return Sensor_ToHitBonus(mech, target, ! MechToMech_LOSFlag(map, mech, target), ! map->maplight, hexRange, wAmmoMode); } return 0; *************** *** 310,316 **** } - #define from mech->mapnumber - #define to target->mapnumber - int InLineOfSight(MECH * mech, MECH * target, int x, int y, float hexRange) { --- 309,312 ---- *************** *** 318,322 **** float x1, y1; int arc; ! int i; map = getMap(mech->mapindex); --- 314,318 ---- float x1, y1; int arc; ! int losflag; map = getMap(mech->mapindex); *************** *** 347,374 **** if (mech && target) { #ifndef ADVANCED_LOS ! i = map->LOSinfo[from][to]; ! if (Sensor_CanSee(mech, target, &i, arc, hexRange, map->mapvis, map->maplight, map->cloudbase)) { ! map->LOSinfo[from][to] |= (MECHLOSFLAG_SEEN | MECHLOSFLAG_SEESP | MECHLOSFLAG_SEESS); return 1; } else { ! map->LOSinfo[from][to] &= ~(MECHLOSFLAG_SEEN | MECHLOSFLAG_SEESP | ! MECHLOSFLAG_SEESS); return 0; } #else ! if (map->LOSinfo[from][to] & (MECHLOSFLAG_SEESP | ! MECHLOSFLAG_SEESS)) ! return (map->LOSinfo[from][to] & (MECHLOSFLAG_SEESP | MECHLOSFLAG_SEESS | ! MECHLOSFLAG_BLOCK)); #endif return 0; } ! i = CalculateLOSFlag(mech, NULL, map, x, y, 0, hexRange); ! return Sensor_CanSee(mech, NULL, &i, arc, hexRange, map->mapvis, ! map->maplight, map->cloudbase); } --- 343,370 ---- if (mech && target) { #ifndef ADVANCED_LOS ! losflag = MechToMech_LOSFlag(map, mech, target); ! if (Sensor_CanSee(mech, target, &losflag, arc, hexRange, map->mapvis, map->maplight, map->cloudbase)) { ! map->LOSinfo[mech->mapnumber][target->mapnumber] |= (MECHLOSFLAG_SEEN | MECHLOSFLAG_SEESP | MECHLOSFLAG_SEESS); return 1; } else { ! map->LOSinfo[mech->mapnumber][target->mapnumber] &= ~(MECHLOSFLAG_SEEN | MECHLOSFLAG_SEESP | ! MECHLOSFLAG_SEESS); return 0; } #else ! if (MechToMech_LOSFlag(map, mech, target) & (MECHLOSFLAG_SEESP | ! MECHLOSFLAG_SEESS)) ! return MechToMech_LOSFlag(map, mech, target) & (MECHLOSFLAG_SEESP | MECHLOSFLAG_SEESS | ! MECHLOSFLAG_BLOCK); #endif return 0; } ! losflag = CalculateLOSFlag(mech, NULL, map, x, y, 0, hexRange); ! return Sensor_CanSee(mech, NULL, &losflag, arc, hexRange, map->mapvis, ! map->maplight, map->cloudbase); } Index: mech.move.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.move.c,v retrieving revision 1.5.2.15 retrieving revision 1.5.2.16 diff -C2 -d -r1.5.2.15 -r1.5.2.16 *** mech.move.c 3 Jun 2003 13:43:24 -0000 1.5.2.15 --- mech.move.c 30 Sep 2003 01:38:36 -0000 1.5.2.16 *************** *** 36,39 **** --- 36,41 ---- #include "p.template.h" #include "p.map.conditions.h" + #include "p.mech.fire.h" + #include "mech.events.h" struct { *************** *** 421,424 **** --- 423,427 ---- MechSpeed(mech) = 0; MechFloods(mech); + water_extinguish_inferno(mech); possible_mine_poof(mech, MINE_STEP); *************** *** 428,434 **** --- 431,439 ---- { MECH *mech = (MECH *) data; + char *args[2]; int wcDeadLegs = 0; int tNeedsPSkill = 1; int tDoStand = 1; + int bth, standanyway = 0; cch(MECH_USUAL); *************** *** 448,451 **** --- 453,472 ---- DOCHECK(MechCritStatus(mech) & GYRO_DESTROYED, "You cannot stand with a destroyed gyro!"); + + bth = MechPilotSkillRoll_BTH(mech, 0); + if (mech_parseattributes(buffer, args, 1)) { + switch (tolower(args[0][0])) { + case 'c': + notify(player, tprintf("Your BTH to stand would be: %d", bth)); + return; + case 'a': + standanyway = 1; + break; + default: + notify(player, tprintf("Unknown argument!" + "use 'stand check' or 'stand anyway'")); + break; + } + } DOCHECK(!Fallen(mech), "You're already standing!"); DOCHECK(Standrecovering(mech), *************** *** 454,457 **** --- 475,480 ---- DOCHECK(ChangingHulldown(mech), "You are busy changing your hulldown mode"); + DOCHECK(!standanyway && bth > 12, + "You would fail; use 'stand anyway' if you really want to stand."); MakeMechStand(mech); *************** *** 747,752 **** "Your cannot possibly control a VTOL going this fast with a destroyed tail rotor!"); DOCHECK(MechType(mech) == CLASS_MECH && ((MechZ(mech) < 0 && ! (MechRTerrain(mech) == WATER || MechRTerrain(mech) == BRIDGE)) ! || MechRTerrain(mech) == HIGHWATER), "You can't run through water!"); } --- 770,775 ---- "Your cannot possibly control a VTOL going this fast with a destroyed tail rotor!"); DOCHECK(MechType(mech) == CLASS_MECH && ((MechZ(mech) < 0 && ! (MechRTerrain(mech) == WATER || MechRTerrain(mech) == BRIDGE || ! MechRTerrain(mech) == ICE)) || MechRTerrain(mech) == HIGHWATER), "You can't run through water!"); } *************** *** 1348,1351 **** --- 1371,1375 ---- MechFloods(mech); + water_extinguish_inferno(mech); StopStaggerCheck(mech); } *************** *** 1535,1538 **** --- 1559,1563 ---- -1, 0, -1, 0, 0); MechFloods(mech); + water_extinguish_inferno(mech); } if (damage % 5) { *************** *** 1541,1544 **** --- 1566,1570 ---- (damage % 5), -1, -1, 0, -1, 0, 0); MechFloods(mech); + water_extinguish_inferno(mech); } Index: mech.notify.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.notify.c,v retrieving revision 1.3.2.11 retrieving revision 1.3.2.12 diff -C2 -d -r1.3.2.11 -r1.3.2.12 *** mech.notify.c 10 Dec 2002 13:50:54 -0000 1.3.2.11 --- mech.notify.c 30 Sep 2003 01:38:36 -0000 1.3.2.12 *************** *** 273,280 **** notify(player, buf); } ! if (IsLit3(mech)) { strcpy(buf + spaces, "%cg%chSEARCHLIGHT ON%cn"); notify(player, buf); ! } else if (IsLit2(mech)) { strcpy(buf + spaces, "%cg%chILLUMINATED%cn"); notify(player, buf); --- 273,280 ---- notify(player, buf); } ! if (MechLites(mech)) { strcpy(buf + spaces, "%cg%chSEARCHLIGHT ON%cn"); notify(player, buf); ! } else if (MechLit(mech)) { strcpy(buf + spaces, "%cg%chILLUMINATED%cn"); notify(player, buf); Index: mech.physical.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.physical.c,v retrieving revision 1.4.2.6 retrieving revision 1.4.2.7 diff -C2 -d -r1.4.2.6 -r1.4.2.7 *** mech.physical.c 2 Jun 2003 14:44:04 -0000 1.4.2.6 --- mech.physical.c 30 Sep 2003 01:38:36 -0000 1.4.2.7 *************** *** 670,673 **** --- 670,676 ---- "You can only punch vehicles while you're fallen"); + DOCHECKMA(MechTeam(target) == MechTeam(mech) && MechNoFriendlyFire(mech), + "You can't attack a teammate with FFSafeties on!"); + DOCHECKMA(MechType(target) == CLASS_MW && !MechPKiller(mech), "That's a living, breathing person! Switch off the safety first, " Index: mech.sensor.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.sensor.c,v retrieving revision 1.3.2.4 retrieving revision 1.3.2.5 diff -C2 -d -r1.3.2.4 -r1.3.2.5 *** mech.sensor.c 11 Dec 2002 12:45:55 -0000 1.3.2.4 --- mech.sensor.c 30 Sep 2003 01:38:36 -0000 1.3.2.5 *************** *** 351,355 **** MechNumSeen(mech) = MAX(0, MechNumSeen(mech) - 1); f &= ~MECHLOSFLAG_SEEN; ! if ((Started(target) || SeeWhenShutdown(target)) && (st = valid_to_notice(mech, target, wlf)) && seeanew < 3) { if (st & AUTOCON_WARN) --- 351,356 ---- MechNumSeen(mech) = MAX(0, MechNumSeen(mech) - 1); f &= ~MECHLOSFLAG_SEEN; ! if ((Started(target) || SeeWhenShutdown(target) || ! MechAutoconSD(mech)) && (st = valid_to_notice(mech, target, wlf)) && seeanew < 3) { if (st & AUTOCON_WARN) *************** *** 411,415 **** f |= MECHLOSFLAG_SEEN; *fl = f; ! if ((Started(target) || SeeWhenShutdown(target)) && (st = valid_to_notice(mech, target, -1)) && seeanew < 2) { if (st & AUTOCON_WARN) --- 412,417 ---- f |= MECHLOSFLAG_SEEN; *fl = f; ! if ((Started(target) || SeeWhenShutdown(target) || ! MechAutoconSD(mech)) && (st = valid_to_notice(mech, target, -1)) && seeanew < 2) { if (st & AUTOCON_WARN) Index: mech.sensor.functions.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.sensor.functions.c,v retrieving revision 1.1.1.1.2.7 retrieving revision 1.1.1.1.2.8 diff -C2 -d -r1.1.1.1.2.7 -r1.1.1.1.2.8 *** mech.sensor.functions.c 6 Jul 2002 20:41:03 -0000 1.1.1.1.2.7 --- mech.sensor.functions.c 30 Sep 2003 01:38:36 -0000 1.1.1.1.2.8 *************** *** 46,51 **** /* Prior requirement: the seechance > 0. We assume it so, and only examine the flag. */ - #define wood_count(a) (((a / MECHLOSFLAG_WOOD) % MECHLOSMAX_WOOD)) - #define water_count(a) (((a / MECHLOSFLAG_WATER) % MECHLOSMAX_WATER)) extern float ActualElevation(MAP * map, int x, int y, MECH * mech); --- 46,49 ---- *************** *** 54,70 **** CSEEFUNC(vislight_csee, !(map->sensorflags & (1 << SENSOR_VIS)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_FIRE | MECHLOSFLAG_SMOKE)) && ! wood_count(f) < 3 && (!t || MechZ(t) >= 0 || ActualElevation(getMap(t->mapindex), MechX(t), MechY(t), t) >= 0.0 ! || water_count(f) < 6)); /* Liteamp doesn't see into water, thanks to reflections etc */ CSEEFUNC(liteamp_csee, !(map->sensorflags & (1 << SENSOR_LA)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_FIRE | MECHLOSFLAG_SMOKE)) && ! (!t || !IsLit(t)) && wood_count(f) < 2 && !(water_count(f))); /* Not too good with woods, infra.. too much variation in temperature */ CSEEFUNC(infrared_csee, !(map->sensorflags & (1 << SENSOR_IR)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_FIRE)) && ! wood_count(f) < 6 && (!t || (MechType(t) != CLASS_BSUIT && MechType(t) != CLASS_MW))); --- 52,68 ---- CSEEFUNC(vislight_csee, !(map->sensorflags & (1 << SENSOR_VIS)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_FIRE | MECHLOSFLAG_SMOKE)) && ! MechLOSFlag_WoodCount(f) < 3 && (!t || MechZ(t) >= 0 || ActualElevation(getMap(t->mapindex), MechX(t), MechY(t), t) >= 0.0 ! || MechLOSFlag_WaterCount(f) < 6)); /* Liteamp doesn't see into water, thanks to reflections etc */ CSEEFUNC(liteamp_csee, !(map->sensorflags & (1 << SENSOR_LA)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_FIRE | MECHLOSFLAG_SMOKE)) && ! (!t || !IsLit(t)) && MechLOSFlag_WoodCount(f) < 2 && !(MechLOSFlag_WaterCount(f))); /* Not too good with woods, infra.. too much variation in temperature */ CSEEFUNC(infrared_csee, !(map->sensorflags & (1 << SENSOR_IR)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_FIRE)) && ! MechLOSFlag_WoodCount(f) < 6 && (!t || (MechType(t) != CLASS_BSUIT && MechType(t) != CLASS_MW))); *************** *** 73,77 **** CSEEFUNC(electrom_csee, !(map->sensorflags & (1 << SENSOR_EM)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_MNTN)) && ! wood_count(f) < 8 && !AnyECMDisturbed(m) && (!t || (MechType(t) != CLASS_MW))); --- 71,75 ---- CSEEFUNC(electrom_csee, !(map->sensorflags & (1 << SENSOR_EM)) && !(f & (MECHLOSFLAG_BLOCK | MECHLOSFLAG_MNTN)) && ! MechLOSFlag_WoodCount(f) < 8 && !AnyECMDisturbed(m) && (!t || (MechType(t) != CLASS_MW))); *************** *** 119,123 **** #define MOVE_MODIFIER(a) (abs(a) >= 10.75 ? 1 : 0) ! #define nwood_count(mech,a) (((a / MECHLOSFLAG_WOOD) % MECHLOSMAX_WOOD) + \ ((MechElevation(mech) + 2) < MechZ(mech) ? 0 : \ MechRTerrain(mech) == LIGHT_FOREST ? 1 : \ --- 117,121 ---- #define MOVE_MODIFIER(a) (abs(a) >= 10.75 ? 1 : 0) ! #define nwood_count(mech,a) (MechLOSFlag_WoodCount(a) + \ ((MechElevation(mech) + 2) < MechZ(mech) ? 0 : \ MechRTerrain(mech) == LIGHT_FOREST ? 1 : \ Index: mech.update.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.update.c,v retrieving revision 1.5.2.16 retrieving revision 1.5.2.17 diff -C2 -d -r1.5.2.16 -r1.5.2.17 *** mech.update.c 4 Jun 2003 21:07:04 -0000 1.5.2.16 --- mech.update.c 30 Sep 2003 01:38:36 -0000 1.5.2.17 *************** *** 441,444 **** --- 441,445 ---- MarkForLOSUpdate(mech); MechFloods(mech); + water_extinguish_inferno(mech); steppable_base_check(mech, x, y); if (MechChargeTarget(mech) > 0 && mudconf.btech_newcharge) *************** *** 1232,1236 **** int elevation, lastelevation; int oldterrain; ! int ot, le, ed, done = 0, tt; float f; --- 1233,1237 ---- int elevation, lastelevation; int oldterrain; ! int ot, le, ed, done = 0, tt, avoidbth; float f; *************** *** 1328,1337 **** mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! if (MechPilot(mech) == -1 || (!mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! (int) (fabs((MechSpeed(mech)) + MP1) / MP1) / 3)) ! || (mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! SkidMod(fabs(MechSpeed(mech)) / MP1)))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); --- 1329,1337 ---- mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! avoidbth = mudconf.btech_skidcliff ? ! SkidMod(fabs(MechSpeed(mech)) / MP1) : ! ((fabs((MechSpeed(mech)) + MP1) / MP1) / 3); ! if (MechPilot(mech) == -1 || (!MechAutoFall(mech) && ! MadePilotSkillRoll(mech, avoidbth))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); *************** *** 1461,1470 **** mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! if (MechPilot(mech) == -1 || (!mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! (int) (fabs((MechSpeed(mech)) + MP1) / MP1) / 3)) ! || (mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! SkidMod(fabs(MechSpeed(mech)) / MP1)))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); --- 1461,1469 ---- mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! avoidbth = mudconf.btech_skidcliff ? ! SkidMod(fabs(MechSpeed(mech)) / MP1) : ! ((fabs((MechSpeed(mech)) + MP1) / MP1) / 3); ! if (MechPilot(mech) == -1 || (!MechAutoFall(mech) && ! MadePilotSkillRoll(mech, avoidbth))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); *************** *** 1588,1597 **** mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! if (MechPilot(mech) == -1 || (!mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! (int) (fabs((MechSpeed(mech)) + MP1) / MP1) / 3)) ! || (mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! SkidMod(fabs(MechSpeed(mech)) / MP1)))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); --- 1587,1595 ---- mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! avoidbth = mudconf.btech_skidcliff ? ! SkidMod(fabs(MechSpeed(mech)) / MP1) : ! ((fabs((MechSpeed(mech)) + MP1) / MP1) / 3); ! if (MechPilot(mech) == -1 || (!MechAutoFall(mech) && ! MadePilotSkillRoll(mech, avoidbth))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); *************** *** 1771,1780 **** mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! if (MechPilot(mech) == -1 || (!mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! (int) (fabs((MechSpeed(mech)) + MP1) / MP1) / 3)) ! || (mudconf.btech_skidcliff && ! MadePilotSkillRoll(mech, ! SkidMod(fabs(MechSpeed(mech)) / MP1)))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); --- 1769,1777 ---- mech_notify(mech, MECHALL, "You notice a large drop in front of you"); ! avoidbth = mudconf.btech_skidcliff ? ! SkidMod(fabs(MechSpeed(mech)) / MP1) : ! ((fabs((MechSpeed(mech)) + MP1) / MP1) / 3); ! if (MechPilot(mech) == -1 || (!MechAutoFall(mech) && ! MadePilotSkillRoll(mech, avoidbth))) { mech_notify(mech, MECHALL, "You manage to stop before falling off."); Index: mech.utils.c =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/mech.utils.c,v retrieving revision 1.9.2.17 retrieving revision 1.9.2.18 diff -C2 -d -r1.9.2.17 -r1.9.2.18 *** mech.utils.c 3 Jun 2003 12:54:42 -0000 1.9.2.17 --- mech.utils.c 30 Sep 2003 01:38:36 -0000 1.9.2.18 *************** *** 529,532 **** --- 529,541 ---- } + int MechPilotSkillRoll_BTH(MECH *mech, int mods) + { + mods += FindSPilotPiloting(mech) + MechPilotSkillBase(mech); + if (In_Character(mech->mynum) && + Location(MechPilot(mech)) != mech->mynum) + mods += 5; + return mods; + } + int MadePilotSkillRoll_Advanced(MECH * mech, int mods, int succeedWhenFallen) *************** *** 539,552 **** return 0; roll = PRoll(mech); ! roll_needed = ! FindSPilotPiloting(mech) + mods + MechPilotSkillBase(mech); ! SendDebug(tprintf ! ("Attempting to make pilot skill roll. SPilot: %d, mods: %d, MechPilot: %d", ! FindSPilotPiloting(mech), mods, MechPilotSkillBase(mech))); - if (In_Character(mech->mynum) && - Location(MechPilot(mech)) != mech->mynum) - roll_needed += 5; mech_notify(mech, MECHPILOT, "You make a piloting skill roll!"); mech_notify(mech, MECHPILOT, --- 548,558 ---- return 0; roll = PRoll(mech); ! roll_needed = MechPilotSkillRoll_BTH(mech, mods); ! SendDebug(tprintf("Attempting to make pilot skill roll. " ! "SPilot: %d, mods: %d, MechPilot: %d, BTH: %d", ! FindSPilotPiloting(mech), mods, ! MechPilotSkillBase(mech), roll_needed)); mech_notify(mech, MECHPILOT, "You make a piloting skill roll!"); mech_notify(mech, MECHPILOT, Index: p.map.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/p.map.h,v retrieving revision 1.1.1.1.2.2 retrieving revision 1.1.1.1.2.3 diff -C2 -d -r1.1.1.1.2.2 -r1.1.1.1.2.3 *** p.map.h 4 Apr 2002 13:13:09 -0000 1.1.1.1.2.2 --- p.map.h 30 Sep 2003 01:38:36 -0000 1.1.1.1.2.3 *************** *** 19,22 **** --- 19,23 ---- void map_mapemit(dbref player, void *data, char *buffer); int water_distance(MAP * map, int x, int y, int dir, int max); + int map_load(MAP * map, char * mapname); void map_loadmap(dbref player, void *data, char *buffer); void map_savemap(dbref player, void *data, char *buffer); Index: p.mech.advanced.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/p.mech.advanced.h,v retrieving revision 1.1.1.1.2.1 retrieving revision 1.1.1.1.2.2 diff -C2 -d -r1.1.1.1.2.1 -r1.1.1.1.2.2 *** p.mech.advanced.h 18 Mar 2002 22:31:41 -0000 1.1.1.1.2.1 --- p.mech.advanced.h 30 Sep 2003 01:38:36 -0000 1.1.1.1.2.2 *************** *** 61,64 **** --- 61,65 ---- void mech_usebin(dbref player, MECH * mech, char *buffer); void mech_safety(dbref player, void *data, char *buffer); + void mech_mechprefs(dbref player, void *data, char *buffer); #endif /* _P_MECH_ADVANCED_H */ Index: p.mech.fire.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/p.mech.fire.h,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** p.mech.fire.h 1 Feb 2002 15:02:13 -0000 1.2 --- p.mech.fire.h 30 Sep 2003 01:38:36 -0000 1.2.2.1 *************** *** 9,10 **** --- 9,11 ---- void vehicle_extinquish_fire_event(EVENT * e); void vehicle_extinquish_fire(dbref player, MECH * mech, char *buffer); + void water_extinguish_inferno(MECH * mech); Index: p.mech.utils.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/p.mech.utils.h,v retrieving revision 1.2.2.3 retrieving revision 1.2.2.4 diff -C2 -d -r1.2.2.3 -r1.2.2.4 *** p.mech.utils.h 21 Jul 2002 21:21:44 -0000 1.2.2.3 --- p.mech.utils.h 30 Sep 2003 01:38:36 -0000 1.2.2.4 *************** *** 36,39 **** --- 36,40 ---- int FindTechSkill(dbref player, MECH * mech); int MadePilotSkillRoll(MECH * mech, int mods); + int MechPilotSkillRoll_BTH(MECH *mech, int mods); int MadePilotSkillRoll_Advanced(MECH * mech, int mods, int succeedWhenFallen); Index: weapons.fasa.h =================================================================== RCS file: /cvsroot/btech/btechmux/src/hcode/btech/weapons.fasa.h,v retrieving revision 1.3.2.1 retrieving revision 1.3.2.2 diff -C2 -d -r1.3.2.1 -r1.3.2.2 *** weapons.fasa.h 12 Jul 2002 19:23:32 -0000 1.3.2.1 --- weapons.fasa.h 30 Sep 2003 01:38:36 -0000 1.3.2.2 *************** *** 1,348 **** - /* ! * $Id$ ! * ! * Last modified: $Date$ ! * ! * Header file for official FASA weapons with official FASA stats. */ ! ! ! struct weapon_struct MechWeapons[] = { ! ! {"CL.AC/10", 30, TAMMO, 3, 10, 0, 5, 10, 15, 0, -1, -1, -1, 6, 10, ! 1100, -1, CLAT | RFAC, 124}, ! {"CL.AC/2", 30, TAMMO, 1, 2, 4, 8, 16, 24, 0, -1, -1, -1, 1, 45, 500, ! -1, CLAT | RFAC, 37}, ! {"CL.AC/20", 30, TAMMO, 7, 20, 0, 3, 6, 9, 0, -1, -1, -1, 9, 5, 1300, ! -1, CLAT | RFAC, 178}, ! {"CL.AC/5", 30, TAMMO, 1, 5, 3, 6, 12, 18, 0, -1, -1, -1, 3, 20, 700, ! -1, CLAT | RFAC, 70}, ! {"CL.A-Pod", 30, TBEAM, 0, 0, 0, 1, 1, 1, 0, -1, -1, -1, 1, 0, 50, -1, ! CLAT | A_POD, 1}, ! {"CL.Anti-MissileSystem", 10, TMISSILE, 1, 2, 0, 1, 1, 1, 0, -1, -1, ! -1, 1, 24, 50, -1, CLAT | AMS, 63}, ! {"CL.ArrowIVSystem", 60, TARTILLERY, 10, 20, 0, 0, 0, 6, 0, -1, -1, -1, ! 12, 5, 1200, -1, IDF | DAR | CLAT, 171}, ! {"CL.GaussRifle", 30, TAMMO, 1, 15, 2, 7, 15, 22, 0, -1, -1, -1, 6, 8, ! 1200, 20, GAUSS | CLAT, 321}, ! {"CL.LB10-XAC", 30, TAMMO, 2, 10, 0, 6, 12, 18, 0, -1, -1, -1, 5, 10, ! 1000, -1, LBX | CLAT, 148}, ! {"CL.LB2-XAC", 30, TAMMO, 1, 2, 4, 10, 20, 30, 0, -1, -1, -1, 3, 45, ! 500, -1, LBX | CLAT, 47}, ! {"CL.LB20-XAC", 30, TAMMO, 6, 20, 0, 4, 8, 12, 0, -1, -1, -1, 9, 5, ! 1200, -1, LBX | CLAT, 237}, ! {"CL.LB5-XAC", 30, TAMMO, 1, 5, 3, 8, 15, 24, 0, -1, -1, -1, 4, 20, ! 700, -1, LBX | CLAT, 93}, ! {"CL.LRM-10", 30, TMISSILE, 4, 1, 0, 7, 14, 21, 0, -1, -1, -1, 1, 12, ! 250, -1, IDF | CLAT, 109}, ! {"CL.LRM-15", 30, TMISSILE, 5, 1, 0, 7, 14, 21, 0, -1, -1, -1, 2, 8, ! 350, -1, IDF | CLAT, 164}, ! {"CL.LRM-20", 30, TMISSILE, 6, 1, 0, 7, 14, 21, 0, -1, -1, -1, 4, 6, ! 500, -1, IDF | CLAT, 220}, ! {"CL.LRM-5", 30, TMISSILE, 2, 1, 0, 7, 14, 21, 0, -1, -1, -1, 1, 24, ! 100, -1, IDF | CLAT, 55}, ! {"CL.MachineGun", 30, TAMMO, 0, 2, 0, 1, 2, 3, 0, -1, -1, -1, 1, 200, ! 25, -1, CLAT | GMG, 5}, ! {"CL.NarcBeacon", 30, TMISSILE, 1, 4, 0, 4, 8, 12, 0, -1, -1, -1, 1, 6, ! 200, -1, NARC | CLAT, 30}, ! {"CL.SRM-2", 30, TMISSILE, 2, 2, 0, 3, 6, 9, 0, -1, -1, -1, 1, 50, 50, ! -1, CLAT, 21}, ! {"CL.SRM-4", 30, TMISSILE, 3, 2, 0, 3, 6, 9, 0, -1, -1, -1, 1, 25, 100, ! -1, CLAT, 39}, ! {"CL.SRM-6", 30, TMISSILE, 4, 2, 0, 3, 6, 9, 0, -1, -1, -1, 1, 15, 150, ! -1, CLAT, 59}, ! {"CL.StreakSRM-2", 30, TMISSILE, 2, 2, 0, 4, 8, 12, 0, -1, -1, -1, 1, ! 50, 100, -1, STREAK | CLAT | NOSPA, 40}, ! {"CL.StreakSRM-4", 30, TMISSILE, 3, 2, 0, 4, 8, 12, 0, -1, -1, -1, 1, ! 25, 200, -1, STREAK | CLAT | NOSPA, 79}, ! {"CL.StreakSRM-6", 30, TMISSILE, 4, 2, 0, 4, 8, 12, 0, -1, -1, -1, 2, ! 15, 300, -1, STREAK | CLAT | NOSPA, 119}, ! {"CL.UltraAC/10", 30, TAMMO, 3, 10, 0, 6, 12, 18, 0, -1, -1, -1, 4, 10, ! 1000, -1, ULTRA | CLAT, 211}, ! {"CL.UltraAC/2", 30, TAMMO, 1, 2, 2, 9, 18, 27, 0, -1, -1, -1, 2, 45, ! 500, -1, ULTRA | CLAT, 62}, ! {"CL.UltraAC/20", 30, TAMMO, 7, 20, 0, 4, 8, 12, 0, -1, -1, -1, 8, 5, ! 1200, -1, ULTRA | CLAT, 337}, ! {"CL.UltraAC/5", 30, TAMMO, 1, 5, 0, 7, 14, 21, 0, -1, -1, -1, 3, 20, ! 700, -1, ULTRA | CLAT, 123}, ! {"IS.AC/10", 30, TAMMO, 3, 10, 0, 5, 10, 15, 0, -1, -1, -1, 7, 10, ! 1200, -1, RFAC, 124}, ! {"IS.AC/2", 30, TAMMO, 1, 2, 4, 8, 16, 24, 0, -1, -1, -1, 1, 45, 600, ! -1, RFAC, 37}, ! {"IS.AC/20", 30, TAMMO, 7, 20, 0, 3, 6, 9, 0, -1, -1, -1, 10, 5, 1400, ! -1, RFAC, 178}, ! {"IS.AC/5", 30, TAMMO, 1, 5, 3, 6, 12, 18, 0, -1, -1, -1, 4, 20, 800, ! -1, RFAC, 70}, ! {"IS.Anti-MissileSystem", 10, TMISSILE, 1, 2, 0, 1, 1, 1, 0, -1, -1, ! -1, 1, 12, 50, -1, AMS, 32}, ! {"IS.ArrowIVSystem", 60, TARTILLERY, 10, 20, 0, 0, 0, 5, 0, -1, -1, -1, ! 15, 5, 1500, -1, IDF | DAR, 171}, ! {"IS.GaussRifle", 30, TAMMO, 1, 15, 2, 7, 15, 22, 0, -1, -1, -1, 7, 8, ! 1500, 20, GAUSS, 321}, ! {"IS.LB10-XAC", 30, TAMMO, 2, 10, 0, 6, 12, 18, 0, -1, -1, -1, 6, 10, ! 1100, -1, LBX, 148}, ! {"IS.LRM-10", 30, TMISSILE, 4, 1, 6, 7, 14, 21, 0, -1, -1, -1, 2, 12, ! 500, -1, IDF, 90}, ! {"IS.LRM-15", 30, TMISSILE, 5, 1, 6, 7, 14, 21, 0, -1, -1, -1, 3, 8, ! 700, -1, IDF, 136}, ! {"IS.LRM-20", 30, TMISSILE, 6, 1, 6, 7, 14, 21, 0, -1, -1, -1, 5, 6, ! 1000, -1, IDF, 181}, ! {"IS.LRM-5", 30, TMISSILE, 2, 1, 6, 7, 14, 21, 0, -1, -1, -1, 1, 24, ! 200, -1, IDF, 45}, ! {"IS.LongTom", 60, TARTILLERY, 20, 20, 0, 0, 0, 20, 0, -1, -1, -1, 30, ! 5, 3000, -1, IDF | DAR, 171}, ! {"IS.MachineGun", 30, TAMMO, 0, 2, 0, 1, 2, 3, 0, -1, -1, -1, 1, 200, ! 50, -1, GMG, 5}, ! {"IS.NarcBeacon", 30, TMISSILE, 1, 4, 0, 3, 6, 9, 0, -1, -1, -1, 2, 6, ! 300, -1, NARC, 30}, ! {"IS.SRM-2", 30, TMISSILE, 2, 2, 0, 3, 6, 9, 0, -1, -1, -1, 1, 50, 100, ! -1, NONE, 21}, ! {"IS.SRM-4", 30, TMISSILE, 3, 2, 0, 3, 6, 9, 0, -1, -1, -1, 1, 25, 200, ! -1, NONE, 39}, ! {"IS.SRM-6", 30, TMISSILE, 4, 2, 0, 3, 6, 9, 0, -1, -1, -1, 2, 15, 300, ! -1, NONE, 59}, ! {"IS.Sniper", 60, TARTILLERY, 10, 10, 0, 0, 0, 12, 0, -1, -1, -1, 20, ! 10, 2000, -1, IDF | DAR, 86}, ! {"IS.StreakSRM-2", 30, TMISSILE, 2, 2, 0, 3, 6, 9, 0, -1, -1, -1, 1, ! 50, 150, -1, STREAK | NOSPA, 30}, ! {"IS.Thumper", 60, TARTILLERY, 6, 5, 0, 0, 0, 14, 0, -1, -1, -1, 15, ! 20, 1500, -1, IDF | DAR, 40}, ! {"IS.UltraAC/5", 30, TAMMO, 1, 5, 2, 6, 13, 20, 0, -1, -1, -1, 5, 20, ! 900, -1, ULTRA, 113}, ! {"PC.Blazer", 10, TAMMO, 0, 32, 0, 24, 48, 72, 0, -1, -1, -1, 1, 30, 0, ! -1, PC_HEAT, 1}, ! {"PC.Crossbow", 15, TAMMO, 0, 9, 0, 9, 18, 27, 0, -1, -1, -1, 1, 20, 0, ! -1, PC_IMPA | NOBOOM, 1}, ! {"PC.FederatedLongRifle", 10, TAMMO, 0, 9, 0, 22, 44, 66, 0, -1, -1, ! -1, 1, 50, 0, -1, PC_IMPA, 1}, ! {"PC.FlamerPistol", 7, TAMMO, 0, 7, 0, 4, 9, 13, 0, -1, -1, -1, 1, 50, ! 0, -1, PC_HEAT, 1}, ! {"PC.GyroslugRifle", 10, TAMMO, 0, 14, 0, 30, 60, 90, 0, -1, -1, -1, 1, ! 15, 0, -1, PC_IMPA, 1}, ! {"PC.HeavyGyrojetGun", 10, TAMMO, 0, 27, 0, 35, 70, 105, 0, -1, -1, -1, ! 1, 10, 0, -1, PC_IMPA, 1}, ! {"PC.IntekLaserRifle", 10, TAMMO, 0, 9, 0, 40, 80, 120, 0, -1, -1, -1, ! 1, 45, 0, -1, PC_HEAT | NOBOOM, 1}, ! {"PC.LaserRifle", 10, TAMMO, 0, 17, 0, 24, 48, 72, 0, -1, -1, -1, 1, ! 30, 0, -1, PC_HEAT | NOBOOM, 1}, ! {"PC.PulseLaserPistol", 10, TAMMO, 0, 11, 0, 5, 10, 15, 0, -1, -1, -1, ! 1, 50, 0, -1, PC_HEAT | NOBOOM, 1}, ! {"PC.PulseLaserRifle", 10, TAMMO, 0, 13, 0, 22, 44, 66, 0, -1, -1, -1, ! 1, 30, 0, -1, PC_HEAT | NOBOOM, 1}, ! {"PC.SMG", 5, TAMMO, 0, 10, 0, 7, 14, 20, 0, -1, -1, -1, 1, 50, 0, ! -1, PC_IMPA, 1}, ! {"PC.Shotgun", 15, TAMMO, 0, 12, 0, 6, 12, 18, 0, -1, -1, -1, 1, 10, 0, ! -1, PC_IMPA, 1}, ! {"PC.SternsnachtPistol", 10, TAMMO, 0, 16, 0, 7, 14, 20, 0, -1, -1, -1, ! 1, 50, 0, -1, PC_IMPA, 1}, ! {"PC.SunbeamLaserPistol", 7, TAMMO, 0, 18, 0, 8, 16, 24, 0, -1, -1, -1, ! 1, 50, 0, -1, PC_HEAT | NOBOOM, 1}, ! {"PC.ZeusHeavyRifle", 10, TAMMO, 0, 21, 0, 19, 38, 57, 0, -1, -1, -1, ! 1, 30, 0, -1, PC_IMPA, 1}, ! ! /* TacMunch stuff */ ! ! ! {"IS.ELRM-5", 30, TMISSILE, 3, 1, 10, 12, 24, 36, 0, -1, -1, -1, 1, ! 18, 600, -1, IDF | ELRM | NOSPA, 1000}, ! {"IS.ELRM-10", 30, TMISSILE, 6, 1, 10, 12, 24, 36, 0, -1, -1, -1, 4, 9, ! 800, -1, IDF | ELRM | NOSPA, 1000}, ! {"IS.ELRM-15", 30, TMISSILE, 8, 1, 10, 12, 24, 36, 0, -1, -1, -1, 6, 6, ! 1200, -1, IDF | ELRM | NOSPA, 1000}, ! {"IS.ELRM-20", 30, TMISSILE, 10, 1, 10, 12, 24, 36, 0, -1, -1, -1, 8, ! 4, 1800, -1, IDF | ELRM | NOSPA, 1000}, ! {"IS.LR_DFM-5", 30, TMISSILE, 2, 2, 4, 6, 12, 18, 0, -1, -1, -1, 1, 24, ! 200, -1, IDF | DFM | NOSPA, 1000}, ! {"IS.LR_DFM-10", 30, TMISSILE, 4, 2, 4, 6, 12, 18, 0, -1, -1, -1, 2, ! 12, 500, -1, IDF | DFM | NOSPA, 1000}, ! {"IS.LR_DFM-15", 30, TMISSILE, 5, 2, 4, 6, 12, 18, 0, -1, -1, -1, 3, 8, ! 700, -1, IDF | DFM | NOSPA, 1000}, ! {"IS.LR_DFM-20", 30, TMISSILE, 6, 2, 4, 6, 12, 18, 0, -1, -1, -1, 5, 6, ! 1000, -1, IDF | DFM | NOSPA, 1000}, ! {"IS.SR_DFM-2", 30, TMISSILE, 2, 3, 0, 2, 4, 6, 0, -1, -1, -1, 1, 50, ! 100, -1, DFM | NOSPA, 1000}, ! {"IS.SR_DFM-4", 30, TMISSILE, 3, 3, 0, 2, 4, 6, 0, -1, -1, -1, 1, 25, ! 200, -1, DFM | NOSPA, 1000}, ! {"IS.SR_DFM-6", 30, TMISSILE, 4, 3, 0, 2, 4, 6, 0, -1, -1, -1, 2, 15, ! 300, -1, DFM | NOSPA, 1000}, ! {"IS.StreakSRM-4", 30, TMISSILE, 3, 2, 0, 3, 6, 9, -1, -1, -1, 9, 1, ! 25, 300, -1, STREAK | NOSPA, 59}, ! {"IS.StreakSRM-6", 30, TMISSILE, 4, 2, 0, 3, 6, 9, -1, -1, -1, 9, 2, ! 15, 450, -1, STREAK | NOSPA, 89}, ! {"IS.Thunderbolt-5", 30, TMISSILE, 3, 5, 5, 6, 12, 18, 0, -1, -1, -1, ! 1, 12, 300, -1, IDF | NOSPA, 1000}, ! {"IS.Thunderbolt-10", 30, TMISSILE, 5, 10, 5, 6, 12, 18, 0, -1, -1, -1, ! 2, 6, 600, -1, IDF | NOSPA, 1000}, ! {"IS.Thunderbolt-15", 30, TMISSILE, 7, 15, 5, 6, 12, 18, 0, -1, -1, -1, ! 3, 4, 800, -1, IDF | NOSPA, 1000}, ! {"IS.Thunderbolt-20", 30, TMISSILE, 8, 20, 5, 6, 12, 18, 0, -1, -1, -1, ! 5, 3, 1100, -1, IDF | NOSPA, 1000}, ! {"IS.CaselessAC/2", 30, TAMMO, 1, 2, 4, 8, 16, 24, 0, -1, -1, -1, 1, ! 67, 600, -1, NOSPA | CASELESS, 1000}, ! {"IS.CaselessAC/5", 30, TAMMO, 1, 5, 3, 6, 12, 18, 0, -1, -1, -1, 4, ! 30, 800, -1, NOSPA | CASELESS, 1000}, ! {"IS.CaselessAC/10", 30, TAMMO, 3, 10, 0, 5, 10, 15, 0, -1, -1, -1, 6, ! 15, 1200, -1, NOSPA | CASELESS, 1000}, ! {"IS.CaselessAC/20", 30, TAMMO, 7, 20, 0, 3, 6, 9, 9, 0, -1, -1, -1, 8, ! 1400, -1, NOSPA | CASELESS, 1000}, ! {"IS.HyperAC/2", 30, TAMMO, 1, 2, 3, 10, 20, 35, 0, -1, -1, -1, 4, 30, ! 800, -1, NOSPA | HYPER, 1000}, ! {"IS.HyperAC/5", 30, TAMMO, 3, 5, 0, 8, 16, 28, 0, -1, -1, -1, 5, 15, ! 1200, -1, NOSPA | HYPER, 1000}, ! {"IS.HyperAC/10", 30, TAMMO, 7, 10, 0, 6, 12, 20, 0, -1, -1, -1, 6, 8, ! 1400, -1, NOSPA | HYPER, 1000}, ! {"IS.LB2-XAC", 30, TAMMO, 1, 2, 4, 9, 18, 27, 0, -1, -1, -1, 4, 45, ! 600, -1, LBX, 42}, ! {"IS.LB5-XAC", 30, TAMMO, 1, 5, 3, 7, 14, 21, 0, -1, -1, -1, 5, 20, ! 800, -1, LBX, 83}, ! {"IS.LB20-XAC", 30, TAMMO, 6, 20, 0, 4, 8, 12, 0, -1, -1, -1, 11, 5, ! 1400, -1, LBX, 237}, ! {"IS.UltraAC/2", 30, TAMMO, 1, 2, 4, 8, 17, 25, 0, -1, -1, -1, 3, 45, ! 700, -1, ULTRA, 56}, ! {"IS.UltraAC/10", 30, TAMMO, 4, 10, 0, 6, 12, 18, 0, -1, -1, -1, 7, 10, ! 1300, -1, ULTRA, 253}, ! {"IS.UltraAC/20", 30, TAMMO, 8, 20, 0, 3, 7, 10, 0, -1, -1, -1, 10, 5, ! 1500, -1, ULTRA, 282}, ! ! /* DCMS stuff */ ! ! ! {"IS.MRM-10", 30, TMISSILE, 4, 1, 0, 3, 8, 15, 0, -1, -1, -1, 2, ! 24, 300, -1, MRM, 56}, ! {"IS.MRM-20", 30, TMISSILE, 6, 1, 0, 3, 8, 15, 0, -1, -1, -1, 3, 12, ! 700, -1, MRM, 112}, ! {"IS.MRM-30", 30, TMISSILE, 10, 1, 0, 3, 8, 15, 0, -1, -1, -1, 5, 8, ! 1000, -1, MRM, 168}, ! {"IS.MRM-40", 30, TMISSILE, 12, 1, 0, 3, 8, 15, 0, -1, -1, -1, 7, 6, ! 1200, -1, MRM, 224}, ! ! /* .. normal cont'd ; energy weapons .. */ ! ! ! {"CL.ERLargeLaser", 30, TBEAM, 12, 10, 0, 8, 15, 25, 0, 5, 10, 15, ! 1, 0, 400, -1, CLAT, 249}, ! {"CL.ERMediumLaser", 30, TBEAM, 5, 7, 0, 5, 10, 15, 0, 3, 7, 10, 1, 0, ! 100, -1, CLAT, 108}, ! {"CL.ERPPC", 30, TBEAM, 15, 15, 0, 7, 14, 23, 0, 4, 10, 16, 2, 0, 600, ! -1, CLAT, 412}, ! {"CL.ERSmallLaser", 30, TBEAM, 2, 5, 0, 2, 4, 6, 0, 1, 2, 4, 1, 0, 50, ! -1, CLAT, 31}, ! {"CL.Flamer", 30, TBEAM, 3, 2, 0, 1, 2, 3, 0, -1, -1, -1, 1, 0, 50, ! -1, CLAT | CHEAT, 6}, ! {"CL.LargeLaser", 30, TBEAM, 8, 8, 0, 5, 10, 15, 0, 3, 6, 9, 1, 0, 400, ! -1, CLAT, 124}, ! {"CL.LargePulseLaser", 30, TBEAM, 10, 10, 0, 6, 14, 20, 0, 4, 10, 14, ! 2, 0, 600, -1, PULSE | CLAT, 265}, ! {"CL.MediumLaser", 30, TBEAM, 3, 5, 0, 3, 6, 9, 0, 2, 4, 6, 1, 0, 100, ! -1, CLAT, 46}, ! {"CL.MediumPulseLaser", 30, TBEAM, 4, 7, 0, 4, 8, 12, 0, 3, 5, 8, 1, 0, ! 200, -1, PULSE | CLAT, 111}, ! {"CL.PPC", 30, TBEAM, 10, 10, 3, 6, 12, 18, 3, 4, 7, 10, 2, 0, 600, ! -1, CLAT, 176}, ! {"CL.SmallLaser", 30, TBEAM, 1, 3, 0, 1, 2, 3, 0, 1, 2, -1, 1, 0, 50, ! -1, CLAT, 9}, ! {"CL.SmallPulseLaser", 30, TBEAM, 2, 3, 0, 2, 4, 6, 0, 1, 2, 4, 1, 0, ! 100, -1, PULSE | CLAT, 24}, ! {"IS.ERLargeLaser", 30, TBEAM, 12, 8, 0, 7, 14, 19, 0,... [truncated message content] |