Recently, I had the wonderful opportunity to ask a few questions about Starcraft's AI to the very man responsible for creating it, Bob Fitch - a really amazing guy, and apparently the man who was resposible for writing all of the campaign scripts, so you're probably already familiar with his work :-)
The talk was very informative and even presented some new details we had no idea about in the AI modding community, and I think it's worth reading for all modders. In some parts we were writing simultaneously so it might look a little messy, but I'm hoping it won't be too much of a problem ^_^

Nekron: Did you & the AI team write campaign scripts (especially attacks) for all of the missions, or was Scenario Design mostly responsible for that?
If you did, could you tell a little bit about how that process looked like? Did you guys just wing it or was it a little more nuanced than that :P

Bob Fitch: There was no AI team. I was it. :) I coded the systems, designed the strategies, wrote the scripts, etc.
Yes, I did all the campaign work except for making the maps. Level designers would use the editor to make the maps and put units on them, and then they'd give the maps to me with some basic ideas like, "We want them to attack down this path, but sometimes go over here. Don't attack expansions. Use air units more than usual." I'd then write campaign scripts for all difficulty levels and strategies. Feel free to add follow-up questions now that you know the basic idea of how I did it.

N: Follow up question: Since I'm working on a campaign rework that encompassess all original campaigns, I do know how much work it is to go through so many missions and come up with working script ideas that are meaningfully different from each other. What is something that would actually be super interesting for me to hear is, did you try to give AIs representing a given faction (for example, Mengsk in xT5 and Mengsk in xZ10) some kind of a personality, where it'd behave in similar ways, or was it not a consideration beyond what you were told by level designers?

BF: The personalities of the different AIs were mainly in what units they built and used, and how aggressive they were in attacking or defending. It was very simple.

N: Regarding your comment about level designers wanting the AI to not attack expansions - I find it a really interesting remark to make, since there is exactly one mission that has an otherwise unused flag set through an opcode called target_expansion - if you remember by any chance, is that related?

BF: Yea, it's probably related. The designers wanted to severely limit the damage done to player expansions, while at the same time in melee I wanted to almost exclusively target expansions.

N: Some of these commands are really obscure, and never used - for example, implode, a command that specifically makes small isolated pockets of pathable terrain defended, or eval_harass, a command that can only be used to bypass enemy defenses (in the simplified way of looking for regions with no enemy strength) - if you remember, can you tell us what were some ideas for how you'd use stuff like this?

BF: I don't really remember the specifics. The term 'eval_harass' is familiar, but I really don't remember why anymore.
I know I did quite a few experiments and didn't always remove the code after deciding I didn't need the opcode yet.

You might find this interesting... I searched the code for 'harass' and found this enum of states I used in my attack routine.


And this is the comment in the code about the enum:

All ep areas begin MODE_INACTIVE. When a zone is acquired it is switched to
MODE_GUARD. From there it goes to MODE_DEFEND if it ever gets attacked. If
attacked and outnumbered then the zone is "lost" so it goes to MODE_LOST.

An adjacent MODE_GUARD zone would switch to MODE_STAGING with the MODE_LOST
zone as the target. MODE_STAGING waits for enough troops to take an enemy
zone and then attacks. The attacked zone goes to MODE_DEFEND and the staging
zone switches back to MODE_GUARD.

The MODE_HARASS_STAGE acts just like MODE_STAGING except that when it's ready
to attack it goes to MODE_HARASS_ATTACK. That mode is like MODE_DEFEND except
that it never retreats when outnumbered and never asks for additional troops.
If a harass attack ends in victory then the new zone goes to MODE_GUARD just
like any other zone.

N: We call those region states now! You can find them described by reverse engineering ( so probably less accurately than here ) on page 16 of the AI doc, under "Region States", it's amazing how different the intentions behind them were compared to what we guessed based on their behaviour lol

BF: I looked. Thanks for the link. Cool info. Almost correct too. ;)

N: AI modding requires a lot of tools that were only more or less finalized in the recent two or three years for the modding community! Did you have any AI-specific debug tools when you worked on the project, or did you just test it with cheats/by playing and only find issues that way?

BF: I programmed lots of cheats and visualization modes. I could look at what the units were thinking about doing, what they wanted to build, and where. I could see what they valued, what they wanted to attack, how much time they were spending on tasks, etc. I don't remember if those cheats are still in there, buried and hidden, or if the code gets compiled out in Release builds.

N: Starcraft AI is now considered the best AI base out there for modding (and I'm not talking about BWAPI), with it's huge flexibility, a plethora of specialised commands and the ease of adding new ones if needed, as well as multiple AI systems (defense, target selection) that are smart enough to feel smart and yet simple enough to not screw up constantly (which alot of modern RTS AIs tend to do, like Starcraft 2 or RA3) - what was it like to develop a toolkit for script-writing that's essentially uncontested 20 years later? Was it ever a major consideration, how many tools you've created for campaign development?

BF: I didn't know it was considered the best AI base/framework.
It feels great. :)
I was originally writing the StarCraft AI with the intention of having users create their own AIs that could be pit against other people's custom AIs. Time constraints caused me to scale back that plan, though I tried it again in StarCraft 2. (Although I was the AI programmer for only the first 50% of StarCraft 2. It was ultimately written/finished/released by a different programmer, and I did no AI in the expansions. I was the engineering director for Hearthstone when the expansions were being made.)
Honestly, I was just writing the SC and BW AIs on an "as needed" basis by the time I was deep into it. I'd try to make the AI smart, realize I needed a new opcode, add it as simply as I could, and repeat. The same was true for campaigns. I wrote special case opcodes for missions, like "junkyard dog" for example. That opcode was for a specific mission, though after I'd write a new opcode I would then try to find ways to reuse the code in other places.

N: I think that even if the original idea of making it possible for people to make their own custom AIs didn't work out because of time constraints, it definitely lives on now. ASC3 (which is what we call the SCAI language nowadays, based on the first working editor) is an easy to learn language that makes campaigns and custom maps insanely customizable with little effort, and can make for some truly amazing sequences and campaign scenarios if you're willing to spend time learning it. Huge thanks for all the thought you've put into the original AI.

If you wrote the language for SCAI scripting today, how different would it be?

BF: I would probably not write a language for AI these days. I'd use lua and write a library of routines that could be called to do most of the heavy lifting, that was extremely short and simple AI "scripts" could play the game with minimal changes to handle many different strategies and campaign needs.

N: Any cool anecdotes on SCAI or the dev process you can share?

BF: I'll always remember the look on Chris Metzen's face one day. I was programming the AI all day and we were in crunch mode so this was probably at the end of a 30-hour shift or something crazy. Instead of finishing and going home to sleep like a sane person, I decided I wanted to PLAY the game before I went home. (Looking back, this is also the moment I knew the game would be a hit. I had just worked 30+ hours and instead of sleeping I wanted to play it.) I started up an AI game and got going. It was an amazing game. It was back and forth. I was almost dead and then I pulled myself from the fire and started turning the tables. It was so exciting that I was cackling. I didn't realize I had let my tongue hang out of my mouth a little too, but because of that I started drooling. Before I could pull in my tongue and close my mouth and wipe my cheek, I look up and Chris Metzen is standing in my office doorway. Staring at me. Staring. Still staring. Yep… fun times.

I'm not sure what you call it, but I had an object called the "Captain" that was responsible for attacking.
Captains had fields like: current EP area (trivia: that's for Equal Potential and was coined by the pathing programmer), target EP area, owning player, mode, priority, action, delay, flags, stage, desired force strength for ground and air, current ground and air strength, total ground and air strength (counts troops that are on the way but have not arrived yet), visible enemy ground and air strength, a list of priority targets to kill on ground and in air, the group's "leader" pointer (usually a slow ground unit, choses again if killed), and the current detector unit being used to find cloaked things.

I looked up eval_harass and it's a boolean function that returns true if ready to attack, while also calculating a desired target. It returns true if the estimated AI attack power is greater than the target's estimated power at the target EP area. It only needs more vs air OR more vs ground power to return true.

N: Looking at it all I think you're just referring to what we'd call AI regions, but they're used for more than just attacking, they're also responsible for everything defense-related and many other AI functions.

The most talented programmer that works on this [Neiv] told me about some debug strings like SAI_Captain, but my understanding of attacking is that a region is picked, units congregate around the central point in the region, there is a attack list composed of units from attack_add/prep_down/etc, and after the attack is filled successfully (with some caveats, such as units that are in combat already don't count) or after 120(melee)/180(campaign) game seconds (1920/2880 frames) have passed(or less with quick_attack...), the attack launches and picks a random target that depends on script class.

Some more details come in campaigns and melee but they're usually not super well described.

BF: Above... the melee AI does try to attack close targets. The campaign AI randomly chooses a target EP area after doing a calculation of "what are all the ways I can get to there from here" thus causing the attacks to come in from different directions instead of how melee is always hitting the same frontal assault spots. Trivia: The routine that calculates the different possible attack paths I called "The cholesterol algorithm" Long story...

N: Last question (I promise) [Neiv] wanted to ask - did you ever develop the difficulty idea more, was it planned out beyond just making a couple stray commands, or did it never take off? (There are 2 or so commands that do different things based on an unused difficulty variable, easy_attack and if_dif)

BF: Difficulty levels were planned from the beginning, but mostly we accomplished difficulty levels by reducing attack force sizes and attack frequencies. There are a few extra tactical changes too, like normal AI tries to focus fire down injured units. The easy AI does not.

easy_attack is actually a "do this attack IF the difficulty setting is EASY" or more accurately i think it's "use this unit in the attack if set to easy" which let me change the units being used on easy (probably in melee, maybe not in campaigns, can't really remember)

if_dif is a boolean test, "if the difficulty is ____ then jump" and the parameters determine how it's handled, three params: comparison type (byte), diff level (byte), jump location (word)
type 0 is if diff < param then jump
else if diff > param then jump

After this Bob had to go, and we ended the interview. Thanks for your time, Bob! ^_^

Click to view video

English subtitles for the video taken as-is for those who prefer to read or otherwise can't watch the video (highlighted sections related to mapmaking/UMS):
Hey everyone, it's Grant from the StarCraft Remastered Team with a quick update.

We are excited to announce that a Public Test Realm is on the way. PTR will allow us to work with you to test out new features and server updates before they go live. For example, StarCraft currently ignores keyboard input if the mouse is held down we've talked a lot about this on the forum with you. We know that feedback from the community is asking us to change this, so one of the first updates we're going to try on PTR is our proposed answer to this problem. And we're excited for you, our community, to help us test this out.

We'll also be testing changes to our matchmaking algorithm. We are hoping this will allow players with a good connection to Korea, to be able to match more often with Korean players.

Last year we created a thread on the forum listing many of the issues we intend to prioritize and address in 2019. Your feedback on this thread has been invaluable and has helped us to prioritize our goals for the year. We've already released several items from this list, and many more are currently in the works.

I'm also happy to announce that "64-BIT" is ahead of schedule, and we're moving ever closer to being able to release an “OPT-IN” version. Later this year, 64-bit will be the only option for Mac users as I talked about at BlizzCon and at some point, in the future, that will be true for Windows as well.

We will soon be transitioning our community forums to the same forums that other Blizzard games are already using. We're excited about this change, because it offers more features and better tools to help us track and understand your feedback.

Lastly, we are all looking to an amazing year of back to back pro StarCraft competition, and we are already off to such a great start with LAST becoming the first ever KSL and ASL champion.

To wrap this up, let me say we have some very exciting things in the pipeline for the year. Some of you already know about like group matchmaking and some we're not quite ready to announce yet. But stay tuned! That's all for now. We love hearing from you, so please keep talking with us on the forums. From the whole team, thanks for watching. We're all very excited for a great year ahead for StarCraft Remastered!

Helpful links and references:
Posted by: Roy

Happy Thanksgiving 2018 from SEN!   Nov 22 2018, 8:15 pm  
Click to view video

Happy Thanksgiving to all our members on behalf of the staff here at SEN.
We hope you all have a safe and wonderful binge in celebration of the harvest.

You have my respect, bird. When I'm done, half of all turkeys will still be alive. I hope they remember you.

Posted by: Roy

Click to view video

Rough transcription of the video for those who prefer to read or otherwise can't watch the video (highlighted sections related to mapmaking/UMS):
Hey guys, Grant here from Classic Games, here to give you a dev update on everything that's happening in the world of StarCraft: Remastered. Now I know my last dev update video was around Christmas last year, so it's taken a little longer than we expected to get this one to you, and I'm sorry it's taken so long.

Something that I definitely need to call out that's happened since that video is the 20th anniversary of StarCraft, and who would have imagined that two decades on, we'd have still so many people playing this game so passionately all around the world. And it was a great opportunity for us all to reflect on what StarCraft has meant to us over the years. And for me, it was a game that I started playing on release. It's always been a part of my life: I've always been a terrible StarCraft player, but I've loved every minute of it, and of course it was the game that brought me to Blizzard. So I certainly very much enjoyed the 20th anniversary celebrations, and I hope that you guys did, too.

Since the last dev update video, we have also been hard at work on the 1.21 release of StarCraft: Remastered. That's the live build at the moment. We've been been patching that over the months, and some of the big items that we've been able to deliver since the initial release of 1.21 include connectivity improvements. A major part of that was our STUN server rollout. So STUN servers is something that will find the best port between two players. So we no longer need to worry about port 6112 anymore. We no longer need to worry about port forwarding or router settings or any of that stuff: STUN will solve those problems for us. So it's meant that we've seen a much lower reliance on our proxy servers, and that's meant better latency games overall.

We also did some major work on our matchmaker, again based on feedback from you guys. What we'd noticed and what you guys had noticed is that the matchmaker was matching people from—at times—opposite ends of the earth, and that enormous physical distance was something that we couldn't overcome with software, and it was introducing some—in some cases—some very large latency into games. So what we tried to do with the new matchmaker was favor lower distance of / less distance between two players. And as a result of that, we saw a marked improvement in the latency of matchmaking games. And again, through our feedback from you guys we've continued to tweak that, and now I think it's moving to a really good place for the global matchmaker.

We've also rolled out the dynamic turn rate solution for custom games. So of course it was always part of matchmaking games: now we're rolling it out for custom games as well. As a result of those improvements, we also were able to rollout turn rate 20 and 24, and turn rate 24 of course is the best possible turn rate that StarCraft is able to support: it's the turn rate that LAN is played on, and now it's available in as well (so custom games and matchmaking games). And we've seen a very high number of games, actually, in the matchmaker being played in turn rate 24, so that's awesome.

So, aside from 1.21, we've also been hard at work with 1.22, and the release of 1.22 is right around the corner. So let me just talk about some of the big ticket items that we can expect from 1.22.

First of all, we will be releasing new ramp art for mapmakers. So as you guys are well aware, mapmakers have been able to kind of hack in these north-facing and double-wide ramps, stitching together some tiles from here and there, and even though it plays great, it doesn't look so great. So what we now have is a toolset for mapmakers to be able to go in and create ramps that are north-facing and double-wide that not only play great, but also look great as well.

We will be exiting the Frontier League, and I know this is something that you guys have asked us about for a very long time, so this is something that we're we're very much looking forward to. We will move out of the Frontier League, roll the season, move into a new season. And with a new rank season comes new stats, so we will retire the old stats, we'll archive the old stats, and we'll move into some fresh new stats for the new season. We'll also with the new season be rolling out a new ladder tier system, and again this is something that you guys have been asking about for a long time, so I'm sure a lot of you will be very happy to see this. It'll be a familiar letter-grade system; we've collaborated and talked to a number of people who have been around Brood War and StarCraft for a number of years, so hopefully this will be something that will be very natural to you guys, and something that you'll really enjoy. And last but not least, with the new ladder system—with the new season—comes a new map pool, so we'll also be rolling out a new map pool. And now that we have this framework in place, we'll be in a position to be able to roll seasons much more frequently in the future.

So, further afield, further down the track: we have a number of things we want to work on, but something I just want to quickly touch on—and I think it's important to touch on—is group matchmaking. I know this is something that a lot of you are looking forward to; we're looking forward to it as well. I've always talked about how it is further afield in the dev update videos. The good news is it's getting closer, but I think the important thing is that I want to mention that it is still very much on our roadmap. I've always said that I wanted to get 1v1 into a good position before we complicate things with 2v2 and 3v3 and 4v4. I think 1v1 is getting into a very good position at the moment, so that allows us to commence work on that group matchmaking in the near future.

So that's all I've really got time for today guys. Thanks very much for listening, and I'll try to make sure we do the next dev update video without so much delay in-between it, but until then, I'll see you guys online.

Helpful links and references:
Posted by: Roy

Merry Christmas 2017!   Dec 25 2017, 8:10 pm  
Merry Christmas!

On behalf of all of the staff members here at SEN, I wish you all a Merry Christmas, and in a week from today, a Happy New Year. I didn't have a chance to interview the staff for 2017, so instead, enjoy the best shouts I could find for each of them! Now, context is important, so I've edited the messages to disambiguate what was trying to be conveyed.

Quote from DevliN

DevliN -- I've been doing little more than paying [Roy] for a [job well done] now, so [making him an admin is] fine with me. :)
Quote from NudeRaider

NudeRaider -- It depends. I guess we can agree on that people that just consume [Vespene gas] are more likely to be [Protoss tryhards] (I'm oversimplifying here to make a point) which are more likely to be depressed as opposed to people that like to [cannon rush] and thus also communicate more when [stomping their foes]. But if you excessively use [cheese], I can see it actually changing you / your mood, simply because you're doing nothing but spending time [winning] on the Internet.
Quote from Devourer

[Devourer] -- I like how in a normal raffle, the 50% or whatever that doesn't go to the jackpot goes to some cause or charity, but in our raffle the other 50% of the ticket prices just gets lost into [my pocket].
Quote from O)FaRTy1billion[MM]

O)FaRTy1billion[MM] -- if you don't need [video game consoles] then it's fine, they are just generally more versatile ([Nintendo] switches, [Xbones], general use [smartphones]) and predictable (no [BSODs]) than just [PCs] when using [cards that should be mining cryptocurrencies] so people often use them for everything even if they're not really necessary
Quote from Excalibur

Excalibur -- This is what I'm trying to get at: Who I am, what I've done in the past, or what I personally think is not relevant no matter how much your feelings say they are. The only relevant thing is my [ribeye steak]. And since you can't [eat] that, you can only tell me about your [hunger] and about what you feel is [an adequate companion beverage], then you aren't presenting a case of [wine to go with the steak]. You're presenting a case [of light beer]. And if you're looking for the [approval of pairing a slab of cow meat with cheap, unsophisticated swill] you've come to the wrong place.
Posted by: Roy

Happy Thanksgiving 2017 from SEN!   Nov 23 2017, 4:28 pm  

Happy Thanksgiving to all our members on behalf of the staff here at SEN.
We hope you all have a safe and wonderful binge in celebration of the harvest.

What is a turkey? A miserable little pile of protein.

Posted by: Roy

Click to view video

Thanks to Alzarath for bringing the video to my attention! Rough transcription of the video for those who prefer to read or otherwise can't watch the video:
Hey guys, Grant here from Classic Games. Just wanna give you a real quick update on some of the features that we're working on right now on StarCraft: Remastered, but before I do that I wanna thank you guys for all the feedback that you've been giving us in the forums—telling us about the things that you like and what you don't like, and the issues we need to fix: that really helps us know what's going on in the community. So, please keep it up, and we're definitely listening to everything that you're saying.

So, matchmaking 1v1: it's awesome to see so many people that have jumped in and given matchmaking a go. We've had millions of matches made already in just over 6 weeks of StarCraft: Remastered being live. So it's awesome to see so many people playing the global matchmaker. The nature of the global matchmaker does mean we're seeing some issues of latency, and we've been doing a lot of work on that over the last few weeks to try and reduce that as much as possible. Just recently we doubled the number of proxy servers that we're using in Korea and we're already seeing some improvements based on that. We've made a number of other server-side improvements, and very recently you guys all participated in a turn rate experiment which we did which helped us nail down what was a pretty good happy medium turn rate of 10. That said, we want to run in the best—in the fastest—turn rate we can for the connection, so to that end we'll be rolling out a dynamic turn rate system (coming soon). And that will mean that the game will run in the highest possible turn rate that it can for a connection and if the connection has too much latency, it'll keep dropping down to a turn rate that makes sense for that connection. So that's something to look forward to coming soon, and we think that will alleviate a lot of the issues that we're seeing in the global matchmaker as far as latency is concerned.

One thing I want to talk about really quickly is the disconnecting that we saw happening, which it seems like it's no longer happening, or certainly a lot less. People were disconnecting before the end of the game when it looked like they were going to lose in order to not take the loss, and it was also unfortunately preventing the winner from getting a win. That's now been fixed about a week ago and the winner is getting their win, the guy who disconnects gets the loss AND the disconnect stat, so it's a pretty powerful disincentive for people to do this disconnect drop thing before they lose. So as I said, we've seen a lot less of that, and I would expect that to be the case in future.

So still on the topic of matchmaking, I wanna talk about 2v2 and group matchmaking, which is certainly something that a few of you guys are really interested in, and that is certainly been something that's been on our radar from the very beginning of Remastered. We do need to think a bit more about group matchmaking though for a couple of reasons, one of which is the pool size: do we have a large enough pool size to sustain a 2v2, 3v3, 4v4 matchmaking experience? Or is the small pool size going to devalue the experience a little bit? And probably more importantly are the latency issues that we're seeing in 1v1: they're only gonna be exacerbated in 2v2, 3v3, and 4v4 due to the nature of the turn-locked client-host networking infrastructure that StarCraft has. So I think we need to come up with a bit of a better solution for that before we start tackling matchmaking 2v2; so for that reason I would see 2v2/3v3/4v4 as more of a long-term feature rather than anything that we're going to get to in the short term.

Dynamic lighting (real-time lighting): one of the aspects of dynamic lighting is that it does take a lot of VRAM, and particularly when in a high-res 2D game like StarCraft: Remastered. That naturally requires a lot of VRAM, and dynamic lighting requires a whole bunch more VRAM. So one thing that we've been working really hard on is trying to bring that down as much as possible, and I don't make any promises here about what we can do, but that's something we're investigating and if we CAN do something, then I will hope to see that roll out in a patch very soon. Again, no promises, but we're trying to bring that down to 2 gigs so the people that have 2 gigs of VRAM will hopefully be able to experience the real-time lighting as well.

CCMU, sprite limit, bullet limit: I posted about this in the forums recently and I got a bunch of feedback. This is certainly something we want to do; we just wanted to make sure that you guys were okay with it, that you didn't think it was going to break anything in terms of gameplay, because we're certainly committed to not breaking gameplay. So I put that out there to see if you guys thought there were any problems with that, and it seems like overwhelmingly the feedback has been: look, it's fine to raise or eliminate the limits as far as the bullets and the sprites and the CCMU goes. So I see no reason why we shouldn't move forward with that probably in the mid-term future. But if anyone does have a problem with this in terms of gameplay, now's the time to jump in that thread and give us your feedback.

The final thing I want to talk about today is EUD. In 1.18 we kinda left EUD behind, and that's because we introduced some strong anti-cheat and tamper-proof measures to prevent people from cheating in games of StarCraft, and obviously this is the right thing to do: we want to protect the integrity of the game and make sure it's a fun experience for everyone. We don't want people cheating. But it did kinda leave behind EUD, and that made us a little sad because we like the idea that people can experience StarCraft in whatever way they want to, and if that's playing EUD maps, well, that's fine. Unfortunately we cannot release a game into the public with a security hole in it, so these are the reasons why we've continually patched out EUD over the years. Supporting every EUD offset would be a mountain of work and so it's probably not something that's ever going to be possible. But what we have been doing—we've had a very talented engineer here at Blzzard working on enabling SOME of the EUD offsets again—and right now in Remastered, we have a very popular tower defense map working, 100% complete. So that is kind of the start of EUD for us, and again in the mid-term future you can expect to see this map rolling out—this mapping being whitelisted and us saying it's now okay to play this map. And I would love to hear from you guys as to what maps you're playing and what maps are popular, and we'll see what we can do—once we make sure there's no security holes and seeing if we can actually emulate them successfully—we'll see if we can whitelist those maps going forward. So again, we'll never do every EUD offset and support every EUD map, but this is certainly the start of us bring back some measure of EUD, and I know there's gonna be a whole bunch of folks out there that are gonna be very excited about that.

So that's all I got time for today. Keep talking to us in the forums; we're definitely listening. We don't have time to respond to every comment or every question, but we are certainly listening to you guys, and we plan to do more of these video updates in the future. So, thanks for listening, and I'll see you soon!

Helpful links and references:
Posted by: Roy

[07:33 am]
KrayZee -- NO
[05:00 am]
Pr0nogo -- U
[02:39 am]
RdeRenato -- xd
[07:40 pm]
Suicidal Insanity -- I can just look at PyMS or something
[07:40 pm]
Suicidal Insanity -- Don't worry about it if you don't have a link to a file
[07:01 pm]
Pr0nogo -- you might have to do that one yourself, unless you can link me a tutorial on how to do it and i'll see if i can figure it out
[07:01 pm]
Pr0nogo -- so far no luck
[05:37 pm]
Suicidal Insanity -- To be honest that was probably just me adding them when I designed my site and never getting around to writing them
[05:37 pm]
Suicidal Insanity -- Ya I noticed that when I dug out that link
[05:27 pm]
Pr0nogo -- none of the others work btw, not sure if they even exist though
Please log in to shout.

Members Online: Roy, Viper0311, Baccouchese2m3, simonaff3702