Skip to content

Instantly share code, notes, and snippets.

tomj@Marvin ~/factorio/factorio-tools/factoriocalc (master●●)$ ./factoriocalc -verbose -gamedir=/Users/tomj/factorio/0.17/factorio.0.17.app/Contents -moddir=/Users/tomj/factorio/0.17/mod-vanilla [ruby-2.3.7p456]
data loaded
hack icon: electric-energy-interface
hack icon: infinity-pipe
no localized name for mining-tool named dummy-steel-axe
recipe skip: empty-lubricant-barrel because of icon
recipe skip: empty-lubricant-barrel because of icon
main product does not exist: fill-water-barrel
recipe skip: fill-water-barrel because of icon
main product does not exist: fill-water-barrel

I have been using /editor almost exclusively for the last couple of months, and I love it. In my view it's the hidden gem of 0.17, and absolutely fantastic for any kind of advanced testing.

I have been making mental notes of a few additional features I would love to see - many based around usability. Given the recent discussions spawned by Raiguard's new Infinity Mod, and RSeding asking for suggestions for Map Editor, I thought now would be a good time to post them.

Usability improvements:

Additional Map Editor Hotkeys:

  • Toggle Map Editor - a key that has the same effect as typing /editor in Console, either displaying or hiding the Map Editor UI. I would literally press this 50 times a day at the moment.
  • Per-Tab hotkeys: The ability to define a hotkey for: None, Decoratives, Entities, Forces, etc. Only take effect when Map Editor is open. I would use something like Control-Shift-1, Control-Shift-2, etc.
  • Game Speed increment/decrement - same as clicking the < and > icons in Time.

Following from the discussions about Map Editor, the new Infinity Mode mod, etc, I have been thinking about what new 'infinity' entities would be most useful.

Ideas like an infinity wagon could have their uses. However in my view there is one entity which would surpass those in usefulness, and would be a major boon to individual design testing:

Add a circuit signal trigger to the Infinity Chest

Modify the existing Infinity Chest such that it can accept a circuit signal which, when received, triggers its "refresh" action.

When so configured, the infinity chest would not automatically refresh/remove its contents every tick, but only when the specified signal is received.

tomj@H77-Mojave ~/Hack/ssdtPRGen.sh (Beta)$ ./ssdtPRGen.sh
ssdtPRGen.sh v0.9 Copyright (c) 2011-2012 by † RevoGirl
v6.6 Copyright (c) 2013 by † Jeroen
v21.5 Copyright (c) 2013-2019 by Pike R. Alpha
-----------------------------------------------------------
Bugs > https://github.com/Piker-Alpha/ssdtPRGen.sh/issues <
System information: Mac OS X 10.14.6 (18G95)
Brandstring: "Intel(R) Core(TM) i5-3550 CPU @ 3.30GHz"
This file has been truncated, but you can view the full file.
2019-10-24 20:19:08.515797+0100 localhost appstoreagent[449]: (AppleMediaServices) <AppleMediaServices`-[AMSMetrics _handleFlushIntervalWithStyle:]> [com.apple.AppleMediaServices:general] AMSMetrics: [2DA1A850] Scheduled flush fired
2019-10-24 20:19:08.516033+0100 localhost appstoreagent[449]: (AppleMediaServices) <AppleMediaServices`__37-[AMSMetrics _flushDataSource:topic:]_block_invoke_2> [com.apple.AppleMediaServices:general] AMSMetrics: [2DA1A850] Flushing events for container: com.apple.AppleMediaServices
2019-10-24 20:19:08.516154+0100 localhost appstoreagent[449]: (AppleMediaServices) <AppleMediaServices`__32-[AMSTask performTaskWithBlock:]_block_invoke.38> [com.apple.AppleMediaServices:general] AMSMetricsFigaroFlushTask: [2DA1A850] Starting
2019-10-24 20:19:08.527239+0100 localhost appstoreagent[449]: (AppleMediaServices) <AppleMediaServices`__32-[AMSTask performTaskWithBlock:]_block_invoke.38> [com.apple.AppleMediaServices:general] AMSMetricsFigaroFlushTask: [2DA1A850] Finished
2019-10-24 20:19:0
2019-10-25 11:34:14.550795+0100 localhost kernel[0]: (IOAcceleratorFamily2) void IOAccelFenceMachine::fence_timeout(IOTimerEventSource *): AMDRadeonAccelerator prodding blockFenceInterrupt
2019-10-25 11:34:14.651755+0100 localhost kernel[0]: (IOAcceleratorFamily2) void IOAccelFenceMachine::fence_timeout(IOTimerEventSource *): AMDRadeonAccelerator prodding blockFenceInterrupt
2019-10-25 11:34:14.752731+0100 localhost kernel[0]: (IOAcceleratorFamily2) void IOAccelFenceMachine::fence_timeout(IOTimerEventSource *): AMDRadeonAccelerator prodding blockFenceInterrupt
2019-10-25 11:34:14.853659+0100 localhost kernel[0]: (IOAcceleratorFamily2) void IOAccelFenceMachine::fence_timeout(IOTimerEventSource *): AMDRadeonAccelerator prodding blockFenceInterrupt
2019-10-25 11:34:14.953729+0100 localhost kernel[0]: (IOAcceleratorFamily2) void IOAccelFenceMachine::fence_timeout(IOTimerEventSource *): AMDRadeonAccelerator prodding blockFenceInterrupt
2019-10-25 11:34:15.053807+0100 localhost kernel[0]: (IOAcceleratorFamily
exec function zoltan()
{
var template : CEntityTemplate;
var zolt : CNewNPC;
var pos : Vector;
pos = thePlayer.GetWorldPosition() + Vector( 2.5f, 0.0f, 0.0f, 0.0f );
template = (CEntityTemplate)LoadResource('zoltan');
zolt = (CNewNPC)theGame.CreateEntity(template, pos, thePlayer.GetWorldRotation());
/Library/OFX/Plugins/Red Giant Universe/Universe_Blur_Blur_Premium_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_Blur_Compound_Blur_Premium_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_Blur_Spot_Blur_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_CrumplePop_Finisher_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_CrumplePop_Fisheye_Fixer_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_CrumplePop_Grain16_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_CrumplePop_OverLight_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_CrumplePop_ShrinkRay_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_Distort_Camera_Shake_Pro_OFX_Fx.ofx.bundle
/Library/OFX/Plugins/Red Giant Universe/Universe_Distort_Chromatic_Aberration_OFX_Fx.ofx.bundle
{
Tools = ordered() {
Renderer3D1 = Renderer3D {
CustomData = {
ToolVersion = 2,
},
Inputs = {
["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
{
Tools = ordered() {
Transform1_1 = Transform {
CtrlWZoom = false,
Inputs = {
Size = Input { Value = 0.5, },
Aspect = Input { Value = 0.5, },
Edges = Input { Value = 3, },
Input = Input {
SourceOp = "TransformMirror",