<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.logic.world/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=D4VID</id>
	<title>Logic World Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.logic.world/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=D4VID"/>
	<link rel="alternate" type="text/html" href="https://wiki.logic.world/wiki/Special:Contributions/D4VID"/>
	<updated>2026-05-15T13:39:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Breakpoint&amp;diff=869</id>
		<title>Mods:Breakpoint</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Breakpoint&amp;diff=869"/>
		<updated>2026-03-09T12:07:00Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add breakpoint mod page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox mod&lt;br /&gt;
| title       = Breakpoint&lt;br /&gt;
| id          = D4VID_Breakpoint&lt;br /&gt;
| author      = D4VID&lt;br /&gt;
| download    = https://gitea.d4vid.xyz/LogicWorldMods/Breakpoint&lt;br /&gt;
| type        = Normal&lt;br /&gt;
| preview     = 1&lt;br /&gt;
| license     = GPLv3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This mod adds a component that you can hook up to any part of your circuit and when it is activated - the state of the single input peg goes high (or low if inverted) - it will pause the simulation and you can inspect what happened. It also logs a message to the console and chat.&lt;br /&gt;
&lt;br /&gt;
Stopping the simulation is optional, you can make it only log chat messages.&lt;br /&gt;
&lt;br /&gt;
[[File:Component.png|alt=The Breakpoint component placed down in a world and hooked up.|left|thumb|298x298px|The Breakpoint component placed down in a world and hooked up.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Gui.png|alt=Edit gui of the component|left|thumb|Edit gui of the component]]&lt;br /&gt;
&lt;br /&gt;
[[File:Chat.png|alt=Message logged in chat|left|thumb|Message logged in chat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=File:Chat.png&amp;diff=868</id>
		<title>File:Chat.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=File:Chat.png&amp;diff=868"/>
		<updated>2026-03-09T12:03:50Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Message logged in chat&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=File:Gui.png&amp;diff=867</id>
		<title>File:Gui.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=File:Gui.png&amp;diff=867"/>
		<updated>2026-03-09T12:03:22Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Edit gui of the component&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=File:Component.png&amp;diff=866</id>
		<title>File:Component.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=File:Component.png&amp;diff=866"/>
		<updated>2026-03-09T11:55:44Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The breakpoint component placed in the world with a switch hooked up to it&#039;s single input&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=865</id>
		<title>Template:Infobox mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=865"/>
		<updated>2026-03-09T11:47:03Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Make type preview and license required&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Renders an infobox for a Logic World mod&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The title shown above and outside the infobox, usually the name of the mod.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;image&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The main image to show on the infobox.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;caption&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text displayed below the image&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the author of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;id&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The ID of the mod as specified in its .jecs definition file.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;download&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Link to where the mod can be downloaded from&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Type of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;Normal&amp;quot;,&lt;br /&gt;
				&amp;quot;Optional&amp;quot;,&lt;br /&gt;
				&amp;quot;ClientOnly&amp;quot;,&lt;br /&gt;
				&amp;quot;ServerOnly&amp;quot;,&lt;br /&gt;
				&amp;quot;Independent&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;preview&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether this mod supports the game&#039;s preview version&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;license&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The license of the source code of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#invoke:Infobox|mod}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:DLatchPoke&amp;diff=864</id>
		<title>Mods:DLatchPoke</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:DLatchPoke&amp;diff=864"/>
		<updated>2026-03-09T11:45:18Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Specify mod type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox mod&lt;br /&gt;
| title       = DLatch Poke&lt;br /&gt;
| id          = D4VID_DLatchPoke&lt;br /&gt;
| author      = D4VID&lt;br /&gt;
| download    = https://gitea.d4vid.xyz/LogicWorldMods/DLatchPoke&lt;br /&gt;
| preview     = 1&lt;br /&gt;
| license     = GPLv3&lt;br /&gt;
|type=Optional}}&lt;br /&gt;
&lt;br /&gt;
This is a small utility mod that allows you to switch the state of a [[D Latch]].&lt;br /&gt;
&lt;br /&gt;
Press &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; (default) while looking at a [[D Latch]] and it will toggle it&#039;s state.&lt;br /&gt;
You can also select multiple D Latches and toggle their state all at once.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=863</id>
		<title>Mods:Console Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=863"/>
		<updated>2026-03-09T11:44:52Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Specify mod type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox mod&lt;br /&gt;
| title       = Console Improvements&lt;br /&gt;
| id          = D4VID_ConsoleImprovements&lt;br /&gt;
| author      = D4VID&lt;br /&gt;
| download    = https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
| type        = ClientOnly&lt;br /&gt;
| preview     = 1&lt;br /&gt;
| license     = GPLv3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a small utility mod that does 3 things:&lt;br /&gt;
&lt;br /&gt;
# It removes the &amp;quot;&amp;gt; &amp;quot; prefix from copied commands&lt;br /&gt;
# Adds a command history that can be cycled using up and down arrow keys&lt;br /&gt;
# Adds tab completion&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot of tab completion.png|alt=Screenshot of using tab completion|left|thumb|600x600px|Screenshot of using tab completion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=862</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=862"/>
		<updated>2026-03-09T11:42:59Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add type to mod infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local capiunto = require &#039;capiunto&#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- TODO: Move to shared module&lt;br /&gt;
function unflattenArgs(flatArgs)&lt;br /&gt;
	local args = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(flatArgs) do&lt;br /&gt;
	  local parent = args&lt;br /&gt;
	&lt;br /&gt;
	  for token in string.gmatch(k, &amp;quot;[^.]+%.&amp;quot;) do&lt;br /&gt;
	    local key = string.sub(token, 1, #token - 1)&lt;br /&gt;
	    if parent[key] == nil then&lt;br /&gt;
	      parent[key] = {}&lt;br /&gt;
	    end&lt;br /&gt;
	    parent = parent[key]&lt;br /&gt;
	  end&lt;br /&gt;
	&lt;br /&gt;
	  local name = string.match(k, &amp;quot;[^.]+$&amp;quot;)&lt;br /&gt;
	  parent[name] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.component(frame, args)&lt;br /&gt;
	local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
	local headerStyle&lt;br /&gt;
	if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
		headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
	else&lt;br /&gt;
		headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local retval = capiunto.create{&lt;br /&gt;
		title = args.title,&lt;br /&gt;
		headerStyle = headerStyle,&lt;br /&gt;
		bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local image = args.image or args.id..&amp;quot;_thumbnail_render.png&amp;quot;&lt;br /&gt;
	retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, image), args.caption)&lt;br /&gt;
&lt;br /&gt;
	:addHeader(&amp;quot;Component info&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Internal ID&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..args.id..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Configurable&amp;quot;, args.configurable == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if args.io ~= nil then&lt;br /&gt;
		io = args.io&lt;br /&gt;
&lt;br /&gt;
		retval:addHeader(&amp;quot;Input and output&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
		if io.minInputs ~= io.maxInputs then&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, string.format(&amp;quot;Adjustable from %i to %i&amp;quot;, io.minInputs, io.maxInputs))&lt;br /&gt;
		else&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, io.minInputs)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		retval:addRow(&amp;quot;Output count&amp;quot;, io.outputs)&lt;br /&gt;
	&lt;br /&gt;
		if io.propagationDelay ~= nil then&lt;br /&gt;
			local ticksStr = string.format(&amp;quot;%i tick&amp;quot;, io.propagationDelay)&lt;br /&gt;
			if tonumber(io.propagationDelay) ~= 1 then&lt;br /&gt;
				ticksStr = ticksStr..&amp;quot;s&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			retval:addRow(&amp;quot;Propagation delay&amp;quot;, ticksStr)	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.mod(frame, args)&lt;br /&gt;
    local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
    local headerStyle&lt;br /&gt;
    if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
        headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
    else&lt;br /&gt;
        headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    local retval = capiunto.create{&lt;br /&gt;
        title = args.title,&lt;br /&gt;
        headerStyle = headerStyle,&lt;br /&gt;
        bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if args.image ~= nil then&lt;br /&gt;
        retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, args.image), args.caption)&lt;br /&gt;
    end&lt;br /&gt;
    retval:addHeader(&amp;quot;Mod info&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;Author&amp;quot;, string.format(&amp;quot;[[User:%s]]&amp;quot;, args.author))&lt;br /&gt;
        :addRow(&amp;quot;ID&amp;quot;, string.format(&amp;quot;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;, args.id))&lt;br /&gt;
        :addRow(&amp;quot;Download&amp;quot;, string.format(&amp;quot;[%s here]&amp;quot;, args.download))&lt;br /&gt;
        :addRow(&amp;quot;Type&amp;quot;, args.type)&lt;br /&gt;
        :addRow(&amp;quot;Preview&amp;quot;, args.preview == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;License&amp;quot;, args.license)&lt;br /&gt;
&lt;br /&gt;
    return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=861</id>
		<title>Template:Infobox mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=861"/>
		<updated>2026-03-09T11:33:04Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add mod type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Renders an infobox for a Logic World mod&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The title shown above and outside the infobox, usually the name of the mod.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;image&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The main image to show on the infobox.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;caption&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text displayed below the image&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the author of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;id&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The ID of the mod as specified in its .jecs definition file.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;download&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Link to where the mod can be downloaded from&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Type of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;Normal&amp;quot;,&lt;br /&gt;
				&amp;quot;Optional&amp;quot;,&lt;br /&gt;
				&amp;quot;ClientOnly&amp;quot;,&lt;br /&gt;
				&amp;quot;ServerOnly&amp;quot;,&lt;br /&gt;
				&amp;quot;Independent&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;preview&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether this mod supports the game&#039;s preview version&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;license&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The license of the source code of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#invoke:Infobox|mod}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:DLatchPoke&amp;diff=860</id>
		<title>Mods:DLatchPoke</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:DLatchPoke&amp;diff=860"/>
		<updated>2026-03-09T11:28:40Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Create DLatchPoke mod page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox mod&lt;br /&gt;
| title       = DLatch Poke&lt;br /&gt;
| id          = D4VID_DLatchPoke&lt;br /&gt;
| author      = D4VID&lt;br /&gt;
| download    = https://gitea.d4vid.xyz/LogicWorldMods/DLatchPoke&lt;br /&gt;
| preview     = 1&lt;br /&gt;
| license     = GPLv3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a small utility mod that allows you to switch the state of a [[D Latch]].&lt;br /&gt;
&lt;br /&gt;
Press &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; (default) while looking at a [[D Latch]] and it will toggle it&#039;s state.&lt;br /&gt;
You can also select multiple D Latches and toggle their state all at once.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Category:Mods&amp;diff=842</id>
		<title>Category:Mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Category:Mods&amp;diff=842"/>
		<updated>2026-03-05T10:56:28Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add Mods category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=841</id>
		<title>Mods:Console Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=841"/>
		<updated>2026-03-05T10:54:59Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox mod&lt;br /&gt;
| title       = Console Improvements&lt;br /&gt;
| id          = D4VID_ConsoleImprovements&lt;br /&gt;
| author      = D4VID&lt;br /&gt;
| download    = https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
| preview     = 1&lt;br /&gt;
| license     = GPLv3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a small utility mod that does 3 things:&lt;br /&gt;
&lt;br /&gt;
# It removes the &amp;quot;&amp;gt; &amp;quot; prefix from copied commands&lt;br /&gt;
# Adds a command history that can be cycled using up and down arrow keys&lt;br /&gt;
# Adds tab completion&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot of tab completion.png|alt=Screenshot of using tab completion|left|thumb|600x600px|Screenshot of using tab completion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=840</id>
		<title>User:D4VID</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=840"/>
		<updated>2026-03-05T10:51:27Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Don&#039;t have enough time to do what I want to do, but I did some things:&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
I use [https://gitea.d4vid.xyz/LogicWorldMods my own self-hosted Gitea instance] to host my mods:&lt;br /&gt;
&lt;br /&gt;
* [[Mods:Console Improvements|Console Improvements]]&lt;br /&gt;
* [[Mods:DLatchPoke|DLatchPoke]]&lt;br /&gt;
* [[Mods:Breakpoint|Breakpoint]]&lt;br /&gt;
* [[Mods:CameraRoll|CameraRoll]] (WIP)&lt;br /&gt;
* [[Mods:CriticalPathAnalyzer|CriticalPathAnalyzer]] (WIP)&lt;br /&gt;
&lt;br /&gt;
== Builds ==&lt;br /&gt;
&lt;br /&gt;
* RISC-V 32 bit CPU (the base I set of instructions) - rv32i ([https://discord.com/channels/401255675264761866/1451697694593781831 post],[https://youtu.be/2siGxPkt9ww video],[https://logic.world/creations/worlds/b4eSnj/32-bit-risc-v-cpu world])&lt;br /&gt;
&lt;br /&gt;
== Other projects ==&lt;br /&gt;
&lt;br /&gt;
* Mod Manager: https://gitea.d4vid.xyz/LogicWorldMods/LogicWorldModManager/&lt;br /&gt;
* A Rust library for creating subassembly files programmatically: https://gitea.d4vid.xyz/D4VID/logicworld-subassembly&lt;br /&gt;
* A [[wikipedia:Verilog|Verilog]] to LogicWorld compiler: https://gitea.d4vid.xyz/D4VID/verilog2logicworld (WIP)&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=810</id>
		<title>User:D4VID</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=810"/>
		<updated>2025-12-31T16:32:06Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Don&#039;t have enough time to do what I want to do, but I did some things:&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
I use [https://gitea.d4vid.xyz/LogicWorldMods my own self-hosted Gitea instance] to host my mods:&lt;br /&gt;
&lt;br /&gt;
* [[Mods:Console Improvements|Console Improvements]]&lt;br /&gt;
* [[Mods:DLatchPoke|DLatchPoke]]&lt;br /&gt;
* [[Mods:CameraRoll|CameraRoll]] (WIP)&lt;br /&gt;
* [[Mods:CriticalPathAnalyzer|CriticalPathAnalyzer]] (WIP)&lt;br /&gt;
&lt;br /&gt;
== Builds ==&lt;br /&gt;
&lt;br /&gt;
* RISC-V 32 bit CPU (the base I set of instructions) - rv32i ([https://discord.com/channels/401255675264761866/1451697694593781831 post],[https://youtu.be/2siGxPkt9ww video],[https://logic.world/creations/worlds/b4eSnj/32-bit-risc-v-cpu world])&lt;br /&gt;
&lt;br /&gt;
== Other projects ==&lt;br /&gt;
&lt;br /&gt;
* Mod Manager: https://gitea.d4vid.xyz/LogicWorldMods/LogicWorldModManager/&lt;br /&gt;
* A Rust library for creating subassembly files programmatically: https://gitea.d4vid.xyz/D4VID/logicworld-subassembly&lt;br /&gt;
* A [[wikipedia:Verilog|Verilog]] to LogicWorld compiler: https://gitea.d4vid.xyz/D4VID/verilog2logicworld (WIP)&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=809</id>
		<title>User:D4VID</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=809"/>
		<updated>2025-12-31T16:29:56Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Don&#039;t have enough time to do what I want to do, but I did some things:&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
I use [https://gitea.d4vid.xyz/LogicWorldMods my own self-hosted Gitea instance] to host my mods:&lt;br /&gt;
&lt;br /&gt;
* [[Mods:Console Improvements|Console Improvements]]&lt;br /&gt;
* [[Mods:DLatchPoke|DLatchPoke]]&lt;br /&gt;
* [[Mods:CameraRoll|CameraRoll]] (WIP)&lt;br /&gt;
* [[Mods:CriticalPathAnalyzer|CriticalPathAnalyzer]] (WIP)&lt;br /&gt;
&lt;br /&gt;
== Builds ==&lt;br /&gt;
&lt;br /&gt;
* RISC-V 32 bit CPU (the base I set of instructions) - rv32i ([https://discord.com/channels/401255675264761866/1451697694593781831 post],[https://youtu.be/2siGxPkt9ww video],[https://logic.world/creations/worlds/b4eSnj/32-bit-risc-v-cpu world])&lt;br /&gt;
&lt;br /&gt;
== Other projects ==&lt;br /&gt;
&lt;br /&gt;
* A Rust library for creating subassembly files programmatically: https://gitea.d4vid.xyz/D4VID/logicworld-subassembly&lt;br /&gt;
* A [[wikipedia:Verilog|Verilog]] to LogicWorld compiler: https://gitea.d4vid.xyz/D4VID/verilog2logicworld (WIP)&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=733</id>
		<title>User:D4VID</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=733"/>
		<updated>2025-09-28T08:48:00Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Don&#039;t have enough time to do what I want to do, but I did some things:&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
I use [https://gitea.d4vid.xyz/LogicWorldMods my own self-hosted Gitea instance] to host my mods:&lt;br /&gt;
&lt;br /&gt;
* [[Mods:Console Improvements|Console Improvements]]&lt;br /&gt;
* [[Mods:DLatchPoke|DLatchPoke]]&lt;br /&gt;
* [[Mods:CameraRoll|CameraRoll]] (WIP)&lt;br /&gt;
* [[Mods:CriticalPathAnalyzer|CriticalPathAnalyzer]] (WIP)&lt;br /&gt;
&lt;br /&gt;
== Builds ==&lt;br /&gt;
&lt;br /&gt;
* RISC-V 32 bit CPU (the base I set of instructions) - rv32i&lt;br /&gt;
&lt;br /&gt;
== Other projects ==&lt;br /&gt;
&lt;br /&gt;
* A Rust library for creating subassembly files programmatically: https://gitea.d4vid.xyz/D4VID/logicworld-subassembly&lt;br /&gt;
* A [[wikipedia:Verilog|Verilog]] to LogicWorld compiler: https://gitea.d4vid.xyz/D4VID/verilog2logicworld (WIP)&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Dedicated_Server_Setup_Guide&amp;diff=708</id>
		<title>Dedicated Server Setup Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Dedicated_Server_Setup_Guide&amp;diff=708"/>
		<updated>2025-09-14T13:48:24Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Use -y --no-install-recommends in apt and fix shebang line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Specs ==&lt;br /&gt;
&lt;br /&gt;
The required machine to run a Logic World server depends a lot on the complexity and amount of circuits you build in the world and how many players will be using it at the same time.&lt;br /&gt;
&lt;br /&gt;
For a couple of players, a 4gb server is plenty. &lt;br /&gt;
&lt;br /&gt;
== Linux (Ubuntu) ==&lt;br /&gt;
&lt;br /&gt;
This guide assumes the following:&lt;br /&gt;
* Ubuntu 24.04 has been freshly installed.&lt;br /&gt;
* The server has a public IP Address&lt;br /&gt;
&lt;br /&gt;
==== Update and Install Packages ====&lt;br /&gt;
&lt;br /&gt;
Enable 32-bit packages&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo dpkg --add-architecture i386&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Enable multiverse repositories&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo add-apt-repository multiverse&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
These two commands allow steamcmd to be installed which is the tool used to install the Logic world server software.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Update the system&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get update&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get upgrade -y --no-install-recommends&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
These update your package manager and install updates for any installed packages.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Install new packages&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install -y --no-install-recommends steamcmd screen ufw&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;steamcmd&amp;lt;/code&amp;gt; is used to install Logic world.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt; is used to keep Logic World running even if you close the terminal.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ufw&amp;lt;/code&amp;gt; is used to control the firewall.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Allow connections for Logic World in the firewall&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo ufw allow 43531/udp&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Setup a Logic World User ====&lt;br /&gt;
We are now going to create a user that will run the logic world server.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the user:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo adduser logicworld&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This is start a wizard to guide you through creating the user, the only important setting is the password, all other settings can be left blank.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Switch to the User:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo su logicworld&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This command will make you the new user you just created. If you would like to switch back to your initial user type &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;. For now, stay as the logicworld user, all the following commands need to be run by them.&lt;br /&gt;
&lt;br /&gt;
==== Install Logic World Server ====&lt;br /&gt;
&lt;br /&gt;
Make sure you are currently in your home directory.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Create a directory where we can install logic world.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir -p /home/logicworld/logic_world/logic_world_ds/&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Everything for Logic World will be placed in the logic_world folder, logic_world_ds will contain the logic world server software.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Use steamcmd to install the Logic World server, make sure to replace &amp;lt;USERNAME&amp;gt; with your steam username.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: this is not the same as your display name, to find your username in Steam go to Help &amp;gt; Steam Support. This page will display &amp;quot;What do you need help with, &amp;lt;USERNAME&amp;gt;&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;steamcmd +force_install_dir /home/logicworld/logic_world/logic_world_ds/ +login &amp;lt;USERNAME&amp;gt; +app_update 1252670 validate +quit&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to run the exciting but unstable public-preview version of Logic World, run the following command instead of the previous one&lt;br /&gt;
&amp;lt;code&amp;gt;steamcmd +force_install_dir /home/logicworld/logic_world/logic_world_ds/ +login &amp;lt;USERNAME&amp;gt; +app_update 1252670 -beta public-previews validate +quit&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Make sure all connecting clients are also running public preview or they will be unable to connect.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If it is your first time running steamcmd, you will be asked to login to your account.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are using the Steam Guard app and the server is hosted in a different location to where you currently are it may refuse to let you log in.&amp;lt;br&amp;gt;&lt;br /&gt;
One way to get around this security measure is to use a VPN on your phone in the same area the server is hosted in. (Eg, I setup my server in cloud hosting based in Singapore, so used a VPN to make it look like my phone was in Singapore)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Configure your new Server ====&lt;br /&gt;
&lt;br /&gt;
Create a shortcut to the Gamedata folder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ln -s /home/logicworld/logic_world/logic_world_ds/GameData/ /home/logicworld/logic_world/GameData&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Change the default password.&amp;lt;br&amp;gt;&lt;br /&gt;
This command will change the password to &amp;lt;code&amp;gt;12345678&amp;lt;/code&amp;gt;, modify this to set your own password.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sed -i &#039;s/this is a very secure password/12345678/g&#039; ~/logic_world/logic_world_ds/config.jecs&amp;lt;/code&amp;gt;&lt;br /&gt;
The config file is located at &amp;lt;code&amp;gt;~/logic_world/logic_world_ds/config.jecs&amp;lt;/code&amp;gt; you can use vim or nano if you want to customize it further.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Create Management Scripts ====&lt;br /&gt;
&lt;br /&gt;
Create the start up script&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;printf &amp;quot;#!/usr/bin/env bash\n\nscreen -L -m -d -S lwserver \$(find /home/logicworld/logic_world/logic_world_ds -name &#039;net*&#039; -type d | head -1)/Server\n&amp;quot; &amp;gt; ~/start_lw_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Make it executable&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;chmod +x ~/start_lw_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Create the update script&amp;lt;br&amp;gt;&lt;br /&gt;
Make sure to replace &amp;lt;code&amp;gt;&amp;lt;USERNAME&amp;gt;&amp;lt;/code&amp;gt; with your username, same as you did when installing the server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;printf &amp;quot;#!/usr/bin/env bash\n\nsteamcmd +force_install_dir /home/logicworld/logic_world/logic_world_ds/ +login &amp;lt;USERNAME&amp;gt; +app_update 1252670 validate +quit\n&amp;quot; &amp;gt; ~/update_logic_world_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Or, it you are using the public-preview version use this to command instead.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;printf &amp;quot;#!/usr/bin/env bash\n\nsteamcmd +force_install_dir /home/logicworld/logic_world/logic_world_ds/ +login &amp;lt;USERNAME&amp;gt; +app_update 1252670 -beta public-previews validate +quit\n&amp;quot; &amp;gt; ~/update_logic_world_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Make the update script executable&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;chmod +x ~/update_logic_world_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Start the Server ====&lt;br /&gt;
To start your new server run this command.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;./start_lw_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
This will start the server in the background, if you are able to connect to the server with your Logic World game you can now disconnect from the server.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If you need to log in again to make changes make sure to run &amp;lt;code&amp;gt;sudo su logicworld&amp;lt;/code&amp;gt; to switch to your user then run &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; to go to your home directory.&amp;lt;br&amp;gt;&lt;br /&gt;
From here you can:&amp;lt;br&amp;gt;&lt;br /&gt;
Start the server: &amp;lt;code&amp;gt;./start_lw_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Update the server: &amp;lt;code&amp;gt;./update_logic_world_server.sh&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
View the output of the running server: &amp;lt;code&amp;gt;screen -r&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To stop viewing the running server output press &amp;lt;code&amp;gt;ctrl+a&amp;lt;/code&amp;gt; then press &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If you would like to stop the server instead, press &amp;lt;code&amp;gt;ctrl+c&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt; while viewing the output.&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=686</id>
		<title>Mods:Console Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=686"/>
		<updated>2025-09-12T16:35:33Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox mod&lt;br /&gt;
| title       = Console Improvements&lt;br /&gt;
| id          = D4VID_ConsoleImprovements&lt;br /&gt;
| author      = D4VID&lt;br /&gt;
| download    = https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
| preview     = 1&lt;br /&gt;
| license     = GPLv3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is a small utility mod that does 3 things:&lt;br /&gt;
&lt;br /&gt;
# It removes the &amp;quot;&amp;gt; &amp;quot; prefix from copied commands&lt;br /&gt;
# Adds a command history that can be cycled using up and down arrow keys&lt;br /&gt;
# Adds tab completion&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot of tab completion.png|alt=Screenshot of using tab completion|left|thumb|600x600px|Screenshot of using tab completion]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=685</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=685"/>
		<updated>2025-09-12T16:34:23Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Fix License&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local capiunto = require &#039;capiunto&#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- TODO: Move to shared module&lt;br /&gt;
function unflattenArgs(flatArgs)&lt;br /&gt;
	local args = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(flatArgs) do&lt;br /&gt;
	  local parent = args&lt;br /&gt;
	&lt;br /&gt;
	  for token in string.gmatch(k, &amp;quot;[^.]+%.&amp;quot;) do&lt;br /&gt;
	    local key = string.sub(token, 1, #token - 1)&lt;br /&gt;
	    if parent[key] == nil then&lt;br /&gt;
	      parent[key] = {}&lt;br /&gt;
	    end&lt;br /&gt;
	    parent = parent[key]&lt;br /&gt;
	  end&lt;br /&gt;
	&lt;br /&gt;
	  local name = string.match(k, &amp;quot;[^.]+$&amp;quot;)&lt;br /&gt;
	  parent[name] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.component(frame, args)&lt;br /&gt;
	local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
	local headerStyle&lt;br /&gt;
	if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
		headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
	else&lt;br /&gt;
		headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local retval = capiunto.create{&lt;br /&gt;
		title = args.title,&lt;br /&gt;
		headerStyle = headerStyle,&lt;br /&gt;
		bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local image = args.image or args.id..&amp;quot;_thumbnail_render.png&amp;quot;&lt;br /&gt;
	retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, image), args.caption)&lt;br /&gt;
&lt;br /&gt;
	:addHeader(&amp;quot;Component info&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Internal ID&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..args.id..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Configurable&amp;quot;, args.configurable == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if args.io ~= nil then&lt;br /&gt;
		io = args.io&lt;br /&gt;
&lt;br /&gt;
		retval:addHeader(&amp;quot;Input and output&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
		if io.minInputs ~= io.maxInputs then&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, string.format(&amp;quot;Adjustable from %i to %i&amp;quot;, io.minInputs, io.maxInputs))&lt;br /&gt;
		else&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, io.minInputs)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		retval:addRow(&amp;quot;Output count&amp;quot;, io.outputs)&lt;br /&gt;
	&lt;br /&gt;
		if io.propagationDelay ~= nil then&lt;br /&gt;
			local ticksStr = string.format(&amp;quot;%i tick&amp;quot;, io.propagationDelay)&lt;br /&gt;
			if tonumber(io.propagationDelay) ~= 1 then&lt;br /&gt;
				ticksStr = ticksStr..&amp;quot;s&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			retval:addRow(&amp;quot;Propagation delay&amp;quot;, ticksStr)	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.mod(frame, args)&lt;br /&gt;
    local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
    local headerStyle&lt;br /&gt;
    if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
        headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
    else&lt;br /&gt;
        headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    local retval = capiunto.create{&lt;br /&gt;
        title = args.title,&lt;br /&gt;
        headerStyle = headerStyle,&lt;br /&gt;
        bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if args.image ~= nil then&lt;br /&gt;
        retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, args.image), args.caption)&lt;br /&gt;
    end&lt;br /&gt;
    retval:addHeader(&amp;quot;Mod info&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;Author&amp;quot;, string.format(&amp;quot;[[User:%s]]&amp;quot;, args.author))&lt;br /&gt;
        :addRow(&amp;quot;ID&amp;quot;, string.format(&amp;quot;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;, args.id))&lt;br /&gt;
        :addRow(&amp;quot;Download&amp;quot;, string.format(&amp;quot;[%s here]&amp;quot;, args.download))&lt;br /&gt;
        :addRow(&amp;quot;Preview&amp;quot;, args.preview == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;License&amp;quot;, args.license)&lt;br /&gt;
&lt;br /&gt;
    return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=684</id>
		<title>Template:Infobox mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=684"/>
		<updated>2025-09-12T16:33:03Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add license&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Renders an infobox for a Logic World mod&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The title shown above and outside the infobox, usually the name of the mod.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;image&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The main image to show on the infobox.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;caption&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text displayed below the image&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the author of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;id&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The ID of the mod as specified in its .jecs definition file.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;download&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Link to where the mod can be downloaded from&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;preview&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether this mod supports the game&#039;s preview version&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;license&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The license of the source code of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#invoke:Infobox|mod}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=683</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=683"/>
		<updated>2025-09-12T16:32:00Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Fix Download, add License&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local capiunto = require &#039;capiunto&#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- TODO: Move to shared module&lt;br /&gt;
function unflattenArgs(flatArgs)&lt;br /&gt;
	local args = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(flatArgs) do&lt;br /&gt;
	  local parent = args&lt;br /&gt;
	&lt;br /&gt;
	  for token in string.gmatch(k, &amp;quot;[^.]+%.&amp;quot;) do&lt;br /&gt;
	    local key = string.sub(token, 1, #token - 1)&lt;br /&gt;
	    if parent[key] == nil then&lt;br /&gt;
	      parent[key] = {}&lt;br /&gt;
	    end&lt;br /&gt;
	    parent = parent[key]&lt;br /&gt;
	  end&lt;br /&gt;
	&lt;br /&gt;
	  local name = string.match(k, &amp;quot;[^.]+$&amp;quot;)&lt;br /&gt;
	  parent[name] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.component(frame, args)&lt;br /&gt;
	local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
	local headerStyle&lt;br /&gt;
	if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
		headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
	else&lt;br /&gt;
		headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local retval = capiunto.create{&lt;br /&gt;
		title = args.title,&lt;br /&gt;
		headerStyle = headerStyle,&lt;br /&gt;
		bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local image = args.image or args.id..&amp;quot;_thumbnail_render.png&amp;quot;&lt;br /&gt;
	retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, image), args.caption)&lt;br /&gt;
&lt;br /&gt;
	:addHeader(&amp;quot;Component info&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Internal ID&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..args.id..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Configurable&amp;quot;, args.configurable == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if args.io ~= nil then&lt;br /&gt;
		io = args.io&lt;br /&gt;
&lt;br /&gt;
		retval:addHeader(&amp;quot;Input and output&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
		if io.minInputs ~= io.maxInputs then&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, string.format(&amp;quot;Adjustable from %i to %i&amp;quot;, io.minInputs, io.maxInputs))&lt;br /&gt;
		else&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, io.minInputs)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		retval:addRow(&amp;quot;Output count&amp;quot;, io.outputs)&lt;br /&gt;
	&lt;br /&gt;
		if io.propagationDelay ~= nil then&lt;br /&gt;
			local ticksStr = string.format(&amp;quot;%i tick&amp;quot;, io.propagationDelay)&lt;br /&gt;
			if tonumber(io.propagationDelay) ~= 1 then&lt;br /&gt;
				ticksStr = ticksStr..&amp;quot;s&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			retval:addRow(&amp;quot;Propagation delay&amp;quot;, ticksStr)	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.mod(frame, args)&lt;br /&gt;
    local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
    local headerStyle&lt;br /&gt;
    if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
        headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
    else&lt;br /&gt;
        headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    local retval = capiunto.create{&lt;br /&gt;
        title = args.title,&lt;br /&gt;
        headerStyle = headerStyle,&lt;br /&gt;
        bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if args.image ~= nil then&lt;br /&gt;
        retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, args.image), args.caption)&lt;br /&gt;
    end&lt;br /&gt;
    retval:addHeader(&amp;quot;Mod info&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;Author&amp;quot;, string.format(&amp;quot;[[User:%s]]&amp;quot;, args.author))&lt;br /&gt;
        :addRow(&amp;quot;ID&amp;quot;, string.format(&amp;quot;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;, args.id))&lt;br /&gt;
        :addRow(&amp;quot;Download&amp;quot;, string.format(&amp;quot;[%s here]&amp;quot;, args.download))&lt;br /&gt;
        :addRow(&amp;quot;Preview&amp;quot;, args.preview == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;Licence&amp;quot;, args.licence)&lt;br /&gt;
&lt;br /&gt;
    return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=682</id>
		<title>Module:Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Module:Infobox&amp;diff=682"/>
		<updated>2025-09-12T16:27:58Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add mod module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local capiunto = require &#039;capiunto&#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- TODO: Move to shared module&lt;br /&gt;
function unflattenArgs(flatArgs)&lt;br /&gt;
	local args = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(flatArgs) do&lt;br /&gt;
	  local parent = args&lt;br /&gt;
	&lt;br /&gt;
	  for token in string.gmatch(k, &amp;quot;[^.]+%.&amp;quot;) do&lt;br /&gt;
	    local key = string.sub(token, 1, #token - 1)&lt;br /&gt;
	    if parent[key] == nil then&lt;br /&gt;
	      parent[key] = {}&lt;br /&gt;
	    end&lt;br /&gt;
	    parent = parent[key]&lt;br /&gt;
	  end&lt;br /&gt;
	&lt;br /&gt;
	  local name = string.match(k, &amp;quot;[^.]+$&amp;quot;)&lt;br /&gt;
	  parent[name] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.component(frame, args)&lt;br /&gt;
	local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
	local headerStyle&lt;br /&gt;
	if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
		headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
	else&lt;br /&gt;
		headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local retval = capiunto.create{&lt;br /&gt;
		title = args.title,&lt;br /&gt;
		headerStyle = headerStyle,&lt;br /&gt;
		bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local image = args.image or args.id..&amp;quot;_thumbnail_render.png&amp;quot;&lt;br /&gt;
	retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, image), args.caption)&lt;br /&gt;
&lt;br /&gt;
	:addHeader(&amp;quot;Component info&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Internal ID&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;quot;..args.id..&amp;quot;&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
	:addRow(&amp;quot;Configurable&amp;quot;, args.configurable == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if args.io ~= nil then&lt;br /&gt;
		io = args.io&lt;br /&gt;
&lt;br /&gt;
		retval:addHeader(&amp;quot;Input and output&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
		if io.minInputs ~= io.maxInputs then&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, string.format(&amp;quot;Adjustable from %i to %i&amp;quot;, io.minInputs, io.maxInputs))&lt;br /&gt;
		else&lt;br /&gt;
			retval:addRow(&amp;quot;Input count&amp;quot;, io.minInputs)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		retval:addRow(&amp;quot;Output count&amp;quot;, io.outputs)&lt;br /&gt;
	&lt;br /&gt;
		if io.propagationDelay ~= nil then&lt;br /&gt;
			local ticksStr = string.format(&amp;quot;%i tick&amp;quot;, io.propagationDelay)&lt;br /&gt;
			if tonumber(io.propagationDelay) ~= 1 then&lt;br /&gt;
				ticksStr = ticksStr..&amp;quot;s&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			retval:addRow(&amp;quot;Propagation delay&amp;quot;, ticksStr)	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.mod(frame, args)&lt;br /&gt;
    local args = unflattenArgs(args or frame:getParent().args)&lt;br /&gt;
    local headerStyle&lt;br /&gt;
    if args.headerstyle and args.headerstyle ~= &#039;&#039; then&lt;br /&gt;
        headerStyle = string.format(&#039;background-color:%s;&#039;, args.headerstyle)&lt;br /&gt;
    else&lt;br /&gt;
        headerStyle = &#039;background-color:grey;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    local retval = capiunto.create{&lt;br /&gt;
        title = args.title,&lt;br /&gt;
        headerStyle = headerStyle,&lt;br /&gt;
        bodyClass = &amp;quot;lw-infobox&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if args.image ~= nil then&lt;br /&gt;
        retval:addImage(string.format(&amp;quot;[[File:%s|200px]]&amp;quot;, args.image), args.caption)&lt;br /&gt;
    end&lt;br /&gt;
    retval:addHeader(&amp;quot;Mod info&amp;quot;)&lt;br /&gt;
        :addRow(&amp;quot;Author&amp;quot;, string.format(&amp;quot;[[User:%s]]&amp;quot;, args.author))&lt;br /&gt;
        :addRow(&amp;quot;ID&amp;quot;, string.format(&amp;quot;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;quot;, args.id))&lt;br /&gt;
        :addRow(&amp;quot;Download&amp;quot;, string.format(&amp;quot;[%s here]&amp;quot;, args.author))&lt;br /&gt;
        :addRow(&amp;quot;Preview&amp;quot;, args.preview == &amp;quot;1&amp;quot; and &amp;quot;Yes&amp;quot; or &amp;quot;No&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return retval&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=680</id>
		<title>Template:Infobox mod</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Template:Infobox_mod&amp;diff=680"/>
		<updated>2025-09-12T11:03:43Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add template for mod infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Renders an infobox for a Logic World mod&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The title shown above and outside the infobox, usually the name of the mod.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;image&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The main image to show on the infobox.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-file-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;caption&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text displayed below the image&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the author of the mod&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;id&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The ID of the mod as specified in its .jecs definition file.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;download&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Link to where the mod can be downloaded from&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;preview&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Whether this mod supports the game&#039;s preview version&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#invoke:Infobox|mod}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:List_of_mods&amp;diff=677</id>
		<title>Mods:List of mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:List_of_mods&amp;diff=677"/>
		<updated>2025-09-11T20:29:49Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Use &amp;quot;Mods:&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Utilities ==&lt;br /&gt;
&lt;br /&gt;
* [[Mods:CustomWirePlacer|CustomWirePlacer]]&lt;br /&gt;
* [[Mods:DisableCollision|DisableCollision]]&lt;br /&gt;
* [[Mods:Console Improvements|Console Improvements]]&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
* [[Mods:CheeseUtilMod|CheeseUtilMod]]&lt;br /&gt;
* [[Mods:Cirno&#039;s Circuits|Cirno&#039;s Circuits]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* [[Mods:RetroLights|RetroLights]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=676</id>
		<title>Mods:Console Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=676"/>
		<updated>2025-09-11T20:28:43Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Undo revision 675 by D4VID (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a small utility mod that does 3 things:&lt;br /&gt;
&lt;br /&gt;
# It removes the &amp;quot;&amp;gt; &amp;quot; prefix from copied commands&lt;br /&gt;
# Adds a command history that can be cycled using up and down arrow keys&lt;br /&gt;
# Adds tab completion&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot of tab completion.png|alt=Screenshot of using tab completion|left|thumb|677x677px|Screenshot of using tab completion]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=675</id>
		<title>Mods:Console Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=675"/>
		<updated>2025-09-11T20:26:39Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=674</id>
		<title>Mods:Console Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:Console_Improvements&amp;diff=674"/>
		<updated>2025-09-11T20:25:05Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Created page with &amp;quot;This is a small utility mod that does 3 things:  # It removes the &amp;quot;&amp;gt; &amp;quot; prefix from copied commands # Adds a command history that can be cycled using up and down arrow keys # Adds tab completion  == Download == https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements  Screenshot of using tab completion&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a small utility mod that does 3 things:&lt;br /&gt;
&lt;br /&gt;
# It removes the &amp;quot;&amp;gt; &amp;quot; prefix from copied commands&lt;br /&gt;
# Adds a command history that can be cycled using up and down arrow keys&lt;br /&gt;
# Adds tab completion&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
https://gitea.d4vid.xyz/LogicWorldMods/ConsoleImprovements&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot of tab completion.png|alt=Screenshot of using tab completion|left|thumb|677x677px|Screenshot of using tab completion]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=672</id>
		<title>User:D4VID</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=User:D4VID&amp;diff=672"/>
		<updated>2025-09-11T20:20:43Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Add my personal page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Don&#039;t have enough time to do what I want to do, but I did some things:&lt;br /&gt;
&lt;br /&gt;
== Mods ==&lt;br /&gt;
I use [https://gitea.d4vid.xyz/LogicWorldMods my own self-hosted Gitea instance] to host my mods:&lt;br /&gt;
&lt;br /&gt;
* [[Mod/Console Improvements|Console Improvements]]&lt;br /&gt;
* [[Mods:DLatchPoke|DLatchPoke]]&lt;br /&gt;
* [[Mods:CameraRoll|CameraRoll]] (WIP)&lt;br /&gt;
* [[Mods:CriticalPathAnalyzer|CriticalPathAnalyzer]] (WIP)&lt;br /&gt;
&lt;br /&gt;
== Builds ==&lt;br /&gt;
&lt;br /&gt;
* RISC-V 32 bit CPU (the base I set of instructions) - rv32i&lt;br /&gt;
&lt;br /&gt;
== Other projects ==&lt;br /&gt;
&lt;br /&gt;
* A Rust library for creating subassembly files programmatically: https://gitea.d4vid.xyz/D4VID/logicworld-subassembly&lt;br /&gt;
* A [[wikipedia:Verilog|Verilog]] to LogicWorld compiler: https://gitea.d4vid.xyz/D4VID/verilog2logicworld (WIP)&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=File:Screenshot_of_tab_completion.png&amp;diff=669</id>
		<title>File:Screenshot of tab completion.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=File:Screenshot_of_tab_completion.png&amp;diff=669"/>
		<updated>2025-09-11T20:01:06Z</updated>

		<summary type="html">&lt;p&gt;D4VID: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of tab completion&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
	<entry>
		<id>https://wiki.logic.world/index.php?title=Mods:List_of_mods&amp;diff=668</id>
		<title>Mods:List of mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.logic.world/index.php?title=Mods:List_of_mods&amp;diff=668"/>
		<updated>2025-09-11T19:56:51Z</updated>

		<summary type="html">&lt;p&gt;D4VID: Added the first few mods to the list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Utilities ==&lt;br /&gt;
&lt;br /&gt;
* [[Mod/CustomWirePlacer|CustomWirePlacer]]&lt;br /&gt;
* [[Mod/DisableCollision|DisableCollision]]&lt;br /&gt;
* [[Mod/Console Improvements|Console Improvements]]&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
* [[Mod/CheeseUtilMod|CheeseUtilMod]]&lt;br /&gt;
* [[Mod/Cirno&#039;s Circuits|Cirno&#039;s Circuits]]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
* [[Mod/RetroLights|RetroLights]]&lt;/div&gt;</summary>
		<author><name>D4VID</name></author>
	</entry>
</feed>