Log In  


Cart #tdannecy_connections_1-1 | 2024-09-07 | Code ▽ | Embed ▽ | No License
6

Group words that share a common thread.

Four words per category, four categories per game.

A demake of the New York Times Connections puzzle word game.

Because of Pico 8's cartridge size limitations, I was only able to include puzzles from July 1-September 7.


Known bugs:

  • Statistics/scoring is not working.
  • SFX is a mess.
  • Some puzzles have font in small caps, and others are regular. Thoughts on the font choice? Which one do you like better?
6


Challenging game.
About the current storing of game data ( words={...38KB of LUA structures...} )
It's clean coding, but not suited for this as it makes you go full speed into PICO-8's constraints.
The structure of the dayly puzzles is always the same. This means that the entire object can be flattened as a single string with a single delimiter, and the index of each string in the sequence is all that is needed to know where it has to be put back into the word object, very simple deserialization :

flat_words = split(
[[386
jš˜¶š˜­š˜ŗ 1,2024
show the way
š˜„š˜Ŗš˜³š˜¦š˜¤š˜µ
š˜Øš˜¶š˜Ŗš˜„š˜¦
š˜­š˜¦š˜¢š˜„
š˜¶š˜“š˜©š˜¦š˜³
scheme
š˜¤š˜°š˜Æ
š˜©š˜¶š˜“š˜µš˜­š˜¦
š˜³š˜¢š˜¤š˜¬š˜¦š˜µ
š˜“š˜µš˜Ŗš˜Æš˜Ø
seen on a u.s. dollar bill
š˜¦š˜¢š˜Øš˜­š˜¦
š˜±š˜ŗš˜³š˜¢š˜®š˜Ŗš˜„
š˜“š˜¦š˜¢š˜­
š˜øš˜¢š˜“š˜©š˜Ŗš˜Æš˜Øš˜µš˜°š˜Æ
first words of canadian provinces/territories
š˜£š˜³š˜Ŗš˜µš˜Ŗš˜“š˜©
š˜Æš˜°š˜³š˜µš˜©š˜øš˜¦š˜“š˜µ
š˜Æš˜°š˜·š˜¢
š˜±š˜³š˜Ŗš˜Æš˜¤š˜¦
387
jš˜¶š˜­š˜ŗ 2,2024
pack (away) for future use
š˜“š˜²š˜¶š˜Ŗš˜³š˜³š˜¦š˜­
š˜“š˜µš˜¢š˜“š˜©
š˜“š˜µš˜°š˜³š˜¦
š˜“š˜µš˜°š˜ø
adjectives for assets
š˜§š˜Ŗš˜¹š˜¦š˜„
š˜§š˜³š˜°š˜»š˜¦š˜Æ
š˜­š˜Ŗš˜²š˜¶š˜Ŗš˜„
š˜µš˜°š˜¹š˜Ŗš˜¤
latin words
š˜¤š˜¢š˜·š˜¦š˜¢š˜µ
š˜¦š˜³š˜Øš˜°
š˜²š˜¶š˜Ŗš˜„
š˜·š˜°š˜¹
___ game
š˜¢š˜³š˜¤š˜¢š˜„š˜¦
š˜£š˜­š˜¢š˜®š˜¦
š˜Æš˜¶š˜®š˜£š˜¦š˜³š˜“
š˜“š˜²š˜¶š˜Ŗš˜„]],"\n",false)
-- just kept two days of data here, you get the picture
-- now lets build the structured object from the flat array :
words={}
for(i=1,#flat_words,22) do
   snum=flat_words[i]
   day={number=tonum(snum),
        date=flat_words[i+1],
        g1clue = flat_words[i+2],
        g1words = { flat_words[i+3], flat_words[i+4], flat_words[i+5], flat_words[i+6] },
        g2clue = flat_words[i+7],
        g2words = { flat_words[i+8], flat_words[i+9], flat_words[i+10], flat_words[i+11] },
        g3clue = flat_words[i+12],
        g3words = { flat_words[i+13], flat_words[i+14], flat_words[i+15], flat_words[i+16] },
        g4clue = flat_words[i+17],
        g4words = { flat_words[i+18], flat_words[i+19], flat_words[i+20], flat_words[i+21] }
        }
    words["n"..snum]=day
end

This should allow a significantly bigger catalog of riddles, but if still not enough, you'll have to use multiple carts.
On standalone pico-8 projects, you can get data from other carts with reload(), but this is unfortunately not an option for BBS carts that can only reload data from themselves.
On the other hand, what you can do in BBS is call a new online cart from the current one. When you do, everything LUA related is lost, but the 32K of upper pico-8 memory stays intact. (technically, up to 47Kb of pico-8 memory can stay intact if you scrape everything possible like cartdata space or video memory)
So your 1 cart could fill 16K of flat word data into the memory, call a 2nd cart that would fill the rest of the 32K and call a 3rd cart that would be the real game. You'd have to peek the data back into a flat array, and then back into a word LUA structure, but you'd have 32K worth of word data at your disposal. If needed, you can also have more on top of that coming from the source code of the last cart of the chain.

Small drawback for the player, there'd be two "load disk" wait icons appearing once at the start of the game.


This is a great puzzle game. Good job squeezing all those puzzles into the Pico-8 constraints.

If I could make a couple of suggestions to make the game easier to play:

  1. I find the undo system rather confusing and not very useful. The (X) button toggles selection of a word, but not consistently. E.g. after selecting four words, (X) submits the guess (and might lose you a life) rather than toggling selection of a word. If (X) always toggled selection of a word, undo would not be necessary, and you could use the (o) button to submit the words as a guess.
  2. Selecting a word plays an SFX, but de-selecting a word does not. It would make it easier to understand what had happened if deselecting a word played an "opposite" SFX to selecting a word.
  3. I was playing through the puzzes in order, but when I restarted the game it had forgotten where I got up to. Could the game remember the last puzzle I selected from the "Play specific puzzle" menu option?

In addition to simplifying the data structure as described above, once it's a single string it will be ripe for compression.


@RealShadowCaster - Great info--Thanks for the detailed instructions on how to optimize these words. I'll play around to see if I can get it implemented.

@dredds - Thanks for playing and thanks for the feedback. Agreed on the x-submit vs x-deselect. I think you have a great point. SFX is a mess, so that's on my todo list. For the specific puzzle, yeah that should be possible to store in cartdata.

@sparr - Agreed! I will experiment.



[Please log in to post a comment]