btmux-0.6-rc4/doc/
btmux-0.6-rc4/event/
btmux-0.6-rc4/game/
btmux-0.6-rc4/game/maps/
btmux-0.6-rc4/game/mechs/
btmux-0.6-rc4/game/text/help/
btmux-0.6-rc4/game/text/help/cat_faction/
btmux-0.6-rc4/game/text/help/cat_inform/
btmux-0.6-rc4/game/text/help/cat_misc/
btmux-0.6-rc4/game/text/help/cat_mux/
btmux-0.6-rc4/game/text/help/cat_mux/cat_commands/
btmux-0.6-rc4/game/text/help/cat_mux/cat_functions/
btmux-0.6-rc4/game/text/help/cat_templates/
btmux-0.6-rc4/game/text/wizhelp/
btmux-0.6-rc4/include/
btmux-0.6-rc4/misc/
btmux-0.6-rc4/python/
btmux-0.6-rc4/src/hcode/btech/
btmux-0.6-rc4/tree/
/*
 * $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)
{
	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)
{
	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;
}