implement Factorio option "free_samples"
This commit is contained in:
		
							parent
							
								
									bc1d0ed583
								
							
						
					
					
						commit
						96a28ed41e
					
				|  | @ -262,6 +262,12 @@ class TechCost(Choice): | |||
|     option_insane = 6 | ||||
|     default = 3 | ||||
| 
 | ||||
| class FreeSamples(Choice): | ||||
|     option_none = 0 | ||||
|     option_single_craft = 1 | ||||
|     option_half_stack = 2 | ||||
|     option_stack = 3 | ||||
|     default = 3 | ||||
| 
 | ||||
| class TechTreeLayout(Choice): | ||||
|     option_single = 0 | ||||
|  | @ -270,7 +276,8 @@ class TechTreeLayout(Choice): | |||
| 
 | ||||
| factorio_options: typing.Dict[str, type(Option)] = {"max_science_pack": MaxSciencePack, | ||||
|                                                     "tech_tree_layout": TechTreeLayout, | ||||
|                                                     "tech_cost": TechCost} | ||||
|                                                     "tech_cost": TechCost, | ||||
|                                                     "free_samples": FreeSamples} | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     import argparse | ||||
|  |  | |||
|  | @ -24,12 +24,29 @@ function filter_ingredients(ingredients) | |||
|     return new_ingredient_list | ||||
| end | ||||
| 
 | ||||
| function get_any_stack_size(name) | ||||
|     local item = data.raw["item"][name] | ||||
|     if item ~= nil then | ||||
|         return item.stack_size | ||||
|     end | ||||
|     {#- need to search #} | ||||
|     for _, group  in pairs(data.raw) do | ||||
|         for _, testitem in pairs(group) do | ||||
|             if testitem.name == name then | ||||
|                 return testitem.stack_size | ||||
|             end | ||||
|         end | ||||
|     end | ||||
|     {#- failsafe #} | ||||
|     return 1 | ||||
| end | ||||
| 
 | ||||
| function prep_copy(new_copy, old_tech) | ||||
|     old_tech.enabled = false | ||||
|     new_copy.unit = table.deepcopy(old_tech.unit) | ||||
|     new_copy.unit.ingredients = filter_ingredients(new_copy.unit.ingredients) | ||||
|     {% if free_samples %} | ||||
|     local new_effects = {} | ||||
|     log(serpent.block(old_tech.effects)) | ||||
|     if old_tech.effects then | ||||
|         for _, effect in pairs(old_tech.effects) do | ||||
|             if effect.type == "unlock-recipe" then | ||||
|  | @ -48,7 +65,13 @@ function prep_copy(new_copy, old_tech) | |||
|                 end | ||||
|                 for _, result in pairs(results) do | ||||
|                     if result.type == "item" then | ||||
|                         {% if free_samples == 1 %} | ||||
|                         local new = {type="give-item", count=result.amount, item=result.name} | ||||
|                         {% elif free_samples == 2 %} | ||||
|                         local new = {type="give-item", count=get_any_stack_size(result.name) * 0.5, item=result.name} | ||||
|                         {% else %} | ||||
|                         local new = {type="give-item", count=get_any_stack_size(result.name), item=result.name} | ||||
|                         {% endif %} | ||||
|                         table.insert(new_effects, new) | ||||
|                     end | ||||
|                 end | ||||
|  | @ -58,6 +81,7 @@ function prep_copy(new_copy, old_tech) | |||
|     for _, effect in pairs(new_effects) do | ||||
|         table.insert(old_tech.effects, effect) | ||||
|     end | ||||
|     {% endif %} | ||||
| end | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -54,6 +54,11 @@ tech_cost: | |||
|   hard : 0 | ||||
|   very_hard : 0 | ||||
|   insane : 0 | ||||
| free_samples: | ||||
|   none: 1 | ||||
|   single_craft: 0 | ||||
|   half_stack: 0 | ||||
|   stack: 0 | ||||
| # A Link to  the Past options: | ||||
| ### Logic Section ### | ||||
| # Warning: overworld_glitches is not available and minor_glitches is only partially implemented on the door-rando version | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ def generate_mod(world: MultiWorld, player: int): | |||
|                  6: 10}[world.tech_cost[player].value] | ||||
|     template_data = {"locations": locations, "player_names" : player_names, "tech_table": tech_table, | ||||
|                      "mod_name": mod_name, "allowed_science_packs": world.max_science_pack[player].get_allowed_packs(), | ||||
|                      "tech_cost": tech_cost} | ||||
|                      "tech_cost": tech_cost, "free_samples": world.free_samples[player].value} | ||||
| 
 | ||||
|     mod_code = template.render(**template_data) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue