![[Avatar]](/uploads/avatar/1430.gif)
Don't play with fire, play with lil-Inferno!
|
[SIZE=14][B][U]Terrain:[/SIZE][/B][/U]
Terrain is usually pretty straightforward, once you have the plan for it. However, sometimes terraining has some requirements or limits, which plans may need to accomodate at times. But I'll spare you a tutorial on how to make terrain, and tell you instead how to go about making it not all by yourself!
[LIST]
[*][B]Step #1:[/B] Get your outline made. This includes a rough carving of all the main areas, approximate sizes, what they should do, etc. Nothing really goes in it, yet, but make sure it's as accurate as possible for what it's supposed to do. The future of your project will depend on your how much foresight you put into this aspect, so do your best. You'll save yourself a lot of trouble later if you get this step right early!
[*][B]Step #2:[/B] Break it up! With your outline, get your terrainers ready, give them an area to work on seperately, and let them at it. The best choice for how to divide up terrain would be to coordinate it with what part the Programmers are working on, which in turn is based on what part of the project plan is currently in priority. Certain parts of the terrain might need special priority, though, like for areas that have immediate affects on other parts of the map (like a layout for the player's control panel or a central hub area of the map where things take place, etc.). Terrainers will need to closely follow their Programmer counter-parts, keeping good communication about their requirements, and visa versa.
[*][B]Step #3:[/B] Fit it back! When a terrainer has finished fleshing out their part of the terrain, it's time to combine it with the others. This is also where things can get tricky, as there's no formal function for merging parts of terrain together with the usual Staredit-family editors. Enter SCMDraft or Starforge. SCMDraft's most recent versions come with a handy cut and paste feature for terrain (and units!), while Starforge comes with the all-powerful Brushes feature which lets you select sections of terrain of any size and shape (cut and paste works only in squares, for comparison). Using these tools, the finished terrainer must combine his product with each of the other terrainers' products seperately, as needed (like for adjacent or connected areas of terrain that are being worked on). In doing this, the terrainers get to see how their outlines fit with the other terrain pieces, as well as telling the rest of the terrainers how they need to adjust their terrain in turn for compatibility.
This stage will involve a bit of trial and error, and is not meant to be for making a final draft. One important consideration with this part, also, is that when terrain is merged via. brushes or cut and paste, it loses its ISOM data in the process. That means editing it in its combined state will be difficult, except by using brush samples or individual tiles, so any changes needed should be made to the terrainer's own samples of each area, and then recombined for (re)fitting, as needed.
[*][B]Step #4:[/B] Repeat Steps 2-4 while areas still remain or until everything fits and is shaped as needed. When that is done, it's time for...
[*][B]Step #5:[/B] Bringing it together! At this point, you will need to say goodbye to your beloved ISOM and combine each section of the terrain into its final form. There shouldn't be any heavy detailing yet, but everything should fit together nicely and do what it's supposed to do.
[*][B]Step #6:[/B] Spit n' polish! Now comes the fun part. As this is not an all-important stage, this part is best handled as a 'pass the baton' fare. Terrainers can go back over each others/their own areas and add in detailing, such as doodads, terrain blends, unit effects (be sure to check with the Programmers on these!), and even some flora and fauna if appropriate. This stage should be regurgitated while waiting for the Programmers to finish their parts, which more than likely will be the ongoing stage long after the terrain has reached its final draft anyway.
[/LIST]
[SIZE=14][B][U]Triggers:[/SIZE][/B][/U]
Here it is. The devil of all major projects. Traditionally, due to both complexity and singularity (read: no way to divy up triggers without breaking them), this is almost doomed to be a one-man task. But with careful commenting, information records, and closely following the project's plan, delegation of this tedious task is far from impossible. Furthermore, thanks to the technologies of recent editors (SCMDraft, GUEdit, etc.), triggers can now be imported/exported via. text, and treated as 'source code' just as with traditional modding/mapping projects in non-Starcraft games.
For simplicity's sake, I'll just describe how to handle this process by refering you to SCMDraft 2's handy TrigEdit feature (GUEdit's has known issues I believe). Keep in mind, however, that due to a number of issues with SCMDraft (specifically, it's string recycling features), you will not have good backwards compatability with Staredit-family editors. If you plan on doing anything in particular with them, you had better do it before you start dividing up your triggers for this stage. Though there is a way to make backwards compatability work, frankly, it's probably just more effort than it's worth (it involves using Proedit or Uberation's string unrecycle features, but neither of those tools are altogether stable in their own right, so I would recommend avoiding having to do this.)
Anyway, let's begin:
[LIST]
[*][B]Step #1:[/B] Get your relative trigger plan outlined. Unlike terrain, you may even have to go as far as adding in a portion of the gameplay before you know how you're gonna organize your triggers. But organize you must! Trying out different trigger models, pass it around between other Programmers, and prototype! prototype! prototype! are all key to this aspect. And once you have an idea of how to go about organizing things:
[*][B]Step #2:[/B] Convert to code. This is where the real fun begins. You will need to be well organized to handle this part effectively. You will need 3 main systems to keep things organized:
- [U]Source Code[/U]: Using SCMDraft's TrigEdit, extract the trigger data to a text document and save it. Then, pick apart the triggers and seperate them into seperate text documents by category. This is where your categorical system will be put to the test! It is important to get a good system worked out as early as possible, as unlike terrain, triggers are a royal female dog to have to "fit together" if (and possibly when) they get out of alignment. Plus, having it divided up by section helps keep it conceptually easier to manage, anyway.
- [U]Commenting Conventions[/U]: You must agree on a good convention to use for commenting triggers, naming your locations, switches, etc. Before, with Staredit-family editors, you had to rely on using lots of blank comments to compress large sections, and use the topmost trigger of each section to put in the necessary trigger data. However, using the Source Code system, you can bypass formal trigger commenting altogther and encase your comments with lines preceded with // symbols (C++ style line comments). Additionally, you can add in white space to pad out distinct sections, to your discretion. And because you are dealing in text, you can even go as far as to use a formal coding IDE to help with the process. I would recommend using a program called Notepad++ for the job, as I find tabbed editing, session saving, language definitions, and the ability to zoom text (as well as the dozens of other cool features) to be especially useful for text-based trigger editing.
- [U]Information records[/U]: Due to the nature of Starcraft triggers, unlike scripting or programming languages, you can't formally "declare" things like variables or other data storage means. Instead, you have to "borrow" from a pre-existing one, such as a unit's death counters, switches, or even use in-game units to hold data somehow (if you're a Trigger Writer, you should know this stuff, though). It is vitally important to keep track of all these "borrowed" resources, especially if you plan on delegating the task of triggers among multiple people. Conflicting use of a given death counter or switch can spell hours of debugging nightmares, which is the last thing you want on top of the existing difficulty level
Here are some of the things you'll need to keep a good record of:
- [U]Death Counters[/U]: That includes which units, which players, and what it's used for (Counting something? Using it to activate something like switch? A timer?)
- [U]Switches[/U]: The number, the name, and what it does. Note: Switches use up strings, so avoid counting on them if you can get by with Death Counters or other means. They do have their uses, though (randomization being one).
- [U]Locations[/U]: The name, size dimensions, elevation flags, its purpose(s), and its location (if used statically). You will often need to compare this information in particular with the other programmers, so be sure to keep it as up to date as possible.
- A possible fourth system, and one I would highly advise, is a good backup system. Every time you make any notable changes to your triggers, be sure to back it up (a system of version numbers helps too). Also try to keep a log with each backup of what has changed since the last one, so you can backtrack.
[*][B]Step #3:[/B] Break it up! With these systems in place, it's time to get cracking! Have your programmers pick an aspect of the map's triggers to work on, such as the player's interface, the gameplay, battle systems, area triggers, story sequences, etc. Be sure not to be too broad in how these tasks are delegated, though, as you don't want to end up drinking from a fire hose by having too much going on at once. Focus on one or two main parts, get it ironed out, and move on to the next. The better you iron it out, the less you have to worry about it later when doing the next stage(s).
[*][B]Step #4:[/B] Compare information. Any time you decide to use a new Wait blocker, Death Counter, Switch, or Location, or put to use an existing Death Counter, Switch, or Location in some particular way, be sure to confirm it first with the information records of the other programmers. For locations in particular, you may want to create copies of the ones they used in your own copy of the map, in addition to your own locations (if any). This way, you not only stay in sync with the other programmers, but you can make use of their locations as well if need be!
[*][B]Step #5:[/B] Bring it together! So you finished your current section of triggers. Good job. Now you have to combine it into the main set. Here's what you do:
- First, be sure your information records are up to date with the other members. Now's a good time to do that.
- Once you've confirmed that, then you'll have to combine your stuff with the main copy. Be sure your records are up to date with this main copy as well.
- In addition to individual copies of the map and code, your project should have one main copy of both map, triggers, and information seperate from the rest (probably entrusted to your Project Lead himself). Combine your code with this copy, updating the information as needed, and then test for compatibility.
- Chances are, in spite of your best efforts at recording all the necessary information to prevent conflicts, it is likely something will still go wrong. Do not panic. This is standard debugging. You'll have to trace through your new code as well as the existing code to find the discrepancy.
Your fellow programmers and even some testers should be able to help you with this task,
though if the bug(s) aren't that significant you can opt to push them aside for later (or if you need additional resources before you can track them down). Just be mindful of pushing too many things aside, as it'll wind up on your Project Lead's plate in the end, and he'll probably have more than enough on it as is.
- Once your code works reasonably well, you should run it by the testers or other programmers once or twice just to be sure. If no more major issues arise, or if you can safely ignore whatever does, then it might be ok to call it done. From there, it's on to the next task!
[*][B]Step #6:[/B] Repeat steps 3-6, and maybe even 7 every now and then, until all tasks are finished.
[*][B]Step #7:[/B] House cleaning. Once everything is done, combined together, and up and working (well enough for early beta, at least), it's time to squash those nasty leftover bugs! Chances are, between multiple programmers and a hugeass project, there'll be no shortage of them. While bug hunts can be a bit frustrating at times, just remind yourself that there's no magic at work here: Everything has a reason for doing what it does. All you gotta do is look through each possibility, and find that reason. More often than not, it's something silly that you just overlooked in a hurry. Just stick with it though, and eventually you'll figure it out. I guarantee it.
[/LIST]
[LINE=100]
So there you have it. This isn't quite as in-depth as I could have made it out to be (if you can possibly believe that), but it should help you get the beginnings of a process established for doing team-based maps. You'll need to work out some of the process-related details for yourself, though (project plans, project stages, terrain allocation, managing Source Code systems, etc.), as well as of course having the right competencies available to pull it all off. To that, I wish you good luck, and happy mapping :lol: !
All of this was written by Tuxedo-Templar.
To Admin and Moderators: Do not take this as an attempt to get minerals, this is mainly for the purpose of helping people, please sticky this if you feel the need to.
Terrain:Terrain is usually pretty straightforward, once you have the plan for it. However, sometimes terraining has some requirements or limits, which plans may need to accomodate at times. But I'll spare you a tutorial on how to make terrain, and tell you instead how to go about making it not all by yourself!
- Step #1: Get your outline made. This includes a rough carving of all the main areas, approximate sizes, what they should do, etc. Nothing really goes in it, yet, but make sure it's as accurate as possible for what it's supposed to do. The future of your project will depend on your how much foresight you put into this aspect, so do your best. You'll save yourself a lot of trouble later if you get this step right early!
- Step #2: Break it up! With your outline, get your terrainers ready, give them an area to work on seperately, and let them at it. The best choice for how to divide up terrain would be to coordinate it with what part the Programmers are working on, which in turn is based on what part of the project plan is currently in priority. Certain parts of the terrain might need special priority, though, like for areas that have immediate affects on other parts of the map (like a layout for the player's control panel or a central hub area of the map where things take place, etc.). Terrainers will need to closely follow their Programmer counter-parts, keeping good communication about their requirements, and visa versa.
- Step #3: Fit it back! When a terrainer has finished fleshing out their part of the terrain, it's time to combine it with the others. This is also where things can get tricky, as there's no formal function for merging parts of terrain together with the usual Staredit-family editors. Enter SCMDraft or Starforge. SCMDraft's most recent versions come with a handy cut and paste feature for terrain (and units!), while Starforge comes with the all-powerful Brushes feature which lets you select sections of terrain of any size and shape (cut and paste works only in squares, for comparison). Using these tools, the finished terrainer must combine his product with each of the other terrainers' products seperately, as needed (like for adjacent or connected areas of terrain that are being worked on). In doing this, the terrainers get to see how their outlines fit with the other terrain pieces, as well as telling the rest of the terrainers how they need to adjust their terrain in turn for compatibility.
This stage will involve a bit of trial and error, and is not meant to be for making a final draft. One important consideration with this part, also, is that when terrain is merged via. brushes or cut and paste, it loses its ISOM data in the process. That means editing it in its combined state will be difficult, except by using brush samples or individual tiles, so any changes needed should be made to the terrainer's own samples of each area, and then recombined for (re)fitting, as needed.
- Step #4: Repeat Steps 2-4 while areas still remain or until everything fits and is shaped as needed. When that is done, it's time for...
- Step #5: Bringing it together! At this point, you will need to say goodbye to your beloved ISOM and combine each section of the terrain into its final form. There shouldn't be any heavy detailing yet, but everything should fit together nicely and do what it's supposed to do.
- Step #6: Spit n' polish! Now comes the fun part. As this is not an all-important stage, this part is best handled as a 'pass the baton' fare. Terrainers can go back over each others/their own areas and add in detailing, such as doodads, terrain blends, unit effects (be sure to check with the Programmers on these!), and even some flora and fauna if appropriate. This stage should be regurgitated while waiting for the Programmers to finish their parts, which more than likely will be the ongoing stage long after the terrain has reached its final draft anyway.
Triggers:Here it is. The devil of all major projects. Traditionally, due to both complexity and singularity (read: no way to divy up triggers without breaking them), this is almost doomed to be a one-man task. But with careful commenting, information records, and closely following the project's plan, delegation of this tedious task is far from impossible. Furthermore, thanks to the technologies of recent editors (SCMDraft, GUEdit, etc.), triggers can now be imported/exported via. text, and treated as 'source code' just as with traditional modding/mapping projects in non-Starcraft games. For simplicity's sake, I'll just describe how to handle this process by refering you to SCMDraft 2's handy TrigEdit feature (GUEdit's has known issues I believe). Keep in mind, however, that due to a number of issues with SCMDraft (specifically, it's string recycling features), you will not have good backwards compatability with Staredit-family editors. If you plan on doing anything in particular with them, you had better do it before you start dividing up your triggers for this stage. Though there is a way to make backwards compatability work, frankly, it's probably just more effort than it's worth (it involves using Proedit or Uberation's string unrecycle features, but neither of those tools are altogether stable in their own right, so I would recommend avoiding having to do this.) Anyway, let's begin:
- Step #1: Get your relative trigger plan outlined. Unlike terrain, you may even have to go as far as adding in a portion of the gameplay before you know how you're gonna organize your triggers. But organize you must! Trying out different trigger models, pass it around between other Programmers, and prototype! prototype! prototype! are all key to this aspect. And once you have an idea of how to go about organizing things:
- Step #2: Convert to code. This is where the real fun begins. You will need to be well organized to handle this part effectively. You will need 3 main systems to keep things organized:
- Source Code: Using SCMDraft's TrigEdit, extract the trigger data to a text document and save it. Then, pick apart the triggers and seperate them into seperate text documents by category. This is where your categorical system will be put to the test! It is important to get a good system worked out as early as possible, as unlike terrain, triggers are a royal female dog to have to "fit together" if (and possibly when) they get out of alignment. Plus, having it divided up by section helps keep it conceptually easier to manage, anyway.
- Commenting Conventions: You must agree on a good convention to use for commenting triggers, naming your locations, switches, etc. Before, with Staredit-family editors, you had to rely on using lots of blank comments to compress large sections, and use the topmost trigger of each section to put in the necessary trigger data. However, using the Source Code system, you can bypass formal trigger commenting altogther and encase your comments with lines preceded with // symbols (C++ style line comments). Additionally, you can add in white space to pad out distinct sections, to your discretion. And because you are dealing in text, you can even go as far as to use a formal coding IDE to help with the process. I would recommend using a program called Notepad++ for the job, as I find tabbed editing, session saving, language definitions, and the ability to zoom text (as well as the dozens of other cool features) to be especially useful for text-based trigger editing.
- Information records: Due to the nature of Starcraft triggers, unlike scripting or programming languages, you can't formally "declare" things like variables or other data storage means. Instead, you have to "borrow" from a pre-existing one, such as a unit's death counters, switches, or even use in-game units to hold data somehow (if you're a Trigger Writer, you should know this stuff, though). It is vitally important to keep track of all these "borrowed" resources, especially if you plan on delegating the task of triggers among multiple people. Conflicting use of a given death counter or switch can spell hours of debugging nightmares, which is the last thing you want on top of the existing difficulty level
Here are some of the things you'll need to keep a good record of: - Death Counters: That includes which units, which players, and what it's used for (Counting something? Using it to activate something like switch? A timer?)
- Switches: The number, the name, and what it does. Note: Switches use up strings, so avoid counting on them if you can get by with Death Counters or other means. They do have their uses, though (randomization being one).
- Locations: The name, size dimensions, elevation flags, its purpose(s), and its location (if used statically). You will often need to compare this information in particular with the other programmers, so be sure to keep it as up to date as possible.
- A possible fourth system, and one I would highly advise, is a good backup system. Every time you make any notable changes to your triggers, be sure to back it up (a system of version numbers helps too). Also try to keep a log with each backup of what has changed since the last one, so you can backtrack.
- Step #3: Break it up! With these systems in place, it's time to get cracking! Have your programmers pick an aspect of the map's triggers to work on, such as the player's interface, the gameplay, battle systems, area triggers, story sequences, etc. Be sure not to be too broad in how these tasks are delegated, though, as you don't want to end up drinking from a fire hose by having too much going on at once. Focus on one or two main parts, get it ironed out, and move on to the next. The better you iron it out, the less you have to worry about it later when doing the next stage(s).
- Step #4: Compare information. Any time you decide to use a new Wait blocker, Death Counter, Switch, or Location, or put to use an existing Death Counter, Switch, or Location in some particular way, be sure to confirm it first with the information records of the other programmers. For locations in particular, you may want to create copies of the ones they used in your own copy of the map, in addition to your own locations (if any). This way, you not only stay in sync with the other programmers, but you can make use of their locations as well if need be!
- Step #5: Bring it together! So you finished your current section of triggers. Good job. Now you have to combine it into the main set. Here's what you do:
- First, be sure your information records are up to date with the other members. Now's a good time to do that. - Once you've confirmed that, then you'll have to combine your stuff with the main copy. Be sure your records are up to date with this main copy as well. - In addition to individual copies of the map and code, your project should have one main copy of both map, triggers, and information seperate from the rest (probably entrusted to your Project Lead himself). Combine your code with this copy, updating the information as needed, and then test for compatibility. - Chances are, in spite of your best efforts at recording all the necessary information to prevent conflicts, it is likely something will still go wrong. Do not panic. This is standard debugging. You'll have to trace through your new code as well as the existing code to find the discrepancy. Your fellow programmers and even some testers should be able to help you with this task, though if the bug(s) aren't that significant you can opt to push them aside for later (or if you need additional resources before you can track them down). Just be mindful of pushing too many things aside, as it'll wind up on your Project Lead's plate in the end, and he'll probably have more than enough on it as is. - Once your code works reasonably well, you should run it by the testers or other programmers once or twice just to be sure. If no more major issues arise, or if you can safely ignore whatever does, then it might be ok to call it done. From there, it's on to the next task!
- Step #6: Repeat steps 3-6, and maybe even 7 every now and then, until all tasks are finished.
- Step #7: House cleaning. Once everything is done, combined together, and up and working (well enough for early beta, at least), it's time to squash those nasty leftover bugs! Chances are, between multiple programmers and a hugeass project, there'll be no shortage of them. While bug hunts can be a bit frustrating at times, just remind yourself that there's no magic at work here: Everything has a reason for doing what it does. All you gotta do is look through each possibility, and find that reason. More often than not, it's something silly that you just overlooked in a hurry. Just stick with it though, and eventually you'll figure it out. I guarantee it.
So there you have it. This isn't quite as in-depth as I could have made it out to be (if you can possibly believe that), but it should help you get the beginnings of a process established for doing team-based maps. You'll need to work out some of the process-related details for yourself, though (project plans, project stages, terrain allocation, managing Source Code systems, etc.), as well as of course having the right competencies available to pull it all off. To that, I wish you good luck, and happy mapping  ! All of this was written by Tuxedo-Templar. To Admin and Moderators: Do not take this as an attempt to get minerals, this is mainly for the purpose of helping people, please sticky this if you feel the need to.
This post was edited 1 times, last edit by lil-Inferno: Mar 24 2008, 11:06 pm.
"Sharing is caring. . .Unless you have STD's!" - LoveLess
|