bow:: rusalka curses now work
This commit is contained in:
parent
bcc026173e
commit
60980bcb8b
|
@ -369,6 +369,8 @@ EX bool fire_on_mouse(cell *c) {
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX int rusalka_curses = 0;
|
||||||
|
|
||||||
EX void shoot() {
|
EX void shoot() {
|
||||||
flagtype attackflags = AF_BOW;
|
flagtype attackflags = AF_BOW;
|
||||||
if(items[itOrbSpeed]&1) attackflags |= AF_FAST;
|
if(items[itOrbSpeed]&1) attackflags |= AF_FAST;
|
||||||
|
@ -382,6 +384,7 @@ EX void shoot() {
|
||||||
vector<pair<cell*, int>> healthy_dragons;
|
vector<pair<cell*, int>> healthy_dragons;
|
||||||
map<cell*, pair<int, int>> kraken_hits;
|
map<cell*, pair<int, int>> kraken_hits;
|
||||||
int dragon_hits = 0;
|
int dragon_hits = 0;
|
||||||
|
rusalka_curses++;
|
||||||
|
|
||||||
// for achievements
|
// for achievements
|
||||||
for(auto& mov: bowpath) {
|
for(auto& mov: bowpath) {
|
||||||
|
@ -458,6 +461,8 @@ EX void shoot() {
|
||||||
|
|
||||||
if(m && attackMonster(c, attackflags | AF_MSG, who)) hit_anything = true;
|
if(m && attackMonster(c, attackflags | AF_MSG, who)) hit_anything = true;
|
||||||
|
|
||||||
|
if(m == moRusalka) rusalka_curses++;
|
||||||
|
|
||||||
if(!c->monst || isAnyIvy(m)) {
|
if(!c->monst || isAnyIvy(m)) {
|
||||||
spread_plague(cf, c, movei(mov.prev).rev().d, moPlayer);
|
spread_plague(cf, c, movei(mov.prev).rev().d, moPlayer);
|
||||||
produceGhost(c, m, moPlayer);
|
produceGhost(c, m, moPlayer);
|
||||||
|
|
14
pcmove.cpp
14
pcmove.cpp
|
@ -309,6 +309,8 @@ bool pcmove::try_shooting(bool auto_target) {
|
||||||
nextmovetype = hit_anything ? lmAttack : lmSkip;
|
nextmovetype = hit_anything ? lmAttack : lmSkip;
|
||||||
lastmovetype = hit_anything ? lmAttack : lmSkip; lastmove = NULL;
|
lastmovetype = hit_anything ? lmAttack : lmSkip; lastmove = NULL;
|
||||||
|
|
||||||
|
while(bow::rusalka_curses--) rusalka_curse();
|
||||||
|
|
||||||
mi = movei(cwt.at, STAY);
|
mi = movei(cwt.at, STAY);
|
||||||
if(last_gravity_state && !gravity_state)
|
if(last_gravity_state && !gravity_state)
|
||||||
playerMoveEffects(mi);
|
playerMoveEffects(mi);
|
||||||
|
@ -1101,6 +1103,12 @@ void pcmove::tell_why_impassable() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EX void rusalka_curse() {
|
||||||
|
changes.ccell(cwt.at);
|
||||||
|
if(cwt.at->wall == waNone) cwt.at->wall = waShallow;
|
||||||
|
else if(cwt.at->wall == waShallow || isAlch(cwt.at->wall)) cwt.at->wall = waDeepWater;
|
||||||
|
}
|
||||||
|
|
||||||
bool pcmove::attack() {
|
bool pcmove::attack() {
|
||||||
auto& c2 = mi.t;
|
auto& c2 = mi.t;
|
||||||
if(!fmsAttack) return false;
|
if(!fmsAttack) return false;
|
||||||
|
@ -1177,11 +1185,7 @@ bool pcmove::attack() {
|
||||||
changes.value_add(wandering_jiangshi, 1);
|
changes.value_add(wandering_jiangshi, 1);
|
||||||
}
|
}
|
||||||
attackMonster(c2, attackflags | AF_MSG, moPlayer);
|
attackMonster(c2, attackflags | AF_MSG, moPlayer);
|
||||||
if(m == moRusalka) {
|
if(m == moRusalka) rusalka_curse();
|
||||||
changes.ccell(cwt.at);
|
|
||||||
if(cwt.at->wall == waNone) cwt.at->wall = waShallow;
|
|
||||||
else if(cwt.at->wall == waShallow || isAlch(cwt.at->wall)) cwt.at->wall = waDeepWater;
|
|
||||||
}
|
|
||||||
changes.ccell(c2);
|
changes.ccell(c2);
|
||||||
// salamanders are stunned for longer time when pushed into a wall
|
// salamanders are stunned for longer time when pushed into a wall
|
||||||
if(c2->monst == moSalamander && (mip.t == c2 || !mip.t)) c2->stuntime = 10;
|
if(c2->monst == moSalamander && (mip.t == c2 || !mip.t)) c2->stuntime = 10;
|
||||||
|
|
Loading…
Reference in New Issue