Operation Black Sun 2
[Screenshots] [Downloads]

Operation Black Sun 2 was intended as rewrite of Blacksun 1. I wanted to do everything right and better than in the first game. I wrote my own tile engine, wrote my own GUI system, wrote an editor on top of that, wrote my own network engine, rewrote it, then rewrote it again (and named it Zoidcom), switched to OpenGL rendering so that I could render nice transparent stuff fast and just as that was done I switched to Ogre3D and dropped the tile engine notion completely. With that came CEGUI so the awesome menu you can see on the right didn’t work anymore without a major rewrite (most of the rendering used immediate mode OpenGL in my code). That left me with basically nothing but an engine framework that supported networking. And scripting. Did I mention that the complete game logic was implemented in Lua? I have seen Unrealscript and wanted to do something similar, so that was really cool. Here’s a short lua snippet that defines the particle effect that appears when a laser hits an obstacle:
------------------------------------------ ---- (C) 2004-2006 Jörg Rüppel. ------------------------------------------- LaserExplosion = { -- data needed by engine classProps = { ---------------------- -- necessary values -- ---------------------- -- name of the class name = "LaserExplosion", -- parent class parent = "ObjectBase", -- group this class belongs to group = "VFX", -- object flags flags = { -- display in editor bEditor = 0, -- will be instantiated on server when loading bCreateOnServer = 0, -- will be instantiated on client when loading -- set to 0 for objects with bReplicate = 1 bCreateOnClient = 1, -- will be replicated to clients bReplicate = 0, -- ingame visibility bShowIngame = 1, }, visual = { exploanim = { type = "2D", material = "Laser/Explosion", size = { 20, 20 }, }, }, }, -- freely definable data, read only objProps = { }, -- object variables. -- can be registered as replication data. -- on object instantiation, the value from objectProps will initialize -- a value of the same name in objectData. objData = { }, } function LaserExplosion:onInit() registerTimer(100, ShipExplosion.onTimerRemove, {self}) end function LaserExplosion:onTimerRemove() self:requestRemove() end
Want more? This one defines the player’s spaceship. This one defines a projectile. The framework can even synchronize Lua variables over the network. Anyway, all this happened over the course of two years I think and my focus shifted ever more to the development of Zoidcom. I abandoned the game shortly after the switch to Ogre. In retrospect, this was more a coding testbed for me than anything else. Due to that, Blacksun 1 is the only thing I would call a playable game in the series. The menu was awesome though (before the switch to Ogre3D).
You can still download it. Here’s the allegro.cc page.

