mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-01-22 23:17:04 +00:00
further cleanup
This commit is contained in:
parent
ad03115097
commit
0ef57dde15
@ -73,6 +73,13 @@ EX const char* leadernames[NUMLEADER] = {
|
||||
#define LB_HALLOWEEN 63
|
||||
#define LB_RACING 81
|
||||
|
||||
EX bool haveLeaderboard(int id);
|
||||
EX int get_currentscore(int id);
|
||||
EX void set_priority_board(int id);
|
||||
EX int get_sync_status();
|
||||
EX bool score_loaded(int id);
|
||||
EX int score_default(int id);
|
||||
|
||||
EX void upload_score(int id, int v);
|
||||
|
||||
string achievementMessage[3];
|
||||
|
@ -854,7 +854,7 @@ void gdpush_utf8(const string& s) {
|
||||
graphdata[g] = q;
|
||||
}
|
||||
|
||||
bool displayfr(int x, int y, int b, int size, const string &s, color_t color, int align) {
|
||||
EX bool displayfr(int x, int y, int b, int size, const string &s, color_t color, int align) {
|
||||
gdpush(2); gdpush(x); gdpush(y); gdpush(align);
|
||||
gdpush(color); gdpush(size); gdpush(b);
|
||||
gdpush_utf8(s);
|
||||
@ -866,15 +866,16 @@ bool displayfr(int x, int y, int b, int size, const string &s, color_t color, in
|
||||
my >= -size*3/4 && my <= +size*3/4;
|
||||
}
|
||||
|
||||
bool displaystr(int x, int y, int shift, int size, const string &s, color_t color, int align) {
|
||||
EX bool displaystr(int x, int y, int shift, int size, const string &s, color_t color, int align) {
|
||||
return displayfr(x,y,0,size,s,color,align);
|
||||
}
|
||||
|
||||
bool displaystr(int x, int y, int shift, int size, char const *s, color_t color, int align) {
|
||||
EX bool displaystr(int x, int y, int shift, int size, char const *s, color_t color, int align) {
|
||||
return displayfr(x,y,0,size,s,color,align);
|
||||
}
|
||||
|
||||
#else
|
||||
#endif
|
||||
#if !CAP_XGD
|
||||
EX bool displaystr(int x, int y, int shift, int size, const char *str, color_t color, int align) {
|
||||
|
||||
if(strlen(str) == 0) return false;
|
||||
@ -1198,8 +1199,12 @@ EX void displayButton(int x, int y, const string& name, int key, int align, int
|
||||
}
|
||||
}
|
||||
|
||||
char mousekey = 'n';
|
||||
char newmousekey;
|
||||
#if HDR
|
||||
#define SETMOUSEKEY 5000
|
||||
#endif
|
||||
|
||||
EX char mousekey = 'n';
|
||||
EX char newmousekey;
|
||||
|
||||
EX void displaymm(char c, int x, int y, int rad, int size, const string& title, int align) {
|
||||
if(displayfr(x, y, rad, size, title, c == mousekey ? 0xFF8000 : 0xC0C0C0, align)) {
|
||||
|
@ -99,6 +99,12 @@ static const flagtype IF_RANGED = Flag(4);
|
||||
static const flagtype IF_SHMUPLIFE = Flag(5);
|
||||
static const flagtype IF_REVIVAL = Flag(6);
|
||||
|
||||
// 0 = basic treasure, 1 = other item, 2 = power orb, 3 = not an item
|
||||
#define IC_TREASURE 0
|
||||
#define IC_OTHER 1
|
||||
#define IC_ORB 2
|
||||
#define IC_NAI 3
|
||||
|
||||
struct itemtype {
|
||||
char glyph;
|
||||
color_t color;
|
||||
|
50
complex.cpp
50
complex.cpp
File diff suppressed because one or more lines are too long
@ -21,6 +21,8 @@ EX const char* COLORBAR = "###";
|
||||
EX namespace dialog {
|
||||
|
||||
#if HDR
|
||||
#define IFM(x) (mousing?"":x)
|
||||
|
||||
static const int DONT_SHOW = 16;
|
||||
|
||||
enum tDialogItem {diTitle, diItem, diBreak, diHelp, diInfo, diIntSlider, diSlider, diBigItem, diKeyboard};
|
||||
|
47
euclid.cpp
47
euclid.cpp
@ -23,7 +23,7 @@ EX pair<int, int> vec_to_pair(int vec) {
|
||||
return {x, y};
|
||||
}
|
||||
|
||||
namespace torusconfig {
|
||||
EX namespace torusconfig {
|
||||
// the configuration of the torus topology.
|
||||
// torus cells are indexed [0..qty),
|
||||
// where the cell to the right from i is indexed i+dx,
|
||||
@ -37,13 +37,45 @@ namespace torusconfig {
|
||||
int def_qty = 127*3, dx = 1, def_dy = -11*2;
|
||||
int qty = def_qty, dy = def_dy;
|
||||
|
||||
int sdx = 12, sdy = 12;
|
||||
EX int sdx = 12;
|
||||
EX int sdy = 12;
|
||||
|
||||
#if HDR
|
||||
enum eTorusMode : char {
|
||||
tmSingleHex,
|
||||
tmSingle,
|
||||
tmSlantedHex,
|
||||
tmStraight,
|
||||
tmStraightHex,
|
||||
tmKlein,
|
||||
tmKleinHex,
|
||||
tmCylinder,
|
||||
tmCylinderHex,
|
||||
tmMobius,
|
||||
tmMobiusHex,
|
||||
};
|
||||
|
||||
struct torusmode_info {
|
||||
string name;
|
||||
flagtype flags;
|
||||
};
|
||||
|
||||
enum : flagtype {
|
||||
TF_SINGLE = 1,
|
||||
TF_SIMPLE = 2,
|
||||
TF_WEIRD = 4,
|
||||
TF_HEX = 16,
|
||||
TF_SQUARE = 32,
|
||||
TF_CYL = 64,
|
||||
TF_KLEIN = 256,
|
||||
};
|
||||
#endif
|
||||
|
||||
// new values to change
|
||||
int newqty, newdy, newsdx, newsdy;
|
||||
int torus_cx, torus_cy;
|
||||
|
||||
vector<torusmode_info> tmodes = {
|
||||
EX vector<torusmode_info> tmodes = {
|
||||
{"single row (hex)", TF_SINGLE | TF_HEX},
|
||||
{"single row (squares)", TF_SINGLE | TF_SQUARE},
|
||||
{"parallelogram (hex)", TF_SIMPLE | TF_HEX},
|
||||
@ -57,8 +89,9 @@ namespace torusconfig {
|
||||
{"Möbius band (hex)", TF_SIMPLE | TF_CYL | TF_HEX | TF_KLEIN},
|
||||
};
|
||||
|
||||
eTorusMode torus_mode, newmode;
|
||||
flagtype tmflags() { return tmodes[torus_mode].flags; }
|
||||
EX eTorusMode torus_mode;
|
||||
eTorusMode newmode;
|
||||
EX flagtype tmflags() { return tmodes[torus_mode].flags; }
|
||||
|
||||
int getqty() {
|
||||
if(tmflags() & TF_SINGLE)
|
||||
@ -139,7 +172,7 @@ namespace torusconfig {
|
||||
|
||||
int tester = addHook(hooks_tests, 0, torus_test);
|
||||
|
||||
void activate() {
|
||||
EX void activate() {
|
||||
auto& gi(ginf[gTorus]);
|
||||
|
||||
if(tmflags() & TF_HEX)
|
||||
@ -262,7 +295,7 @@ namespace torusconfig {
|
||||
|
||||
return dist;
|
||||
}
|
||||
}
|
||||
EX }
|
||||
|
||||
int euclid_getvec(int dx, int dy) {
|
||||
if(euwrap) return torusconfig::getvec(dx, dy);
|
||||
|
@ -7,6 +7,8 @@ namespace hr {
|
||||
EX namespace fieldpattern {
|
||||
|
||||
#if HDR
|
||||
#define currfp fieldpattern::getcurrfp()
|
||||
|
||||
struct primeinfo {
|
||||
int p;
|
||||
int cells;
|
||||
@ -743,7 +745,7 @@ void info() {
|
||||
fpattern current_quotient_field(0), fp_invalid(0);
|
||||
bool quotient_field_changed;
|
||||
|
||||
fpattern& getcurrfp() {
|
||||
EX struct fpattern& getcurrfp() {
|
||||
if(geometry == gFieldQuotient && quotient_field_changed)
|
||||
return current_quotient_field;
|
||||
if(WDIM == 3) {
|
||||
@ -831,13 +833,13 @@ EX void enableFieldChange() {
|
||||
|
||||
#define currfp fieldpattern::getcurrfp()
|
||||
|
||||
int currfp_gmul(int a, int b) { return currfp.gmul(a,b); }
|
||||
int currfp_inverses(int i) { return currfp.inverses[i]; }
|
||||
int currfp_distwall(int i) { return currfp.distwall[i]; }
|
||||
int currfp_n() { return isize(currfp.matrices); }
|
||||
int currfp_get_R() { return currfp.matcode[currfp.R]; }
|
||||
int currfp_get_P() { return currfp.matcode[currfp.P]; }
|
||||
int currfp_get_X() { return currfp.matcode[currfp.X]; }
|
||||
EX int currfp_gmul(int a, int b) { return currfp.gmul(a,b); }
|
||||
EX int currfp_inverses(int i) { return currfp.inverses[i]; }
|
||||
EX int currfp_distwall(int i) { return currfp.distwall[i]; }
|
||||
EX int currfp_n() { return isize(currfp.matrices); }
|
||||
EX int currfp_get_R() { return currfp.matcode[currfp.R]; }
|
||||
EX int currfp_get_P() { return currfp.matcode[currfp.P]; }
|
||||
EX int currfp_get_X() { return currfp.matcode[currfp.X]; }
|
||||
|
||||
}
|
||||
#endif
|
||||
|
@ -678,11 +678,11 @@ void geometry_information::generate_floorshapes() {
|
||||
}
|
||||
|
||||
#if CAP_GP
|
||||
namespace gp {
|
||||
EX namespace gp {
|
||||
int pshid[3][8][32][32][8];
|
||||
int nextid;
|
||||
|
||||
void clear_plainshapes() {
|
||||
EX void clear_plainshapes() {
|
||||
for(int m=0; m<3; m++)
|
||||
for(int sd=0; sd<8; sd++)
|
||||
for(int i=0; i<32; i++)
|
||||
@ -731,7 +731,7 @@ namespace gp {
|
||||
if(id == -1) build_plainshape(id, draw_li, c, siid, sidir);
|
||||
return id;
|
||||
}
|
||||
}
|
||||
EX }
|
||||
#endif
|
||||
|
||||
qfloorinfo qfi;
|
||||
|
6
game.cpp
6
game.cpp
@ -5211,6 +5211,10 @@ EX void movemutant() {
|
||||
}
|
||||
}
|
||||
|
||||
#if HDR
|
||||
#define SHSIZE 16
|
||||
#endif
|
||||
|
||||
EX vector<array<cell*, MAXPLAYER>> shpos;
|
||||
EX int cshpos = 0;
|
||||
|
||||
@ -7726,7 +7730,7 @@ EX void terracotta() {
|
||||
}
|
||||
}
|
||||
|
||||
eMonster passive_switch = moSwitch2;
|
||||
EX eMonster passive_switch = moSwitch2;
|
||||
|
||||
EX void checkSwitch() {
|
||||
passive_switch = (gold() & 1) ? moSwitch1 : moSwitch2;
|
||||
|
@ -265,7 +265,7 @@ void showTorusConfig() {
|
||||
dialog::display();
|
||||
}
|
||||
|
||||
string bitruncnames[5] = {" (b)", " (n)", " (g)", " (i)", " (d)"};
|
||||
EX string bitruncnames[5] = {" (b)", " (n)", " (g)", " (i)", " (d)"};
|
||||
|
||||
void validity_info() {
|
||||
int vccolors[4] = {0xFF0000, 0xFF8000, 0xFFFF00, 0x00FF00};
|
||||
@ -815,7 +815,7 @@ EX void showEuclideanMenu() {
|
||||
dialog::display();
|
||||
}
|
||||
|
||||
void runGeometryExperiments() {
|
||||
EX void runGeometryExperiments() {
|
||||
if(!geometry && specialland == laIce)
|
||||
specialland = getLandForList(cwt.at);
|
||||
pushScreen(showEuclideanMenu);
|
||||
|
17
geometry.cpp
17
geometry.cpp
@ -17,6 +17,8 @@ struct usershapelayer {
|
||||
PPR prio;
|
||||
};
|
||||
|
||||
extern int usershape_changes;
|
||||
|
||||
static const int USERLAYERS = 32;
|
||||
|
||||
struct usershape { usershapelayer d[USERLAYERS]; };
|
||||
@ -32,6 +34,19 @@ struct hpcshape {
|
||||
void clear() { s = e = shs = she = texture_offset = 0; prio = PPR::ZERO; tinf = NULL; flags = 0; }
|
||||
};
|
||||
|
||||
#define SIDE_SLEV 0
|
||||
#define SIDE_WTS3 3
|
||||
#define SIDE_WALL 4
|
||||
#define SIDE_LAKE 5
|
||||
#define SIDE_LTOB 6
|
||||
#define SIDE_BTOI 7
|
||||
#define SIDE_SKY 8
|
||||
#define SIDE_HIGH 9
|
||||
#define SIDE_HIGH2 10
|
||||
#define SIDEPARS 11
|
||||
|
||||
#define BADMODEL 0
|
||||
|
||||
static const int WINGS = (BADMODEL ? 1 : 4);
|
||||
|
||||
typedef array<hpcshape, WINGS+1> hpcshape_animated;
|
||||
@ -54,6 +69,8 @@ struct plain_floorshape : floorshape {
|
||||
void configure(ld r0, ld r1) { rad0 = r0; rad1 = r1; }
|
||||
};
|
||||
|
||||
extern vector<ld> equal_weights;
|
||||
|
||||
// noftype: 0 (shapeid2 is heptagonal or just use shapeid1), 1 (shapeid2 is pure heptagonal), 2 (shapeid2 is Euclidean), 3 (shapeid2 is hexagonal)
|
||||
struct escher_floorshape : floorshape {
|
||||
int shapeid0, shapeid1, noftype, shapeid2;
|
||||
|
28
graph.cpp
28
graph.cpp
@ -3288,7 +3288,7 @@ ld wavefun(ld x) {
|
||||
else return 0; */
|
||||
}
|
||||
|
||||
colortable nestcolors = { 0x800000, 0x008000, 0x000080, 0x404040, 0x700070, 0x007070, 0x707000, 0x606060 };
|
||||
EX colortable nestcolors = { 0x800000, 0x008000, 0x000080, 0x404040, 0x700070, 0x007070, 0x707000, 0x606060 };
|
||||
|
||||
color_t floorcolors[landtypes];
|
||||
|
||||
@ -4264,7 +4264,7 @@ void draw_wall(cell *c, const transmatrix& V, color_t wcol, color_t& zcol, int c
|
||||
}
|
||||
#endif
|
||||
|
||||
bool just_gmatrix;
|
||||
EX bool just_gmatrix;
|
||||
|
||||
int colorhash(color_t i) {
|
||||
return (i * 0x471211 + i*i*0x124159 + i*i*i*0x982165) & 0xFFFFFF;
|
||||
@ -4342,7 +4342,7 @@ void draw_gravity_particles(cell *c, const transmatrix V) {
|
||||
}
|
||||
}
|
||||
|
||||
bool isWall3(cell *c, color_t& wcol) {
|
||||
EX bool isWall3(cell *c, color_t& wcol) {
|
||||
if(isWall(c)) return true;
|
||||
if(c->wall == waChasm && c->land == laMemory) { wcol = 0x606000; return true; }
|
||||
if(c->wall == waInvisibleFloor) return false;
|
||||
@ -7688,6 +7688,28 @@ inline void popScreen() { if(isize(screens)>1) screens.pop_back(); }
|
||||
inline void popScreenAll() { while(isize(screens)>1) popScreen(); }
|
||||
#endif
|
||||
|
||||
#if HDR
|
||||
namespace sm {
|
||||
static const int NORMAL = 1;
|
||||
static const int MISSION = 2;
|
||||
static const int HELP = 4;
|
||||
static const int MAP = 8;
|
||||
static const int DRAW = 16;
|
||||
static const int NUMBER = 32;
|
||||
static const int SHMUPCONFIG = 64;
|
||||
static const int OVERVIEW = 128;
|
||||
static const int SIDE = 256;
|
||||
static const int DOTOUR = 512;
|
||||
static const int CENTER = 1024;
|
||||
static const int ZOOMABLE = 4096;
|
||||
static const int TORUSCONFIG = 8192;
|
||||
static const int MAYDARK = 16384;
|
||||
static const int DIALOG_STRICT_X = 32768; // do not interpret dialog clicks outside of the X region
|
||||
static const int EXPANSION = (1<<16);
|
||||
static const int HEXEDIT = (1<<17);
|
||||
};
|
||||
#endif
|
||||
|
||||
EX int cmode;
|
||||
|
||||
EX void drawscreen() {
|
||||
|
343
hyper.h
343
hyper.h
@ -321,8 +321,6 @@ extern videopar vid;
|
||||
#define self (*this)
|
||||
|
||||
extern int cellcount, heptacount;
|
||||
extern color_t forecolor;
|
||||
extern ld band_shift;
|
||||
// cell information for the game
|
||||
|
||||
struct gcell {
|
||||
@ -682,18 +680,6 @@ template<class T> int isize(const T& x) {return x.size(); }
|
||||
namespace anticheat { extern bool tampered; }
|
||||
#define HRANDMAX 0x7FFFFFFF
|
||||
|
||||
namespace hive { void createBugArmy(cell *c); }
|
||||
namespace whirlpool { void generate(cell *wto); }
|
||||
namespace whirlwind { void generate(cell *wto); }
|
||||
namespace mirror {
|
||||
static const int SPINSINGLE = 1;
|
||||
static const int SPINMULTI = 2;
|
||||
static const int GO = 4;
|
||||
static const int ATTACK = 8;
|
||||
|
||||
void act(int dir, int flags);
|
||||
}
|
||||
|
||||
struct movedir {
|
||||
int d;
|
||||
// non-negative numbers denote 'rotate +d steps and act in this direction
|
||||
@ -746,12 +732,6 @@ typedef flagtype modecode_t;
|
||||
|
||||
#define GUNRANGE 3
|
||||
|
||||
// 0 = basic treasure, 1 = other item, 2 = power orb, 3 = not an item
|
||||
#define IC_TREASURE 0
|
||||
#define IC_OTHER 1
|
||||
#define IC_ORB 2
|
||||
#define IC_NAI 3
|
||||
|
||||
// loops
|
||||
|
||||
#define fakecellloop(ct) for(cell *ct = (cell*)1; ct; ct=NULL)
|
||||
@ -931,153 +911,16 @@ inline int operator - (PPR x, PPR y) { return int(x) - int(y); }
|
||||
#define OUTLINE_FORE ((forecolor << 8) + 0xFF)
|
||||
#define OUTLINE_BACK ((backcolor << 8) + 0xFF)
|
||||
|
||||
#define IFM(x) (mousing?"":x)
|
||||
|
||||
enum orbAction { roMouse, roKeyboard, roCheck, roMouseForce, roMultiCheck, roMultiGo };
|
||||
|
||||
#define MODELCOUNT ((int) mdGUARD)
|
||||
|
||||
void drawShape(pair<ld,ld>* coords, int qty, color_t color);
|
||||
|
||||
#define pmodel (vid.vpmodel)
|
||||
|
||||
color_t darkena(color_t c, int lev, int a);
|
||||
|
||||
#define SHSIZE 16
|
||||
|
||||
#if CAP_TOUR
|
||||
namespace tour {
|
||||
extern bool on;
|
||||
extern string tourhelp;
|
||||
extern string slidecommand;
|
||||
extern int currentslide;
|
||||
|
||||
enum presmode {
|
||||
pmStartAll = 0,
|
||||
pmStart = 1, pmFrame = 2, pmStop = 3, pmKey = 4, pmRestart = 5,
|
||||
pmAfterFrame = 6,
|
||||
pmGeometry = 11, pmGeometryReset = 13, pmGeometryStart = 15
|
||||
};
|
||||
|
||||
void setCanvas(presmode mode, char canv);
|
||||
|
||||
void presentation(presmode mode);
|
||||
void checkGoodLand(eLand l);
|
||||
int getid();
|
||||
|
||||
extern function<eLand(eLand)> getNext;
|
||||
extern function<bool(eLand)> quickfind;
|
||||
extern function<bool(eLand)> showland;
|
||||
|
||||
void start();
|
||||
|
||||
struct slide {
|
||||
const char *name; int unused_id; int flags; const char *help;
|
||||
function<void(presmode mode)> action;
|
||||
} ;
|
||||
|
||||
extern slide *slides;
|
||||
extern slide default_slides[];
|
||||
|
||||
static const int LEGAL_NONE=0;
|
||||
static const int LEGAL_UNLIMITED=1;
|
||||
static const int LEGAL_HYPERBOLIC=2;
|
||||
static const int LEGAL_ANY=3;
|
||||
static const int LEGAL_NONEUC=4;
|
||||
static const int QUICKSKIP=8;
|
||||
static const int FINALSLIDE=16;
|
||||
static const int QUICKGEO=32;
|
||||
static const int SIDESCREEN = 64;
|
||||
static const int USE_SLIDE_NAME = 128;
|
||||
|
||||
extern slide slideHypersian;
|
||||
extern slide slideExpansion;
|
||||
|
||||
namespace ss {
|
||||
void showMenu();
|
||||
void list(slide*);
|
||||
}
|
||||
|
||||
extern hookset<void(int)> *hooks_slide;
|
||||
};
|
||||
#else
|
||||
namespace tour {
|
||||
static const always_false on;
|
||||
}
|
||||
#endif
|
||||
|
||||
namespace sm {
|
||||
static const int NORMAL = 1;
|
||||
static const int MISSION = 2;
|
||||
static const int HELP = 4;
|
||||
static const int MAP = 8;
|
||||
static const int DRAW = 16;
|
||||
static const int NUMBER = 32;
|
||||
static const int SHMUPCONFIG = 64;
|
||||
static const int OVERVIEW = 128;
|
||||
static const int SIDE = 256;
|
||||
static const int DOTOUR = 512;
|
||||
static const int CENTER = 1024;
|
||||
static const int ZOOMABLE = 4096;
|
||||
static const int TORUSCONFIG = 8192;
|
||||
static const int MAYDARK = 16384;
|
||||
static const int DIALOG_STRICT_X = 32768; // do not interpret dialog clicks outside of the X region
|
||||
static const int EXPANSION = (1<<16);
|
||||
static const int HEXEDIT = (1<<17);
|
||||
};
|
||||
|
||||
namespace linepatterns {
|
||||
|
||||
enum ePattern {
|
||||
patPalacelike,
|
||||
patPalace,
|
||||
patZebraTriangles,
|
||||
patZebraLines,
|
||||
patTriTree,
|
||||
patTriRings,
|
||||
patHepta,
|
||||
patRhomb,
|
||||
patTree,
|
||||
patAltTree,
|
||||
patVine,
|
||||
patPower,
|
||||
patNormal,
|
||||
patTrihepta,
|
||||
patBigTriangles,
|
||||
patBigRings,
|
||||
patHorocycles,
|
||||
patTriOther,
|
||||
patDual,
|
||||
patMeridians,
|
||||
patParallels,
|
||||
patCircles,
|
||||
patRadii
|
||||
};
|
||||
|
||||
void clearAll();
|
||||
void setColor(ePattern id, color_t col);
|
||||
void drawAll();
|
||||
void showMenu();
|
||||
void switchAlpha(ePattern id, color_t col);
|
||||
|
||||
struct linepattern {
|
||||
int id;
|
||||
const char *lpname;
|
||||
color_t color;
|
||||
ld multiplier;
|
||||
};
|
||||
|
||||
extern vector<linepattern> patterns;
|
||||
extern ld width;
|
||||
};
|
||||
|
||||
static const int DISTANCE_UNKNOWN = 127;
|
||||
|
||||
#define SETMOUSEKEY 5000
|
||||
extern char mousekey;
|
||||
extern char newmousekey;
|
||||
void displaymm(char c, int x, int y, int rad, int size, const string& title, int align);
|
||||
|
||||
#include <functional>
|
||||
|
||||
template<class T, class U> int addHook(hookset<T>*& m, int prio, const U& hook) {
|
||||
@ -1152,22 +995,6 @@ extern bool useRangedOrb;
|
||||
|
||||
static inline bool orbProtection(eItem it) { return false; } // not implemented
|
||||
|
||||
#if CAP_FIELD
|
||||
namespace windmap {
|
||||
void create();
|
||||
|
||||
static const int NOWINDBELOW = 8;
|
||||
static const int NOWINDFROM = 120;
|
||||
|
||||
int getId(cell *c);
|
||||
int at(cell *c);
|
||||
}
|
||||
#endif
|
||||
|
||||
int getgametime();
|
||||
string getgametime_s(int timespent = getgametime());
|
||||
extern int stampbase;
|
||||
|
||||
#ifndef GL
|
||||
typedef float GLfloat;
|
||||
#endif
|
||||
@ -1249,73 +1076,10 @@ struct celllister : manual_celllister {
|
||||
int getdist(cell *c) { return dists[c->listindex]; }
|
||||
};
|
||||
|
||||
#if CAP_FIELD
|
||||
#define currfp fieldpattern::getcurrfp()
|
||||
namespace fieldpattern {
|
||||
struct fpattern& getcurrfp();
|
||||
}
|
||||
|
||||
int currfp_gmul(int a, int b);
|
||||
int currfp_inverses(int i);
|
||||
int currfp_distwall(int i);
|
||||
|
||||
int currfp_n();
|
||||
int currfp_get_P();
|
||||
int currfp_get_R();
|
||||
int currfp_get_X();
|
||||
#endif
|
||||
|
||||
void runGeometryExperiments();
|
||||
|
||||
// z to close to this limit => do not draw
|
||||
|
||||
#define BEHIND_LIMIT 1e-6
|
||||
|
||||
namespace lv {
|
||||
static const flagtype appears_in_geom_exp = 1;
|
||||
static const flagtype display_error_message = 2;
|
||||
static const flagtype appears_in_full = 4;
|
||||
static const flagtype appears_in_ptm = 8;
|
||||
static const flagtype display_in_help = 16;
|
||||
static const flagtype one_and_half = 32;
|
||||
};
|
||||
|
||||
struct land_validity_t {
|
||||
int quality_level; // 0 (dont show), 1 (1/2), 2 (ok), 3(1!)
|
||||
flagtype flags;
|
||||
string msg;
|
||||
};
|
||||
|
||||
namespace fieldpattern {
|
||||
pair<int, bool> fieldval(cell *c);
|
||||
}
|
||||
|
||||
int emeraldval(cell *c);
|
||||
|
||||
int inpair(cell *c, int colorpair);
|
||||
int snake_pair(cell *c);
|
||||
|
||||
extern colortable nestcolors;
|
||||
|
||||
unsigned char& part(color_t& col, int i);
|
||||
|
||||
int pattern_threecolor(cell *c);
|
||||
int fiftyval200(cell *c);
|
||||
|
||||
bool isWall3(cell *c, color_t& wcol);
|
||||
|
||||
extern string bitruncnames[5];
|
||||
extern bool need_mouseh;
|
||||
|
||||
void clear_euland(eLand first);
|
||||
|
||||
extern eMonster passive_switch;
|
||||
|
||||
bool cannotPickupItem(cell *c, bool telekinesis);
|
||||
bool canPickupItemWithMagnetism(cell *c, cell *from);
|
||||
void pickupMovedItems(cell *c);
|
||||
eMonster genRuinMonster(cell *c);
|
||||
|
||||
template<class T, class U> void eliminate_if(vector<T>& data, U pred) {
|
||||
for(int i=0; i<isize(data); i++)
|
||||
if(pred(data[i]))
|
||||
@ -1326,34 +1090,6 @@ template<class T, class U> void eliminate_if(vector<T>& data, U pred) {
|
||||
transmatrix getOrientation();
|
||||
#endif
|
||||
|
||||
namespace elec { extern int lightningfast; }
|
||||
|
||||
#define DF_INIT 1 // always display these
|
||||
#define DF_MSG 2 // always display these
|
||||
#define DF_WARN 4 // always display these
|
||||
#define DF_ERROR 8 // always display these
|
||||
#define DF_STEAM 16
|
||||
#define DF_GRAPH 32
|
||||
#define DF_TURN 64
|
||||
#define DF_FIELD 128
|
||||
#define DF_GEOM 256
|
||||
#define DF_MEMORY 512
|
||||
#define DF_TIME 1024 // a flag to display timestamps
|
||||
#define DF_GP 2048
|
||||
#define DF_POLY 4096
|
||||
#define DF_LOG 8192
|
||||
#define DF_KEYS "imwesxufgbtopl"
|
||||
|
||||
#if ISANDROID
|
||||
#define DEBB(r,x)
|
||||
#define DEBB0(r,x)
|
||||
#define DEBBI(r,x)
|
||||
#else
|
||||
#define DEBB(r,x) { if(debugflags & (r)) { println_log x; } }
|
||||
#define DEBB0(r,x) { if(debugflags & (r)) { print_log x; } }
|
||||
#define DEBBI(r,x) { if(debugflags & (r)) { println_log x; } } indenter_finish _debbi(debugflags & (r));
|
||||
#endif
|
||||
|
||||
template<class T> array<T, 4> make_array(T a, T b, T c, T d) { array<T,4> x; x[0] = a; x[1] = b; x[2] = c; x[3] = d; return x; }
|
||||
template<class T> array<T, 3> make_array(T a, T b, T c) { array<T,3> x; x[0] = a; x[1] = b; x[2] = c; return x; }
|
||||
template<class T> array<T, 2> make_array(T a, T b) { array<T,2> x; x[0] = a; x[1] = b; return x; }
|
||||
@ -1372,85 +1108,6 @@ namespace daily {
|
||||
void uploadscore(bool really_final);
|
||||
}
|
||||
|
||||
namespace torusconfig {
|
||||
extern int sdx, sdy;
|
||||
|
||||
enum eTorusMode : char {
|
||||
tmSingleHex,
|
||||
tmSingle,
|
||||
tmSlantedHex,
|
||||
tmStraight,
|
||||
tmStraightHex,
|
||||
tmKlein,
|
||||
tmKleinHex,
|
||||
tmCylinder,
|
||||
tmCylinderHex,
|
||||
tmMobius,
|
||||
tmMobiusHex,
|
||||
};
|
||||
|
||||
extern eTorusMode torus_mode;
|
||||
extern void activate();
|
||||
|
||||
struct torusmode_info {
|
||||
string name;
|
||||
flagtype flags;
|
||||
};
|
||||
|
||||
extern vector<torusmode_info> tmodes;
|
||||
|
||||
enum : flagtype {
|
||||
TF_SINGLE = 1,
|
||||
TF_SIMPLE = 2,
|
||||
TF_WEIRD = 4,
|
||||
TF_HEX = 16,
|
||||
TF_SQUARE = 32,
|
||||
TF_CYL = 64,
|
||||
TF_KLEIN = 256,
|
||||
};
|
||||
|
||||
flagtype tmflags();
|
||||
}
|
||||
|
||||
struct plainshape;
|
||||
void clear_plainshape(plainshape& gsh);
|
||||
|
||||
namespace gp {
|
||||
void clear_plainshapes();
|
||||
plainshape& get_plainshape();
|
||||
}
|
||||
|
||||
extern bool just_gmatrix;
|
||||
|
||||
bool haveLeaderboard(int id);
|
||||
int get_currentscore(int id);
|
||||
void set_priority_board(int id);
|
||||
int get_sync_status();
|
||||
bool score_loaded(int id);
|
||||
int score_default(int id);
|
||||
void handle_event(SDL_Event& ev);
|
||||
|
||||
void generate_floorshapes();
|
||||
|
||||
#define SIDE_SLEV 0
|
||||
#define SIDE_WTS3 3
|
||||
#define SIDE_WALL 4
|
||||
#define SIDE_LAKE 5
|
||||
#define SIDE_LTOB 6
|
||||
#define SIDE_BTOI 7
|
||||
#define SIDE_SKY 8
|
||||
#define SIDE_HIGH 9
|
||||
#define SIDE_HIGH2 10
|
||||
#define SIDEPARS 11
|
||||
|
||||
void initShape(int sg, int id);
|
||||
|
||||
extern int usershape_changes;
|
||||
|
||||
#define BADMODEL 0
|
||||
|
||||
extern vector<ld> equal_weights;
|
||||
|
||||
#define RING(i) for(double i=0; i<=cgi.S84+1e-6; i+=SD3 * pow(.5, vid.linequality))
|
||||
#define REVRING(i) for(double i=cgi.S84; i>=-1e-6; i-=SD3 * pow(.5, vid.linequality))
|
||||
#define PRING(i) for(double i=0; i<=cgi.S84+1e-6; i+= pow(.5, vid.linequality))
|
||||
|
@ -96,7 +96,7 @@ bool out_ruin(cell *c) {
|
||||
#endif
|
||||
}
|
||||
|
||||
eMonster genRuinMonster(cell *c) {
|
||||
EX eMonster genRuinMonster(cell *c) {
|
||||
eMonster m = pick(moHexDemon, moHexDemon, moHexDemon, moAltDemon, moAltDemon, moMonk, moMonk, moSkeleton, moSkeleton, moCrusher);
|
||||
if(m == moHexDemon && pseudohept(c))
|
||||
return genRuinMonster(c);
|
||||
|
17
landlock.cpp
17
landlock.cpp
@ -560,6 +560,23 @@ template<class T> void generateLandList(T t) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HDR
|
||||
namespace lv {
|
||||
static const flagtype appears_in_geom_exp = 1;
|
||||
static const flagtype display_error_message = 2;
|
||||
static const flagtype appears_in_full = 4;
|
||||
static const flagtype appears_in_ptm = 8;
|
||||
static const flagtype display_in_help = 16;
|
||||
static const flagtype one_and_half = 32;
|
||||
};
|
||||
|
||||
struct land_validity_t {
|
||||
int quality_level; // 0 (dont show), 1 (1/2), 2 (ok), 3(1!)
|
||||
flagtype flags;
|
||||
string msg;
|
||||
};
|
||||
#endif
|
||||
|
||||
EX eLand getLandForList(cell *c) {
|
||||
eLand l = c->land;
|
||||
if(isElemental(l)) return laElementalWall;
|
||||
|
@ -23,8 +23,6 @@ void mark_file() {
|
||||
}
|
||||
while(ifs_level < (int) if_stack.size())
|
||||
cout << ind() << if_stack[ifs_level++] << "\n";
|
||||
while(ifs_level > (int) if_stack.size())
|
||||
cout << ind() << "#endif\n", ifs_level--;
|
||||
}
|
||||
|
||||
int in_hdr;
|
||||
@ -49,6 +47,7 @@ void gen(string s) {
|
||||
continue;
|
||||
}
|
||||
if(s == "#if HDR") {
|
||||
mark_file();
|
||||
in_hdr = true;
|
||||
continue;
|
||||
}
|
||||
@ -62,6 +61,8 @@ void gen(string s) {
|
||||
if(s.substr(0, 6) == "#endif") {
|
||||
if(if_stack.empty()) { cerr << "if_stack error " << which_file << ", " << s << "\n"; exit(1); }
|
||||
if_stack.pop_back();
|
||||
while(ifs_level > (int) if_stack.size())
|
||||
cout << ind() << "#endif\n", ifs_level--;
|
||||
}
|
||||
if(s.substr(0, 4) == "EX }") {
|
||||
mark_file();
|
||||
|
@ -920,7 +920,7 @@ EX named_functionality get_o_key() {
|
||||
|
||||
int messagelogpos;
|
||||
int timeformat;
|
||||
int stampbase;
|
||||
EX int stampbase;
|
||||
|
||||
EX string gettimestamp(msginfo& m) {
|
||||
char buf[128];
|
||||
|
65
pattern2.cpp
65
pattern2.cpp
@ -80,9 +80,9 @@ int chessvalue(cell *c) {
|
||||
return celldist(c) & 1;
|
||||
}
|
||||
|
||||
int emeraldval(heptagon *h) { return h->emeraldval >> 3; }
|
||||
EX int emeraldval(heptagon *h) { return h->emeraldval >> 3; }
|
||||
|
||||
int emeraldval(cell *c) {
|
||||
EX int emeraldval(cell *c) {
|
||||
if(euclid) return eupattern(c);
|
||||
if(sphere) return 0;
|
||||
if(ctof(c))
|
||||
@ -357,14 +357,14 @@ EX int zebra3(cell *c) {
|
||||
}
|
||||
|
||||
#if CAP_FIELD
|
||||
namespace fieldpattern {
|
||||
EX namespace fieldpattern {
|
||||
|
||||
pair<int, bool> fieldval(cell *c) {
|
||||
EX pair<int, bool> fieldval(cell *c) {
|
||||
if(ctof(c)) return make_pair(int(c->master->fieldval), false);
|
||||
else return make_pair(btspin(c->master->fieldval, c->c.spin(0)), true);
|
||||
}
|
||||
|
||||
int fieldval_uniq(cell *c) {
|
||||
EX int fieldval_uniq(cell *c) {
|
||||
if(sphere) {
|
||||
if(archimedean) return c->master->fiftyval;
|
||||
#if CAP_IRR
|
||||
@ -395,7 +395,7 @@ int fieldval_uniq(cell *c) {
|
||||
}
|
||||
}
|
||||
|
||||
int fieldval_uniq_rand(cell *c, int randval) {
|
||||
EX int fieldval_uniq_rand(cell *c, int randval) {
|
||||
if(sphere || euclid || NONSTDVAR)
|
||||
// we do not care in these cases
|
||||
return fieldval_uniq(c);
|
||||
@ -432,7 +432,7 @@ pair<int, int> subval(cell *c, int _subpathid = subpathid, int _subpathorder = s
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
EX }
|
||||
#endif
|
||||
|
||||
int getHemisphere(heptagon *h, int which) {
|
||||
@ -1236,7 +1236,7 @@ EX int geosupport_football() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pattern_threecolor(cell *c) {
|
||||
EX int pattern_threecolor(cell *c) {
|
||||
#if CAP_ARCM
|
||||
if(archimedean) {
|
||||
if(PURE)
|
||||
@ -2164,7 +2164,42 @@ bool is_master(cell *c) {
|
||||
else return c->master->c7 == c;
|
||||
}
|
||||
|
||||
namespace linepatterns {
|
||||
EX namespace linepatterns {
|
||||
|
||||
#if HDR
|
||||
enum ePattern {
|
||||
patPalacelike,
|
||||
patPalace,
|
||||
patZebraTriangles,
|
||||
patZebraLines,
|
||||
patTriTree,
|
||||
patTriRings,
|
||||
patHepta,
|
||||
patRhomb,
|
||||
patTree,
|
||||
patAltTree,
|
||||
patVine,
|
||||
patPower,
|
||||
patNormal,
|
||||
patTrihepta,
|
||||
patBigTriangles,
|
||||
patBigRings,
|
||||
patHorocycles,
|
||||
patTriOther,
|
||||
patDual,
|
||||
patMeridians,
|
||||
patParallels,
|
||||
patCircles,
|
||||
patRadii
|
||||
};
|
||||
|
||||
struct linepattern {
|
||||
int id;
|
||||
const char *lpname;
|
||||
color_t color;
|
||||
ld multiplier;
|
||||
};
|
||||
#endif
|
||||
|
||||
color_t lessalpha(color_t col, int m) {
|
||||
part(col, 0) /= m;
|
||||
@ -2181,7 +2216,7 @@ namespace linepatterns {
|
||||
return col;
|
||||
}
|
||||
|
||||
vector<linepattern> patterns = {
|
||||
EX vector<linepattern> patterns = {
|
||||
|
||||
{patDual, "dual grid", 0xFFFFFF00, 1},
|
||||
|
||||
@ -2222,12 +2257,12 @@ namespace linepatterns {
|
||||
return false;
|
||||
}
|
||||
|
||||
void setColor(ePattern id, color_t col) {
|
||||
EX void setColor(ePattern id, color_t col) {
|
||||
for(auto& lp: patterns)
|
||||
if(lp.id == id) lp.color = col;
|
||||
}
|
||||
|
||||
void switchAlpha(ePattern id, color_t col) {
|
||||
EX void switchAlpha(ePattern id, color_t col) {
|
||||
for(auto& lp: patterns)
|
||||
if(lp.id == id) lp.color ^= col;
|
||||
}
|
||||
@ -2467,9 +2502,9 @@ namespace linepatterns {
|
||||
}
|
||||
}
|
||||
|
||||
ld width = 1;
|
||||
EX ld width = 1;
|
||||
|
||||
void drawAll() {
|
||||
EX void drawAll() {
|
||||
|
||||
vid.linewidth *= width;
|
||||
|
||||
@ -2535,7 +2570,7 @@ namespace linepatterns {
|
||||
|
||||
bool indiv;
|
||||
|
||||
void showMenu() {
|
||||
EX void showMenu() {
|
||||
cmode = sm::SIDE | sm::MAYDARK;
|
||||
gamescreen(0);
|
||||
|
||||
|
2
quit.cpp
2
quit.cpp
@ -17,7 +17,7 @@ EX int getgametime() {
|
||||
return (int) (savetime + (timerstopped ? 0 : (time(NULL) - timerstart)));
|
||||
}
|
||||
|
||||
string getgametime_s(int timespent) {
|
||||
EX string getgametime_s(int timespent IS(getgametime())) {
|
||||
char buf[20];
|
||||
sprintf(buf, "%d:%02d", timespent/60, timespent % 60);
|
||||
return buf;
|
||||
|
72
tour.cpp
72
tour.cpp
@ -1,24 +1,44 @@
|
||||
// Hyperbolic Rogue -- the Tutorial/presentation
|
||||
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
|
||||
|
||||
namespace hr { namespace tour {
|
||||
namespace hr {
|
||||
|
||||
bool on;
|
||||
EX namespace tour {
|
||||
|
||||
EX bool on;
|
||||
|
||||
bool texts = true;
|
||||
|
||||
string tourhelp;
|
||||
EX string tourhelp;
|
||||
|
||||
int currentslide;
|
||||
EX int currentslide;
|
||||
|
||||
// modes:
|
||||
// 1 - enter the slide
|
||||
// 2 - each frame
|
||||
// 3 - leave the slide
|
||||
// 4 - quicken or modify the slide
|
||||
// 5 - on initgame
|
||||
#if HDR
|
||||
enum presmode {
|
||||
pmStartAll = 0,
|
||||
pmStart = 1, pmFrame = 2, pmStop = 3, pmKey = 4, pmRestart = 5,
|
||||
pmAfterFrame = 6,
|
||||
pmGeometry = 11, pmGeometryReset = 13, pmGeometryStart = 15
|
||||
};
|
||||
|
||||
void setCanvas(presmode mode, char canv) {
|
||||
struct slide {
|
||||
const char *name; int unused_id; int flags; const char *help;
|
||||
function<void(presmode mode)> action;
|
||||
};
|
||||
|
||||
static const int LEGAL_NONE=0;
|
||||
static const int LEGAL_UNLIMITED=1;
|
||||
static const int LEGAL_HYPERBOLIC=2;
|
||||
static const int LEGAL_ANY=3;
|
||||
static const int LEGAL_NONEUC=4;
|
||||
static const int QUICKSKIP=8;
|
||||
static const int FINALSLIDE=16;
|
||||
static const int QUICKGEO=32;
|
||||
static const int SIDESCREEN = 64;
|
||||
static const int USE_SLIDE_NAME = 128;
|
||||
#endif
|
||||
|
||||
EX void setCanvas(presmode mode, char canv) {
|
||||
static char wc;
|
||||
static eLand ld;
|
||||
if(mode == pmStart) {
|
||||
@ -39,19 +59,19 @@ void setCanvas(presmode mode, char canv) {
|
||||
|
||||
bool sickmode;
|
||||
|
||||
function<eLand(eLand)> getNext;
|
||||
function<bool(eLand)> quickfind;
|
||||
function<bool(eLand)> showland;
|
||||
EX function<eLand(eLand)> getNext;
|
||||
EX function<bool(eLand)> quickfind;
|
||||
EX function<bool(eLand)> showland;
|
||||
|
||||
#define GETNEXT getNext = [](eLand old)
|
||||
#define QUICKFIND quickfind = [](eLand l)
|
||||
#define SHOWLAND(f) showland = [](eLand l) { return f; }
|
||||
|
||||
string slidecommand;
|
||||
EX string slidecommand;
|
||||
|
||||
hookset<void(int)> *hooks_slide;
|
||||
EX hookset<void(int)> *hooks_slide;
|
||||
|
||||
void presentation(presmode mode) {
|
||||
EX void presentation(presmode mode) {
|
||||
|
||||
cheater = 0;
|
||||
|
||||
@ -68,7 +88,7 @@ void presentation(presmode mode) {
|
||||
callhooks(hooks_slide, mode);
|
||||
}
|
||||
|
||||
void slidehelp() {
|
||||
EX void slidehelp() {
|
||||
if(texts && slides[currentslide].help[0])
|
||||
gotoHelp(
|
||||
help =
|
||||
@ -258,7 +278,7 @@ bool handleKeyTour(int sym, int uni) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void checkGoodLand(eLand l) {
|
||||
EX void checkGoodLand(eLand l) {
|
||||
if(!showland(l) && texts)
|
||||
gotoHelp(XLAT(
|
||||
"This tutorial is different than most other game tutorials -- "
|
||||
@ -273,18 +293,18 @@ void checkGoodLand(eLand l) {
|
||||
);
|
||||
}
|
||||
|
||||
namespace ss {
|
||||
EX namespace ss {
|
||||
vector<slide*> slideshows;
|
||||
slide *wts;
|
||||
|
||||
void list(slide *ss) {
|
||||
EX void list(slide *ss) {
|
||||
for(auto s: slideshows) if (s == ss) return;
|
||||
slideshows.push_back(ss);
|
||||
}
|
||||
|
||||
string slidechars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789!@#$%^&*(";
|
||||
|
||||
void showMenu() {
|
||||
EX void showMenu() {
|
||||
if(!wts) wts = slides;
|
||||
|
||||
dialog::init(XLAT("slides"), forecolor, 150, 100);
|
||||
@ -324,9 +344,9 @@ namespace ss {
|
||||
dialog::display();
|
||||
}
|
||||
|
||||
}
|
||||
EX }
|
||||
|
||||
void start() {
|
||||
EX void start() {
|
||||
ss::list(default_slides);
|
||||
currentslide = 0;
|
||||
vid.scale = 1;
|
||||
@ -345,7 +365,7 @@ void start() {
|
||||
}
|
||||
}
|
||||
|
||||
slide default_slides[] = {
|
||||
EX slide default_slides[] = {
|
||||
#if ISMOBILE
|
||||
{"Note for mobiles", 10, LEGAL_NONE | QUICKSKIP,
|
||||
"This tutorial is designed for computers, "
|
||||
@ -797,7 +817,7 @@ slide default_slides[] = {
|
||||
}
|
||||
};
|
||||
|
||||
slide *slides = default_slides;
|
||||
EX slide *slides = default_slides;
|
||||
|
||||
auto a1 = addHook(hooks_frame, 100, [] () { if(tour::on) tour::presentation(tour::pmFrame); });
|
||||
auto a2 = addHook(hooks_handleKey, 100, handleKeyTour);
|
||||
|
@ -6,10 +6,10 @@
|
||||
|
||||
namespace hr {
|
||||
|
||||
int usershape_changes;
|
||||
EX int usershape_changes;
|
||||
|
||||
array<map<int, usershape*>, mapeditor::USERSHAPEGROUPS> usershapes;
|
||||
void initShape(int sg, int id) {
|
||||
EX void initShape(int sg, int id) {
|
||||
|
||||
if(!usershapes[sg][id]) {
|
||||
usershape *us = new usershape;
|
||||
|
Loading…
Reference in New Issue
Block a user