Now that I'm over the downheartness caused by my failure to reach the top 10 in the RTC contest with "Losing Memories", and my little editor vacation has ended; I'll return to spend my free time on my campaign.
I've decided to keep a log of what I'm doing and thinking while developing it. I believe that this will help me to stay focused and motivated, and it might be useful for those who are working on similar projects, to get ideas and learn from my mistakes. I'm also hoping to draw the attention of someone interested in helping me with the crafting.
My original plan is to bump this post once every one or two weeks, starting right now.
I'll begin writing about the campaign itself. The ultimate goal for it is to create a reboot of SC2, taking the best of SC1 (the immersive storytelling) and SC2 (the gameplay and the mechanic variation between missions). I'm aware that it's too pretentious. That's why I've started with a single mission (Bottleneck, here's the link of its testing thread) to see where it goes. Now that I'm a little more confident, I'm focusing on the first 4 maps with their banking and linking. If that's too much work, I'll decide to stop when they're done. If not, I'll continue with other episodes, periodically reevaluating if continuing is worth it or not.
What do I have so far?
- Lots of loose ideas, - a basic structure of the story (a ~6000 words script), - a functional map and two more in early stage of development, - an early mod with several useful functions, - a task list programmed until the end of june, and - Finally, after more than half a year without finding one, a campaign name to replace the placeholder "SC2Bis": "Starcraft: Episodes from Brood War II" (the one you see in the title). I've made the banner you're seeing at the top and an icon for the launcher too:
How do I want this to work?
The player will play an active role as a character of the campaign. He will be a young Dominion Lieutenant in the Terran episodes, a Brood Queen in the Zerg episodes, and Artanis or Zeratul in the Protoss episodes. There will be small RPG sections between missions, where the story will develop, and a SC1 style briefing before the start of each mission. I hope to come up with fresh mechanics for most of them.
Where am I going to start?
Now that I'm focusing back on this after the RTC contest, I would like to apply some things I've learned recently in the campaign mod. Specifically, I'll focus on two:
An achievement system: I was handling achievements in a very archaic way, I'll switch to user types. They're way more efficient.
A budget system: Several achievements will unlock techs. After every mission, there will be an amount of credits as reward. If the tech wasn't unlocked via achievements, it will be available to be purchased in the RPG sections. There will be hidden techs too. For example, the secret of the first mission will unlock warpigs.
Once finishing with those, I'll continue with the introductory map, which is supposed to set the mood before the campaign starts.
Well, that's all. I hope I didn't bore you... Next logs should come with more eye candy.
I've been working on banking and user types structures these weeks.
I have defined 7 User types at the moment:
- Campaigns. Defines the folders where the maps are and stores the campaigns progress. - Episodes. Classifies the missions and defines the subfolders where the maps will be. - Missions. Stores the map names, paths and arcade links, and keeps track of the stats and rewards achieved in the missions. - Stats. It's a sublevel of missions. It contains most the information of the missions that I want to be tracked and retrieved by other missions. Thanks to tya, I could set a variable text describing the stats progress, allowing them to be easily mantained when editing the mod and viewed from any map that uses it. - Upgrades. It's a sublevel of campaigns. It's used to know if an upgrade was already unlocked and/or aquired when a mission is being played. - Upgrade Groups. It's going to be used to make windows for each upgrade group when purchasing them. - Achievements. It's a list of all achievements. Contains their icon and description, and an indicator that shows if they were unlocked or not.
They'll allow me check the campaign status at any moment without filling arrays. I just have to call a function that writes in those tables the player's progress stored in banks. I had to make some considerations, like how to handle the saving in replays of missions already played, missions that weren't unlocked yet or missions saved before playing other ones and continued afterwards. I've decided to directly ignore saving in missions that weren't unlocked yet, and check before ending the rest of the maps which data from other maps needs to be overwritten, which is new and which is not.
After making these definitions and filling the user types with the data needed by the first missions, I stumbled with my first rock:
I asked myself "What's the easiest way to restrict and unlock progressivelythe tech tree?" The answer was "Why don't you just check how Blizzard does it?" So there I went. I've found the action "Apply Campaign Tech", which was pretty straightforward. It just disables the abilities and enables them back again if they are unlocked.
I've created a trigger removing all the unlockable abilities for all the players, and another one that checks for the upgrades that should unlock those and enable them back if it corresponds. The enemies will have their abilities unlocked manually in each map, since I want to manipulate their units and abilities compositions.
I remember that I've made this briefing screen originaly for my failure coop project Exodus and iterated several times over it by adding functionality and new features. The outcome of the process is an incomprehensible code that takes hours to debug and update. I've spent 2 days adjusting it to the new initialization triggers. I like how it looks after the changes, but I feel pity for the future me that will have to add voice acting, fix it for other races or move it to the UI module.
As you can see, there's not as much text as before, and it doesn't feel as overwhelming as it did.
As I've said before, I load the banks containing the campaign progress and write their content in the editable fields of the user types when the map inits. Doing it this way, I avoid the potential lag caused by loading a lot of variables when a mission starts. There's also much less amount of code in the triggers, and the data is more organized than when I was using records.
The structure of the banks is basicaly a shorter version of the user types I've defined. It only contains their ids and the information that needs to be carried over. It also has an extra section called "slot", used to start a new campaign without losing the progress of another one.
I have to copy the load and save functions into every map for arcade compatibility reasons. If I do it that way, I can upload the mod with a different account, saving space for one more map. I remember having troubles with preloading if it was done directly from the mod, so I preload the banks in every map instead.
I've created functions to retrieve the values from these user types. Now I can check with a line of code how many credits the player has at the moment, in which order he completed the missions, when did he unlock a tech, when did he purchased it, what's his record in this or that stat, etcetera.
Take control from replay
I've been investigating how this works. It will be pretty useful for the arcade version, but I've found two issues with it: If it's used, the banks can't be saved anymore, and the actor messages sent via triggers aren't issued again. I couldn't find a workaround for the first one. I'll have to send the actor messages over and over again in a periodic event for the second.
I'm almost there. The only thing missing to start working on the actual maps is the launcher. If these implementations work fine, the story and the missions are the only things I'll have to focus in the future.
Cool! The only thing I'd like to mention is that perhaps letting people know that you can skip through the briefing by clicking the briefing box, perhaps by instead of having a blank briefing box before "start transmission", perhaps make it say "after clicking start transmission, you can click the box to (skip? autofill? idk the word) the text"
And wow, what a huge amount of work that's going in to just the architecture of the campaign itself. I think many of us here should envy your planning skills. If nothing else, you probably have an SC2 mapster first here :P
I'm planning to add tips in the launcher related with the campaign UI. I want to avoid having to work on that function again if possible.
The amount of coding and planning is infimum compared with some other projects in this page, like The Curse of Tristram or Rogue Star. Nevertheless, I've learned the hard way that if I don't build over a firm basis, the rest of the pieces will crumble. I must take all the time needed to have this working before starting.