From fdc1ac1e6e786fc37ced2639c3a142187092ff1e Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Mon, 24 Jul 2017 02:02:32 +0200 Subject: [PATCH] 10.0d --- init.cpp | 6 +++--- inventory.cpp | 11 +++++++++-- landgen.cpp | 7 +++---- language-pl.cpp | 3 +++ language.cpp | 1 + shmup.cpp | 48 ++++++++++++++++++++++++++++++++++-------------- 6 files changed, 53 insertions(+), 23 deletions(-) diff --git a/init.cpp b/init.cpp index e26061d6..c5a0e249 100644 --- a/init.cpp +++ b/init.cpp @@ -1,6 +1,6 @@ -#define VER "10.0c" -#define VERNUM 10003 -#define VERNUM_HEX 0xA003 +#define VER "10.0d" +#define VERNUM 10004 +#define VERNUM_HEX 0xA004 #define GEN_M 0 #define GEN_F 1 diff --git a/inventory.cpp b/inventory.cpp index 610fd2d1..31f83111 100644 --- a/inventory.cpp +++ b/inventory.cpp @@ -207,6 +207,13 @@ namespace inv { bool mirroring; + const char* helptext = + "You are playing in the Orb Strategy Mode. Collecting treasure " + "gives you access to magical Orb powers. In this mode, " + "unlocking requirements are generally higher, and " + "several quests and lands " + "give you extremely powerful Orbs of the Mirror.\n"; + void show() { gamescreen(2); @@ -255,7 +262,7 @@ namespace inv { int tcol = remaining[i] ? darkenedby(icol, 1) : 0; if(remaining[i] != 1 || !gg) - displaystr(px, py, 2, gg?rad:rad*3/2, remaining[i] == 0 ? "X" : remaining[i] == 1 ? "o" : its(remaining[i]), tcol, 8); + displaystr(px, py, 2, gg?rad:rad*3/2, remaining[i] <= 0 ? "X" : remaining[i] == 1 ? "o" : its(remaining[i]), tcol, 8); } bool b = hypot(mousex-px, mousey-py) < rad; @@ -314,9 +321,9 @@ namespace inv { if(col) displaystr(vid.xres/2, vid.yres - vid.fsize*4, 2, vid.fsize, XLAT(olrDescriptions[olr], cwt.c->land, tr, treasureType(cwt.c->land)), col, 8); - dialog::displayPageButtons(3, 0); } } + dialog::displayPageButtons(3, 0); mouseovers = ""; keyhandler = [] (int sym, int uni) { if(plain) dialog::handleNavigation(sym, uni); diff --git a/landgen.cpp b/landgen.cpp index 85f18845..719b9e8f 100644 --- a/landgen.cpp +++ b/landgen.cpp @@ -1031,7 +1031,6 @@ ld orbprizefun(int tr) { } ld orbcrossfun(int tr) { - if(inv::on) return tr >= 50 ? 1 : 0; if(tr < 10) return 0; if(tr > 25) return 1; return (tr*2 + 50) / 100.; @@ -1156,7 +1155,7 @@ void placeCrossroadOrbs(cell *c) { if(oi.orb == itOrbSafety && c->land == laCrossroads5) continue; int mul = c->land == laCrossroads5 ? 10 : 1; int gch = oi.gchance; - gch /= orbcrossfun(treas); + if(!inv::on) gch /= orbcrossfun(treas); else gch /= 2; if(hrand(gch) >= mul) continue; if(hrand(50+items[itHyperstone]) >= 50) continue; c->item = oi.orb; @@ -4676,7 +4675,7 @@ void setdist(cell *c, int d, cell *from) { if(d == 7 && c->land == laDeadCaves && c->wall == waDeadwall && hrand(1000) < items[itSilver] + hard && !safety) c->monst = moSeep; - if(d == 7 && c->wall == waVinePlant && hrand(100) < (randomPatternsMode ? 2 : 10)) + if(d == 7 && c->wall == waVinePlant && hrand(100) < (randomPatternsMode ? 2 : 10) && !peace::on) c->monst = moVineSpirit; if(d == 7 && c->land == laOcean && !safety) { @@ -5283,7 +5282,7 @@ void setdist(cell *c, int d, cell *from) { if(isCrossroads(c->land)) { if(purehepta && c->land == laCrossroads5 && hrand(100) < 60) c->wall = waBarrier; - else if(c->type == 6 && items[itShard] >= 10 && hrand(8000) < 120*orbcrossfun(items[itShard])) + else if(c->type == 6 && !inv::on && items[itShard] >= 10 && hrand(8000) < 120*orbcrossfun(items[itShard])) c->wall = hrand(2) ? waMirror : waCloud; else if(c->type == 6 && tactic::on && isCrossroads(tactic::lasttactic) && hrand(8000) < 120) c->wall = hrand(2) ? waMirror : waCloud; diff --git a/language-pl.cpp b/language-pl.cpp index 0c4a154a..8055753b 100644 --- a/language-pl.cpp +++ b/language-pl.cpp @@ -5784,5 +5784,8 @@ S("cheats", "oszustwa") S("help for keyboard user", "pomoc dla użytkowników klawiatury") S("mark heptagons", "oznacz siedmiokąty") +S("Collect as many Dodecahedra as you can, then return here!", + "Zbierz jak najwięcej Dwunastościanów i tu wróć!") + #undef Orb diff --git a/language.cpp b/language.cpp index 6ccb2664..3ceebbb6 100644 --- a/language.cpp +++ b/language.cpp @@ -124,6 +124,7 @@ void basicrep(string& x) { rep(x, "%łeś0", choose3(playergender(), "łeś", "łaś", "łoś")); rep(x, "%ąłeś0", choose3(playergender(), "ąłeś", "ęłaś", "ęłoś")); rep(x, "%ógł0", choose3(playergender(), "ógł", "ogła", "ogło")); + rep(x, "%ł0", choose3(playergender(), "ł", "ła", "ło")); } if(l == 3) { diff --git a/shmup.cpp b/shmup.cpp index d40c243e..5bb50c82 100644 --- a/shmup.cpp +++ b/shmup.cpp @@ -927,11 +927,11 @@ vector active, nonvirtual, additional; cell *findbaseAround(hyperpoint p, cell *around) { cell *best = around; - double d0 = intval(p, gmatrix[around] * C0); + double d0 = intval(p, ggmatrix(around) * C0); for(int i=0; itype; i++) { cell *c2 = around->mov[i]; - if(c2 && gmatrix.count(c2)) { - double d1 = intval(p, gmatrix[c2] * C0); + if(c2) { + double d1 = intval(p, ggmatrix(c2) * C0); if(d1 < d0) { best = c2; d0 = d1; } } } @@ -1730,7 +1730,7 @@ void movePlayer(monster *m, int delta) { if(c2->wall == waClosePlate || c2->wall == waOpenPlate) toggleGates(c2, c2->wall); - if(c2->item == itOrbYendor) yendor::check(c2); + if(c2->item == itOrbYendor && !peace::on) yendor::check(c2); collectItem(c2); } } @@ -2156,10 +2156,15 @@ void moveBullet(monster *m, int delta) { continue; } // Hedgehog Warriors only killable outside of the 45 degree angle - if(m2->type == moHedge) { + if(m2->type == moHedge && !peace::on) { hyperpoint h = inverse(m2->pat) * m->pat * C0; if(h[0] > fabsl(h[1])) { m->dead = true; continue; } } + if(peace::on && !isIvy(m2->type)) { + m->dead = true; + m2->stunoff = curtime + 600; + continue; + } // if((m2->type == moPalace || m2->type == moFatGuard || m2->type == moSkeleton || m2->type == moVizier || isMetalBeast(m2->type) || m2->type == moTortoise || @@ -2371,7 +2376,7 @@ void moveMonster(monster *m, int delta) { break; } } - else if(m->type == moWolf) { + else if(m->type == moWolf && !peace::on) { cell *cnext = c; for(int i=0; itype; i++) { cell *c2 = c->mov[i]; @@ -2408,7 +2413,7 @@ void moveMonster(monster *m, int delta) { directi = 0; } } - else if(!direct && !invismove) { + else if(!direct && !invismove && !peace::on) { for(int i=0; itrackroute(pc[i]->pat, step) && (!direct || intval(pc[i]->pat*C0, m->pat*C0) < intval(goal*C0,m->pat*C0))) { goal = pc[i]->pat; @@ -2418,7 +2423,7 @@ void moveMonster(monster *m, int delta) { } } - if(!direct) while(true) { + if(!direct && !peace::on) while(true) { if(m->trackroute(gmatrix[c], step)) goal = gmatrix[c]; cell *cnext = c; @@ -2442,7 +2447,7 @@ void moveMonster(monster *m, int delta) { // at most 45 degrees if(h[0] < fabsl(h[1])) return; } - else { + else if(!peace::on) { nat = nat * rspintox(inverse(m->pat) * goal * C0); } } @@ -2474,7 +2479,10 @@ void moveMonster(monster *m, int delta) { igo_retry: - if(igo == IGO) { + if(igo == IGO && peace::on) + nat0 = nat0 * spin(rand() % 16); + + else if(igo >= IGO) { if(m->type == moHerdBull) m->type = moRagingBull; return; } @@ -2486,7 +2494,7 @@ void moveMonster(monster *m, int delta) { nat = nat0 * spin(igospan[igo]) * xpush(step) * spin(-igospan[igo]);; // * spintox(wherePC); - if(m->type != moRagingBull) + if(m->type != moRagingBull && !peace::on) if(intval(nat*C0, goal*C0) >= intval(m->pat*C0, goal*C0) && !stunned && !carried) { igo++; goto igo_retry; } @@ -2506,10 +2514,13 @@ void moveMonster(monster *m, int delta) { if(d < SCALE2 * 0.1) crashintomon = m2; } + if(!peace::on) for(int i=0; idead = true; + if(peace::on) ; + else if(crashintomon && isMimic(crashintomon->type)) { killMonster(crashintomon, m->type); crashintomon = NULL; @@ -2537,7 +2548,7 @@ void moveMonster(monster *m, int delta) { igo++; goto igo_retry; } - if(isPlayerOn(c2)) { + if(isPlayerOn(c2) && !peace::on) { bool usetongue = false; if(isSlimeMover(m->type) || m->type == moWaterElemental) usetongue = true; if(isWatery(c2) && !survivesWater(m->type) && !m->inBoat) usetongue = true; @@ -2671,6 +2682,8 @@ void moveMonster(monster *m, int delta) { } } + if(peace::on && c2->mpdist > 7) return; + if(!(m->type == moRoseBeauty && c2->land != laRose)) { if(stunned ? passable(c2, m->base, P_BLOW | reflectflag) : passable_for(m->type, c2, m->base, P_CHAIN | reflectflag)) { if(c2 != m->base && m->type == moButterfly) @@ -2678,8 +2691,11 @@ void moveMonster(monster *m, int delta) { m->rebasePat(nat); if(m->type == moRagingBull && step > 1e-6) m->stunoff = CHARGING; } - else if(m->type == moRagingBull && m->stunoff == CHARGING) - m->stunoff = curtime + BULLSTUN; + else { + if(peace::on) { igo++; goto igo_retry; } + if(m->type == moRagingBull && m->stunoff == CHARGING) + m->stunoff = curtime + BULLSTUN; + } } if(direct) { @@ -3124,6 +3140,10 @@ bool drawMonster(const transmatrix& V, cell *c, const transmatrix*& Vboat, trans queuepoly(mmscale(view, 1.15), shPHead, col); ShadowV(view, shPHead); } + else if(peace::on) { + queuepolyat(mmscale(view, 1.15), shDisk, col, PPR_MISSILE); + ShadowV(view, shPHead); + } else { transmatrix t = view * spin(curtime / 50.0); queuepoly(mmscale(t, 1.15), shKnife, col);