mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-11 18:00:34 +00:00
Terracotta Army rebalancing
This commit is contained in:
parent
0cc80c615b
commit
0b7b24ff82
10
game.cpp
10
game.cpp
@ -7,7 +7,7 @@ int lastsafety;
|
|||||||
int mutantphase;
|
int mutantphase;
|
||||||
int turncount;
|
int turncount;
|
||||||
int rosewave, rosephase;
|
int rosewave, rosephase;
|
||||||
int avengers, mirrorspirits;
|
int avengers, mirrorspirits, wandering_jiangshi, jiangshi_on_screen;
|
||||||
|
|
||||||
cell *lastmove;
|
cell *lastmove;
|
||||||
enum eLastmovetype {lmSkip, lmMove, lmAttack, lmSpecial, lmPush, lmTree};
|
enum eLastmovetype {lmSkip, lmMove, lmAttack, lmSpecial, lmPush, lmTree};
|
||||||
@ -2796,7 +2796,7 @@ void bfs() {
|
|||||||
hexsnakes.clear();
|
hexsnakes.clear();
|
||||||
|
|
||||||
hadwhat = havewhat;
|
hadwhat = havewhat;
|
||||||
havewhat = 0;
|
havewhat = 0; jiangshi_on_screen = 0;
|
||||||
snaketypes.clear();
|
snaketypes.clear();
|
||||||
if(!(hadwhat & HF_WARP)) { avengers = 0; }
|
if(!(hadwhat & HF_WARP)) { avengers = 0; }
|
||||||
if(!(hadwhat & HF_MIRROR)) { mirrorspirits = 0; }
|
if(!(hadwhat & HF_MIRROR)) { mirrorspirits = 0; }
|
||||||
@ -2950,6 +2950,8 @@ void bfs() {
|
|||||||
havewhat |= HF_FAST;
|
havewhat |= HF_FAST;
|
||||||
else if(c2->monst == moMutant)
|
else if(c2->monst == moMutant)
|
||||||
havewhat |= HF_MUTANT;
|
havewhat |= HF_MUTANT;
|
||||||
|
else if(c2->monst == moJiangshi)
|
||||||
|
jiangshi_on_screen++;
|
||||||
else if(c2->monst == moOutlaw)
|
else if(c2->monst == moOutlaw)
|
||||||
havewhat |= HF_OUTLAW;
|
havewhat |= HF_OUTLAW;
|
||||||
else if(isGhostMover(c2->monst))
|
else if(isGhostMover(c2->monst))
|
||||||
@ -7555,6 +7557,10 @@ bool movepcto(int d, int subdir, bool checkonly) {
|
|||||||
if(m) {
|
if(m) {
|
||||||
if((attackflags & AF_CRUSH) && !canAttack(cwt.c, moPlayer, c2, c2->monst, attackflags ^ AF_CRUSH ^ AF_MUSTKILL))
|
if((attackflags & AF_CRUSH) && !canAttack(cwt.c, moPlayer, c2, c2->monst, attackflags ^ AF_CRUSH ^ AF_MUSTKILL))
|
||||||
markOrb(itOrbSlaying);
|
markOrb(itOrbSlaying);
|
||||||
|
if(c2->monst == moTerraWarrior && hrand(100) > 2 * items[itTerra]) {
|
||||||
|
if(hrand(2 + jiangshi_on_screen) < 2)
|
||||||
|
wandering_jiangshi++;
|
||||||
|
}
|
||||||
attackMonster(c2, attackflags | AF_MSG, moPlayer);
|
attackMonster(c2, attackflags | AF_MSG, moPlayer);
|
||||||
// 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 && (pushto == c2 || !pushto)) c2->stuntime = 10;
|
if(c2->monst == moSalamander && (pushto == c2 || !pushto)) c2->stuntime = 10;
|
||||||
|
@ -932,7 +932,9 @@ void giantLandSwitch(cell *c, int d, cell *from) {
|
|||||||
forCellEx(c2, c) if(c2->wall == waTerraWarrior) nearwarrior = true;
|
forCellEx(c2, c) if(c2->wall == waTerraWarrior) nearwarrior = true;
|
||||||
if(nearwarrior && hrand(5000) < PT(130 + 2 * kills[moJiangshi], 260) && notDippingFor(itTerra))
|
if(nearwarrior && hrand(5000) < PT(130 + 2 * kills[moJiangshi], 260) && notDippingFor(itTerra))
|
||||||
c->item = itTerra;
|
c->item = itTerra;
|
||||||
if(hrand(20000) < 2 * (items[itTerra] + yendor::hardness()))
|
int t = 2 * (items[itTerra] + yendor::hardness());
|
||||||
|
if(t < 60) t += (60-t) * (60 - t) / 120;
|
||||||
|
if(hrand(20000) < t)
|
||||||
c->monst = moJiangshi;
|
c->monst = moJiangshi;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -302,6 +302,7 @@ void wandering() {
|
|||||||
int seepcount = getSeepcount();
|
int seepcount = getSeepcount();
|
||||||
int ghostcount = getGhostcount();
|
int ghostcount = getGhostcount();
|
||||||
if(cwt.c->land == laCA) ghostcount = 0;
|
if(cwt.c->land == laCA) ghostcount = 0;
|
||||||
|
bool genturn = hrand(100) < 30;
|
||||||
|
|
||||||
if(cwt.c->land == laZebra && cwt.c->wall == waNone && wchance(items[itZebra], 20))
|
if(cwt.c->land == laZebra && cwt.c->wall == waNone && wchance(items[itZebra], 20))
|
||||||
wanderingZebra(cwt.c);
|
wanderingZebra(cwt.c);
|
||||||
@ -548,6 +549,9 @@ void wandering() {
|
|||||||
else if(c->land == laTerracotta && wchance(items[itTerra], 40))
|
else if(c->land == laTerracotta && wchance(items[itTerra], 40))
|
||||||
c->monst = moJiangshi;
|
c->monst = moJiangshi;
|
||||||
|
|
||||||
|
else if(c->land == laTerracotta && wandering_jiangshi && genturn)
|
||||||
|
wandering_jiangshi--, c->monst = moJiangshi;
|
||||||
|
|
||||||
else if(c->land == laSwitch && wchance(items[itSwitch], 80))
|
else if(c->land == laSwitch && wchance(items[itSwitch], 80))
|
||||||
c->monst = active_switch();
|
c->monst = active_switch();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user