Curry Rock: a lighthouse sim

I’ve been slowly grinding on my first game, a lighthouse sim called Curry Rock. (It’s just supposed to be a catchy, “huh?” name, but lighthouses often have names like this.) You save boats from doom by warning them away from treacherous rocks.

I think I’ve got the basics in place right now. In this demo, you play level 1, level 2 (more boats), and then jump to infinite mode (which you’d unlock by beating level 30 or whatever) where boats just keep coming, FAST. It’s hard but playable! I’m sure it’ll seem easy after a few days of play :slight_smile:

Next, I’ll start refining difficulty and features, like types of “enemies”—a Health Restore boat (the lights on your tower are your health, btw), a speedboat, a coast guard ship to rescue the rafts (which now humorously just crash into you)…

This is my first game dev project (that’s going well, anyway, lol) on any platform, and I’m learning a lot!

23 Likes

This looks so good Neven.

I’m interested in how you did the menu and dialog box. And the rope border!

ps: forum says GIF is too large to show inline?

(image larger than 4096KB)

Thanks, Matt!

About the menu and dialog box… This is something that was challenging for me in the past, but it’s gotten easier as I’ve started breaking it up into constituent pieces. So right now, the first thing I have is this:

class('animatedView').extends(gfx.sprite)
function animatedView:init(w, h, origin, speed, z, x, y, callback)
…
	function animatedView:animateIn()
	…
	function animatedView:animateOut()
	…

A class I can use to animate any “view” in from any side of the screen. Handy for menus, alerts, level-ending notifications, etc.

So, I show the Options view something like this:

function optionsShow()
	o = animatedView(w, h, 3, 20, 910, 200, 162)	
	function o:draw()
		menuDraw(…)

menuDraw is a function that returns an image after it takes a table of rows structured like this:

local optionsMenuTable = {
	{ name = "about", label = "About Curry Rock…", action = function() optionsAbout() end, icon = gfx.image.new('images/icon-about') },
	{ typeDivider = true },	
	{ name = "music", label = "Music",           action = function() optionsToggleMusic() end, checked = false },
	{ name = "sfx", label = "Sound Effects",   action = function() optionsToggleSfx()   end, checked = false },
	{ name = "storm", label = "Storm Visuals",   action = function() optionsToggleStorm() end, checked = false },	
	{ typeDivider = true },
	{ name = "back", label = "Back to The Game", action = function() optionsClose() end, icon = gfx.image.new('images/icon-back') }
}

The rope border is drawn as a 3-slice image, with a top, repeating middle, and bottom (which is cropped here because I preferred it that way). I’m not using the built-in 9-slice just because I’m learning to do things like this myself. The design was based on an old marina sign I saw that had that rope treatment, as was the font I made for the game. It’s named after Ida Lewis, heroic lighthouse keeper. The font isn’t “finished,” it just does what I need it to—but it’s still usable.

font Ida Lewis.zip (16.8 KB)

Re: included GIF file, I think our forum has an aggressive limit on file uploads. I’ll see if we can change that!

2 Likes

Thanks for the code snippets - I’ll experiment with both these things. And the font is cool!

Regarding the big GIF it will probably optimise down a great deal. I think the forum limit is a good thing to have.

Awesome :star_struck: /// Asombroso :star_struck:

I LOVE the concept and look and can’t wait to play it.

1 Like

Wow!! Very nicely executed. Love it !!!

That AnimatedView class is great. After a LONG time going without, I finally put in an equivalent (called UIPanel) that made everything afterwards so, so much easier to do. I’d 100% suggest that a class for animated UI elements like this be made a part of the official SDK.

1 Like

Looking good! Gives me Cobra Triangle vibes (in a good way). :heart:

1 Like

hey! looks awesome! any update on this?

Not much to report—I haven't really touched it in a while. I've been busy with, well, Playdate :slightly_smiling_face: On top of it, I've run into structural issues leading to gnarly bugs, and the code is getting a bit tricky to untangle. This makes it doubly difficult to get back into it because every time I look at it, it's taking me longer to re-familiarize myself with how it works. The last 10% of the work is going to take… 850% of the time :cowboy_hat_face:

8 Likes

Hey, this is looking great!.

I'm no expert, single flashes of lightning might not be trigger. However, you might want to read up on the accessibility flashing lights / seizure setting to disable that effect if needed

edit: I think this is not needed, as it is really strobing lights that are supposed triggers

Yup, the game honors this setting! It also has its own settings for more granular control.

This game looks great! I hope it becomes complete.