Aghast August: augh, make a game already!

That’s so rad. Good luck as you approach finishing! Pity about the lost worlds, however uninspired.

Wild (/embarrassing) to think you were lurking around when I was active in the community.

And here we are.

1 Like

Ok so programming in pico-8 is turning out to be a Zachtronics efficiency puzzle. I’m not sure if this is a good thing or not for my productivity. On the one hand, the puzzles are very compelling! On the other hand, maybe I should just be designing a game instead!

I reworked how I did collision (so that it only scales linearly with the number of bullets & enemies rather than multiplicatively), which was a good start, but I wanted it to be faster (those pesky “constants” that you’re supposed to leave out of Big-O notation seem to have a large effect in real algorithms idk!).

Eventually, this change made it nearly DOUBLE the speed (which means DOUBLE the enemies):

BEFORE:

function enemy_bullet_collision(e)
  for x=1,3 do
   for y=1,3 do
    local f = get_ctable(e.x+x,e.y+y)
    if (f != nil) return f
   end
  end
 end

function get_ctable(x,y)
 local i = flr(x)+flr(y)*128
 return ctable[i]
end

AFTER:

function enemy_bullet_collision(e)
 local ctable = ctable
 local ex1 = flr(e.x+1)
 local ex2 = ex1+1
 local ex3 = ex2+1
 local ey1 = flr(e.y+1)*128
 local ey2 = ey1+128
 local ey3 = ey2+128

 local f = ctable[ex1+ey1]
 if (f != nil) return f
 f = ctable[ex1+ey2]
 if (f != nil) return f
 f = ctable[ex1+ey3]
 if (f != nil) return f
 f = ctable[ex2+ey1]
 if (f != nil) return f
 f = ctable[ex2+ey2]
 if (f != nil) return f
 f = ctable[ex2+ey3]
 if (f != nil) return f
 f = ctable[ex3+ey1]
 if (f != nil) return f
 f = ctable[ex3+ey2]
 if (f != nil) return f
 f = ctable[ex3+ey3]
 if (f != nil) return f

end

Now granted this uses more symbols, but I’m not tight on those yet and I think it’s worth it for a block of code that gets run all the time.

EDIT: Oh wait nil is falsey in lua. I wonder if changing those “if” statements to “f and return f” would be faster.

2 Likes

ok falsey values are the truth

“f and return f” doesn’t work because it’s not an valid expression but this did which is much nicer!

 return ctable[ex1+ey1]
  or ctable[ex1+ey2]
  or ctable[ex1+ey3]
  or ctable[ex2+ey1]
  or ctable[ex2+ey2]
  or ctable[ex2+ey3]
  or ctable[ex3+ey1]
  or ctable[ex3+ey2]
  or ctable[ex3+ey3]

My collision code now handles 400 enemies on screen I should stop optimizing and work on more useful things!

I really like this idea and might try it more in earnest. But April ended up providing less development time than expected and here we are on the 19th and I’ve barely put together the beginnings of one area.

However, I’m getting really into the project and am going to definitely keep working on it. I still plan to develop it somewhat linearly, but it’s probably gonna take a couple months.

I might take a little time this weekend to make a nifty little small thing though. Idk.

Anyway, I wrote a twitter thread about how I’m delaying this game and how I’m excited about the fact it’s probably going to be my most Zelda 2-like game to date:

https://twitter.com/jdm0079/status/1119339409739014145

4 Likes

Haven’t had too much time to make new mechanics yet but it has a menu and a lose state now.
real_game

9 Likes

I laughed. That game over screen is hot

3 Likes

Gosh. Game design and balance is hard! I don’t have an intuition for it yet. I sort of just have to implement things and then mess around with them for a long time until I feel satisfied. Maybe once I get a footing with a few enemy types it’ll be more obvious what works and what doesn’t.

Anyway, here’s a new enemy that pulls in the sides of the screens. I think I’m going to have the screen size reset after X number of levels, and the level before that will always have a bunch of pullers.

pullers

20 Likes

That is SO RAD

1 Like

I might actually be working on this game for a lot of the year. Or longer. But I’ve got a part that looks like this now.

image

12 Likes

I’ve really gotten nowhere this month. Been plugging away at the Godot example game in my spare time, but I’m nowhere near ready to attempt my own thing with it.

Might make an effort to make something in bitsy this weekend and squeak something out before the month ends.

5 Likes

We’re doing a thing. It doesn’t have a name yet, but it’s definitely a kind of strategy RPG thing.

Moving around the map works, attacking works (with the enemy retaliating with their own hit if they stay alive), and passing the turn just resets the flag on your player units so you can move again. Tomorrow I’m trying to add in some (giant air quotes) AI so you have someone to play against, and actually add the “key mechanic” which is being able to sacrifice your generic unit for special energy that can be used to unlock abilities on your hero units for the rest of the map

We are developing in the open and I am flailing wildly but it’s a hell of a ride!! Earlier I had a memory leak that was making the game gobble up a quarter-gig of RAM every second until the OS killed it! That was fun!

11 Likes

I did it!!

I will have more thoughts probably once my back recovers from three days of sitting on my breakfast nook stool (and will be releasing an episode of my podcast about my experience at the end of the month)

11 Likes

Well, I failed.

Maybe next year.

I’d be right there with you, except that it’s entirely up to us to decide what constitutes failure. Work’s been blowing up over the last two weeks, so I feel completely justified annexing May (or more) for our purposes. Tomorrow’s the 31st of April; after that, it’s the 32nd. We’ll keep this going as long as we have the will to keep working.

You should just change the name of the topic each month to reflect whatever the current month is.

7 Likes

You won’t believe how much work I got done on a completely unrelated videogame project thanks to this thread and my goal to just focus on this one April game jam game, which I failed to do. Productive procrastination is so real. I am disappointed that I didn’t make progress on Geltungsdrang but I guess I can’t consider the outcome a failure

5 Likes

having stuff you need to do is such a great way to get stuff you kinda need to do done

4 Likes

true dat

I guess I made an… analog game?

But that wasn’t what I meant to make, for this. I’m still working on that! I could have gotten a lot done when I was very sick but I was busy being very sick?

I’m still very sick. Hope springs eternal.

10 Likes

Yeah, I’ll give May a shot