<?xml version="1.0"?>
<rss version="2.0"><channel><title>Programs Latest Topics</title><link>https://oc.cil.li/forum/34-programs/</link><description>Programs Latest Topics</description><language>en</language><item><title>Big Reactors Grid Control</title><link>https://oc.cil.li/topic/918-big-reactors-grid-control/</link><description><![CDATA[<div>
	Hi everyone.
</div>

<div>
	 
</div>

<div>
	 
</div>

<div>
	A while back I promised more releases, so here you go: <strong>Big Reactors Grid Control</strong> is a multi reactor/turbine controller for Big Reactors and Extreme Reactors.
</div>

<p>
	Mission goal: Be the best big reactors controller there is. Nothing more, nothing less.
</p>

<p>
	First things first - here's the website: <a href="https://tenyx.de/brgc/" rel="external nofollow">https://tenyx.de/brgc/</a>
</p>

<p>
	<strong>NOTE:</strong> Due to a bug with OpenOS 1.7.4, BRGC will <span style="color:#e74c3c;"><strong>not</strong></span> work with that version. Please update to 1.7.5.
</p>

<div>
	<span style="font-size:24px;">Main features</span>
</div>

<ul>
	<li>
		Active and passive reactor support
	</li>
	<li>
		Support for multiple reactors and turbines at the same time (n:m)
	</li>
	<li>
		Control active and passive reactors with the same controller
	</li>
	<li>
		Automatic configuration of everything (EVERYTHING!)
	</li>
</ul>

<p>
	<span style="font-size:24px;">Setup instructions</span>
</p>

<ol>
	<li>
		wget the installer from here: <a href="http://xypm.tenyx.de/standalone/brgc_installer.lua" rel="external nofollow">http://xypm.tenyx.de/standalone/brgc_installer.lua</a>
	</li>
	<li>
		Run it
	</li>
	<li>
		Done
	</li>
</ol>

<p>
	Big Reactors Grid Control comes with three rc.d files:
</p>

<ol>
	<li>
		/etc/rc.d/brgc_reactor.lua
	</li>
	<li>
		/etc/rc.d/brgc_turbine.lua
	</li>
	<li>
		/etc/rc.d/brgc_grid.lua
	</li>
</ol>

<p>
	If you want the controller to run at boot time, you can just use OpenOS' rc.d schema.
</p>

<div>
	 
</div>

<p>
	There's a GUI as well as a command line utility for advanced users.<br />
	To start the gui, simply run "brgc_gui" and watch the magic happen.<br />
	The gui scales the screen resolution to match the screens ratio and should scale with basically all screen setups.<br />
	I recommend 3x2 or 4x3 screens.
</p>

<p>
	 
</p>

<p>
	As of now the command line utility allows you to do (almost) everything you can do with the GUI and also allows you to change the controllers configuration at runtime (if you so desire).<br />
	Check out "brgcctrl help" for further information.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:24px;">How to set up the grid</span>
</p>

<p>
	In a basic setup you just interconnect everything:<br />
	All active reactors can output steam to all turbines. All passive reactors and turbines output energy to the same grid.<br />
	You CAN have passive reactors and turbines output energy to different energy grids.<br />
	While this poses absolutely NO problem for passive reactors, you will have to set some turbines to "independent"-mode (more on that below).
</p>

<p>
	If you want your reactors and turbines to properly cooperate, you'll also need to connect at least one energy storage block to your energy grid.<br />
	Currently supported storage "blocks" are:
</p>

<ul>
	<li>
		EnderIO Capacitors (<strong>requires the mod "Computronics")</strong>
	</li>
	<li>
		Draconic Evolution Energy Storage multiblocks.
	</li>
	<li>
		RFTools Energy Cells
	</li>
	<li>
		Thermal Expansion Energy Cells
	</li>
	<li>
		Mekanism Induction Matrices
	</li>
</ul>

<p>
	You can connect them using OpenComputers Adapters.
</p>

<p>
	 
</p>

<div>
	<span style="font-size:24px;">Discovering new components</span>
</div>

<p>
	As mentioned before the controller tries to autoconfigure everything:
</p>

<p>
	 
</p>

<div>
	<span style="font-size:18px;">Passive Reactors</span>
</div>

<p>
	When a new passive reactor is connected to the controller, the controller will first try to measure its maximum energy output. The reactor will have its output increased step by step and the average (interpolated) maximum will be used for that value (CALIBRATING).<br />
	After calibration has been completed, the controller calculates the most efficient energy output of the reactor.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">Active Reactors</span>
</p>

<p>
	When a new active reactor is connected to the controller, the controller will first try to measure its maximum steam output <em>(CALIBRATING)</em>. For this to work correctly the reactor must be able to output at least SOME steam (read: you need a consumer) and you will need to provide sufficient ammounts of water. The controller will detect reactors with a potential steam output greater than 50 B/t and limit its energy accordingly.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">Turbines</span>
</p>

<p>
	When a new turbine is connected to the controller, the controller will first try to measure its maximum energy output <em>(CALIBRATING)</em>. For this to work, make sure your turbine is built correctly. This means your turbine can be run at maximum supported steam (25mb/t per blade) without exceeding 1950 RPM. Should your turbine exceed 1950 RPM at any stage, the controller will shut down the turbine and flag it as failed.
</p>

<p>
	Note: Your turbine is NOT required to be able to process 2000 mB/t. Smaller turbines work perfectly fine.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:24px;">Screenshots</span>
</p>

<p>
	After this wall of text, here're some screenshots <strong>(pre 4.2)</strong>.
</p>

<p>
	 
</p>

<div>
	Setup:
</div>

<div>
	<img alt="test_setup.png" style="height:auto;" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=https://tenyx.de/brgc/img/test_setup.png&amp;key=ff3626c07c0a1e76898834c3ca263da261f77fdab0a4f73fb05e969dfa202d7e" src="https://oc.cil.li/applications/core/interface/js/spacer.png" />
</div>

<p>
	 
</p>

<p>
	Main view:
</p>

<div>
	<img alt="overview.png" style="height:auto;" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=https://tenyx.de/brgc/img/overview.png&amp;key=05a89bb13356099b4ee796aa965e2e30fa3ebaca2bc0bda2d21d3b0cba63d4a6" src="https://oc.cil.li/applications/core/interface/js/spacer.png" />
</div>

<p>
	 
</p>

<p>
	Passive reactor details:
</p>

<div>
	<img alt="reactor_passive_detail.png" style="height:auto;" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=https://tenyx.de/brgc/img/reactor_passive_detail.png&amp;key=3696bed5597e343bccb44edd908fb045ac8e00e01232c88e8f93f13c52d471c3" src="https://oc.cil.li/applications/core/interface/js/spacer.png" />
</div>

<p>
	 
</p>

<p>
	Active reactor details:
</p>

<p>
	<img alt="reactor_active_detail.png" style="height:auto;" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=https://tenyx.de/brgc/img/reactor_active_detail.png&amp;key=baa6de3801fbd0e453539269eea1fea52553f367278babde2a04566e363103ce" src="https://oc.cil.li/applications/core/interface/js/spacer.png" />
</p>

<p>
	 
</p>

<div>
	Turbine details:
</div>

<p>
	<img alt="turbine_detail.png" style="height:auto;" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=https://tenyx.de/brgc/img/turbine_detail.png&amp;key=adadfe1f41e66e8f9fcbc8523a69bfe6b1b7b1adbedeff91f85708cfa8c0eb76" src="https://oc.cil.li/applications/core/interface/js/spacer.png" />
</p>

<p>
	 
</p>

<p>
	Let's go in order:
</p>

<p>
	When you start up the GUI you will be presented with the main view.<br />
	Here a combined overview of passive reactors, active reactors and turbines will be presented.<br />
	You can click (or touch) on any of these items to open up a detailed view of the component.<br />
	Here you can enable/disable the component or change its behaviour.
</p>

<p>
	 
</p>

<div>
	<span style="font-size:24px;">What behaviour?</span>
</div>

<p>
	This is where it gets interesting.
</p>

<p>
	 
</p>

<div>
	<span style="font-size:18px;">Passive Reactors</span>
</div>

<p>
	You will notice that passive reactors have two modes and an "auto" mode.
</p>

<p>
	 
</p>

<div>
	<strong>PWM</strong>
</div>

<p>
	This is the behaviour everyone knows: The reactor gets turned on when its internal energy storage drops below 10% and gets turned off when the energy storage exceeds 90% of it's maximum capacity.<br />
	In PWM mode the reactor will generate energy at its most efficient rod level.<br />
	Overall this mode allows the reactor to generate energy as efficiently as possible <strong>as long as your actual energy consumption is below or equal to its optimal energy output</strong>.<br />
	But sometimes you need just a bit more energy and you don't want to upgrade your reactor or build a new one. "Classic" controllers will fail to produce sufficient ammounts of energy here.
</p>

<p>
	 
</p>

<div>
	This leads me to the second behaviour:
</div>

<p>
	<strong>Load</strong>
</p>

<div>
	In "Load"-mode the reactor will always aim to produce energy at the same rate as it's consumed. Maybe some people already suspect what that mode is all about: It's a PD-like regulator.<br />
	While "Load"-mode is not as efficient as PWM-mode in situations where the energy consumption is below the optimal energy output, it will guarantee you're never running into energy shortages - provided you're not exceeding the reactors maximal capacity.
</div>

<p>
	 
</p>

<div>
	<strong>Auto</strong>
</div>

<p>
	"Auto"-mode aims to eliminate the disadvantages of both modes by combining them:<br />
	If the energy consumption can be satisfied with PWM-mode, PWM will be used. If the energy consumption is above optimal levels, "Load"-mode will be used instead.<br />
	As a result, "auto"-mode generates energy as efficient as possible while always saturating your energy demands.
</p>

<p>
	 
</p>

<div>
	<span style="font-size:18px;">Active Reactors</span>
</div>

<p>
	As of now, active reactors only operate in "load" mode. Steam is consumed and produced way too fast and the reactors internal steam storage does not allow for anything else.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">Turbines</span>
</p>

<p>
	Turbines controlled similar to reactors in "load" mode: The controller will always try to balance the turbines internal energy storage out to 50% by using a PD-like regulator.<br />
	Turbines can be operated in "ganged"-mode or in "independent"-mode, with "ganged"-mode being the default.<br />
	The only difference between these two modes is that turbines in "ganged"-mode can be shut down by the controller, while "independent" turbines will always be active, even if they overproduce energy at the lowest RPM allowed.<br />
	This is handy if one (or more) of your turbines produces energy for a seperate (dedicated) energy grid but has to be controlled by the same controller. If such a turbine is not in "independent"-mode it may be shut down which will lead to energy failure in that grid.
</p>

<p>
	 
</p>

<p>
	That's it for now. If you have any questions, want to report bugs, etc., feel free to drop a message here.
</p>

<div>
	Also: Do you want an indepth tutorial on how to use the command line utility? Need a description on what the GUI is actually showing?
</div>

<p>
	 
</p>

<div>
	Have fun
</div>

<div>
	XyFreak
</div>

<p>
	 
</p>
]]></description><guid isPermaLink="false">918</guid><pubDate>Thu, 19 May 2016 14:39:28 +0000</pubDate></item><item><title>VoidOS</title><link>https://oc.cil.li/topic/2492-voidos/</link><description><![CDATA[<p>
	This is a single file operating system. It makes a desktop with all files as shortcuts. You can move desktop shortcuts and create/delete files. There will be updates in the future.
</p>

<p>
	pastebin get nGp7V1vw /home/boot.lua
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="999" href="https://oc.cil.li/uploads/monthly_2025_05/image.png.6aa8f6ceaaa0fd863c599a9ce515cadc.png" rel=""><img alt="image.thumb.png.ed96fead161d563d053e7fdfcfc4cefe.png" class="ipsImage ipsImage_thumbnailed" data-fileid="999" data-ratio="62.90" style="height:auto;" width="1000" data-src="https://oc.cil.li/uploads/monthly_2025_05/image.thumb.png.ed96fead161d563d053e7fdfcfc4cefe.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>]]></description><guid isPermaLink="false">2492</guid><pubDate>Tue, 20 May 2025 21:34:26 +0000</pubDate></item><item><title>Cell - A graphical file manager for OpenComputers</title><link>https://oc.cil.li/topic/1738-cell-a-graphical-file-manager-for-opencomputers/</link><description><![CDATA[<p>
	Cell is a graphical file manager for OpenComputers that allows you to browse files and open them in other programs, such as the editor or simply running .lua files.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="526" href="https://oc.cil.li/uploads/monthly_2018_09/2018-09-30_14_35_01.png.640afa6a76869956bae95fbbd1aa5bde.png" rel=""><img alt="2018-09-30_14_35_01.thumb.png.c637f284ea31e55849b97a312fff2c64.png" class="ipsImage ipsImage_thumbnailed" data-fileid="526" src="https://oc.cil.li/applications/core/interface/js/spacer.png" data-src="https://oc.cil.li/uploads/monthly_2018_09/2018-09-30_14_35_01.thumb.png.c637f284ea31e55849b97a312fff2c64.png" data-ratio="56.25"></a>
</p>

<p>
	You can also customize what programs can be used to open files through the programs.cfg file.
</p>

<p>
	Tutorials:
</p>

<ul><li>
		Browsing files/directories
		<ul><li>
				Select files/directories by clicking on them in the panel on the right side of the screen
			</li>
			<li>
				If a directory contains a large amount of files or sub-directories, use the arrow buttons to scroll through pages
			</li>
			<li>
				To go up a sub-directory, click the up arrow
			</li>
			<li>
				To change directory to a sub-directory, select the sub-directory, and click on "Open..." in the options panel (bottom left)
			</li>
		</ul></li>
	<li>
		Using programs
		<ul><li>
				Select file/directory
			</li>
			<li>
				Select an option from the options panel (Run, Edit, Delete, etc.)
			</li>
		</ul></li>
	<li>
		Creating files/sub-directories
		<ul><li>
				Navigate to the directory where the file/sub-directory will be created
			</li>
			<li>
				Select "New File..."/"New Directory..." from the functions panel (top left)
			</li>
			<li>
				A prompt for the name will appear at the bottom of the screen. Enter the name for the file/directory
			</li>
		</ul></li>
	<li>
		Adding programs
		<ul><li>
				Open the programs.cfg file in the editor
			</li>
			<li>
				Add a new line for your program
				<ul><li>
						Warning: The syntax for the programs.cfg is very strict, and will not accept extra spaces/empty lines
					</li>
				</ul></li>
			<li>
				Enter this info separated by semicolons:
				<ol><li>
						Program name
					</li>
					<li>
						Text for the options menu
					</li>
					<li>
						File types (separated by commas, for all files put "all", for directories put "dir", for specific file types, put the extension including the ".")
					</li>
					<li>
						Command that runs the program ("?file?" is a wildcard for the selected file/directory)
					</li>
					<li>
						Additional options (separated by commas, does not require semicolon or comma at the end)
						<ol><li>
								"s" prevents Cell from erasing the screen before running the program
							</li>
						</ol></li>
				</ol></li>
			<li>
				For example, the line that add the editor is: 
				<pre class="ipsCode">
OpenOS Editor;Edit...;all;edit ?file?;</pre>

				<p>
					 
				</p>
			</li>
		</ul></li>
</ul><p>
	Minimum Requirements:
</p>

<ul><li>
		Tier 2 Graphics Card
	</li>
	<li>
		Tier 2 Screen
	</li>
	<li>
		Tier 1 CPU
	</li>
	<li>
		2x Tier 1 Memory
		<ul><li>
				Internet card only required for installation
			</li>
		</ul></li>
</ul><p>
	To install, run 
</p>

<pre class="ipsCode">
wget https://raw.githubusercontent.com/Elektron72/Cell/master/installer.lua installer.lua
installer.lua</pre>

<p>
	At the prompt, enter the path where Cell should be installed.
</p>

<p>
	Since this is currently in beta, report bugs at <a href="https://github.com/Elektron72/Cell" rel="external nofollow">https://github.com/Elektron72/Cell</a>
</p>
]]></description><guid isPermaLink="false">1738</guid><pubDate>Sun, 30 Sep 2018 18:36:46 +0000</pubDate></item><item><title>OC-8: A Chip-8 Emulator For OpenComputers</title><link>https://oc.cil.li/topic/2485-oc-8-a-chip-8-emulator-for-opencomputers/</link><description><![CDATA[<p>
	I decided to code a custom chip-8 emulator for opencomputers!<br />
	It's quite slow and a bit inaccurate but it works!<br /><br />
	To try this emulator just do:  pastebin get XV0Vzc2x OC-8.lua or pastebin run XV0Vzc2x
</p>

<p>
	 
</p>

<p>
	Source Code:
</p>

<p>
	<a href="https://pastebin.com/XV0Vzc2x" rel="external nofollow">OC-8 : A Chip-8 Emulator For OpenComputers (version 1.1) - Pastebin.com</a>
</p>

<p>
	Screenshots!:
</p>

<p>
	<img alt="Image" data-ratio="60.10" style="height:auto;" width="1000" data-src="https://media.discordapp.net/attachments/125649403162656768/1336648022183903240/Capture_decran_2025-02-05_114018.png?ex=67a491fa&amp;is=67a3407a&amp;hm=75d7428d8df28b46955c24559f83357b3a455156edd8c259902ad3ad242003f9&amp;=&amp;format=webp&amp;quality=lossless&amp;width=1154&amp;height=601" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></p>

<p>
	 <img alt="Image" data-ratio="60.10" style="height:auto;" width="1000" data-src="https://media.discordapp.net/attachments/125649403162656768/1336648021831712849/image.png?ex=67a491fa&amp;is=67a3407a&amp;hm=5ab67fc52e39362b8b5f3afdfa2d6aa373f9d09749e225feb75687c561ecc6c2&amp;=&amp;format=webp&amp;quality=lossless&amp;width=1139&amp;height=601" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></p>]]></description><guid isPermaLink="false">2485</guid><pubDate>Wed, 05 Feb 2025 11:22:06 +0000</pubDate></item><item><title>Base64 decoder [TIS-3D]</title><link>https://oc.cil.li/topic/2484-base64-decoder-tis-3d/</link><description><![CDATA[<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2025_01/img.png.be055249cb86ff8d4d67956b69a9cf01.png" data-fileid="997" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="997" data-ratio="57.20" width="1000" alt="img.thumb.png.5227b9d8ff9ec1fb9ef8c453be53c633.png" data-src="https://oc.cil.li/uploads/monthly_2025_01/img.thumb.png.5227b9d8ff9ec1fb9ef8c453be53c633.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	Lookup table generator
</p>

<pre class="ipsCode">
#DEFINE RAM UP

MOV 65 ACC        
LOOP: MOV ACC RAM
    SWP
    MOV ACC RAM
    ADD 1
    SWP
    SUB 90
    JEZ LOW
    SUB 32
    JEZ DIGITS
    ADD 65
    JEZ HALT
    ADD 58
    JMP LOOP
#BWTM

LOW: MOV 97 ACC
    JMP LOOP

DIGITS: MOV 48 ACC
    JMP LOOP

HALT: MOV 43 RAM
    MOV 62 RAM
    MOV 47 RAM
    MOV 63 RAM
    JRO 0</pre>

<p>
	Decoder
</p>

<pre class="ipsCode">
#DEFINE TERM UP
#DEFINE ROM LEFT
#DEFINE BUFF RIGHT
#DEFINE OUT DOWN

LOOP: MOV TERM ACC #1
    JEZ CLEAR
    MOV ACC ROM
    MOV ROM ACC
    SUB 61
    JEZ CLEAR
    ADD 61
    SHL 2
    MOV ACC BUFF
    MOV TERM ROM
    MOV ROM ACC
    SAV
    SHR 4
    OR BUFF
    MOV ACC OUT
#BWTM

    SWP #2
    AND 15
    SHL 4
    MOV ACC BUFF
    MOV TERM ROM
    MOV ROM ACC
    SAV
    SHR 2
    OR BUFF
    MOV ACC OUT
    SWP #3
    AND 3
    SHL 6
    MOV TERM ROM
    OR ROM
    MOV ACC OUT
    JMP LOOP
CLEAR: SAV</pre>

<p>
	 
</p>]]></description><guid isPermaLink="false">2484</guid><pubDate>Wed, 29 Jan 2025 06:24:50 +0000</pubDate></item><item><title>Draconic Control - Get everything out of your draconic reactor</title><link>https://oc.cil.li/topic/873-draconic-control-get-everything-out-of-your-draconic-reactor/</link><description><![CDATA[<p>
	Hi guys,
</p>

<p>
	 
</p>

<p>
	Draconic Control will be the first program I'll be releasing (more to come).
</p>

<p>
	The important stuff first: By now there are quite a few programs out there to control draconic reactors. However most of these don't even get close to about 1 MR/t. With this program 1.9 MRF/t (on average) is very well possible.
</p>

<p>
	Of course if you're not interested in RF/t but only total RF generated, this program is for you as well.
</p>

<p>
	Also, this one has a nice gui.
</p>

<p>
	 
</p>

<p>
	Go check it out here: <a href="https://tenyx.de/draconic_control/" rel="external nofollow">https://tenyx.de/draconic_control/</a>
</p>

<p>
	 
</p>

<p>
	Yes, it comes with yet another (unreleased) GUI library *cough*.
</p>

<p>
	And yes it uses some kind of self built installer *doublecough*.
</p>

<p>
	 
</p>

<p>
	This program has a CC and OC version. If you want to skip to the OC setup instructions, click here: <a href="https://tenyx.de/draconic_control/#setup_oc" rel="external nofollow">https://tenyx.de/draconic_control/#setup_oc</a>
</p>

<p>
	 
</p>

<p>
	I'm open for suggestions and so forth.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	This is the first of quite a few things I'm about to release so stay tuned if you like this one <img alt=";)" height="20" srcset="" style="height:auto;" width="20" data-src="https://oc.cil.li/uploads/emoticons/default_wink.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></p>

<p>
	You can follow me on twitter @XyFreak1 to stay up-to-date - I promise I won't spam your tweetdeck or something - mostly release related stuff <img alt=":P" height="20" srcset="" style="height:auto;" width="20" data-src="https://oc.cil.li/uploads/emoticons/default_tongue.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></p>

<p>
	 
</p>

<p>
	Have Fun
</p>

<p>
	- XyFreak
</p>

<p>
	 
</p>

<p>
	<span style="color:#e74c3c;"><span style="font-size:28px;"><strong>WARNING</strong></span></span>
</p>

<p>
	<strong><span>DO NOT USE THIS WITH OC 1.7.4! Timers are broken in that versions OpenOS and upgrading to this version will cause big holes in your world sooner or later!</span></strong>
</p>

<p>
	<b>MAKE SURE YOUR CPU IS SET TO LUA 5.2 TO NOT RUN INTO THE "UNKNOWN" REACTOR STATUS ISSUE! <a href="https://oc.cil.li/topic/873-draconic-control-get-everything-out-of-your-draconic-reactor/?do=findComment&amp;comment=10582" rel="">SEE HERE</a></b>
</p>]]></description><guid isPermaLink="false">873</guid><pubDate>Wed, 30 Mar 2016 15:18:18 +0000</pubDate></item><item><title>TherOS Community Repository (TOCR)</title><link>https://oc.cil.li/topic/2474-theros-community-repository-tocr/</link><description><![CDATA[<p>
	Hello! I have spent some time creating a package manager and repository.
</p>

<p>
	Github: <a href="https://github.com/Tavyza/TherOS_community_repo" rel="external nofollow">https://github.com/Tavyza/TherOS_community_repo</a>
</p>

<p>
	# Installation:
</p>

<pre class="ipsCode">
wget -f -q https://raw.githubusercontent.com/Tavyza/TherOS_community_repo/main/pkg-man/src/tocr.lua /tmp/tocr.lua
/tmp/tocr -i pkg-man
rm /tmp/tocr.lua</pre>

<p>
	 
</p>

<p>
	To add a package to the repository:
</p>

<ol><li>
		Fork it
	</li>
	<li>
		create a folder (this will be the package name)
	</li>
	<li>
		make a package.tc file (should contain the full raw github link to your program)
	</li>
	<li>
		dependencies.tc (same as package.tc but for libraries your package would need)
	</li>
	<li>
		add your package to the end of repo_list.tc in the root of the repository
	</li>
	<li>
		make a pull request.
	</li>
</ol><p>
	 
</p>

<p>
	Questions? Issues? Suggestions? Comment them or open an issue in the repo.
</p>]]></description><guid isPermaLink="false">2474</guid><pubDate>Thu, 03 Oct 2024 12:28:47 +0000</pubDate></item><item><title>TherOS, a minimal graphic (operating system/environment?)</title><link>https://oc.cil.li/topic/2457-theros-a-minimal-graphic-operating-systemenvironment/</link><description><![CDATA[<p>
	Have you ever wanted to have an easier experience using your computer? Is MineOS too laggy and OpenOS mayhaps a little too confusing?
</p>

<p>
	Introducing TherOS, a minimal (operating system/environment?) that provides basic tools to do what you want. These tools include:
</p>

<ul><li>
		A graphical file manager with basic file management and creation abilities
	</li>
	<li>
		A program installer (can install from pastebin or github/literally any website ig)
	</li>
	<li>
		A simple and easy-to-use installer
	</li>
	<li>
		A terminal that can be used to run whatever
	</li>
</ul><p>
	The OS has 2 versions, main and  bleeding-edge (SUPPOSED TO BE the lastest developments for the OS)
</p>

<p>
	1.1 -- <a href="https://github.com/Tavyza/TherOS/tree/main" rel="external nofollow">GitHub repo</a>
</p>

<p>
	1.1 -- <a href="https://github.com/Tavyza/TherOS/tree/bleeding-edge" rel="external nofollow">Github repo</a>
</p>

<p>
	Install:
</p>

<pre class="ipsCode">
wget https://raw.githubusercontent.com/Tavyza/TherOS/main/sys/apps/installer.lua &amp;&amp; installer</pre>

<p>
	Or if you have the TOCR Package Manager, do:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">tocr -ib theros-core theros-apps</span></pre>

<p>
	Please report all bugs or suggestions in the issues section of GitHub. (Yes, you can laugh at my code.)
</p>]]></description><guid isPermaLink="false">2457</guid><pubDate>Mon, 06 May 2024 23:40:28 +0000</pubDate></item><item><title>Mockup - VEB OS</title><link>https://oc.cil.li/topic/2461-mockup-veb-os/</link><description><![CDATA[<p>
	I have created a Mockup of a Potential Operating System for OpenComputers 1.8.x, this OS is based off of the SharePoint and DOS 5 styles.
</p>

<p>
	Here are some designs:
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image ipsAttachLink_left" href="https://oc.cil.li/uploads/monthly_2024_05/105647752_ShellNetwork.jpg.4731cbfc83e84cbb9d24fe01a0b66b51.jpg" style="float:left;" data-fileid="978" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="978" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="1158447185_ShellNetwork.thumb.jpg.6e889ba0570252c3b43f4e6e0dcb938b.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/1158447185_ShellNetwork.thumb.jpg.6e889ba0570252c3b43f4e6e0dcb938b.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a><a class="ipsAttachLink ipsAttachLink_image ipsAttachLink_left" href="https://oc.cil.li/uploads/monthly_2024_05/154516996_ShellHome.jpg.b61609db20d7111ada54a19c7a3cc802.jpg" style="float:left;" data-fileid="975" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="975" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="2023678709_ShellHome.thumb.jpg.ded30875a250b977fd275d2be9d2d88a.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/2023678709_ShellHome.thumb.jpg.ded30875a250b977fd275d2be9d2d88a.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a><a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2024_05/220388181_ShellApplications.jpg.24c056a1a6a2b86021c5af4d3f5f5bf1.jpg" data-fileid="972" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="972" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="1676096543_ShellApplications.thumb.jpg.3a44e2cbf7cc82ea3b83837b1231cae1.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/1676096543_ShellApplications.thumb.jpg.3a44e2cbf7cc82ea3b83837b1231cae1.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image ipsAttachLink_left" href="https://oc.cil.li/uploads/monthly_2024_05/1172725714_ShellManagement.jpg.314db0026235485b66ad656d633ac9fa.jpg" style="float:left;" data-fileid="977" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="977" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="899671506_ShellManagement.thumb.jpg.99f70f1e3f452f80f23900d192c321a9.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/899671506_ShellManagement.thumb.jpg.99f70f1e3f452f80f23900d192c321a9.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a><a class="ipsAttachLink ipsAttachLink_image ipsAttachLink_left" href="https://oc.cil.li/uploads/monthly_2024_05/781999977_ShellLogin.jpg.65ae417fbf700a3567ee6864b13f0060.jpg" style="float:left;" data-fileid="976" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="976" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="362164631_ShellLogin.thumb.jpg.5681ccd4fcb84c6c610e099972527dbb.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/362164631_ShellLogin.thumb.jpg.5681ccd4fcb84c6c610e099972527dbb.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a><a class="ipsAttachLink ipsAttachLink_image ipsAttachLink_left" href="https://oc.cil.li/uploads/monthly_2024_05/633250514_ShellDisconnect.jpg.e719c681cf72616348b798b49a00fbfb.jpg" style="float:left;" data-fileid="973" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="973" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="1100783806_ShellDisconnect.thumb.jpg.bcd4b02f26bb9042e43054fb584d8b95.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/1100783806_ShellDisconnect.thumb.jpg.bcd4b02f26bb9042e43054fb584d8b95.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image ipsAttachLink_left" href="https://oc.cil.li/uploads/monthly_2024_05/1824908193_ShellFiles.jpg.b3f31b55e0b4499d46f43503b2be0622.jpg" style="float:left;" data-fileid="974" data-fileext="jpg" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="974" data-ratio="75.00" style="width:500px;height:auto;" width="1000" alt="2020672572_ShellFiles.thumb.jpg.b17e4ba270b772040160e7c00fd7bb4a.jpg" data-src="https://oc.cil.li/uploads/monthly_2024_05/2020672572_ShellFiles.thumb.jpg.b17e4ba270b772040160e7c00fd7bb4a.jpg" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>If you would like to see this become a real OS in OC, please reply.
</p>]]></description><guid isPermaLink="false">2461</guid><pubDate>Sun, 26 May 2024 14:42:26 +0000</pubDate></item><item><title>VEB For Banks</title><link>https://oc.cil.li/topic/2422-veb-for-banks/</link><description><![CDATA[<p>
	VEB For Banks is a yet to be released Banking Program for OpenComputers, it runs on low tier computers but works best with a tier 2 screen. The Program allows you to manage bank accounts and transactions as well as record player banking activity over time. It has an install wizard and is quite automated so u wont need to know much about programming for it to work.
</p>

<p>
	Computer Requirements:<br />
	Basic Components<br />
	OpenOS (Lua 5x)
</p>

<p>
	Recommended:<br />
	Tier 2 Components<br />
	Tier 2 Screen and Graphics Card<br />
	OpenOS (Lua 5x)
</p>

<p>
	Feel free to add comments, I would love recommendations
</p>]]></description><guid isPermaLink="false">2422</guid><pubDate>Wed, 15 Nov 2023 10:39:09 +0000</pubDate></item><item><title>OC-DALNET : An DALNET Client For OpenComputers!</title><link>https://oc.cil.li/topic/2469-oc-dalnet-an-dalnet-client-for-opencomputers/</link><description><![CDATA[<p>
	hello! i just made this irc client for DALNET that works for opencomputers! <span><img alt=":D" data-emoticon="" height="20" src="https://oc.cil.li/uploads/emoticons/default_biggrin.png" srcset="https://oc.cil.li/uploads/emoticons/biggrin@2x.png 2x" title=":D" width="20" /></span>
</p>

<p>
	<span>it's completely written on lua and it's not irssi compatible!<br />
	it's text only but It's quite easy to use! By doing :helpoc!</span><br />
	to chat, you just press ctrl and to do commands just do alt!
</p>

<p>
	to use this IRC client, you need to do<br />
	pastebin run e1bQJEFa<br />
	or<br />
	pastebin get e1bQJEFa OCDALNET.lua<br /><br />
	Source Code Is at <a href="https://pastebin.com/e1bQJEFa" rel="external nofollow">https://pastebin.com/e1bQJEFa</a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2024_07/lll.png.c9943fd4cae9e05918486aa0b951c44d.png" data-fileid="990" data-fileext="png" rel=""><img alt="lll.png" class="ipsImage ipsImage_thumbnailed" data-fileid="990" data-ratio="69.19" style="height:auto;" width="198" data-src="https://oc.cil.li/uploads/monthly_2024_07/lll.png.c9943fd4cae9e05918486aa0b951c44d.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>]]></description><guid isPermaLink="false">2469</guid><pubDate>Wed, 24 Jul 2024 14:24:22 +0000</pubDate></item><item><title>OCDonut : Donut.c for OpenComputers!</title><link>https://oc.cil.li/topic/2468-ocdonut-donutc-for-opencomputers/</link><description><![CDATA[<p>
	Ive made this port an day ago by converting and translating the C code to Lua OC! <img alt=":)" data-emoticon="" height="20" src="https://oc.cil.li/uploads/emoticons/default_smile.png" srcset="https://oc.cil.li/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" /><br />
	It's more recommended to try this on an tier 2 screen!<br />
	If you wanna try this just do pastebin run k7MKw38X or pastebin get k7MKw38X OCDONUT.LUA<br /><br />
	The Source Code! : <a href="https://pastebin.com/k7MKw38X" rel="external nofollow">https://pastebin.com/k7MKw38X</a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2024_07/556081111_image(23)(1)(1).png.7e8c50c980b013ae55d72f19f95c8c99.png" data-fileid="989" data-fileext="png" rel=""><img alt="image (23) (1) (1).png" class="ipsImage ipsImage_thumbnailed" data-fileid="989" data-ratio="47.25" style="height:auto;" width="400" data-src="https://oc.cil.li/uploads/monthly_2024_07/556081111_image(23)(1)(1).png.7e8c50c980b013ae55d72f19f95c8c99.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>]]></description><guid isPermaLink="false">2468</guid><pubDate>Sat, 20 Jul 2024 21:59:53 +0000</pubDate></item><item><title>OC-NICCC: An ST-NICCC 2000 Port For OpenComputers</title><link>https://oc.cil.li/topic/2467-oc-niccc-an-st-niccc-2000-port-for-opencomputers/</link><description><![CDATA[<p>
	I decided to port ST-NICCC (Which is an ATARI ST Demo) To OpenComputers Via Lua 5.3 because there are almost no demoscenes on OpenComputers \^_^/<br />
	If you wanna try this demo just do:<br />
	pastebin run h9zUNB1x<br />
	or<br />
	pastebin get h9zUNB1x OCNICCC.lua<br /><br />
	Here are some screenshots! <img alt=":D" data-emoticon="" height="20" src="https://oc.cil.li/uploads/emoticons/default_biggrin.png" srcset="https://oc.cil.li/uploads/emoticons/biggrin@2x.png 2x" title=":D" width="20" /><br /><br />
	Source Code Is At <a href="https://pastebin.com/h9zUNB1x" rel="external nofollow">https://pastebin.com/h9zUNB1x</a><br /><br />
	Video Showing The Demo Running! <a href="https://www.youtube.com/watch?v=XjIgFmEaIpo" rel="external nofollow">https://www.youtube.com/watch?v=XjIgFmEaIpo</a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="987" href="https://oc.cil.li/uploads/monthly_2024_07/2024-07-20_19_57_57.png.24237118c255fa5378041c63a600db9a.png" rel=""><img alt="2024-07-20_19.57.57.png" class="ipsImage ipsImage_thumbnailed" data-fileid="987" data-ratio="53" style="height:auto;" width="1000" data-src="https://oc.cil.li/uploads/monthly_2024_07/2024-07-20_19_57_57.thumb.png.3855878db8ed9f6d7f7cf3d1957203ad.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="988" href="https://oc.cil.li/uploads/monthly_2024_07/2024-07-20_20_01_04.png.252d8b66d243e99cd85b2cbd3ca4be65.png" rel=""><img alt="2024-07-20_20.01.04.png" class="ipsImage ipsImage_thumbnailed" data-fileid="988" data-ratio="53" style="height:auto;" width="1000" data-src="https://oc.cil.li/uploads/monthly_2024_07/2024-07-20_20_01_04.thumb.png.e0e7bbc451c3f5e5c8d1d38450c1454f.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>]]></description><guid isPermaLink="false">2467</guid><pubDate>Sat, 20 Jul 2024 18:13:14 +0000</pubDate></item><item><title>Fuchas, a powerful operating system</title><link>https://oc.cil.li/topic/1852-fuchas-a-powerful-operating-system/</link><description><![CDATA[<p style="text-align:center;">
	<span style="font-size:36px;">Fuchas</span><br /><span style="font-size:10px;">One of the best OSes (as said by me)</span>
</p>

<p style="text-align:center;">
	<span style="font-size:20px;">Fuchas in a Nutshell</span>
</p>

<p>
	Fuchas is revolutionnary in that it uses <strong>drivers instead of component access and support UAC (with separate permissions!) !</strong> It's the end of the era where the program needs to maintain integration with different components, the OS now does it! The driver library will try automatically choosing the best driver, but it can be configured by user. Meaning <strong>programs adapt to components with no effort</strong> (e.g. Computronics cards)
</p>

<p>
	A feature of Fuchas is security. If you do not trust a program, you can control permissions. Each account can have its own set of permissions. Allow one to have free access on a specific drive? You can do that!. Security is useful for computers on big servers with competivity. Although remember that without disk encryption, data can be accessed simply by using another operating system. Fuchas doesn’t hide files starting with ".", it uses attributes, filesystem’s one if supported on unmanaged drives, or with a .dir file at file’s parent directory.
</p>

<p>
	Fuchas is also fast at startup, around 2x faster than OpenOS down like memory usage. And graphical features are optional, so you can use command-line on your T1 computer, and a graphical interface on T3, all on the same OS! And since the UI is compatible with 40x16 and doesn't uses a lot of memory, you can use both on a T1 computer!
</p>

<p style="text-align:center;">
	<span style="font-size:20px;">Extra Features</span>
</p>

<p>
	For example, the GUI interface of Fuchas (named "Concert") uses the newly added GPU buffers when available in a way that is transparent to programs and user.
</p>

<p style="text-align:center;">
	<span style="font-size:20px;">Interfaces</span>
</p>

<p>
	Here are the interfaces included: Fushell (a command-line shell) and Concert.
</p>

<p>
	For example here is Fushell (warn: old version [4 major releases ago], but still a little representative):
</p>

<p>
	<a href="https://i.imgur.com/0s42pPT.png" rel="external nofollow"><img alt="Fushell 0.2.0" class="ipsImage" data-ratio="65.60" height="553" style="height:auto;width:600px;" width="843" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=https://i.imgur.com/0s42pPT.png&amp;key=592c8ac91f9d4d7a91cc138b8b8e58c92e4b288b75d9866041809bc19a840050" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	and Concert as of Fuchas 0.7:
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2021_08/Screenshot_20210829_104335.png.9f78b65524c897de0bd7e82a192ba218.png" data-fileid="846" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="846" data-ratio="62.88" style="width:800px;height:auto;" width="1000" alt="Screenshot_20210829_104335.thumb.png.ceacae7ff6a7d668115367e342596dd6.png" data-src="https://oc.cil.li/uploads/monthly_2021_08/Screenshot_20210829_104335.thumb.png.ceacae7ff6a7d668115367e342596dd6.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p style="text-align:center;">
	<span style="font-size:20px;">Install It</span>
</p>

<p>
	OpenOS:
</p>

<p>
	Just type the following:
</p>

<pre class="ipsCode">
pastebin run EbHYvEE8</pre>

<p>
	MineOS:
</p>

<p>
	Search for the application 'Fuchas Installer'. Install it, launch it, and press Install.
</p>

<p>
	Fuchas:
</p>

<p>
	You’re on Fuchas <img alt=":D" data-emoticon="" height="20" src="https://oc.cil.li/uploads/emoticons/default_biggrin.png" srcset="https://oc.cil.li/uploads/emoticons/biggrin@2x.png 2x" title=":D" width="20" /></p>

<p>
	(Note that all comments about broken installation below are outdated, and installers has been fixed!)
</p>

<p>
	Links: <a href="https://github.com/zenith391/Fuchas/" rel="external nofollow">GitHub</a><a href="https://github.com/zenith391/Fuchas/wiki" rel="external nofollow">, Wiki, </a><a href="https://github.com/zenith391/Fuchas/projects" rel="external nofollow">Progress to next version, </a><a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" rel="external nofollow">And here is how to break the whole Fuchas security system</a><span> </span>
</p>]]></description><guid isPermaLink="false">1852</guid><pubDate>Tue, 19 Mar 2019 15:05:40 +0000</pubDate></item><item><title>An ME system fluid manager</title><link>https://oc.cil.li/topic/2462-an-me-system-fluid-manager/</link><description><![CDATA[<p>
	Im not super forum-savvy, but as i was playing PO3, I found myself needing a program to automate the production of fluids, and since 1.12.2 ae2 is weird about fluid crafting, i offloaded it to OC.
</p>

<p>
	how to use:
</p>

<p>
	1. copy fluids.lua or use the command in the readme (have an internet card, ofc) and put it wherever you want on your system. make sure to be connected to an ME system controller.
</p>

<p>
	2. run fluids.lua and type `initialize`.
</p>

<p>
	3. you can either edit the quantities you want as your minimum through the program using `edit` or through changing the appropriate value in fluids.cfg
</p>

<p>
	4. add the code you want to be ran whenever a given fluid is lower than the check value in the FUNCTIONS function. i couldn't figure out how to make it less convoluted, as of now.
</p>

<p>
	let me know if yall have any issues
</p>

<p>
	github code: <a href="https://github.com/GlitterVappy/ME-system-fluid-manager/" rel="external nofollow">https://github.com/GlitterVappy/ME-system-fluid-manager/</a>
</p>

<p>
	or run: wget -fq "<a href="https://raw.githubusercontent.com/GlitterVappy/ME-system-fluid-manager/main/fluids.lua" rel="external nofollow">https://raw.githubusercontent.com/GlitterVappy/ME-system-fluid-manager/main/fluids.lua</a>" "fluids.lua"
</p>]]></description><guid isPermaLink="false">2462</guid><pubDate>Sun, 26 May 2024 21:49:54 +0000</pubDate></item><item><title>Remote Nuclear Craft Fission reactor controller program</title><link>https://oc.cil.li/topic/2455-remote-nuclear-craft-fission-reactor-controller-program/</link><description><![CDATA[<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	Might have errors if so please comment them
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	I might make a gui for it
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	For this, you will need a linked card, tier 3, tier 2 tablet case
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	Step 1 Place a tier 3 computer case
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	step 2 set up the computer 
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	step 3 put a linked card and internet card in it
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	step 4 connect the computer to fission controller
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	step 5 type pastebin get FByuRNGd server.lua
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	step 6 type server.lua or do edit /autorun.lua then type os.execute("/home/server.lua")
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	Now for setting up the tablet
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	get an assembler place a tier 2 tablet case in assembler
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	put a linked card and internet card in it
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	setup tablet
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	type pastebin get GbQjG7nY reactor.lua
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	then type reactor.lua or type edit /autorun.lua then type os.execute("/home/reactor.lua")
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	--------------------------------------------------------------------------------------------------------------------------------------------
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	-- To do
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	 
</p>

<p style="background-color:#ffffff;color:#555555;font-size:14px;">
	<s>Add a safety measure to stop meltdowns</s>
</p>]]></description><guid isPermaLink="false">2455</guid><pubDate>Thu, 25 Apr 2024 15:01:36 +0000</pubDate></item><item><title>doese exist a prpgramm that allow me to use openos but whit a graphic GUI?</title><link>https://oc.cil.li/topic/2451-doese-exist-a-prpgramm-that-allow-me-to-use-openos-but-whit-a-graphic-gui/</link><description><![CDATA[<p>
	hello so im searching a shell for openos 1.8.4 that allow me to run more programs at the same time on lv2 pc end whit a build in file menager some thing like old windows when it was only a shell
</p>]]></description><guid isPermaLink="false">2451</guid><pubDate>Thu, 18 Apr 2024 13:16:44 +0000</pubDate></item><item><title>[WIP] NetCoin, a fully working cryptocurrency made for OpenComputers</title><link>https://oc.cil.li/topic/2283-wip-netcoin-a-fully-working-cryptocurrency-made-for-opencomputers/</link><description><![CDATA[<pre style="color:#000000;">
<strong>What's Netcoin?</strong>
NetCoin is a cryptocurrency designed for OpenComputers, a Minecraft mod that adds computers in the game. It follows Bitcoin's original philosophy: a completely decentralized network of nodes, each one maintaining a ledger with everyone's transactions, grouped into blocks that miners need to create solving the proof-of-work (PoW).

<strong>What's the crypto behind it?</strong>
It uses Elliptic Curve Digital Signature Algorithm (ECDSA) to sign transactions and SHA-256 as a PoW. Cryptographic functions are not implemented by software, but OpenComputers provides a component (Data Card) that provides an API to run these functions. That makes cryptography extremely efficient, since it runs directly on Java Code and not by the Lua VM.

<strong>Protocol details? Block time? Transaction fees?</strong>
Block time is about 5 minutes; this is a trade-off between transaction speed (who wants to wait 30 minutes for that NTC payment to be confirmed in order to receive those 3 diamonds?) and space (computers have a limited disk space, so blockchain shouldn't grow too fast).
NetCoin is a deflationary currency, meaning that block rewards are cut in half every 5000 blocks. There will be a point where miner's only incentive will be transaction fees. This feature hasn't been implemented yet, but it is planned on the future.

<strong>I want to run this crypto!</strong>
Great! Use wget or pastebin command from OpenOS with an Internet Card to download the code into one of your computers. Once you have it, you can transfer it in-game via floppy disks to as many computers as wou want. You will need:
- A Data Card for using cryptography
- 3-4 raids full of Tier 3 Hard Drives (4MB) to store the blockchain
- Minimum 4MB of RAM
Run a node. It will automatically set up a wallet for you generating a public/private keypair. You will want to share your pubkey stored in wallet.pk, this is your official NetCoin address in which you will receive money. NEVER SHARE YOUR SECRET KEY STORED IN WALLET.SK! You will need to provide at least one node IP address (modem address) for it to connect to the network. It will automatically synchronize with the rest of the network: blocks, other nodes known...
To be a miner, you need a node and enable "isMiner" variable. Then you need a mining controller computer connected to the node. Finally, you will connect all your mining computers to the controller, and use "mine" command on the node. You're mining now!
</pre>

<p>
	<strong>Notes</strong>
</p>

<p>
	The full code can be found on <a href="https://github.com/Juanan7676/netcoin" rel="external nofollow">https://github.com/Juanan7676/netcoin</a>. This is a work in progress project, bugs and security issues are very common, use with caution!
</p>
<p><a href="https://oc.cil.li/uploads/monthly_2021_11/netcoin1.png.08143b9351327edee66566d87d8a0222.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="856" src="https://oc.cil.li/applications/core/interface/js/spacer.png" data-src="https://oc.cil.li/uploads/monthly_2021_11/netcoin1.thumb.png.8084095fe9fded07bb39862f1e18998e.png" data-ratio="54.3" width="1000" class="ipsImage ipsImage_thumbnailed" alt="netcoin1.png"></a></p>
<p><a href="https://oc.cil.li/uploads/monthly_2021_11/netcoin2.png.00a8e18943e048a8f1ec397cc1240161.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="857" src="https://oc.cil.li/applications/core/interface/js/spacer.png" data-src="https://oc.cil.li/uploads/monthly_2021_11/netcoin2.thumb.png.9e2af1fb4eb5002e8d47128bc3a5002b.png" data-ratio="53.1" width="1000" class="ipsImage ipsImage_thumbnailed" alt="netcoin2.png"></a></p>]]></description><guid isPermaLink="false">2283</guid><pubDate>Thu, 18 Nov 2021 09:20:13 +0000</pubDate></item><item><title>Code Lock [TIS-3D]</title><link>https://oc.cil.li/topic/2442-code-lock-tis-3d/</link><description><![CDATA[<p>
	A simple and compact code lock with a password that can contain digits from 1 to 9. 0 is used as the "enter" button.<br />
	The length of the password can range from 1 to 255.
</p>

<p>
	<strong>Steps to use:</strong>
</p>

<p>
	1. Arrange the modules in a comfortable configuration (lock the sides if necessary)
</p>

<p>
	2. Set the constants
</p>

<p>
	3. Upload the program to the execution module
</p>

<p>
	4. Set the password
</p>

<ul><li>
		  Right-click to open the ROM interface
	</li>
	<li>
		  In cell 0 set the password length
	</li>
	<li>
		  Sequentially set each digit of the password
	</li>
	<li>
		  Install the ROM into a casing block
	</li>
</ul><p>
	5. To activate redstone, type the correct password and press "0" to confirm.
</p>

<p>
	 
</p>

<p>
	<strong>Constants:</strong>
</p>

<ul><li>
		 DELAY - redstone activation time
	</li>
</ul><p>
	  Sides:
</p>

<ul><li>
		RED - redstone module
	</li>
	<li>
		ROM - ROM module
	</li>
	<li>
		KEY - keypad
	</li>
</ul><p>
	          [KEY]<br />
	[ROM][EXE][RED]
</p>

<div class="ipsEmbeddedVideo">
	<div>
		<iframe allowfullscreen="" frameborder="0" height="113" title="Code Lock [TIS-3D]" width="200" data-embed-src="https://www.youtube.com/embed/sMj7JnopyKw?feature=oembed"></iframe>
	</div>
</div>

<p>
	 
</p>

<pre class="ipsCode">
----- PAGE 1 -----
#DEFINE DELAY 20
#DEFINE RED RIGHT
#DEFINE ROM LEFT
#DEFINE KEY UP
START: MOV NIL ACC
SAV
LOOP: MOV KEY ACC
  JEZ CHECK
  SWP
  ADD 1
  MOV ACC ROM
  SWP
  SUB ROM
  JNZ START
JMP LOOP
#BWTM
----- PAGE 2 -----
CHECK: SWP
  MOV NIL ROM
  SUB ROM
  JNZ START
  MOV 15 RED
  MOV DELAY ACC
  SLEEP:
    SUB 1
  JGZ SLEEP
  MOV NIL RED</pre>

<p>
	 
</p>]]></description><guid isPermaLink="false">2442</guid><pubDate>Fri, 23 Feb 2024 03:27:00 +0000</pubDate></item><item><title>nexDHD - SG-Craft Stargate Control Program</title><link>https://oc.cil.li/topic/1062-nexdhd-sg-craft-stargate-control-program/</link><description><![CDATA[<p>
	This is my stargate control program for sgcraft called nexDHD <img alt=":)" height="20" src="https://oc.cil.li/applications/core/interface/js/spacer.png" srcset="https://oc.cil.li/uploads/emoticons/smile@2x.png 2x" width="20" data-src="https://oc.cil.li/uploads/emoticons/default_smile.png"><br>
	 <br><img alt="jOFJQuK.gif" src="https://oc.cil.li/applications/core/interface/js/spacer.png" width="700" data-src="https://oc.cil.li/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/jOFJQuK.gif&amp;key=116d62f97266f01be555513fa9244c43cc89c6f4e95a47de410fa62f12a489e8"><br>
	 <br>
	How to get it:<br><a href="https://github.com/Nex4rius/Nex4rius-Programme/blob/master/nexDHD/README.md#english" rel="external nofollow">link to github</a>
</p>

<div class="ipsEmbeddedVideo">
	<div>
		<iframe allowfullscreen="true" frameborder="0" height="344" src="https://oc.cil.li/applications/core/interface/js/spacer.png" width="459" data-embed-src="https://www.youtube.com/embed/MgWY4es5oEs?feature=oembed"></iframe>
	</div>
</div>

<p>
	<br>
	 
</p>

<pre class="ipsCode">
pastebin run -f YVqKFnsP
</pre>

<p>
	 <br>
	Computer requirements:<br>
	- CPU T2<br>
	- GPU T2<br>
	- 12x Screen T2<br>
	- HDD T1 (with OpenOS)<br>
	- 2x Memory T1.5<br>
	- Internet Card - only required for installation and updates<br>
	- keyboard - only required for installation<br>
	- Redstone Card T2 - optional<br>
	- EEPROM (Lua BIOS)<br>
	 <br>
	features of my program:<br>
	- autoclose iris on incoming wormhole (when iriscontrol is turned on)<br>
	- autoopen iris if correct IDC is received (iris deactivation code)<br>
	- autoclose stargate after X seconds<br>
	- show all kinds of stats (local / remote address, state, direction, idc, iris state, energy, ...)<br>
	- multiple languages: right now german, english and russian<br>
	- displays energy in EU or RF<br>
	- displays up to 10 addresses on 1 page (unlimited pages)<br>
	- allows dialing from the address list<br>
	- check for updates on start<br>
	- emit redstone signals (right now for: state not idle, incoming, iris closed, idc accepted, wormhole connected)<br>
	- automatically adds new, unkown addresses when there is an open wormhole<br>
	- shows the required energy to dial an address (or error if invalid address)<br>
	- allows closing of incoming wormholes if its disabled in config AND there is a computer at either end<br>
	- automatically sends and receives entire address list on an open wormhole (without the IDC of course) and automatically adds the new addresses<br>
	- with touchscreen functionalities<br>
	- works with Computronics ColorfulLamps -&gt; red = iris closed, green = idc accepted, yellow = outgoing wormhole, orange = incoming wormhole (priority from left to right)<br>
	- logbook with the last connections
</p>
]]></description><guid isPermaLink="false">1062</guid><pubDate>Sat, 08 Oct 2016 12:02:59 +0000</pubDate></item><item><title>SGCX - SGCraft Stargate Controller</title><link>https://oc.cil.li/topic/1525-sgcx-sgcraft-stargate-controller/</link><description><![CDATA[<p>
	<span style="font-size:24px;">SGCX - SGCraft Stargate Controller</span>
</p>

<p>
	Stargate controller based on <a href="https://github.com/OpenPrograms/Gopher-Programs/wiki/GML" rel="external nofollow">GML</a> library.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">Showcase:</span>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2020_03/s_4.png.7aa97f48f9334efb1a193accd65cb1f8.png" data-fileid="788" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="788" data-ratio="62.30" width="1000" alt="s_4.thumb.png.27e149529aaf26cea5b5334924329f0a.png" data-src="https://oc.cil.li/uploads/monthly_2020_03/s_4.thumb.png.27e149529aaf26cea5b5334924329f0a.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2020_03/s_5.png.fac5695d593fbd64dc359407af1ba499.png" data-fileid="792" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="792" data-ratio="62.00" width="1000" alt="s_5.thumb.png.6ca07369912b9286c9ac9205b05c1ce6.png" data-src="https://oc.cil.li/uploads/monthly_2020_03/s_5.thumb.png.6ca07369912b9286c9ac9205b05c1ce6.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2020_03/s_2.png.3438f0e38c181353bfca59c01f03eef1.png" data-fileid="780" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="780" data-ratio="61.90" width="1000" alt="s_2.thumb.png.adfb641c0204a41f7dc749fb31cdc863.png" data-src="https://oc.cil.li/uploads/monthly_2020_03/s_2.thumb.png.adfb641c0204a41f7dc749fb31cdc863.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://oc.cil.li/uploads/monthly_2020_03/s_3.png.0a9c368a7a036f78edc1b7c096210440.png" data-fileid="784" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="784" data-ratio="62.10" width="1000" alt="s_3.thumb.png.5f556b3913c5f02cd37a69a96a579c7b.png" data-src="https://oc.cil.li/uploads/monthly_2020_03/s_3.thumb.png.5f556b3913c5f02cd37a69a96a579c7b.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:18px;">Installation steps:</span>
</p>

<ol><li>
		<span style="font-size:14px;">First download the package manager that will be used to download the application and all required dependencies:</span>

		<pre class="ipsCode">
wget https://gitlab.com/d_rzepka/oc-equipment/raw/master/installer/arpm.lua</pre>
	</li>
	<li>
		Use the package manager do download SGCX:
		<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">arpm install sgcx</span></pre>

		<p>
			 
		</p>
	</li>
	<li>
		Run SGCX with an additional argument - <em>init</em>. This will allow you to pick a stargate interface address from list. It is required only during the first startup - address will be saved in a configuration file.
		<pre class="ipsCode">
sgcx init</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Optionally you can install the <em>irisAuth </em>package (remote iris management) using the previously mentioned package manager.
	</li>
</ol><p>
	 
</p>

<p>
	<span style="font-size:18px;">Features:</span>
</p>

<ul><li>
		Displaying Stargate status
	</li>
	<li>
		Storing gate addresses
	</li>
	<li>
		Grouping and searching addresses
	</li>
	<li>
		Disconnecting wormhole after specified time
	</li>
	<li>
		Automatic iris control (see installation steps, step 4)
	</li>
	<li>
		Displaying distance to the selected destination
	</li>
	<li>
		Address calculator: convert addresses within one dimension into chunk (and estimated block) coordinates and vice versa
	</li>
	<li>
		Animated dialing sequence with chevron drawings
	</li>
</ul><p>
	<span style="font-size:18px;">Future plans:</span>
</p>

<ul><li>
		Dialing history
	</li>
	<li>
		Iris authorization usage history
	</li>
</ul><p>
	<span style="font-size:18px;">Requirements:</span>
</p>

<ul><li>
		<span style="font-size:14px;">Tier 3 screen and GPU</span>
	</li>
	<li>
		<span style="font-size:14px;">At least 1 MB RAM</span>
	</li>
	<li>
		<span style="font-size:14px;">Network card</span>
	</li>
	<li>
		<span style="font-size:14px;">Keyboard</span>
	</li>
</ul><p>
	 
</p>

<p>
	<span style="font-size:10px;">(<a href="https://gitlab.com/d_rzepka/oc-equipment" rel="external nofollow">GitLab repository</a>)</span>
</p>

<p>
	 
</p>]]></description><guid isPermaLink="false">1525</guid><pubDate>Thu, 28 Dec 2017 19:29:50 +0000</pubDate></item><item><title>Web Server and Browser Program</title><link>https://oc.cil.li/topic/1717-web-server-and-browser-program/</link><description><![CDATA[
<p>
	This program enables you to make servers useful like IRL web servers.
</p>

<p>
	Client Minimum requirements
</p>

<p>
	relay
</p>

<p>
	network card
</p>

<p>
	internet card
</p>

<p>
	apu
</p>

<p>
	Server Minimum Requirements;
</p>

<p>
	Wireless network card 
</p>

<p>
	Configured serverside program
</p>

<p>
	 
</p>

<p>
	Put your paste code in the server program or else it will say Hello.
</p>

<p>
	I did this cause nobody else had and I thought it would be useful
</p>

<p>
	Server paste code: B7b27pc2
</p>

<p>
	Browser paste code: vkL422Sz
</p>

<p>
	I am new to OC and this is my first program
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">1717</guid><pubDate>Fri, 31 Aug 2018 21:56:12 +0000</pubDate></item><item><title>iovoid's Farming Drone</title><link>https://oc.cil.li/topic/2425-iovoids-farming-drone/</link><description><![CDATA[<p>
	Once I wanted to automatically farm using OpenComputers. First I made robot, but 1.7.10's block update stutter made active robot annihilate framerate. Thus I opted for entity-based agent and made code to operate drone for autonomous farming.
</p>

<p>
	And now I decided to release the code for everyone to enjoy my work. Feel free to improve upon it, or use as is.
</p>

<p>
	<strong>Example</strong> setup:
</p>

<p>
	<img alt="example_drone_farming_setup.png.fc8985710e0369e7956aa52c27e7cd49.png" class="ipsImage ipsImage_thumbnailed" data-fileid="944" data-ratio="71.78" style="height:auto;" width="946" data-src="https://oc.cil.li/uploads/monthly_2023_11/example_drone_farming_setup.png.fc8985710e0369e7956aa52c27e7cd49.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></p>

<p>
	<strong>Inventory</strong> of active drone:
</p>

<p>
	<img alt="example_drone_farming_inventory.png.e3bece7ec56bd17faa450d877b873347.png" class="ipsImage ipsImage_thumbnailed" data-fileid="945" data-ratio="46.03" style="height:auto;" width="617" data-src="https://oc.cil.li/uploads/monthly_2023_11/example_drone_farming_inventory.png.e3bece7ec56bd17faa450d877b873347.png" src="https://oc.cil.li/applications/core/interface/js/spacer.png" /></p>

<p>
	Drone minimum <strong>components</strong><span>:</span>
</p>

<ul><li>
		Drone Case (Tier 1)
	</li>
	<li>
		Geolyzer
	</li>
	<li>
		Inventory Upgrade
	</li>
	<li>
		Central Processing Unit (CPU) (Tier 1)
	</li>
	<li>
		Memory (Tier 1)
	</li>
	<li>
		EEPROM with code provided
	</li>
</ul><p>
	<strong>How to setup</strong>:
</p>

<p>
	Drone never changes altitude and operates on single square area that may not be permanently obstructed. You must till farm plot manually. Drones always use global axes for movement, there's no rotation to keep track of. Adjust <strong>localX</strong> and <strong>localZ</strong> variables at start of code to designate dock area, drone must always boot up at dock, on top of charger with my example setup. If drone starts beeping upon bootup, you messed up the setup, drone is unable to locate inventory (or it's full). Drone also will start beeping at dock if output is full, just collect your obscene amount of produce when that occurs. <strong>minX</strong>/<strong>minZ</strong>/<strong>maxX</strong>/<strong>maxZ</strong> similarly define corners of farm plot. On my example setup screenshot player is facing north-west (towards negative X and negative Z), dock is at (15, 15), while most remote corner of farm plot is (0, 0). <strong>no_farm</strong> table contains exceptions where no farming operation should ever occur, using same local coordinate system. <strong>keep_seeds</strong> should allow for few missing plants to be replanted (but drone won't be able to deal with trampled fields automatically due to inability to use tools), you might want higher value if plant you are working with has chance to not drop seeds. <strong>ensure_space</strong> should be set to maximum amount of item types mature plant yields on breaking (2 being value for wheat or potatoes), otherwise you will suffer minor item loss if drone overflows. If two outputs are common (wheat), either use value of 1 or add another inventory upgrade. As I understand Minecraft farming mechanics, monoculture farming would not be faster than farming two plant types at once with plants being in lines. <strong>plant()</strong> contains logic for seed slot selection, adjust if you want to farm more than two types at single plot, but beware inventory constraints of drone and multiple outputs.
</p>

<p>
	<strong>Code</strong>, goes into EEPROM of drone:
</p>

<pre class="ipsCode prettyprint lang-lua prettyprinted">
<span class="kwd">local</span><span class="pln"> d </span><span class="pun">=</span><span class="pln"> component</span><span class="pun">.</span><span class="pln">proxy</span><span class="pun">(</span><span class="pln">component</span><span class="pun">.</span><span class="pln">list</span><span class="pun">(</span><span class="str">"drone"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">)())</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> g </span><span class="pun">=</span><span class="pln"> component</span><span class="pun">.</span><span class="pln">proxy</span><span class="pun">(</span><span class="pln">component</span><span class="pun">.</span><span class="pln">list</span><span class="pun">(</span><span class="str">"geolyzer"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">)())</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> c </span><span class="pun">=</span><span class="pln"> computer

d</span><span class="pun">.</span><span class="pln">setLightColor</span><span class="pun">(</span><span class="lit">0xff00ff</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> no_farm </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">[</span><span class="lit">15</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">[</span><span class="lit">15</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="pun">},</span><span class="pln">
</span><span class="pun">[</span><span class="lit">12</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">12</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="pun">},</span><span class="pln">
</span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">[</span><span class="lit">3</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="lit">12</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="pun">},</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> to_collect </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">[</span><span class="str">"minecraft:potatoes"</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
</span><span class="pun">[</span><span class="str">"minecraft:carrots"</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> seed_slot </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> keep_seeds </span><span class="pun">=</span><span class="pln"> </span><span class="lit">4</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> ensure_space </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> localX </span><span class="pun">=</span><span class="pln"> </span><span class="lit">15</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> localZ </span><span class="pun">=</span><span class="pln"> </span><span class="lit">15</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> minX </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> minZ </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> maxX </span><span class="pun">=</span><span class="pln"> </span><span class="lit">15</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> maxZ </span><span class="pun">=</span><span class="pln"> </span><span class="lit">15</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> inv_side </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
</span><span class="kwd">local</span><span class="pln"> inv_name </span><span class="pun">=</span><span class="pln"> </span><span class="str">"minecraft:chest"</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> startX </span><span class="pun">=</span><span class="pln"> localX
</span><span class="kwd">local</span><span class="pln"> startZ </span><span class="pun">=</span><span class="pln"> localZ

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sleep</span><span class="pun">(</span><span class="pln">sec</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> dl </span><span class="pun">=</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">uptime</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> sec
  </span><span class="kwd">repeat</span><span class="pln">
    c</span><span class="pun">.</span><span class="pln">pullSignal</span><span class="pun">(</span><span class="pln">dl </span><span class="pun">-</span><span class="pln"> computer</span><span class="pun">.</span><span class="pln">uptime</span><span class="pun">())</span><span class="pln">
  </span><span class="kwd">until</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">uptime</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;=</span><span class="pln"> dl
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> attn</span><span class="pun">()</span><span class="pln">
  c</span><span class="pun">.</span><span class="pln">beep</span><span class="pun">(</span><span class="lit">1500</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">)</span><span class="pln">
  c</span><span class="pun">.</span><span class="pln">beep</span><span class="pun">(</span><span class="lit">1700</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">)</span><span class="pln">
  c</span><span class="pun">.</span><span class="pln">beep</span><span class="pun">(</span><span class="lit">1300</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.2</span><span class="pun">)</span><span class="pln">
  sleep</span><span class="pun">(</span><span class="lit">3</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> plant</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> slot </span><span class="pun">=</span><span class="pln"> localX </span><span class="pun">%</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="pln">slot</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
    d</span><span class="pun">.</span><span class="pln">select</span><span class="pun">(</span><span class="pln">slot</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">place</span><span class="pun">(</span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">then</span><span class="pln"> attn</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln">
    attn</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> first_free

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> got_free_slots</span><span class="pun">(</span><span class="pln">wanted</span><span class="pun">,</span><span class="pln"> no_heur</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> found </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> slot </span><span class="pun">=</span><span class="pln"> first_free </span><span class="kwd">or</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">inventorySize</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">do</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="pln">slot</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
      found </span><span class="pun">=</span><span class="pln"> found </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
      first_free </span><span class="pun">=</span><span class="pln"> first_free </span><span class="kwd">or</span><span class="pln"> slot
    </span><span class="kwd">end</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> found </span><span class="pun">&gt;=</span><span class="pln"> wanted </span><span class="kwd">then</span><span class="pln">
      </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pln">
    </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> first_free </span><span class="kwd">and</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> no_heur </span><span class="kwd">then</span><span class="pln">
    first_free </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> got_free_slots</span><span class="pun">(</span><span class="pln">wanted</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> farm</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> found</span><span class="pun">,</span><span class="pln"> desc </span><span class="pun">=</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">detect</span><span class="pun">(</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> found </span><span class="kwd">and</span><span class="pln"> desc </span><span class="pun">==</span><span class="pln"> </span><span class="str">"air"</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
    plant</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">elseif</span><span class="pln"> found </span><span class="kwd">and</span><span class="pln"> desc </span><span class="pun">==</span><span class="pln"> </span><span class="str">"passable"</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
    </span><span class="kwd">local</span><span class="pln"> block </span><span class="pun">=</span><span class="pln"> g</span><span class="pun">.</span><span class="pln">analyze</span><span class="pun">(</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> block </span><span class="pun">~=</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> block</span><span class="pun">.</span><span class="pln">growth </span><span class="pun">~=</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> block</span><span class="pun">.</span><span class="pln">growth </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> to_collect</span><span class="pun">[</span><span class="pln">block</span><span class="pun">.</span><span class="pln">name</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
        d</span><span class="pun">.</span><span class="pln">select</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
        d</span><span class="pun">.</span><span class="pln">swing</span><span class="pun">(</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
        plant</span><span class="pun">()</span><span class="pln">
      </span><span class="kwd">end</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln">
      attn</span><span class="pun">()</span><span class="pln">
    </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln">
    attn</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> put_away_excess</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">while</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="kwd">do</span><span class="pln">
    </span><span class="kwd">local</span><span class="pln"> found</span><span class="pun">,</span><span class="pln"> desc </span><span class="pun">=</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">detect</span><span class="pun">(</span><span class="pln">inv_side</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> found </span><span class="kwd">and</span><span class="pln"> desc </span><span class="pun">==</span><span class="pln"> </span><span class="str">"solid"</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
      </span><span class="kwd">local</span><span class="pln"> block </span><span class="pun">=</span><span class="pln"> g</span><span class="pun">.</span><span class="pln">analyze</span><span class="pun">(</span><span class="pln">inv_side</span><span class="pun">)</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> block </span><span class="pun">~=</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> block</span><span class="pun">.</span><span class="pln">name </span><span class="pun">==</span><span class="pln"> inv_name </span><span class="kwd">then</span><span class="pln"> </span><span class="kwd">break</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
    </span><span class="kwd">end</span><span class="pln">
    attn</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">repeat</span><span class="pln">
    </span><span class="kwd">local</span><span class="pln"> done </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">true</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> slot </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">inventorySize</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">do</span><span class="pln">
      </span><span class="kwd">local</span><span class="pln"> amt </span><span class="pun">=</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">count</span><span class="pun">(</span><span class="pln">slot</span><span class="pun">)</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> amt </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
        d</span><span class="pun">.</span><span class="pln">select</span><span class="pun">(</span><span class="pln">slot</span><span class="pun">)</span><span class="pln">
        </span><span class="kwd">local</span><span class="pln"> to_drop </span><span class="pun">=</span><span class="pln"> math</span><span class="pun">.</span><span class="pln">huge
        </span><span class="kwd">if</span><span class="pln"> seed_slot</span><span class="pun">[</span><span class="pln">slot</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">then</span><span class="pln"> to_drop </span><span class="pun">=</span><span class="pln"> amt </span><span class="pun">-</span><span class="pln"> keep_seeds </span><span class="kwd">end</span><span class="pln">
        </span><span class="kwd">if</span><span class="pln"> to_drop </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">drop</span><span class="pun">(</span><span class="pln">inv_side</span><span class="pun">,</span><span class="pln"> to_drop</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">then</span><span class="pln"> done </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pln"> attn</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">break</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
      </span><span class="kwd">end</span><span class="pln">
    </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">until</span><span class="pln"> done
  first_free </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> vec_len</span><span class="pun">(</span><span class="pln">oX</span><span class="pun">,</span><span class="pln"> oZ</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> math</span><span class="pun">.</span><span class="pln">sqrt</span><span class="pun">(</span><span class="pln">oX</span><span class="pun">*</span><span class="pln">oX </span><span class="pun">+</span><span class="pln"> oZ</span><span class="pun">*</span><span class="pln">oZ</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> move_to</span><span class="pun">(</span><span class="pln">tgtX</span><span class="pun">,</span><span class="pln"> tgtZ</span><span class="pun">,</span><span class="pln"> precise</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> offX </span><span class="pun">=</span><span class="pln"> tgtX </span><span class="pun">-</span><span class="pln"> localX
  </span><span class="kwd">local</span><span class="pln"> offZ </span><span class="pun">=</span><span class="pln"> tgtZ </span><span class="pun">-</span><span class="pln"> localZ
  </span><span class="kwd">if</span><span class="pln"> offX </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> offZ </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">then</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
  d</span><span class="pun">.</span><span class="pln">move</span><span class="pun">(</span><span class="pln">offX</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> offZ</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> moved
  </span><span class="kwd">local</span><span class="pln"> goaldist </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.45</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> goalvel </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> timemult </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> precise </span><span class="kwd">then</span><span class="pln">
    goaldist </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.1</span><span class="pln">
    goalvel </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.1</span><span class="pln">
    timemult </span><span class="pun">=</span><span class="pln"> timemult </span><span class="pun">*</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">local</span><span class="pln"> dl </span><span class="pun">=</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">uptime</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> vec_len</span><span class="pun">(</span><span class="pln">offX</span><span class="pun">,</span><span class="pln"> offZ</span><span class="pun">)</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> timemult
  </span><span class="kwd">repeat</span><span class="pln">
    moved </span><span class="pun">=</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">getOffset</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> goaldist </span><span class="kwd">and</span><span class="pln"> d</span><span class="pun">.</span><span class="pln">getVelocity</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&lt;=</span><span class="pln"> goalvel
    </span><span class="kwd">if</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">uptime</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;=</span><span class="pln"> dl </span><span class="kwd">then</span><span class="pln"> </span><span class="kwd">break</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">until</span><span class="pln"> moved
  </span><span class="kwd">if</span><span class="pln"> moved </span><span class="kwd">then</span><span class="pln">
    localX </span><span class="pun">=</span><span class="pln"> localX </span><span class="pun">+</span><span class="pln"> offX
    localZ </span><span class="pun">=</span><span class="pln"> localZ </span><span class="pun">+</span><span class="pln"> offZ
  </span><span class="kwd">else</span><span class="pln">
    d</span><span class="pun">.</span><span class="pln">move</span><span class="pun">(-</span><span class="pln">offX</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="pun">-</span><span class="pln">offZ</span><span class="pun">)</span><span class="pln">
    attn</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> workX </span><span class="pun">=</span><span class="pln"> startX
</span><span class="kwd">local</span><span class="pln"> workZ </span><span class="pun">=</span><span class="pln"> startZ

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> next_spot</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> workX </span><span class="pun">&lt;</span><span class="pln"> maxX </span><span class="kwd">then</span><span class="pln">
    workX </span><span class="pun">=</span><span class="pln"> workX </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
  </span><span class="kwd">else</span><span class="pln">
    workX </span><span class="pun">=</span><span class="pln"> minX
    </span><span class="kwd">if</span><span class="pln"> workZ </span><span class="pun">&lt;</span><span class="pln"> maxZ </span><span class="kwd">then</span><span class="pln">
      workZ </span><span class="pun">=</span><span class="pln"> workZ </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pln">
    </span><span class="kwd">else</span><span class="pln">
      workZ </span><span class="pun">=</span><span class="pln"> minZ
    </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> no_farm</span><span class="pun">[</span><span class="pln">workX</span><span class="pun">]</span><span class="pln"> </span><span class="pun">~=</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> no_farm</span><span class="pun">[</span><span class="pln">workX</span><span class="pun">][</span><span class="pln">workZ</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">then</span><span class="pln">
    next_spot</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">end</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> workX</span><span class="pun">,</span><span class="pln"> workZ
</span><span class="kwd">end</span><span class="pln">

</span><span class="kwd">local</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> dock</span><span class="pun">(</span><span class="pln">optional</span><span class="pun">)</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> optional </span><span class="kwd">and</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">energy</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">500</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> got_free_slots</span><span class="pun">(</span><span class="pln">ensure_space</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">then</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
  move_to</span><span class="pun">(</span><span class="pln">startX</span><span class="pun">,</span><span class="pln"> startZ</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
  put_away_excess</span><span class="pun">()</span><span class="pln">
  </span><span class="kwd">while</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">energy</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&lt;</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">maxEnergy</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">500</span><span class="pln"> </span><span class="kwd">do</span><span class="pln"> sleep</span><span class="pun">(</span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">end</span><span class="pln">
</span><span class="kwd">end</span><span class="pln">

dock</span><span class="pun">(</span><span class="kwd">false</span><span class="pun">)</span><span class="pln">

</span><span class="kwd">while</span><span class="pln"> </span><span class="kwd">true</span><span class="pln"> </span><span class="kwd">do</span><span class="pln">
  dock</span><span class="pun">(</span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
  move_to</span><span class="pun">(</span><span class="pln">next_spot</span><span class="pun">())</span><span class="pln">
  farm</span><span class="pun">()</span><span class="pln">
</span><span class="kwd">end</span></pre>

<p>
	<strong>License</strong> terms for my code:
</p>

<pre class="ipsCode">
This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to &lt;https://unlicense.org/&gt;</pre>

<p>
	<strong>Ideas</strong> for improvement:
</p>

<ul><li>
		More robust detection of drone actually being at new position without slowing down operation. I've been adjusting <strong>goaldist</strong> and <strong>goalvel</strong> until drone stopped failing <strong>farm()</strong>, with no strong theory for what should be ideal values;
	</li>
	<li>
		Change scanlines pattern into zig-zag pattern for minor increase in farming speed;
	</li>
	<li>
		Have companion robot craft away wheat and similar things into cubes and/or fix trampled field;
	</li>
	<li>
		Handling of plants not exposing "growth" to geolyzer, like Immersive Engineering's hemp;
	</li>
	<li>
		Handling of multi-tile plants, like said hemp;
	</li>
	<li>
		Rotating between many plant types with just few being planted at given time;
	</li>
	<li>
		Melon and pumpkin farming (will likely release drone for that soon, as I already got stutter-inducing robot doing this).
	</li>
</ul>]]></description><guid isPermaLink="false">2425</guid><pubDate>Wed, 29 Nov 2023 00:44:20 +0000</pubDate></item><item><title>Warehouse System with auto sorting, item retrieval and packing, and more.</title><link>https://oc.cil.li/topic/2353-warehouse-system-with-auto-sorting-item-retrieval-and-packing-and-more/</link><description><![CDATA[<p>
	Hello, it's me again, Cade. Y'know, the guy who's pretty much filled up the activity history list on the home page... yeah I'm back.
</p>

<p>
	 
</p>

<p>
	I'm working on a Warehouse system for Open Computers. This is what I'm planning on having:
</p>

<p>
	 
</p>

<ul><li>
		Robots which do the work of grabbing items, sorting them, and packaging them in shulker boxes (if requested)
	</li>
	<li>
		A* Pathfinding with preferences (a robot is more likely to go above a block than go around it due to less steps)
	</li>
	<li>
		Collision detection (Robot in the way, request a repath)
	</li>
	<li>
		Possible integration with OpenSecurity Rolldoors (Place checkpoints inside the warehouse that the robots can request to be opened. Good for exits from the main warehouse area.)
	</li>
	<li>
		Auto-assortment into necessary bins (Certain chests will be associated with a type of item only, or if you need it, make them go into the miscellaneous area.
	</li>
	<li>
		Shulker box packages (put all requested items in a shulker to be outputted)
	</li>
	<li>
		Stock takes (Count items in the entire warehouse)
	</li>
	<li>
		I might add a store system so you can have people pay you for items.
	</li>
	<li>
		And more!
	</li>
</ul><p>
	I'll post updates here when I start getting progress in, but at the moment, there is not really anything that is done. I did make an A* pathfinding script that works with the robot, which I might make a video about. Well, fun times ahead, wish you all adieu <span><span><span><img alt=":P" data-emoticon="" height="20" src="https://oc.cil.li/uploads/emoticons/default_tongue.png" srcset="https://oc.cil.li/uploads/emoticons/tongue@2x.png 2x" title=":P" width="20" /></span></span></span>
</p>]]></description><guid isPermaLink="false">2353</guid><pubDate>Fri, 23 Sep 2022 19:19:57 +0000</pubDate></item><item><title><![CDATA[To do list with subitems, touch & keyboard controls, help screen, scrolling, color support, and that works on low end computers*]]></title><link>https://oc.cil.li/topic/2415-to-do-list-with-subitems-touch-keyboard-controls-help-screen-scrolling-color-support-and-that-works-on-low-end-computers/</link><description><![CDATA[<p>
	*By low end I mean tier 1 with OpenOS and 2 sticks of tier 1 memory installed.
</p>

<p>
	<strong>OpenOS is a required dependency.</strong>
</p>

<p>
	I created this for personal use in a Project Ozone 3 playthrough with a friend, and it's been working out so far. Willing to take feature suggestions and feedback.
</p>

<p>
	<s>I'm currently in the process of publishing it as a package for OPPM.</s>
</p>

<p>
	This is currently published as "todo" on this <a href="https://github.com/wqferr/OpenComputersPackages" rel="external nofollow">GitHub repository</a>.
</p>

<p>
	<a class="ipsAttachLink" data-fileext="lua" data-fileid="939" href="https://oc.cil.li/applications/core/interface/file/attachment.php?id=939" rel="">todo.lua</a>
</p>]]></description><guid isPermaLink="false">2415</guid><pubDate>Fri, 20 Oct 2023 19:39:19 +0000</pubDate></item></channel></rss>
