Ludum Dare 48 April 24–27, 2021

any tips for a slow dev?

i've gotten to the point in my programming ability where i can create most of everything i want to create in a 2d game! which is why i'm participating in ludum dare this year!? but i've never developed anything in such a short time frame before. should i choose to do whatever's easiest to code for my first jam, or should i spend a lot of time on prototypes?? thanks!

Checking in! Round 3

Excited to participate again this time around!

Over-hyped!

Hyped to participate in my 4th LDjam. I have now been a part of over 15 jams but the Ludum Dare has become my absolute favorite!

Hope everyone has a fantastic time and are capable of publishing something before the end of the jam :D

If you are interested in checking out some of my previous jam projects you can take a look at https://gamejolt.com/@ThorGameDev/games

Almost there!

We're in the finally stretch now! Only eleven hours left until theme voting begins. I'm going to share my themes again, since my earlier post is very hard to get to now. Here they are:

New Perspective

This could be taken figuratively (a platformer where you change game rules) or literally (a Monument Valley-esque game)

Make It Count

(As I said before, a bullet heaven with one bullet)

Start From The End

(As I also said before, you beat the game, go back to the start)

Thanks for reading my suggestions! I may make a practice game on Newgrounds, so look out for that!

First time Unity for LD 48?

I love entering these game jams and have used tools like, libgdx, pygame and java from scratch to make simple 2d games. I've been thinking of trying out Unity for a while now. Do you think it's a good idea to use it for this LD without any prior Unity experience?

I don't mind ending up with a shitty looking game, I'm used to that (see image below) :p But I do want to be able to publish something in the end.

smoothinout.gif

Hey There!

Hey!, I am Mr. GoldenBee from youtube, I make Games, And this is my First Game Jam! I can Learn new things, I am so exited for it! :smile: :bee:

My 13th Ludum Dare

I've submitted an entry for twelve ludum dares so far. There are a few gaps where I either did not like the theme or wasn't feeling up to the challenge.

This year I intend to do an entry and will just as before try to do the best I can.

I'm sticking with Unity for my primary tool as it really does a lot of the heavy lifting. I have an archive of old projects and scripts I've tested to be my reference for some common scripts. I have a habit of focusing on presentation so I think I'll go for something minimalistic to be able to crank out the assets and focus more on the code and gameplay this time around.

Going to spend the next few weeks working on some game prototypes to get ready for the jam. I'd love to make a full release out of something for a change.

Use our Code #3: Nice Matrix Formatting

Writing WebGL engines involves doing a lot of linear algebra. Doing a lot of linear algebra involves making a lot of mistakes. Debugging the many mistakes involves a lot of console.log. So, through the inexorable march of implication, we arrive at the need for nice matrix string formatting.

The following code will produce strings like this: 2×2 Matrix [ 0.000, -1.000] [ 1.000, 0.000] when it is given TypedArrays with lengths that are square numbers. (This is a typical way to store matrices.) If you are writing an engine, this will hopefully save you a little time.

javascript matrixToString(array) { // Formats a square TypedArray matrix const n = Math.sqrt(this.a.length); // It better be a square matrix! const rows = []; let longest = 0; for (let row=0; row<n; ++row) { const slice = Array.from(array.slice(n*row,n*(row+1))); rows.push( slice.map(x => { const s = x.toFixed(3); if (longest < s.length) longest = s.length; return s; }) ); } const lines = [`${n}×${n} Matrix`]; for (const row of rows) { const line = []; for (const x of row) { line.push(' '.repeat(1 + longest - x.length) + x); } lines.push(`[${line.join(',')}]`); } return lines.join(' '); }

Previous Use our Code posts: 1. Better errors for shader compilation 2. WebGL Type Info

New tech

Just got myself a Valve Index so my friend and I are totally thinking about making something VR (even if it means no one will play it). Hopefully it will be playable not in VR as well, whatever it is. It will also depend on the theme.

In for #48

Right, calendar cleared; taking a day off work and getting ready for my third jam 😸 looking forward to hating on the theme 😂

When does the voting start?

When does the theme voting start? I thought it was supposed to be starting 2 weeks before the event.

This is the first time our team is participating in Ludum Dare.

Unreal for LD

Hi,

Just wondering: Are there many jammers out here that use unreal for jams.

It seems like unity and godot are used for most games. I haven't seen that many nice jam-games created with unreal during the last jams. But I cannot see a reason why.

I will give unreal a try this time after I wasted many hours in the last 2,5 jams fighting with unitys humanoid Animations.

Making a Team

Hey All making a team for ludum dare 48 message me if your interested. I am a programmer. Have fun all.

We have to talk about the frogs

What's going on with all the themes about frogs?

I'm getting spooked.

Someone help.

Use our Code #4: The Many Faces of Vector Addition

Our team is developing a new WebGL enigne for this jam. In the spirit of camaraderie, we hope that you can benefit from our work! Today, I'd like to share some work on the vector math library interface, specifically about the way we harmonize the needs of math routines with javascript's object system. You can see the result of this research in our math module.

State of the Art

Other math libraries like glMatrix implement vector and matrix operations as bare monomorphized functions that take references to input and output locations, like mat4.multiply(out, a, b). That pattern is efficient (JS engines prefer functions with consistent types, and allocation is a bad idea in fast math code), but it leads to routines that look like they're programmed in assembly language. We would rather, when possible, write code that looks like equations.

Operations

Let's spend a moment considering the various ways to do math in native JS. Ideally, the methods on our vector types would be as convenient. We have three patterns, two that operate on existing memory and one that has to create a new object.

javascript c = a + b; // Assignment a += b; // Updating assignment console.log(a + b); // An expression (creates a new Number) We can mirror these three on our Vec class. Suppose that Vec is a class that contains its coordinates. Then, javascript let a=new Vec(), b=new Vec(), c=new Vec(); c.eqAdd(a,b); // Overwrites the content of c with the sum of a and b a.addEq(b); // The equivalent of +=, adding b to a. console.log(a.add(b)); // Allocates a new vector and sets it to the sum of a and b Each of these methods has its own use-case. Assignment and updating assignment are useful in high-performance code, and the allocating expression is useful for writing natural, expression-like equations in situations where performance is not as important.

Returning this

To aid expression chaining, we want all methods to return the object they're writing to. That makes it possible to build expressions that look like the following: javascript // Several ways to sum three vectors d.eqAdd(d.eqAdd(a,b),c)); d.addEq(a).addEq(b).addEq(c); a.add(b).add(c);

Code generation

To avoid having to write every method three times, I wrote a wrapper to scan classes for implementations of eq___, and generate variants for all of them that were found. We do this using the fact that you can call toString on functions in order to get their implementations. A little parsing (copied from Angular's implenetation) extracts the function signature, and from there we build source strings, eval them, and assign them to the class. In this way, automatic implementations for addEq and add can come from a manually written eqAdd. The codegen can be triggered like this, javascript const Vec2 = generateVariantMethods( class Vec2 extends AbstractVecN { ... }); Class method decorators have been proposed, but until they're added, this is the best way I can think of to modify class members dynamically.

Constructors

In addition to the relationships between operators discussed above, there is also a relationship between assignments and constructors. For example, if we can construct a vector in polar coordinates with Vec2.Polar(r,theta), we will also want to be able to assign a polar coordinate to a vector with a.eqPolar(r,theta). For this reason, the codegen will also produce a static Foo method, that can be used as a constructor, from every eqFoo assignment method it finds. This gives us the primary constructor, Vec2.From(x,y), from the assignment function a.eqFrom(x,y). We get a lot of not-so-useful constructors from this (like Vec2.Add), but that doesn't seem to be a problem.

Codegen Example

For a class method eqFoo(self,other), the following functions are generated:

javascript fooEq(other) { return this.eqFoo(this,other); // Updating assignment } foo(other) { // the Default static method is expected to allocate a default-value object return (this.constructor.Default()).eqFoo(this,other); } static Foo(self,other) { // Like `foo`, but available on the class like a constructor. return (this.constructor.Default()).eqFoo(self,other); }

Conclusion

With these codegen features, our math library will be easier to use than most others, without sacrificing crucial performance. I wrote objects for all WebGL types: vectors from one to four dimensions, matrices, and even integer-valued vectors. They're all based on typed arrays and highly performant. If you'd like to use it, pick it up here!.

Previous Use our Code posts: 1. Better errors for shader compilation 2. WebGL Type Info 3. Matrix pretty printing

Why.

I have slaughtered an inordinate number of themes so far that are all variations on "You are your own enemy" or "can you trust yourself". it's rather annoying.

Any musicians / audio people wanna team up?

Hey everyone!

We're looking to team up with someone to handle music & audio. Or a couple people that each want to handle one ;)

Current team:

  • Me! This will be my 9th time doing LD. I've been making games as a hobby for ~10 years and programming professionally almost as long. Some of my work: favorite LD game | twitter
  • Nito! Awesome pixel artist and game dev. Check him out here: twitter

If you're interested, send a message with the following:

  • Link to portfolio / any previous work
  • Are you interested in doing music, audio, or both?
  • Have you done LD before?
  • Any experience with Unity?
  • Are you interested in helping with anything more than just music / audio?

You can reply here or add me on Discord: Frenchie#3409

That's all! Thanks for looking! :smiley:

LOL

funny.PNG