Hello, new here, some screens, and questions

Hello! I’m new here, and I’m the happy owner of an Arduboy, and an impatient backer for Arduventure.

I dabbled in Processing (made 3 games) and Unity with C# (also made 3 games). I used Flash a lot in my time to make browser games, and I’m looking forward discovering Arduboy. You can see some of my work here : http://luxregina.com/portfolio/category/game-design/

I’ve had a little game that I was planning to do a while ago, and I thought of trying to port it to Arduboy. here are some screen (ArduBoy on the left obviously, some of the former art on the right)

I have a few questions about development: I was under the impression that Processing was compatible with Arduino: could I use processing to write my game and compile it for Arduboy? Or do I need to go the C++ route absolutely? Never touched C++ so the road ahead may be long.

So yep, long question short: aside C++, are there any other development alternatives for Arduboy?

5 Likes

Hi, I don’t know anything about ‘Porcessing’ but I do not think there is any capability to compile to the Arduino / Arduboy.

If you have any programming experience, you shouldn’t be scared off by C++ and may find the learning curve relatively flat for simple applications. Some of the best games on the Arduboy use basic coding techniques however you may find that you need to get smart over time to overcome the memory limitations of the platform.

There is some great information on this forum and in the related magazine :

I have had a look at the artwork on the site and it is simply amazing. The B&W images for the Aruboy are awesome as well and I bet if you asked, many developers would assist in teaming with you. Developers typically have limited graphics skills. Actually I would be interested …

1 Like

So Processing is an application for PC that allows you to quickly itirate applications that run within the Processing framework without requiring you to set up a whole build and compile environment. It’s like a self contained and self reliant IDE that like Arduino, was made intended for artists to quickly develop things. It’s based on Wiring which is the actual pseudo C++ that Arduino is also based on.

In fact Arduino is really practically a fork of Wiring and there is actually some people who say that Massimo and other Arduino founders basically stole Wiring from one of their students and don’t give much credit and no money back to the origonal creator.

(the link above is a very interesting article at hackaday, I suggest you check it out if you don’t know the history of Arduino)

But long story short, if you’re comfortable with Processing you already know enough C++ to get going with Arduino.

Other alternatives you could code in assembly :wink:

Trolling aside there are some people who have created plugins for scratch or created scratch like programs that will allow you a visual drag and drop approach to creating programs but it’s doubtful you would be able to create an entire game within that framework.

Hopefully this answers your questions, let us know how it’s going the screenshots look great!

2 Likes

Firstly to answer your actual question:

So yep, long question short: aside C++, are there any other development alternatives for Arduboy?

You can sort of use C if you want to

I’m not aware of any Atmega assemblers, but I suspect they exist, so if you are somewhat insane or masochistic you could use assembly. (I’ve written the odd function using C++'s inline assembly capability, I don’t recommend trying to write whole programs in it though.)

There is aparently a sort of microScheme that can compile for Arduino, but I’ve got no idea how well it works and I don’t know if it could use the Arduboy2 library. (Also please excuse the person’s somewhat rude “this is clearly a student project” comment. It was a student project, but that does not make it somehow inferior.)


If you can use C# to any decent capacity, C++ isn’t too much of a leap for basic things.

There are some more complicated rules involved in more advanced things, and a some basic stuff has different semantics.

Firstly, regular variables have what C# would call ‘value semantics’ in that assignments copy the entire object rather than just making a new reference to an object. That might sound expensive, but it depends how it’s used. For example, functions returning objects can use what’s called RVO (Return Value Optimisation) to make returning objects cheaper. You can also reference objects through pointers or the aptly-named references.

Secondly, there is no garbage collector. Objects are destroyed when they fall out of scope. For example:

class Object {};

void Function()
{
  Object objectA; // Default constructor is implicitly called
  { // Forced local scope
    Object objectB;
  } // End of local scope, objectB is destroyed
} // End of function scope, objectA is destroyed

Object Function()
{
  Object objectA;
  return objectA; // A copy of objectA is returned
}

C++ does support operator overloading, and if you’ve everwritten a C# indexer, the C++ equivalent is overloading the [] operator.

If you’ve used C#'s generics, templates are somewhat similar, but have slightly different rules and behave differently. As long as you remember that each instantiation of a template is essentially its own class you’ll probably be fine.

Oh, and if you’re used to using the wonderful rich library of C# (e.g. List<T>, IEnumerable<T>, StreamWriter et cetera), I’m sorry to say that Arduino doesn’t support the C++ stdlib and even if it did the Arduboy only has a limited pool of memory so only half the library would be of any use anyway. But that doesn’t mean you can’t make games or come up with workarounds. For example, in the past I’ve made a list class that has a limited maximum capacity but still supports Add, Remove, indexing etc.

There’s a lot more differences than just those, but those are good starting points. Most of the syntax is similar, e.g. declaring variables, namespaces, for, while, if, switch and writing functions are mostly the same, but there are differences so you’ll still want to read some tutorials, although you should find it easier than if it was your first language.

1 Like

Wow, thanks for all those precise answers! :slight_smile:

@filmote > I am completely open to a collaboration with whoever is interested: I’ve worked like that in the past and I like it. So if you are interested, then maybe we can set that up: I can post later tonight when I get back home a prototype I wrote in Unity for you (or anybody that cares) to try and get a feel for the gameplay!

@bateske > Yes, the fact that they call Arduino code “sketches” is was confused me in the first place :slight_smile: and nope, I don’t really want to look at scratch: if I’m going to learn something new, I’d rather go for something that would be useful for gamedev on the long term. This week end, I’ll install Arduino IDE and see if I can make sense of it !

@Pharap > No Assembly!!! I’m not that mad :slight_smile: I’m an artist that is not averse to code. I’m also a Professor of Game Design (that doesn’t steal student stuff (cf Bateske linked article! ;)) that happens to teach Introduction to Programming, in an Art School (hence why I know Processing). I’m not a great programmer, but I like it, and my school keeps giving me Programming classes because I guess I can pass my curiosity and code friendliness to my art students :slight_smile: but again, I’m not great. Your comparisons C#/C++ are reinsuring - and I’ve barely usen Enumerators or co-routines in Unity, what I do is simple enough to be single threaded anyway.
Again, thank you all for jumping on this thread, I feel very welcome and it’s exciting to be part of this new community

2 Likes

Sounds good … look forward to it!

1 Like

That’s a shame, because I certainly am :P

Sort of the opposite to me then - a programmer who’s not averse to art.

I have a BTEC in game design and a HND in computing, but I got fed up with writing essays so I didn’t bother to go any further.

I speak sort of from experience because C# was my main language before I learnt C++. Now I use them both equally for different things. C# for rapid development, throwaway programs and making tools, C++ for embedded systems, things that need to be small/quick or for general experiments.

They are very different beasts, but they’ve got enough in common that they’re more similar to each other than they are to most other languages (like Lua, Python, Haskell etc).

The Arduboy doesn’t even have threads so you won’t have to worry about that.

Developing for the Arduboy will be closer to using Processing than it will be to using Unity though. I had a quick look at the processing tutorial where they do the thing with the circles.

Ex_02_02

And made a quick little demo of what the equivalent would look like for the Arduboy:

#include <Arduboy2.h>

Arduboy2 arduboy;

void setup()
{
	arduboy.begin();
}

uint8_t mouseX = 64;
uint8_t mouseY = 32;
uint8_t colour = WHITE;

uint8_t otherColour(uint8_t colour)
{
	return (colour == WHITE) ? BLACK : WHITE;
}

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

	if(arduboy.pressed(LEFT_BUTTON))
	{
		--mouseX;
	}

	if(arduboy.pressed(RIGHT_BUTTON))
	{
		++mouseX;
	}

	if(arduboy.pressed(UP_BUTTON))
	{
		--mouseY;
	}

	if(arduboy.pressed(DOWN_BUTTON))
	{
		++mouseY;
	}

	if(arduboy.pressed(A_BUTTON))
	{
		colour = WHITE;
	}
	else
	{
		colour = BLACK;
	}
	
	arduboy.fillCircle(mouseX, mouseY, 8, colour);
	arduboy.drawCircle(mouseX, mouseY, 8, otherColour(colour));
	arduboy.display();
}

Glad to hear it.

There are lots of alternatives for Arduino besides Scheme: bitlash, firmata, BASIC, Atom, [Haskell])https://github.com/ku-fpg/haskino), Rust and a variety of Forths. The problem with all of them is that you probably don’t get the Arduboy library and may need to either write your own or wrap that one. This may not be successful: wrapping all of Ardubo2 for bitlash results in a hex file that doesn’t fit on the Arduino.

As for rudely calling someone else’s comment rude, you shouldn’t ignore what follows that comment: MicroScheme is poorly documented and in an unknown state of completion, which isn’t true of at least some of the other options. Unless you are specifically interested in a LISP, I’d check out most of the others first.

I’m not sure if you are talking to me? I don’t believe I labeled any comment rude? if I did, that was not my intention!

Wow, I’ll need to dive a bit deeper into this when I have more time, but that’s quite a different approach :slight_smile: Thanks a lot, though, this comparison will kick start me on what’s similar and what’s different!

Think he was responding to @Pharap’s reference to a linked post of @mwm - the comment was not directed at you!

1 Like

Correct, that wasn’t directed at him.

Edit: Note that my comment was recursive, in that it refers to itself.

1 Like

No, he means me. I said:

I agree though, forget I said it, I don’t wish to derail this thread.

Sure thing. If you have any questions don’t be afraid to start a new thread or pick someone to ask through PM or something.

Documentation for the library (Arduboy2) can be found here. Or if you’re like me and you prefer to look at the source code, that’s here.

No problem.
One of the reasons I chose that tutorial was precisely because I thought “oh, this isn’t actually too different”.

In fact I’ve got a feeling a lot of Process’s drawing functions either already have an Arduboy2 equivalent or could be replicated on the Arduboy.

@mwm: no worries - English is not my first language, so eventhough I’m used to express myself with it, I know I can sometimes come across as pretty dry - was just making sure it wasn’t the occasion.

@Pharap: I may very well be like you: I work best by reading other people’s source. it just allows to see things in application within their context. For that reason I’ve downloaded CastleBoy’s source to go over it during the week end, it’s very close to what I want to achieve, so it should provide me plenty of context! (ah, the beauty of open source)

@filmote: http://www.garage-collective.com/arduboy/

It’s not my latest build, nor the cleanest, I just couldn’t find my latest build handily, but it will give you an idea of the gameplay (it’s actually quite hard!)

SPACE to shoot, UP arrow to jump, DOWN arrow to crouch (when you reach the moving spikes, for example). This builds misses all the menus and UIs, but it’s irrelevant for arduboy as they would all need to be rebuild and redesigned anyway.

@anyone that is interested in a collab, I’m super open to it, it would speeds things up. If not, I’ll dive in Arduboy code anyway! If you want to collab, hit me up (not sure how messaging works here yet, but I’m sure it will be obvious!)

1 Like

Oh, and if you want to see me at my best, and don’t ‘hate’ Flash, you should give a shot at : http://www.newgrounds.com/portal/view/629531

It’s my last, and most popular game (18 millions unique players and counting). I’ve done the art, UI work, and some level design Game design, and partnered with a coder (Richard Myles) that did the code, sound, and the other half of Game Design and level design. It was a very fun collab.