NonDev

Ludum Dare 54

First Progress!

First time taking part. Had a slow start but now starting to put things together!

20230930_2.gif

So Far!

20231001_1.gif

Most gameplay related stuff is in. Next up title screen and settings then to see what else I can add in remaining time.

First Submission & Thoughts!

example1.gif

(Sorry I can't direct link, my account is still new and not yet trusted.)

Got my first LD submission wrapped up yesterday. I had a lot of fun, thought I'd write up some quick thoughts I had while they're still fresh in my mind.

I wasted some five hours on Friday night going in circles on what idea to do. I had written down some basic ideas for each of the last round themes so I wouldn't be completely blank at the start but I ended up second guessing myself a lot. I ended up going with something very similar to my original note but was a big demotivator with "this is too simple no-one will enjoy it" thoughts.

Once I did get going I had a lot of fun. I think the art came out pretty cute and friends commenting on the chain idea as a visual makes me happy I got that in. Leaving Monday (minus work day eating up hours) to do things like the title screen and settings felt like the right idea and made it less stressful trying to get those in.

I've not done such a short duration jam before. The closest thing was a week long jam almost ten years ago. Think I'll definitely take part again! On to playing other people's games and rating!

Ludum Dare 55

Crimes Against Carrots

Excited that summoning won as I had a fun idea for it: you're a bunny summoned to court to pay for your crimes against carrots! Just fleshing art out so far.

mock_2x.png

Close!

Cut it close this time but Crimes Against Carrots is up! There's some things I wish I had got in but it was a fun scramble as my second time participating. (Seems I'm flagged as untrustworthy for links again, oh well!)

sample_a.gif

sample_b.gif

Retrospective

Took longer to get around to this than I thought!

blogemset/ema.gif

The Theme

As part of rating themes during the final rounds I usually jot down ideas for each theme if I can so that I have some idea of what I can do right from the start. I was actually pretty excited when Summoning won since I had a pretty clear idea in my head of what I wanted to do. Plenty of other people went with other meanings of "summoning" which was great to see.

What Went Right

  • I blitzed through most of the static art in one morning and in general I think the art turned out pretty well. The enemy popping effect and the cars are my favorites!
  • Basic game-feel. It's was important to me that any challenge would come from decisions the player makes and the actions they take, not fighting against unresponsive controls or wonky collision. I might make a post with some tips since I do see some submissions neglect to do things like normalizing player input which are quick, easy fixes.
  • Barebones risk-reward combo meter. It's enough that once there's some cop cars you need to start taking opportunities to smack carrots to refresh your meter. Nothing amazing but without it I think the baseline scoring would be pretty boring.
  • Extra features. Was pretty easy to rework previous settings and controls rebinding stuff I had, which I think helps add a layer of polish.
  • I already have a kinda-engine on top of SDL2 with a lot of convenience and features built in. (I even recently made a dialog system but not had chance to use it yet!) I'm extremely comfortable in it and feel very productive. It's a big help in being able to get something out in the timeframe. And the code is GPL3, although I've not bothered to make a public repository for it or anything - maybe I should at some point.

What Went Wrong

  • I had been working on a different physics system using verlet integration before the jam and completely forgot I hadn't done frame-independent friction for it. So half way through I had to yank all that out and just go with simple euler and AABB collision, after I wasted time trying to rush and hack together a solution. Was really frustrating.
  • My weekend ended up not being super productive after getting the art and basics in. I probably got 75% of the game done in a marathon session on Monday.
  • The leafy-brain carrots were originally either going to psychically attack the player or levitate around to introduce either more risk or add some complexity to gathering and juggling carrots. I just didn't get time to do them. Without them I do think the game misses a layer of interesting gameplay.
  • Some of the animations are kinda stiff or I had to reuse for time. I didn't get player dashing or hurt animations done for example. Simple trade offs of time versus getting other things done.
  • Post-submission I've been distracted with other things and sickness, so I've been slacking on rating other games and really participating. Next time I think it would be good to dedicate a little bit more time for some interesting 'my game is up!' material, follow up posts for exposure and having time set aside to rate others. In generally I'm very bad at advertising my own things, but also I've been missing out on going through all the amazing submissions people have done.

Next Time

  • The last two jams I've been pretty safe with gameplay. Next time I want to focus a bit more on coming up with something different and interesting as a starting point.
  • I try to do as much as I can myself with art, programming, sound effects but I'm always relying on others for music. I'd love to try learning some music theory and make an attempt next jam to create at least one piece of music.

I don't think my account is trusted so I can't seem to post links in these (or at least they get gobbled up when I preview this), so if you'd like to check out Crimes Against Carrots please click on my name to view my submissions! Thank you for everyone that's commented and rated so far!

sample_e.gif

Ludum Dare 56

Virtues

Been focusing on sprites this morning while pondering ideas. Think I know what I want to do now.

progress_01.png

Third Time Participating, First Playable in Browser!

Souls of the Lost and Insignificant is my third LD game and the first where it's not just a Windows build and source, it's playable in browsers! It took some finagling with Emscripten and figuring out weird quirks but I'm glad it worked out.

The weekend was a bit of a rollercoaster. The theme was one of the few I didn't have any good, doable-in-the-time ideas so I was pretty aimless. Sunday was eaten up by other things and not feeling great - so, as always, most of SOLI was done on the last day. Going into LD56 I had wanted to try doing something turn based or more strategic but it's funny how things end up when time is slipping away. Bummed out I never found time to learn some music tools to take a shot at doing a track. The boids implementation is very hacked together but I think the way things get more and more chaotic and hard to control is neat.

Unfortunately I still can't include links in posts, so if you want to check out SOLI, please click on me then my games!


titleemfade/emin.gif

demo1.gif

demo2c.gif

demo3b.gif

Ludum Dare 57

Time for Sleep

Still some sprites to get done but rest of it is ready and in. On to gameplay tomorrow!

progress_2.png

Core Online

2.gif

Excerpts from Evidence δH2 in Nations vs. K-COMPLEX

Image from Mk3 CORE training manual:

theyemcalled/emthem_incidents.png


Partial cassette recording, dated 06/08/81: R: For Christ sake West, you can't just- W: We don't have options. You know that. R: I don't know that. Talk to him, Paul. P: Look I- look- sit down. Hear him out. R: This isn't what I agreed to you know. W: We are past working with preferences. P: Let us just talk about feasibilities. R: Christ. [Transcript degrades into static.]


Recovered legal document from ~~classified~~ Affected Region 18:

Pilots, internally referred to by the moniker "asset", were tasked with delving into the subconscious depths of an ██████████████'s mind. The lifeform had been discovered by then K-COMPLEX co-founder Ruport M██████ in spring, 2081. It was their belief that the awakening of this lifeform would unleash incalculable damage to the ecosphere, with a high likelihood of total civilizational collapse. Through the research of Paul M██████, K-COMPLEX sought to decode the complex brainwaves of the lifeform to lure it █████████ until a more permanent solution could be arranged. It would be unfortunate that [Remaining document is unreadable.]


DELTA BREACH is a short simulation. · Research · Rate


didemthey/emneedemto/emdo_this.png

Recovered Documents from Affected Region 18

Digitized scan from Collection 4: planemfor/emfailure.png


Excerpt from file://usr/rmalcolm/drafts/mk3_log_revision4.nfo:

~~With the overall improvements in the Mk3 hardware, there's great potential to reduce loss of life and introduce reusability in personnel. While short term costs may exceed Q2/Q3 budget the long term savings would more than make up for them.~~ Please see amends for approved points: - More obviously distinct patterns for ~~pilot~~ asset recognition - Replaceable relay keypad - ~~Mutli-step~~ At least 3+ channel depth search for improved RTI per asset - ~~Anxiety suppressants for~~ [File degrades into unintelligibility.]


DELTA BREACH is a short simulation. · Research · Rate


didemthey/emneedemto/emdo_this.png

Ludum Dare 58

The Town Dreams Peacefully

Collector was one of the few themes I couldn't think anything up for in advance but I've got an idea of what I want to do now! I'll be using my usual toolset (own engine on top of SDL2, written in Nim, Aseprite) but I'm excited for this to be the first LD where I try composing my own music too.

01_houses.png

Just In Time!

ld_title.png

town.gif

mouth.gif


Playable in your browser!


Had a real blast getting this one together, despite having no idea what to do if Collector got picked on Friday. Definitely wouldn't have been possible without some of the engine additions and extra workflow tools done since the last LD. Time to go rest! I hope everyone else had fun!

MiniLayout

Since LD57 I've made a bunch of little tools and libraries for my engine (built on top of SDL2) to help shave off annoying or time consuming parts of game dev. I thought I would do a few posts talking about them. The first one is for creating immediate mode UIs, simply called MiniLayout (and LAYN internally which stands for Layouts in Nim). It's inspired by Nic Barker's Clay after watching a video on him talking through his algorithm.

Programming interfaces is a slog. I find them especially limiting in a jam since often the quickest approach was to just hard code things, making any changes later on a time consuming chore. My goal was to end up with something with minimal boilerplate. Just describe what you want to draw, automatically support things like text, sprites and handling interactions.

Here's a simple example and the code used to generate it:

mediaemlayout/emdemo2.png

``` frame: style game.sprites.fancycornersframe size 160, HUG direction VERTICAL padding 16 gap 8 shadow 0, 2 shadow_color CLIGHTGREY

for i in 0 ..< 3: frame: interactive buttontag[i] if hovered(): style game.sprites.rowhovered else: style game.sprites.row width FILL padding 8 gap 8 align CENTER sprite: content game.sprites.little_face text: content "Hello world!"

draw(game.layout) ```

To quickly explain what some of this means: - A frame is a container. By default it hugs its content, lays them out horizontally and has no fill color or style. (A style is just a Sprite pointer that is then used for ninepatch drawing.) - Sections like frame:, sprite:, text: are macros which begin a new Element of that type, make any further Element declared within its children and automatically call close_element() at the end of the scope block. - Interactive elements are given a string tag, like interactive "my cool button" which can then be later used to check the state of that interactive element. (if get_hovered(game.layout) == "my cool button": ...) - The library knows the current element scope as you declare them, so you can easily set parameters based on the interaction state with simple checks like if hovered(): ..., if pressed(): ..., etc. - Dimensions can be set to FILL to automatically grow to fill any remaining space in the parent.

Calling draw(), which takes a pointer to the MiniLayout struct, is used to finalize the layout and do the calculations before drawing all the elements. The multiple passes used for calculations are very similar to Clay (so you can watch the video above for more in depth explanation for most of these): - Widths are grown and shrank. - Text is wrapped. - Heights are adjusted to fit content. - Heights are grown and shrank. - Positions are calculated. - Scroll requests are handled. - Interactive elements are cached for the next frame.

The last one is really important because otherwise you have this problem: How do you know what's interacted with during a frame if you don't know how the layout will be calculated until all the layout is defined and drawn? So my solution was that all interactive elements have a lightweight copy of some of their important details (like position, interactive tag, size) kept for the next frame, which does introduce a one frame latency but I think that's a mild tradeoff for all the other wins introduced.

The lack of boilerplate is achieved through a few means: First, Nim has a lot of flexibility in its syntax. foo(bar), bar.foo() and foo bar are all the same and just based on your preference. While I don't normally use the last style, it's great here to reduce noise and give the layout areas a distinct different style than the rest of my code. Second, MiniLayout internally has a single private struct that all the parameter procedure calls operate on. So width 100, which is the same as width(100), operates on LAYN.target.cons.size.x where target is a pointer to the current Element in scope.

A side benefit to this system is you can define and draw multiple layouts per frame as you like, in between drawing the rest of the game. There's no conflicts because after drawing we no longer care about any of MiniLayout's state (except for cached interactive elements).

There's tons more not covered here. Like frames can be set as scrollable and automatically clip their scrolled content, interactive elements can automatically be navigated through on controller/keyboard with no additional code, absolute positioning with parameters like position RIGHT, TOP, text wrapping, etc, etc, but thought I'd keep it brief.

It's been a blast working on it so far and excited to use it more in the future!

What a Week!

This week has been pretty wild. I woke up Monday to a big spike in visits on Itch.io. Only to discover that ManlyBadassHero had done a video of my game, which is now at almost 300,000 views! So many people have been positive and supportive, it's been amazing!

So right now I'm working on a post-jam update with fixes and improvements for October 24th. Then I'm going to work on a fully fleshed out version with new mechanics and content to release on both Steam and Itch.io. I don't want to give too much away but I think the new systems will help in adding more structure and depth. I'm excited!

In the meantime, if you want to check out his video:

https://www.youtube.com/watch?v=GmfED4NCbSc

Or play The Tooth Fae yourself on Itch.

Update, Teaser and Steam Page Live!

results.png

Wow! I'm pretty stunned to get 1st and 3rd in two categories, thank you for such amazing ratings! I need to let that sink in a little. In the meantime I've got a bunch of news!


mediaemcover/emitch_update.png

Post Jam Update

I've been working on a post-jam update for The Tooth Fae and now it's live! Here's a run down of the additions and improvements:

  • Collection progress and abandoned houses are now saved between sessions.
  • Anesthesia now only applies to the upper or lower mouth where it was injected.
  • Cracking teeth is now more obvious.
  • Cracking a tooth now consumes anesthetic for that side of the mouth.
  • Added tooltips to tools.
  • Added pause menus to the town and mouth screens.
  • Added quick access to toggling full screen from the pause menu.
  • Added ability to reset progress on the title screen.
  • Added visual highlight when collecting a new type of tooth.
  • Added and improved sprites.
  • Added and improved sound effects.
  • Added a 100% completion screen.
  • Bedroom cutscenes can now be skipped with escape or left click.
  • Sped up transitions between screens.
  • Townsfolk can no longer be both brave and cowardly.
  • Improved hit areas for lips and gums.
  • Fixed being able to swap to pliers while they're unusable.
  • Fixed lips suddenly snapping up or down when entering the mouth screen.
  • Fixed web version always starting with the same RNG seed.
  • Lots of other minor tweaks.
  • Added a secret to discover after 100% completion...

Play the update in your browser!


mediaemcover/emitch.png

Wishlist the Full Version on Steam!

The Steam page for The Tooth Fae is now live! The full version will introduce new mechanics, progression, lore and secrets to uncover. If you enjoyed playing the jam version or are curious to see what gets added, be sure to wishlist! I also put together a little in-universe teaser trailer to celebrate the page going up:

https://www.youtube.com/watch?v=Y9arV-ApxLo


It sure has been a busy few weeks, I hope everyone else had a blast taking part!

Ludum Dare 59

Phew!

CXNTACT

1x_title.gif

1x_intro.gif

1x_terminal.gif


Playable in your browser! Also available for Windows.


Another creepy game, I guess! Time for some much desperately needed rest, real post with thoughts on how the weekend went tomorrow. I hope everyone had a fun, I'm looking forward to checking games out!

All I Can Hear is Static

2x_intro.gif

2xemterminaltwo/emtrim.gif

2xemdoor/emstuckemdoor/emstuck.gif

2xemwrong/emtrim.gif

CXNTACT is a short exploration game where you explore a seemingly abandoned space craft, the USC Lock Break, and try to find survivors. You play as an astronaut, observed remotely and enduring interference from an unknown source. Scavenge tools and make use of the helpful CO/SU terminal to uncover what happened.

Playable in your browser!


How It Went

Hectic! The week leading up to LD59 weekend I made to the jump to Linux as my primary desktop OS. Overall it went very smooth and it's been fun to tweak things and settle in. Porting over my helper tools was very simple. Unfortunately I didn't get time to try out DAWs on Linux (any recommendations?), so was left smashing things together in Audacity to make BGM. (And coming back to it a few days later it was way too subtle.) Along with two days of practically no sleep and classic over-scoping made this time pretty difficult. Luckily I have something of a tradition of making a huge batch of chili before Ludum Dare, so meals were trivial over the weekend.

I leaned quite heavily on a couple of my favorite sci-fi media for what can shakily be called a narrative. I'd be super interested in anyone can get them both right! I'm still not used to writing things for games and find I have to constantly reword and rewrite to be less verbose and repetitive. Hopefully the dialog is passable at least.

Overall I've got mixed feelings about how CXNTACT came out, but I'm glad I tried.


The Tooth Fae

Last Ludum Dare was bewildering. My entry, The Tooth Fae, got 1st and 3rd place across two categories and top 10 in two others. And even got played by ManlyBadassHero which has over half a million views now. I wasn't expecting any of that and was really blown away. So as the jam wrapped up I did a short term improved version and announced a full version coming to Steam. (Obligatory please wish list!)

That was six months ago, but it's still not out yet - what happened?

Without going too much into it, I've been dealing with personal issues for a number of years now and things came to a head a few months after LD58 ended. This was on top of flip-flopping a few times on how different and narrative driven I wanted the full game to be. Since then it's been a long trek to get back where I've needed to be to sit and focus on a game. All I can ask for is more patience, but I'm hopeful it will get back on track soon. I'm excited to see the reactions to what has changed and improved!


Otherwise I hope everyone had a blast working on their entries! I've still got a giant list of games to get through. If you're still in need of ratings, post yours and I'll be sure to check it out!