Terracotta Army rebalancing

This commit is contained in:
Zeno Rogue 2018-01-25 23:22:33 +01:00
parent 0cc80c615b
commit 0b7b24ff82
3 changed files with 15 additions and 3 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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();