/*
* $Id: mech.build.c,v 1.1.1.1 2005/01/11 21:18:11 kstevens Exp $
*
* Author: Markus Stenberg <fingon@iki.fi>
*
* Copyright (c) 1996 Markus Stenberg
* All rights reserved
*
* Last modified: Wed Apr 29 21:04:14 1998 fingon
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/file.h>
#include "mech.h"
#include "weapons.h"
#include "p.mech.partnames.h"
#include "p.mech.utils.h"
const int num_def_weapons = NUM_DEF_WEAPONS;
int CheckData(dbref player, void *data)
{
int returnValue = 1;
if (data == NULL) {
notify(player, "There is a problem with that item.");
notify(player, "The data is not properly allocated.");
notify(player, "Please notify a director of this.");
returnValue = 0;
}
return (returnValue);
}
void FillDefaultCriticals(MECH * mech, int index)
{
int loop;
for (loop = 0; loop < NUM_CRITICALS; loop++) {
MechSections(mech)[index].criticals[loop].type = EMPTY;
MechSections(mech)[index].criticals[loop].data = 0;
MechSections(mech)[index].criticals[loop].firemode = 0;
MechSections(mech)[index].criticals[loop].ammomode = 0;
}
if (MechType(mech) == CLASS_AERO)
switch (index) {
case AERO_COCKPIT:
MechSections(mech)[index].criticals[0].type =
I2Special(LIFE_SUPPORT);
MechSections(mech)[index].criticals[1].type =
I2Special(SENSORS);
MechSections(mech)[index].criticals[2].type =
I2Special(COCKPIT);
MechSections(mech)[index].criticals[3].type =
I2Special(SENSORS);
MechSections(mech)[index].criticals[4].type =
I2Special(LIFE_SUPPORT);
break;
case AERO_ENGINE:
for (loop = 0; loop < 12; loop++)
MechSections(mech)[index].criticals[loop].type =
I2Special(HEAT_SINK);
MechSections(mech)[index].criticals[2].type =
I2Special(ENGINE);
MechSections(mech)[index].criticals[10].type =
I2Special(ENGINE);
break;
}
if (MechType(mech) == CLASS_MECH)
switch (index) {
case HEAD:
MechSections(mech)[index].criticals[0].type =
I2Special(LIFE_SUPPORT);
MechSections(mech)[index].criticals[1].type =
I2Special(SENSORS);
MechSections(mech)[index].criticals[2].type =
I2Special(COCKPIT);
MechSections(mech)[index].criticals[4].type =
I2Special(SENSORS);
MechSections(mech)[index].criticals[5].type =
I2Special(LIFE_SUPPORT);
break;
case CTORSO:
MechSections(mech)[index].criticals[0].type =
I2Special(ENGINE);
MechSections(mech)[index].criticals[1].type =
I2Special(ENGINE);
MechSections(mech)[index].criticals[2].type =
I2Special(ENGINE);
MechSections(mech)[index].criticals[3].type = I2Special(GYRO);
MechSections(mech)[index].criticals[4].type = I2Special(GYRO);
MechSections(mech)[index].criticals[5].type = I2Special(GYRO);
MechSections(mech)[index].criticals[6].type = I2Special(GYRO);
MechSections(mech)[index].criticals[7].type =
I2Special(ENGINE);
MechSections(mech)[index].criticals[8].type =
I2Special(ENGINE);
MechSections(mech)[index].criticals[9].type =
I2Special(ENGINE);
break;
case RTORSO:
case LTORSO:
break;
case LARM:
case RARM:
case LLEG:
case RLEG:
MechSections(mech)[index].criticals[0].type =
I2Special(SHOULDER_OR_HIP);
MechSections(mech)[index].criticals[1].type =
I2Special(UPPER_ACTUATOR);
MechSections(mech)[index].criticals[2].type =
I2Special(LOWER_ACTUATOR);
MechSections(mech)[index].criticals[3].type =
I2Special(HAND_OR_FOOT_ACTUATOR);
break;
}
}
char *ShortArmorSectionString(char type, char mtype, int loc)
{
const char **locs;
static char buf[4];
char *c = buf;
int i;
locs = ProperSectionStringFromType(type, mtype);
for (i = 0; locs[loc][i]; i++)
if (isupper(locs[loc][i]) || isdigit(locs[loc][i]))
*(c++) = locs[loc][i];
*c = 0;
return buf;
}
int ArmorSectionFromString(char type, char mtype, char *string)
{
const char **locs;
int i, j;
char *c, *d;
if (!string[0])
return -1;
locs = ProperSectionStringFromType(type, mtype);
if (!locs)
return -1;
/* Then, methodically compare against each other until a suitable
match is found */
for (i = 0; locs[i]; i++)
if (!strcasecmp(string, locs[i]))
return i;
for (i = 0; locs[i]; i++) {
if (toupper(string[0]) != locs[i][0])
continue;
for (j = (i + 1); locs[j]; j++)
if (toupper(string[0]) == locs[j][0])
break;
if (!locs[j])
return i;
/* Ok, comparison between these two, then */
c = strstr(locs[i], " ");
d = strstr(locs[j], " ");
if (!c && !string[1] && d)
return i;
if (!c && !d)
return -1;
if (!string[1])
continue;
if (c && toupper(string[1]) == *(++c))
return i;
if (d && toupper(string[1]) == *(++d))
return j;
}
return -1;
}
int WeaponIndexFromString(char *string)
{
int id, brand;
if (find_matching_vlong_part(string, NULL, &id, &brand))
if (IsWeapon(id))
return Weapon2I(id);
return -1;
}
int FindSpecialItemCodeFromString(char *buffer)
{
int id, brand;
if (find_matching_vlong_part(buffer, NULL, &id, &brand))
if (IsSpecial(id))
return Special2I(id);
return -1;
}