more-descriptions/data-final-fixes.lua

Sun, 29 Jun 2025 23:37:19 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Sun, 29 Jun 2025 23:37:19 +0300
changeset 5
4418c07556d4
child 7
023ee666a3d6
permissions
-rw-r--r--

Add more descriptions mod

local item_categories =
{
	"item",
	"item-with-entity-data",
	"rail-planner",
	"capsule",
	"repair-tool",
	"blueprint",
	"deconstruction-item",
	"upgrade-item",
	"blueprint-book",
	"copy-paste-tool",
	"module",
	"tool",
	"gun",
	"ammo",
	"space-platform-starter-pack",
	"armor",
	"spidertron-remote",
}

local entity_categories =
{
	"container",
	"storage-tank",
	"transport-belt",
	"underground-belt",
	"splitter",
	"loader",
	"inserter",
	"electric-pole",
	"pipe",
	"pipe-to-ground",
	"pump",
	"straight-rail",
	"half-diagonal-rail",
	"curved-rail-a",
	"curved-rail-b",
	"elevated-straight-rail",
	"elevated-half-diagonal-rail",
	"elevated-curved-rail-a",
	"elevated-curved-rail-b",
	"legacy-straight-rail",
	"legacy-curved-rail",
	"rail-ramp",
	"rail-support",
	"train-stop",
	"rail-signal",
	"rail-chain-signal",
	"locomotive",
	"cargo-wagon",
	"fluid-wagon",
	"artillery-wagon",
	"car",
	"spider-vehicle",
	"logistic-robot",
	"construction-robot",
	"logistic-container",
	"roboport",
	"lamp",
	"arithmetic-combinator",
	"decider-combinator",
	"selector-combinator",
	"constant-combinator",
	"power-switch",
	"programmable-speaker",
	"display-panel",
	"boiler",
	"generator",
	"fusion-reactor",
	"fusion-generator",
	"mining-drill",
	"offshore-pump",
	"furnace",
	"assembling-machine",
	"agricultural-tower",
	"lab",
	"lightning-attractor",
	"reactor",
	"beacon",
	"rocket-silo",
	"cargo-landing-pad",
	"space-platform-hub",
	"cargo-bay",
	"asteroid-collector",
	"thruster",
	"wall",
	"gate",
	"radar",
	"land-mine",
	"ammo-turret",
	"electric-turret",
	"fluid-turret",
	"artillery-turret",
	"plant",
	"simple-entity-with-force",
	"simple-entity-with-owner",
	"electric-energy-interface",
	"linked-container",
	"proxy-container",
	"heat-interface",
	"lane-splitter",
	"linked-belt",
	"valve",
	"infinity-cargo-wagon",
	"infinity-container",
	"infinity-pipe",
	"burner-generator",
	"resource",
	"cargo-pod",
	"temporary-container",
	"asteroid",
	"combat-robot",
	"unit",
	"turret",
	"unit-spawner",
	"spider-unit",
	"segmented-unit",
	"cliff",
	"character",
	"fish",
	"tree",
	"simple-entity",
	"lightning",
	"corpse",
	"rail-remnants",
	"explosion",
	"particle-source",
	"fire",
	"sticker",
	"stream",
	"artillery-flare",
	"artillery-projectile",
	"projectile",
	"segment",
	"spider-leg",
	"beam",
	"character-corpse",
	"speech-bubble",
	"smoke-with-trigger",
	"entity-ghost",
	"arrow",
	"highlight-box",
	"item-entity",
	"item-request-proxy",
	"loader-1x1",
	"rocket-silo-rocket",
	"rocket-silo-rocket-shadow",
	"tile-ghost",
	"market",
	"capture-robot",
	"solar-panel",
}

local function find_entity(name)
	for _, entity_category in pairs(entity_categories)
	do
		if data.raw[entity_category] and data.raw[entity_category][name]
		then
			return data.raw[entity_category][name]
		end
	end
	return nil
end

for _, item_type in pairs(item_categories)
do
	for _, item in pairs(data.raw[item_type] or {})
	do
        local new_descriptions = {}
		local refining_recipe = data.raw.recipe[item.name.."-refining"]
		local recycling_recipe = data.raw.recipe[item.name.."-recycling"]

		if recycling_recipe ~= nil
		then
			local recycling_results = {""}
			for _, result in pairs(recycling_recipe.results)
			do
				table.insert(recycling_results, "[img="..result.type.."."..result.name.."]")
			end
            table.insert(new_descriptions, {
                "more-descriptions-mod.recycling",
                tostring(recycling_recipe.energy_required),
				recycling_results
            })
		end

		if mods["promethium-quality"]
		then
			if refining_recipe ~= nil
			then
				table.insert(new_descriptions, {
					"more-descriptions-mod.refining-cost",
					tostring(refining_recipe.energy_required),
				})
			elseif recycling_recipe ~= nil
			then
				table.insert(new_descriptions, {
					"more-descriptions-mod.cannot-be-refined",
				})
			end
		end

		local entity = item.place_result and find_entity(item.place_result) or nil
		if entity ~= nil
		then
			if entity.collision_box
			then
				local cb = entity.collision_box
				local width = math.ceil(cb[2][1] - cb[1][1])
				local height = math.ceil(cb[2][2] - cb[1][2])
				table.insert(new_descriptions, {
					"more-descriptions-mod.size",
					tostring(width),
					tostring(height),
				})
			end
		end

		if #new_descriptions > 0
		then
			local main_description = item.localised_description
                and {"", item.localised_description, "\n"}
                or {
                    "?",
                    {"", {"entity-description."..item.name}, "\n"},
                    {"", {"item-description."..item.name}, "\n"},
                    ""
            }
			item.localised_description = {
				"",
				main_description,
			}
			for i, k in pairs(new_descriptions)
			do
				if i ~= 1
				then
					table.insert(item.localised_description, "\n")
				end
				table.insert(item.localised_description, k)
			end
		end
	end
end

for _, recipe in pairs(data.raw.recipe)
do
	local new_descriptions = {}

	if recipe.allow_productivity
	then
		table.insert(new_descriptions, {"more-descriptions-mod.allows-productivity"})
	end

	if #new_descriptions > 0
	then
		local main_description = recipe.localised_description
			and {"", recipe.localised_description, "\n"}
			or {
				"?",
				{"", {"recipe-description."..recipe.name}, "\n"},
				""
		}
		recipe.localised_description = {
			"",
			main_description,
		}
		for i, k in pairs(new_descriptions)
		do
			if i ~= 1
			then
				table.insert(recipe.localised_description, "\n")
			end
			table.insert(recipe.localised_description, k)
		end
	end
end

mercurial