// PRIVATE void saveAchShot(const char *b, double scale) { for(int i=0; i<2; i++) { SDL_Surface *sav = s; s = SDL_CreateRGBSurface(SDL_SWSURFACE,512,512,32,0,0,0,0); videopar vid2 = vid; vid.xres = vid.yres = 512; vid.scale = scale; bool bb = vid.usingGL; vid.usingGL = false; calcparam(); darken = 0; ptds.clear(); drawthemap(); SDL_FillRect(s, NULL, i ? 0xFFFFFF : 0); drawqueue(); ptds.clear(); drawthemap(); char buf[128]; sprintf(buf, "steam/ach/%d%s.bmp", i, b); SDL_SaveBMP(s, buf); SDL_FreeSurface(s); s = sav; vid = vid2; vid.usingGL = bb; } } void saveFrame(int fr) { fanframe = fr / 30.0; for(int i=0; i<1; i++) { SDL_Surface *sav = s; s = SDL_CreateRGBSurface(SDL_SWSURFACE,2048,2048,32,0,0,0,0); videopar vid2 = vid; vid.xres = vid.yres = 2048; vid.scale = 1; bool bb = vid.usingGL; vid.usingGL = false; calcparam(); int ssr = sightrange; sightrange = 10; int sch = cheater; cheater = 0; darken = 0; ptds.clear(); mapeditor::drawplayer = false; drawthemap(); SDL_FillRect(s, NULL, i ? 0xFFFFFF : 0); drawqueue(); char buf[128]; sprintf(buf, "fanframe/image%02d.bmp", fr); SDL_SaveBMP(s, buf); SDL_FreeSurface(s); s = sav; vid = vid2; vid.usingGL = bb; cheater = sch; sightrange = ssr; } } int fadeoutat = -1; bool before; int tv = -1; int textat; string landmsg; string landmsg2; int landcol; eLand nextland; void process_local_extra() { if(fadeoutat != -1) { fadeout = 1 - (SDL_GetTicks() - fadeoutat) / 1000.0; if(fadeout < -1) { fadeoutat = -1; fadeout = 1; nextland = laNone; return; } if(fadeout < 0) { fadeout = -fadeout; if(before) { msgs.clear(); textat = SDL_GetTicks(); before = false; firstland = nextland; landmsg = linf[firstland].name; landmsg2 = ""; landcol = linf[firstland].color; if(shmup::on) restartGame('s'); if(euclid) restartGame('e'); tactic::trailer = true; if(!tactic::on) restartGame('t'); else restartGame(); /* if(firstland == laCamelot) { firstland = laIce; landmsg = "Shmup Mode"; landmsg2 = "you can play with your friends!"; shmup::players = 2; restartGame('t'); restartGame('s'); } if(firstland == laMirror) { landmsg2 = "featuring the Euclidean mode!"; restartGame('e'); } */ if(firstland == laWildWest) landmsg2 = "(bonus land)"; // vid.female = hrand(2); if(firstland == laRedRock) landcol = 0xFF0000; /* if(firstland == laPalace) cwt.c->mov[0]->monst = moPrincessArmed, cwt.c->mov[0]->hitpoints = 7, landmsg2 = "featuring the Princess!", vid.female = false, vid.samegender = false; */ if(isCrossroads(firstland)) { if(firstland == laCrossroads) landmsg2 = "and the Camelot!", tactic::on = false; for(int i=0; i= textat && ticks < textat + 2500) { int dt = SDL_GetTicks()-textat; int col = gradient(0, landcol, 0, min(dt, 1000), 1000); displayfr(vid.xres/2, vid.yres/4, 2, vid.fsize * 2, landmsg, col, 8); displayfr(vid.xres/2, vid.yres/4 + vid.fsize*2, 2, vid.fsize, landmsg2, col, 8); } } bool nomusic = false; // true; bool local_changemusic(eLand& id) { if(nomusic) return true; if(nextland) id = nextland; return false; } int syserr; int tab[3000][3000]; vector gtab[600][600][20]; int gromovprod(int x, int y, int o) { return tab[o][x] + tab[o][y] - tab[x][y]; } void gromov1() { int N = size(dcal); for(int i=0; i& v) { int maxd = -1; for(int i=0; i maxd) maxd = tab[a][v[i]]; return maxd; } void gromov() { static bool done = false; if(done) return; done = true; int N = 120; // size(dcal); for(int i=0; i fdelta) { fdelta = mindelta; printf("found delta of %d [%d %d %d]\n", fdelta, i, j, k); fi=i; fj=j; fk=k; } } } dcal[fi]->item = itRuby; dcal[fj]->item = itAmethyst; dcal[fk]->item = itCompass; for(int i=0; iwall = waFloorA; if(tab[i][fj] + tab[i][fk] == tab[fj][fk]) dcal[i]->wall = waFloorB; if(tab[i][fk] + tab[i][fi] == tab[fk][fi]) dcal[i]->wall = waFloorC; } gromov1(); } void process_local0(int sym) { // gromov(); if(sym == SDLK_F4) { fadeoutat = SDL_GetTicks(); before = true; tv++; tv %= LAND_TAC; nextland = land_tac[tv].l; vid.axes = 0; if(nextland == laCamelot) process_local0(sym); return; } /* if(sym == SDLK_F6 && nomusic && !items[itOrbFriend]) { nomusic = false; return; } */ /* if(sym == SDLK_F9) { syserr = system("killall recordmydesktop"); } if(sym == SDLK_F8) { syserr = system("killall -s SIGUSR1 recordmydesktop"); } */ } void process_local(int sym) { if(sym == SDLK_F9) { showoff = true; showid = 0; for(int i=0; iland = laCamelot; cwt.c->item = itHolyGrail; for(int t=0; ttype; t++) cwt.c->mov[t]->wall = waChasm; saveAchShot("grailh", 5); return; } if(sphere && cwt.c->land == laHalloween) { mapeditor::drawplayer = false; vid.alpha = 999; View = spin(M_PI); saveAchShot("halloween", 998); return; } for(int t=0; ttype; t++) cwt.c->mov[t]->wall = waChasm; /* mapeditor::drawplayer = false; cwt.c->land = laDryForest; cwt.c->item = itFernFlower; for(int t=0; ttype; t++) cwt.c->mov[t]->wall = waChasm; saveAchShot("fern", 5); cwt.c->land = laPower; cwt.c->item = itPower; cwt.c->type = 6; cwt.c->wall = waGlass; saveAchShot("power", 5); cwt.c->item = itOrbFire; cwt.c->wall = waNone; saveAchShot("fireorb", 5); */ cwt.c->type = 7; /* cwt.c->land = laHive; cwt.c->item = itRoyalJelly; saveAchShot("jelly", 5); cwt.c->land = laDeadCaves; cwt.c->item = itSilver; saveAchShot("silver", 5); cwt.c->land = laEmerald; cwt.c->item = itEmerald; saveAchShot("emerald", 5); cwt.c->land = laWineyard; cwt.c->item = itWine; saveAchShot("wine", 5); cwt.c->land = laEmerald; cwt.c->item = itNone; cwt.c->monst = moFlailer; saveAchShot("flailer", 5); cwt.c->land = laHive; cwt.c->item = itNone; cwt.c->monst = moBug2; saveAchShot("bug", 5); cwt.c->land = laCaves; cwt.c->item = itNone; cwt.c->monst = moNone; cwt.c->wall = waCavewall; saveAchShot("cavea", 5); cwt.c->land = laCrossroads; cwt.c->item = itNone; cwt.c->monst = moNone; cwt.c->wall = waCavewall; saveAchShot("caveb", 5); cwt.c->wall = waNone; cwt.c->item = itNone; cwt.c->monst = moHedge; saveAchShot("hedge", 5); cwt.c->item = itSapphire; cwt.c->monst = moNone; cwt.c->land = laCocytus; saveAchShot("sapphire", 5); cwt.c->item = itGrimoire; cwt.c->monst = moNone; cwt.c->land = laTemple; saveAchShot("grimoire", 5); cwt.c->item = itHolyGrail; cwt.c->monst = moNone; cwt.c->land = laCamelot; saveAchShot("grail", 5); cwt.c->item = itNone; cwt.c->monst = moKnight; cwt.c->land = laCamelot; cwt.c->wall = waChasm; saveAchShot("knight", 5); cwt.c->monst = moFlailer; cwt.c->land = laCamelot; cwt.c->wall = waChasm; saveAchShot("flailer", 5); cwt.c->monst = moNone; cwt.c->item = itHolyGrail; cwt.c->land = laCamelot; cwt.c->wall = waChasm; saveAchShot("grail-emo", 5); cwt.c->monst = moNone; cwt.c->item = itPirate; cwt.c->land = laCaribbean; cwt.c->wall = waCIsland; saveAchShot("pirate", 5); cwt.c->monst = moNone; cwt.c->item = itRedGem; cwt.c->land = laRedRock; cwt.c->wall = waRed3; saveAchShot("redgem", 5); cwt.c->monst = moNone; cwt.c->item = itWhirlpool; cwt.c->land = laWhirlpool; cwt.c->wall = waBoat; cwt.c->master->alt = cwt.c->master; cwt.c->master->distance = 0; saveAchShot("whirlpool", 5); cwt.c->monst = moNone; cwt.c->item = itCoast; cwt.c->land = laOcean; cwt.c->wall = waNone; saveAchShot("amber", 5); cwt.c->monst = moNone; cwt.c->item = itBombEgg; cwt.c->land = laMinefield; cwt.c->wall = waMineUnknown; saveAchShot("bombegg", 5); cwt.c->monst = moNone; cwt.c->item = itPalace; cwt.c->land = laPalace; cwt.c->wall = waNone; saveAchShot("hyperrug", 5); cwt.c->monst = moNone; cwt.c->item = itFjord; cwt.c->land = laLivefjord; cwt.c->wall = waNone; saveAchShot("garnet", 5); cwt.c->monst = moPrincess; cwt.c->item = itNone; cwt.c->land = laPalace; cwt.c->wall = waNone; saveAchShot("princess_palace", 5); cwt.c->monst = moPrincess; cwt.c->item = itNone; cwt.c->land = laCrossroads; cwt.c->wall = waNone; saveAchShot("princess_cross", 5); cwt.c->monst = moPrincess; cwt.c->item = itNone; cwt.c->land = laEmerald; cwt.c->wall = waNone; saveAchShot("princess_emerald", 5); */ /* cwt.c->monst = moNone; cwt.c->item = itFireShard; cwt.c->land = laEFire; saveAchShot("elfire", 5); cwt.c->monst = moNone; cwt.c->item = itWaterShard; cwt.c->land = laEWater; saveAchShot("elwater", 5); cwt.c->monst = moNone; cwt.c->item = itAirShard; cwt.c->land = laEAir; saveAchShot("elair", 5); cwt.c->monst = moNone; cwt.c->item = itEarthShard; cwt.c->land = laEEarth; saveAchShot("elearth", 5); cwt.c->monst = moNone; cwt.c->item = itZebra; cwt.c->land = laZebra; saveAchShot("zebra", 5); cwt.c->monst = moNone; cwt.c->item = itFulgurite; cwt.c->land = laStorms; saveAchShot("fulgurite", 5); cwt.c->monst = moNone; cwt.c->item = itMutant; cwt.c->land = laOvergrown; saveAchShot("mutant", 5); */ /* cwt.c->monst = moMetalBeast2; cwt.c->item = itNone; cwt.c->land = laStorms; saveAchShot("metalbeast", 5); */ /* cwt.c->monst = moNone; cwt.c->item = itLotus; cwt.c->land = laHaunted; saveAchShot("lotus", 5); cwt.c->monst = moGhost; cwt.c->item = itLotus; cwt.c->land = laHaunted; saveAchShot("lotusghost", 5); cwt.c->monst = moNone; cwt.c->item = itWindstone; cwt.c->land = laWhirlwind; saveAchShot("dove", 5); cwt.c->monst = moNone; cwt.c->item = itMutant2; cwt.c->land = laClearing; saveAchShot("fruit", 5); */ /* mapeditor::drawplayer = true; cwt.c->item = itNone; cwt.c->land = laIce; cwt.c->monst = moNone; saveAchShot("rogue", 5); */ /* cwt.c->monst = moNone; cwt.c->land = laMinefield; cwt.c->wall = waMineOpen; cwt.c->item = itNone; for(int t=0; ttype; t++) cwt.c->mov[t]->land = laMinefield, cwt.c->mov[t]->wall = waMineMine; saveAchShot("sevenmine", 5); cwt.c->monst = moCShark; cwt.c->land = laCamelot; cwt.c->item = itNone; cwt.c->wall = waCamelotMoat; cwt.c->mov[0]->wall = waCamelotMoat; cwt.c->mov[1]->wall = waCamelot; cwt.c->mov[2]->wall = waCamelotMoat; cwt.c->mov[3]->wall = waNone; cwt.c->mov[4]->wall = waNone; cwt.c->mov[5]->wall = waNone; cwt.c->mov[6]->wall = waNone; for(int t=0; ttype; t++) cwt.c->mov[t]->land = t<3? laCamelot : laCrossroads; saveAchShot("moatshark", 5); if(euclid) { vid.female = true; cwt.c->item = itNone; cwt.c->monst = moMirage; cwt.c->land = laMirror; cwt.c->wall = waNone; s veAchShot("mirage", 9); } */ /* cwt.c->monst = moNone; cwt.c->item = itCompass; cwt.c->land = laCaribbean; cwt.c->wall = waChasm; saveAchShot("compass-emo", 5); cwt.c->monst = moPirate; cwt.c->item = itNone; cwt.c->land = laCaribbean; cwt.c->wall = waChasm; saveAchShot("pirate-emo", 5); cwt.c->monst = moBullet; cwt.c->item = itOrbYendor; cwt.c->land = laHell; cwt.c->wall = waNone; saveAchShot("knife", 5);*/ /* mapeditor::drawplayer = false; cwt.c->item = itRose; cwt.c->land = laRose; cwt.c->monst = moNone; cwt.c->wall = waNone; saveAchShot("rose", 5); */ /* mapeditor::drawplayer = false; cwt.c->item = itCoral; cwt.c->land = laWarpSea; cwt.c->monst = moNone; for(int i=0; itype; i++) cwt.c->mov[i]->land = laWarpSea; cwt.c->landparam = 1337; cwt.c->wall = waBoat; saveAchShot("coral", 5); */ /* bfs(); for(int i=0; i<200; i++) { cell *c = dcal[i]; c->wall = waChasm, c->item = itNone; } mapeditor::drawplayer = false; cwt.c->item = itApple; cwt.c->land = laEndorian; cwt.c->monst = moNone; cwt.c->wall = waCanopy; saveAchShot("apple", 5); mapeditor::drawplayer = false; cwt.c->item = itDragon; cwt.c->land = laDragon; cwt.c->monst = moNone; cwt.c->wall = waNone; saveAchShot("dragon", 4); mapeditor::drawplayer = false; cwt.c->item = itBabyTortoise; cwt.c->land = laTortoise; tortoise::babymap[cwt.c] = 0; cwt.c->monst = moTortoise; tortoise::emap[cwt.c] = cwt.c; cwt.c->wall = waNone; saveAchShot("tortoise", 4); */ /* mapeditor::drawplayer = false; cwt.c->item = itKraken; cwt.c->land = laKraken; cwt.c->monst = moNone; cwt.c->wall = waSea; items[itOrbInvis] = 10; saveAchShot("kraken", 5); items[itOrbInvis] = 0; mapeditor::drawplayer = false; cwt.c->item = itBarrow; cwt.c->land = laBurial; cwt.c->monst = moNone; cwt.c->wall = waBarrowDig; cwt.c->landparam = 2; saveAchShot("burial", 5); forCellEx(c2, cwt.c) forCellEx(c3, c2) forCellEx(c4, c3) c4->wall = waChasm; mapeditor::drawplayer = true; mousing = true; cwt.c->item = itNone; cwt.c->land = laBurial; cwt.c->monst = moNone; cwt.c->wall = waNone; items[itOrbSword] = 10; saveAchShot("swordslash", 3); items[itOrbSword] = 0; mapeditor::drawplayer = false; cwt.c->item = itTrollEgg; cwt.c->land = laTrollheim; cwt.c->monst = moNone; cwt.c->wall = waNone; saveAchShot("troll", 5); */ /* cwt.c->land = laCrossroads4; cwt.c->wall = waNone; cwt.c->item = itNone; cwt.c->mov[0]->wall = waCavewall; cwt.c->mov[0]->land = laCaves; cwt.c->mov[1]->wall = waColumn; cwt.c->mov[1]->land = laRlyeh; cwt.c->mov[3]->wall = waRose; cwt.c->mov[3]->land = laRose; cwt.c->mov[2]->wall = waDune; cwt.c->mov[2]->land = laDesert; cwt.c->mov[4]->wall = waPalace; cwt.c->mov[4]->land = laPalace; cwt.c->mov[5]->wall = waIcewall; cwt.c->mov[5]->land = laIce; cwt.c->mov[6]->wall = waVinePlant; cwt.c->mov[6]->land = laWineyard; mapeditor::drawplayer = true; saveAchShot("cr4", 2.3); */ /* mapeditor::drawplayer = false; cwt.c->land = laCaves; cwt.c->monst = moGoblin; cwt.c->item = itNone; cwt.c->wall = waCavefloor; saveAchShot("goblin", 5); */ /* mapeditor::drawplayer = false; cwt.c->land = laReptile; cwt.c->monst = moNone; cwt.c->item = itDodeca; cwt.c->wall = waReptile; cwt.c->wparam = 30; saveAchShot("dod", 5); mapeditor::drawplayer = false; cwt.c->land = laDungeon; cwt.c->monst = moNone; cwt.c->item = itSlime; cwt.c->wall = waNone; saveAchShot("slime", 5); mapeditor::drawplayer = false; cwt.c->land = laMountain; cwt.c->monst = moNone; cwt.c->item = itAmethyst; cwt.c->wall = waBigBush; saveAchShot("amethyst", 5); */ mapeditor::drawplayer = false; cwt.c->land = laDesert; cwt.c->monst = moWorm; cwt.c->item = itNone; cwt.c->wall = waNone; saveAchShot("wormhead", 5); mapeditor::drawplayer = false; cwt.c->land = laPrairie; cwt.c->monst = moNone; cwt.c->item = itGreenGrass; cwt.c->wall = waNone; saveAchShot("ggrass", 5); mapeditor::drawplayer = false; cwt.c->land = laBull; cwt.c->monst = moNone; cwt.c->item = itBull; cwt.c->wall = waNone; saveAchShot("bull", 5); /* forCellEx(c2, cwt.c) forCellEx(c3, c2) forCellEx(c4, c3) c4->wall = waChasm, c4->item = itNone; cwt.c->land = laHell; cwt.c->wall = waNone; cwt.c->item = itOrbYendor; for(int i=0; i<7; i++) cwt.c->mov[i]->item = itOrbYendor; mapeditor::drawplayer = false; cwt.c->mov[0]->wall = waBoat; cwt.c->mov[0]->land = laOcean; cwt.c->mov[1]->wall = waNone; cwt.c->mov[1]->land = laGraveyard; cwt.c->mov[2]->wall = waNone; cwt.c->mov[2]->land = laJungle; cwt.c->mov[3]->wall = waNone; cwt.c->mov[3]->land = laOvergrown; cwt.c->mov[4]->wall = waFloorA; cwt.c->mov[4]->land = laAlchemist; cwt.c->mov[5]->wall = waNone; cwt.c->mov[5]->land = laPalace; cwt.c->mov[6]->wall = waNone; cwt.c->mov[6]->land = laWineyard; saveAchShot("yendc", 2.3); cwt.c->land = laIce; cwt.c->wall = waNone; cwt.c->item = itDiamond; mapeditor::drawplayer = false; cwt.c->mov[0]->wall = waNone; cwt.c->mov[0]->land = laDesert; cwt.c->mov[0]->item = itSpice; cwt.c->mov[1]->wall = waCavefloor; cwt.c->mov[1]->land = laCaves; cwt.c->mov[1]->item = itGold; cwt.c->mov[2]->wall = waNone; cwt.c->mov[2]->land = laJungle; cwt.c->mov[2]->item = itRuby; cwt.c->mov[3]->wall = waNone; cwt.c->mov[3]->land = laRlyeh; cwt.c->mov[3]->item = itStatue; cwt.c->mov[4]->wall = waFloorA; cwt.c->mov[4]->land = laAlchemist; cwt.c->mov[4]->item = itElixir; cwt.c->mov[5]->wall = waNone; cwt.c->mov[5]->land = laMotion; cwt.c->mov[5]->item = itFeather; cwt.c->mov[6]->wall = waNone; cwt.c->mov[6]->land = laHell; cwt.c->mov[6]->item = itHell; saveAchShot("ptm", 2.3); */ } } void verifyHell() { for(int i=0; i<50000; i++) { activateSafety(laHell); while(true) { setdist(cwt.c, 5, NULL); cwstep(cwt); if(cwt.c->wall != waNone) break; cwspin(cwt, 3); } cwstep(cwt); cellwalker z = cwt; int steps = 0; do { setdist(cwt.c, 6, NULL); cwspin(cwt, 1); cwstep(cwt); if(cwt.c->wall != waNone) { cwt.c->item = itGreenStone; cwstep(cwt); } else { if(cwt.c->item != itDiamond && cwt.c->item != itGreenStone) { cwt.c->item = itDiamond; steps++; } cwspin(cwt, 1); } } while(z.c != cwt.c || z.spin != cwt.spin); if(steps == 0) {i--; continue; } if(i % 20 == 0) { printf("\n"); fflush(stdout); } printf("%d,", steps); if(steps > 100000000 || steps < 2) { fflush(stdout); break; } } } bool sameland(eLand ll, eLand ln) { if(ln == laBarrier || ln == laOceanWall) return true; if(ln == ll) return true; if(isElemental(ln) && isElemental(ll)) return true; if(isHaunted(ln) && isHaunted(ll)) return true; return false; } bool doAutoplay; void autoplay() { // drawMesh(); // exit(0); doAutoplay = true; cheater = 1; eLand lland = laIce; eLand lland2 = laIce; int lcount = 0; int gcount = 0; int lastgold = 0; int lastdraw = 0; while(doAutoplay) { if(gold() > lastgold) { lastgold = gold(); gcount = 0; } else gcount++; if(sameland(lland, cwt.c->land)) lcount++; else { lcount = 0; lland2 = lland; lland = cwt.c->land; printf("%10dcc %5dt %5de %5d$ %5dK %5dgc %-30s\n", cellcount, turncount, celldist(cwt.c), gold(), tkills(), gcount, dnameof(cwt.c->land)); if(int(SDL_GetTicks()) > lastdraw + 3000) { lastdraw = SDL_GetTicks(); extern void fullcenter(); extern void mainloop(); fullcenter(); msgs.clear(); drawscreen(); } //mainloop(); } int i = rand() % cwt.c->type; cell *c2 = cwt.c->mov[i]; if(gcount < 500) for(int i=1; i= 50 && !sameland(lland, c2->land) && !sameland(lland2, c2->land)) break; else if(lcount < 50 && c2->item && c2->item != itOrbSafety) break; } items[rand() % ittypes] = 1 << (rand() % 11); kills[rand() % motypes] = 1 << (rand() % 11); items[itOrbYendor] &= 15; again: if(c2->cpdist > 1) { for(int j=0; jtype; j++) if(c2->mov[j] && c2->mov[j]->cpdist < c2->cpdist) { c2 = c2->mov[j]; goto again; } } killMonster(c2, moNone); jumpTo(c2, itNone); if(false) if(turncount % 5000 == 0) { printf("cells travelled: %d\n", celldist(cwt.c)); printf("\n"); for(int i=0; i\n", kills[i], minf[i].name, i); printf("\n\n\n"); } if(rand() % 5000 == 0 || (isGravityLand(cwt.c->land) && coastvalEdge(cwt.c) >= 100) || gcount > 2000 || cellcount >= 20000000) { printf("RESET\n"); gcount = 0; cellcount = 0; activateSafety(land_tac[rand() % LAND_TAC].l); } for(int i=0; iland == laNone) { printf("no-land found\n"); kills[moPlayer] = 0; canmove = true; doAutoplay = false; } } if(buggyGeneration) break; if(size(buggycells)) break; // if(turncount == 50000) exit(0); } } void verifyMutant(cell *c) { if(!c) return; if(c->monst == moMutant && c->mondir != NODIR && c->mov[c->mondir]->monst != moMutant) { raiseBuggyGeneration(c, "mutant failed!"); childbug = true; } } void verifyMutantAround(cell *c) { if(!c) return; verifyMutant(c); for(int i=0; itype; i++) verifyMutant(c->mov[i]); if(childbug) printf("around!\n"); } priority_queue > riverqueue; void enriver(cell *c) { if(c->wall != waNone) return; c->wall = waBigTree; int d = -(abs(getCdata(c, 0)-1) + abs(getCdata(c, 1)-1) + abs(getCdata(c, 2)-1)); riverqueue.push(make_pair(d, c)); } /* void river() { enriver(cwt.c); for(int i=0; i<10000; i++) { cell *c = riverqueue.top().second; riverqueue.pop(); c->wall = waFloorA; forCellCM(c2, c) enriver(c2); } } */ void bandpicture(); int lcol(cell *c1, cell *c2) { bool h7 = c1->type == 7; if(!c2) return 0xFF0000FF; int i0 = zebra40(c1)&2; int i1 = zebra40(c2)&2; /* if(i0 == 2 && i1 == 2) return 0xFFFFFFFF; if(i0 == 0 && i1 == 0) return 0x404040FF; return 0xA0A0A0FF; */ if(i0 == i1) return h7 ? 0x206020FF : 0x202020FF; return h7 ? 0x40F040FF : 0x00F000FF; } void localdraw(const transmatrix &V, cell *c) { return; int ct = c->type; if(ct == 7) for(int i=0; i<7; i++) queuepoly(V * spin(-2*M_PI*i/7), shBead1, lcol(c, c->mov[i])); if(ct == 6) for(int i=1; i<6; i+=2) if(c < c->mov[i]) queuepoly(V * spin(-2*M_PI*i/6 + M_PI), shBead0, lcol(c, c->mov[i])); } bool doCross; extern bool fixseed; namespace arg { int readLocal() { if(argis("-auto")) { PHASE(3); autoplay(); } else if(argis("-bmt")) buildmodetable(); else if(argis("-cross")) { PHASE(2); fixseed = doCross = true, firstland = laCrossroads2; } else if(argis("-musictable")) { loadMusicInfo(); for(int i=0; i