Code Monkey home page Code Monkey logo

tis-3d's People

Contributors

3tusk avatar asiekierka avatar ds84182 avatar esotericist avatar fnuecke avatar grenland38 avatar hydos avatar olliroxx avatar ramidzkh avatar timovveen avatar uquark avatar vexatos avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tis-3d's Issues

Timer module to allow waiting for a specifiable amount of time

Reads values from all sides, sets the internal timer to the specified value. Once the timer has reached zero, a value will be made readable on all sides. So to wait for the timer one would just try to read from it. Interrupts obviously being possible by using an execution module with MOV ANY ?.

Using milliseconds would waste a lot of precision, as the timer would be bound to ticks... so it'll probably just use ticks with some made up in-character explanation like hardware limitations.

Jenkins autobuild

It would be quite nice if there were dev builds of this mod on the ci.cil.li Jenkins.

Visual bug if you break the connection to the controller

If you apply a redstone signal to the controller and break the casing that connects to the controller it looks like the tis is still turned on, but it doesn't execute commands.
The modules also doesn't update if you put the casing back, only if you remove the redstone signal from the controller after replace the missig casing.


In this picture I removed the casing above the Keypad Module

Write ingame manual

Need an ingame manual in book form documenting the functionality of the mod, as well as the opcodes and such.

Ensure IR packets don't clump up

Since they're entities and entities aren't updated in the outermost ring of loaded chunks, need to make sure they don't clump up there. Currently that's theoretically possible if fired from a chunkloaded 3x3 area, for example.

Something like an (unpersisted) list of live packets in the IR module should do the trick.

[1.8.8] Crash when right-clicking Execution Module with empty Code Bible

On 1.8.8, right-clicking an Execution Module with an empty Code Bible results in the immediate termination of the game.

Crashlog

Stacktrace:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_66]
    at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_66]
    at li.cil.tis3d.common.item.ItemBookCode$Data.getProgram(ItemBookCode.java:145) ~[ItemBookCode$Data.class:?]
    at li.cil.tis3d.common.module.ModuleExecution$SourceCodeProviderBookCode.codeFor(ModuleExecution.java:458) ~[ModuleExecution$SourceCodeProviderBookCode.class:?]
    at li.cil.tis3d.common.module.ModuleExecution.onActivate(ModuleExecution.java:180) ~[ModuleExecution.class:?]
    at li.cil.tis3d.common.block.BlockCasing.func_180639_a(BlockCasing.java:158) ~[BlockCasing.class:?]
    at net.minecraft.client.multiplayer.PlayerControllerMP.func_178890_a(PlayerControllerMP.java:377) ~[bda.class:?]
    at net.minecraft.client.Minecraft.func_147121_ag(Minecraft.java:1491) ~[ave.class:?]
    at net.minecraft.client.Minecraft.func_71407_l(Minecraft.java:2036) ~[ave.class:?]
    at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1024) ~[ave.class:?]
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:349) [ave.class:?]
    at net.minecraft.client.main.Main.main(SourceFile:124) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66]
    at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:310) [NewLaunch.jar:?]
    at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:395) [NewLaunch.jar:?]
    at org.multimc.EntryPoint.listen(EntryPoint.java:170) [NewLaunch.jar:?]
    at org.multimc.EntryPoint.main(EntryPoint.java:54) [NewLaunch.jar:?]

Forge 1638
TIS-3D 0.2.0.25

Bug: Z-fighting when modules are displayed as items on block surfaces

Quite simply, if you use something to display blocks as items on another block (Bibliocraft shelves in fast mode, Storage Drawers drawers in fast mode, Applied Energistics 2 displays), using them to show TIS-3D modules will result in the module Z-fighting with itself.

Have a screenshot:
2016-04-09_18 17 48

Keypad module

Keypad module returns 0 on a read even if no buttons are pressed.

Illegal color values are not handled gracefully

... and I have the crash report to prove it:
http://pastebin.com/Db3qHkCf
The following code, given an appropriately placed display module, will crash like that.

MOV 255 UP
MOV 2 UP
MOV 2 UP
MOV 8 UP
MOV 8 UP

I think the problem is

  1. masking the value with 0xFF here and casting it can produce negative byte values. Wouldn't just casting and letting it overflow do the same?
  2. the % operator used here actually being the remainder, not the modulus. This will produce negative results for negative inputs.

I'm using v0.5.0.37 for MC 1.7.10

Book limits the linenumber

A Book and quill can only handle 13 lines per page and the TIS only takes the first page.
It's not possible to program 20 lines

Don't send state info on execution module if invisible

That is, if there's a fully opaque cube in front of an execution module, don't send state changes, but do send one when that block breaks to get in sync again. This could avoid sending a lot of unnecessary but frequent packets.

Allow modules to communicate if cornerpiece is the controller

While it's not really a bug, it should be an implementation detail and right now it's just confusing:

1 C
  2

Given 1 is a casing with a downwards facing module, C is a controller and 2 is a casing with a right facing module, right now the two modules can't communicate, because usually that communication would be handled by the casing in the corner (where the controller sits). This will need special handling to have them communicate directly instead. Doing that would also reduce the delay introduced by such a setup, though, which I guess is a good thing anyway.

Audio module

Built using a noteblock, emits noteblock sounds based on input value (no square wave gen - at least for now).

Something like 0xFF00 masks pitch, 0x00FF masks note type or so.

Serial port module

Now I was half-way into an essay justifying an "interface module", but the more I tried to nail it down the more it felt like unnecessarily fuzzying things up. So here's an alternative idea: to make integration easier, don't require people to have their own full item implementation and so on.

Instead, allow registering a module by specifying a texture (the overlay being used) and a constructor callback (of the module class). Then internally create and register a new item, and create a provider for it using the specified constructor. Probably return the created item to allow further initialization of it (e.g. set name, change creative tab, ...).

Obviously, this should be called in the preInit phase (since that's when items should be registered).

Sounds reasonable? Am I forgetting something?

Orientation for top/down facing execution modules

Allow executions to face in the four directions when on the top or bottom of a casing, orientate based on player orientation when placing them. Will make using ports a lot more re-usable and intuitive.

Add onInstalled and onUninstalled to Module

Those methods would take the item stack used for installation / the itemstack you get back when uninstalling a module as a parameter. This would allow initializing from the stack's NBT data as well as writing own data back to the ItemStack for persistence.

Re-test all node communcation scenarios

Common

  • Execution -> Redstone
  • Redstone -> Execution
  • Execution -> Stack
  • Stack -> Execution
  • Random -> Execution
  • Random -> Redstone
  • Random -> Stack

Special case

  • Redstone -> Stack / Stack -> Redstone (short-circuit)

Forwarders

  • Execution -> Forwarder -> Redstone
  • Redstone -> Forwarder -> Execution
  • Execution -> Forwarder -> Stack
  • Stack -> Forwarder -> Execution
  • Random -> Forwarder -> Execution
  • Random -> Forwarder -> Redstone
  • Random -> Forwarder -> Stack

For all faces / orientations.

Suggestion: Mechanism to break implicit connection between modules

If you're doing work with bundled redstone modules, it's easy to separate adjacent bundled cable segments (either via color or simply using microblocks to divide them), but the modules constantly pass their state when adjacent.

This makes it impossible to use two bundled redstone modules next to each other, which hardly seems fitting.

Alternately, if things like the redstone module or bundled redstone module explicitly didn't propagate their values to adjacent similar modules, that would do the job as well. I'm not actually sure when someone might want that behavior, but I imagine someone at some point will build something reliant on that behavior, because that's how these kinds of systems roll. :D

Consider adding the T?? identifiers to modules

I.e. mention the identifier in the tooltip. E.g. T21 for execution, T30 for stack. Maybe T40 for redstone, T41 for IR? (i.e. make 4x transfer/data i/o). Would random fall into 2x or 3x? Hmm.

Actually, might be better to have a system where arbitrary 4x+ numbers are assigned to registered providers. Would avoid conflicting naming if there should be any addons. I.e. allow addons to query the identifier for their module, if they're interested. Hmhmhm.

Crash with Redlogic

Trying to use the Bundled Redstone Module with a Redlogic bundled cable crashes the game.

log here

To replicate: Place controller and casing block. On the casing, place a Bundled Redstone Module. Next to bundled module, place a Redlogic bundled cable with at least one signal nonzero. Activate the controller, and the game will immediately crash.

This problem does not seem to occur with freestanding bundled cables, but I cannot extract values from them either so that is probably just because TIS-3D does not recognize them as bundled cables.

[Idea] Make sidebar of keypad module optionally an "enter" key

My idea was to make the blue bar on the side of the keypad some kind of enter key, which maybe could be enabled/disabled by writing a 1 or a 0 to the keypad or some simple crafting recipe (keypad + button?). Maybe it would output -1 when it is pressed.

Keypad module

To allow inputting numbers that can then be read by other modules.

Display module

Probably something similar to the display modules in TIS-100.

Display module insufficiently esoteric

Drawing entire rectangles individually with a single call? Come on, where's your spirit of adventure?

Why not simply use something like the original TIS-100 display protocol, starting at an X and Y coordinate and drawing a horizontal sequence of colors until you hit a stop?

Yes, it would be clunky and difficult to use, but I thought that was sort of the point - to create an extremely flexible computing system more powerful than regular redstone, which nonetheless required solving TIS-100-like puzzles to use, because they naturally arose through the peculiar architecture. There really aren't enough mods that are puzzles to use in and of themselves.

Crash on execution

ISSUE: When I programmed the blocks and flick the lever for execution the game crashes!
My Stacktrace:
Time: 03.01.16 13:32
Description: Ticking block entity

java.lang.NoSuchMethodError: net.minecraft.block.Block.doesSideBlockRendering(Lnet/minecraft/world/IBlockAccess;Lnet/minecraft/util/BlockPos;Lnet/minecraft/util/EnumFacing;)Z
at li.cil.tis3d.api.prefab.module.AbstractModule.isVisible(AbstractModule.java:162)
at li.cil.tis3d.common.module.ModuleExecution.sendPartialState(ModuleExecution.java:343)
at li.cil.tis3d.common.module.ModuleExecution.step(ModuleExecution.java:122)
at li.cil.tis3d.common.machine.CasingImpl.stepModules(CasingImpl.java:116)
at li.cil.tis3d.common.tile.TileEntityCasing.stepModules(TileEntityCasing.java:163)
at li.cil.tis3d.common.tile.TileEntityController$$Lambda$83/205223229.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at li.cil.tis3d.common.tile.TileEntityController.step(TileEntityController.java:468)
at li.cil.tis3d.common.tile.TileEntityController.func_73660_a(TileEntityController.java:306)
at net.minecraft.world.World.func_72939_s(World.java:1716)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:544)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:701)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:605)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:152)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:481)
at java.lang.Thread.run(Thread.java:745)

A detailed walkthrough of the error, its code path and all known details is as follows:

-- Head --
Stacktrace:
at li.cil.tis3d.api.prefab.module.AbstractModule.isVisible(AbstractModule.java:162)
at li.cil.tis3d.common.module.ModuleExecution.sendPartialState(ModuleExecution.java:343)
at li.cil.tis3d.common.module.ModuleExecution.step(ModuleExecution.java:122)
at li.cil.tis3d.common.machine.CasingImpl.stepModules(CasingImpl.java:116)
at li.cil.tis3d.common.tile.TileEntityCasing.stepModules(TileEntityCasing.java:163)
at li.cil.tis3d.common.tile.TileEntityController$$Lambda$83/205223229.accept(Unknown Source)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at li.cil.tis3d.common.tile.TileEntityController.step(TileEntityController.java:468)
at li.cil.tis3d.common.tile.TileEntityController.func_73660_a(TileEntityController.java:306)

-- Block entity being ticked --
Details:
Name: controller // li.cil.tis3d.common.tile.TileEntityController
Block type: ID #236 (tile.tis3d.controller // li.cil.tis3d.common.block.BlockController)
Block data value: 0 / 0x0 / 0b0000
Block location: World: (243,65,273), Chunk: (at 3,4,1 in 15,17; contains blocks 240,0,272 to 255,255,287), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Actual block type: ID #236 (tile.tis3d.controller // li.cil.tis3d.common.block.BlockController)
Actual block data value: 0 / 0x0 / 0b0000
Stacktrace:
at net.minecraft.world.World.func_72939_s(World.java:1716)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:544)

-- Affected level --
Details:
Level name: TIS
All players: 1 total; [EntityPlayerMP['PrinzJuliano'/174, l='TIS', x=240,13, y=65,00, z=273,70]]
Chunk stats: ServerChunkCache: 1167 Drop: 0
Level seed: 2995479536448582658
Level generator: ID 00 - default, ver 1. Features enabled: true
Level generator options:
Level spawn location: 228,00,64,00,252,00 - World: (228,64,252), Chunk: (at 4,4,12 in 14,15; contains blocks 224,0,240 to 239,255,255), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Level time: 3556 game time, 3556 day time
Level dimension: 0
Level storage version: 0x04ABD - Anvil
Level weather: Rain time: 19285 (now: false), thunder time: 64095 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:701)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:605)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:152)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:481)
at java.lang.Thread.run(Thread.java:745)

-- System Details --
Details:
Minecraft Version: 1.8.8
Operating System: Windows 7 (amd64) version 6.1
Java Version: 1.8.0_25, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 253841512 bytes (242 MB) / 686305280 bytes (654 MB) up to 1060372480 bytes (1011 MB)
JVM Flags: 6 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx1G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M
IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
FML: MCP 9.18 Powered by Forge 11.15.0.1591 5 mods loaded, 5 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAA mcp{9.18} Minecraft Coder Pack
UCHIJAAAA FML{8.0.99.99} Forge Mod Loader
UCHIJAAAA Forge{11.15.0.1591} Minecraft Forge
UCHIJAAAA JEI{2.12.0.49} Just Enough Items
UCHIJAAAA tis3d{0.8.1.76} TIS-3D
Loaded coremods (and transformers):
GL info: ERROR RuntimeException: No OpenGL context found in the current thread.
Profiler Position: N/A (disabled)
Player Count: 1 / 8; [EntityPlayerMP['PrinzJuliano'/174, l='TIS', x=240,13, y=65,00, z=273,70]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'

Infrared module

To allow sending values wirelessly and allow different "computers" to communicate. Implementation idea: send entities for sent values, this would more or less magically make sending data through portals work, and give collision detection for free. Very limited range (a couple of chunks).

Consider adding some more opcodes, specifically bitwise

To make things a little more... practical in the context of Minecraft, consider adding bitwise opcodes like XOR, which could be a sane middle ground between what's in now (pure TIS-100) and adding comparatively high level stuff like MUL or DIV.

Command for an admin key

Can you please add a admin command that gives the player a master key that can unlock all casings.

API: Allow creating infrared packets

Add a way to the API to fire infrared packets (so people don't have to implement their own entity if they want to send IR packets to TIS-3D).

Advanced programming tool

Something that allows writing and managing programs more comfortably than having to have a written book for each program. Possibly combined with the manual? I imagine something with syntax checking, highlighting the erroneous location (similar to how it's highlighted on the execution modules now), and a way to sort and categorize programs, have a selected on to program modules with, and a way to copy code from a module into a new program entry.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.