Compare commits

..

131 Commits

Author SHA1 Message Date
minjaesong
aa2172b396 forgot to remove snapshot info 2024-03-28 00:46:40 +09:00
minjaesong
f3e2fa8441 Alpha 1.2 release candidate 2024-03-28 00:43:18 +09:00
minjaesong
a3d132d26c itemdesc change for solder wire 2024-03-27 23:47:42 +09:00
minjaesong
a4afb0bfe9 item autoreload is restricted to tools only 2024-03-24 03:55:06 +09:00
minjaesong
67092d4ab9 alloy yield doubled; turntable now requires brass for crafting 2024-03-23 23:47:20 +09:00
minjaesong
07680592d2 fix: text pos for sign preview wouldnt match the text on the fixture 2024-03-22 23:14:57 +09:00
minjaesong
844ec6bd4f recipe for engraving workbench 2024-03-22 22:27:47 +09:00
minjaesong
c87bd182b0 fix: text cursor darting around everywhere 2024-03-22 22:15:27 +09:00
minjaesong
6d2764933f better element positioning 2024-03-22 21:49:51 +09:00
minjaesong
d4672df208 sign engraver ui 2024-03-22 21:37:56 +09:00
minjaesong
4d1ea45a0f sign engraver wip 3 2024-03-22 21:15:39 +09:00
minjaesong
8e1c586a5c sign engraver wip 2 2024-03-22 20:52:19 +09:00
minjaesong
7690d3d672 sign engraver wip 2024-03-22 18:34:34 +09:00
minjaesong
8e8c206e3a engraver sprite 2024-03-22 04:16:08 +09:00
minjaesong
d35a73c7a5 signs persisting through load/save 2024-03-21 20:57:12 +09:00
minjaesong
ec76eb2685 THE cheapest way to resolve right-sided phys bug 2024-03-21 14:25:41 +09:00
minjaesong
a1a6dc5801 more sign stuffs 2024-03-21 00:42:34 +09:00
minjaesong
708dccb015 working sign 2024-03-20 22:32:09 +09:00
minjaesong
4e739963d3 copper sign actually spawns but still wip 2024-03-20 14:44:26 +09:00
minjaesong
8bf3d9666f test copper sign and it has no sprite 2024-03-20 03:33:24 +09:00
minjaesong
b856574d20 fix: multimeter's block cursor would break fixture ghost 2024-03-19 04:55:37 +09:00
minjaesong
f696a54d2d text sign wip 2 2024-03-18 03:46:15 +09:00
minjaesong
ca766719d3 text sign wip 2024-03-18 01:01:11 +09:00
minjaesong
d027ff7d7e toned down label colour 2024-03-17 23:35:38 +09:00
minjaesong
2785a67823 fix: item desc 2024-03-17 20:26:12 +09:00
minjaesong
33671d6e52 labels for inventory side buttons 2024-03-17 19:51:40 +09:00
minjaesong
7bfff29a79 seven seg display 2024-03-17 18:01:27 +09:00
minjaesong
aef1db49d6 animated trajectory 2024-03-17 17:20:49 +09:00
minjaesong
09e5b175b8 alloying furnace gui minor changes 2024-03-16 05:12:14 +09:00
minjaesong
37b4fa1e7b forgot to update itemsprites 2024-03-15 23:22:29 +09:00
minjaesong
d63be072cc better colourblind-friendly wires 2024-03-15 23:15:54 +09:00
minjaesong
d22f421bc4 wire debugger tooltip fix/electronic components now need floor OR wall to spawn 2024-03-15 22:44:46 +09:00
minjaesong
cb756cbf3a fix: non-ensapsulated CraftingUI would not pause the game 2024-03-15 02:32:14 +09:00
minjaesong
b24a3da2ed colour changing wire cutter 2024-03-15 02:26:42 +09:00
minjaesong
b0adc9efc7 Lang: get-from-config tags 2024-03-15 01:45:35 +09:00
minjaesong
c0a8118717 variable wire cutter uisng right click (no sprite change yet) 2024-03-14 21:14:30 +09:00
minjaesong
336dfad207 five-coloured wiring 2024-03-14 05:29:03 +09:00
minjaesong
ef7199fd8b electric workbench 2024-03-14 02:49:00 +09:00
minjaesong
3481502c1a sprite for electric workbench 2024-03-14 02:12:55 +09:00
minjaesong
5b462a2559 wire colour fade by signal strength 2024-03-14 00:18:25 +09:00
minjaesong
6abb6f84ef fourth purple wire because four-colour theorem 2024-03-13 23:45:10 +09:00
minjaesong
2abc8b19b9 wire signal loss sim wip 2024-03-13 17:00:28 +09:00
minjaesong
7c2b5468bd smelter ui changes; longer music interval 2024-03-13 04:54:59 +09:00
minjaesong
c829245b41 some changes 2024-03-11 23:59:21 +09:00
minjaesong
b05ae829cc tapestry now persists after load 2024-03-11 23:54:02 +09:00
minjaesong
8aa866f040 fix: actor tooltip was repeatedly showing and hiding itself 2024-03-11 22:28:19 +09:00
minjaesong
5a18ba4b06 torch sprites to the spritesheet 2024-03-11 17:25:39 +09:00
minjaesong
707abe8c6d devcycle-based version name (alpha, beta thing) 2024-03-11 02:44:05 +09:00
minjaesong
60eeeae759 soldering wire 2024-03-11 01:57:36 +09:00
minjaesong
ef2413f33d alloying furnace gui 2024-03-10 22:05:45 +09:00
minjaesong
2943f4119c signal adder 2024-03-10 19:44:16 +09:00
minjaesong
a298d6663b alloying furnace gui wip 2024-03-10 01:36:52 +09:00
minjaesong
fa49874971 minor edit 2024-03-10 00:47:06 +09:00
minjaesong
247cf9bd33 using 'smelting dictionary' for smelter recipes 2024-03-10 00:46:46 +09:00
minjaesong
c6999e0794 more codes 2024-03-09 18:19:15 +09:00
minjaesong
877d26667b smelter gui behav is now a factory 2024-03-09 17:03:03 +09:00
minjaesong
3e81b80bb1 assets for alloying furnace 2024-03-09 02:52:08 +09:00
minjaesong
47c82aba49 fix: untranslated strings are shown as 'null' on bgBG 2024-03-08 15:01:19 +09:00
minjaesong
c627096503 wrench 2024-03-08 04:15:07 +09:00
minjaesong
9994235342 signal repeater 2024-03-08 00:52:02 +09:00
minjaesong
bfaa50aea4 wire ports view 2024-03-07 23:46:30 +09:00
minjaesong
0d09a21028 logic component recipes and strings 2024-03-07 02:13:58 +09:00
minjaesong
d480a735a0 worldsimulator moved to modulebasegame package 2024-03-07 01:06:53 +09:00
minjaesong
2340cb7419 some random shits 2024-03-06 03:30:50 +09:00
minjaesong
dbff2610ac fix: emissive blocks were not tiled correctly 2024-03-06 02:35:28 +09:00
minjaesong
9f399b8722 fix: lightmap draw was off by half block 2024-03-06 02:13:49 +09:00
minjaesong
9a6f45756b fix: fixture pickup was only working sparingly 2024-03-06 01:43:45 +09:00
minjaesong
bbbc5e22a5 FixtureInteractionBlocked on blocks, walls and wires 2024-03-06 00:59:54 +09:00
minjaesong
8d3d6242d7 successfully altered the control scheme 2024-03-06 00:46:21 +09:00
minjaesong
3182843a48 fixture clicking action is now integrated into the FixtureBase 2024-03-05 23:59:32 +09:00
minjaesong
1dcdd8867a adjusting position of the noticelet 2024-03-05 22:11:49 +09:00
minjaesong
a3bf1ed3f6 d flipflop with full sprite 2024-03-05 21:20:51 +09:00
minjaesong
10f8e4a662 d flipflop wip 2024-03-05 18:51:50 +09:00
minjaesong
bb1a45db27 fix: placing a switch also flips it up as soon as it's been placed 2024-03-05 05:50:20 +09:00
minjaesong
5b5534bcb9 LR click behav change/mouse clicks were sticky and causes unwanted behaviour on some fixture UIs 2024-03-05 05:21:17 +09:00
minjaesong
0090cc7d40 removing wall requirements to the circuit components for convenience 2024-03-05 02:10:13 +09:00
minjaesong
5014381cbd what a stupid typo 2024-03-04 22:49:44 +09:00
minjaesong
caf238d6df logic gate actually blinking sprites 2024-03-04 21:39:21 +09:00
minjaesong
4602cb5bc1 propagation delay is now consistent; cosmetic wip 2024-03-04 19:07:25 +09:00
minjaesong
1c39036cc8 signal blocker spritesheet 2024-03-04 16:04:01 +09:00
minjaesong
6c224c79bf wires are simulated every tick 2024-03-04 05:28:42 +09:00
minjaesong
88c9bc4a27 working logic circuit except for the sprite 2024-03-04 05:02:44 +09:00
minjaesong
659976b880 signal blocker wip 2024-03-04 02:39:03 +09:00
minjaesong
3959de68b1 switch glow sprite 2024-03-03 21:18:23 +09:00
minjaesong
fbe887b039 0.4.1 release 2024-03-03 17:53:35 +09:00
minjaesong
91798436cb new fixture: table 2024-03-03 17:06:10 +09:00
minjaesong
34415f720d hiding the crafting guide again 2024-03-03 14:04:01 +09:00
minjaesong
33b739f34f fix typo in crafting recipe 2024-03-03 12:32:02 +09:00
minjaesong
f3825c0bfb itemdesc for wire rolling mill 2024-03-03 03:35:23 +09:00
minjaesong
84f1c48159 did i fix the crafting-unequip bug? 2024-03-03 03:20:42 +09:00
minjaesong
514a972bcf fix: savegame playtime was calculated wrongly 2024-03-03 03:15:35 +09:00
minjaesong
f19a27065e this should track the total playtime better? 2024-03-03 02:56:43 +09:00
minjaesong
324128e86a using gpu render for savegame list wipeout eff 2024-03-03 02:47:55 +09:00
minjaesong
39fca59ea7 larger tree takes double time to chop down 2024-03-03 02:11:18 +09:00
minjaesong
f07a6f6430 scaffoldings recipe change 2024-03-02 19:41:00 +09:00
minjaesong
6c5ee14402 platforms are lighter in weight 2024-03-02 18:24:58 +09:00
minjaesong
ec7ff3199d fix: techtree button not working if craftingUI is loaded independently 2024-03-02 17:16:02 +09:00
minjaesong
f400a5afe7 multicolour storage chests 2024-03-02 03:03:31 +09:00
minjaesong
ea1702ace4 wire rolling mill 2024-03-02 02:42:31 +09:00
minjaesong
01b5569169 bulb now requires walls to spawn 2024-03-02 01:11:02 +09:00
minjaesong
374cd5d4f7 changing recipe of gunpowder 2024-03-02 00:38:30 +09:00
minjaesong
c0cf9ab17d changing recipe of gunpowder 2024-03-02 00:34:01 +09:00
minjaesong
db0d3379cc trajectory to draw at the world edge 2024-03-02 00:09:57 +09:00
minjaesong
42e7da2a4a copper ingot sprite colour adjustment 2024-03-01 23:56:16 +09:00
minjaesong
30caac283a fix: torches can be placed anywhere 2024-03-01 22:15:39 +09:00
minjaesong
5da4cee22e tools now cost 5 bars 2024-03-01 19:16:48 +09:00
minjaesong
ddfa2f5bf0 fix: zooming would not properly center the cam if streamers mode is on (2) 2024-03-01 18:21:22 +09:00
minjaesong
7d38ba866c fix: zooming would not properly center the cam if streamers mode is on 2024-03-01 18:14:12 +09:00
minjaesong
a773786c9e changed iron ore distribution 2024-03-01 16:14:03 +09:00
minjaesong
43e16bf785 copper bulbs 2024-03-01 15:29:11 +09:00
minjaesong
7906de1711 fix: two clashing signal switches confusing the wire sim 2024-03-01 03:17:16 +09:00
minjaesong
6c3ec20b3d signal switches 2024-03-01 03:05:55 +09:00
minjaesong
902a086a4f better trajectory view 2024-02-29 14:22:16 +09:00
minjaesong
91bf11a3e0 better trajectory sim 2024-02-29 13:41:14 +09:00
minjaesong
410456e173 aim helper wip 2024-02-29 00:57:57 +09:00
minjaesong
9caf2a0d7e hopefully fixed a bug where crafting item sometimes enequips an item in the quickslot? 2024-02-23 04:48:54 +09:00
minjaesong
9525441dc0 a debug print 2024-02-21 21:47:35 +09:00
minjaesong
f7b0dfb5bb fix: getFreeTrack() would return a track it just returned when the timing coincides 2024-02-21 21:43:55 +09:00
minjaesong
549c03c2b4 fianlly found the culprit of repeated audio stopping but have no idea how to fix 2024-02-21 16:53:51 +09:00
minjaesong
91c5105a12 trying to fix glitchy audio after load 2024-02-21 14:06:49 +09:00
minjaesong
063483cfda inventory encumberment now takes player scale into account 2024-02-20 15:49:11 +09:00
minjaesong
a5953b8c87 more informative 'update available' ticker 2024-02-20 04:35:07 +09:00
minjaesong
c568276df6 fix deepstones had density of 24600 instead of 2400 2024-02-20 01:30:45 +09:00
minjaesong
19405b7f8d fix: acorn were 10 kilos each 2024-02-20 01:28:43 +09:00
minjaesong
2e89dcc73a more attempts 2024-02-19 21:11:34 +09:00
minjaesong
d3fe2e2bc6 trying to debug why fullscreen is borked on macOS 2024-02-19 21:04:37 +09:00
minjaesong
5c18e03bad apparently longer sleep time doesn't hurt 2024-02-19 16:31:03 +09:00
minjaesong
11a7a1f48d slightly improved audio processing performance by giving some time to the CPU 2024-02-19 16:07:34 +09:00
minjaesong
d24ec8296f fix: paste from clipboard would crash the game if the clipboard is empty 2024-02-19 14:52:31 +09:00
minjaesong
2c1727e495 fix: config change of chat overlay would not be reflected to GUI variables 2024-02-19 03:16:50 +09:00
minjaesong
b9e7a4ba84 gems item sprite change 2024-02-19 03:16:16 +09:00
230 changed files with 7034 additions and 1877 deletions

View File

@@ -10,7 +10,6 @@
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Build Version Number" run_configuration_type="Application" />
<option name="BuildArtifacts" enabled="true">
<artifact name="ModuleComputers" />
<artifact name="MusicPlayer" />
<artifact name="TerrarumBuild" />
</option>
<option name="RunConfigurationTask" enabled="true" run_configuration_name="QuickDirtyLint" run_configuration_type="Application" />

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -3,11 +3,11 @@
"1";"N/A";"N/A";"BLOCK_UPDATE";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1";"AIIR";"0";"1";"N/A";"0";"0";"4";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"INTERNAL,NORANDTILE"
# rocks
"16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK"
"17";"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK"
"16";"17";"17";"BLOCK_STONE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK,BRICKROCK"
"17";"17";"17";"BLOCK_STONE_QUARRIED";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURAL,OREBEARING,SHALLOWROCK,BRICKROCK"
"18";"18";"18";"BLOCK_STONE_TILE_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.18";"STONE,NORANDTILE"
"19";"19";"19";"BLOCK_STONE_BRICKS";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"STONE,NORANDTILE"
"20";"20";"20";"BLOCK_STONE_DEEP";"0.1252";"0.1252";"0.1252";"0.1252";"80";"24600";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURA,OREBEARING,DEEPROCK"
"20";"20";"20";"BLOCK_STONE_DEEP";"0.1252";"0.1252";"0.1252";"0.1252";"80";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"ROCK,NATURA,OREBEARING,DEEPROCK,BRICKROCK"
"21";"21";"21";"BLOCK_STONE_MARBLE";"0.1252";"0.1252";"0.1252";"0.1252";"48";"2400";"ROCK";"1";"1";"N/A";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.1";"ROCK,NATURAL,DEEPROCK"
# dirts
@@ -41,12 +41,12 @@
"75";"item@basegame:171";"item@basegame:171";"BLOCK_TRUNK_ROSEWOOD";"0.0312";"0.0312";"0.0312";"0.0312";"17";"900";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"TREE,TREETRUNK,TREELARGE,NATURAL"
# sabulous
"80";"80";"80";"BLOCK_SAND";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM"
"81";"81";"81";"BLOCK_SAND_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM"
"82";"82";"82";"BLOCK_SAND_RED";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM"
"83";"83";"83";"BLOCK_SAND_DESERT";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM"
"84";"84";"84";"BLOCK_SAND_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM"
"85";"85";"85";"BLOCK_SAND_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM"
"80";"80";"80";"BLOCK_SAND";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM,SMELTABLE"
"81";"81";"81";"BLOCK_SAND_WHITE";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM,SMELTABLE"
"82";"82";"82";"BLOCK_SAND_RED";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM,SMELTABLE"
"83";"83";"83";"BLOCK_SAND_DESERT";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM,SMELTABLE"
"84";"84";"84";"BLOCK_SAND_BLACK";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM,SMELTABLE"
"85";"85";"85";"BLOCK_SAND_GREEN";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1600";"SAND";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"SAND,NATURAL,WARM,SMELTABLE"
"96";"96";"96";"BLOCK_GRAVEL";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1700";"GRVL";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"GRAVEL,NATURAL"
"97";"97";"97";"BLOCK_GRAVEL_GREY";"0.1252";"0.1252";"0.1252";"0.1252";"12";"1700";"GRVL";"1";"0";"0";"0";"4";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"GRAVEL,NATURAL"
@@ -67,7 +67,7 @@
"149";"149";"149";"BLOCK_GLASS_CLEAN";"0.0424";"0.0424";"0.0424";"0.0636";"5";"2203";"GLAS";"1";"1";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"GLASS,NORANDTILE"
# platforms
"160";"160";"160";"BLOCK_PLATFORM_STONE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"2400";"ROCK";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM"
"160";"160";"160";"BLOCK_PLATFORM_STONE";"0.0312";"0.0312";"0.0312";"0.0312";"5";"2400";"ROCK";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM,"
"161";"161";"161";"BLOCK_PLATFORM_WOODEN";"0.0312";"0.0312";"0.0312";"0.0312";"5";"740";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM,WOODEN"
"162";"162";"162";"BLOCK_PLATFORM_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"5";"1200";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM,WOODEN"
"163";"163";"163";"BLOCK_PLATFORM_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"5";"670";"WOOD";"0";"0";"N/A";"0";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"PLATFORM,WOODEN"
@@ -125,10 +125,10 @@
"258";"258";"258";"BLOCK_DAYLIGHT_CAPACITOR";"0.1252";"0.1252";"0.1252";"0.1252";"1";"2500";"GLAS";"1";"0";"N/A";"3";"0";"16";"0.0000";"0.0000";"0.0000";"0.0000";"N/A";"N/A";"0.0";"LIGHT,NORANDTILE"
# more platforms
"272";"272";"272";"BLOCK_SCAFFOLDING_NORMAL";"0.0312";"0.0312";"0.0312";"0.0312";"1";"740";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,NORANDTILE,WOODEN"
"273";"273";"273";"BLOCK_SCAFFOLDING_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1400";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,NORANDTILE,WOODEN"
"274";"274";"274";"BLOCK_SCAFFOLDING_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"670";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,NORANDTILE,WOODEN"
"275";"275";"275";"BLOCK_SCAFFOLDING_ROSEWOOD";"0.0312";"0.0312";"0.0312";"0.0312";"1";"900";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,NORANDTILE,WOODEN"
"272";"272";"272";"BLOCK_SCAFFOLDING_NORMAL";"0.0312";"0.0312";"0.0312";"0.0312";"1";"740";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,SCAFFOLDING,NORANDTILE,WOODEN"
"273";"273";"273";"BLOCK_SCAFFOLDING_EBONY";"0.0312";"0.0312";"0.0312";"0.0312";"1";"1400";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,SCAFFOLDING,NORANDTILE,WOODEN"
"274";"274";"274";"BLOCK_SCAFFOLDING_BIRCH";"0.0312";"0.0312";"0.0312";"0.0312";"1";"670";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,SCAFFOLDING,NORANDTILE,WOODEN"
"275";"275";"275";"BLOCK_SCAFFOLDING_ROSEWOOD";"0.0312";"0.0312";"0.0312";"0.0312";"1";"900";"WOOD";"0";"0";"6";"0";"0";"16";"0.0";"0.0";"0.0";"0.0";"N/A";"N/A";"0.0";"PLATFORM,SCAFFOLDING,NORANDTILE,WOODEN"
# for future use
"288";"288";"288";"BLOCK_PLASTIC_WHITE"; "0.0903";"0.0903";"0.0903";"0.1752";"36";"660";"PLST";"1";"1";"N/A";"0";"0";"16";"0";"0";"0";"0";"N/A";"N/A";"0.06";"THERMOPLASTIC,NORANDTILE"
Can't render this file because it contains an unexpected character in line 18 and column 2.

View File

@@ -10,11 +10,13 @@ GetAV
GetFaction
GetLocale
GetTime
HasItem
ImportLayerData
ImportWorld
Inventory
KillActor
LangTest
MakeSign
MoneyDisp
MusicTest
Possess
1 CatStdout
10 GetFaction
11 GetLocale
12 GetTime
13 HasItem
14 ImportLayerData
15 ImportWorld
16 Inventory
17 KillActor
18 LangTest
19 MakeSign
20 MoneyDisp
21 MusicTest
22 Possess

View File

@@ -1,3 +1,6 @@
->Lang:MENU_OPTIONS_GAMEPLAY->h1
gameplay_max_crafting->Lang:MENU_OPTIONS_MAX_CRAFTING->spinner,100,1000,100
showpickaxetooltip->Lang:MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING->toggle
showpickaxetooltip->Lang:MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING->toggle
->Lang:MENU_OPTIONS_UNIT_OF_MEASUREMENT->h1
gameplay_unit_distance->Lang:MENU_OPTIONS_DISTANCE_UNIT->textsel,meter=MENU_OPTIONS_UNIT_METRIC,foot=MENU_OPTIONS_UNIT_FEET,block=MENU_OPTIONS_UNIT_BLOCKS
gameplay_unit_temperature->Lang:MENU_OPTIONS_TEMPERATURE_UNIT->textsel,celsius=MENU_OPTIONS_UNIT_CELSIUS_DNT,fahrenheit=MENU_OPTIONS_UNIT_FAHRENHEIT_DNT,kelvin=MENU_OPTIONS_UNIT_KELVIN_DNT
1 ->Lang:MENU_OPTIONS_GAMEPLAY->h1
2 gameplay_max_crafting->Lang:MENU_OPTIONS_MAX_CRAFTING->spinner,100,1000,100
3 showpickaxetooltip->Lang:MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING->toggle
4 ->Lang:MENU_OPTIONS_UNIT_OF_MEASUREMENT->h1
5 gameplay_unit_distance->Lang:MENU_OPTIONS_DISTANCE_UNIT->textsel,meter=MENU_OPTIONS_UNIT_METRIC,foot=MENU_OPTIONS_UNIT_FEET,block=MENU_OPTIONS_UNIT_BLOCKS
6 gameplay_unit_temperature->Lang:MENU_OPTIONS_TEMPERATURE_UNIT->textsel,celsius=MENU_OPTIONS_UNIT_CELSIUS_DNT,fahrenheit=MENU_OPTIONS_UNIT_FAHRENHEIT_DNT,kelvin=MENU_OPTIONS_UNIT_KELVIN_DNT

View File

@@ -32,25 +32,25 @@
"basegame:272": { /* scaffolding */
"workbench": "",
"ingredients": [
[1, 2, "item@basegame:18", 2, "basegame:161"] /* 2 sticks and 2 platform */
[2, 2, "item@basegame:18", 2, "basegame:48"] /* 2 sticks and 2 wood */
]
},
"basegame:273": { /* scaffolding */
"workbench": "",
"ingredients": [
[1, 2, "item@basegame:18", 2, "basegame:162"] /* 2 sticks and 2 platform */
[2, 2, "item@basegame:18", 2, "basegame:49"] /* 2 sticks and 2 wood */
]
},
"basegame:274": { /* scaffolding */
"workbench": "",
"ingredients": [
[1, 2, "item@basegame:18", 2, "basegame:163"] /* 2 sticks and 2 platform */
[2, 2, "item@basegame:18", 2, "basegame:50"] /* 2 sticks and 2 wood */
]
},
"basegame:275": { /* scaffolding */
"workbench": "",
"ingredients": [
[1, 2, "item@basegame:18", 2, "basegame:164"] /* 2 sticks and 2 platform */
[2, 2, "item@basegame:18", 2, "basegame:51"] /* 2 sticks and 2 wood */
]
}
}

View File

@@ -31,6 +31,31 @@
[1, 20, "$ROCK", 10, "item@basegame:25", 10, "item@basegame:113"] /* 1 smelter = 20 rocks, 10 clay balls, 10 iron ingots */
]
},
"item@basegame:36": { /* wire rolling mill */
"workbench": "basiccrafting,metalworking",
"ingredients": [
[1, 1, "$WOOD", 2, "$ROCK", 5, "item@basegame:113"] /* 1 plank, 2 stone, 5 iron ingot */
]
},
"item@basegame:48": { /* alloying furnace */
"workbench": "basiccrafting,metalworking",
"ingredients": [
[1, 15, "$ROCK", 10, "item@basegame:25", 15, "item@basegame:113"] /* 1 smelter = 15 rocks, 10 clay balls, 15 iron ingot */
]
},
"item@basegame:51": { /* electric workbench */
"workbench": "basiccrafting",
"ingredients": [
[1, 12, "$WOOD", 5, "item@basegame:113"] /* 12 wood, 5 iron */
]
},
"item@basegame:53": { /* engraving workbench */
"workbench": "basiccrafting",
"ingredients": [
[1, 12, "$WOOD", 8, "item@basegame:113"] /* 12 wood, 8 iron */
]
},
"item@basegame:256": { /* oak door */
"workbench": "basiccrafting",
@@ -59,14 +84,57 @@
"item@basegame:6": { /* storage chest */
"workbench": "basiccrafting",
"ingredients": [
[1, 20, "$WOOD"] /* 1 chest = 20 wood */
[1, 20, "basegame:48"] /* 1 chest = 20 wood */
]
},
"item@basegame:37": { /* storage chest */
"workbench": "basiccrafting",
"ingredients": [
[1, 20, "basegame:49"] /* 1 chest = 20 wood */
]
},
"item@basegame:38": { /* storage chest */
"workbench": "basiccrafting",
"ingredients": [
[1, 20, "basegame:50"] /* 1 chest = 20 wood */
]
},
"item@basegame:39": { /* storage chest */
"workbench": "basiccrafting",
"ingredients": [
[1, 20, "basegame:51"] /* 1 chest = 20 wood */
]
},
"item@basegame:30": { /* turntable */
"workbench": "basiccrafting",
"ingredients": [
[1, 4, "item@basegame:144", 14, "$WOOD", 10, "item@basegame:113"] /* 1 turntable = 4 quartz, 14 wood, 10 iron */
[1, 4, "item@basegame:144", 14, "$WOOD", 10, "item@basegame:177"] /* 1 turntable = 4 quartz, 14 wood, 10 brass */
]
},
"item@basegame:40": { /* table */
"workbench": "basiccrafting",
"ingredients": [
[1, 10, "basegame:48"] /* 10 wood */
]
},
"item@basegame:41": { /* table */
"workbench": "basiccrafting",
"ingredients": [
[1, 10, "basegame:49"] /* 10 wood */
]
},
"item@basegame:42": { /* table */
"workbench": "basiccrafting",
"ingredients": [
[1, 10, "basegame:50"] /* 10 wood */
]
},
"item@basegame:43": { /* table */
"workbench": "basiccrafting",
"ingredients": [
[1, 10, "basegame:51"] /* 10 wood */
]
}
}

View File

@@ -1,10 +1,14 @@
{
"item@basegame:31": { /* gunpowder */
"workbench": "basiccrafting",
"ingredients": [[3, 1, "item@basegame:147", 1, "item@basegame:29", 1, "item@basegame:129"]] /* 1 nitre, 1 charcoal, 1 iron ore */
"ingredients": [[8, 3, "item@basegame:147", 1, "item@basegame:29"]] /* 3 nitre, 1 charcoal */
},
"item@basegame:32": { /* cherry bomb */
"workbench": "",
"ingredients": [[1, 1, "item@basegame:31", 1, "item@basegame:25"]] /* 1 gunpowder, 1 clay ball */
},
"item@basegame:34": { /* signal switch */
"workbench": "",
"ingredients": [[2, 1, "item@basegame:112", 1, "$ROCK", 1, "$WOOD"]] /* 1 copper ingot, 1 rock, 1 planks */
}
}

View File

@@ -0,0 +1,17 @@
{
/* stone brick */
"basegame:19": {
"workbench": "masonry",
"ingredients": [
[1, 1, "$BRICKROCK"]
]
},
/* white stone tile */
"basegame:18": {
"workbench": "masonry",
"ingredients": [
[1, 1, "basegame:21"],
[1, 3, "$BRICKROCK"]
]
}
}

View File

@@ -1,61 +1,69 @@
{
"item@basegame:14": { /* wooden pick */
"workbench": "basiccrafting",
"ingredients": [[1, 6, "$WOOD", 2, "item@basegame:18"]] /* 6 woods, 2 sticks */
"ingredients": [[1, 5, "$WOOD", 2, "item@basegame:18"]] /* 5 woods, 2 sticks */
},
/*"item@basegame:22": {
"workbench": "basiccrafting",
"ingredients": [[1, 6, "$WOOD", 2, "item@basegame:18"]]
"ingredients": [[1, 5, "$WOOD", 2, "item@basegame:18"]]
},*/
"item@basegame:15": { /* wooden mallet */
"workbench": "basiccrafting",
"ingredients": [[1, 6, "$WOOD", 2, "item@basegame:18"]]
"ingredients": [[1, 5, "$WOOD", 2, "item@basegame:18"]]
},
"item@basegame:23": { /* stone pick */
"workbench": "basiccrafting",
"ingredients": [[1, 6, "$ROCK", 2, "item@basegame:18"]]
"ingredients": [[1, 5, "$ROCK", 2, "item@basegame:18"]]
},
"item@basegame:24": { /* stone axe */
"workbench": "basiccrafting",
"ingredients": [[1, 6, "$ROCK", 2, "item@basegame:18"]]
"ingredients": [[1, 5, "$ROCK", 2, "item@basegame:18"]]
},
"item@basegame:1": { /* copper pick */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:112", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:112", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:2": { /* iron pick */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:113", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:113", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:3": { /* steel pick */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:26", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:26", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:12": { /* copper sledgehammer */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:112", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:112", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:4": { /* iron sledgehammer */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:113", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:113", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:13": { /* steel sledgehammer */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:26", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:26", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:19": { /* copper sledgehammer */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:112", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:112", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:20": { /* iron sledgehammer */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:113", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:113", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:21": { /* steel sledgehammer */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 6, "item@basegame:26", 2, "item@basegame:18"]] /* 6 bars, 2 sticks */
"ingredients": [[1, 5, "item@basegame:26", 2, "item@basegame:18"]] /* 5 bars, 2 sticks */
},
"item@basegame:9": { /* wire cutter */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 1, "item@basegame:112", 1, "item@basegame:113"]] /* 1 copper ingot, 1 iron ingot */
},
"item@basegame:47": { /* wrench */
"workbench": "basiccrafting,metalworking",
"ingredients": [[1, 4, "item@basegame:113"]] /* 4 iron ingots */
}
}

View File

@@ -0,0 +1,118 @@
{
"wire@basegame:8192": { /* signal wire red */
"workbench": "",
"ingredients": [
[1, 1, "$SIGNALWIRE"] /* 1 other signal wire */
]
},
"wire@basegame:8193": { /* signal wire green */
"workbench": "",
"ingredients": [
[1, 1, "$SIGNALWIRE"] /* 1 other signal wire */
] },
"wire@basegame:8194": { /* signal wire blue */
"workbench": "",
"ingredients": [
[1, 1, "$SIGNALWIRE"] /* 1 other signal wire */
]
},
"wire@basegame:8195": { /* signal wire yellow */
"workbench": "",
"ingredients": [
[1, 1, "$SIGNALWIRE"] /* 1 other signal wire */
]
},
"wire@basegame:8196": { /* signal wire purple */
"workbench": "",
"ingredients": [
[1, 1, "$SIGNALWIRE"] /* 1 other signal wire */
]
},
"wire@basegame:8192": { /* signal wire red */
"workbench": "wirerollingmill",
"ingredients": [
[10, 1, "item@basegame:112"] /* 1 copper */
]
},
"wire@basegame:8193": { /* signal wire green */
"workbench": "wirerollingmill",
"ingredients": [
[10, 1, "item@basegame:112"] /* 1 copper */
] },
"wire@basegame:8194": { /* signal wire blue */
"workbench": "wirerollingmill",
"ingredients": [
[10, 1, "item@basegame:112"] /* 1 copper */
]
},
"wire@basegame:8195": { /* signal wire yellow */
"workbench": "wirerollingmill",
"ingredients": [
[10, 1, "item@basegame:112"] /* 1 copper */
]
},
"wire@basegame:8196": { /* signal wire purple */
"workbench": "wirerollingmill",
"ingredients": [
[10, 1, "item@basegame:112"] /* 1 copper */
]
},
"item@basegame:50": { /* soldering wire */
"workbench": "wirerollingmill",
"ingredients": [
[10, 1, "item@basegame:181"] /* 1 solder bar */
]
},
"item@basegame:7": { /* multimeter */
"workbench": "soldering",
"ingredients": [
[2, 5, "item@basegame:112", 5, "item@basegame:117", 5, "item@basegame:177", 5, "$SEMICONDUCTOR", 1, "item@basegame:50"] /* 5 copper, 5 gold, 5 brass, 5 iron, 5 tin, 1 soldering wire (temporary) */
]
},
"item@basegame:35": { /* copper bulb */
"workbench": "soldering",
"ingredients": [
[2, 1, "item@basegame:112", 1, "item@basegame:113", 1, "item@basegame:50"] /* 1 copper, 1 iron, 1 soldering wire (temporary) */
]
},
"item@basegame:44": { /* signal blocker */
"workbench": "soldering",
"ingredients": [
[1, 2, "$ROCK", 1, "$SEMICONDUCTOR", 1, "item@basegame:112", 1, "item@basegame:50"] /* 2 rocks, 1 tin, 1 copper, 1 soldering wire (temporary) */
]
},
"item@basegame:45": { /* signal latch */
"workbench": "soldering",
"ingredients": [
[1, 3, "$ROCK", 1, "$SEMICONDUCTOR", 2, "item@basegame:112", 1, "item@basegame:50"] /* 3 rocks, 3 tin, 3 copper, 1 soldering wire (temporary) */
]
},
"item@basegame:8": { /* signal emitter */
"workbench": "soldering",
"ingredients": [
[2, 1, "$ROCK", 1, "$SEMICONDUCTOR", 1, "item@basegame:50"] /* 1 rocks, 1 tin, 1 copper, 1 soldering wire (temporary) */
]
},
"item@basegame:46": { /* signal repeater */
"workbench": "soldering",
"ingredients": [
[1, 1, "$ROCK", 1, "$SEMICONDUCTOR", 1, "item@basegame:50"] /* 1 rocks, 1 tin, 1 copper, 1 soldering wire (temporary) */
]
},
"item@basegame:49": { /* signal adder */
"workbench": "soldering",
"ingredients": [
[1, 1, "$ROCK", 1, "$SEMICONDUCTOR", 1, "item@basegame:50"] /* 2 rocks, 2 tin, 2 copper, 1 soldering wire (temporary) */
]
},
"item@basegame:52": { /* seven seg disp */
"workbench": "soldering",
"ingredients": [
[1, 4, "$ROCK", 7, "item@basegame:35", 5, "$SEMICONDUCTOR", 2, "item@basegame:112", 1, "item@basegame:50"] /* 4 rocks, 7 copper bulbs, 5 tin, 2 copper, 1 soldering wire (temporary) */
]
}
}

View File

@@ -1,4 +1,6 @@
{
"gameplay_max_crafting": 100,
"showpickaxetooltip": true
"showpickaxetooltip": true,
"gameplay_unit_distance": "meter",
"gameplay_unit_temperature": "celsius"
}

View File

@@ -6,7 +6,7 @@ id;classname;tags
5;net.torvald.terrarum.modulebasegame.gameitems.ItemTikiTorch;FIXTURE,LIGHT
6;net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChest;FIXTURE,STORAGE
7;net.torvald.terrarum.modulebasegame.gameitems.WireGraphDebugger;TOOL,WIRE
8;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalEmitter;FIXTURE
8;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalEmitter;FIXTURE,SIGNAL
9;net.torvald.terrarum.modulebasegame.gameitems.WireCutterAll;TOOL,WIRE
10;net.torvald.terrarum.modulebasegame.gameitems.ItemTypewriter;FIXTURE,PRINTING
11;net.torvald.terrarum.modulebasegame.gameitems.ItemWallCalendar;FIXTURE
@@ -20,7 +20,7 @@ id;classname;tags
19;net.torvald.terrarum.modulebasegame.gameitems.AxeCopper;TOOL,AXE
20;net.torvald.terrarum.modulebasegame.gameitems.AxeIron;TOOL,AXE
21;net.torvald.terrarum.modulebasegame.gameitems.AxeSteel;TOOL,AXE
#22;net.torvald.terrarum.modulebasegame.gameitems.AxeWood;TOOL,AXE
22;net.torvald.terrarum.modulebasegame.gameitems.AxeWood;TOOL,AXE
23;net.torvald.terrarum.modulebasegame.gameitems.PickaxeStone;TOOL,PICK
24;net.torvald.terrarum.modulebasegame.gameitems.AxeStone;TOOL,AXE
25;net.torvald.terrarum.modulebasegame.gameitems.ItemClayBall;
@@ -32,18 +32,46 @@ id;classname;tags
31;net.torvald.terrarum.modulebasegame.gameitems.ItemGunpowder;POWDER,EXPLOSIVE
32;net.torvald.terrarum.modulebasegame.gameitems.ItemCherryBomb;EXPLOSIVE,THROWABLE
33;net.torvald.terrarum.modulebasegame.gameitems.ItemTorch;FIXTURE,LIGHT
34;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSwitchManual;FIXTURE,SIGNAL
35;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalBulb;FIXTURE,SIGNAL
36;net.torvald.terrarum.modulebasegame.gameitems.ItemWireRollingMill;FIXTURE,CRAFTING
37;net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestEbony;FIXTURE,STORAGE
38;net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestBirch;FIXTURE,STORAGE
39;net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestRosewood;FIXTURE,STORAGE
40;net.torvald.terrarum.modulebasegame.gameitems.ItemTable;FIXTURE,SURFACE
41;net.torvald.terrarum.modulebasegame.gameitems.ItemTableEbony;FIXTURE,SURFACE
42;net.torvald.terrarum.modulebasegame.gameitems.ItemTableBirch;FIXTURE,SURFACE
43;net.torvald.terrarum.modulebasegame.gameitems.ItemTableRosewood;FIXTURE,SURFACE
44;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalBlocker;FIXTURE,SIGNAL
45;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalLatch;FIXTURE,SIGNAL
46;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalRepeaterHorz;FIXTURE,SIGNAL
47;net.torvald.terrarum.modulebasegame.gameitems.ItemWrench;TOOL,WRENCH
48;net.torvald.terrarum.modulebasegame.gameitems.ItemAlloyingFurnace;FIXTURE,STATION
49;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalAdder;FIXTURE,SIGNAL
50;net.torvald.terrarum.modulebasegame.gameitems.ItemSolderingWire;
51;net.torvald.terrarum.modulebasegame.gameitems.ItemElectricWorkbench;FIXTURE,CRAFTING
52;net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSevenSeg;FIXTURE,SIGNAL
53;net.torvald.terrarum.modulebasegame.gameitems.ItemEngravingWorkbench;FIXTURE,CRAFTING
# ingots
26;net.torvald.terrarum.modulebasegame.gameitems.IngotSteel;INGOT
112;net.torvald.terrarum.modulebasegame.gameitems.IngotCopper;INGOT
113;net.torvald.terrarum.modulebasegame.gameitems.IngotIron;INGOT
114;net.torvald.terrarum.modulebasegame.gameitems.ItemCoalCoke;COMBUSTIBLE
115;net.torvald.terrarum.modulebasegame.gameitems.IngotZinc;INGOT
116;net.torvald.terrarum.modulebasegame.gameitems.IngotTin;INGOT
116;net.torvald.terrarum.modulebasegame.gameitems.IngotTin;INGOT,SEMICONDUCTOR
117;net.torvald.terrarum.modulebasegame.gameitems.IngotGold;INGOT
118;net.torvald.terrarum.modulebasegame.gameitems.IngotSilver;INGOT
119;net.torvald.terrarum.modulebasegame.gameitems.IngotLead;INGOT
# alloys
26;net.torvald.terrarum.modulebasegame.gameitems.IngotSteel;INGOT,ALLOY
176;net.torvald.terrarum.modulebasegame.gameitems.IngotBronze;INGOT,ALLOY
177;net.torvald.terrarum.modulebasegame.gameitems.IngotBrass;INGOT,ALLOY
178;net.torvald.terrarum.modulebasegame.gameitems.IngotElectrum;INGOT,ALLOY
179;net.torvald.terrarum.modulebasegame.gameitems.IngotSilverBillon;INGOT,ALLOY
180;net.torvald.terrarum.modulebasegame.gameitems.IngotRosegold;INGOT,ALLOY
181;net.torvald.terrarum.modulebasegame.gameitems.IngotSolder;INGOT,ALLOY
# ores
128;net.torvald.terrarum.modulebasegame.gameitems.OreCopper;SMELTABLE
129;net.torvald.terrarum.modulebasegame.gameitems.OreIron;SMELTABLE
@@ -68,10 +96,10 @@ id;classname;tags
163;net.torvald.terrarum.modulebasegame.gameitems.ItemSeedRosewood;SEEDLING
# tree logs
168;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsOak;COMBUSTIBLE,SMELTABLE
169;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsEbony;COMBUSTIBLE,SMELTABLE
170;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsBirch;COMBUSTIBLE,SMELTABLE
171;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsRosewood;COMBUSTIBLE,SMELTABLE
168;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsOak;COMBUSTIBLE,SMELTABLE,LOGS
169;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsEbony;COMBUSTIBLE,SMELTABLE,LOGS
170;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsBirch;COMBUSTIBLE,SMELTABLE,LOGS
171;net.torvald.terrarum.modulebasegame.gameitems.ItemLogsRosewood;COMBUSTIBLE,SMELTABLE,LOGS
256;net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorOak;FIXTURE
@@ -94,16 +122,21 @@ id;classname;tags
32777;net.torvald.terrarum.modulebasegame.gameitems.MusicDisc09;MUSIC,PHONO
# data storage (tapestries; 256)
#33023;net.torvald.terrarum.modulebasegame.gameitems.ItemTapestry;FIXTURE
#33024;net.torvald.terrarum.modulebasegame.gameitems.ItemTapestry;FIXTURE,BASEOBJECT
# data storage (text signs; 256)
33280;net.torvald.terrarum.modulebasegame.gameitems.ItemTextSignCopper;FIXTURE,BASEOBJECT
# fluids on storage
# preferably autogenerated
# 10000h..100FFh : Fluid type 0 (water) x container type 0..255
# 10100h..101FFh : Fluid type 1 (lava) x container type 0..255
# 10200h..102FFh : Fluid type 2 (crude oil) x container type 0..255
# 10300h..103FFh : Fluid type 3 (petroleum) x container type 0..255
# 10400h..104FFh : Fluid type 4 (compressed air) x container type 0..255
# 10500h..105FFh : Fluid type 5 (steam) x container type 0..255
# 100000h..1000FFh : Fluid type 0 (water) x container type 0..255
# 100100h..1001FFh : Fluid type 1 (lava) x container type 0..255
# 100200h..1002FFh : Fluid type 2 (crude oil) x container type 0..255
# 100300h..1003FFh : Fluid type 3 (petroleum) x container type 0..255
# 100400h..1004FFh : Fluid type 4 (compressed air) x container type 0..255
# 100500h..1005FFh : Fluid type 5 (steam) x container type 0..255
# ...
# 1FF00h..1FFFFh : Fluid type 255 (???) x container type 0..255
# 10FF00h..10FFFFh : Fluid type 255 (???) x container type 0..255
1 id classname tags
6 5 net.torvald.terrarum.modulebasegame.gameitems.ItemTikiTorch FIXTURE,LIGHT
7 6 net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChest FIXTURE,STORAGE
8 7 net.torvald.terrarum.modulebasegame.gameitems.WireGraphDebugger TOOL,WIRE
9 8 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalEmitter FIXTURE FIXTURE,SIGNAL
10 9 net.torvald.terrarum.modulebasegame.gameitems.WireCutterAll TOOL,WIRE
11 10 net.torvald.terrarum.modulebasegame.gameitems.ItemTypewriter FIXTURE,PRINTING
12 11 net.torvald.terrarum.modulebasegame.gameitems.ItemWallCalendar FIXTURE
20 19 net.torvald.terrarum.modulebasegame.gameitems.AxeCopper TOOL,AXE
21 20 net.torvald.terrarum.modulebasegame.gameitems.AxeIron TOOL,AXE
22 21 net.torvald.terrarum.modulebasegame.gameitems.AxeSteel TOOL,AXE
23 #22 22 net.torvald.terrarum.modulebasegame.gameitems.AxeWood TOOL,AXE
24 23 net.torvald.terrarum.modulebasegame.gameitems.PickaxeStone TOOL,PICK
25 24 net.torvald.terrarum.modulebasegame.gameitems.AxeStone TOOL,AXE
26 25 net.torvald.terrarum.modulebasegame.gameitems.ItemClayBall
32 32 net.torvald.terrarum.modulebasegame.gameitems.ItemCherryBomb EXPLOSIVE,THROWABLE
33 33 net.torvald.terrarum.modulebasegame.gameitems.ItemTorch FIXTURE,LIGHT
34 # ingots 34 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSwitchManual FIXTURE,SIGNAL
35 35 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalBulb FIXTURE,SIGNAL
36 36 net.torvald.terrarum.modulebasegame.gameitems.ItemWireRollingMill FIXTURE,CRAFTING
37 37 net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestEbony FIXTURE,STORAGE
38 38 net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestBirch FIXTURE,STORAGE
39 39 net.torvald.terrarum.modulebasegame.gameitems.ItemStorageChestRosewood FIXTURE,STORAGE
40 40 net.torvald.terrarum.modulebasegame.gameitems.ItemTable FIXTURE,SURFACE
41 41 net.torvald.terrarum.modulebasegame.gameitems.ItemTableEbony FIXTURE,SURFACE
42 42 net.torvald.terrarum.modulebasegame.gameitems.ItemTableBirch FIXTURE,SURFACE
43 43 net.torvald.terrarum.modulebasegame.gameitems.ItemTableRosewood FIXTURE,SURFACE
44 44 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalBlocker FIXTURE,SIGNAL
45 45 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalLatch FIXTURE,SIGNAL
46 46 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalRepeaterHorz FIXTURE,SIGNAL
47 47 net.torvald.terrarum.modulebasegame.gameitems.ItemWrench TOOL,WRENCH
48 48 net.torvald.terrarum.modulebasegame.gameitems.ItemAlloyingFurnace FIXTURE,STATION
49 49 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalAdder FIXTURE,SIGNAL
50 50 net.torvald.terrarum.modulebasegame.gameitems.ItemSolderingWire
51 51 net.torvald.terrarum.modulebasegame.gameitems.ItemElectricWorkbench FIXTURE,CRAFTING
52 52 net.torvald.terrarum.modulebasegame.gameitems.ItemLogicSignalSevenSeg FIXTURE,SIGNAL
53 53 net.torvald.terrarum.modulebasegame.gameitems.ItemEngravingWorkbench FIXTURE,CRAFTING
54 # ingots
55 26 112 net.torvald.terrarum.modulebasegame.gameitems.IngotSteel net.torvald.terrarum.modulebasegame.gameitems.IngotCopper INGOT
56 112 113 net.torvald.terrarum.modulebasegame.gameitems.IngotCopper net.torvald.terrarum.modulebasegame.gameitems.IngotIron INGOT
113 net.torvald.terrarum.modulebasegame.gameitems.IngotIron INGOT
57 114 net.torvald.terrarum.modulebasegame.gameitems.ItemCoalCoke COMBUSTIBLE
58 115 net.torvald.terrarum.modulebasegame.gameitems.IngotZinc INGOT
59 116 net.torvald.terrarum.modulebasegame.gameitems.IngotTin INGOT INGOT,SEMICONDUCTOR
60 117 net.torvald.terrarum.modulebasegame.gameitems.IngotGold INGOT
61 118 net.torvald.terrarum.modulebasegame.gameitems.IngotSilver INGOT
62 119 net.torvald.terrarum.modulebasegame.gameitems.IngotLead INGOT
63 # ores # alloys
64 128 26 net.torvald.terrarum.modulebasegame.gameitems.OreCopper net.torvald.terrarum.modulebasegame.gameitems.IngotSteel SMELTABLE INGOT,ALLOY
65 129 176 net.torvald.terrarum.modulebasegame.gameitems.OreIron net.torvald.terrarum.modulebasegame.gameitems.IngotBronze SMELTABLE INGOT,ALLOY
66 177 net.torvald.terrarum.modulebasegame.gameitems.IngotBrass INGOT,ALLOY
67 178 net.torvald.terrarum.modulebasegame.gameitems.IngotElectrum INGOT,ALLOY
68 179 net.torvald.terrarum.modulebasegame.gameitems.IngotSilverBillon INGOT,ALLOY
69 180 net.torvald.terrarum.modulebasegame.gameitems.IngotRosegold INGOT,ALLOY
70 181 net.torvald.terrarum.modulebasegame.gameitems.IngotSolder INGOT,ALLOY
71 # ores
72 128 net.torvald.terrarum.modulebasegame.gameitems.OreCopper SMELTABLE
73 129 net.torvald.terrarum.modulebasegame.gameitems.OreIron SMELTABLE
74 130 net.torvald.terrarum.modulebasegame.gameitems.OreCoal SMELTABLE,COMBUSTIBLE
75 130 131 net.torvald.terrarum.modulebasegame.gameitems.OreCoal net.torvald.terrarum.modulebasegame.gameitems.OreZinc SMELTABLE,COMBUSTIBLE SMELTABLE
76 131 132 net.torvald.terrarum.modulebasegame.gameitems.OreZinc net.torvald.terrarum.modulebasegame.gameitems.OreTin SMELTABLE
77 132 133 net.torvald.terrarum.modulebasegame.gameitems.OreTin net.torvald.terrarum.modulebasegame.gameitems.OreGold SMELTABLE
96 256 257 net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorOak net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorEbony FIXTURE
97 257 258 net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorEbony net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorBirch FIXTURE
98 258 259 net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorBirch net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorRosewood FIXTURE
99 259 320 net.torvald.terrarum.modulebasegame.gameitems.ItemSwingingDoorRosewood net.torvald.terrarum.modulebasegame.gameitems.ItemWorldPortal FIXTURE FIXTURE,STATION
100 320 # data storage (discs net.torvald.terrarum.modulebasegame.gameitems.ItemWorldPortal 256)
101 # data storage (discs # 32768 is a reserved number for a blank disc
102 # 32768 is a reserved number for a blank disc 32769 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc01 MUSIC,PHONO
103 32769 32770 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc01 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc02 MUSIC,PHONO
104 32770 32771 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc02 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc03 MUSIC,PHONO
105 32771 32772 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc03 net.torvald.terrarum.modulebasegame.gameitems.MusicDisc04 MUSIC,PHONO
122 # ... # 100500h..1005FFh : Fluid type 5 (steam) x container type 0..255
123 # 1FF00h..1FFFFh : Fluid type 255 (???) x container type 0..255 # ...
124 # 10FF00h..10FFFFh : Fluid type 255 (???) x container type 0..255
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,15 @@
{
"MENU_MONITOR_CALI_TITLE": "Check Monitor",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "Show Ore Tooltip When Mining",
"MENU_OPTIONS_MAX_CRAFTING": "Max Number of Items for Crafting",
"MENU_OPTIONS_UNIT_BLOCKS": "Blocks",
"MENU_OPTIONS_UNIT_FEET": "Imperial",
"MENU_OPTIONS_UNIT_METRIC": "Metric",
"MENU_OPTIONS_UNIT_OF_MEASUREMENT": "Unit of Measurement",
"MENU_OPTIONS_DISTANCE_UNIT": "Distance",
"MENU_OPTIONS_TEMPERATURE_UNIT": "Temperature",
"MENU_OPTIONS_UNIT_CELSIUS_DNT": "°C",
"MENU_OPTIONS_UNIT_FAHRENHEIT_DNT": "°F",
"MENU_OPTIONS_UNIT_KELVIN_DNT": "K"
}

View File

@@ -1,4 +1,5 @@
{
"CONTEXT_ENGRAVER_TEXT": "Text",
"CONTEXT_GENERATOR_SEED": "Seed",
"CONTEXT_ITEM_FIXTURES": "Fixtures",
"CONTEXT_ITEM_MAP": "Map",
@@ -13,15 +14,12 @@
"MENU_LABEL_RENAME": "Rename",
"MENU_LABEL_USE_CODE": "Use Code",
"MENU_MODE_BUILDINGMAKER": "POI Editor",
"MENU_MONITOR_CALI_TITLE": "Check Monitor",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "Show Ore Tooltip When Mining",
"MENU_OPTIONS_MAX_CRAFTING": "Max Number of Items for Crafting",
"MENU_UPDATE_UPDATE_AVAILABLE": "Update Available!",
"GAME_ACTION_GRAPPLE": "Grapple",
"GAME_ACTION_QUICKSEL": "Quick Select",
"GAME_ACTION_SELECT_SLOT": "Select Slot",
"GAME_ACTION_TELEPORT": "Teleport",
"GAME_CRAFTABLE_ITEMS": "Craftable Items",
"GAME_CRAFTABLE_ITEMS": "Recipes",
"GAME_CRAFTING": "Crafting",
"GAME_INVENTORY_BLOCKS": "Blocks",
"GAME_INVENTORY_FAVORITES": "Favorites",

View File

@@ -6,9 +6,11 @@
"TOOLTIP_wire@basegame:8192": "Carries signals",
"TOOLTIP_wire@basegame:8193": "Carries signals",
"TOOLTIP_wire@basegame:8194": "Carries signals",
"TOOLTIP_wire@basegame:8196": "Carries power",
"TOOLTIP_wire@basegame:8197": "Carries power",
"TOOLTIP_wire@basegame:8198": "Carries information",
"TOOLTIP_wire@basegame:8195": "Carries signals",
"TOOLTIP_wire@basegame:8196": "Carries signals",
"TOOLTIP_wire@basegame:1": "Carries power",
"TOOLTIP_wire@basegame:2": "Carries power",
"TOOLTIP_wire@basegame:16": "Carries information",
"TOOLTIP_item@basegame:1": "Breaks rocks",
"TOOLTIP_item@basegame:2": "Breaks rocks",
@@ -16,8 +18,10 @@
"TOOLTIP_item@basegame:4": "Breaks down walls",
"TOOLTIP_item@basegame:5": "Provides light but fancier",
"TOOLTIP_item@basegame:6": "“I am sworn to keep your burdens.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:8": "Emits a signal",
"TOOLTIP_item@basegame:9": "An electricians best friend",
"TOOLTIP_item@basegame:37": "“I am sworn to keep your burdens.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:38": "“I am sworn to keep your burdens.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:39": "“I am sworn to keep your burdens.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:9": "Push {MOUSE:config_mousesecondary} to change the colour",
"TOOLTIP_item@basegame:10": "“Who needs a Book and Quill when youve got this?”", /* a jab on the Minecraft item Book and Quill */
"TOOLTIP_item@basegame:11": "Tells what day it is",
"TOOLTIP_item@basegame:12": "Breaks down walls",
@@ -31,6 +35,7 @@
"TOOLTIP_item@basegame:20": "Cuts trees",
"TOOLTIP_item@basegame:21": "Cuts trees",
"TOOLTIP_item@basegame:22": "Cuts trees, just barely",
/*"TOOLTIP_item@basegame:22": "Perhaps its more useful for casting than actually using",*/
"TOOLTIP_item@basegame:23": "Breaks rocks",
"TOOLTIP_item@basegame:24": "Cuts trees",
"TOOLTIP_item@basegame:25": "Finer grains of dirts that gets stronger when burned",
@@ -38,8 +43,21 @@
"TOOLTIP_item@basegame:27": "Every blacksmith gotta start from somewhere",
"TOOLTIP_item@basegame:28": "A music vending machine (free to play)",
"TOOLTIP_item@basegame:29": "A coal lookalike that burns just as well and is renewable",
"TOOLTIP_item@basegame:36": "Creates wires from metal ingots",
"TOOLTIP_item@basegame:47": "Reorients gadgets",
"TOOLTIP_item@basegame:48": "Melts two metal ingots to make a bar of alloy",
"TOOLTIP_item@basegame:50": "Use it on the Electronics Workbench",
"TOOLTIP_item@basegame:114": "A precious fuel for the steel production",
"TOOLTIP_item@basegame:320": "Travel multiverse!\nWarning: a pair is needed for the return trip"
"TOOLTIP_item@basegame:320": "Travel multiverse!\nWarning: a pair is needed for the return trip",
"TOOLTIP_item@basegame:8": "Emits a signal",
"TOOLTIP_item@basegame:34": "Selectively emits a signal",
"TOOLTIP_item@basegame:35": "Shows a signal status",
"TOOLTIP_item@basegame:44": "Cuts the signal using the cutting signal",
"TOOLTIP_item@basegame:45": "Latches onto the signal on the latch signal",
"TOOLTIP_item@basegame:46": "Delays a signal by a short amount",
"TOOLTIP_item@basegame:49": "Logically adds two signals"
}

View File

@@ -1,12 +1,17 @@
{
"ITEM_ALLOYING_FURNACE": "Alloying Furnace",
"ITEM_CALENDAR": "Calendar",
"ITEM_CHARCOAL": "Charcoal",
"ITEM_CHERRY_BOMB": "Bomb",
"ITEM_COAL_COKE": "Coal Coke",
"ITEM_COPPER_BULB": "Copper Bulb",
"ITEM_COPPER_SIGN": "Copper Sign",
"ITEM_DOOR_OAK": "Oak Door",
"ITEM_DOOR_EBONY": "Ebony Door",
"ITEM_DOOR_BIRCH": "Birch Door",
"ITEM_DOOR_ROSEWOOD": "Rosewood Door",
"ITEM_ELECTRIC_WORKBENCH": "Electric Workbench",
"ITEM_ENGRAVING_WORKBENCH": "Engraving Workbench",
"ITEM_FURNACE_AND_ANVIL": "Furnace and Anvil",
"ITEM_GEM_RUBY": "Raw Ruby",
"ITEM_GEM_EMERALD": "Raw Emerald",
@@ -36,11 +41,18 @@
"ITEM_INGOT_TIN": "Tin Ingot",
"ITEM_INGOT_ZINC": "Zinc Ingot",
"ITEM_JUKEBOX": "Jukebox",
"ITEM_LOGIC_SIGNAL_ADDER": "Logic Signal Adder",
"ITEM_LOGIC_SIGNAL_BLOCKER": "Logic Signal Blocker",
"ITEM_LOGIC_SIGNAL_EMITTER": "Logic Signal Emitter",
"ITEM_LOGIC_SIGNAL_LATCH": "Logic Signal Latch",
"ITEM_LOGIC_SIGNAL_NUMERIC_DISPLAY": "Logic Signal Numeric Display",
"ITEM_LOGIC_SIGNAL_REPEATER": "Logic Signal Repeater",
"ITEM_LOGIC_SIGNAL_SWITCH": "Logic Signal Switch",
"ITEM_LOGS_BIRCH": "Birch Logs",
"ITEM_LOGS_EBONY": "Ebony Logs",
"ITEM_LOGS_OAK": "Oak Logs",
"ITEM_LOGS_ROSEWOOD": "Rosewood Logs",
"ITEM_MULTIMETER": "Multimeter",
"ITEM_NITRE": "Nitre",
"ITEM_ORE_CASSITERITE": "Tin Ore",
"ITEM_ORE_COAL": "Coal",
@@ -63,18 +75,25 @@
"ITEM_SLEDGEHAMMER_COPPER": "Copper Sledgehammer",
"ITEM_SLEDGEHAMMER_IRON": "Iron Sledgehammer",
"ITEM_SLEDGEHAMMER_STEEL": "Steel Sledgehammer",
"ITEM_SOLDERING_WIRE": "Soldering Wire",
"ITEM_SMELTER_SMALL": "Small Smelter",
"ITEM_STORAGE_CHEST": "Storage Chest",
"ITEM_TABLE_OAK": "Oak Table",
"ITEM_TABLE_EBONY": "Ebony Table",
"ITEM_TABLE_BIRCH": "Birch Table",
"ITEM_TABLE_ROSEWOOD": "Rosewood Table",
"ITEM_TIKI_TORCH": "Tiki Torch",
"ITEM_TURNTABLE": "Turntable",
"ITEM_TYPEWRITER": "Typewriter",
"ITEM_WIRE": "Wire",
"ITEM_WIRE_CUTTER": "Wire Cutter",
"ITEM_WIRE_ROLLING_MILL": "Wire Rolling Mill",
"ITEM_WOOD_STICK": "Stick",
"ITEM_WOODEN_MALLET": "Wooden Mallet",
"ITEM_WORKBENCH": "Workbench",
"ITEM_WORLD_PORTAL": "Teleportation Station",
"ITEM_WRENCH": "Wrench",
/* below are placeholders; please do not translate */
"ACTORBLOCK_ALLOW_MOVE_DOWN": "Urist Arôlcustith",
"ACTORBLOCK_FULL_COLLISION": "Urist Berdanrifot",
"ACTORBLOCK_NO_COLLISION": "Urist Zafal",

View File

@@ -0,0 +1,11 @@
{
"MENU_MONITOR_CALI_TITLE": "모니터 확인",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "채굴 시 광석 툴팁 보이기",
"MENU_OPTIONS_MAX_CRAFTING": "한번에 제작할 최대 아이템 수",
"MENU_OPTIONS_UNIT_BLOCKS": "블록",
"MENU_OPTIONS_UNIT_FEET": "피트",
"MENU_OPTIONS_UNIT_METRIC": "미터",
"MENU_OPTIONS_UNIT_OF_MEASUREMENT": "측정 단위",
"MENU_OPTIONS_DISTANCE_UNIT": "거리",
"MENU_OPTIONS_TEMPERATURE_UNIT": "온도"
}

View File

@@ -1,4 +1,5 @@
{
"CONTEXT_ENGRAVER_TEXT": "문구",
"CONTEXT_GENERATOR_SEED": "시드",
"CONTEXT_ITEM_FIXTURES": "기구",
"CONTEXT_ITEM_MAP": "지도",
@@ -12,15 +13,12 @@
"MENU_LABEL_PREV_SAVES": "이전 세이브",
"MENU_LABEL_RENAME": "이름 바꾸기",
"MENU_LABEL_USE_CODE": "코드 사용",
"MENU_MONITOR_CALI_TITLE": "모니터 확인",
"MENU_OPTIONS_SHOW_ORES_TOOLTIP_WHEN_MINING": "채굴 시 광석 툴팁 보이기",
"MENU_OPTIONS_MAX_CRAFTING": "한번에 제작할 최대 아이템 수",
"MENU_UPDATE_UPDATE_AVAILABLE": "새 업데이트가 있습니다!",
"GAME_ACTION_GRAPPLE": "매달리기",
"GAME_ACTION_QUICKSEL": "빠른 선택",
"GAME_ACTION_SELECT_SLOT": "슬롯 선택",
"GAME_ACTION_TELEPORT": "텔레포트하기",
"GAME_CRAFTABLE_ITEMS": "제작 가능한 아이템",
"GAME_CRAFTABLE_ITEMS": "제작 레시피",
"GAME_CRAFTING": "제작",
"GAME_INVENTORY_BLOCKS": "블록",
"GAME_INVENTORY_FAVORITES": "즐겨찾기",

View File

@@ -6,9 +6,10 @@
"TOOLTIP_wire@basegame:8192": "신호를 전달합니다",
"TOOLTIP_wire@basegame:8193": "신호를 전달합니다",
"TOOLTIP_wire@basegame:8194": "신호를 전달합니다",
"TOOLTIP_wire@basegame:8196": "전력을 전달합니다",
"TOOLTIP_wire@basegame:8197": "전력을 전달합니다",
"TOOLTIP_wire@basegame:8198": "정보를 전달합니다",
"TOOLTIP_wire@basegame:8195": "신호를 전달합니다",
"TOOLTIP_wire@basegame:1": "전력을 전달합니다",
"TOOLTIP_wire@basegame:2": "전력을 전달합니다",
"TOOLTIP_wire@basegame:16": "정보를 전달합니다",
"TOOLTIP_item@basegame:1": "돌을 부숩니다",
"TOOLTIP_item@basegame:2": "돌을 부숩니다",
@@ -16,8 +17,10 @@
"TOOLTIP_item@basegame:4": "벽을 부숩니다",
"TOOLTIP_item@basegame:5": "빛을 더 이쁘게 냅니다",
"TOOLTIP_item@basegame:6": "“짐을 맡아두기로 한 몸이니까요.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:8": "신호를 만들어냅니다",
"TOOLTIP_item@basegame:9": "전기공의 친한 친구",
"TOOLTIP_item@basegame:37": "“짐을 맡아두기로 한 몸이니까요.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:38": "“짐을 맡아두기로 한 몸이니까요.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:39": "“짐을 맡아두기로 한 몸이니까요.”", /* skyrim/lydia reference */
"TOOLTIP_item@basegame:9": "{MOUSE:config_mousesecondary} 버튼을 눌러 색깔 변경",
"TOOLTIP_item@basegame:10": "“이게 있는데 책과 깃펜이 왜 필요하죠?”", /* a jab on the Minecraft item Book and Quill */
"TOOLTIP_item@basegame:11": "오늘이 무슨 날인지 알려줍니다",
"TOOLTIP_item@basegame:12": "벽을 부숩니다",
@@ -38,8 +41,20 @@
"TOOLTIP_item@basegame:27": "모든 대장장이는 초보 시절이 있는 법이죠",
"TOOLTIP_item@basegame:28": "음악 자판기입이다 (무료 플레이)",
"TOOLTIP_item@basegame:29": "석탄과 비슷하고 똑같이 잘 타지만 재생 가능합니다",
"TOOLTIP_item@basegame:36": "금속 주괴를 사용해 철사를 뽑아냅니다",
"TOOLTIP_item@basegame:47": "기기의 방향을 바꿉니다",
"TOOLTIP_item@basegame:48": "두 금속 괴를 녹여 합금을 만듭니다",
"TOOLTIP_item@basegame:50": "전자 작업대에서 사용하세요",
"TOOLTIP_item@basegame:114": "강철 생산의 소중한 연료입니다",
"TOOLTIP_item@basegame:320": "멀티버스를 여행하세요!\n경고: 2개를 만들어야 왕복이 가능합니다"
"TOOLTIP_item@basegame:320": "멀티버스를 여행하세요!\n경고: 2개를 만들어야 왕복이 가능합니다",
"TOOLTIP_item@basegame:8": "신호를 만들어냅니다",
"TOOLTIP_item@basegame:34": "선택적으로 신호를 만들어냅니다",
"TOOLTIP_item@basegame:35": "신호의 상태를 보여줍니다",
"TOOLTIP_item@basegame:44": "지나가는 신호를 자르기 신호에 따라 자릅니다",
"TOOLTIP_item@basegame:45": "들어오는 신호를 걸쇠 신호에 따라 잠시 저장합니다",
"TOOLTIP_item@basegame:46": "들어오는 신호를 살짝 지연시킵니다",
"TOOLTIP_item@basegame:49": "들어오는 신호의 합을 구합니다"
}

View File

@@ -1,12 +1,17 @@
{
"ITEM_ALLOYING_FURNACE": "합금 화로",
"ITEM_CALENDAR": "달력",
"ITEM_CHARCOAL": "목탄",
"ITEM_CHERRY_BOMB": "폭탄",
"ITEM_COAL_COKE": "코크스",
"ITEM_COPPER_BULB": "구리 전구",
"ITEM_COPPER_SIGN": "구리 간판",
"ITEM_DOOR_OAK": "나무 문",
"ITEM_DOOR_EBONY": "흑단 문",
"ITEM_DOOR_BIRCH": "백단 문",
"ITEM_DOOR_ROSEWOOD": "자단 문",
"ITEM_ELECTRIC_WORKBENCH": "전기 작업대",
"ITEM_ENGRAVING_WORKBENCH": "조각 작업대",
"ITEM_FURNACE_AND_ANVIL": "화로와 모루",
"ITEM_GEM_RUBY": "홍옥석",
"ITEM_GEM_EMERALD": "취옥석",
@@ -31,16 +36,23 @@
"ITEM_INGOT_ROSEGOLD": "분홍금괴",
"ITEM_INGOT_SILVER": "은괴",
"ITEM_INGOT_SILVER_BILLON": "은동괴",
"ITEM_INGOT_SOLDER": "납",
"ITEM_INGOT_SOLDER": "막대납",
"ITEM_INGOT_STEEL": "강철괴",
"ITEM_INGOT_TIN": "주석괴",
"ITEM_INGOT_ZINC": "아연괴",
"ITEM_JUKEBOX": "주크박스",
"ITEM_LOGIC_SIGNAL_EMITTER": "신호발생기",
"ITEM_LOGIC_SIGNAL_ADDER": "신호 가산기",
"ITEM_LOGIC_SIGNAL_BLOCKER": "신호 차단기",
"ITEM_LOGIC_SIGNAL_EMITTER": "신호 발생기",
"ITEM_LOGIC_SIGNAL_LATCH": "신호 걸쇠",
"ITEM_LOGIC_SIGNAL_NUMERIC_DISPLAY": "신호 숫자 표시기",
"ITEM_LOGIC_SIGNAL_REPEATER": "신호 리피터",
"ITEM_LOGIC_SIGNAL_SWITCH": "신호 스위치",
"ITEM_LOGS_BIRCH": "백단 통나무",
"ITEM_LOGS_EBONY": "흑단 통나무",
"ITEM_LOGS_OAK": "통나무",
"ITEM_LOGS_ROSEWOOD": "자단 통나무",
"ITEM_MULTIMETER": "멀티미터",
"ITEM_NITRE": "초석",
"ITEM_ORE_CASSITERITE": "주석석",
"ITEM_ORE_COAL": "석탄",
@@ -63,15 +75,22 @@
"ITEM_SLEDGEHAMMER_COPPER": "구리 해머",
"ITEM_SLEDGEHAMMER_IRON": "철 해머",
"ITEM_SLEDGEHAMMER_STEEL": "강철 해머",
"ITEM_SOLDERING_WIRE": "실납",
"ITEM_SMELTER_SMALL": "소형 고로",
"ITEM_STORAGE_CHEST": "보관상자",
"ITEM_TABLE_OAK": "나무 탁자",
"ITEM_TABLE_EBONY": "흑단 탁자",
"ITEM_TABLE_BIRCH": "백단 탁자",
"ITEM_TABLE_ROSEWOOD": "자단 탁자",
"ITEM_TIKI_TORCH": "티키 토치",
"ITEM_TURNTABLE": "전축",
"ITEM_TYPEWRITER": "타자기",
"ITEM_WIRE": "전선",
"ITEM_WIRE_CUTTER": "전선 절단기",
"ITEM_WIRE_ROLLING_MILL": "철사 압연기",
"ITEM_WOOD_STICK": "막대기",
"ITEM_WOODEN_MALLET": "나무 망치",
"ITEM_WORKBENCH": "작업대",
"ITEM_WORLD_PORTAL": "텔레포트 스테이션"
"ITEM_WORLD_PORTAL": "텔레포트 스테이션",
"ITEM_WRENCH": "렌치"
}

View File

@@ -44,10 +44,10 @@ package=net.torvald.terrarum.modulebasegame
entrypoint=net.torvald.terrarum.modulebasegame.EntryPoint
# Release date in YYYY-MM-DD
releasedate=2024-02-19
releasedate=2024-03-28
# The version, must follow Semver 2.0.0 scheme (https://semver.org/)
version=0.4.0
version=0.4.2
# External JAR that the module is compiled. If your module requires yet another library, the JAR must be compiled as a "Fatjar";
# Due to security reasons, loading an arbitrary JAR is not allowed.

View File

@@ -1,6 +1,6 @@
"id";"freq";"power";"scale";"ratio";"tiling";"comment";"blocktagnongrata"
"1";"0.026";"0.010";"0.517";"1.0";"a16x16";"copper (malachite)";""
"2";"0.045";"0.011";"0.517";"1.0";"a16x16";"iron (haematite)";""
"2";"0.031";"0.011";"0.521";"1.0";"a16x16";"iron (haematite)";""
"3";"0.017";"0.070";"0.511";"3.8";"a16x4";"coal";""
"4";"0.019";"0.011";"0.511";"1.0";"a16x16";"zinc (sphalerite)";""
"5";"0.017";"0.017";"0.511";"1.0";"a16x16";"tin (cassiterite)";""
1 id freq power scale ratio tiling comment blocktagnongrata
2 1 0.026 0.010 0.517 1.0 a16x16 copper (malachite)
3 2 0.045 0.031 0.011 0.517 0.521 1.0 a16x16 iron (haematite)
4 3 0.017 0.070 0.511 3.8 a16x4 coal
5 4 0.019 0.011 0.511 1.0 a16x16 zinc (sphalerite)
6 5 0.017 0.017 0.511 1.0 a16x16 tin (cassiterite)

View File

@@ -0,0 +1,27 @@
{
/* as for the plus operator, the itemIDs must be sorted lexicographically and first word should come left */
"item@basegame:112+item@basegame:116": { /* copper + tin -> bronze */
"difficulty": 1.0,
"product": [2, "item@basegame:176"]
},
"item@basegame:112+item@basegame:115": { /* copper + zinc -> brass */
"difficulty": 1.0,
"product": [2, "item@basegame:177"]
},
"item@basegame:117+item@basegame:118": { /* gold + silver -> electrum */
"difficulty": 1.0,
"product": [2, "item@basegame:178"]
},
"item@basegame:112+item@basegame:118": { /* copper + silver -> silver billon */
"difficulty": 1.0,
"product": [2, "item@basegame:179"]
},
"item@basegame:112+item@basegame:117": { /* copper + gold -> rose gold */
"difficulty": 1.0,
"product": [2, "item@basegame:180"]
},
"item@basegame:116+item@basegame:119": { /* tin + lead -> solder */
"difficulty": 1.0,
"product": [2, "item@basegame:181"]
}
}

View File

@@ -0,0 +1,48 @@
{
"$SAND": { /* sand -> crude glass */
"difficulty": 1.0,
"product": [1, "basegame:148"]
},
"item@basegame:144": { /* quartz -> clean glass */
"difficulty": 1.0,
"product": [1, "basegame:149"]
},
"$LOGS": { /* logs -> charcoal */
"difficulty": 1.0,
"product": [1, "item@basegame:29"]
},
"item@basegame:128": { /* copper ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:112"]
},
"item@basegame:129": { /* iron ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:113"]
},
"item@basegame:130": { /* coal -> coke */
"difficulty": 1.0,
"product": [1, "item@basegame:114"]
},
"item@basegame:131": { /* zinc ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:115"]
},
"item@basegame:132": { /* tin ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:116"]
},
"item@basegame:133": { /* gold ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:117"]
},
"item@basegame:134": { /* silver ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:118"]
},
"item@basegame:135": { /* lead ore -> ingot */
"difficulty": 1.0,
"product": [1, "item@basegame:119"]
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/mods/basegame/wires/1.tga LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,9 @@
wireItemID;const
wire@basegame:8192;0.995
wire@basegame:8193;0.995
wire@basegame:8194;0.995
wire@basegame:8195;0.995
wire@basegame:8196;0.999
wire@basegame:8197;0.999
wire@basegame:8198;0.999
1 wireItemID const
2 wire@basegame:8192 0.995
3 wire@basegame:8193 0.995
4 wire@basegame:8194 0.995
5 wire@basegame:8195 0.995
6 wire@basegame:8196 0.999
7 wire@basegame:8197 0.999
8 wire@basegame:8198 0.999

Binary file not shown.

View File

@@ -0,0 +1,5 @@
"accepts";"fileModule";"file";"xpos";"ypos"
"digital_bit";"basegame";"wires/ports.tga";0;0
"power_low";"basegame";"wires/ports.tga";1;0
"power_high";"basegame";"wires/ports.tga";2;0
"10base2";"basegame";"wires/ports.tga";2;0
1 accepts fileModule file xpos ypos
2 digital_bit basegame wires/ports.tga 0 0
3 power_low basegame wires/ports.tga 1 0
4 power_high basegame wires/ports.tga 2 0
5 10base2 basegame wires/ports.tga 2 0

View File

@@ -1,11 +1,13 @@
id;drop;name;renderclass;accept;inputcount;inputtype;outputtype;javaclass;inventoryimg;branching
8192;8192;WIRE_RED;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,4;1
8193;8193;WIRE_GREEN;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,1,4;1
8194;8194;WIRE_BLUE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,2,4;1
#8195;8195;WIRE_BUNDLE;signal;digital_3bits;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,0;1
8196;8196;WIRE_POWER_LOW;power;power_low;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,3,4;1
8197;8197;WIRE_POWER_HIGH;power;power_high;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,4,4;1
8198;8198;WIRE_ETHERNET;network;10base2;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,5,4;1
id;drop;name;renderclass;accept;inputcount;inputtype;outputtype;javaclass;inventoryimg;branching;tags
8192;8192;WIRE_RED;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,0,4;1;"SIGNALWIRE"
8193;8193;WIRE_GREEN;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,1,4;1;"SIGNALWIRE"
8194;8194;WIRE_BLUE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,2,4;1;"SIGNALWIRE"
8195;8195;WIRE_YELLOW;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,3,4;1;"SIGNALWIRE"
8196;8196;WIRE_PURPLE;signal;digital_bit;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,4,4;1;"SIGNALWIRE"
1;1;WIRE_POWER_LOW;power;power_low;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,5,4;1;"POWERWIRE_LOW"
2;2;WIRE_POWER_HIGH;power;power_high;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,6,4;1;"POWERWIRE_HIGH"
16;16;WIRE_ETHERNET;network;10base2;3;N/A;N/A;net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire;basegame.items,7,4;1;"ETHERNETWIRE"
# accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka not wires)
1 id drop name renderclass accept inputcount inputtype outputtype javaclass inventoryimg branching tags
2 8192 8192 WIRE_RED signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,0,4 1 SIGNALWIRE
3 8193 8193 WIRE_GREEN signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,1,4 1 SIGNALWIRE
4 8194 8194 WIRE_BLUE signal digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,2,4 1 SIGNALWIRE
5 #8195 8195 8195 WIRE_BUNDLE WIRE_YELLOW signal digital_3bits digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,0,0 basegame.items,3,4 1 SIGNALWIRE
6 8196 8196 WIRE_POWER_LOW WIRE_PURPLE power signal power_low digital_bit 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,3,4 basegame.items,4,4 1 SIGNALWIRE
7 8197 1 8197 1 WIRE_POWER_HIGH WIRE_POWER_LOW power power_high power_low 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,4,4 basegame.items,5,4 1 POWERWIRE_LOW
8 8198 2 8198 2 WIRE_ETHERNET WIRE_POWER_HIGH network power 10base2 power_high 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,5,4 basegame.items,6,4 1 POWERWIRE_HIGH
9 16 16 WIRE_ETHERNET network 10base2 3 N/A N/A net.torvald.terrarum.modulebasegame.gameitems.WirePieceSignalWire basegame.items,7,4 1 ETHERNETWIRE
10 # accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka not wires)
11 # accept: which wiretype (defined elsewhere) the wires acceps. Use comma to separate multiple. N/A for electronic components (aka not wires) # inputcount: how many sides are input (outputcount is deduced from the inputcount). N/A for wires
12 # inputcount: how many sides are input (outputcount is deduced from the inputcount). N/A for wires # inputtype: which wiretype it accepts. N/A for wires
13 # inputtype: which wiretype it accepts. N/A for wires # outputtype: which wiretype it emits. N/A for wires

View File

@@ -3,8 +3,8 @@ description=Simple music player widget
author=CuriousTo\uA75Bvald
package=net.torvald.terrarum.musicplayer
entrypoint=net.torvald.terrarum.musicplayer.EntryPoint
releasedate=2024-02-19
version=1.0.0
releasedate=2024-03-28
version=1.0.2
jar=MusicPlayer.jar
jarhash=c8896ce5b2aa79057e1324a701c1c5bd4099a8a651f044a120ad700cedfbb16e
dependency=basegame 0.4.0
jarhash=8ab074e9dc6312ea4d3f6f500e362afb65001d3770f4f8da1d9f2e47cb294de0
dependency=basegame 0.4.2+

View File

@@ -70,16 +70,11 @@ public class App implements ApplicationListener {
public static final String VERSION_TAG = TerrarumAppConfiguration.VERSION_TAG;
public static final String getVERSION_STRING() {
var snap = TerrarumAppConfiguration.INSTANCE.getVERSION_SNAPSHOT();
return String.format("%d.%d.%d", VERSION_RAW >>> 48, (VERSION_RAW & 0xffff000000L) >>> 24, VERSION_RAW & 0xffffffL) +
(VERSION_TAG.isBlank() ? "" : "-"+VERSION_TAG) + (snap == null ? "" : (" (" + snap + ")"));
return TerrarumAppConfiguration.INSTANCE.getVERSION_STRING();
}
public static final String getVERSION_STRING_WITHOUT_SNAPSHOT() {
return String.format("%d.%d.%d", VERSION_RAW >>> 48, (VERSION_RAW & 0xffff000000L) >>> 24, VERSION_RAW & 0xffffffL) +
(VERSION_TAG.isBlank() ? "" : "-"+VERSION_TAG);
return TerrarumAppConfiguration.INSTANCE.getVERSION_STRING_WITHOUT_SNAPSHOT();
}
/**
@@ -442,12 +437,12 @@ public class App implements ApplicationListener {
if (useFullscreen) {
// auto resize for fullscreen
var disp = Lwjgl3ApplicationConfiguration.getDisplayMode();
var disp = Lwjgl3ApplicationConfiguration.getDisplayMode(Lwjgl3ApplicationConfiguration.getPrimaryMonitor());
var newWidth = ((int)(disp.width / magn)) & 0x7FFFFFFE;
var newHeight = ((int)(disp.height / magn)) & 0x7FFFFFFE;
scr.setDimension(newWidth, newHeight, magn);
appConfig.setFullscreenMode(Lwjgl3ApplicationConfiguration.getDisplayMode());
appConfig.setFullscreenMode(disp);
}
else
@@ -1731,7 +1726,7 @@ public class App implements ApplicationListener {
return DefaultConfig.INSTANCE.getHashMap();
}
private static Object getConfigMaster(String key1) {
public static Object getConfigMaster(String key1) {
String key = key1.toLowerCase();
Object config;

View File

@@ -282,7 +282,6 @@ $BULLET Music:
- music/discs/lucid_dream.ogg
- music/discs/railway.ogg
- music/discs/welded.ogg
℗ 2021, 2022, 2023, 2024 Orstphone
Check out the original tracks on:
Apple Music: <https://music.apple.com/kr/artist/orstphone/1587723053>
@@ -300,7 +299,6 @@ $BULLET Foleys:
- ambient/season/diurnal_winter.*.ogg
- ambient/season/matutinal.*.ogg
- ambient/season/nocturnal.*.ogg
℗ 2011, 2013, 2015, 2020, 2021 Klankbeeld
Sound from <https://www.freesound.org/people/klankbeeld>
@@ -311,38 +309,31 @@ Sound from <https://www.freesound.org/people/klankbeeld>
- effects/steps/WOOD.*.ogg
- effects/door/wooden_open.*.ogg
- effects/door/wooden_close.*.ogg
℗ 2020, 2021, 2022 Nox Sound
Sound from <https://freesound.org/people/Nox_Sound>
- effects/static/phono_pops.ogg
℗ 2011 Veezay
Sound from <https://freesound.org/people/veezay>
- effects/static/tape_hiss.ogg
℗ 2017 Stephen Holdaway
Sound from <https://freesound.org/people/stecman>
- effects/static/film_pops_lowpass.ogg
℗ 2015 Joe DeShon
Sound from <https://freesound.org/people/joedeshon>
- effects/static/bonfire.ogg
℗ 2019 DrinkingWindGames
Sound from <https://freesound.org/people/DrinkingWindGames>
- effects/explosion/bang_bomb.ogg
℗ 2019 Richwise
Sound from <https://freesound.org/people/richwise>
- effects/explosion/fuse.ogg
- effects/explosion/fuse_continue.ogg
℗ 2012, 2015 j1987 and ScouseMouseJB
Sound from <https://freesound.org/people/j1987> and <https://freesound.org/people/ScouseMouseJB>
@@ -351,12 +342,10 @@ Sound from <https://freesound.org/people/j1987> and <https://freesound.org/peopl
$BULLET Impulse Responses:
- convolution/EchoThief - *.bin
EchoThief Impulse Response Library
℗ 2013-2023 Chris Warren <cwarren@sdsu.edu>
- convolution/Soundwoofer - *.bin
Soundwoofer Free Impulse Response Library
℗ 2018 Soundwoofer Team
<https://soundwoofer.com/User/Index?uid=soundwoofer>

View File

@@ -63,7 +63,8 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
}
}
val disposables = HashSet<Disposable>()
/** things to be disposed of when the current instance of the game disposed of */
// val disposables = HashSet<Disposable>()
lateinit var worldDisk: VirtualDisk; internal set
lateinit var playerDisk: VirtualDisk; internal set
@@ -186,7 +187,6 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
blockMarkingActor.let {
it.unsetGhost()
it.setGhostColourNone()
}
gameInitialised = true
@@ -231,7 +231,7 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
actorContainerInactive.forEach { it.dispose() }
world.dispose()
disposables.forEach { it.tryDispose() }
// disposables.forEach { it.tryDispose() }
}
////////////
@@ -439,7 +439,7 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
}
open fun saveTheGame(onSuccessful: () -> Unit, onError: (Throwable) -> Unit) {
loadedTime_t = App.getTIME_T()
}
/**
@@ -533,7 +533,7 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
fun getActorsAt(worldX: Double, worldY: Double): List<ActorWithBody> {
val outList = ArrayList<ActorWithBody>()
try {
actorsRTree.find(worldX, worldY, worldX, worldY, outList)
actorsRTree.find(worldX - 0.5, worldY - 0.5, worldX + 0.5, worldY + 0.5, outList)
}
catch (e: NullPointerException) {}
return outList

View File

@@ -14,6 +14,7 @@ import net.torvald.terrarum.blockproperties.OreCodex
import net.torvald.terrarum.blockproperties.WireCodex
import net.torvald.terrarum.gameactors.ActorWithBody
import net.torvald.terrarum.gamecontroller.IME
import net.torvald.terrarum.gameitems.FixtureInteractionBlocked
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.itemproperties.CraftingCodex
@@ -561,13 +562,17 @@ object ModMgr {
))
}
}
Terrarum.wireCodex.fromModule(module, "wires/")
Terrarum.wireCodex.fromModule(module, "wires/") { wire ->
}
Terrarum.wireCodex.portsFromModule(module, "wires/")
Terrarum.wireCodex.wireDecaysFromModule(module, "wires/")
}
private fun makeNewItemObj(tile: BlockProp, isWall: Boolean) = object : GameItem(
if (isWall) "wall@"+tile.id else tile.id
) {
override var baseMass: Double = tile.density / 100.0
), FixtureInteractionBlocked {
override var baseMass: Double = (tile.density / 100.0) * (if (tile.isPlatform) 0.5 else 1.0)
override var baseToolSize: Double? = null
override var inventoryCategory = if (isWall) Category.WALL else Category.BLOCK
override var canBeDynamic = false
@@ -842,11 +847,16 @@ object ModMgr {
object GameCraftingRecipeLoader {
const val recipePath = "crafting/"
const val smeltingPath = "smelting/"
@JvmStatic operator fun invoke(module: String) {
getFile(module, recipePath).listFiles { it: File -> it.name.lowercase().endsWith(".json") }?.forEach { jsonFile ->
Terrarum.craftingCodex.addFromJson(JsonFetcher(jsonFile), module, jsonFile.name)
}
getFile(module, smeltingPath).listFiles { it: File -> it.name.lowercase().endsWith(".json") }?.forEach { jsonFile ->
Terrarum.craftingCodex.addSmeltingFromJson(JsonFetcher(jsonFile), module, jsonFile.name)
}
}
}

View File

@@ -11,6 +11,8 @@ class Point2d() : Cloneable {
var x: Double = 0.0
var y: Double = 0.0
constructor(other: Point2d) : this(other.x, other.y)
constructor(x: Double, y: Double) : this() {
this.x = x
this.y = y

View File

@@ -12,13 +12,13 @@ object ReferencingRanges {
val ITEMS_DYNAMIC = 0x10_0000..0x0FFF_FFFF // 267 386 880 pseudo-items
val ACTORS = 0x1000_0000..0x7FFE_FFFF
// there is a gap between 0x7FFF_0000..0x7FFF_BFFF
// there is a gap between 0x7FFF_0000..0x7FFF_7FFF
// IDs doesn't effect the render order at all, but we're kinda enforcing these ID ranging.
// However, these two wire-related actor will break the rule. But as we want them to render on top of others
// in the same render orders, we're giveng them relatively high IDs for them.
val ACTORS_WIRES = 0x7FFF_C000..0x7FFF_EFFF // Rendered front--wires
val ACTORS_WIRES_HELPER = 0x7FFF_F000..0x7FFF_FEFF // Rendered overlay--wiring port icons and logic gates
val ACTORS_WIRE_PORTS = 0x7FFF_8000..0x7FFF_BEFF // Rendered front--wires
val ACTORS_WIRES = 0x7FFF_BF00..0x7FFF_FEFF // Rendered overlay--wiring port icons
val ACTORS_INTERNAL_USE = 0x7FFF_FF00..0x7FFF_FFFF // Actor ID 0x7FFF_FFFF is pre-assigned to the block cursor!

View File

@@ -477,7 +477,8 @@ fun blendMul(batch: SpriteBatch) {
fun blendAlphaMask(batch: SpriteBatch) {
batch.enableBlending()
batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_ALPHA)
// batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_ALPHA)
batch.setBlendFunction(GL20.GL_ZERO, GL20.GL_SRC_COLOR)
}
/**

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.serialise.toUint
import java.net.URL
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.*
@@ -48,6 +49,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
basegame
"""
val FIXED_LATEST_DOWNLOAD_LINK = URL("https://github.com/curioustorvald/Terrarum/releases/latest")
/**
*
*
@@ -66,12 +69,29 @@ basegame
* e.g. 0x02010034 will be translated as 2.1.52
*
*/
const val VERSION_RAW: Long = 0x0000_000004_000000
const val VERSION_RAW: Long = 0x0000_000004_000002
// Commit counts up to the Release 0.3.0: 2259
// Commit counts up to the Release 0.3.1: 2278
// Commit counts up to the Release 0.3.2: 2732
// Commit counts up to the Release 0.3.3: 3020
// Commit counts up to the Release 0.4.0: 3631
// Commit counts up to the Release 0.4.1: 3678
// Commit counts up to the Release 0.4.2: 3762
val DEV_CYCLE: Map<String, Long> = mapOf(
"Alpha" to 0x0000_000004_000000,
"Beta" to 0x0000_FFFFFF_000000,
)
val VERSION_NUMBER: String = String.format(
"%d.%d.%d",
VERSION_RAW ushr 48,
(VERSION_RAW and 0xffff000000L) ushr 24,
VERSION_RAW and 0xffffffL
)
private val DEV_CYCLE_LIST_SORTED = DEV_CYCLE.toList().sortedBy { it.second }
val CURRENT_DEV_CYCLE: String? = DEV_CYCLE_LIST_SORTED.map { it.first to VERSION_RAW - it.second }.firstOrNull { it.second >= 0L }?.first
// val VERSION_SNAPSHOT = Snapshot(0) // for normal dev
// val VERSION_SNAPSHOT = ForcedSnapshot("24w07d") // for snapshot release
@@ -79,6 +99,70 @@ basegame
const val VERSION_TAG: String = ""
val VERSION_STRING: String
get() {
val major = if (VERSION_RAW >= 0x0001_000000_000000)
VERSION_NUMBER
else if (CURRENT_DEV_CYCLE != null) {
val delta = VERSION_RAW - DEV_CYCLE[CURRENT_DEV_CYCLE]!!
CURRENT_DEV_CYCLE + " " + String.format("%d.%d", ((delta and 0xffff000000L) ushr 24) + 1, delta and 0xffffffL)
}
else
VERSION_NUMBER
val tag = if (VERSION_TAG.isNotBlank()) "-$VERSION_TAG" else ""
val snapshot = if (VERSION_SNAPSHOT == null) "" else " ($VERSION_SNAPSHOT)"
return "$major$tag$snapshot"
}
val VERSION_STRING_WITHOUT_SNAPSHOT: String
get() {
val major = if (VERSION_RAW >= 0x0001_000000_000000)
VERSION_NUMBER
else if (CURRENT_DEV_CYCLE != null) {
val delta = VERSION_RAW - DEV_CYCLE[CURRENT_DEV_CYCLE ?: ""]!!
CURRENT_DEV_CYCLE + " " + String.format("%d.%d", ((delta and 0xffff000000L) ushr 24) + 1, delta and 0xffffffL)
}
else
VERSION_NUMBER
val tag = if (VERSION_TAG.isNotBlank()) "-$VERSION_TAG" else ""
return "$major$tag"
}
fun convertVersionNumberToReadable(semverStr: String, snapshotObj: Snapshot? = null): String {
val numbers = semverStr.split('.')
val maj = numbers[0].toLong()
val min = numbers.getOrNull(1)?.toLong() ?: 0L
val pat = numbers.getOrNull(2)?.toLong() ?: 0L
val VERSION_RAW = maj.shl(48) or min.shl(24) or pat
val CURRENT_DEV_CYCLE: String? = DEV_CYCLE_LIST_SORTED.map { it.first to VERSION_RAW - it.second }.firstOrNull { it.second >= 0L }?.first
val major = if (VERSION_RAW >= 0x0001_000000_000000)
semverStr
else if (CURRENT_DEV_CYCLE != null) {
val delta = VERSION_RAW - DEV_CYCLE[CURRENT_DEV_CYCLE]!!
CURRENT_DEV_CYCLE + " " + String.format("%d.%d", ((delta and 0xffff000000L) ushr 24) + 1, delta and 0xffffffL)
}
else
semverStr
// val tag = if (VERSION_TAG.isNotBlank()) "-$VERSION_TAG" else ""
val snapshot = if (snapshotObj == null) "" else " (${snapshotObj})"
return "$major$snapshot"
}
fun convertVersionNumberToReadableShort(semverStr: String, snapshotObj: Snapshot? = null): String {
val s = convertVersionNumberToReadable(semverStr, snapshotObj)
return s.replace("Alpha", "α").replace("Beta", "β")
}
//////////////////////////////////////////////////////////
// CONFIGURATION FOR TILE MAKER //
// MAKE SURE THESE VALUES ARE UNIQUE IN THE SOURCE CODE //

View File

@@ -350,7 +350,7 @@ object TerrarumPostProcessor : Disposable {
private val defaultResStr = "Ingame UI Area"
private val currentResStr = "${App.scr.width}x${App.scr.height}"
private val safeAreaStr = "TV Safe Area"
private val versionStr = "Version ${App.getVERSION_STRING()}"
private val versionStr = "${App.getVERSION_STRING()}"
internal val thisIsDebugStr = "${App.GAME_NAME} ${if (App.IS_DEVELOPMENT_BUILD) "Development Build" else "Release"} $versionStr"
/**

View File

@@ -123,14 +123,22 @@ class AudioMixer : Disposable {
* Return oldest dynamic track, even if the track is currently playing
*/
fun getFreeTrackNoMatterWhat(): TerrarumAudioMixerTrack {
return getFreeTrack() ?: dynamicTracks.minBy { it.playStartedTime }
synchronized(this) {
return getFreeTrack() ?: dynamicTracks.minBy { it.playStartedTime }.also { it.checkedOutTime = System.nanoTime() }
}
}
/**
* Return oldest dynamic track that is not playing
*/
fun getFreeTrack(): TerrarumAudioMixerTrack? {
return dynamicTracks.filter { it.trackingTarget == null && !it.isPlaying }.minByOrNull { it.playStartedTime }
synchronized(this) {
return dynamicTracks.filter { it.trackingTarget == null && !it.isPlaying }
.minByOrNull { maxOf(it.checkedOutTime, it.playStartedTime) }
.also {
it?.checkedOutTime = System.nanoTime()
}
}
}
var listenerHeadSize = BinoPan.EARDIST_DEFAULT; private set
@@ -144,6 +152,10 @@ class AudioMixer : Disposable {
return (headSize0 ?: 0f).times(scale).coerceAtLeast(BinoPan.EARDIST_DEFAULT)
}
private val millisecUnitTime = 100L // 48 * p, p is multiplied to compensate the time takes for writing samples
private val sleepMS = App.audioBufferSize / millisecUnitTime
private val sleepNS = (App.audioBufferSize / millisecUnitTime * 1000000).toInt() % 1000000
fun createProcessingThread(): Thread = Thread {
// serial precessing
while (processing) {
@@ -168,6 +180,8 @@ class AudioMixer : Disposable {
while (processing && !masterTrack.pcmQueue.isEmpty) {
masterTrack.adev!!.writeSamples(masterTrack.pcmQueue.removeFirst()) // it blocks until the queue is consumed
}
Thread.sleep(sleepMS, sleepNS)
}
// parallel processing, it seems even on the 7950X this is less efficient than serial processing...

View File

@@ -147,7 +147,7 @@ class AudioProcessBuf(val inputSamplingRate: Int, val audioReadFun: (ByteArray)
private val readBuf = ByteArray(fetchSize * 4)
init {
printdbg(this, "App.audioMixerBufferSize=${App.audioBufferSize}")
// printdbg(this, "App.audioMixerBufferSize=${App.audioBufferSize}")
}
private fun shift(array: FloatArray, size: Int) {

View File

@@ -103,6 +103,8 @@ class MixerTrackProcessor(bufferSize: Int, val rate: Int, val track: TerrarumAud
return newRead
}
var bufEmpty = true; private set
override fun run() {
// while (running) { // uncomment to multithread
/*synchronized(pauseLock) { // uncomment to multithread
@@ -196,7 +198,7 @@ class MixerTrackProcessor(bufferSize: Int, val rate: Int, val track: TerrarumAud
var samplesL1: FloatArray
var samplesR1: FloatArray
var bufEmpty = false
bufEmpty = false
// get samples and apply the fader
if (track.trackType == TrackType.MASTER || track.trackType == TrackType.BUS) {
@@ -379,15 +381,6 @@ class MixerTrackProcessor(bufferSize: Int, val rate: Int, val track: TerrarumAud
}
private fun <T> Queue<T>.removeFirstOrElse(function: () -> T): T {
return if (this.isEmpty) {
this.removeFirst()
}
else {
function()
}
}
class FeedSamplesToAdev(val bufferSize: Int, val rate: Int, val track: TerrarumAudioMixerTrack) : Runnable {
init {

View File

@@ -65,7 +65,7 @@ class TerrarumAudioMixerTrack(
internal val streamPlaying = AtomicBoolean(false)
var playStartedTime = 0L; internal set
var checkedOutTime = 0L; internal set
fun copyStatusTo(other: TerrarumAudioMixerTrack) {
other.pullNextTrack = this.pullNextTrack
@@ -162,6 +162,9 @@ class TerrarumAudioMixerTrack(
override fun equals(other: Any?) = this.hash == (other as TerrarumAudioMixerTrack).hash
fun stop() {
printdbg("TerrarumAudioMixerTrack $name", "Stop music (mixertrack=${this.name}, musictrack=$currentTrack)")
// printStackTrace("TerrarumAudioMixerTrack $name")
currentTrack?.reset()
streamPlaying.set(false)

View File

@@ -53,7 +53,7 @@ class OreCodex {
private fun setProp(modname: String, key: Int, record: CSVRecord) {
val prop = OreProp()
prop.id = "ores@$modname:$key"
prop.tags = record.get("tags").split(',').map { it.trim() }.toHashSet()
prop.tags = record.get("tags").split(',').map { it.trim().toUpperCase() }.toHashSet()
prop.item = record.get("item").let { if (it == null) "" else if (it.contains(':')) it else "$modname:$it" }
oreProps[prop.id] = prop

View File

@@ -1,10 +1,12 @@
package net.torvald.terrarum.blockproperties
import com.badlogic.gdx.files.FileHandle
import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.modulebasegame.gameactors.WireEmissionType
import net.torvald.terrarum.utils.CSVFetcher
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import org.apache.commons.csv.CSVRecord
@@ -17,9 +19,12 @@ import java.io.IOException
class WireCodex {
@Transient val wireProps = HashMap<ItemID, WireProp>()
@Transient private val nullProp = WireProp()
@Transient val wirePorts = HashMap<WireEmissionType, Triple<TextureRegionPack, Int, Int>>()
@Transient val wireDecays = HashMap<ItemID, Double>()
fun clear() {
wireProps.clear()
}
@@ -39,15 +44,15 @@ class WireCodex {
* @param module name of the module
* @param path to the "wires" directory, not path to the CSV; must end with a slash!
*/
fun fromModule(module: String, path: String) {
fun fromModule(module: String, path: String, blockRegisterHook: (WireProp) -> Unit) {
printdbg(this, "Building wire properties table for module $module")
try {
register(module, path, CSVFetcher.readFromModule(module, path + "wires.csv"))
register(module, path, CSVFetcher.readFromModule(module, path + "wires.csv"), blockRegisterHook)
}
catch (e: IOException) { e.printStackTrace() }
}
fun fromCSV(module: String, path: String, csvString: String) {
fun fromCSV(module: String, path: String, csvString: String, blockRegisterHook: (WireProp) -> Unit) {
printdbg(this, "Building wire properties table for module $module")
val csvParser = org.apache.commons.csv.CSVParser.parse(
@@ -57,10 +62,10 @@ class WireCodex {
val csvRecordList = csvParser.records
csvParser.close()
register(module, path, csvRecordList)
register(module, path, csvRecordList, blockRegisterHook)
}
private fun register(module: String, path: String, records: List<CSVRecord>) {
private fun register(module: String, path: String, records: List<CSVRecord>, blockRegisterHook: (WireProp) -> Unit) {
records.forEach {
setProp(module, it.intVal("id"), it)
}
@@ -73,9 +78,68 @@ class WireCodex {
val t = TextureRegionPack(ModMgr.getGdxFile(module, "$path$wireid.tga"), TILE_SIZE, TILE_SIZE)
/*return*/t
}
wireProps[id]?.let(blockRegisterHook)
}
CommonResourcePool.loadAll()
}
fun portsFromModule(module: String, path: String) {
printdbg(this, "Building wire ports table for module $module")
try {
registerPorts(module, path, CSVFetcher.readFromModule(module, path + "wireports.csv"))
}
catch (e: IOException) { e.printStackTrace() }
}
private fun registerPorts(module: String, path: String, records: List<CSVRecord>) {
val spriteSheetFiles = ArrayList<Pair<FileHandle, String>>()
val tempRecords = HashMap<WireEmissionType, Triple<String, Int, Int>>()
records.forEach {
val type = it.get("accepts")
val fileModule = it.get("fileModule")
val filePath = it.get("file")
val x = it.get("xpos").toInt()
val y = it.get("ypos").toInt()
val file = ModMgr.getGdxFile(fileModule, filePath)
val fileID = "wireport:$fileModule.${filePath.replace('\\','/')}"
spriteSheetFiles.add(file to fileID)
tempRecords[type] = Triple(fileID, x, y)
}
spriteSheetFiles.forEach { (file, id) ->
CommonResourcePool.addToLoadingList(id) {
TextureRegionPack(file, TILE_SIZE, TILE_SIZE)
}
}
CommonResourcePool.loadAll()
tempRecords.forEach { type, (fileID, x, y) ->
wirePorts[type] = Triple(CommonResourcePool.getAsTextureRegionPack(fileID), x, y)
}
}
fun wireDecaysFromModule(module: String, path: String) {
printdbg(this, "Building wire ports table for module $module")
try {
registerDecays(module, path, CSVFetcher.readFromModule(module, path + "decayconsts.csv"))
}
catch (e: IOException) { e.printStackTrace() }
}
private fun registerDecays(module: String, path: String, records: List<CSVRecord>) {
records.forEach {
val item = it.get("wireItemID")
val d = it.get("const").toDouble()
wireDecays[item] = d
}
}
fun getAll() = wireProps.values
@@ -134,6 +198,7 @@ class WireCodex {
prop.inputType = record.get("inputtype") ?: prop.accepts
prop.outputType = record.get("outputtype") ?: prop.accepts
prop.canBranch = record.boolVal("branching")
prop.tags = record.get("tags").split(',').map { it.trim().toUpperCase() }.toHashSet()
wireProps[prop.id] = prop
@@ -155,4 +220,8 @@ class WireCodex {
fun getAllWiresThatAccepts(accept: String): List<Pair<ItemID, WireProp>> {
return wireProps.filter { it.value.accepts == accept }.toList()
}
fun getWirePortSpritesheet(emissionType: WireEmissionType): Triple<TextureRegionPack, Int, Int>? {
return wirePorts[emissionType]
}
}

View File

@@ -24,4 +24,18 @@ class WireProp {
* Mainly intended to be used by third-party modules
*/
val extra = Codex()
@Transient var tags = HashSet<String>()
fun hasTag(s: String) = tags.contains(s)
fun hasAnyTagOf(vararg s: String) = s.any { hasTag(it) }
fun hasAnyTag(s: Collection<String>) = s.any { hasTag(it) }
fun hasAnyTag(s: Array<String>) = s.any { hasTag(it) }
fun hasAllTagOf(vararg s: String) = s.all { hasTag(it) }
fun hasAllTag(s: Collection<String>) = s.all { hasTag(it) }
fun hasAllTag(s: Array<String>) = s.all { hasTag(it) }
fun hasNoTagOf(vararg s: String) = s.none { hasTag(it) }
fun hasNoTag(s: Collection<String>) = s.none { hasTag(it) }
fun hasNoTag(s: Array<String>) = s.none { hasTag(it) }
}

View File

@@ -15,7 +15,7 @@ import org.apache.commons.codec.digest.DigestUtils
* - BE CRACKABLE (crackstation.net)
*
* Example passwords would be:
* aryll -> beedle -> ciela -> daruk -> ... -> linebeck -> mido -> navi -> ...
* aryll -> beedle -> ciela -> daruk -> epona -> ... -> linebeck -> mido -> navi -> ...
*
* Notes:
* do NOT put plaintext anywhere in the code (except for comments maybe)
@@ -36,7 +36,7 @@ internal object Authenticator : ConsoleCommand {
// println("auth passwd: '$pwd'")
// println("hash: $hashedPwd")
if ("c40232ae7b8020da3ab1449a015e7cc23f249a790856b63b1b69c6a5de019fed".equals(hashedPwd, ignoreCase = true)) {
if ("4a26c5cd64195c4a52d2e3770e56c1d0c65861d2a03b47f8ba5d25ca033b9c42".equals(hashedPwd, ignoreCase = true)) {
// beedle
val msg = if (a) "Locked" else "Authenticated"
Echo(msg)

View File

@@ -122,6 +122,8 @@ object AVKey {
const val __PLAYER_QUICKSLOTSEL = "__quickslotselection"
const val __PLAYER_WIRECUTTERSEL = "__wirecutterselection"
/** Double
* When using tool/arm/etc. how long action button is held, in milliseconds (Int)
* Or for NPCs, how long it has been waiting for next move

View File

@@ -3,6 +3,7 @@ package net.torvald.terrarum.gameactors
import net.torvald.random.HQRNG
import net.torvald.terrarum.App
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.App.printdbgerr
import net.torvald.terrarum.INGAME
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.audio.MusicContainer
@@ -50,6 +51,7 @@ abstract class Actor : Comparable<Actor>, Runnable {
enum class RenderOrder {
FAR_BEHIND, // wires
BEHIND, // tapestries, some particles (obstructed by terrain)
MIDDLE, // actors
MIDTOP, // bullets, thrown items
@@ -160,6 +162,10 @@ abstract class Actor : Comparable<Actor>, Runnable {
musicTracks[music] = track
musicTracks1.add(track.name)
track.stop()
track.trackingTarget = this
}
else {
printdbgerr(this, "Could not get a free track")
}
}
@@ -182,9 +188,9 @@ abstract class Actor : Comparable<Actor>, Runnable {
it.currentTrack = music
it.maxVolumeFun = { volume }
it.volume = volume
doSomethingWithTrack(it)
// it.play()
it.playRequested.set(true)
doSomethingWithTrack(it)
}
}
}

View File

@@ -23,6 +23,7 @@ import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
import net.torvald.terrarum.modulebasegame.gameactors.IngamePlayer
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
import net.torvald.terrarum.modulebasegame.ui.UIItemInventoryCellCommonRes.tooltipShowing
import net.torvald.terrarum.realestate.LandUtil
import net.torvald.terrarum.worlddrawer.CreateTileAtlas
import net.torvald.terrarum.worlddrawer.WorldCamera
@@ -97,6 +98,8 @@ open class ActorWithBody : Actor {
val mouseUp: Boolean
get() = hitbox.containsPoint((world?.width ?: 0) * TILE_SIZED, Terrarum.mouseX, Terrarum.mouseY)
@Transient protected val tooltipHash = System.nanoTime()
var hitboxTranslateX: Int = 0// relative to spritePosX
protected set
var hitboxTranslateY: Int = 0// relative to spritePosY
@@ -443,7 +446,7 @@ open class ActorWithBody : Actor {
fun setPosition(pos: Point2d) = setPosition(pos.x, pos.y)
fun setPosition(pos: Vector2) = setPosition(pos.x, pos.y)
fun setPositionFromCentrePoint(pos: Vector2) = setPosition(pos.x, pos.y + (hitbox.height) / 2)
/**
* ONLY FOR INITIAL SETUP
@@ -669,11 +672,15 @@ open class ActorWithBody : Actor {
feetPosTile.set(hIntTilewiseHitbox.centeredX.floorToInt(), hIntTilewiseHitbox.endY.floorToInt())
if (mouseUp && this.tooltipText != null) INGAME.setTooltipMessage(this.tooltipText)
if (mouseUp && tooltipText != null && tooltipShowing[tooltipHash] != true) {
INGAME.setTooltipMessage(tooltipText)
tooltipShowing[tooltipHash] = true
}
}
// make sure tooltip to disable even when the actor's update is paused at unfortunate time
if (!mouseUp && INGAME.getTooltipMessage() == this.tooltipText) INGAME.setTooltipMessage(null)
if (tooltipText == null || !mouseUp || flagDespawn) {
tooltipShowing[tooltipHash] = false
}
// isStationary = (hitbox - oldHitbox).magnitudeSquared < PHYS_EPSILON_VELO
isStationary = isCloseEnough(hitbox.startX, oldHitbox.startX) && // this is supposed to be more accurate, idk
@@ -887,7 +894,7 @@ open class ActorWithBody : Actor {
debug1("translate x by $t")
}
/* 4, 14 */ COLLIDING_RIGHT, COLLIDING_RIGHT or COLLIDING_UD -> {
val t = -newHitbox.endX.modTileDelta()
val t = -newHitbox.endX.modTileDelta() - PHYS_EPSILON_DIST // THE cheapest way to resolve right-sided phys bug
newHitbox.translatePosX(t); bounceX = true
debug1("translate x by $t")
}
@@ -972,7 +979,8 @@ open class ActorWithBody : Actor {
debug1("offendingTileWorldY=$offendingTileWorldY, offendingHitboxPointY=$offendingHitboxPointY")
val displacementAbs = Vector2(
(offendingTileWorldX - offendingHitboxPointX).abs(),
(offendingTileWorldX - offendingHitboxPointX).abs() +
if (selfCollisionStatus and COLLIDING_RIGHT != 0) PHYS_EPSILON_DIST else 0.0, // THE cheapest way to resolve right-sided phys bug
(offendingTileWorldY - offendingHitboxPointY).abs()
)
@@ -1856,6 +1864,23 @@ open class ActorWithBody : Actor {
}
}
fun drawTextureInGoodPosition(frameDelta: Float, texture: TextureRegion, batch: SpriteBatch, forcedColourFilter: Color? = null) {
if (world == null) return
val offsetX = 0f
val offsetY = 0f
val posX = hitbox.startX.plus(PHYS_EPSILON_DIST).toFloat()
val posY = hitbox.startY.plus(PHYS_EPSILON_DIST).toFloat()
drawBodyInGoodPosition(posX, posY) { x, y ->
val oldCol = batch.color.cpy()
batch.color = if (forcedColourFilter != null) forcedColourFilter else Color.WHITE
batch.draw(texture, x + offsetX, y + offsetY)
batch.color = oldCol
}
}
override fun onActorValueChange(key: String, value: Any?) {
// do nothing
}
@@ -1922,6 +1947,7 @@ open class ActorWithBody : Actor {
internal open fun flagDespawn() {
flagDespawn = true
tooltipShowing.remove(tooltipHash)
}
open fun getSpriteHead(): TextureRegion? {
@@ -2245,6 +2271,7 @@ open class ActorWithBody : Actor {
App.disposables.add(sprite)
App.disposables.add(spriteGlow)
App.disposables.add(spriteEmissive)
tooltipShowing.remove(tooltipHash)
}
}

View File

@@ -25,7 +25,7 @@ import kotlin.math.floor
class BlockMarkerActor : ActorWithBody(Actor.RenderOrder.OVERLAY, physProp = PhysProperties.MOBILE_OBJECT()), NoSerialise {
enum class MarkerMode {
FIXTURE_GHOST, BLOCK_MARKER
FIXTURE_GHOST, BLOCK_MARKER, HIDDEN
}
private val defaultSize = 16.0
@@ -45,12 +45,14 @@ class BlockMarkerActor : ActorWithBody(Actor.RenderOrder.OVERLAY, physProp = Phy
init {
this.isVisible = false
this.isVisible = true
renderOrder = Actor.RenderOrder.OVERLAY // for some reason the constructor didn't work
}
override fun drawBody(frameDelta: Float, batch: SpriteBatch) {
this.isVisible = true
if (isVisible) {
if (markerMode == MarkerMode.FIXTURE_GHOST) {
if (INGAME.actorNowPlaying != null) {
@@ -114,6 +116,16 @@ class BlockMarkerActor : ActorWithBody(Actor.RenderOrder.OVERLAY, physProp = Phy
ghost = null
setGhostColourNone()
hitbox.setDimension(TILE_SIZED, TILE_SIZED)
markerMode = MarkerMode.HIDDEN
}
fun hideMarker() {
unsetGhost()
}
fun showMarker(shape: Int) {
markerShape = shape
markerMode = MarkerMode.BLOCK_MARKER
}
fun setGhostColourNone() { ghostColour = Color.WHITE }

View File

@@ -1,26 +1,28 @@
package net.torvald.terrarum.gameactors
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.spriteanimation.SheetSpriteAnimation
import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.modulebasegame.TerrarumIngame
import net.torvald.terrarum.modulebasegame.gameactors.WireEmissionType
import net.torvald.terrarum.ui.Toolkit
import kotlin.math.cos
/**
* Created by minjaesong on 2024-03-05.
*/
interface InternalActor {
}
/**
* FIXME Constructor is super expensive
*
* Created by minjaesong on 2021-07-30.
*/
class WireActor : ActorWithBody, NoSerialise {
companion object {
val WIRE_NEARBY = arrayOf(
(+1 to 0), // tileR
(0 to +1), // tileB
(-1 to 0), // tileL
(0 to -1) // tileT
)
}
class WireActor : ActorWithBody, NoSerialise, InternalActor {
private constructor()
@@ -34,7 +36,6 @@ class WireActor : ActorWithBody, NoSerialise {
private var worldX = 0
private var worldY = 0
/**
* @param itemID must start with "wire@"
*/
@@ -60,34 +61,99 @@ class WireActor : ActorWithBody, NoSerialise {
(sprite as SheetSpriteAnimation).currentFrame = cnx
}
private fun getNearbyTilesPos(x: Int, y: Int): Array<Point2i> {
return arrayOf(
Point2i(x + 1, y),
Point2i(x, y + 1),
Point2i(x - 1, y),
Point2i(x, y - 1)
)
override fun updateImpl(delta: Float) {
}
private fun essfun0(x: Double) = -cos(Math.PI * x) / 2.0 + 0.5
private fun essfun(x: Double) = essfun0(x)
override fun drawBody(frameDelta: Float, batch: SpriteBatch) {
if (isVisible && sprite != null) {
BlendMode.resolve(drawMode, batch)
// signal wires?
if (WireCodex.wireProps[wireID]?.accepts == "digital_bit") {
val strength = world?.getWireEmitStateOf(worldX, worldY, wireID)?.x ?: 0.0
// draw base (unlit) sprite
batch.color = Color.WHITE
(sprite as SheetSpriteAnimation).currentRow = 0
drawSpriteInGoodPosition(frameDelta, sprite!!, batch, 0, Color.WHITE)
// draw lit sprite
val alpha = Color(1f, 1f, 1f, essfun(strength.coerceIn(0.0, 1.0)).toFloat())
(sprite as SheetSpriteAnimation).currentRow = 1
drawSpriteInGoodPosition(frameDelta, sprite!!, batch, 0, alpha)
}
else {
(sprite as SheetSpriteAnimation).currentRow = 0
drawSpriteInGoodPosition(frameDelta, sprite!!, batch, 0, Color.WHITE)
}
}
}
}
/**
* Created by minjaesong on 2024-03-07.
*/
class WirePortActor : ActorWithBody, NoSerialise, InternalActor {
private constructor()
constructor(id: ActorID) : super(RenderOrder.OVERLAY, PhysProperties.IMMOBILE(), id)
init {
setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, 0)
renderOrder = RenderOrder.OVERLAY
}
private var portID: WireEmissionType = ""
private var worldX = 0
private var worldY = 0
/**
*/
fun setPort(emissionType: WireEmissionType, worldX: Int, worldY: Int) {
setHitboxDimension(TILE_SIZE, TILE_SIZE, 0, 0)
if (portID != emissionType) {
WireCodex.getWirePortSpritesheet(emissionType)?.let { (sheet, x, y) ->
if (sprite == null) {
makeNewSprite(sheet).let {
it.delays = floatArrayOf(Float.POSITIVE_INFINITY,Float.POSITIVE_INFINITY,Float.POSITIVE_INFINITY,Float.POSITIVE_INFINITY)
it.setRowsAndFrames(1, 16)
}
}
else {
(sprite as SheetSpriteAnimation).let {
it.setSpriteImage(sheet)
}
}
(sprite as SheetSpriteAnimation).let {
it.currentFrame = x
it.currentRow = y
}
portID = emissionType
}
}
this.worldX = worldX
this.worldY = worldY
setPosition((worldX + 0.5) * TILE_SIZE, (worldY + 1.0) * TILE_SIZE - 1.0) // what the fuck?
}
override fun updateImpl(delta: Float) {
}
override fun drawBody(frameDelta: Float, batch: SpriteBatch) {
if (isVisible && sprite != null) {
if (WireCodex[wireID].accepts == "digital_3bits") {
// "digital_3bits" must come right after three wires it bundles
val rootID = wireID.substringBefore(':') + ":"
var row = 0
(WireCodex[wireID].numericID - 3 .. WireCodex[wireID].numericID - 1).forEachIndexed { index, it ->
val itemID = rootID + it
row = row or ((world?.getWireEmitStateOf(worldX, worldY, itemID)?.isNotZero == true).toInt() shl index)
}
(sprite as SheetSpriteAnimation).currentRow = row
}
else {
(sprite as SheetSpriteAnimation).currentRow = (world?.getWireEmitStateOf(worldX, worldY, wireID)?.isNotZero == true).toInt()
}
if (isVisible && sprite != null && (Terrarum.ingame!! as TerrarumIngame).selectedWireRenderClass.isNotBlank()) {
BlendMode.resolve(drawMode, batch)
drawSpriteInGoodPosition(frameDelta, sprite!!, batch)
}

View File

@@ -208,7 +208,7 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
}
}
terrarumIngame.uiContainer.forEach { it?.keyDown(keycode) } // for KeyboardControlled UIcanvases
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false) it.keyDown(keycode) } // for KeyboardControlled UIcanvases
// Debug UIs
if (keycode == Input.Keys.GRAVE) {
@@ -233,7 +233,7 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
terrarumIngame.uiQuickBar.setAsOpen()
}
terrarumIngame.uiContainer.forEach { it?.keyUp(keycode) } // for KeyboardControlled UIcanvases
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false) it.keyUp(keycode) } // for KeyboardControlled UIcanvases
// screenshot key
if (keycode == Input.Keys.F12) f12Down = false
@@ -243,27 +243,25 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
}
override fun keyTyped(character: Char): Boolean {
terrarumIngame.uiContainer.forEach { if (it?.isVisible == true) it.keyTyped(character) }
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false && it.isVisible) it.keyTyped(character) }
return true
}
private fun tTouchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
// don't separate Player from this! Physics will break, esp. airborne manoeuvre
if (!terrarumIngame.paused && !terrarumIngame.playerControlDisabled) {
// fire world click events; the event is defined as Ingame's (or any others') WorldClick event
if (terrarumIngame.uiContainer.map { if ((it?.isOpening == true || it?.isOpened == true) && it.mouseUp) 1 else 0 }.sum() == 0) { // no UI on the mouse, right?
// disable the IFs: the "unlatching" must happen no matter what, even if a UI is been opened
if (
terrarumIngame.actorNowPlaying != null &&
(button == App.getConfigInt("config_mouseprimary") ||
button == App.getConfigInt("config_mousesecondary"))) {
// if (!terrarumIngame.paused && !terrarumIngame.playerControlDisabled) {
// fire world click events; the event is defined as Ingame's (or any others') WorldClick event
// if (terrarumIngame.uiContainer.map { if ((it?.isOpening == true || it?.isOpened == true) && it.mouseUp) 1 else 0 }.sum() == 0) { // no UI on the mouse, right?
if (button == App.getConfigInt("config_mouseprimary")) {
terrarumIngame.worldPrimaryClickEnd(terrarumIngame.actorNowPlaying!!, App.UPDATE_RATE)
}
if (button == App.getConfigInt("config_mousesecondary")) {
terrarumIngame.worldSecondaryClickEnd(terrarumIngame.actorNowPlaying!!, App.UPDATE_RATE)
}
}
}
// }
// }
// pie menu
if (button == App.getConfigInt("control_mouse_quicksel")) {
@@ -271,7 +269,7 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
terrarumIngame.uiQuickBar.setAsOpen()
}
terrarumIngame.uiContainer.forEach { it?.touchUp(screenX, screenY, pointer, button) } // for MouseControlled UIcanvases
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false) it.touchUp(screenX, screenY, pointer, button) } // for MouseControlled UIcanvases
return true
}
@@ -289,17 +287,17 @@ class IngameController(val terrarumIngame: TerrarumIngame) : InputAdapter() {
it.actorValue.set(AVKey.__PLAYER_QUICKSLOTSEL, selection fmod UIQuickslotBar.SLOT_COUNT)
}
}
terrarumIngame.uiContainer.forEach { it?.scrolled(amountX, amountY) }
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false) it.scrolled(amountX, amountY) }
return true
}
private fun tTouchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean {
terrarumIngame.uiContainer.forEach { it?.touchDragged(screenX, screenY, pointer) }
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false) it.touchDragged(screenX, screenY, pointer) }
return true
}
private fun tTouchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
terrarumIngame.uiContainer.forEach { it?.touchDown(screenX, screenY, pointer, button) }
terrarumIngame.uiContainer.forEach { if (it?.justOpened == false) it.touchDown(screenX, screenY, pointer, button) }
// pie menu
if (button == App.getConfigInt("control_mouse_quicksel")) {

Some files were not shown because too many files have changed in this diff Show More