Arduventure -- can I run it?

what happened to arduventure? I see on some of the forums that it bricks your arduboy? is that still the case?

Based on my experiences writing and porting games so far… I would guess they hit the resource wall and got discouraged. Overuse of resources is usually why a game bricks your Arduboy. I have yet to see anything so bad I couldn’t wake my Arduboy up with the reset button.

I have heard if the game is bigger than flash it can result in bootloader corruption. The reset button doesn’t help with that.

This thread discusses recovery from bootloader corruption: Bring your Arduboy back from the dead (burn bootloader)

Note the troubles one of the folks that attempted this method had.

1 Like

The Arduventure demo used too much ram which caused issues with flashing. Best just to wait for the full release!

1 Like

ahhh! I was wondering what the issue with it was… and yes it bricked my arduboy and was hard to time the flash correctly but got it back to working after a few attempts. Very excited for arduventure to come out… looks like something we’ve all been looking for in the arduboy canon.

wow, good information drop. thanks. that looks way intense. Any general rules to follow in avoiding this issue?

Only use the bits you need is the first thing. Shrinking data types to only the range you need.

PROGMEM is your friend: https://www.arduino.cc/en/Reference/PROGMEM
You want to put constant data in flash using that keyword. A really good place for bitmap data and strings. There are functions for reading sprites and bitmaps from PROGMEM in the Arduboy2 library:
Arduboy2 - The now recommended alternative to the Arduboy Library

I had spotted an article about packing bools in what amounts to a flags variable so you can avoiding wasting a byte per bool. I didn’t see is when I did a casual search just now so…

typedef enum
{
MAP_GENERATED=0x01,
DUNGEON_GENERATED=0x02,
MONSTERS_GENERATED=0x04
} GameFlags;

uin8_t gFlags;

//Indicate map was generated (set flag)
gFlags|=MAP_GENERATED;

if ((gFlags & MAP_GENERATED)!=MAP_GENERATED)
{
GenerateMap();
}

if ((gFlags & DUNGEON_GENERATED)!=DUNGEON_GENERATED)
{
GenerateDungeon();
}

//Indicate map needs generated (clear flag)
gFlags&=~MAP_GENERATED;

The above example will Generate the dungeon but not the map because I indicated the map was already generated.
Declared individually they would take 3 bytes. We packed them into one.

Reuse code. If you find yourself duplicating the same code make it a function.

I saw another conversation reducing text to a packed 5 bit. That would give you some punctuation and capital letters to work with. There is likely example code floating around for that.

There seems to be a compressed bitmap display function in the Arduboy2 library. That would help reduce full screen graphics.

We were looking at how much compression we might need for a little video and somebody shared this library https://github.com/igvina/ArdBitmap

I am currently working on a vector gfx game so bitmaps haven’t been the problem.

It is random map data. There are only a few map tiles so I divided the array in half and am using high and low parts of the map bytes to hold the tile data.

I use a function to access the map data:

uint8_t MAP[21][11]

    uint8_t Map(uint8_t x,uint8_t y, uint8_t writeVal=0xFF)
    {
      if (writeVal!=0xFFFF)
      {
        uint8_t temp=MAP[x][y>>1];
        if (y & 1)
        {
          //Write high
          temp&=0x0F;
          temp|=(writeVal<<4);
        }
        else
        {
          //Write low
          temp&=0xF0;
          temp|=(writeVal & 0x000F);
        }
        MAP[x][y>>1]=temp;
      }
      return ((y & 1) ? (0x0F & MAP[x][y>>1]>>4) : (0x0F & MAP[x][y>>1]));
    }

This assumes one will only be writing positive integers and values greater than 0xF will get truncated. Also going out of range will likely cause strange behavior so one would need to stay inside the 21x22 range with the x and y input. Under normal circumstances an os would crash your program but the Arduboy just sails along like nothing happened when you address invalid memory. Corrupting other data on write or who knows what. Usually your stack. Reading is pretty safe you will just get garbage out of range.

The function packs the nibbles. One could represent 16 different tiles. Saves about ~200bytes over declaring the 21x21 array.

Ram is so precious. :grimacing:

To get the most you may find your self doing all of the above and more.

Good luck!

PS: I just stumbled on this. Welcome New Developers! A Listing of Development Links and Articles It seems like a bible for the Arduboy.

1 Like

Also (Use infomercial voice) if you are uploading compiled games from a curated repo like http://arduboy.ried.cl/ remember that https://github.com/eried/ArduboyUploader protects your investment with some simple internal pre-checks :tada: :tada:

1 Like

It works just doesn’t do much

@SerendipityDoDa

We are NOT discouraged and did NOT hit the resource wall. We are still developing the game and it keeps growing. All we need is time.

@khobo

If you’re new to everything on Arduboy, better don’t load the Demo. The demo was just a first idea.

4 Likes

Thanks for all your efforts!

2 Likes

Thank you for clarifying. I am anxious to try it.

2 Likes

We are working very closely with @JO3RI and his TeamARG to do something special for the release of Arduventure. Stay tuned!

4 Likes

I feel this could be the biggest game on the arduboy yet in terms of dev time/play time.
Also, so many people are waiting for a game like this because it doesn’t look like it will be a “mini game” (i’m fine with that, i’m myself trying to make one with wanky code) but i’m sure a lot of people would love to see how deep and far you can go with an arduboy and this could be one of those games.
I’m fine if we have to wait, Rome wasn’t built in a day (or two).
But i’m so hyped for a game like this, i’m sure it will set new goals for a lot of people (me included).

Anyway, good luck guys on Arduventure !

1 Like

Personally I like the demo, it doesn’t do alot (though I think a few tweaks to the code will unblock things that are already there) I play the demo often and fully intend to buy a dedicated arduboy for the full version of the game when it comes.

1 Like

We’re entertaining the idea of Arduventure special editions.

1 Like