Topic: void Run(Project* proj) { Run(new SideProject); Run(proj); }

That title wasn't as obvious as I expected it to be.

But yeah, I am still working on my "personal" project She Wore White. But that's lead me to start a side project of writing a new tool set. Which has also started me off with something else. I will warn people now, this will be a long message, but I think it's about time for me to give a little insight into what I've been up to.

She Wore White.
So, unfortunately things have been moving incredibly slowly for this. Having to work in free time in a team means that quite often we have to wait for schedules to overlap, which can take longer than would be preferable. However, we have made some progress. My writer has informed me that the script is getting written, my environment artist is preparing a video for demo purposes, and we've been going through the VO auditions.

This is where my side project spurred another side project. I was going through a roadmap of what I needed to do for She Wore White. One issue with the project is that, on the code side, for now, it's just li'l ol' me. Maratis is a very capable little engine, but I don't want to be stuck coding absolutely everything.
The game is technically "my" vision, but, I will admit to having the creativity of a dead fish. I couldn't tell you which camera pans might look nice, how a room should be layed out, what colours to use etc. What I really want is to be able to offload this work onto the people who would do the work better than me.
I've actually had a discussion with Anael about this. He said (quite rightly) that you can do all of what I'm likely to need within Maratis using the editor and with lua scripts.
However, I do know that, especially when you're asking people to give up their free time, especially if you can't afford to pay them (much) then any minor annoyance is a huge problem as every time it happens, they are more and more likely to just say "forget it" and ask me to sort it. The example I think that I gave to Anael was that my writer isn't a programmer at all (in fact, he studied Biology at university). If he has to dive into lua scripts to modify dialogue trees, it's going to get tedious for him very quickly.

So, I want to make some tools to work with Maratis. There is a significant chance that I will spend more time doing this than making my actual game, but the way I see it anyway, a programmer should be the person who provides other team members (designers, artists etc) with the medium for which to express themselves. Plus, hopefully I'm going to be contributing to the Maratis community a bit by doing this.

My first plan was to extend the Maratis Editor, as it already has a lot of the basic functionality needed. I have (I have to say, against Anael's better judgement) decided against this. For what I would like to do, I think the current editor system is not really suitable for large scale extension. The "ideal" situation, in my eyes, for this editor to be in is that it's easily extensible. Probably most of the functionality would be provided in several lua files. If this works well, I can implement a pretty simplistic editor in reality, and then, through use, extend it by writing little helper scripts to do common repetitive tasks. New features (like the particle system, which I'm totally still working on) can define their own extension to the lua API and their own set of base scripts etc.

Anyway, this design obviously needs a robust and flexible GUI solution. I have spent a good deal of time looking into what is available. I had started writing my own GUI library in lua, using Löve, out of frustration of there being no nice data driven GUI solutions, but I have come to the decision that I can't even hope to maintain that, on top of everything else I'm piling on myself. As a recommendation, I looked at Awesomium. This looked...well, awesome. I chose not to use it, however it doesn't support mobile platforms and, for larger scale projects, would require a $2900 license. Not sure this is too much of a problem, but as Maratis is entire free software so far, I'd like to keep with that. Next, I looked at libnui. It also had a commercial license, but was far more reasonable, and the author has suggested that he may release libnui under a more flexible license. However, I spent several days (almost literally) banging my head off integrating this, getting error after error. One of the main things is that libnui wants to be an application framework, instead of just a GUI library as I needed. For this reason it had almost as many external dependencies as Maratis itself and included things like a TCP server. The final compiled lib was 170MB (in debug, release was 17MB). Far too much stuff to rip out. Then I came across libRocket. This has been a LOT less painful to integrate and (almost) have it plugged into Maratis properly. In fact. I did most of the integration in one train journey (I am currently working 12 hour days, so my side project coding can only be done during my commutes). I'm getting a segfault when running it, but I'm sure that, once I get around to having a look at this when I'm not insanely tired, the problem will just evaporate.

I have forked the Maratis player code, but I've barely changed anything in it. The main reason for doing this is to just add a new command line parameter support, so we can load the Maratis INGame EDitor plugin with Maratis.exe --preload=minged.dll (or ./Maratis or ./Maratis --preload=minged.dylib) The idea being that there's no Editor application as such, you just load your game as normal, but then hit a hotkey (F-key as personal preference) and it pauses the game (?) and displays a customisable editor overlay.

Anyway, as I've said, it doesn't run yet. I've got it up on Github though as I want people to be able to see what I'm working on. As soon as I have a prototype in a working condition, I will only ever submit code that I know runs though. If you feel like checking it out, it's over at With any luck, this will be running this weekend. I might even get simple 3D picking working and displaying transform information, who knows.

Oh, and it doesn't even begin to compile on OS X, but I don't have much dev-time available on a Mac, so if anyone would want to offer for this... wink


I have absolutely no reason for doing this. The PSP is old now. Very few people are going to be very interested in making a game to run on the PSP, however, I have a PSP flying around my flat, and I have had the unofficial PSP SDK installed on my computer for years now and done very little with it. During my train journeys, I've got frustrated with the GUI integration and wanted something new and different to sink my teeth into, so I thought I'd try and get Maratis running on PSP.

To be honest, I've not done an awful lot. I'm using the premake4 project files that I created for MIngEd to build Maratis, just generated GNU makefiles and changed CC=gcc to CC=psp-gcc and the like. A few include directories and cflags and that's more or less all I've done. I have, so far, compiled all of the 3rdparty libs that Maratis depends on, and tested a couple by linking into a PSP example program (and calling a couple of functions). Not a particularly thorough test, but enough to make me confident that I'm compiling them correctly. I've also got MCore and MEngine compiling. The next thing would be MGui, "Common" and the Maratis player. Of course MGui and Common require at least partial rewrites to support the PSP graphics system, and audio system but I've looked into this and... well... doesn't look like it's too much work as the homebrew pspsdk was based largely around OpenGL it seems. (Of course, most graphics libraries work in roughly the same way due to the architecture of the underlying hardware)

As I said, this is a mostly pointless side project, as I don't think many people would even be interested in porting to PSP any more, but it's sort of fun, plus it would be cool to be able to show a Maratis game running side by side on a Windows computer, a Mac, a Linux machine, an iPhone, a PSP, and anything else anyone cares to port it to tongue Speaking of which... I think my work has a PS3 devkit...


I have promised to continue with the tutorial series. I do definitely still intend to. The problem for me (apart from my serious lack of time) is that I promised to cover the first tutorial stage in a video... I've tried it several times and... well, I hate my own voice, so editing and sorting it has made it frustrating tongue I will try again when I have time, but I've definitely not forgotten it.

Particle system

Along with some of the other things, this has got put on the back burner. I definitely intend fo continue this, especially as I will need it for She Wore White, but until I have the editor framework sorted, I would like to leave it.

((Which reminds me, I am intending for all plugins I write, including hopefully MIngEd to be compatible with "stock" Maratis. What might have a custom crafted editor panel, like a particle system, might just show up in Maratis Editor as a MBehavior))


As with the particle system, I'm holding off on doing much more of this, mainly because I want to have somewhere to write the information to, like a custom panel in MIngEd.


So, that's about it. As usual, I've started a lot of things. For once, though. All of them are focused on pushing one of them forward (She Wore White [SWW]). I might be quicker coding SWW myself and forgetting about all the tools and side projects, but this is really a labour of love, as I'm sure Maratis has been for Anael. As I said, I get very frustrated if I end up implementing other people's ideas as it always ends up with "can you change the order of X and Y?" "can you move Z up by 2px?" etc. So I really feel that my "best" role would be to make things to make this as easy as possible for them. Also, I do actually enjoy this, if possible, more than game programming.

I'm not really a fan of Twitter, but I've got one for my project, as I think that any attention is good attention. So if anyone's interested here it is. Also, if anyone has any designs/ideas on any of the things I've mentioned, I would really love to hear them. Especially if it's tech/tool related, as I'm obviously intending to make them to be usable for other people.

Re: void Run(Project* proj) { Run(new SideProject); Run(proj); }

Hey, Thanks for letting us know what's going on !
I tried that little voice thingie you made, it works as expected, love these little gadgets

About PSP, i also think it's not really worth it
(By the way, have you seen this : … yves-behar … 60-ps3-wii
No idea if it's true or not, wait & see

Nistur wrote:

this is really a labour of love

That's the most important thing wink
Best luck with your project, looking forward to the first vid !

Re: void Run(Project* proj) { Run(new SideProject); Run(proj); }

Thanks for the reply.
The voice thingie is just one of a set of prototypes I'm working on. With the lack of a proper game designer right now, I think it's probably the best way to figure out how things might work and what feels fun.

Regarding the PSP, I realise that it's pretty pointless. I just have this thing where I find it... hmmm... exciting I guess to see my code running on specialised hardware rather than on a PC through an OS that provides everything for you already. Out of the consoles that I have available, the PSP is the only modern-ish one that I have that is set up for homebrew dev. I don't fancy installing CFW onto my PS3 and losing PSN yet (although, I was offered a 60GB PS3(w/ PS2 compatibility) for cheap recently... so I may try and scrape money together for that)
Of course, homebrew games aren't really a sensible target if you're hoping to make games, but I think it's always good to demonstrate that your game is able to run on a certain platform. Also, as I mentioned, I believe my work has an official PS3 devkit (although, strangely enough, noone knows where it is... it's a giant black slab... how can they lose it?) as well as a Wii one, PSP ones and practically every other devkit you can think of... the only thing is, I obviously can't borrow one to take home, as they are large things, but also pretty expensive. However, I think I might be able to borrow them to use on my lunch breaks and potentially after the work day is over sometimes. If I'm going to be trying to borrow something so expensive, might be a good idea to demonstrate the portability anyway wink
But yes, I realise that it's pretty pointless doing the PSP stuff, but it's fun, and I haven't taken that much time on it, so it's all cool.

I've seen the Ouya linked the other day. It's definitely interesting. Would be a real reason to get Maratis running properly on Android. I'll be getting one! smile

Vegas wrote:

Best luck with your project, looking forward to the first vid !


Re: void Run(Project* proj) { Run(new SideProject); Run(proj); }

So, a little update is due, I think.
I've been incredibly busy since my last update. Unfortunately a large part of that was crunch time at work, so things didn't progress much with my personal projects.
She Wore White
To be honest, very little has moved forward with this project, I'm getting some art assets together. As always things are moving at a relatively slow pace, but they are actually moving, so I guess that's good.
This has recently made some actual progress that I'm very happy with. To begin with, the GUI solution. I have fallen back to doing this manually. I've created a very basic lua API for rendering and I'm handling the entire editor system, including GUI layout, in lua. Which brings me onto the next thing, I've been extending the lua API for Maratis. I've been wrapping things in modules and classes to make developing in lua a bit easier (hopefully). I've also done the same for everything for editor but placed it in a MIngEd module (so you can do things like window = MIngEd.GUI.Window(Quad(0, 0, 100, 100)) ) I've also added the possibility to npk packages through the Maratis File tools wrappers, and then embedded an npk file into MaratisPlayer, and the minged library. So, now the framework is sort of in place, I've started sorting the actual editor GUI. I've even done some GUI design myself. What I have so far is when you press F1, it shows an empty window. Then you can press (currently F3, randomly) to switch to atlas viewer mode. The window gets replaced by a larger one with the GUI atlas displayed. Especially for you lot, I have a screenshot for you.
Ok, so the atlas system is something I've obviously done, it takes images and stiches them into one large image, and then when I request to draw one of the parts, it calculates the UVs. On top of this, I've also written a font system and can already print strings fairly easily. The main problem I have is that, because I am doing a reasonably large amount of (small) images to put into the atlas for the font, it actually takes about a minute to build the atlas each time I start the program. I'm now working on writing an atlas to disk, and supporting loading a premade atlas, then adding the atlas creation to the build system.
I'm sure I've done quite a few more things, but I think that's enough for now
I've actually got it compiling and linking properly for PSP (with a previous version of MIngEd). I haven't got it running on PSP, because I had to package the assets and everything up, but I think I will abandon this branch, at least for now. It's still something that I would like to do, but it's a job for the future.
Tutorial, Particle system & Profiler
Nope. Not done anything. No time. Sorry.
For MIngEd and She Wore White updates, I usually complain about things not working on Twitter. Hopefully there will be more interesting updates soon.