19 April 2007


I've finished my first level/modification for RoboBlitz :D. I'm not releasing it yet as I'm using it to apply for a job for now but I will release it in the future.

I had some problems with some of the end scripting (in terms of getting it working to my satisfaction) so it took me a little longer than expected. Also, even though I consider it finished it still has a couple of minor bugs (which I don't think I can do anything about so I'm ok with them) and I feel I could do more with the lighting. I'm hoping to move on to other things just now and maybe revisit this at a later stage.

At first I had a fan in the level (which I lined up and it looked beautiful), added in rotation, and started the game and bounced of its huge collision model (which basically is a large polygon lump around the fan). I remembered that they had a fan in the Kismet mini-game and wondered how Ecnassianer did that. Looking at it he just had turned the collision model off! Something that I couldn't get away with since it would be pretty obvious when the player went through it. I could have turned it into a Matinee driving the fan, turned off the collision model and added in blocking volumes but that was more time than I really wanted to spend on it at the moment so I missed it out. I would have known about the casual collision model if I pressed the C key except I've found, and it is a known issue, that it can cause your machine to reboot if you use an nVidia card.

My lighting skills aren't quite up to scratch either. I added a nice red/amber/green start light which is nice but beyond that the lighting in the map is pretty basic. I couldn't seem to get more defined shadows and I'm not sure if that's because I'm using a skylight that lights all the areas or not. I'd like to play around with this more but I'll going to get some feedback on the map first and see what people think.

My first impressions of Kismet (the high level scripting language used in UnrealEd) seems alright though one thing that bugs me, as a programmer, is that you can create subroutines; that you can set an input and an output along with variables it takes (all of which appear to be passed by reference) but to reuse this you need to create a copy. Now the copy is just that, an independent copy that can be changed with no reflection on the original. This can be handy at times, such as when creating a copy with intent to alter it, but really what I want is a blueprint sequence that I can create references to. This way by updating the sequence I update all things that use it.

For example: I have a sequence that checks a Trigger the player has just crossed; if it is in the right direction it increments to the next trigger and prints a message and plays a sound. Now say I want to replace the comments with an custom UI dialogue. I've got to find every reference waypoint and change the code on them. It's sloppy coding and I'd prefer to avoid it. Saying this I'm still to check if you can, by saving to a package, create a new component in Kismet which will just be generic. Otherwise you could create an event in UnrealScript which would do just this but if you've already written it in Kismet it seems a pain to need to translate it to UnrealScript.

I also discovered that there doesn't seem to be a way to restart the level properly (that is to reset everything to their default state). I've coded it so that it restarts in a controlled fashion but the pickups will have been picked up and things that have been knocked over will stay that way. It's something I can live with so I'm happy to let it be.

All in all I'm happy with the way the level has turned out; I think it plays pretty well and I'm happy that I could do something with the engine that feels different while still not attempting to make sweeping changes to it.

Multiplayer is coming to RoboBlitz which I'm interested in for two reasons. First I'm hoping my next map can be more of a multiplayer map and secondly whether my current map could be adapted to work with multiplayer. I shall have to see when the code is released.


Gil said...

Try a prefab; there don't seem to be any in use in Roboblitz, so I don't know whether the engine version fully supports them, but prefabs are designed to handle the 'objects with attached script' idea.

You'll have to put the associated script into a subsequence, then select the objects in the editor window and choose 'Create Prefab' from the context menu. You should be asked whether you want to save the script sequence with them.

You can instance a prefab as many times as you want. When you edit a prefab instance, it'll use those changes to update the original prefab itself and the changes will be propagated to all other instances next time the owning packages are opened.

Prefabs are fun (except when they don't work ;)

~ Gil

Gary said...

Thanks for the hint! I'll definitely check them out and see if they work in RoboBlitz (they might not have any included for space reasons; I know this is why they didn't have any terrain included with the editor).