[Concept and WIP] Undertale Pocket Battles

I’ve had an arduboy for a while now, and i’ve always wanted to see if I could somehow make some form of undertale work on here. There was some project on here called Undertale maker, but it seems to be dead. I’m not trying to make the full game, but instead just make it play a few battles. I only have a title screen so far, because I have never done something like this before. Since I don’t have the whole “game” part of the program, I made a concept drawing showing how the game would work with the paltry screen size available.

New%20Piskel%20copy%204

It’s quite simple, but that’s why I chose to make undertale on the arduboy. I’ll upload more concept art while I try to make this a real game!

Let me know how you like it and maybe give me some feedback, as this is all new to me.

3 Likes

Here’s an image of the title screen


I couldn’t put it in my post alongside the concept drawing because I was a new user.

1 Like

I like the idea a lot.

Could possibly make it more like a Undertale Boss Rush Mode type of thing.

Since the battles are basically minigames, I think the idea is brilliant. Could have like a small basic map with roads leading to the next Boss battle between fight. Could make it so that you get XP that you can spend to lvl up some stats like HP and Speed?
.Anyway I think this has potential, but I would probably just scrap the name and call it something else… Or not…

The battle makes me think a little like if you are getting inside the boss to beat it…

So something with a theme more like hacking comes to mind. What if instead of under tale theme you make it so that you have to hack into a robot or a computer and the fight in the battle box is showing virus protection getting after you in some way and your have to dodge them to get to the core or something?

Each time you get to the core the Boss loses hp and you rinse and repeat?

Each boss would have it’s own special twist on the basic battle mechanism?

Just a thought and that would get rid of copyright issue as well.

1 Like

oh wow, that sounds like a really good idea. The robot hacking idea sounds great. I should finish what I have first, but I just might use that later. Thank you for the feedback!

Hey… I’ve been having some trouble with animating sprites. I have a spritesheet, which is right here:
New%20Piskel%20copy%205
It’s already been turned into chars, but I have no idea how to make the character animate. When I try to display both sprites, they are the same. I have looked at a few other questions about animation, but they don’t make much sense to me.

This is my github repository, I couldn’t format the code here.

thanks in advance.

To animate the Sprite you’ll need to write a function to alternate which Sprite tile is being drawn. There’s a lot of different ways to go about that.

I looked at you code, and it doesn’t appear that you converted your Sprite sheet correctly. I’m assuming you just dumped that image you posted into craits converter?

What I believe is happening is you are drawing that whole image to the screen, then over drawing the right half with the left on the second draw call.

There is a number of ways to go about this, here are two examples.

Assuming you used a tool like team args Sprite sheet converter( http://www.team-arg.org/spriteconvert-manual.html )

  1. The Sprite tiles need to be oriented vertically, not horizontally like you have.
    The height needs to be some multiple of 8pixels
    I.e. 8,16,24 ect tall per image.

You can picture this in your head as an array of your Sprite tiles even though it’s one single char array you get out of the converter.

Afterwards you can use the methods specified on that manual page to draw the sprites.
drawSelfMasked(xPostion, yPosition, myTileSheet, tileNumber); . Where myTileSheet would be arudman and tile number would alternate between 0&1 for the first and second tile.

Another option would be to convert each Sprite tile separately, splitting the file into 2. So you would have say arduman1[], arduman2[].
Then alternate drawbitmap calls using those two bitmaps through an if statement or some other manner.

The TeamARG spritesheet website doesn’t work for me. I drag the image over it, but nothing happens. That’s why I used craits.

Also, I’m sorry if i’m wrong, but when you say “oriented vertically”, do you mean the image has to be flipped 90 degrees or something?

You Sprite sheet is like this A,B. It has 2 ‘tiles’
It needs to be like
A
B

The arduman will be standing vertical one on top the other.

If you want to use drawbitmap and craits website I would break the image into two individual ones.

Oh, okay. I’ve decided to just break the image in half and go from there. Thank you for the help! I appreciate it.

Did you see this comment?


Not necessarily.
If masking is used (through Sprites::drawExternalMask, Sprites::drawPlusMask or Sprites::drawSelfMasked) then the excess won’t matter.

Thank you. I’ve got it moving now, I used the separate sprites and made chars out of them. Then i put them into an if statement that cycles through them. Only problem i’m having is that the animation is too fast. I tried everyXFrames but the image keeps blinking instead of staying there. I can’t limit the framerate, because there’s a little character that has to move as well. What do I do here? I’ve updated my github page with the new code.

I’m guessing you’re putting the drawing code inside the if(everyXFrames(fps)) block?
You have to draw the sprite outside of that so you draw every frame and just have a variable holding the frame number and only change that variable everyXFrames.

uint8_t spriteFrame = 0;
constexpr uint8_t firstSpriteFrame = 0;
constexpr uint8_t lastSpriteFrame = 1;
constexpr uint8_t updatesPerFrame = 15;

void updateSprite()
{
	if(arduboy.everyXFrames(updatesPerFrame))
	{
		if(spriteFrame < lastSpriteFrame)
			++spriteFrame;
		else
			spriteFrame = firstSpriteFrame;
	}
}

void drawSprite()
{
	Sprites::drawOverwrite(x, y, spriteSheet, spriteFrame);
}

Okay. I used the code that you gave me and it works! Except my sprite looks weird because a bit of the image from the frame before it appears in the bottom of the sprite. I got the dimensions correct, but I can’t seem to get it to display the sprite correctly.

If you update your code on GitHub then I’ll take a look,
but I might not get chance until tomorrow.

Are you definitely clearing the screen?
At the moment I notice you’re putting arduboy.clear() and arduboy.display() in every single state function.
Usually it makes more sense to just have them once in the loop function.
E.g.

void loop()
{
	// put your main code here, to run repeatedly:
	if(!arduboy.nextFrame())
		return;

	arduboy.pollButtons()
	arduboy.nextFrame();

	switch(gamestate)
	{
		case 0:
			//title screen start
			title();
			break;
		case 1:
			//begin game
			game();
			break;
	}

	arduboy.display();
}

Also I just noticed my code should have been using arduboy.everyXFrames rather than everyXFrames.
(That’s what I get for rushing code so late at night.)


Bonus tip, game state works better as an enum class:

enum class GameState
{
	TitleScreen,
	Gameplay,
};

GameState gameState;

Used in loop as:

void loop()
{
	if(!arduboy.nextFrame())
		return;

	arduboy.pollButtons()
	arduboy.nextFrame();

	switch(gameState)
	{
		case GameState::TitleScreen:
			updateTitlescreen();
			break;
		case GameState::Gameplay:
			updateGame();
			break;
	}

	arduboy.display();
}

And the state is changed like:

gameState = GameState::TitleScreen;

The primary advantage of this is that your code becomes more self-descriptive,
but the other key advantage is that you can’t accidentally do this:

// Hard to find bug if using `int`
// But an easy to spot compilation error with enum class
gameState = 5;

One last thing, calling arduboy.clear() and arduboy.setFrameRate(60) in setup is redundant,
arduboy.begin() already calls both of those.

hi the sprite of arduman is toooooo fast you can fix it?

hello! thank you for trying out my game. I haven’t really done much with it since last month because i’m lazy, but i’m going to keep going now. Anyway, I updated the code on github and it should be able to slow down. It has a sprite glitch, which pharap was very helpful with. I’ll try to fix that soon

2 Likes

thanks you are a REALLY GOOD PERSON 0.0

1 Like

Remind me what the glitch is and I’ll see if I can help later.
(Unless you manage to fix it yourself before I get back.)

By the way, you don’t have to comment out your old code, you can remove it.
It won’t be lost because GitHub has a sort of ‘time travel’ feature that allows you to look back at your code as it was during previous commits.
Each commit is essentially a snapshot of the code’s history.

That’s the bit i’m talking about. Also yes I am responding 2 months after you did, sorry. i’m not very good at keeping focused on things, especially with school and everything.

I got the teamARG sprite converter working (i didn’t read the naming instructions clearly, arghh) but now the image corruption is worse, and it seems to be printing a small segment of my title screen??? I have no idea what is happening here.