251

(15 replies, posted in General)

I can't remember anything particularly taxing in tuxracer you couldn't just do in lua, apart from the menu maybe. Great game though tongue

If you are wanting to write the game in C++ anyway, there is nothing I can foresee that might cause too big a problem, unless you want multiplayer, there is no networking support yet.

I don't doubt that writing tuxracer from scratch would be a daunting task, but why exactly couldn't you? I'm not sure I totally understand, C++ has no built in explicit types for vectors etc, as you have mentioned, but they are trivial to crested, if you choose not to use those supplied in a library you're using, for example your physics library. Maybe I just misunderstood something.

252

(9 replies, posted in Bug report)

Are you running the release, or building from svn?

I have Ubuntu on one of my machines at home, I can try and take a look, but I don't remember a segfault when running on Archlinux at all...

253

(15 replies, posted in General)

As an aside...

Lumooja wrote:

10) Usable with Code::Blocks and MinGW (because it makes around 8% faster code than VS, and compiles 30 times faster, and has better ANSI C++ support, and more C++1x features, and makes 64-bit code, and has native Linux support too)
20) Extremely fast (especially if you have seen the MinGW version)

Would love to get your version of this wink

254

(15 replies, posted in General)

Ok, so, I guess first of all, the features I needed from my engine were quite simple, I wanted the highest flexibility in terms of platform as possible. There was one issue here, much as mobile gaming can now be quite lucrative and can get a decent amount of attention... I am not sure if I'm allowed to do mobile games, specifically iOS games, due to my contract at work. I don't think it would cause an issue unless I started making a lot of money out of the game, but because of this I was focusing on desktop OSs with posibility to branch into consoles at a later date if needed.

Secondly, I wanted some flexibility with the engine itself. I have no issue working with closed source proprietary software when it's needed however, previous experiences with such systems have made me prefer an open system where I could change things if I really need to (instead of getting the reply, "sorry, you can't do that with X" on forums/IRC)

Lastly, I needed a community. With my game being a personal project, I don't (currently) have other programmers to bounce ideas off, or help decypher source code and APIs. It doesn't matter so much that the code and APIs are clear and documented (although it's always nice) but more that if I am incredibly stumped with an issue, I could post and say "hey, how would you do Y, I've tried it in the following ways" and get an answer this decade. Again, had bad experiences with other projects.

So, next up is what engines I considered. Well, first up was UDK. A great all-round package. Has some very impressive results and it's relatively cheap for indie development. However it fell down on one point for me. I'm a Linux user. I've done various talks about playing games on Linux and developing games for Linux. Much as I know the linux gamer market share is pretty abysmal, I would feel wrong not contributing to the games available for Linux. Since Epic no longer support Linux, this was out.

Second was the open source id Tech 4 (iodoom3) Again, had great results, far more than I could possibly need. Also, it contains Carmack-code... which adds a certain something to it tongue The issue with this was, mainly, the license. Now, I have nothing against GPL at all, in fact, I think it's a great thing, but it is a little constrictive for indie game development. I fully intend to release my game source at some point, but would be more difficult to get any compensation for the development (I'm currently out of pocket after commissioning artwork)

I didn't bother to look at OGRE again. I used it for a group project at university. OGRE itself is well documented. Has a thriving community. More than good enough for the job. The issue with OGRE is also something you could consider a strength... the plugins. There are plugins for anything and everything. They are all... hmmm... how to put this nicely... well... some of them are crap. We found that after trying to use 2 plugins (which were little more than wrappers for external libraries) we would have saved time to integrate the libraries directly. They're usually half written to solve a specific problem for one person and then released as a generic solution. By the time you've found the issues, you've wasted a lot of time.

I briefly considered Unity, but it has the same issue as UDK in that it doesn't support Linux. Also a few other pet dislikes with Unity, but largely irrelevant.

After coming to these conclusions, I spent a while looking at what other options were available (do I sound too picky yet?) I found Crystal Space and, like you, found it to be a bit of a headache to get anything working, so I decided it wasn't worth it. I had a look at the Sauerbraten engine but decided that repurposing a first person shooter engine for my third person adventure game would be more work than was worth it. XNA had the issue with Linux support.

Then I found Maratis. After sounding so overly critical about other engines, I don't want to make it seem like Maratis is the solution to all my problems, it has quite a few downfalls. However, the main thing that led me to say yes to Maratis is that, the first thing I did was email Anael to ask a couple of questions. He replied quickly in a friendly manner and was helpful and competant. After that I sat on the forums a bit, firstly just reading and seeing the frequency of posts, the content of them, and later, responses to my posts. Again, I found the forum, although not exactly busy, to be reasonably active and helpful. The issues with Maratis that I came up with are firstly the lack of proper publishing support, something I ended up contributing to and the lack of extensibility in the engine. Now, I don't want this to sound wrong at all (incidently "Anael's Wrath" sounds like a good title for a video game... tongue) Maratis hasn't got a lot of bells and whistles. It does a job and it does it pretty well, but there's nothing extra. Also, the design of Maratis is sort of geared towards a small, sleek engine. Bulking it out with the plethora of features that can be found in something like UDK would for one, probably reduce the average code quality, but also increase the complexity of Maratis. You could technically put any extension work you wanted into the game plugin DLL, or standalone game project executable if that's what you wanted but that doesn't lend toward generalised solutions and reusable code. Anael then mentioned that he actually had a plugin system, but it was removed from the release. Of course, if the plugins were enabled again, it might lead to a situation similar to what I found with OGRE, where there are many sub-par plugins. However I think it's the right path to attempt, and I think Anael does too (I'm not putting any words into his mouth here wink)

I think this deserves a tl;dr... so here it is:
tl;dr: UDK - no Linux support,
iodoom3 - GPL too constrictive,
Unity - no linux support,
OGRE - *shudder*
Maratis - not as "complete" but active, open and friendly

255

(48 replies, posted in General)

I've been having a play around with this and I can't seem to get the depth buffer texture to display at all... I'm basically using the post processing example, then I've added the depth texture to be bound before drawing the quad

    render->bindTexture(m_colorTextureId);
    render->bindTexture(m_depthTextureId, 1);
    drawTexturedQuad(MVector2((float)screenWidth, (float)screenHeight));

and I've passed through an array of textures in the drawing itself

    int texIds[4] = { 0, 1, 2, 3 };
    render->sendUniformInt(m_postProcessor->ExposeShader(), "Texture", texIds);

(I have started refactoring a little and moved the shader loading and initialisation into an RIIA class, but uniforms aren't in there yet, hence the ExposeShader) However, I can't access it in the shader at all and I'm not sure why. The fragment shader is, right now, incredibly straight forward...

varying vec2 texcoord;
uniform sampler2D Texture[4];
                            
void main(void)
{
    vec3 color = texture2D(Texture[1], texcoord).xyz;
    
    gl_FragColor = vec4(color.x, color.y, color.z, 1.0);
}

I'm clearly doing something mind numbingly stupid, but I'm not sure what right now. (and I've tried it with binding to 2 and accessing it any way I can think of)

256

(15 replies, posted in General)

I had this dilema at Christmas. I originally was intending to roll my own engine last year (got a good deal of the way through it too) but I realised I couldn't handle gameplay coding as well, on top of a full time programming job. This little brain can only take so much programming wink If it helps your decision at all, I can explain the research I did and reasons etc for me choosing Maratis over other more pedigree engines.

257

(48 replies, posted in General)

Thanks smile Just what I wanted smile Will get on this tomorrow

258

(48 replies, posted in General)

Right, I've finally had time during my lunch break to get this working properly. I have it loading the shader from a file and I have it (theoretically) reloading when I press spacebar. It's a bit flakey for some reason, and I don't like the fact that I have to give an absolute path for the shader filenames. Can I change M_fopen to look for files relative to MaratisPlayer, then the mproj, then global maybe?

Anyway, I'm now pulling apart the drawTexturedQuad code and I'll probably put this into a PostRenderManager type thing and stick it into the tutorial tongue The thing I don't understand though, how is the texture being passed to the shader? From what I can see, it's sending an empty texture, I assume it probably filles it with whichever texture has been passed to bindTexture. What's the easiest way to get the depth buffer passed in too?

259

(37 replies, posted in Engine)

Aha! I got time! I've created the MGui project in Visual Studio, got it compiling, got Maratis linking to it. I added a MDataLoader to MGui for the images, which seems like the most sensible solution for now (but I can easily change it if you disagree) and it's all working fine. True, it crashes when it closes due to memory exceptions, but I assume that's due to the issue you mentioned. I will sort out the getNew() and destroy() functions next. I won't submit anything until it's been tested on VS2005, VS2010, scons on both Windows and Linux and even then only when you give the go-ahead wink

With MGui as a dll, I can now start working on the plugins smile

260

(37 replies, posted in Engine)

Hmmm, I can see why that's done then. I guess I can include the MDevILLoader then. Unless you would prefer registering a data loader inside MGui too. Thankfully MDataLoader is in MCore, so that shouldn't be too much of an issue. Generally speaking, MEngine can then setup the MGui image data loader to the same as what it uses.

Anyway, I'm no sure exactly when I'll get time to look at this. I might have time tonight, but it's quite possible I'll be busy again.

261

(37 replies, posted in Engine)

So, I've finally got around to doing some of this Love plugin/MGui.dll stuff. The obvious first stage is to get MGui building as a DLL, which works fine using scons, but in the VS project, after a bit of rearranging and stuff, I've noticed that MGui.cpp includes MDevILLoader.h, which is in Maratis/Common/MLoaders... Not really a great place for MGui to access. Is there any reason why this is used directly, or why it's not using MEngine::m_imageLoader?

Unfortunately I can't devote an awful lot of time to this right now, as well as work, I sort of have 3-ish other projects :S My actual game, the tutorial series which I have a few more things to write up, and the Maratis3D/Love2D mash up (plus the mini profiler, which has the time profiling done, I'm just waiting for access to MGui properly so I can create a profiler window)

262

(5 replies, posted in Gossip)

lqez: Great to hear from you. NPK has been a pleasure to work with. I've yet to find any issues with it. I would request that maybe there could be a little more documentation wink (as with everything) If there's any way I could help with that, I can try smile I don't pretend to know how libnpk works inside out, but I can do my best smile

263

(15 replies, posted in General)

One way you can do it, if you want, is to create a "map" image of the racetrack and save it as a bitmap in memory. You can either create this dynamically from the level, or load it in as an image. You can then poke and prod the pixels to your heart's content.

I'm not saying this would be a good idea. Much better to mark the areas with collision volumes or some other tags. But hey, you could do it smile

264

(7 replies, posted in General)

One computer that Maratis has been tested on (unfortunately no specs on the machine at the moment) all that was displayed was the pale blue  Maratis colour in place of the 3D scene. I assume it's a hardware issue, what is likely to cause this problem and can it be avoided?

... if only the people I worked with were in the same city, I could go and check and see what's going on...

265

(48 replies, posted in General)

That's perfect, thank you smile

266

(48 replies, posted in General)

I guess when I find out, I will add it to the tutorial then too smile

267

(48 replies, posted in General)

I have recently been sent a very nice .blend file by my artist. It has some very nice effects in it... but they're made of shells... I've been wanting to stretch my legs with shaders and thought this would be a good excuse.

The first question, is there a reference for the standard shaders, which values are automatically filled?

Secondly, does Maratis have any way to apply a full screen shader easily? Should I just create a full screen quad in a UI level (/manually in code). I should have access to the depth buffer, right?

What I'm wanting to do is put a light grain on the screen, maybe volumetric fog and, if I get really carried away, volumetric lighting. All of these need to be applied to the full screen rather than per object.

268

(47 replies, posted in Tutorials/Examples)

I've been far busier than I anticipated. I finally managed to spec out a little of the next stage, I'd like to have some feedback on the plans I have so far, especially from anyone with any experience making an FPS in Maratis as to what features I'm likely to need. To be honest, much as my name is in the credits of an FPS game I wouldn't presume to know what might be needed in setting one up from scratch in Maratis.

I have, however, been trying to acquire an environment from my friend Umar, which would probably be licensed CC BY-NC-ND. So at least the game should look pretty tongue

I found the board and had a quick look at the translation. Looks very impressive, I mean, clearly there are much much prettier renders of that scene, but people were quoting times from 11s to 1h20m from what I could see... so considering this is realtime... it's pretty damned impressive. Maybe you have found a new market for Maratis? wink

Nice, where did you find that?

271

(37 replies, posted in Engine)

It could be exposed in MEngine, certainly. I wouldn't base it entirely off the svn version. In fact, I might populate a struct, something like:

struct MVersionNum
{
    unsigned short major;
    unsigned short minor;
    unsigned short revision;
};

That way, you can have something like {3, 2, svnversion}. It should be fairly easy to pull out the information with your scons build system and create a specially formatted header.

When I get around to it for the profiler window, I'll see if I can sort out the MGui new/delete stuff.

272

(37 replies, posted in Engine)

Ok, to begin with, the version numbering, yes, maybe something like

// in some plugin
bool StartPlugin(unsigned int maratisVersion)
{
    if(maratisVersion != s_pluginRequirement)
        return false;
//...
    return true;
}

But also, it might be worth allowing for plugin version numbers. I'm not sure if it should be in the same method, maybe filling a version number reference. Not entirely sure. Anyway, then you can have plugins dependant on specific versions of other plugins.

I will have a look at MGui and see whether I can pinpoint any specific memory issues, I think it's worth making dynamic as it's something that plugins will almost definitely want to take advantage of.

The issue with using the MGame::draw virtual is that we can only have one game, which should be implemented inside the game.dll. If there are other plugins, they can't really add to this. I was considering maybe something like registering something in the MPlugin to update and draw. Some plugins can then ignore it when not needed. Not sure.

MRenderingContext looks like exactly what I was looking for. I was intending to integrate Love2d more fully and remove GL calls and replace them with engine specific ones, so MRenderingContext calls should be able to do the job nicely. Quite a bit of work, but worth it in the end, I think. Anyway, I'll keep poking and see what I come up with.

Thanks for the reply

273

(2 replies, posted in Engine)

I only found this post because a spam comment pushed it to the top. I realise it's pretty old now, but I just thought I would put my thoughts down too. As it stands, the current design of Maratis wouldn't allow something like this at all. It would require significantly more complexity to be added to the base system and I'm sure that everyone, especially Anael, would prefer a simple, stable engine rather than a bloated one with random features.

That's not to say that this wouldn't be very cool. It definitely would. However, I think there would be a better solution than that blender real-time exporter. If you have a look at the tools that Eskil Steenberg wrote to make his semi-mmo game "Love". His tools are all open source and freely available and use the Verse protocol.

Again, to add this to the main engine code would be a strain on the design, however, when the plugin system is set up again, might be a candidate for that. Not that I have time to do this, but I thought I would just put the information down in case someone else was interested in picking this up. smile

274

(37 replies, posted in Engine)

I've been very busy with various things, but I've been slowly progressing with the profiler. Just a bit fed up with putting tags throughout the Maratis code tongue Time consuming and boring. Almost done though.

Anyway, a couple more things I wanted to ask about. Firstly, the plugins, for ones that aren't game.dll, what do you think about a version number system, so we can add dependencies and ensure they've got the correct features. I can add that to the stuff I've been working on, if it's approved.
Secondly, in terms of drawing things, for MGui things, I should be able to just access MGui if I build it to a dll, right? And I can create a child window? Or should I try to work it into the existing UI layout? This might cause problems though if there are multiple plugins which add their own UI stuff.
Finally, and still on drawing things. What should I do if I want to draw things directly? Would just using GL calls work do you think? In particular, I'm considering integrating the Löve2d engine into a separate plugin which I can then use for a data driven UI solution.

275

(47 replies, posted in Tutorials/Examples)

I had a go with something similar already and couldn't find numbers that would make it feel smooth uphill which didn't cause you to float down too slowly if you ran off the top. I'll have another fiddle and see what I can get working smile Thanks