From 1b93ecd5a36913530b847c1d2f4c3686f9f69980 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Wed, 22 May 2019 00:19:03 +0200 Subject: [PATCH] vernum uniformization --- hyper.h | 6 +++--- mapeditor.cpp | 55 +++++++++++++++++++++++++-------------------------- racing.cpp | 6 +++--- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/hyper.h b/hyper.h index dfc912ba..7cdfda1e 100644 --- a/hyper.h +++ b/hyper.h @@ -3,7 +3,6 @@ // version numbers #define VER "11.0y" -#define VERNUM 11025 #define VERNUM_HEX 0xA619 #include @@ -4628,13 +4627,14 @@ template void hread(hstream& hs, C& c, C1& c1, C struct hstream_exception : hr_exception { hstream_exception() {} }; struct fhstream : hstream { + color_t vernum; FILE *f; virtual void write_char(char c) { write_chars(&c, 1); } virtual void write_chars(const char* c, size_t i) { if(fwrite(c, i, 1, f) != 1) throw hstream_exception(); } virtual void read_chars(char* c, size_t i) { if(fread(c, i, 1, f) != 1) throw hstream_exception(); } virtual char read_char() { char c; read_chars(&c, 1); return c; } - fhstream() { f = NULL; } - fhstream(const string pathname, const char *mode) { f = fopen(pathname.c_str(), mode); } + fhstream() { f = NULL; vernum = VERNUM_HEX; } + fhstream(const string pathname, const char *mode) { f = fopen(pathname.c_str(), mode); vernum = VERNUM_HEX; } ~fhstream() { if(f) fclose(f); } }; diff --git a/mapeditor.cpp b/mapeditor.cpp index a1882b0a..83e6c49c 100644 --- a/mapeditor.cpp +++ b/mapeditor.cpp @@ -99,7 +99,7 @@ namespace mapstream { bool saveMap(const char *fname) { fhstream f(fname, "wb"); if(!f.f) return false; - int32_t i = VERNUM; f.write(i); + f.write(f.vernum); f.write(patterns::whichPattern); f.write(geometry); char nbtype = char(variation); @@ -249,17 +249,17 @@ namespace mapstream { fhstream f(fname, "rb"); if(!f.f) return false; clearMemory(); - int vernum = f.get(); - if(vernum > 10505 && vernum < 11000) - vernum = 11005; - if(vernum >= 10420 && vernum < 10503) { + f.read(f.vernum); + if(f.vernum > 10505 && f.vernum < 11000) + f.vernum = 11005; + if(f.vernum >= 10420 && f.vernum < 10503) { int i; f.read(i); patterns::whichPattern = patterns::ePattern(i); } - else if(vernum >= 7400) f.read(patterns::whichPattern); + else if(f.vernum >= 7400) f.read(patterns::whichPattern); - if(vernum >= 10203) { + if(f.vernum >= 10203) { f.read(geometry); char nbtype; f.read(nbtype); @@ -274,7 +274,7 @@ namespace mapstream { f.read(torusconfig::qty); f.read(torusconfig::dx); f.read(torusconfig::dy); - if(vernum >= 10504) { + if(f.vernum >= 10504) { f.read(torusconfig::sdx); f.read(torusconfig::sdy); f.read(torusconfig::torus_mode); @@ -282,7 +282,7 @@ namespace mapstream { torusconfig::activate(); } #if CAP_CRYSTAL - if(geometry == gCrystal && vernum >= 10504) { + if(geometry == gCrystal && f.vernum >= 10504) { int sides; f.read(sides); #if CAP_CRYSTAL @@ -327,7 +327,7 @@ namespace mapstream { initcells(); if(shmup::on) shmup::init(); - if(vernum >= 10505) { + if(f.vernum >= 10505) { // game settings f.read(safety); bool b; @@ -364,7 +364,7 @@ namespace mapstream { if(parent<0 || parent >= isize(cellbyid)) break; int dir = f.read_char(); cell *c2 = cellbyid[parent]; - dir = fixspin(dir, relspin[parent], c2->type, vernum); + dir = fixspin(dir, relspin[parent], c2->type, f.vernum); c = createMov(c2, dir); // printf("%p:%d,%d -> %p\n", c2, relspin[parent], dir, c); @@ -379,20 +379,20 @@ namespace mapstream { cellbyid.push_back(c); relspin.push_back(rspin); c->land = (eLand) f.read_char(); - c->mondir = fixspin(rspin, f.read_char(), c->type, vernum); + c->mondir = fixspin(rspin, f.read_char(), c->type, f.vernum); c->monst = (eMonster) f.read_char(); - if(c->monst == moTortoise && vernum >= 11001) + if(c->monst == moTortoise && f.vernum >= 11001) f.read(tortoise::emap[c]); c->wall = (eWall) f.read_char(); // c->barleft = (eLand) f.read_char(); // c->barright = (eLand) f.read_char(); c->item = (eItem) f.read_char(); - if(c->item == itBabyTortoise && vernum >= 11001) + if(c->item == itBabyTortoise && f.vernum >= 11001) f.read(tortoise::babymap[c]); c->mpdist = f.read_char(); c->bardir = NOBARRIERS; // fixspin(rspin, f.read_char(), c->type); - if(vernum < 7400) { + if(f.vernum < 7400) { short z; f.read(z); c->wparam = z; @@ -400,7 +400,7 @@ namespace mapstream { else f.read(c->wparam); f.read(c->landparam); // backward compatibility - if(vernum < 7400 && !isIcyLand(c->land)) c->landparam = HEAT(c); + if(f.vernum < 7400 && !isIcyLand(c->land)) c->landparam = HEAT(c); c->stuntime = f.read_char(); c->hitpoints = f.read_char(); @@ -440,9 +440,9 @@ namespace mapstream { cheater = 1; dynamicval a3(geom3::always3, geom3::always3); - if(vernum >= 0xA616) f.read(geom3::always3); + if(f.vernum >= 0xA616) f.read(geom3::always3); - if(vernum >= 7400) while(true) { + if(f.vernum >= 7400) while(true) { int i = f.get(); if(i == -1) break; #if CAP_POLY @@ -454,7 +454,7 @@ namespace mapstream { initShape(i, j); usershapelayer& ds(usershapes[i][j]->d[l]); - if(vernum >= 11008) f.read(ds.zlevel); + if(f.vernum >= 11008) f.read(ds.zlevel); f.read(ds.sym); f.read(ds.rots); f.read(ds.color); ds.list.clear(); @@ -470,7 +470,7 @@ namespace mapstream { #endif } - if(vernum >= 11005) { + if(f.vernum >= 11005) { f.read(mutantphase); f.read(rosewave); f.read(rosephase); @@ -1645,15 +1645,14 @@ namespace mapeditor { return false; } scanline(f); - color_t vernum; - scan(f, vernum); - printf("vernum = %x\n", vernum); - if(vernum == 0) { + scan(f, f.vernum); + printf("vernum = %x\n", f.vernum); + if(f.vernum == 0) { addMessage(XLAT("Failed to load pictures from %1", picfile)); return false; } - if(vernum >= 0xA0A0) { + if(f.vernum >= 0xA0A0) { int tg, wp; int nt; scan(f, tg, nt, wp, patterns::subpattern_flags); @@ -1678,7 +1677,7 @@ namespace mapeditor { initShape(i, j); usershapelayer& ds(usershapes[i][j]->d[l]); - if(vernum >= 0xA608) scan(f, ds.zlevel); + if(f.vernum >= 0xA608) scan(f, ds.zlevel); ds.shift = readHyperpoint(f); ds.spin = readHyperpoint(f); ds.list.clear(); @@ -1703,8 +1702,8 @@ namespace mapeditor { return false; } println(f, "HyperRogue saved picture"); - println(f, format("%x\n", VERNUM_HEX)); - if(VERNUM_HEX >= 0xA0A0) + println(f, f.vernum); + if(f.vernum >= 0xA0A0) println(f, spaced(geometry, int(variation), patterns::whichPattern, patterns::subpattern_flags)); for(int i=0; i (); - if(vernum <= 0xA600) return true; // scores removed due to the possibility of cheating + f.vernum = f.get (); + if(f.vernum <= 0xA600) return true; // scores removed due to the possibility of cheating hread(f, ghostset()); return true; } @@ -160,7 +160,7 @@ void write_ghosts(string seed, int mcode) { fhstream f; f.f = fopen(ghost_filename(seed, mcode).c_str(), "wb"); if(!f.f) throw hstream_exception(); // ("failed to write the ghost file"); - hwrite(f, (const int&) VERNUM_HEX); + hwrite(f, f.vernum); hwrite(f, ghostset()); } #endif