Rearrange spell pattern code to enable switch statements to make use of missing case warnings
This commit is contained in:
@@ -4134,7 +4134,7 @@ static void place_spell_pattern(effect_pat_type pat,location center,unsigned sho
|
||||
for(short j = minmax(0,univ.town->max_dim - 1,center.y - 4); j <= minmax(0,univ.town->max_dim - 1,center.y + 4); j++) {
|
||||
effect = pat.pattern[i - center.x + 4][j - center.y + 4];
|
||||
if(effect == FIELD_SMASH || sight_obscurity(i,j) < 5) {
|
||||
switch(effect) {
|
||||
switch(eFieldType(effect)) {
|
||||
case FIELD_WEB:
|
||||
web_space(i,j);
|
||||
break;
|
||||
@@ -4210,6 +4210,8 @@ static void place_spell_pattern(effect_pat_type pat,location center,unsigned sho
|
||||
case SFX_RUBBLE:
|
||||
univ.town.set_rubble(i,j,true);
|
||||
break;
|
||||
case SPECIAL_EXPLORED: case SPECIAL_SPOT: case SPECIAL_ROAD:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4227,28 +4229,7 @@ static void place_spell_pattern(effect_pat_type pat,location center,unsigned sho
|
||||
&& (((is_combat()) && (pc.combat_pos == spot_hit)) ||
|
||||
((is_town()) && (univ.party.town_loc == spot_hit)))) {
|
||||
effect = pat.pattern[i - center.x + 4][j - center.y + 4];
|
||||
switch(effect) {
|
||||
case WALL_FORCE:
|
||||
r1 = get_ran(2,1,6);
|
||||
damage_pc(pc,r1,eDamageType::MAGIC,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case WALL_FIRE:
|
||||
r1 = get_ran(1,1,6) + 1;
|
||||
damage_pc(pc,r1,eDamageType::FIRE,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case WALL_ICE:
|
||||
r1 = get_ran(2,1,6);
|
||||
damage_pc(pc,r1,eDamageType::COLD,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case WALL_BLADES:
|
||||
r1 = get_ran(4,1,8);
|
||||
damage_pc(pc,r1,eDamageType::WEAPON,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case OBJECT_BLOCK:
|
||||
r1 = get_ran(6,1,8);
|
||||
damage_pc(pc,r1,eDamageType::WEAPON,eRace::UNKNOWN,0);
|
||||
break;
|
||||
default:
|
||||
if(effect >= 50) {
|
||||
eDamageType type = eDamageType::MARKED;
|
||||
unsigned short dice;
|
||||
if(effect > 50 && effect <= 80) {
|
||||
@@ -4280,9 +4261,40 @@ static void place_spell_pattern(effect_pat_type pat,location center,unsigned sho
|
||||
type = eDamageType::SPECIAL;
|
||||
dice = effect - 370;
|
||||
}
|
||||
if(type == eDamageType::MARKED) break;
|
||||
if(type != eDamageType::MARKED) {
|
||||
r1 = get_ran(dice,1,6);
|
||||
damage_pc(pc,r1,type,eRace::UNKNOWN,0);
|
||||
}
|
||||
} else switch(eFieldType(effect)) {
|
||||
case WALL_FORCE:
|
||||
r1 = get_ran(2,1,6);
|
||||
damage_pc(pc,r1,eDamageType::MAGIC,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case WALL_FIRE:
|
||||
r1 = get_ran(1,1,6) + 1;
|
||||
damage_pc(pc,r1,eDamageType::FIRE,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case WALL_ICE:
|
||||
r1 = get_ran(2,1,6);
|
||||
damage_pc(pc,r1,eDamageType::COLD,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case WALL_BLADES:
|
||||
r1 = get_ran(4,1,8);
|
||||
damage_pc(pc,r1,eDamageType::WEAPON,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case OBJECT_BLOCK:
|
||||
r1 = get_ran(6,1,8);
|
||||
damage_pc(pc,r1,eDamageType::WEAPON,eRace::UNKNOWN,0);
|
||||
break;
|
||||
case SPECIAL_EXPLORED: case SPECIAL_SPOT: case SPECIAL_ROAD:
|
||||
case BARRIER_FIRE: case BARRIER_FORCE: case BARRIER_CAGE:
|
||||
case FIELD_ANTIMAGIC: case FIELD_WEB: case FIELD_QUICKFIRE:
|
||||
case FIELD_DISPEL: case FIELD_SMASH:
|
||||
case CLOUD_STINK: case CLOUD_SLEEP:
|
||||
case OBJECT_CRATE: case OBJECT_BARREL:
|
||||
case SFX_SMALL_BLOOD: case SFX_MEDIUM_BLOOD: case SFX_LARGE_BLOOD:
|
||||
case SFX_SMALL_SLIME: case SFX_LARGE_SLIME:
|
||||
case SFX_ASH: case SFX_BONES: case SFX_RUBBLE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4309,7 +4321,43 @@ static void place_spell_pattern(effect_pat_type pat,location center,unsigned sho
|
||||
which_m = &univ.town.monst[k];
|
||||
if(which_m->abil[eMonstAbil::RADIATE].active && effect == which_m->abil[eMonstAbil::RADIATE].radiate.type)
|
||||
continue;
|
||||
switch(effect) {
|
||||
if(effect >= 50) {
|
||||
eDamageType type = eDamageType::MARKED;
|
||||
unsigned short dice;
|
||||
if(effect > 50 && effect <= 80) {
|
||||
type = eDamageType::FIRE;
|
||||
dice = effect - 50;
|
||||
} else if(effect > 90 && effect <= 120) {
|
||||
type = eDamageType::COLD;
|
||||
dice = effect - 90;
|
||||
} else if(effect > 130 && effect <= 160) {
|
||||
type = eDamageType::MAGIC;
|
||||
dice = effect - 130;
|
||||
// The rest of these are new, currently unused.
|
||||
} else if(effect > 170 && effect <= 200) {
|
||||
type = eDamageType::WEAPON;
|
||||
dice = effect - 170;
|
||||
} else if(effect > 210 && effect <= 240) {
|
||||
type = eDamageType::POISON;
|
||||
dice = effect - 210;
|
||||
} else if(effect > 250 && effect <= 280) {
|
||||
type = eDamageType::UNBLOCKABLE;
|
||||
dice = effect - 250;
|
||||
} else if(effect > 290 && effect <= 320) {
|
||||
type = eDamageType::UNDEAD;
|
||||
dice = effect - 290;
|
||||
} else if(effect > 330 && effect <= 360) {
|
||||
type = eDamageType::DEMON;
|
||||
dice = effect - 330;
|
||||
} else if(effect > 370 && effect <= 400) {
|
||||
type = eDamageType::SPECIAL;
|
||||
dice = effect - 370;
|
||||
}
|
||||
if(type != eDamageType::MARKED) {
|
||||
r1 = get_ran(dice,1,6);
|
||||
damage_monst(univ.town.monst[k],who_hit,r1,type,0);
|
||||
}
|
||||
} else switch(eFieldType(effect)) {
|
||||
case FIELD_WEB:
|
||||
which_m->web(3);
|
||||
break;
|
||||
@@ -4342,41 +4390,14 @@ static void place_spell_pattern(effect_pat_type pat,location center,unsigned sho
|
||||
case BARRIER_CAGE:
|
||||
univ.town.monst[k].status[eStatus::FORCECAGE] = max(8, univ.town.monst[k].status[eStatus::FORCECAGE]);
|
||||
break;
|
||||
default:
|
||||
eDamageType type = eDamageType::MARKED;
|
||||
unsigned short dice;
|
||||
if(effect > 50 && effect <= 80) {
|
||||
type = eDamageType::FIRE;
|
||||
dice = effect - 50;
|
||||
} else if(effect > 90 && effect <= 120) {
|
||||
type = eDamageType::COLD;
|
||||
dice = effect - 90;
|
||||
} else if(effect > 130 && effect <= 160) {
|
||||
type = eDamageType::MAGIC;
|
||||
dice = effect - 130;
|
||||
// The rest of these are new, currently unused.
|
||||
} else if(effect > 170 && effect <= 200) {
|
||||
type = eDamageType::WEAPON;
|
||||
dice = effect - 170;
|
||||
} else if(effect > 210 && effect <= 240) {
|
||||
type = eDamageType::POISON;
|
||||
dice = effect - 210;
|
||||
} else if(effect > 250 && effect <= 280) {
|
||||
type = eDamageType::UNBLOCKABLE;
|
||||
dice = effect - 250;
|
||||
} else if(effect > 290 && effect <= 320) {
|
||||
type = eDamageType::UNDEAD;
|
||||
dice = effect - 290;
|
||||
} else if(effect > 330 && effect <= 360) {
|
||||
type = eDamageType::DEMON;
|
||||
dice = effect - 330;
|
||||
} else if(effect > 370 && effect <= 400) {
|
||||
type = eDamageType::SPECIAL;
|
||||
dice = effect - 370;
|
||||
}
|
||||
if(type == eDamageType::MARKED) break;
|
||||
r1 = get_ran(dice,1,6);
|
||||
damage_monst(univ.town.monst[k],who_hit,r1,type,0);
|
||||
case SPECIAL_EXPLORED: case SPECIAL_SPOT: case SPECIAL_ROAD:
|
||||
case OBJECT_CRATE: case OBJECT_BARREL:
|
||||
case BARRIER_FIRE: case BARRIER_FORCE:
|
||||
case FIELD_ANTIMAGIC: case FIELD_QUICKFIRE:
|
||||
case FIELD_DISPEL: case FIELD_SMASH:
|
||||
case SFX_SMALL_BLOOD: case SFX_MEDIUM_BLOOD: case SFX_LARGE_BLOOD:
|
||||
case SFX_SMALL_SLIME: case SFX_LARGE_SLIME:
|
||||
case SFX_ASH: case SFX_BONES: case SFX_RUBBLE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user