DjArcas's Blog

Blog from the developer of FortressCraft

Blog from the developer of FortressCraft


  • Moving house sucks.

    Posted on by DjArcas

    I’m sorry things have gone a little quiet; I’m in the process of both moving half way across the country, downsizing my life, and trying to re-arrange my life around no longer having a ‘normal’ job.

    Part of this involves going through a great many boxes of very old crap, and deciding what I want to keep; sadly, I’m a bit of a hoarder, and have always been what’s known as a SINK; Single Income, No Kids. I also have a taste for small, Japanese, battery-powered gadgets. So my house is basically full of cool things. Some of them are now only cool in a very nostalgic sort of way; I mean, how cool is a 40meg, 3.5″ tape drive? (Back from the days when 40 megs was enough for a month’s worth of server backups!)

    I’m also attempting to create a more efficient environment to work in; as you can see from this older image, my workspace is cramped, and really geared towards gaming, not an ideal multi-computer, multi-console development environment!

    Old Workspace

    Old Workspace

    The new desk is custom designed from modular bits from Ikea, and looks great; I’ve got a Kolon to protect the floor (and I assure you, the jokes NEVER get old). Over the next few weeks, I’m balancing both finalising the OnLive version, getting CP9 out, celebrating 1 year of FortressCraft AND attempting to play the occasional game.

    Sadly, it’s at this point that I wish I had a whole team of people to delegate to; Martijn is getting on nicely with the [TECHNICAL THING TO ALLOW BETTER DRAW DISTANCES], but he has a proper life too; other than that, everything (barring art) falls onto my shoulders.

    So I’m sorry if things are a little slow. Normal service will be resumed as quickly as possible. In the meantime, please do continue to tell me ideas and changes you’d like to see in FortressCraft; reading emails and the forums on my phone is something I’m never too busy to do!


  • A brief history of Voxel games.

    Posted on by DjArcas

    As I continue to write Indie games, and thus actually interact with the public; my AAA-game protective shields of ‘DON’T TALK TO THE PUNTERS’ now removed, it never ceases to amaze me of people’s ignorance – “But Notch worked on Infiniminer!” being one of my particular favourites, closely followed by ‘But Notch invented procedural landscapes!’

    So, as you all know, FortressCraft is a VoxGame. Sadly, this more defines it in terms of rendering than gameplay – but what is a voxel and why do I use them?

    Well, let’s look at Wikipedia:

    A voxel (volumetric pixel or, more correctly, Volumetric Picture Element) is a volume element, representing a value on a regular grid in three dimensional space. This is analogous to a pixel, which represents 2D image data in a bitmap.

    That’s pretty good! Now, I’ve seen people say “But you use polygons!”, which is rather missing the definition. Think of a pixel – if you have a white dot moving around the screen, is the pixel itself moving? Clearly not. Pixels can only change colour. What happens there is that a series of pixels light up in turn, thus creating the illusion of movement.

    The same applies to Voxels; a voxel cannot move, or rotate, or scale. It is a fixed size (FortressCraft uses 1m3 voxels, for a vast range of performance reasons)

    This is explained nicely using this video:

    The landscape is voxels, rendered using polygons; the flying cubes are instanced objects, also rendered using polygons. I could use a software renderer, to do raycast, scanline rendering; they’re still voxels!

    The first game I’m personally aware of to use voxels was Comanche Maximum Overkill, an arcadey helicopter game from 1992.
    It’s hard to look back on that game, and realise that the landscape rendering presented there was nothing short of mind blowing. The reviews called it photorealistic. Nothing like it had been seen before. And it ran wonderfully, even on a 486!

    (by the year 2000, voxel landscapes looked like this, albeit only in tech demos:)

    Interestingly, the terrain generation techniques used here are almost identical to that of FortressCraft (or Minecraft); a combination of Perlin noise and/or fractal fault techniques.

    Voxels are fast, really, really fast; as they don’t scale or rotate, your renderer can make many assumptions about rendering, and assumptions leads to fast rendering. (Also making an ASS out of U and… mptions.)

    Voxels also have one other incredible advantage over traditional heightmaps or mesh worlds; deformation and alteration. You can alter them easily; an explosion can carve out a crater, vehicles can leave treadmarks, And unlike heightmaps, you can have caves and overhangs.  Magic Carpet shows how far you can really push traditional mesh-based landscapes, and voxels sail past that level of quality.

    FortressCraft *could* have gone with a landscape system like Comanche’s; the engine would certainly do it; but the user experience would be awful. Building anything out of tiny cubes would take forever! Comanche also didn’t support any sort of terrain alteration; the voxels were like a blanket, floating in space; if you could have scraped away the top layer, you’d have been left with void.

    Now, as far as I know there’s a gap between ‘92 and 2000, when VoxLap was created. VoxLap is probably best known these days as ‘The Ace of Spades Engine’, but it’s been around a long, long time: Here it is in 2000:

    VoxLap brought one major innovation to this; if you have, say, a diving board in a swimming pool, and you cut the base off the board, the remainder will collapse and fall. (The cut off piece disappears, it doesn’t maintain physics)

    Work has continued on VoxLap to this day, and it really can look rather nice!

    Again tho, a creative-style game using this level of detail would be utterly beyond most people’s time – generating this stuff by hand would be dozens of hours of work.

    Whilst not VoxGames in the tradional sense, in 1997, Blood and Shadow Warrior were released; both of these games using the Build engine; traditional Wolfenstein-style raycast walls for speed, but the objects were high-detail voxels:
    .

    I recall being amazed at the level of detail that you can squeeze out of voxel objects (This was 1997! That was detailed!), and actually began work on my own renderer at the time.

    Sadly I soon came to realise that the limiting factor wasn’t rendering speed, nor the complexity of the rendering, but the creation of the objects was an utter nightmare. I believe Shadow Warrior used a tool to convert high-resolution objects into voxel objects, much the same way that Unreal3 (Gears of War, etc) generates it’s normal and detail maps from super-high resolution source objects. The newer Westwood games (Red Alert 2, Tiberian Sun) also used voxel-based vehicles, tho I’ve really no idea why!

    Of course, I didn’t know that at that time. Games programmers, engineers, programmers in general – we have this desire to see how things work, to take them apart and rebuild them our own way.

    I just want to write that bit down on it’s own, for future reference; I first started work on a voxel engine in 1997.

    Things went quite quiet on the Voxel front for some time; like the Realtime Raytracing scene, it’s really a dead-end technology; video cards are getting faster at such a rate that utilising techniques like this simply doesn’t work. (As I put it upon seeing the latest state-of-the-art Realtime Raytracting demo, “That’s awesome! It looks almost as good as pixel shaders!”)

    Then, in April 2008, something wonderful happened; the seed that was to spawn the biggest Indie smash hit of all time.

    Woaah there Nelly. Not Minecraft. Infinifrag.

    You could run around, fight other people, and build blocks.

    Never heard of it? It grew and grew, and spawned a sequel. I’m sure you’ve heard of the sequel.

    It was called Infiniminer.

    It’s important to note that this game doesn’t use any sort of texture filtering and no mip-maps. We’ll come back to that.

    I’d also like to take this opportunity to link this, official, image:

    I’m beyond tired of people telling me that it’s bad for me to rip off Minecraft, as it’s still in progress, but it was perfectly ok for Notch to rip off Infiniminer, as it was abandoned. It was what we like to call ‘finished’.

    Ahhh, Minecraft. How could we ignore the elephant in the room? (No offence meant, Markus)

    Notch was inspired by the tech and look of Infimininer to write the game we now know as Minecraft. Which is incidentally a better name than Cavetest, even if half of it was nicked from it’s inspiration (Yeah, I went there).

    Minecraft has proved to be so ridiculously popular and successful that it’s catapulted Voxel games back into the limelight. Lots of games only exist now because of Minecraft; FortressCraft being one of them – but games like 3D Dot Heroes, LootFest and Terraria only came into being because people realised ‘Creating is fun’. Well, creating with 1m3 blocks is fun. Creating with 1cm3 blocks would be like pulling teeth. Minecraft also achieved the mass of sales that allowed people to look past the visuals to the game underneath; no mean feat in these days of gorgeous AAA games.

    Sadly, FortressCraft and it’s success has been the catalyst for a dozen crappy VoxGames on the XBLIG service; and at least 2 really good ones. Voxels were last year’s Zombies, and for that I do apologise. I can see the comments already : ‘OH BUT IT WAS MINECRAFT THAT INSPIRED ALL THOSE!’. I can certainly see how it could look that way, but for months before FortressCraft’s release, the XNA forums were full of ‘How can I do a Minecraft-style renderer?’.

    They were told it was impossible, too hard, and that no-one would even buy a game like that, because Minecraft existed (Hell, some of the people I worked with on FortressCraft told me that!).  It took FortressCraft’s crazy-ass commercial success before the clones started to pour in, and the face of XBLIG was changed forever. (If you would like to argue this, feel free; however, if you’re not a member of the App Hub forum, and don’t follow the XBLIG community as a whole then, please, don’t bother; the internet is already full of uninformed comments on forums)

    But I digress. This post is on technology!

    So, both Minecraft and Infiniminer don’t use any sort of filtering or mipping.This is something that I have seen a million people attribute to ‘style’, but the truth is actually a long way from this.  Solving the mip-bleed issue is a *really* difficult task; it’s something we pretty much cracked on FortressCraft, leading to it not suffering from the nasty distance shimmer that plagues both Minecraft and Infiniminer.

    That shimmer in action! Not retro; ugly. (shimmer being the texture equivalent of jaggies; high alias textures exhibit temporal artifacts when scaled down. I don’t really have a simpler way of phrasing it!)

    Yes, ‘retro’ is a style, and I’ve no problem with the lack of bilinear filtering; that could be considered part of the art style (the truth is probably much more in the realms of technical difficulty and programmer art tho!), but not having MSAA and bi/tri/anisotropic filtering isn’t an aesthetic choice, it’s a technical one.

    So what of the future?

    http://www.youtube.com/watch?v=eQMBGLMtdFE

    Well, certainly not that! Whilst it’s cool, there’s so much smoke and mirrors going on to make it practical for a real game! (For instance, in that demo, if you were to cut both edges of a beam, it would continue to hover in the air; FortressCraft already has physics like that! Look in the top left of that pic to see what I mean)

    However, that only holds true for this generation. My brain has already worked out the necessary algorithms needed to allow you to cut the ends off of diving boards, and allow them to become 3d objects, and collide correctly. Doing this current generation hardware would be unfeasible. Give me a computer fast enough, long enough dev time, and somewhere to stand, and I can move the Earth.

    But what of the past? What started all this off? What was the FIRST creation game?

    1991, 3d Construction Kit. Build and share your own worlds. Sound familiar? :-)

    http://www.youtube.com/watch?v=vDMzk5ZAXBY

    The scary thing is that 1991 doesn’t seem that long ago. I wonder where we’ll be in another 21 years?


  • Zombie AI

    Posted on by DjArcas

    I know I should probably do a flow chart, but hey. This blog entry is one part instructions, one part ‘how development involves’ and one part ‘Don’t forget to finish that sub feature’

    Basic Zombie AI :

    • Is player in range? Track player
    • Is netplayer in range? Track netplayer (equal priority)
    • Have we received damage? Consider changing target.
    • No target in range; search for nearby brain. (AKA Attractors)
    • No brain in range? Wander aimlessly. (Range is 128 metres for now)

    Now, that’s all pretty straight forwards, and should give nice behaviour. Done! No? There’s issues. What happens if a zombie reaches the brain? It’s next to it, it’ll never go anywhere else.

    Possible solutions:

    • Zombie will eat the brain, and eventually remove it
    • Zombies can only move towards brains that are more than (short_distance) away

    The first solution is no good; the idea is that the server designs the world you fight in. It needs to be a permanent setup, not having to run around and replace Braains endlessly. That’s no fun.

    So we’ll go with the second solution; this means that a pair of brains can lead to a zombie walking between them. That should work quite nicely.

    • If player has optic camo on, zombies should ignore you

    If you don’t want to play with the zombies, or you’re busy trying to build a nice zombie arena, then this provides the perfect opt-out. Long-term, this won’t stay.

    • If the server turns the jetpack on, all the zombies explode
    • If the server has the jetpack off, then all clients cannot use the jetpack

    Sorry. The jetpack completely trivialises the entire monster experience. If you want a true Creative game, then it’s easy; don’t put down zombies!

    If you want to switch between Creative and… well, it doesn’t have a name. Combat. Survival. Adventure. I dunno… then your switch is easy, it’s the jetpack.

    • Population control

    Now this is a pain. I can’t just allow zombies to spawn continuously – “It’s only an Xbox”. I will implement a hardcap; probably 1024; but this is going to be a severe performance drain. (As an aside, if you have a current world that is pushing the limits of the Xbox, then DON’T expect to slap in 1,000 Zombies and have the game run nicely!)

    • Falling damage for zombies
    • Automated gun turrets for zombie killing
    • Saw blades

    These are the three solutions I have right now. I suspect ‘Fire’ will become a 4th one.

    Sawblades will be animated using something very much like the RotateCCW custom behaviour for this.

    The gun turrets will be remarkably similar in behaviour to this:

    http://www.youtube.com/watch?v=CGE_h4jBBXc

    Awww yeah.

    Also, falling damage will be on for players, if any zombies are active in the world. I realise this is an odd distinction, but it means you can still have Creative worlds, and walk around in them. Cue emails not understanding why they suddenly started taking damage in 3… 2… 1…

    CP9 won’t have zombies for everyone, only keyboard users. Here’s your handy cheat sheet of object types.

    • Monsteremitter – spawn zombies, unless jetpack is on
    • Braain – zombies head towards this
    • AutoTurret – shoots at nearby zombies
    • Sawblade – damages zombies it touches
    • ZombieHead – override zombie head with a custom object
    • ZombieArm – override zombie arms with a custom object
    • ZombieLeg – override zombie legs with a custom object
    • ZombieBody – override zombie body with a custom object

    There is a VERY large possibility that FPS mode will be rolled into this, and that I will start requiring resources to build things like gun turrets in the near future. We shall see!


  • Don’t be shy about commenting!

    Posted on by DjArcas

    1,539 Comments
    27 Approved
    0 Pending
    1,512 Spam
    1,348 Blocked

    Unless you’re a spam bot. Just… wow.


  • Why do you hate everything?

    Posted on by DjArcas

    EVERYTHING!

     

    I do not hate everything. Allow me to explain.

     

    • Borderlands has a sucky end-game, and they stopped doing DLC
    • Minecraft has totally broken minecarts
    • WoW’s community is utterly dire, and the game is too easy
    • Bioshock’s Vitachambers trivialise the difficulty in the game
    • Portal was far too short
    • Portal 2 didn’t have enough puzzles, and had too much story
    • Dungeon Defenders has a poor selection of drops from anything other than Glitterhelm, leading to massive repetition and grinding.
    • Team Fortress 2 is repetitive and frustrating
    • Orcs Must Die’s difficulty is just on the wrong side of frustrating.
    Boy, I must hate all those games, right, cuz I’m only saying bad things about them?
    I just listed my very favourite games of recent times; between them, they have sucked away literally tens of thousands of hours of my life. I don’t feel any need to extol BioShock’s incredible story, Borderland’s fantastic procedural weapons or Portals perfect atmosphere; their websites and advertising campaigns do more than enough of that. Like a miniature Yahtzee (http://www.escapistmagazine.com/videos/view/zero-punctuation) I feel it’s more important I tell you what’s broken about a game, than what is so very good.

     

    And, of course, no-one minds if I complain about the knackered powerup system in Dead Space (that lets you create a character entirely incapable of defeating bosses!), but woe betide I mention that Minecraft should really support more than 8 players on the Xbox.

     

    Just as a little PS, when people tell me I’m ‘bashing Minecraft’, it’s really very, VERY obvious that’s not your phrasing. Unless you escaped from an episode of the 1980′s comic The Beano, then no-one, absolutely no-one uses the term ‘bashing’.  Stop copy and pasting, it’s really obvious.
    PPS the same goes for calling me a ‘douche’. What are you, George Takei?

  • Warning, organisation in progress!

    Posted on by DjArcas

    A friend recently emailed me with some surprise over my question about “if Zombie spawners should be activated by lasers”; he pointed out that’s there’s no concise feature list on the website. I’ve not thought about doing it in a while, so now’s a good time. ‘now’ being on my iPhone, as a passenger in a car, so I’m unable to satiate my urge to code!

    • Enormous, completely destructible landscape
    • Fully-customisable landscapes, with settings for elevation, multiple biomes, tree, cave and water settings.
    • User adjustable visual settings let you choose the look that you prefer.
    • 64 blocks types, with more being added all the time.
    • 64 high-resolution micro blocks, allowing you to create detailed, realistic, 3d structures.
    • Any one of 30 custom animation and behaviour presets can be assigned to your blocks.
    • Assign functional behaviours to create interactive objects including doors and ladders.
    • Provide an automated tour of your world to visitors using the tour carts.
    • Add multiple lighting effects to enhance your creations.
    • Use one of 20 different weapons to clear out and construct your world.
    • Utilise robotic minions and the powerful copy-and-paste to minimise the tedious grind.
    • State of the art surface and water shaders bring your world to life.
    • A portable teleporter allows you to move quickly to and from your workshop, in which your micro blocks are created.
    • Visit and rate almost 3 quarters of a million worlds using the extensive server browsing option.
    • Create your own amazing world, gain votes from friends and strangers, and earn exclusive in-game rewards.
    • Design intricate movement and machinery using the inbuilt tools; use the microblocks to customise this to look like absolutely anything.
    • Trampolines!
    • Rayguns!
    • Multiple game modes:
      • Creative – improve your server to gain more votes
      • Hunt – one person is invisible and has heat vision, and must kill all the other players on the server. Last player alive becomes the Hunter in the next round!
      • Spleef – create arenas and fight with the Spleef gun; only certain blocks are destroyable, and all other blocks kill you. Discs of Tron, brought into the new millennium.
      • FreezeTag – the classic childhood game; one person has the freezegun; gain points by freezing others!
      • F.P.S – Fight, Protect, Survive. One part Tower Defence, One part Survival, one part Real Time Strategy. This game mode is currently under development.
    • Everything is customisable (or planned to be!). Your world will look very different to everyone else’s! (This includes doors, machinery and mobs!)
    • Regular updates : about 1 a month!


    Coming soon!

    • Custom Zombies and Monsters
    • Splitscreen support
    • Specific player permissions using the Magic Wand of Empowerment
    • Logic gates, utilising the laser machinery
    • Power grid system to run your machinery
    • Ore seams
    • User-defined signposts
    • 32 players
    • Weather
    • Plus much more!

    Did I manage to list at least one feature that you weren’t aware of? :)

    (And more importantly, did I forget anything?)


  • OnLive, PC Version and beyond

    Posted on by DjArcas
    So, it appears I’ve been doing a piss-poor job of disseminating information again; after tweeting out about the fact that the PC version now has working networking (or at least a reasonable impression thereof), I was met with a wall of OMG YOU ARE PORTING TO THE PC!?!
    So, whilst continuing to add in new features (Next patch contains ladders, a personal teleporter, bug fixes AND a surprise), I’ve also been working on the substantial changes that are necessary to get it onto future platforms.

    Networking

    Networking has been an enormous pain in the ass; FortressCraft usually relies on the excellent XNA networking libraries. Sadly,Microsoft don’t allow me to use the XNA networking for PC games (I mean, they don’t allow anyone. I’m not a special case), so I’ve had to look around for a replacement.

    I actually stuck a post up on my facebook, and managed to procure the network coder from Split/Second and Pure to help me here. George has done an amazing job of abstracting out the network layer, meaning that I can continue to work on both versions of FortressCraft simultaneously.

    Avatars

    Again, sadly, Microsoft don’t allow usage of their lovely avatars outside of the Xbox platform, so I’ve had to consider what options are available here. This is still very much in development, so much so that I can’t even really show any good pics. Rest assured tho, it’ll be in keeping with FortressCraft’s complete customisation theme!

    Achievements

    These have been a ton of work; they weren’t planned from the start, so I’ve had to come up with them (with the massive help of the community, thank you!), implement them, test them… and then integrate them with the OnLive achievement middleware,

    Touch Support

    This has yet to be started, and is a slightly scary prospect. OnLive inherently supports iOS (iPhone, iPod, iPad) and Android (Tablets and phones). To do this, I need to support WP7 Touch events; I also need to redesign the entire interface to give a nice slick user experience. Not a small task. But you do get to play FortressCraft on your phone once I’m done – woot!

    Spit and Polish

    There’s quite a lot of polish I want to get into the OnLive/PC version as well. The workshop indicator was the first of these. I’ll be adding in things like signs, spawn blocks, kill blocks, better tutorials, as well as replacement objects for the default machinery. This means no wasting customs for your factories and conveyors (unless you want to customise them, of course!)

    Other!

    Oh, so much other! So FortressCraft will support lots and lots of cool stuff, mostly as I don’t have to persuade my boss that it’s financially viable. Right now there’s definite support for Nvidia 3dVision, and I’m planning on adding EyeFinity-6 support, head tracking… if it’s cool, then I want it in there.Hopefully, this lets a few people understand why this patch has been a little slow; the best part, of course, is that all of the work automatically rolls into the next FC patch: FortressCraft 1.1 Interim.

  • FortressCraft Performance – it’s only an Xbox.

    Posted on by DjArcas
    I get quite a few comments saying “I DON’T LIKE YOUR GAME, IT LAGS”’. I’m going to try my best to write this so it doesn’t come across as ‘passing the buck’, but hopefully people will understand a little more how things work. After all, it’s only running on an Xbox!So, does each patch make the game slower? No. Far from it. I spend several days a month optimising the game, profiling everything, and doing my very best to push squeeze every erg of performance out of the Xbox. Not that you measure performance in ergs.So, why does the game apparently run worse than it did when it shipped?

    A good simile would be a car; so you’ve just bought a brand new sports car, with 200bhp, and it goes really fast! But then, one weekend, you get it upgraded to 300bhp, but you also, for some reason, fill the boot with gold. Why is the car going not going faster? It has more horsepower!

    FortressCraft has gained more and more horsepower with each patch. But people are putting more and more gold in the boot. Sorry, trunk. And by gold, I meant custom objects, doodads, etc.

    When you join a server, and it’s laggy (Don’t even get me started on using that word incorrectly – laggy refers to high latency, NOT low framerate!), it’s not my fault. Not ever. Sure, I can optimise things away, but there are finite limits. It’s the server’s responsibility to ensure their worlds run smoothly.

    Don’t get me wrong, I am doing everything I can do optimise my code, but… well, let’s take custom objects.

    A worst-case custom object can have 8,000 polys in it; the Xbox can transform 500 million triangles per second. Assuming you want the game to run at 60 fps, you only have 8,333,333 polys per frame to deal with. That is also assuming you’re using a very simple vertex shader! Real world performance is likely to be a lot less :-)

    So, 8.3 million polys/frame max, and 8,000 polys per object. That means, if you want 60 fps, you can only draw 1041 objects.

    So when someone says YOU NEED TO OPTIMISE THIS!, what can I do? There’s literally no performance left to wring out of the Xenos GPU in this instance, and this situation is also pretending that we aren’t drawing the sky, water, other players, the landscape, your axe, particles… and reflective water is TWICE as slow; refractive water is THREE times as slow! (sorry, them’s the breaks!)

    “I DON’T LIKE YOUR GAME, IT LAGS”

    Well, I AM sorry; truly. As my twitter feed has seen me say a hundred times – “It’s only an Xbox”. It’s an 8 year old piece of hardware, with a limited ram set, slow I/O performance and really quite pisspoor FPU performance.

    But all is not lost! So here are a few handy hints.

    1) Tell the guy running the server. The Xbox has voice chat, use it. You might even make a friend. Remember, it’s the server’s responsibility to make sure that his world isn’t overloaded.

    2) If you regularly run a server, it’s recommended you run on a high detail; that way, clients who are running on high detail will see the same performance as you. If you, as a server, run on low detail to keep it running fast, then clients who join on high detail are going to complain that the game lags.

    3) Be careful about custom objects. They are awesome, and they ARE fast, but they have distinct limits.

    4) Optimise your custom objects. Yes, I know the workshop HUD is big and annoying, but that’s so you don’t ignore it. I’m not going to allow you to disable it, as how complicated your object is (it surprises me how many polys objects have sometimes, and I know exactly how it all works!)

    5) Adding blocks to custom objects can make them less complicated. Avoid transparent blocks in custom objects if you can; they are really expensive.

    6) Try and strike a balance between the number of custom objects, and their complexity; a middling amount of middling complex objects is the best bet.

    1,000 objects, 1 type, 2,000 polys = good
    1,000 objects, 5 types, 1,000 polys = good
    10,000 objects, 1 type, 1,000 polys = bad
    1,000 objects, 64 types, 1,000 polys = bad
    1,000 objects, 64 types, 8,000 polys = bad.

    It’s only an Xbox!

    7) Be aware of the view frustum; if you fill an underground cave with custom objects, the game still has to render them, it doesn’t know they can’t be seen (a curse of a fully destructible world); try to spread out your creations a little bit; use Z on a keypad/keyboard to show exactly how much is being drawn of each type. If you want a forest and a factory, try putting them in different directions, rather than where a player will see both of them. It’s only an Xbox!

    8) If your game isn’t rendering water, then it doesn’t matter your water detail. Try and use water creatively, rather than all willy-nilly.

    9) Doodads are fairly cheap, and fairly efficient; lasers, conveyors, jumpads, factories can be used to a fairly large degree. Doodads that come to a complete halt on a normal surface; if you’re done with a chain, get rid of them as soon as possible. The left-click-stick shows you the number of active doodads. Remember, if you’re not drawing anything else, you’re only allowed 1,042 complicated custom objects at 60fps! I’ve joined worlds where people have well over 10,000 active doodads; if they were complicated ones, that means the best framerate you’ll see is only 6fps! Try and keep them simple; it’s only an Xbox!

    10) Rendering the world is incredibly cheap and efficient; if you never use any of the cool shit that FortressCraft as, the game will run at a lovely solid 60fps.

    11) Remember that there are detail settings for a reason. A huge amount of people run at full draw distance, full water detail, and full world rendering, with particles on. You’ll never get a good framerate like that if you also combine it with 10,000 custom objects. Try running the game in Safe Mode once in a while (hold Y when you Join or Enter the world); that puts the game on absolute minimum detail – then notice how nicely the game runs. I‘d love you to be able to run the game at max detail at 60 fps but, hey… it’s only an Xbox.

    I’m sure someone will suggest that the game should be doing the limiting. However, it’s just not that simple. You can have high detail custom objects, if you use it them sparingly. But if you want to place them down in large numbers, it’ll need to be simple. But, if there’s water there as WELL, then it might run slowly… the number of variables involved in ‘framerate’ are far, far too many to be easily summed up and analysed and limited. Sorry.

    Oh, and just for the 20 people who said “Don’t render things you can’t see!”… seriously? You might as well tell me that I should put round wheels on a car; it’s pretty obvious!


  • How can I become a programmer and write games like you?

    Posted on by DjArcas
    I get asked this question a lot, so I felt it was time to finally sit down and write up a proper answer to it. As some of you probably know, it took me 10 weeks and 6 days to write FortressCraft, from the first line of code, to it being available on the Xbox Marketplace- but what is less apparent from that is that it took 12 years of AAA coding to learn how to do that, and it took a further 18-ish years of bedroom coding in order to get there.So, what qualifications do you need to get into the games industry?

    None.

    Don’t get me wrong – good grades, good exam marks, a good degree, they will certainly help you get a job, but they definitely aren’t required, and they aren’t what a games company will look for the most. Of that, I am (sadly) living proof; I failed both Maths and English miserably at school, tho I did get a pass in Art and Woodwork.So how did I initially get into the games industry?Part of that answer is due to determination; dedication; focus – in a word, perseverance.After I finished college (with my reasonably useless BTEC in IT), I spent 2 years unemployed. I spent the vast majority of that doing one of 5 things; learning how to use the internet (it was the mid-90’s!), learning how to program games on the PC, learning how to DJ better,  painting Warhammer figures, and writing music.I guess in retrospect, 2 of those turned out to be useful lifeskills (I did end up DJing at some quite large gigs (I’m pretty bloody good at it) and I wrote a few remixes that are still all over the internet)In those days, I would go on the internet at 6:01pm, when cheap-rate phone calls started, stay on the internet until 7:59am (when the expensive rate phone calls started again), go to sleep, then wake up and paint or DJ until 6:01pm; I spent about 2 years doing this, before I finally got a phone call from a friend of mine to go and work doing Millennium Bug programming, up in Brighton.During those 2 years, I tackled everything. IPX network transmission. Audio sampling. A* optimal path finding. 3d rendering. Fixed-step texture mapping. Mode-X scrolling. Raycast walls (‘Doom’). AI. Physics. Terrain rendering. Particle systems. All this on a 33mhz 486 with 8 megs of RAM.

    This was a continuation of my obsession with coding games, however. I started this some 30 years ago, on the VIC-20, moving onto writing text-based games on the Commodore Plus/4, and then creating literally hundreds of games using STOS on the Atari ST.

    Back then of course, there was no Google – if you wanted to work something out, you had to get books from the library, trawl around obscure bulletin boards, or simply work things out from first principle (I remember working out how to light objects from the realisation that the dot product of the normal vector of the poly against the normal vector of the relative direction of the light would give the light intensity; lighting from first principles, awwww yeah)

    These days, if you want to do a Doom-style raycast engine, you just Google it:

    http://www.permadi.com/tutorial/raycast/

    Let me say that again – you can Google and read about and learn anything related to games coding, apart from some of the most cutting-edge techniques out there. http://www.gamedev.net/ is a pretty good place, for instance.

    After the Millennium Bug job, I spent a short period of time doing QA work for a voice recording solutions company (You know ‘These calls may be recorded for training purposes’ ? Yeah, that was us doing the recording). Whilst I did this, I continued to write games, graphics tech, and just learn everything I could about games. I couldn’t play a game without asking myself ‘How did they do that?’ – I remember dying in Captain Blood many times, as I wanted to know HOW they did the planets and landscapes (2d perlin and fault-line fractals is the answer)

    I ended up working on my own landscape renderer; a 25km square piece of world, with height, colouring, and direct raycast lighting and shadows. It was awesome, and ran at over 100fps on my 12mb Voodoo2 card. I sent that demo to a place called Climax Brighton (now renamed to Blackrock Studios, who did Pure and Split/Second), who were impressed, and got me in to do their audio coding.

    The first 6 weeks were terrible for me; I wasn’t anywhere near as good at C++ as I might have possibly made out in the interview and on my CV (Sorry guys!), and I spent those 6 weeks either working how to do things from other people’s code in the sourcebase, or learning C++ at home.

    I passed my probation, and from then on, things were (reasonably) plain sailing; I went to Criterion Games (Burnout, Black), then CodeMasters (Grid, Colin McRae), FreeStyle Games (Dj Hero) and finally Sumo Digital (Doctor Who, Sega Racing, F1 2011)

    So, to sum up, how do you become a good games programmer?

    • Be dedicated. Don’t waste your time doing other things. Don’t make a level 85 WoW character.
    • Spend your time reading, researching and practising.
    • Don’t bite off more than you can chew – write a pacman clone, not a 3d mmo skateboard game. Games companies like demos, but they like demos of full games; starting a game is easy (GGJ/Ludlum Dare prove this), but finishing a game is HARD.
    • Collaborate – find other people who want to write games, and work with them. FortressCraft was created with people I’ve never met, except in the online sense.
    • Show off your stuff onlive – investigate things like the IndieCity Underground – you can let the world see your early work in progress games.
    • Don’t be discouraged by negative feedback. Burnout3 is the 7th highest rated Xbox game of ALL TIME, and I’ve still seen people slag it off. People love to say nasty things about things that other people love; the ‘hipster’ effect, if you will.
    • Stop wasting your time reading this damned blog post, and go to create.msdn.com and download C# express edition
    • Remember that things have changed; when I started the ONLY important thing was ‘making shit that looked, sounded and played great!’. Now a lot of University-taught ex-students are obsessed with design patterns, code reviews and reusable code. Investigate these things, but remember that the user experience is king; no-one cares if Terraria has good or crap code, just how fun it is to play.
    • Love games. Breathe games. Play games you hate, that are popular, ask yourself ‘Why do people love this game?’
    • Be enthusiastic. At Criterion, we rated enthusiasm and the ability to learn above all else, and we ended up with perhaps the best development team on the planet, at the time.
    • Use lots of paragraph breaks when writing blog posts. Just sayin’

     

    Hmm. That was quite a good post. And I failed English. Remind me again why we have our backwards-ass education system? ;)

    I guess now I should just ask – any questions?

    Appendix A : Useful skills

    • C++
    Appendix B: Slightly-useful skills
    • C#
    • MIPS assembly
    • x86 assembly
    Appendix C: Not-very useful skills
    • Java
    • Basic
    • UnrealEd

     

    Oh, and if you don’t understand any of the terms in this post (A*, raycast, perlin, fractals) then go Google them! Start your edumacation today!)


  • FPS; a few notes on game design and progress

    Posted on by DjArcas
    So, fairly surprisingly, given that it was a whole 3 days work, FPS (Fight; Protect; Survive) mode has garnered almost entirely positive feedback, and even more surprisingly only one real bug. (When you leave FPS mode, the mobs continue to render… oops)

    My current goal and focus is the PC/Onlive version of FortressCraft. As I’ve indicated, this requires a certain level of quality before I’ll be shipping it; whilst FPS mode will be in there, the mode won’t be getting a lot of love before release. Signs, ladders and better doors are sadly on the to-do list first.

    However, it’s good for me to have a bunch of things to do, so if I get bored of trying to make the PC version, I can go back and have a fiddle.

    So, part of the idea of FPS mode is to utilise the day/night cycle for a risk/reward system; fighting at night should be riskier. In part, this is accomplished by not having the solar collectors collect at night (they do currently – I can’t believe no-one’s listed that as a bug!). The other half from the game comes from managing your Threat. Now, this is something people are doing badly at – I’ve had a few people go ‘After killing Harvesters, there’s lots of Wasps, and if I keep killing them, there’s tons and I can’t do anything!’ – I need to work a little harder on making people treat the Threat like the 6-star rating in GTA. (Right now at a threat of <5,  Harvesters spawn, above 5, and Wasps spawn, each spawning Wasp reducing threat) – when you get your Threat to 6 stars in GTA, you damned well run for it ;-)

    Your goal, as a player, is to balance the risk of the Threat against the higher rewards (Todo : implement better rewards). One definite thing I will be adding in is for Wasps to attack your Solar Collectors, if you’re underground. The counter for this will be short range electric towers (which in turn will add a drain onto your collection ability, leading to players having to work at their bases a little better than now)

    But the tricky part comes from the ‘nighttime’, when venturing outside should be done only under extreme circumstances. I need to

    a) Give the player plenty to do underground; some sort of fun, productive time sink
    b) Punish the player for venturing outside *and* offer a high reward in exchange for this risk.

    Part of a) is quite simple; the ground will be laced with ores before long. There will be a cheat in the new cheats menu marked ‘Infinite Resources’; turning this on will permanently mark your world as a ‘cheat’ world, but won’t stop you doing anything. We might add in the ability to update your current world with Ores, but I’m not promising this. (as an aside, the Cheats menu will grow with options, basically allowing you to continue a Creative world, without having to worry about things like resources, crafting, whilst still looking at the FPS stuff) Perhaps calling your world a ‘Creative world’ as opposed to ‘Cheat world’ would be nicer ;-)

    b) is currently still milling around in my head; perhaps large, flying carriers that seek out trees/other resources during the night, maybe collecting left over gears; these carriers would attack the player heavily, either via lasers, spawning wasps/other, or dropping bombs. The bombs could even damage the landscape. Think of the flying carriers as the ‘clean up’ crew of the night.

    I’m also considering ensuring that a portion of your base is destroyed each night; one of the requests I’ve had is to ensure that after a few hours of playing, you aren’t completely invincible. Perhaps crawling bombs. :-)

    Another important factor is to ensure that the player is a tipping factor, not a deciding one; rather like Dungeon Defenders, the player has lots to do, but most of what they do is to ensure that the base runs correctly. It’s not Tower Defense tho; it’s one step back from that (rather like South Park TD), so the player has to run to the weak parts of the base and lend their gun, but they mustn’t be able to just ignore the base entirely, and go Rambo! It’ll be a tricky balance to maintain; hopefully the Threat system will automagic this (adding in more players just means your Threat rockets up!)

    Well, that’s my braindump complete; I reserve the right not to implement everything I listed above (with MAGFest coming up, my time is very limited!), but, as ever, I’m very keen to hear from YOU, dear reader. What do you think of FPS mode? What should be in it?



  • dinamic_sidebar 4 none

©2014 DjArcas's Blog Entries (RSS) and Comments (RSS)  Raindrops Theme