mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	custom land list mode now can configure PTM runs/multipliers
This commit is contained in:
		
							
								
								
									
										17
									
								
								landlock.cpp
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								landlock.cpp
									
									
									
									
									
								
							| @@ -781,6 +781,7 @@ EX array<bool, landtypes> custom_land_list; | |||||||
| EX array<int, landtypes> custom_land_treasure; | EX array<int, landtypes> custom_land_treasure; | ||||||
| EX array<int, landtypes> custom_land_difficulty; | EX array<int, landtypes> custom_land_difficulty; | ||||||
| EX array<int, landtypes> custom_land_wandering; | EX array<int, landtypes> custom_land_wandering; | ||||||
|  | EX array<int, landtypes> custom_land_ptm_runs, custom_land_ptm_mult; | ||||||
|  |  | ||||||
| EX bool isLandIngame(eLand l) { | EX bool isLandIngame(eLand l) { | ||||||
|   if(isElemental(l)) l = laElementalWall; |   if(isElemental(l)) l = laElementalWall; | ||||||
| @@ -915,6 +916,20 @@ EX void customize_land_in_list(eLand l) { | |||||||
|     dialog::get_ne().reaction = mark_tamper; |     dialog::get_ne().reaction = mark_tamper; | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  |   dialog::addSelItem(XLAT("PTM runs"), its(custom_land_ptm_runs[l]), 'r'); | ||||||
|  |   dialog::add_action([l] { | ||||||
|  |     dialog::editNumber(custom_land_ptm_runs[l], 0, 10, 3, 1, XLAT("%the1: number of PTM runs", linf[l].name), ""); | ||||||
|  |     dialog::get_ne().reaction = mark_tamper; | ||||||
|  |     dialog::bound_up(10); | ||||||
|  |     dialog::bound_low(0); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |   dialog::addSelItem(XLAT("PTM multiplier"), its(custom_land_ptm_mult[l]), 'm'); | ||||||
|  |   dialog::add_action([l] { | ||||||
|  |     dialog::editNumber(custom_land_ptm_mult[l], 0, 100, 1, 1, XLAT("%the1: PTM multiplier", linf[l].name), ""); | ||||||
|  |     dialog::get_ne().reaction = mark_tamper; | ||||||
|  |     }); | ||||||
|  |  | ||||||
|   gen_landvisited(); |   gen_landvisited(); | ||||||
|   if(landvisited[l]) { |   if(landvisited[l]) { | ||||||
|     dialog::addItem(XLAT("test"), 'T'); |     dialog::addItem(XLAT("test"), 'T'); | ||||||
| @@ -938,6 +953,8 @@ EX void customize_land_list() { | |||||||
|       custom_land_treasure[l] = 100; |       custom_land_treasure[l] = 100; | ||||||
|       custom_land_difficulty[l] = 100; |       custom_land_difficulty[l] = 100; | ||||||
|       custom_land_wandering[l] = 100; |       custom_land_wandering[l] = 100; | ||||||
|  |       custom_land_ptm_runs[l] = tactic::default_runs(l); | ||||||
|  |       custom_land_ptm_mult[l] = tactic::default_mult(l); | ||||||
|       } |       } | ||||||
|     if(dialog::infix != "" && !dialog::hasInfix(linf[l].name)) return false; |     if(dialog::infix != "" && !dialog::hasInfix(linf[l].name)) return false; | ||||||
|     if(l == laCanvas) return true; |     if(l == laCanvas) return true; | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								yendor.cpp
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								yendor.cpp
									
									
									
									
									
								
							| @@ -734,8 +734,18 @@ EX namespace tactic { | |||||||
|     }; |     }; | ||||||
|   map<modecode_t, vector<scoredata>> scoreboard; |   map<modecode_t, vector<scoredata>> scoreboard; | ||||||
|    |    | ||||||
|  |   EX int default_runs(eLand l) { | ||||||
|  |     return l == laCamelot ? 1 : 3; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   EX int default_mult(eLand l) { | ||||||
|  |     return l == laCamelot ? 3 : 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   /** also called 'runs' */ | ||||||
|   EX int chances(eLand l, modecode_t xc IS(modecode())) { |   EX int chances(eLand l, modecode_t xc IS(modecode())) { | ||||||
|     if(xc != 0 && l != laCamelot) return 3; |     if(use_custom_land_list) return max(min(custom_land_ptm_runs[l], 10), 1); | ||||||
|  |     if(xc != 0) return default_runs(l); | ||||||
|     for(auto& ti: land_tac) |     for(auto& ti: land_tac) | ||||||
|       if(ti.l == l)  |       if(ti.l == l)  | ||||||
|         return ti.tries; |         return ti.tries; | ||||||
| @@ -743,8 +753,8 @@ EX namespace tactic { | |||||||
|     } |     } | ||||||
|    |    | ||||||
|   int tacmultiplier(eLand l) { |   int tacmultiplier(eLand l) { | ||||||
|     if(modecode() != 0 && l != laCamelot) return 1; |     if(use_custom_land_list) return custom_land_ptm_mult[l]; | ||||||
|     if(modecode() != 0 && l == laCamelot) return 3; |     if(modecode() != 0) return default_mult(l); | ||||||
|     for(auto& ti: land_tac) |     for(auto& ti: land_tac) | ||||||
|       if(ti.l == l) |       if(ti.l == l) | ||||||
|         return ti.multiplier; |         return ti.multiplier; | ||||||
| @@ -832,6 +842,7 @@ EX namespace tactic { | |||||||
|     dynamicval<bool> t(tactic::on, true); |     dynamicval<bool> t(tactic::on, true); | ||||||
|     generateLandList([] (eLand l) {  |     generateLandList([] (eLand l) {  | ||||||
|       if(dialog::infix != "" && !dialog::hasInfix(linf[l].name)) return false; |       if(dialog::infix != "" && !dialog::hasInfix(linf[l].name)) return false; | ||||||
|  |       if(use_custom_land_list) return custom_land_list[l] && custom_land_ptm_runs[l] > 0; | ||||||
|       return !!(land_validity(l).flags & lv::appears_in_ptm); |       return !!(land_validity(l).flags & lv::appears_in_ptm); | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
| @@ -1026,6 +1037,21 @@ EX void save_mode_data(hstream& f) { | |||||||
|     f.write<char>(7); |     f.write<char>(7); | ||||||
|     f.write<ld>(vid.creature_scale); |     f.write<ld>(vid.creature_scale); | ||||||
|     } |     } | ||||||
|  |   if(use_custom_land_list) { | ||||||
|  |     bool ptm_modified = false; | ||||||
|  |     for(int i=0; i<landtypes; i++) if(custom_land_list[i]) { | ||||||
|  |       if(custom_land_ptm_runs[i] != tactic::default_runs(eLand(i))) ptm_modified = true; | ||||||
|  |       if(custom_land_ptm_mult[i] != tactic::default_mult(eLand(i))) ptm_modified = true; | ||||||
|  |       } | ||||||
|  |     if(ptm_modified) { | ||||||
|  |       f.write<char>(8); | ||||||
|  |       f.write<int>(landtypes); | ||||||
|  |       for(int i=0; i<landtypes; i++) { | ||||||
|  |         f.write<char>(custom_land_ptm_runs[i]); | ||||||
|  |         f.write<char>(custom_land_ptm_mult[i]); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX eLandStructure get_default_land_structure() { | EX eLandStructure get_default_land_structure() { | ||||||
| @@ -1101,6 +1127,8 @@ EX void load_mode_data_with_zero(hstream& f) { | |||||||
|           custom_land_treasure[i] = f.get<int>(); |           custom_land_treasure[i] = f.get<int>(); | ||||||
|           custom_land_difficulty[i] = f.get<int>(); |           custom_land_difficulty[i] = f.get<int>(); | ||||||
|           custom_land_wandering[i] = f.get<int>(); |           custom_land_wandering[i] = f.get<int>(); | ||||||
|  |           custom_land_ptm_runs[i] = tactic::default_runs(eLand(i)); | ||||||
|  |           custom_land_ptm_mult[i] = tactic::default_mult(eLand(i)); | ||||||
|           } |           } | ||||||
|         break; |         break; | ||||||
|         } |         } | ||||||
| @@ -1120,6 +1148,15 @@ EX void load_mode_data_with_zero(hstream& f) { | |||||||
|       case 7: |       case 7: | ||||||
|         vid.creature_scale = f.get<ld>(); |         vid.creature_scale = f.get<ld>(); | ||||||
|  |  | ||||||
|  |       case 8: { | ||||||
|  |         if(!use_custom_land_list) throw hstream_exception("PTM defined in a non-custom mode"); | ||||||
|  |         int lt = f.get<int>(); | ||||||
|  |         for(int i=0; i<lt; i++) { | ||||||
|  |           custom_land_ptm_runs[i] = f.get<char>();; | ||||||
|  |           } | ||||||
|  |         break; | ||||||
|  |         } | ||||||
|  |  | ||||||
|       default: |       default: | ||||||
|         throw hstream_exception("wrong option"); |         throw hstream_exception("wrong option"); | ||||||
|       } |       } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zeno Rogue
					Zeno Rogue