4 ms·
This is unfortunately a classic example of mixing data with execution. Data is easy to understand and manipulate. Execution is much harder because you don't kno
by CyberDildonics 2y ago
This is unfortunately a classic example of mixing data with execution. Data is easy to understand and manipulate. Execution is much harder because you don't know what it produces without executing it.
Inventing a language is the third step and even worse, because you not only have execution instead of data, but you wipe out the entire ecosystem of tools, libraries, fragments and knowledge and start all over again.
- anonymoushn 2y agoDefining the behavior of enemies and bullets in a shmup is programming. I'm not sure how you want it to be done without the programming part. Could you maybe show us?
- CyberDildonics 2y agoDefining the behavior of enemies and bullets in a shmup is programming. Says who? And for what definition of programming? I'm not sure how you want it to be done without the programming part. Maybe you should point out the parts that can't be static data. Even branching, triggers or graphs could be straight data. Which parts needs loops, state and computation?
- YurgenJurgensen 2y agoOkay, let’s see your data-only implementation of “shoot n fast homing projectiles in a burst that takes a total of a third of a second where n is the number of times this attack has been performed in this phase at a location where the player was one third of a second ago.” I guess you could accomplish this with invisible bullets and making bullets targetable, but at that point, you’re just creating state and loops and pretending you’re not.
- CyberDildonics 2y agoTime: 0.3, Burst: true, Count: $phase, Location: $playerXYZ, LocationTime: -0.3
- anonymoushn 2y agoI suppose now the engine evaluates all of the Locations that any pattern could ask for every frame (or more often?) so it can store a buffer of past values, all so we could avoid writing aim() and then wait(). Then we write a new class or add new members to our class every time we want to do anything even slightly different. For example we'll have two members for doing a fixed angular and temporal step between bullets, then another for controlling the number of volleys of a fixed number of simultaneous bullets with fixed angular and temporal steps between them, then a couple more for controlling linear increases and decreases in the volley count, then when implementing Border of Wave and Particle we may as well add quadratic terms to all of the above (although we will only need one of them). Later we'll realize that our linear step-up-and-down knob doesn't actually differentiate between these sorts of things: e . . . . . . . . . e . . . . . . . . . e . . . . . . . . . so we'll turn it into two knobs or add some hack that lets us start adding angular increments after a delay in the middle of a single non-programming data-command. To allow some enemies to aim some single bullets to the left or the right of the player, we'll just add an arithmetic expression evaluator to our location member too :)
- CyberDildonics 2y agoI suppose now the engine evaluates all of the Locations that any pattern could ask for every frame Is that what the custom language is doing? Why would that be necessary? Someone asked the question and I answered. Even if you wanted to write new stuff, why not just use lua?
- anonymoushn 2y ago> Is that what the custom language is doing? Why would that be necessary? Sorry, I guess instead I should ask "How does your engine fire at locations that are evaluated in the past?" One way is to keep a queue. Honestly this whole business of targeting locations in the past is not a dealbreaker to me. I don't know of games that need it. It's sufficient to implement this sort of delay by spawning some non-damaging thing under the player and having it spawn bullets later, or aiming at some time and then firing later. > Even if you wanted to write new stuff, why not just use lua? I listed some reasons here: https://news.ycombinator.com/item?id=41257693 https://news.ycombinator.com/item?id=41257693
- anonymoushn 2y agoMost of the patterns in the demo have loops. If you make a "repeat data object" with a "bullet firing action" in it, how would you differentiate that from a loop?