mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	an option to disable wandering monsters; settings (reptilecheat, autocheat, safety etc) configurable in map editor; save items/kills and some other settings
This commit is contained in:
		
							
								
								
									
										8
									
								
								hyper.h
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								hyper.h
									
									
									
									
									
								
							| @@ -2,9 +2,9 @@ | |||||||
| // It is quite chaotic. | // It is quite chaotic. | ||||||
|  |  | ||||||
| // version numbers | // version numbers | ||||||
| #define VER "10.5d" | #define VER "10.5e" | ||||||
| #define VERNUM 10504 | #define VERNUM 10505 | ||||||
| #define VERNUM_HEX 0xA504 | #define VERNUM_HEX 0xA505 | ||||||
|  |  | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
|  |  | ||||||
| @@ -1205,6 +1205,7 @@ namespace mapeditor { | |||||||
|  |  | ||||||
|   bool haveUserShape(eShapegroup group, int id);   |   bool haveUserShape(eShapegroup group, int id);   | ||||||
|   void draw_texture_ghosts(cell *c, const transmatrix& V);   |   void draw_texture_ghosts(cell *c, const transmatrix& V);   | ||||||
|  |   void map_settings(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| struct renderbuffer; | struct renderbuffer; | ||||||
| @@ -1739,6 +1740,7 @@ bool needConfirmationEvenIfSaved(); | |||||||
| #define DEFAULTNOR(sym) (DEFAULTCONTROL || multi::notremapped(sym)) | #define DEFAULTNOR(sym) (DEFAULTCONTROL || multi::notremapped(sym)) | ||||||
|  |  | ||||||
| extern bool timerghost; | extern bool timerghost; | ||||||
|  | extern bool gen_wandering; | ||||||
|  |  | ||||||
| #define CAP_MENUSCALING (ISPANDORA || ISMOBILE) | #define CAP_MENUSCALING (ISPANDORA || ISMOBILE) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -123,6 +123,27 @@ namespace mapstream { | |||||||
|         f.write(ginf[gCrystal].vertex); |         f.write(ginf[gCrystal].vertex); | ||||||
|       } |       } | ||||||
|     if(geometry == gArchimedean) f.write(arcm::current.symbol); |     if(geometry == gArchimedean) f.write(arcm::current.symbol); | ||||||
|  |      | ||||||
|  |     // game settings | ||||||
|  |     f.write(safety); | ||||||
|  |     f.write(autocheat); | ||||||
|  |     f.write(gen_wandering); | ||||||
|  |     f.write(reptilecheat); | ||||||
|  |     f.write(timerghost); | ||||||
|  |     f.write(patterns::canvasback); | ||||||
|  |     f.write(patterns::whichShape); | ||||||
|  |     f.write(patterns::subpattern_flags); | ||||||
|  |     f.write(patterns::whichCanvas); | ||||||
|  |     f.write(patterns::displaycodes); | ||||||
|  |     f.write(mapeditor::drawplayer); | ||||||
|  |      | ||||||
|  |     { | ||||||
|  |     int i = ittypes; f.write(i); | ||||||
|  |     for(int k=0; k<i; k++) f.write(items[k]); | ||||||
|  |     i = motypes; f.write(i); | ||||||
|  |     for(int k=0; k<i; k++) f.write(kills[k]);  | ||||||
|  |     } | ||||||
|  |      | ||||||
|     addToQueue((bounded || euclid) ? currentmap->gamestart() : cwt.at->master->c7); |     addToQueue((bounded || euclid) ? currentmap->gamestart() : cwt.at->master->c7); | ||||||
|     for(int i=0; i<isize(cellbyid); i++) { |     for(int i=0; i<isize(cellbyid); i++) { | ||||||
|       cell *c = cellbyid[i]; |       cell *c = cellbyid[i]; | ||||||
| @@ -254,6 +275,28 @@ namespace mapstream { | |||||||
|     initcells(); |     initcells(); | ||||||
|     if(shmup::on) shmup::init(); |     if(shmup::on) shmup::init(); | ||||||
|      |      | ||||||
|  |     if(vernum >= 10505) { | ||||||
|  |       // game settings | ||||||
|  |       f.read(safety); | ||||||
|  |       bool b; | ||||||
|  |       f.read(b); if(b) autocheat = true; | ||||||
|  |       f.read(gen_wandering); | ||||||
|  |       f.read(reptilecheat); | ||||||
|  |       f.read(timerghost); | ||||||
|  |       f.read(patterns::canvasback); | ||||||
|  |       f.read(patterns::whichShape); | ||||||
|  |       f.read(patterns::subpattern_flags); | ||||||
|  |       f.read(patterns::whichCanvas); | ||||||
|  |       f.read(patterns::displaycodes); | ||||||
|  |       f.read(mapeditor::drawplayer); | ||||||
|  |        | ||||||
|  |       int i; | ||||||
|  |       f.read(i); if(i > ittypes || i < 0) throw hstream_exception(); | ||||||
|  |       for(int k=0; k<i; k++) f.read(items[k]); | ||||||
|  |       f.read(i); if(i > motypes || i < 0) throw hstream_exception(); | ||||||
|  |       for(int k=0; k<i; k++) f.read(kills[k]);     | ||||||
|  |       } | ||||||
|  |  | ||||||
|     while(true) { |     while(true) { | ||||||
|       cell *c; |       cell *c; | ||||||
|       int rspin; |       int rspin; | ||||||
| @@ -526,6 +569,7 @@ namespace mapeditor { | |||||||
|     displayButton(8, 8+fs*14, XLAT("p = paint"), 'p', 0); |     displayButton(8, 8+fs*14, XLAT("p = paint"), 'p', 0); | ||||||
|  |  | ||||||
|     displayFunctionKeys(); |     displayFunctionKeys(); | ||||||
|  |     displayButton(8, vid.yres-8-fs*4, XLAT("F8 = settings"), SDLK_F8, 0); | ||||||
|      |      | ||||||
|     keyhandler = handleKeyMap; |     keyhandler = handleKeyMap; | ||||||
|     } |     } | ||||||
| @@ -854,6 +898,9 @@ namespace mapeditor { | |||||||
|     else if(sym == SDLK_F7) { |     else if(sym == SDLK_F7) { | ||||||
|       drawplayer = !drawplayer; |       drawplayer = !drawplayer; | ||||||
|       } |       } | ||||||
|  |     else if(sym == SDLK_F8) { | ||||||
|  |       pushScreen(map_settings); | ||||||
|  |       } | ||||||
|     else if(uni == 'c') { |     else if(uni == 'c') { | ||||||
|       copysource = mouseover_cw(true); |       copysource = mouseover_cw(true); | ||||||
|       painttype = 4; |       painttype = 4; | ||||||
| @@ -1840,6 +1887,36 @@ namespace mapeditor { | |||||||
|   #endif |   #endif | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |   void map_settings() { | ||||||
|  |     cmode = sm::SIDE | sm::MAYDARK; | ||||||
|  |     gamescreen(1); | ||||||
|  |    | ||||||
|  |     dialog::init(XLAT("Map settings")); | ||||||
|  |    | ||||||
|  |     dialog::addBoolItem("disable wandering monsters", !gen_wandering, 'w'); | ||||||
|  |     dialog::add_action([] () { gen_wandering = !gen_wandering; }); | ||||||
|  |  | ||||||
|  |     if(gen_wandering) { | ||||||
|  |       dialog::addBoolItem("disable ghost timer", !timerghost, 'g'); | ||||||
|  |       dialog::add_action([] () { timerghost = !timerghost; }); | ||||||
|  |       } | ||||||
|  |     else dialog::addBreak(100); | ||||||
|  |  | ||||||
|  |     dialog::addBoolItem("simple pattern generation", reptilecheat, 'p'); | ||||||
|  |     dialog::add_action([] () { reptilecheat = !reptilecheat; }); | ||||||
|  |     dialog::addInfo("(e.g. pure Reptile pattern)"); | ||||||
|  |  | ||||||
|  |     dialog::addBoolItem("safety generation", safety, 's'); | ||||||
|  |     dialog::add_action([] () { safety = !safety; }); | ||||||
|  |     dialog::addInfo("(no treasure, no dangers)"); | ||||||
|  |  | ||||||
|  |     dialog::addBoolItem("god mode", autocheat, 'G'); | ||||||
|  |     dialog::add_action([] () { autocheat = true; }); | ||||||
|  |     dialog::addInfo("(unlock all, allow cheats, normal character display)"); | ||||||
|  |      | ||||||
|  |     dialog::addBack(); | ||||||
|  |     dialog::display(); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| #if CAP_EDIT | #if CAP_EDIT | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ | |||||||
| namespace hr { | namespace hr { | ||||||
|  |  | ||||||
| bool timerghost = true; | bool timerghost = true; | ||||||
|  | bool gen_wandering = true; | ||||||
|  |  | ||||||
| int buildIvy(cell *c, int children, int minleaf) { | int buildIvy(cell *c, int children, int minleaf) { | ||||||
|   if(c->monst) return 0; |   if(c->monst) return 0; | ||||||
| @@ -303,6 +304,8 @@ eItem wanderingTreasure(cell *c) { | |||||||
|  |  | ||||||
| void wandering() { | void wandering() { | ||||||
|   if(!canmove) return; |   if(!canmove) return; | ||||||
|  |   if(!gen_wandering) return; | ||||||
|  |    | ||||||
|   pathdata pd(moYeti); |   pathdata pd(moYeti); | ||||||
|   int seepcount = getSeepcount(); |   int seepcount = getSeepcount(); | ||||||
|   int ghostcount = getGhostcount(); |   int ghostcount = getGhostcount(); | ||||||
|   | |||||||
| @@ -268,7 +268,10 @@ void initgame() { | |||||||
|     cheater = 0; |     cheater = 0; | ||||||
|     if(autocheat) cheater = 1; |     if(autocheat) cheater = 1; | ||||||
|     hauntedWarning = false; |     hauntedWarning = false; | ||||||
|  |     if(!autocheat) { | ||||||
|       timerghost = true; |       timerghost = true; | ||||||
|  |       gen_wandering = true; | ||||||
|  |       } | ||||||
|     truelotus = 0; |     truelotus = 0; | ||||||
|     survivalist = true; |     survivalist = true; | ||||||
|     crystal::used_compass_inside = false; |     crystal::used_compass_inside = false; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue