mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2024-11-23 21:07:17 +00:00
Orb of the Morph implemented
This commit is contained in:
parent
f8b47115ae
commit
4a60fa52c8
33
orbs.cpp
33
orbs.cpp
@ -855,6 +855,33 @@ void stun_attack(cell *dest) {
|
|||||||
checkmoveO();
|
checkmoveO();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void poly_attack(cell *dest) {
|
||||||
|
playSound(dest, "orb-ranged");
|
||||||
|
auto polymonsters = {
|
||||||
|
moYeti, moRunDog, moHunterDog, moRanger,
|
||||||
|
moDesertman, moMonkey, moZombie, moCultist,
|
||||||
|
moWitch, moEvilGolem, moFamiliar, moOrangeDog,
|
||||||
|
moRedFox, moFalsePrincess, moResearcher,
|
||||||
|
moNarciss, moJiangshi
|
||||||
|
};
|
||||||
|
int ssf = 0;
|
||||||
|
eMonster target = *(polymonsters.begin() + hrand(size(polymonsters)));
|
||||||
|
for(eMonster m: polymonsters)
|
||||||
|
if(kills[m] && m != dest->monst) {
|
||||||
|
ssf += kills[m];
|
||||||
|
if(hrand(ssf) < kills[m])
|
||||||
|
target = m;
|
||||||
|
}
|
||||||
|
addMessage(XLAT("You polymorph %the1 into %the2!", dest->monst, target));
|
||||||
|
dest->monst = target;
|
||||||
|
if(!dest->stuntime) dest->stuntime = 1;
|
||||||
|
checkStunKill(dest);
|
||||||
|
useupOrb(itOrbMorph, 2);
|
||||||
|
createNoise(3);
|
||||||
|
bfs();
|
||||||
|
checkmoveO();
|
||||||
|
}
|
||||||
|
|
||||||
void placeIllusion(cell *c) {
|
void placeIllusion(cell *c) {
|
||||||
c->monst = moIllusion;
|
c->monst = moIllusion;
|
||||||
useupOrb(itOrbIllusion, 5);
|
useupOrb(itOrbIllusion, 5);
|
||||||
@ -1116,6 +1143,12 @@ eItem targetRangedOrb(cell *c, orbAction a) {
|
|||||||
return itOrbStunning;
|
return itOrbStunning;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// (5d) poly
|
||||||
|
if(items[itOrbMorph] && c->monst && !isMultitile(c->monst) && !shmup::on) {
|
||||||
|
if(!isCheck(a)) poly_attack(c);
|
||||||
|
return itOrbMorph;
|
||||||
|
}
|
||||||
|
|
||||||
// (6) place fire (non-shmup variant)
|
// (6) place fire (non-shmup variant)
|
||||||
if(!shmup::on && items[itOrbDragon] && makeflame(c, 20, true)) {
|
if(!shmup::on && items[itOrbDragon] && makeflame(c, 20, true)) {
|
||||||
if(!isCheck(a)) useOrbOfDragon(c);
|
if(!isCheck(a)) useOrbOfDragon(c);
|
||||||
|
Loading…
Reference in New Issue
Block a user