add purely cosmetic damage type for acid
the original source code had calls to animate acid with the blood graphic and a specific acid SFX, which makes more sense than a zap graphic and sound. This change makes acid look and sound distinct from magic damage, although mechanically it's still magic damage.
This commit is contained in:
@@ -21,6 +21,8 @@ enum class eDamageType {
|
|||||||
COLD = 5,
|
COLD = 5,
|
||||||
UNDEAD = 6,
|
UNDEAD = 6,
|
||||||
DEMON = 7,
|
DEMON = 7,
|
||||||
|
// Acid is treated as magic damage but needs a value to prevent it using a zap explosion
|
||||||
|
ACID = -1,
|
||||||
// Keep these two last
|
// Keep these two last
|
||||||
SPECIAL = 8, // Completely unblockable damage from assassination skill
|
SPECIAL = 8, // Completely unblockable damage from assassination skill
|
||||||
MARKED = 10,
|
MARKED = 10,
|
||||||
|
@@ -2512,7 +2512,7 @@ void do_monster_turn() {
|
|||||||
printed_acid = true;
|
printed_acid = true;
|
||||||
}
|
}
|
||||||
r1 = get_ran(cur_monst->status[eStatus::ACID],1,6);
|
r1 = get_ran(cur_monst->status[eStatus::ACID],1,6);
|
||||||
damage_monst(*cur_monst, 6,r1, eDamageType::MAGIC);
|
damage_monst(*cur_monst, 6,r1, eDamageType::ACID);
|
||||||
cur_monst->status[eStatus::ACID]--;
|
cur_monst->status[eStatus::ACID]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2728,6 +2728,7 @@ void monster_attack(short who_att,iLiving* target) {
|
|||||||
case eDamageType::MARKED: break; // Invalid
|
case eDamageType::MARKED: break; // Invalid
|
||||||
case eDamageType::FIRE: add_string_to_buf(" Burning touch!"); break;
|
case eDamageType::FIRE: add_string_to_buf(" Burning touch!"); break;
|
||||||
case eDamageType::COLD: add_string_to_buf(" Freezing touch!"); break;
|
case eDamageType::COLD: add_string_to_buf(" Freezing touch!"); break;
|
||||||
|
case eDamageType::ACID: add_string_to_buf(" Acid touch!"); break;
|
||||||
case eDamageType::MAGIC: add_string_to_buf(" Shocking touch!"); break;
|
case eDamageType::MAGIC: add_string_to_buf(" Shocking touch!"); break;
|
||||||
case eDamageType::SPECIAL:
|
case eDamageType::SPECIAL:
|
||||||
case eDamageType::UNBLOCKABLE: add_string_to_buf(" Eerie touch!"); break;
|
case eDamageType::UNBLOCKABLE: add_string_to_buf(" Eerie touch!"); break;
|
||||||
@@ -4417,7 +4418,7 @@ void handle_acid() {
|
|||||||
if(pc.main_status == eMainStatus::ALIVE)
|
if(pc.main_status == eMainStatus::ALIVE)
|
||||||
if(pc.status[eStatus::ACID] > 0) {
|
if(pc.status[eStatus::ACID] > 0) {
|
||||||
r1 = get_ran(pc.status[eStatus::ACID],1,6);
|
r1 = get_ran(pc.status[eStatus::ACID],1,6);
|
||||||
damage_pc(pc,r1,eDamageType::MAGIC,eRace::UNKNOWN);
|
damage_pc(pc,r1,eDamageType::ACID,eRace::UNKNOWN);
|
||||||
move_to_zero(pc.status[eStatus::ACID]);
|
move_to_zero(pc.status[eStatus::ACID]);
|
||||||
}
|
}
|
||||||
if(!is_combat())
|
if(!is_combat())
|
||||||
|
@@ -2348,6 +2348,12 @@ short damage_pc(cPlayer& which_pc,short how_much,eDamageType damage_type,eRace t
|
|||||||
// but -1 is the new value for "use default"
|
// but -1 is the new value for "use default"
|
||||||
sound_type = get_sound_type(damage_type, sound_type);
|
sound_type = get_sound_type(damage_type, sound_type);
|
||||||
|
|
||||||
|
int boom_type = boom_gr[damage_type];
|
||||||
|
|
||||||
|
// Acid doesn't actually have its own damage type in classic BoE
|
||||||
|
if(damage_type == eDamageType::ACID)
|
||||||
|
damage_type = eDamageType::MAGIC;
|
||||||
|
|
||||||
// armor
|
// armor
|
||||||
if(damage_type == eDamageType::WEAPON || damage_type == eDamageType::UNDEAD || damage_type == eDamageType::DEMON) {
|
if(damage_type == eDamageType::WEAPON || damage_type == eDamageType::UNDEAD || damage_type == eDamageType::DEMON) {
|
||||||
how_much -= minmax(-5,5,which_pc.status[eStatus::BLESS_CURSE]);
|
how_much -= minmax(-5,5,which_pc.status[eStatus::BLESS_CURSE]);
|
||||||
@@ -2471,10 +2477,10 @@ short damage_pc(cPlayer& which_pc,short how_much,eDamageType damage_type,eRace t
|
|||||||
add_string_to_buf(" " + which_pc.name + " takes " + std::to_string(how_much) + '.');
|
add_string_to_buf(" " + which_pc.name + " takes " + std::to_string(how_much) + '.');
|
||||||
if(damage_type != eDamageType::MARKED) {
|
if(damage_type != eDamageType::MARKED) {
|
||||||
if(is_combat())
|
if(is_combat())
|
||||||
boom_space(which_pc.combat_pos,overall_mode,boom_gr[damage_type],how_much,sound_type);
|
boom_space(which_pc.combat_pos,overall_mode,boom_type,how_much,sound_type);
|
||||||
else if(is_town())
|
else if(is_town())
|
||||||
boom_space(univ.party.town_loc,overall_mode,boom_gr[damage_type],how_much,sound_type);
|
boom_space(univ.party.town_loc,overall_mode,boom_type,how_much,sound_type);
|
||||||
else boom_space(univ.party.town_loc,100,boom_gr[damage_type],how_much,sound_type);
|
else boom_space(univ.party.town_loc,100,boom_type,how_much,sound_type);
|
||||||
}
|
}
|
||||||
// TODO: When outdoors it flushed only key events, not mouse events. Why?
|
// TODO: When outdoors it flushed only key events, not mouse events. Why?
|
||||||
flushingInput = true;
|
flushingInput = true;
|
||||||
|
@@ -61,6 +61,7 @@ std::map<eDamageType,int> boom_gr = {
|
|||||||
{eDamageType::FIRE, 0},
|
{eDamageType::FIRE, 0},
|
||||||
{eDamageType::POISON, 2},
|
{eDamageType::POISON, 2},
|
||||||
{eDamageType::MAGIC, 1},
|
{eDamageType::MAGIC, 1},
|
||||||
|
{eDamageType::ACID, 3}, // TODO add an acid graphic
|
||||||
{eDamageType::UNBLOCKABLE, 5},
|
{eDamageType::UNBLOCKABLE, 5},
|
||||||
{eDamageType::COLD, 4},
|
{eDamageType::COLD, 4},
|
||||||
{eDamageType::UNDEAD, 3},
|
{eDamageType::UNDEAD, 3},
|
||||||
@@ -1430,6 +1431,8 @@ short get_sound_type(eDamageType dam_type, short forced_sound_type) {
|
|||||||
sound_type = 0;
|
sound_type = 0;
|
||||||
if(dam_type == eDamageType::FIRE || dam_type == eDamageType::UNBLOCKABLE)
|
if(dam_type == eDamageType::FIRE || dam_type == eDamageType::UNBLOCKABLE)
|
||||||
sound_type = 5;
|
sound_type = 5;
|
||||||
|
else if(dam_type == eDamageType::ACID)
|
||||||
|
sound_type = 8;
|
||||||
else if(dam_type == eDamageType::COLD)
|
else if(dam_type == eDamageType::COLD)
|
||||||
sound_type = 7;
|
sound_type = 7;
|
||||||
else if(dam_type == eDamageType::MAGIC)
|
else if(dam_type == eDamageType::MAGIC)
|
||||||
@@ -1464,6 +1467,12 @@ short damage_monst(cCreature& victim, short who_hit, short how_much, eDamageType
|
|||||||
// but -1 is the new value for "use default"
|
// but -1 is the new value for "use default"
|
||||||
sound_type = get_sound_type(dam_type, sound_type);
|
sound_type = get_sound_type(dam_type, sound_type);
|
||||||
|
|
||||||
|
int boom_type = boom_gr[dam_type];
|
||||||
|
|
||||||
|
// Acid doesn't actually have its own damage type in classic BoE
|
||||||
|
if(dam_type == eDamageType::ACID)
|
||||||
|
dam_type = eDamageType::MAGIC;
|
||||||
|
|
||||||
if(dam_type < eDamageType::SPECIAL) {
|
if(dam_type < eDamageType::SPECIAL) {
|
||||||
how_much = percent(how_much, victim.resist[dam_type]);
|
how_much = percent(how_much, victim.resist[dam_type]);
|
||||||
}
|
}
|
||||||
@@ -1555,10 +1564,10 @@ short damage_monst(cCreature& victim, short who_hit, short how_much, eDamageType
|
|||||||
|
|
||||||
if(dam_type != eDamageType::MARKED) {
|
if(dam_type != eDamageType::MARKED) {
|
||||||
if(party_can_see_monst(univ.get_target_i(victim) - 100)) {
|
if(party_can_see_monst(univ.get_target_i(victim) - 100)) {
|
||||||
boom_space(victim.cur_loc,100,boom_gr[dam_type],how_much,sound_type);
|
boom_space(victim.cur_loc,100,boom_type,how_much,sound_type);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
boom_space(victim.cur_loc,overall_mode, boom_gr[dam_type],how_much,sound_type);
|
boom_space(victim.cur_loc,overall_mode, boom_type,how_much,sound_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user