mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	further cleanup
This commit is contained in:
		| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue