Exemple #1
0
SFX_struct* createSFX(char* filename, SoundFormat format)
{
	int i;
	for(i=0;i<NUMSFX;i++)
	{
		if(!SFX[i].used)
		{
			loadSFX(&SFX[i],filename,format);

			if(!SFX[i].data)return NULL;
			return &SFX[i];
		}
	}
	return NULL;
}
Exemple #2
0
void Sound::init(){
	if(SDL_Init(SDL_INIT_AUDIO) != 0){
	    fprintf(stderr, "Unable to open audio: %s\n",SDL_GetError());
	    return;
	}
	
	if(Mix_OpenAudio(44100, AUDIO_S16, 2, 1024) != 0) {
    	fprintf(stderr, "Unable to open audio: %s\n",Mix_GetError());
    	enabled = false;
	}else{
		music = Mix_LoadMUS("./media/snd/vspace.xm");
		
		loadSFX("explode.wav");
		loadSFX("death.wav");
		loadSFX("select1.wav");
		loadSFX("select2.wav");
		loadSFX("fire.wav");
		loadSFX("switch.wav");
		loadSFX("win.wav");
		enabled = true;
	}
}
void SoundBank::reload()
{
	if (nom_f != NULL) {
		loadSFX(nom_f);
	}
}
Exemple #4
0
/**
 * All powers are defined in powers/powers.txt
 */
void PowerManager::loadPowers() {

	FileParser infile;
	int input_id = 0;
	
	if (infile.open("powers/powers.txt")) {
		while (infile.next()) {
			// id needs to be the first component of each power.  That is how we write
			// data to the correct power.
			if (infile.key == "id") {
				input_id = atoi(infile.val.c_str());
			}
			else if (infile.key == "type") {
				if (infile.val == "single") powers[input_id].type = POWTYPE_SINGLE;
				else if (infile.val == "effect") powers[input_id].type = POWTYPE_EFFECT;
				else if (infile.val == "missile") powers[input_id].type = POWTYPE_MISSILE;
				else if (infile.val == "repeater") powers[input_id].type = POWTYPE_REPEATER;
			}
			else if (infile.key == "name") {
				powers[input_id].name = infile.val;
			}
			else if (infile.key == "description") {
				powers[input_id].description = infile.val;
			}
			else if (infile.key == "icon") {
				powers[input_id].icon = atoi(infile.val.c_str());
			}
			else if (infile.key == "new_state") {
				if (infile.val == "swing") powers[input_id].new_state = POWSTATE_SWING;
				else if (infile.val == "shoot") powers[input_id].new_state = POWSTATE_SHOOT;
				else if (infile.val == "cast") powers[input_id].new_state = POWSTATE_CAST;
				else if (infile.val == "block") powers[input_id].new_state = POWSTATE_BLOCK;
			}
			else if (infile.key == "face") {
				if (infile.val == "true") powers[input_id].face = true;
			}
			
			// power requirements
			else if (infile.key == "requires_physical_weapon") {
				if (infile.val == "true") powers[input_id].requires_physical_weapon = true;
			}
			else if (infile.key == "requires_mental_weapon") {
				if (infile.val == "true") powers[input_id].requires_mental_weapon = true;
			}
			else if (infile.key == "requires_offense_weapon") {
				if (infile.val == "true") powers[input_id].requires_offense_weapon = true;
			}
			else if (infile.key == "requires_mp") {
				powers[input_id].requires_mp = atoi(infile.val.c_str());
			}
			else if (infile.key == "requires_los") {
				if (infile.val == "true") powers[input_id].requires_los = true;
			}
			else if (infile.key == "requires_empty_target") {
				if (infile.val == "true") powers[input_id].requires_empty_target = true;
			}
			else if (infile.key == "requires_item") {
				powers[input_id].requires_item = atoi(infile.val.c_str());
			}
			else if (infile.key == "requires_targeting") {
				if (infile.val == "true") powers[input_id].requires_targeting = true;
			}
			
			// animation info
			else if (infile.key == "gfx") {
				powers[input_id].gfx_index = loadGFX(infile.val);
			}
			else if (infile.key == "sfx") {
				powers[input_id].sfx_index = loadSFX(infile.val);
			}
			else if (infile.key == "rendered") {
				if (infile.val == "true") powers[input_id].rendered = true;
			}
			else if (infile.key == "directional") {
				if (infile.val == "true") powers[input_id].directional = true;
			}
			else if (infile.key == "visual_random") {
				powers[input_id].visual_random = atoi(infile.val.c_str());
			}
			else if (infile.key == "visual_option") {
				powers[input_id].visual_option = atoi(infile.val.c_str());
			}
			else if (infile.key == "aim_assist") {
				powers[input_id].aim_assist = atoi(infile.val.c_str());
			}
			else if (infile.key == "speed") {
				powers[input_id].speed = atoi(infile.val.c_str());
			}
			else if (infile.key == "lifespan") {
				powers[input_id].lifespan = atoi(infile.val.c_str());
			}
			else if (infile.key == "frame_loop") {
				powers[input_id].frame_loop = atoi(infile.val.c_str());
			}
			else if (infile.key == "frame_duration") {
				powers[input_id].frame_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "frame_size") {
				powers[input_id].frame_size.x = atoi(infile.nextValue().c_str());
				powers[input_id].frame_size.y = atoi(infile.nextValue().c_str());
			}
			else if (infile.key == "frame_offset") {
				powers[input_id].frame_offset.x = atoi(infile.nextValue().c_str());
				powers[input_id].frame_offset.y = atoi(infile.nextValue().c_str());
			}
			else if (infile.key == "floor") {
				if (infile.val == "true") powers[input_id].floor = true;
			}
			else if (infile.key == "active_frame") {
				powers[input_id].active_frame = atoi(infile.val.c_str());
			}
			else if (infile.key == "complete_animation") {
				if (infile.val == "true") powers[input_id].complete_animation = true;
			}
			
			// hazard traits
			else if (infile.key == "use_hazard") {
				if (infile.val == "true") powers[input_id].use_hazard = true;
			}
			else if (infile.key == "no_attack") {
				if (infile.val == "true") powers[input_id].no_attack = true;
			}
			else if (infile.key == "radius") {
				powers[input_id].radius = atoi(infile.val.c_str());
			}
			else if (infile.key == "base_damage") {
				if (infile.val == "none")
					powers[input_id].base_damage = BASE_DAMAGE_NONE;
				else if (infile.val == "melee")
					powers[input_id].base_damage = BASE_DAMAGE_MELEE;
				else if (infile.val == "ranged")
					powers[input_id].base_damage = BASE_DAMAGE_RANGED;
				else if (infile.val == "ment")
					powers[input_id].base_damage = BASE_DAMAGE_MENT;
			}
			else if (infile.key == "damage_multiplier") {
				powers[input_id].damage_multiplier = atoi(infile.val.c_str());
			}
			else if (infile.key == "starting_pos") {
				if (infile.val == "source")
					powers[input_id].starting_pos = STARTING_POS_SOURCE;
				else if (infile.val == "target")
					powers[input_id].starting_pos = STARTING_POS_TARGET;
				else if (infile.val == "melee")
					powers[input_id].starting_pos = STARTING_POS_MELEE;
			}
			else if (infile.key == "multitarget") {
				if (infile.val == "true") powers[input_id].multitarget = true;
			}
			else if (infile.key == "trait_armor_penetration") {
				if (infile.val == "true") powers[input_id].trait_armor_penetration = true;
			}
			else if (infile.key == "trait_crits_impaired") {
				powers[input_id].trait_crits_impaired = atoi(infile.val.c_str());
			}
			else if (infile.key == "trait_elemental") {
				if (infile.val == "wood") powers[input_id].trait_elemental = ELEMENT_WOOD;
				else if (infile.val == "metal") powers[input_id].trait_elemental = ELEMENT_METAL;
				else if (infile.val == "wind") powers[input_id].trait_elemental = ELEMENT_WIND;
				else if (infile.val == "water") powers[input_id].trait_elemental = ELEMENT_WATER;
				else if (infile.val == "earth") powers[input_id].trait_elemental = ELEMENT_EARTH;
				else if (infile.val == "fire") powers[input_id].trait_elemental = ELEMENT_FIRE;
				else if (infile.val == "shadow") powers[input_id].trait_elemental = ELEMENT_SHADOW;
				else if (infile.val == "light") powers[input_id].trait_elemental = ELEMENT_LIGHT;
			}
			//steal effects
			else if (infile.key == "hp_steal") {
				powers[input_id].hp_steal = atoi(infile.val.c_str());
			}
			else if (infile.key == "mp_steal") {
				powers[input_id].mp_steal = atoi(infile.val.c_str());
			}
			//missile modifiers
			else if (infile.key == "missile_num") {
				powers[input_id].missile_num = atoi(infile.val.c_str());
			}
			else if (infile.key == "missile_angle") {
				powers[input_id].missile_angle = atoi(infile.val.c_str());
			}
			else if (infile.key == "angle_variance") {
				powers[input_id].angle_variance = atoi(infile.val.c_str());
			}
			else if (infile.key == "speed_variance") {
				powers[input_id].speed_variance = atoi(infile.val.c_str());
			}
			//repeater modifiers
			else if (infile.key == "delay") {
				powers[input_id].delay = atoi(infile.val.c_str());
			}
			else if (infile.key == "start_frame") {
				powers[input_id].start_frame = atoi(infile.val.c_str());
			}
			else if (infile.key == "repeater_num") {
				powers[input_id].repeater_num = atoi(infile.val.c_str());
			}
			// buff/debuff durations
			else if (infile.key == "bleed_duration") {
				powers[input_id].bleed_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "stun_duration") {
				powers[input_id].stun_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "slow_duration") {
				powers[input_id].slow_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "immobilize_duration") {
				powers[input_id].immobilize_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "immunity_duration") {
				powers[input_id].immunity_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "haste_duration") {
				powers[input_id].haste_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "hot_duration") {
				powers[input_id].hot_duration = atoi(infile.val.c_str());
			}
			else if (infile.key == "hot_value") {
				powers[input_id].hot_value = atoi(infile.val.c_str());
			}
			
			// buffs
			else if (infile.key == "buff_heal") {
				if (infile.val == "true") powers[input_id].buff_heal = true;
			}
			else if (infile.key == "buff_shield") {
				if (infile.val == "true") powers[input_id].buff_shield = true;
			}
			else if (infile.key == "buff_teleport") {
				if (infile.val == "true") powers[input_id].buff_teleport = true;
			}
			else if (infile.key == "buff_immunity") {
				if (infile.val == "true") powers[input_id].buff_immunity = true;
			}
			else if (infile.key == "buff_restore_hp") {
				powers[input_id].buff_restore_hp = atoi(infile.val.c_str());
			}
			else if (infile.key == "buff_restore_mp") {
				powers[input_id].buff_restore_mp = atoi(infile.val.c_str());
			}
			
			// pre and post power effects
			else if (infile.key == "post_power") {
				powers[input_id].post_power = atoi(infile.val.c_str());
			}
			else if (infile.key == "wall_power") {
				powers[input_id].wall_power = atoi(infile.val.c_str());
			}
			else if (infile.key == "allow_power_mod") {
				if (infile.val == "true") powers[input_id].allow_power_mod = true;
			}
		}
		infile.close();
	}
}
Exemple #5
0
/**
 * All powers are defined in powers/powers.txt
 */
void PowerManager::loadPowers() {

	ifstream infile;
	string line;
	string key;
	string val;
	string starts_with;
	int input_id = 0;
	
	infile.open("powers/powers.txt", ios::in);

	if (infile.is_open()) {
		while (!infile.eof()) {
			line = getLine(infile);

			if (line.length() > 0) {
				starts_with = line.at(0);
				
				if (starts_with == "#") {
					// skip comments
				}
				if (starts_with == "[") {
					// not actually necessary.  We know we're at a new power when
					// we see a new id key.
				}
				else { // this is data.  treatment depends on key
					parse_key_pair(line, key, val);          
					key = trim(key, ' ');
					val = trim(val, ' ');
				
					// id needs to be the first component of each power.  That is how we write
					// data to the correct power.
					if (key == "id") {
						input_id = atoi(val.c_str());
					}
					else if (key == "type") {
						if (val == "single") powers[input_id].type = POWTYPE_SINGLE;
						else if (val == "effect") powers[input_id].type = POWTYPE_EFFECT;
						else if (val == "missile") powers[input_id].type = POWTYPE_MISSILE;
						else if (val == "repeater") powers[input_id].type = POWTYPE_REPEATER;
					}
					else if (key == "name") {
						powers[input_id].name = val;
					}
					else if (key == "description") {
						powers[input_id].description = val;
					}
					else if (key == "icon") {
						powers[input_id].icon = atoi(val.c_str());
					}
					else if (key == "new_state") {
						if (val == "swing") powers[input_id].new_state = POWSTATE_SWING;
						else if (val == "shoot") powers[input_id].new_state = POWSTATE_SHOOT;
						else if (val == "cast") powers[input_id].new_state = POWSTATE_CAST;
						else if (val == "block") powers[input_id].new_state = POWSTATE_BLOCK;
					}
					else if (key == "face") {
						if (val == "true") powers[input_id].face = true;
					}
					
					// power requirements
					else if (key == "requires_physical_weapon") {
						if (val == "true") powers[input_id].requires_physical_weapon = true;
					}
					else if (key == "requires_mental_weapon") {
						if (val == "true") powers[input_id].requires_mental_weapon = true;
					}
					else if (key == "requires_offense_weapon") {
						if (val == "true") powers[input_id].requires_offense_weapon = true;
					}
					else if (key == "requires_mp") {
						powers[input_id].requires_mp = atoi(val.c_str());
					}
					else if (key == "requires_los") {
						if (val == "true") powers[input_id].requires_los = true;
					}
					else if (key == "requires_empty_target") {
						if (val == "true") powers[input_id].requires_empty_target = true;
					}
					else if (key == "requires_item") {
						powers[input_id].requires_item = atoi(val.c_str());
					}
					
					// animation info
					else if (key == "gfx") {
						powers[input_id].gfx_index = loadGFX(val);
					}
					else if (key == "sfx") {
						powers[input_id].sfx_index = loadSFX(val);
					}
					else if (key == "rendered") {
						if (val == "true") powers[input_id].rendered = true;				
					}
					else if (key == "directional") {
						if (val == "true") powers[input_id].directional = true;
					}
					else if (key == "visual_random") {
						powers[input_id].visual_random = atoi(val.c_str());
					}
					else if (key == "visual_option") {
						powers[input_id].visual_option = atoi(val.c_str());
					}
					else if (key == "aim_assist") {
						powers[input_id].aim_assist = atoi(val.c_str());
					}
					else if (key == "speed") {
						powers[input_id].speed = atoi(val.c_str());
					}
					else if (key == "lifespan") {
						powers[input_id].lifespan = atoi(val.c_str());
					}
					else if (key == "frame_loop") {
						powers[input_id].frame_loop = atoi(val.c_str());
					}
					else if (key == "frame_duration") {
						powers[input_id].frame_duration = atoi(val.c_str());
					}
					else if (key == "frame_size") {
						val = val + ",";
						powers[input_id].frame_size.x = eatFirstInt(val, ',');										
						powers[input_id].frame_size.y = eatFirstInt(val, ',');				
					}
					else if (key == "frame_offset") {
						val = val + ",";
						powers[input_id].frame_offset.x = eatFirstInt(val, ',');										
						powers[input_id].frame_offset.y = eatFirstInt(val, ',');				
					}
					else if (key == "floor") {
						if (val == "true") powers[input_id].floor = true;
					}
					else if (key == "active_frame") {
						powers[input_id].active_frame = atoi(val.c_str());
					}
					else if (key == "complete_animation") {
						if (val == "true") powers[input_id].complete_animation = true;
					}
					
					// hazard traits
					else if (key == "use_hazard") {
						if (val == "true") powers[input_id].use_hazard = true;
					}
					else if (key == "no_attack") {
						if (val == "true") powers[input_id].no_attack = true;
					}
					else if (key == "radius") {
						powers[input_id].radius = atoi(val.c_str());
					}
					else if (key == "base_damage") {
						if (val == "none")
							powers[input_id].base_damage = BASE_DAMAGE_NONE;
						else if (val == "melee")
							powers[input_id].base_damage = BASE_DAMAGE_MELEE;
						else if (val == "ranged")
							powers[input_id].base_damage = BASE_DAMAGE_RANGED;
						else if (val == "ment")
							powers[input_id].base_damage = BASE_DAMAGE_MENT;
					}
					else if (key == "damage_multiplier") {
						powers[input_id].damage_multiplier = atoi(val.c_str());
					}
					else if (key == "starting_pos") {
						if (val == "source")
							powers[input_id].starting_pos = STARTING_POS_SOURCE;
						else if (val == "target")
							powers[input_id].starting_pos = STARTING_POS_TARGET;
						else if (val == "melee")
							powers[input_id].starting_pos = STARTING_POS_MELEE;
					}
					else if (key == "multitarget") {
						if (val == "true") powers[input_id].multitarget = true;
					}
					else if (key == "trait_armor_penetration") {
						if (val == "true") powers[input_id].trait_armor_penetration = true;
					}
					else if (key == "trait_crits_impaired") {
						powers[input_id].trait_crits_impaired = atoi(val.c_str());
					}
					else if (key == "trait_elemental") {
						if (val == "wood") powers[input_id].trait_elemental = ELEMENT_WOOD;
						else if (val == "metal") powers[input_id].trait_elemental = ELEMENT_METAL;
						else if (val == "wind") powers[input_id].trait_elemental = ELEMENT_WIND;
						else if (val == "water") powers[input_id].trait_elemental = ELEMENT_WATER;
						else if (val == "earth") powers[input_id].trait_elemental = ELEMENT_EARTH;
						else if (val == "fire") powers[input_id].trait_elemental = ELEMENT_FIRE;
						else if (val == "shadow") powers[input_id].trait_elemental = ELEMENT_SHADOW;
						else if (val == "light") powers[input_id].trait_elemental = ELEMENT_LIGHT;
					}
					//steal effects
					else if (key == "hp_steal") {
						powers[input_id].hp_steal = atoi(val.c_str());
					}
					else if (key == "mp_steal") {
						powers[input_id].mp_steal = atoi(val.c_str());
					}
					//missile modifiers
					else if (key == "missile_num") {
						powers[input_id].missile_num = atoi(val.c_str());
					}
					else if (key == "missile_angle") {
						powers[input_id].missile_angle = atoi(val.c_str());
					}
					else if (key == "angle_variance") {
						powers[input_id].angle_variance = atoi(val.c_str());
					}
					else if (key == "speed_variance") {
						powers[input_id].speed_variance = atoi(val.c_str());
					}
					//repeater modifiers
					else if (key == "delay") {
						powers[input_id].delay = atoi(val.c_str());
					}
					else if (key == "start_frame") {
						powers[input_id].start_frame = atoi(val.c_str());
					}
					else if (key == "repeater_num") {
						powers[input_id].repeater_num = atoi(val.c_str());
					}
					// buff/debuff durations
					else if (key == "bleed_duration") {
						powers[input_id].bleed_duration = atoi(val.c_str());
					}
					else if (key == "stun_duration") {
						powers[input_id].stun_duration = atoi(val.c_str());
					}
					else if (key == "slow_duration") {
						powers[input_id].slow_duration = atoi(val.c_str());
					}
					else if (key == "immobilize_duration") {
						powers[input_id].immobilize_duration = atoi(val.c_str());
					}
					else if (key == "immunity_duration") {
						powers[input_id].immunity_duration = atoi(val.c_str());
					}
					else if (key == "haste_duration") {
						powers[input_id].haste_duration = atoi(val.c_str());
					}
					else if (key == "hot_duration") {
						powers[input_id].hot_duration = atoi(val.c_str());
					}
					else if (key == "hot_value") {
						powers[input_id].hot_value = atoi(val.c_str());
					}
					
					// buffs
					else if (key == "buff_heal") {
						if (val == "true") powers[input_id].buff_heal = true;
					}
					else if (key == "buff_shield") {
						if (val == "true") powers[input_id].buff_shield = true;
					}
					else if (key == "buff_teleport") {
						if (val == "true") powers[input_id].buff_teleport = true;
					}
					else if (key == "buff_immunity") {
						if (val == "true") powers[input_id].buff_immunity = true;
					}
					else if (key == "buff_restore_hp") {
						powers[input_id].buff_restore_hp = atoi(val.c_str());
					}
					else if (key == "buff_restore_mp") {
						powers[input_id].buff_restore_mp = atoi(val.c_str());
					}
					
					// pre and post power effects
					else if (key == "post_power") {
						powers[input_id].post_power = atoi(val.c_str());
					}
					else if (key == "wall_power") {
						powers[input_id].wall_power = atoi(val.c_str());
					}
					else if (key == "allow_power_mod") {
						if (val == "true") powers[input_id].allow_power_mod = true;
					}
				}
			}
		}
	}
	infile.close();
}