diff --git a/cell.cpp b/cell.cpp index feac765b..6fd369a3 100644 --- a/cell.cpp +++ b/cell.cpp @@ -711,14 +711,14 @@ void cwmirrorat(cellwalker& cw, int d) { cw.mirrored = !cw.mirrored; } -static const struct rev_t { } rev; +static const struct rev_t { rev_t() {} } rev; cellwalker& operator += (cellwalker& cw, rev_t) { cw += cw.c->type/2 + ((cw.c->type&1)?hrand(2):0); return cw; } -static const struct revstep_t { } revstep; +static const struct revstep_t { revstep_t() {}} revstep; cellwalker& operator += (cellwalker& cw, revstep_t) { cw += rev; cw += wstep; return cw; diff --git a/changelog.txt b/changelog.txt index fba25c35..89d4576d 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2276,3 +2276,28 @@ Gameplay bugfixes 2018.03.02 XX:XX version 10.3l - fixed monster infighting caused by dragon dismounting changes - fixed Android slowdown + +2018.03.24 17:22 version 10.3m + +For hyperbolic geometry nerds: +- added smooth surfaces of constant negative curvature (in the hypersian rug menu) +- Alt makes rotation slower in the Hypersian Rug model +- added the hemisphere model +- improved the quality of 3D models from conformal menu + +Gameplay bugfixes: +- fixed the Princess Quest not appearing +- worm-like creatures are no longer happy to get into bull herds +- raised Zombies no longer move on their first turn +- no more great walls in PTM Graveyard +- no more Lost Memory areas in PTM Chaos +- no more broken Red Raider pairs close to player start +- Baby Tortoise movement is now animated (when switching places with an adult) + +User interface: +- shmup mode in the start menu replaced with a special mode chosen randomly from a selection +- the start menu now includes an explicit option to use the current/saved settings + +MINOR: +- reptilecheat option ('-rch') disables Windy chasms +- synchronized fanframe so that the period is 1000 ticks diff --git a/init.cpp b/init.cpp index 07356944..78238dbf 100644 --- a/init.cpp +++ b/init.cpp @@ -18,8 +18,8 @@ #define NOLICENSE #endif -#define VER "10.3l" -#define VERNUM 10312 +#define VER "10.3m" +#define VERNUM 10313 #ifndef CAP_SHADER #define CAP_SHADER CAP_GL diff --git a/surface.cpp b/surface.cpp index 1782bc56..f6045911 100644 --- a/surface.cpp +++ b/surface.cpp @@ -67,7 +67,7 @@ hyperpoint coord(hyperpoint h) { ld r = 1 / cosh(t); ld x = t - tanh(t); - return { r * sin(v), r * cos(v), x }; + return hpxyz( r * sin(v), r * cos(v), x ); break; } @@ -77,7 +77,7 @@ hyperpoint coord(hyperpoint h) { ld a = sqrt(1-dini_b*dini_b); - return { a * sin(v) * sin(t), a * cos(v) * sin(t), a * (cos(t) + log(tan(t/2))) + dini_b * v }; + return hpxyz( a * sin(v) * sin(t), a * cos(v) * sin(t), a * (cos(t) + log(tan(t/2))) + dini_b * v ); break; } @@ -87,11 +87,11 @@ hyperpoint coord(hyperpoint h) { ld deno = 1 / (1 + u * u * sin(v) * sin(v)); - return { + return hpxyz( 2 * (cos(u) + u * sin(u)) * sin(v) * deno, 2 * (sin(u) - u * cos(u)) * sin(v) * deno, log(tan(v/2)) + 2 * cos(v) * deno - }; + ); } case dsHyperlike: { @@ -101,7 +101,7 @@ hyperpoint coord(hyperpoint h) { ld phi = hyper_b * cosh(v); ld psi = integral(v); - return { phi * cos(u), phi * sin(u), psi}; + return hpxyz( phi * cos(u), phi * sin(u), psi ); } default: @@ -122,10 +122,10 @@ hyperpoint coord_derivative(hyperpoint h, int cc) { ld v = h[1]; if(cc == 0) { ld phi = hyper_b * cosh(v); - return { phi * -sin(u), phi * cos(u), 0 }; + return hpxyz( phi * -sin(u), phi * cos(u), 0 ); } else { - return { hyper_b * sinh(v) * cos(u), hyper_b * sinh(v) * sin(u), f(v) }; + return hpxyz( hyper_b * sinh(v) * cos(u), hyper_b * sinh(v) * sin(u), f(v) ); } } case dsKuen: { @@ -134,19 +134,20 @@ hyperpoint coord_derivative(hyperpoint h, int cc) { ld denom = pow(sin(v),2)*(u*u)+1; ld denom2 = denom * denom; if(cc == 1) - return { + return hpxyz ( 2*sin(v)/denom*u*cos(u)+-4*(sin(u)*u+cos(u))*pow(sin(v),3)/denom2*u, -4*pow(sin(v),3)*(sin(u)-u*cos(u))/denom2*u+2*sin(u)*sin(v)/denom*u, -4*pow(sin(v),2)/denom2*u*cos(v) - }; - else return { + ); + else return hpxyz ( 2*(sin(u)*u+cos(u))/denom*cos(v)+-4*(sin(u)*u+cos(u))*pow(sin(v),2)/denom2*(u*u)*cos(v), 2*(sin(u)-u*cos(u))/denom*cos(v)+-4*pow(sin(v),2)*(sin(u)-u*cos(u))/denom2*(u*u)*cos(v), -4*sin(v)/denom2*(u*u)*pow(cos(v),2)+1/tan(v/2)*(pow(tan(v/2),2)+1)/2+-2*sin(v)/denom - }; + ); break; } default: + // too lazy do differentiate return (coord(h + unit_vector[cc] * epsd) - coord(h)) / epsd; } } @@ -488,7 +489,7 @@ void run_kuen() { int pid[5] = {0, 8, 1, 2, 4}; string captions[5] = {"", "the upper component", "the lower center", "the lower left", "the lower right"}; - vector newmesh(size(mesh), NULL); + vector newmesh(size(mesh), nullptr); for(auto p: mesh) { auto px = map_to_surface(p->h, m); p->surface_point = px; @@ -738,12 +739,13 @@ void show_surfaces() { p->flat = p->surface_point.params; else if(uni == '#') dialog::editNumber(dini_b, -1, 1, .05, .15, XLAT("parameter"), - XLAT("The larger the number, the less twisted it is.") + XLAT("The larger the number, the more twisted it is.") ); else if(uni == 'p') { - dialog::editNumber(precision, 1, 10000, .1, 100, XLAT("precision"), + dialog::editNumber(precision, 1, 10000, 0, 100, XLAT("precision"), XLAT("Computing these models involves integrals and differential equations, which are currently solved numerically. This controls the precision.") ); + dialog::ne.step = .1; dialog::scaleLog(); } else if(uni == 'c') {