1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2025-08-26 15:32:19 +00:00

other active orbs now extend the duration of Orb of Recall

This commit is contained in:
Zeno Rogue 2025-08-17 16:17:13 +02:00
parent f218b7a3d5
commit 0e08b3225d
3 changed files with 16 additions and 1 deletions

View File

@ -327,10 +327,12 @@ int arg::readCommon() {
}
else if(argis("-save-mode")) {
PHASEFROM(2);
save_mode_to_file(shift_args());
}
else if(argis("-load-mode")) {
PHASEFROM(2);
try {
load_mode_from_file(shift_args());
}

View File

@ -426,6 +426,9 @@ EX string generateHelpForItem(eItem it) {
if(it == itOrbIntensity && inv::on)
help += XLAT("\n\nIn the Orb Strategy Mode, the effect is increased to +100%.");
if(it == itOrbRecall)
help += XLAT("\n\nOther active orbs extend the duration of this orb.");
if(it == itOrbEmpathy) {
int cnt = 0;
for(int i=0; i<ittypes; i++) {

View File

@ -82,14 +82,18 @@ EX int intensify(int val) {
return inv::on ? 2 * val : val * 6 / 5;
}
int orbs_drained;
EX bool reduceOrbPower(eItem it, int cap) {
if(items[it] && markOrb(itCurseDraining)) {
orbs_drained++;
items[it] -= (markOrb(itOrbEnergy) ? 1 : 2) * multi::activePlayers();
if(items[it] < 0) items[it] = 0;
if(items[it] == 0 && it == itOrbLove)
princess::bringBack();
}
if(items[it] && (lastorbused[it] || (it == itOrbShield && items[it]>3) || !markOrb(itOrbTime))) {
orbs_drained++;
items[it] -= multi::activePlayers();
if(isHaunted(cwt.at->land))
fail_survivalist();
@ -106,6 +110,7 @@ EX bool reduceOrbPower(eItem it, int cap) {
EX void reduceOrbPowerAlways(eItem it) {
if(items[it]) {
orbs_drained++;
items[it] -= multi::activePlayers();
if(items[it] < 0) items[it] = 0;
}
@ -126,6 +131,8 @@ EX void reverse_curse(eItem curse, eItem orb, bool cancel) {
EX void reduceOrbPowers() {
orbs_drained = 0;
reverse_curse(itCurseWeakness, itOrbSlaying, true);
reverse_curse(itCurseFatigue, itOrbSpeed, false); // OK
reverse_curse(itCurseRepulsion, itOrbMagnetism, true); // OK
@ -183,7 +190,6 @@ EX void reduceOrbPowers() {
reduceOrbPower(itOrbSword2, 100 + 20 * multi::activePlayers());
reduceOrbPower(itOrbStone, 120);
reduceOrbPower(itOrbNature, 120);
reduceOrbPower(itOrbRecall, 77);
reduceOrbPower(itOrbBull, 120);
reduceOrbPower(itOrbHorns, 77);
reduceOrbPower(itOrbLava, 80);
@ -214,6 +220,10 @@ EX void reduceOrbPowers() {
mine::auto_teleport_charges();
#endif
if(orbs_drained && items[itOrbRecall] <= 10)
items[itOrbRecall] = 11;
reduceOrbPower(itOrbRecall, 77);
whirlwind::calcdirs(cwt.at);
items[itStrongWind] = !items[itOrbAether] && whirlwind::qdirs == 1;
items[itWarning] = 0;