Blog! Team! Forum! About Apricot! Press! Gallery! Development! Yo Frankie! Apricot Open Game Project mee!
May 16

Our Game Development Kit

icon1 darek | icon2 Crystal Space, Development | icon4 05 16th, 2008


Some people are curious how everything works, so I’d like to explain how we combining every piece together and putting life into it.

What is the biggest obstacle in the typical development process ? Well – let’s divide that process to 3 stages: planning, implementing, watching results.

1) Planning: It’s a very cool stage, you can sit in comfortable place, take a favuorite drink, piece of paper and now you thinking and inventing, nothing is wrong here, you need a good plan.

2) Implementing: So before you start Implementing your brilliant alghorithm you spent a lot of time already, but can you do the same with implementing ? Well, better not too much. It is also nice stage, many people enjoying programming for example, but if implementing stage is harder than planning – then something is wrong. Tool serves for human not human for tool.

3) Watching results: Worst case is when you need to wait too long between implementing and seeing results. It’s a waste of time, really nothing interesting happens there, so perfect time for this stage is 0. Now we have much modern tools but in the 70’s you waited for a result a couple of days waiting in a queue and converting program to punched cards. Later in the 80’s you need to write program, compile, link then see result so it takes a couple of minutes. In the 90’s during game development people need to export 3d model, put into right directory, write in code loading and displaying, initializing etc, then compile, so still a couple of minutes. But today we have 00’s (?) 🙂 So in our tool this time is Zero. We can see results imediatelly.

When you see on screenshot:

Left-top corner: working game using external engine, you can play there.

Right-top corner: blenders 3d window, you can add, delete, translate and edit objects,just blender.

Left-bottom corner: visual scripting using logic bricks.

Right-bottom corner: python console so you can program in realtime and everything changes in the same time in the game.

logic.png

30 Responses

  1. venomgfx on

    worth to say that he have lot of layers disabled in that screenshot, like trees, vines, grass, flowers, items, our level is much more filled right now! 🙂 as well as eyecandy like hdr and shadows in the CS screenshot there are not being used.

    just a word to let you know that the detail level is much higher than in that image.

    😀



  2. u on

    thanks for posting the screenshot, i’m quite thankful that you share so much of your development. I cant wait for the Apricot and Peach DVD’s!!!!



  3. ZooRocket on

    All I can say is wow… been in the game industry for years now and worked with Source and Unreal engines… they can’t even give you realtime feedback like this. Great job guys and two thumbs up to the Apricot team! Keep up the great work guys.



  4. Pablo Lizardo on

    nice nice!, i dont understand much about crystalspace and cel … but is great to view how combine everything!… great work!!!
    Keep writing posts! Saludos!



  5. Francisco Ortiz on

    What can i say?

    GO HELL!

    You messed up whith my keyboard because of the slobber. It is not waterproof guys, take care with your future posts… That one is IREESPONSIBLE! :))

    Video pleaaaaase! Thank you very much!



  6. randomnut on

    I love the 00’s…



  7. Mal on

    Firstly, thx for the blog post – any post about the game / tools / dev is good news for us readers 🙂

    I’m just wondering if this is the post that was mentioned as coming soon, that showed a lot of really cool stuff ( and was waiting for )?

    If so, it might be worth showing a screenshot with all of the features ( as venomGFX mentioned, they are turned off in that screenshot ).

    It’s great to see a post like this of course, but to be honest it’s more like an ordinary weekly / every few days development update, rather than a very exciting one.

    Just my 2c after waiting ages for a *really* cool post 🙂



  8. Mal on

    One quick question 🙂

    Why isn’t the view in Blender showing textures etc, as this would then allow it to be a more true WYSIWYG editing environment? Sure, some artists might prefer to work like this, but from my experience, most artists would prefer to see in Blender as close to the final output as possible.

    We have set up our toolset in a similar way for Shockwave 3D – not using Blender though, this is something we’d like to do though if possible after the input from Apricot project – and it is a HUGE time-saver.



  9. Felix Kütt on

    thanks for the post, most interesting. 🙂



  10. venomgfx on

    Mal, not this is not the exciting post we were talking about, this is just a random post that darek wanted to write.
    we promise eyecandy!, this is technical stuff, in an eyecandy post the less we can do is a video fly-through our level from Crystal Space view with at least the sheep walking around 🙂
    Now *that* would be the post we were talking about, and what we have to show right now.

    And i guess he is not using the textured mode in Blender because he is only in charge of the logic, no need to see fancy textures, you know programmers 😛 , but chris and i use it all the time!, Solid Textured mode and GLSL (a post about that is coming soon too).



  11. MrNoodle on

    I hope you will post soon a true in-game screenshot.By the way are you going to release any kind of demo ?



  12. Christiaan Bakker(AniCator) on

    Give me some eye candy! NOW! 😛 …………….
    please. ^_____^



  13. Blendiac on

    AuuuuAaaAArrrrRrRRRRrGggh!

    Want…apricot…DVD….NOW!

    I haven’t gotten around to trying the blend2cs script yet as I thought it would mean going back to trying to use scripting for virtually everything. I’m intruiged to see Blender Game Engine logic bricks and CrystalSpace visual output all in the one interface.

    Drool.

    Now I just need the apricot DVD to tell me how they did it. The game will be nice, I’m sure, but it’s the tutorials I’m really hanging out for. 😀

    Go team Apricot!



  14. Matroblend on

    Very very cool I look forward to the day when the tool truly does serve the human…

    And Blender is the only reason I ever thought I could make my own dream into a game



  15. myselfhimself on

    hey
    this is wordpress stuff sorry
    please, would that be possible to be able to be have the links back on the commenter’s names so that I can go to their websites ?

    I don’t know the cs engine much. Could you show once how you have python scripts run .. For example in blender’s normal GE, you need to have a Python controller and type in a python script filename. How is that for the cs engine ? How do the scripts look like ?
    I know that this is like a tutorial request sorry… I should dig into that myself looking at some CELzip file contents.

    thank you for your blog post
    sincerely



  16. venomgfx on

    myselfhimself, about the WP thing, if I understand right you want the names of the commenters to be link to their websites? its working right now AFAIK, except on those that doesn’t fill the WebSite field (wich is optional).

    about the CS thing.. better to have a programmers answer.



  17. jendrzych on

    I noticed some extra GUI elements on the header it top right part of the screenshot.

    What are those two icons between “Move object centres only” and “Use 3D transform manipulator” buttons?
    What mysterious functions those are linked to?



  18. venomgfx on

    jendrzych, is the ndof plugin, those are options for the SpaceNavigator device.



  19. antont on

    Yeah working ‘live’ is the thing!

    Have been just making and tweaking (pretty simple) AIs for the game we have in production for the past couple of weeks. Started that by embedding Python to the engine (we are using Ogre there) to be able to change the code while the game is running. I think it’s invaluable for such work. Before getting to AI even I tolerated having to compile & restart the game for a relatively long time 🙂

    Not to mention how important it is for lights, sounds etc .. we actually haven’t done that work for this particular game yet, but will during the coming week. I’m afraid we still don’t have the full toolset as nicely as Apricot set yet, but will definitely show this thing for our artists and designers (who have gotten comfortable in editing Python conf files by now but certainly appreciate GUIs) now, have of course told them about this earlier, so I bet there is coming pressure for us to get this to use too.. dunno what obstacles there’d still be on the way.

    One question: what kind of a Python environment is exposed to that console? How do the game objects, entities etc. show there? Is it the CEL api?

    In our production I’ve been so far reusing the model that developed for earlier for a prototype of another game, where a single object ‘game’ is exposed to scripts, and that is kind of a singleton of the main class of the game (which aggregates everything, has the mainloop and the list of entities etc). I gave that code (gameplay unittests using that API 🙂 to Caedes earlier, dunno if he has looked at it enough to know what I’m talking about 🙂 Basically via that singleton the Python code can do anything with the running game. It also gives direct access to the scene manager etc. (in our case the Ogre scene manager).

    Besides that singleton the ‘scripts’ (well, really they are just the game code: entitity etc. definitions as Python classes, but also just arbitary functions for testing out & debugging things etc) have full access to all the libraries there are in the system, in the case of this came: Ogre, .NET and Python. (.net for stupid historical hardware related reasons, we are using a special control device and the old version of the driver used .net and this game still has legacy code from that era (summer 2007) – the current driver is native so we can also ditch .net and use just c++ and cpython, but haven’t had time / need for porting yet. c# and ironpython are quite ok for devving)

    Perhaps Caedes, or even some designer if you use Python too? can post at some point an example session of typical things you do with the realtime console. I can collect and share things about our respective usage too I guess, haven’t really thought before what all I acually use the console etc. for 😮

    ~Toni

    P.S. am kind of returning from “holiday” (paternal leave, of 1 month .. i had to program stuff for the game at the same time though, but also take care of the baby so had close to no time at all for e-mail & web, or irc) now so catching up on things. Saw now also the post with the test cases, which seemed brilliant. Wanted to ask one question about that too, well, I guess it’s better there even though the thread is quite old already, so I post about automated tests there now too.



  20. Ali on

    @venomgfx: Will the video you promised show include gameplay footage or just a fly through one level?
    Thanks in advance 🙂



  21. George on

    Are you using the actual same version of Blender avalible free off http://www.blender.org? Or a specially designed one for this game?

    Thanks



  22. caedes on

    Yo Antont!

    Should make some videos as people is requesting, but well, ill explain a little bit now, and do the videos at some moment (still have to find a good way of making videos with good resolution).

    About the api we get in the console, its basically the cel and cs api, exposed through its main python modules (pycel and cspace). This gives access to all instanced objects (Entities, Meshes, Lights… whatever). Of course any python module is available there too (like Blender, so we can also develop blender2crystal “live” now… o damn syntax error… ook… modify… reload(b2cs.tool3d.ui_celstart)).

    So.. we can inspect or manipulate any given entity, and many times save them from disaster :).

    So… for example, some typical tests..

    for ent in Entities:
    print ent.Name

    ent = Entities[“camera”]

    for pc in ent.PropertyClassList:
    print pc.Name

    pcmesh = celMesh(ent)
    pcsteer = celSteer(ent)

    print pcmesh.position,pcmesh.sector

    pcsteer.Seek(Engine.Sectors[-1],csVector3(0))

    print pcinv.EntityCount
    pcinv = celInventory(ent)

    print ent.RefCount

    and so on… in general i use the console to find out about dirty shit, like stuff not getting destroyed, or plugins behaving strangely, but also to some degree to test new functionality, investigate usage of the api or tweak stuff.

    (note for reloading components we also have a nice menu -both for python and visual logic-, so console is not always necessary for the development)

    Finally, one thing darek forgot to explain, we also have a very nice report listener, which allows to see all reports from different entities or components in the engine, by sections, this serves to manage all the information coming from the game in a nice way, no longer is it necessary to skim through long program outputs to see whats up. I find this listener extremely important for the development process.



  23. venomgfx on

    @ Ali: maybe!, right now we have some gameplay but is still really rough (a new Animation System in CrystalSpace is being re-written), i wouldn’t want people to see that kind of quality now, personally i prefer to wait and show better stuff.

    @ George: we are using our own blender branch for making this game, wich you can download the sources and compile to use exactly the same version we use.



  24. antont on

    Hi again Caedes, and thanks for the very informative reply!

    I am working basically in the same way, but I don’t even in fact have a console in all systems but there use files as workaround .. have two files now in the newest (and least mature) prototype, level.py and input.py, and they work so that input.py has like the console input for immediate debug etc. like things you showed, and level.py is the actual config that is the game that is running.

    Then while the game is running i can either just run the immediate code from input.py from one key, or clear the level and restart the game by rerunning level.py with another key – this way can work with the game AIs etc. live, change the classes etc.

    Reporting certainly has started being problematic, so your report listener sounds like a great idea.

    This starts to sound such that I must take some time at work relatively soon (the beginning week) to see if I could start using your toolset, at least partly. At least wanna give it a shot, so will build the branch etc.

    Certainly believe it would be good to visit too like we talked about earlier, must think of some scheduler w.r.t that too with the other guys now again.

    Btw, regarding the animation system: did you ever consider using the blender armature stuff for the game? IIRC when Ton rewrote it he made the point that it’s now quite clear and easily usable perhaps outside too. I don’t know if it’d work for games, perhaps if using a limited set of features, but the idea was kind of up then. The internal GE still uses it somehow I guess?

    ~Toni



  25. Apoclypse on

    Caedes: I was wondering if the version of blender2crystal you guys use is included in the apricot branch. I have the svn version of b2cs from your site but can’t get the crystalspace views to load in the viewport like yours does. Is there something I have to do?



  26. genjix on

    yo!

    I think blender animation system is not suitable as it’s really not designed for realtime blending. For instance all the complex rigging setup features are not too needed and even the IK uses jacobian matrices which is slooow. Realtime blending needs to be more intelligent than animated one, so they don’t share much in common.



  27. antont on

    hi genjix!

    is the new animation system you are using / developing in some crystal space repo now? sorry for being lazy, i may search for it later, but thanks for the reply anyways 🙂

    ~Toni



  28. Chronicles on

    I am just wondering because I am in love with that program just from the screenshots, will this be released with the game cause I am already thinking of projects I could make using it.



  29. ender.saka on

    Great job!

    It is unbelievable how far is gone the technology of this 2 softwares.

    I only would like to understand better how to actually use the combination of them for a personal project. Should I compile/install Crystal Space, CEL, Blender2Crystal and Apricot Blender Branch?

    And then? Should I just simply run Blender2Crystal?

    I am sorry for all this questions but I am more an artist rather then a developer and I never tested Crystal Space before.

    Thanks a lot.



  30. SR on

    what external game engine is being used. THat would be cool if you were to post a game development kit download with everything needed to make your own game.