Worst-case scenario: the UEd Goblin wipes the map and burns down your house.


From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

Spoon/Developer Journal


Frnz Sniper Arena

Port of the UT sniper arena mutator, plus more. Designed to be use as an arena mutator or a replacement for the lightning gun. You're able to configure items such as ammo and damage amounts, headshot radius, bonus and penalties for killing or being killed, etc. Configuration is done through UT2K3's Web Admin or though the in-game mutator configure tool. Player can choose between four sniper scope, three rifle sounds, and the ability to turn off the zoom sound effect. There is also a built-in help screen that's information is based off of the current server settings.

I'm thinking of asking for some help. I'm at the point with FSA that I would like to have it peer-reviewed to see if there are areas that I could change to make them more efficient. I've basically learned unreal-script by hacking things together based on my other programming knowledge. I'm constantly learning new stuff, however I'm sure there is still stuff I'm missing.

I'd like to make sure everything is spic 'n span since I have two big feature sets coming up. 1) Spark's Hit Prediction and 2) Pluggable Media (scopes, sounds, models ).

Team Symbol Changer

Replaces the team flag, banner, and monitor symbols with custom textures.

Spawn Protection

Spawn protection, nuff said. I did this before someone told me UT2K3 came with spawn protection.

Talking Icon

Puts a chat bubble above a players head when they are talking ala Quake3.

Crazy Idea[edit]

I have crazy ideas from time to time which I don't have the right resource to complete ... so I don't know if they are possible or not.

The latest has to do with OGG Theora. As you may or not know, UT2003 uses OGG Vorbis for music, which is open and patent free. OGG Theora is a open, patent free, video codec. My crazy idea was to creating a surface property that would act as a "movie screen" for a video clip using the OGG Theora codec. This goes beyond the idea of an animated texture, to playing a movie in place of a texture.

Foxpaw: I think that this could be done using a scriptedtexture somehow, but it would use a lot of resources. I doubt that there is a feasible implementation for linux or maxc however.

Spoon: Epic doesn't offer the header file for UT2003, if I heard correctly? Or is it they don't openly offer it, however via a NDA you can get a copy?

Foxpaw: I've heard that as well. You don't need a header to use scripted textures, though. To my understanding though, the Unreal engine for Max and Linux do not support scriptedtextures and will just show a flat white texture instead. Or so I've heard.

Wormbo: It's not the OS that limits the use of ScriptedTextures, it's the render device. ScriptedTextures only work with the D3D renderer.

Spoon: However wouldn't you need to compile the video codec/player as a native class? You would need the headers for that don't you? (ie ogg.dll or ogg.so ).

There used to be a project that allow you to display a "HTML" inside of your map. You basically dropped that actor into the map, filled in the URL and told it which texture to replace. I was thinking along the same line.

Foxpaw: Well, compiling the video codec into your package would by far be the easiest way, but there is probrably another, if you look hard enough. :P I believe that the thing you are talking about is the Screen component, which uses scriptedtextures.


I probably have the strangest development setup for unrealscript. I prefer to developing in a *nix environment, and at home I use Linux. For a while I used to use VMWare running Windows NT to develop, but switched to Wine to call UCC.EXE. I use Cygwin/XWindows/WindowMaker if I need to be in Windows. My editor of choice is "vim", which has an unrealscript template for color syntax. I have set up a nice Makefile which does pretty much everything, like building and creating release, source releases, int files, etc.

The strange part of how I develop is I work with "meta" files. If you would try to build my source it would fail if you don't run it though my perl script first. The reason is my source files have tags placed in them that get replaced when it runs through the script.

The tags look like this <VERSION>. My script removed <VERSION> and replaces it with an actual value, in this case the version of the release. It saves me the time of finding all the version strings when I create a new release.

Mini Rants[edit]

Tool Jockey. A Tool Jockey is someone who uses a tool to create a "product." The tool pretty much does all the work, and the user doesn't really have a clue on technical part of project. Is some who uses these tools equal to someone who can build the same project with their bare hands? If you take away their tool, they are like a fish out of water ... they dry up and die.

It's like me having a tool to create a motorcycle, am I at the same level as someone like Jessy James? Would I even qualify as a mechanical, since if the tool breaks, I can't build a motorcycle.

Mis-guided Tech Resource. Why is it that people think I can debug all their UT2K3 problems, just because I can code unrealscript. I get weird questions asking why multiplayer games don't show up in their server list or video card questions. I almost think coders are the worse people to ask for debugging help since we tend to stay in our own circles.

Mutator compatibility. I pretty much write my mutators to work by themselves, with my other mutators, and with the stock UT2K3 mutators. If they work with another persons mutator, that's fine. However if it doesn't work, I'm not going to put hacks in my code to get to work. Especially when the original author could change something and break it in a future release.

Missing People. I won't do another full modification again, ever. When I did WFUT, we had four or five core people. We had a lot of promises from people to do stuff ... who disappear and were never heard from again. It's a bitch to wait for some code, that you could have someone else work on, and never get it.

Feedback. Nothing like releasing test code to the public and not getting any feedback. "Does it work or doesn't it", is a question that goes through my head. Then releasing the code and some one speaks up, "Bug X still exists. I thought you'd fix in the real release, because it didn't work in the test release."

Insert Term Here. I have no idea what to call it. It's when some one takes another persons work and changes only superficial things like sounds, textures, and/or names and re-releases it without add any more value to the work. Is it theft or is just waste? Why would I want to waste my time, bandwidth, and hard drive space for the same 22M map with one different texture?

The worst part is when the second "author" takes credit for the work when it's so obvious to all that they did not create the work.

GRAF1K: I know! I know! PLAGERISM. Grrr...


Is this me? Or an imposter...

Mychaeel: Dunno. Welcome to the Wiki, anyway.  :-)

Foxpaw: An imposter! We all know there is no spoon. :P

Spoon: It's me. http://spoonware.org and the defunct http://www.planetunreal.com/weaponsfactory

MythOpus: I downloaded your Sniper Arena mut and you know what? I loved it. :cheesy: I was wondering, since the sniper rifle isn't YOURS, hehe, if I could use the model because I sucks so much at modeling and I can't making weapon anims for ut2k3.

Spoon: Go right ahead :) (Don't strike me down Epic) If you want to give credit, give it to Col Kassad since he was kind enough to port the UT99 over to UT2003, since I also suck at modeling.

GRAF1K: I think Foxpaw is on to something. :P You may have to change your name to Fork.


var SpoonClass Spoon;
function PostBeginPlay()
  if( Spoon == None )
    Spoon = Spawn( class'SpoonClass', self );

There is now a Spoon.

GRAF1K: You forgot the class definition:

class Spoon extends Newbie;

Based on the above, I think this should be mine:

class GRAF1K extends Jerk;

(:-P :-D)


class Newbie extends SecretProstar



class GRAF1K extends Retards;
var() Material R;


class Retards extends MythOpus;
function ModifyPlayer(Pawn Other)
  if ( Other.IsA( 'GRAF1K' ) )
    Other.default.bNotRetardedAtAll = true;
  Super.ModifyPlayer(Pawn Other);

Mychaeel: Your short rant on "Feedback" above reaffirms what I wrote on Mychaeel/Modding Etiquette about public test versions: If you want to get real and useful feedback, give your pre-release versions to a dedicated and hand-picked crew of beta-testers, not the general public.