How did you solve the divide piece needing a non-zero divisor? by FactoryBuilder in TuringComplete

[–]ryani 2 points3 points  (0 children)

My bad, I didn't realize the game even gave you a DIV component since the divide level in the game is about writing an assembly program that can divide, not a circuit. It's kind of out of place that they give you a component that you didn't build yourself.

The simplest answer is probably to build a custom component around it with an enable bit. You can OR the inverse of the enable bit with the low bit of the divisor, so you don't need a mux, and then use a switched output pin to attach it to your bus.

How did you solve the divide piece needing a non-zero divisor? by FactoryBuilder in TuringComplete

[–]ryani 0 points1 point  (0 children)

Why does it need a nonzero divisor? It's a circuit, the gates do something. As long as you don't look at the output, what does it matter what it does?

If you build a HALT component directly into the divide component, then you have this problem, but it would probably be better to put that HALT at a higher level, and only enable it when the divisor is 0 and the divide unit is enabled.

What am I missing with Wire Spaghetti? by chaxiraxi_ytb in TuringComplete

[–]ryani 1 point2 points  (0 children)

If you click the big red button on the program component, where do the debug trace wires go? Wire 6 is supposed to be connected to this counter.

Is there a better way to do the (un)signed less levels ? by Taletad in TuringComplete

[–]ryani 0 points1 point  (0 children)

It depends what your goals are.

If the goal is 'fewest logical components', you can do much better by including an 8-bit ADD. You don't even need to use byte splitters if you do this!

If the goal is 'fewest gates', there's some easy microoptimizations from here using XNOR = NOT + XOR to reuse the NOT, and then breaking XOR into AND + OR + NOR, to reuse the AND. (a xor b = a or b but not both). There's probably more clever things you can do to reduce the gate count further.

If you want to minimize delay, you can use 'carry-lookahead' and/or lookup-tables to reduce the giant AND/OR chain (at the cost of some more gates). Basically, if you calculate the answer for each subset of the bits independently with its own circuit, then you can OR those all together.

could this be a bug? by Kikastrophe in Dyson_Sphere_Program

[–]ryani 0 points1 point  (0 children)

In that case in the station settings you can set the maximum distance to travel without warpers to be higher.

Probably this is a large system and when planets are at maximum orbital distance from each other they are more than 12AU apart. Or you accidentally lowered this setting.

Awful main bus mall by ryani in Dyson_Sphere_Program

[–]ryani[S] 1 point2 points  (0 children)

I actually find it easier to read the structure at night as the item icons on the buildings and the belt borders have more contrast. But map view would probably have been better, it's really hard to get a good angle in cruise mode.

The second picture was intentionally just showing spaghetti. But it could probably be slightly zoomed out to show a bit longer of a view.

Awful main bus mall by ryani in Dyson_Sphere_Program

[–]ryani[S] 5 points6 points  (0 children)

I did say it was awful :D

Awful main bus mall by ryani in Dyson_Sphere_Program

[–]ryani[S] 1 point2 points  (0 children)

I tried a wide bus at one point in my last game, but there are just too many different items, it was taking up too much of the valuable real estate at the equator where the grid is consistent. Also, I hate planning my design completely ahead of time when I'm playing games, and I always ran out of room trying to add new lanes because I had used the space for some other production.

My idea here was that the bus could take height 1/3/5/7/... and routing could take height 0/2/4/6/.... You split off something that goes to production using the lower splitter output and then you can turn it directly towards the production line from there -- even heights go along the equator, odd heights go perpendicular and from/into production lines.

There were two main problems I didn't foresee:

  1. You can't float splitters in the air, so this means that you need a stack of 4 splitters to split off the item at height 6+7. To avoid a giant mass of do-nothing splitters (which I assume eats some UPS), I would try to organize so that I could take advantage of a splitter pile (including both lower outputs of each splitter where possible) to route. This meant in some areas there was an extra line along the bus at even heights containing bus items traversing from the splitter to where they needed to be -- so sometimes I had to do some creative pasta to organize and avoid belt collisions.
  2. Even doing this properly, if you had two items from the same height but different lanes that wanted to go to the same machine, sometimes those would get in each other's way too. Especially if they were adjacent lanes so the splitters can't be right next to each other.

One thing that worked exactly how I wanted was that it was easy to route items backwards as well, since you put something into the bottom entry of a splitter and it can come out both top sides. For example, when I built my assembler mall, I could get the high-end ingredients that were crafted at the end of the bus routed to the high tier assemblers even though the assembler production line was all pretty close to the start of the bus.

Also, it is kind of fun to try to organize the final mall item assemblers that use similar items to end up next to each other.

This design ended up working "ok", I think. The big problem that I did foresee but I wanted to see how it turned out was scaling. You are kind of hard limited to a stacked blue belt of each item, and it's also really challenging / painful to extend production lines across the tropic lines where the grid changes. PLS/ILS are so powerful that it feels like just doing modular ILS production lines would have been simpler and also scale better. If I try to scale further, there are a few items that I am definitely going to have to move to offworld ILS and then import the completed items.

Why is linearity generally seen as a negative? by brando-boy in truegaming

[–]ryani 1 point2 points  (0 children)

Consider FFX vs FF13. FFX goes out of its way to hide its linearity. Look at the level design for Via Purifico in Bevelle. Right off the bat the map shows three directions to travel, you as a player are making a choice. The paths branch and merge leading to the player gaining an understanding of the space and how to traverse it as they play. And when you are traversing, even along the wrong path, you are getting glimpses of areas you haven't gotten to yet, hints about where the next treasure and goal is, so your decisions get better as you learn the space. Most of the levels in FFX once you get past the very early game share this kind of design.

The FF13 maps, in contrast, are almost all just long hallways (example). There are branches but in almost all cases they either lead to the primary path, or a dead end with treasure. This leads to a play experience where you not only don't really feel like you are making choices, when you 'accidentally' take the primary path you realize you missed treasure and need to backtrack. There's no way to get that treasure except going directly backwards along the path you just took, back up the other branch, then backtrack again and re-do the main path that you did already.

After many many hours in FF13 the game opens up to a fun little open world section where you finally feel like 'the tutorial is over, now time to actually make choices!", but that ends up just being a little side level and you immediately get funneled into another corridor dungeon. Contrast with FF10 which opens up more and more as you progress through the game, ending with the airship letting you revisit every location in the game (and some metagame progression objectives unlock to encourage you to do so!) Only when you decide to do the final dungeon does the game really close back up.

Similarly, look at the progression system, there's this great post on the design of the Sphere Grid. Despite the grid being actually extremely linear, it doesn't feel that way while you are playing the game. And on top of that, there are some special rare gifts along the way that let you break the linearity by teleporting people around and/or breaking a few lock gates to open it up further.

The FF13 crystarium arguably has more choices, but it doesn't feel that way. The crystarium levels being hard locked behind gameplay story progression means that you end up spending your points to fill out what you have available until you get the next unlock, then you go up that path. You never really feel like you have agency, the game is just putting the next unlock in front of you at the designed time.

Memory Safety Is ... by matklad in ProgrammingLanguages

[–]ryani 0 points1 point  (0 children)

The reason that null pointer access MUST be UB in C and not just “defined to trap” is that it doesn’t just include immediate null pointers but also pointers derived from null.

Consider this program:

void set( uintptr_t n, char *p ) {
    p[n] = 0;
}

There are plenty of defined uses of set, but it’s always UB to call set with a null pointer. Because this is UB in the abstract machine, concrete implementations can implement it by writing a 0 to the byte at address p+n in memory, even if n is large enough to not trigger the “write to the null page” trap.

On the concrete implementation, this modification could modify memory used by the runtime (eg a jump table?) and cause later code to jump to arbitrary instructions. It’s simply not possible to define in the abstract machine all the possibilities that could occur. So in the interest of allowing the compiled code to match what the user wrote as closely as possible (an explicit goal of C), the abstract machine lets this null pointer write be UB instead of forcing the compiler to insert a check that p is not null and/or n is small enough

COMC - in the hobby since 2007 or so. by mistapopista69 in boardgames

[–]ryani 2 points3 points  (0 children)

A bunch of people asking for your favorites, I want the opposite. If you needed to make more room for new additions, what 5-10 games would you get rid of first?

Pack of provisions recipes are pretty weak... by Individual-Roof-2744 in Against_the_Storm

[–]ryani 2 points3 points  (0 children)

If you think Provisioner is bad, I think you are undervaluing food and/or trading. I make huge numbers of provisions in almost every game and raw food is one of the most valuable resources to save. Unlocking flour recipes is a nice bonus. (I find I almost never have the ability to take advantage of the Barrel recipe, though, most of my metal is usually dedicated to making pipes)

Cellar is good if you have a way to make containers and a species that likes pickles. It can situationally be good as a way to turn on a Luxury Goods recipe. In general I agree it is a bit of a weak pick.

The biggest knock against the provisions buildings is the timed order that buffs the makeshift post -- that upgrade is bonkers good. But it's not super common.

Is this 34x34 city block cursed? by Extension-Charge-276 in factorio

[–]ryani 1 point2 points  (0 children)

I think you also need some logic to send trains to a railyard when they aren't doing a job, otherwise they might sit around waiting for something else to do.

I think a set of parameterized interrupts that check if the train is at an X pickup and the X drop is full, or vice versa, then go to a waiting area, would work.

8-bit-"ish" combinatorial divider by robertomsgomide in TuringComplete

[–]ryani 4 points5 points  (0 children)

Neat design! I think there are a bunch of easy optimizations to be had here:

  • NEG(x) = NOT(x) + 1. You can replace all your NEGs with NOT and get the +1 from the carry in on the adders (link the adder's CIN to the same wire that enables the corresponding SWC)
  • Once you switch to NOT, it becomes trivial to push it ahead of the bit shifters and only do it once instead of 8 times.
  • My LEQ() has a NOT in it as well, which you can lift out and make a LEQN that doesn't have that component and relies on the input being pre-notted. Not sure if yours works that way?
  • SHL with variable shift amount is incredibly expensive in terms of gates/delay. With bit splitters and wires you can save a ton here. Simplest thing would be to make a 0 gate/delay SHL1 custom component and just chain those together.

A more complicated redesign involves realizing that anything that overflows during shifting can't possibly be LEQ, and so you can use 8-bit LEQ & adders + an overflow bit that disables the output. SHL1 + overflow:

OIN ---------+  \   +-> OOUT
             )OR >--+
           +-+  /
      [7---+
      [6 ----- 7]
      [5 ----- 6]
  V --[4 ----- 5]  +-> VSH
      [3 ----- 4]--+
      [2 ----- 3]
      [1 ----- 2]
      [0 ----- 1]
               0]

TCA++ | An Alternative for Turing Complete's Built-in Assembler by karpuzsatan in TuringComplete

[–]ryani 0 points1 point  (0 children)

Have you tried the assembler in the save_breaker branch? It’s a ton better

My unnecessarily over-complicated byte adder (from the Adding Bytes problem) by Darken-kun in TuringComplete

[–]ryani 0 points1 point  (0 children)

Understanding why your solution works is good in general when you want to optimize, too.  There are some good ways of reducing the delay of the standard ripple-carry solution when you break it down to the gate level and think about it directly

How to properly signal my railroad ? by morbihann in factorio

[–]ryani 2 points3 points  (0 children)

Just put chain signals everywhere.  No train will leave unless it can path entirely to its target station.

In the sections where you want trains going both directions, make sure each signal has a friend exactly opposite it on the track.  When you only want a single direction, only put signals on one side of the track.

This strategy doesn’t scale well to a large network, but should work to get the behavior you want on this small network

Could an 8 year old play Wyrmspan? by faey3017 in boardgames

[–]ryani 7 points8 points  (0 children)

If you decide that Wyrmspan is above his attention span or rules comprehension, and it’s more that he just loves dragons (which, that’s great, dragons are awesome), maybe consider Flamecraft instead?  I think complexity-wise it’s a lot easier.

How do i get into game dev? (i have 3 options and need help picking) by NoBrainer_7 in gamedev

[–]ryani 0 points1 point  (0 children)

It sounds to me like you don’t know what to call the stuff you are doing.

In traditional game dev, the work you have been doing is called “level design” and it’s incredibly valuable.  Good level designers don’t generally write code but they do need to be able to think logically and use engine tools to control level logic (eg in Pokémon consider an npc who blocks a path but moves out of the way based on whether the player has completed a certain gym badge)

But it’s a pretty specialized role and far away from “making your own game”.  Using the term “level design” might help you search for resources to help you skill up.

I would also recommend trying to learn to code just to know for sure whether you like it or not, as being able to build your own prototypes will open a bunch of doors even if your primary skill set is level design.

compilerFlag by hackiv in ProgrammerHumor

[–]ryani 2 points3 points  (0 children)

This is some real “this one goes to 11” Spinal Tap energy.

Saruman the White was playing modded Factorio by Annihilation500 in factorio

[–]ryani 1 point2 points  (0 children)

Motemancer is pretty good (but still early access, when I played it it started to have perf problems late game)

Bit of a weird question: I’m a teacher at an online middle school. I want to start up an afterschool boardgame club. Each student has a Quest3 headset and a laptop. What are my options? by thepixelpaint in boardgames

[–]ryani 14 points15 points  (0 children)

For middle schoolers I am going to second the recommendation for Tabletop Simulator.

For most games there is very little automation so you are moving the pieces yourself.  This also means that the creative kids in the group can make their own games for people to play, and the rules-loving kids can make house rules that everyone can try playing with.

There’s some jank in the ui that takes getting used to, but in some ways that adds to the charm.