mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-11 09:50: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 turncount;
|
||||
int rosewave, rosephase;
|
||||
int avengers, mirrorspirits;
|
||||
int avengers, mirrorspirits, wandering_jiangshi, jiangshi_on_screen;
|
||||
|
||||
cell *lastmove;
|
||||
enum eLastmovetype {lmSkip, lmMove, lmAttack, lmSpecial, lmPush, lmTree};
|
||||
@ -2796,7 +2796,7 @@ void bfs() {
|
||||
hexsnakes.clear();
|
||||
|
||||
hadwhat = havewhat;
|
||||
havewhat = 0;
|
||||
havewhat = 0; jiangshi_on_screen = 0;
|
||||
snaketypes.clear();
|
||||
if(!(hadwhat & HF_WARP)) { avengers = 0; }
|
||||
if(!(hadwhat & HF_MIRROR)) { mirrorspirits = 0; }
|
||||
@ -2950,6 +2950,8 @@ void bfs() {
|
||||
havewhat |= HF_FAST;
|
||||
else if(c2->monst == moMutant)
|
||||
havewhat |= HF_MUTANT;
|
||||
else if(c2->monst == moJiangshi)
|
||||
jiangshi_on_screen++;
|
||||
else if(c2->monst == moOutlaw)
|
||||
havewhat |= HF_OUTLAW;
|
||||
else if(isGhostMover(c2->monst))
|
||||
@ -7555,6 +7557,10 @@ bool movepcto(int d, int subdir, bool checkonly) {
|
||||
if(m) {
|
||||
if((attackflags & AF_CRUSH) && !canAttack(cwt.c, moPlayer, c2, c2->monst, attackflags ^ AF_CRUSH ^ AF_MUSTKILL))
|
||||
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);
|
||||
// salamanders are stunned for longer time when pushed into a wall
|
||||
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;
|
||||
if(nearwarrior && hrand(5000) < PT(130 + 2 * kills[moJiangshi], 260) && notDippingFor(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;
|
||||
}
|
||||
break;
|
||||
|
@ -302,6 +302,7 @@ void wandering() {
|
||||
int seepcount = getSeepcount();
|
||||
int ghostcount = getGhostcount();
|
||||
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))
|
||||
wanderingZebra(cwt.c);
|
||||
@ -548,6 +549,9 @@ void wandering() {
|
||||
else if(c->land == laTerracotta && wchance(items[itTerra], 40))
|
||||
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))
|
||||
c->monst = active_switch();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user