- Joined
- Oct 12, 2011
- Messages
- 3,449
Map Development Suite
- for better, faster, and convenient map development
Hi and welcome! Just a brief resumé, I (in the modding scene) am a big enthusiast of total-conversion maps. I'm also experienced in developing some big total-conversion map projects such as Garden's Tale, Glideon, Coconut Party, and EmberCraft.
This thread is a one-stop solution for you to significantly improve your map development process. It is perfect for ambitious mapper who seek to work on big map projects. It contains a lot of mapping-related advice, tips and tricks, code snippet & custom system recommendations, and more. It will guide you to develop high quality and highly attractive map, back from ground up to be a fully developed map, that at very least will receive instant approval here in Hive.
A. Mapping Tips & Advices- Use interesting custom map preview
First impression is key! And in most cases, the very first thing people see about your map is the preview. Create and use the most interesting preview image you can make. But preferably without faking anything. Try to keep the preview image to resemble the actual map as possible. Using fake image, if your map quality doesn't keep up, will only provide minor & temporary download boost and it might stain your reputation as a map maker. Alternatively, you can make a custom logo for your map, but it will require some art/design skills.
- Invest on good map presentation and resource thumbnail!
Your map thread design and appearance (presentation) will hugely impact your audience's expectation of your map. Invest on good amount of time designing and building your thread to be as interesting or unique as you can possibly make. To make advanced thread layout you might to learn more about BB codes. Remember, appearance is half of the whole performance!
These map threads might give you some inspirations:- IID Beta v0.88b
- Iceborn v1.9
- EmberCraft v1.2a
- WoW: Heroes Return [ORPG] [1.2.b]
- Enthashara´s Tales ORPG 1.3.4 fix
- Mercenaries r1.2f
- BoW ORPG v1.32e
- Use custom loading screen
- Keep track of credit list along the way
- Make a to-do list & try deadlining
- Build and grow your community
- Get rid of corrupted (green) icons
- Don't be too greedy & perfectionist, start small!
- Warcraft shell extension
- Stop over-sharing
- Learn color tags
- Elaborate tooltips, don't use sharp & high-contrast colour
- Learn vJass and use syntax highlighter programs
Index
Content
1. Use hashtable easily: [Snippet] NewTable
NewTable (by Bribe) is by far one of our best code resource so far. It's very widely used among both spell makers and map makers. Let's say it's a must have resource in every map. Why? Almost every map needs hashtable. Where as hashtable is very limited (only 255 hashtable per map). Using NewTable the limit does no longer exist. Other than that, NewTable provides nice interface: call SaveInteger(ht, parent, child, 123) => set parent.integer[child] = 123 It's very easy to use even for who don't know anything about vJass. It also let you do some 2D variable stuffs (you can read the further details in the link provided above).
2. Handle keyboard events easily: [System] ArrowKeyEvent
If only your map needs arrow key events for something (control, camera adjustments, or anything else), this system will ease your life as well as providing useful extra feature like what's mentioned above.
3. Handle trackable easily: [System] Track
What's trackable? It's not going to be discussed here but to get basic idea what it is, trackables are widely used in Full Screen Inventory systems (like what TKoK has) cz it provides quite instant click event and useful hover event. The recommendation level is low simply because I rarely see maps use trackables. Usage difficulty is hard because you need basic knowledge about trackable, and since I rarely saw people are actually experienced about trackable. But once you understand what trackable is and how to use it, this system will be absolutely helpful. It also provides a great feature to get the triggering player of the click/hover event, which normal events do not provide.
4. Keep your map clean from tome items: Item Cleanup
It's very rarely known by map makers that tome items never get removed from the map after being used (acquired) and eventually may causes lags. Thus this system was made by Bribe to settle this issue. If your map has tomes, this system is absolutely must have.
5. Create multiple missile-based abilities easily and effectively: [System] Missile
Sometimes we want to create missile-based spells with different but similar effects, thus we simply copy paste the other ability and modify it, which is not very practice and easy to do. Now there comes this system that allows you to toggle on/off which event do you actually need (on hit/on periodic/ etc.) to ease you in customizing your spell effects. It's hard to tell exactly how hard is it to use this, because basically it's very easy to use for anyone who understand vJass. But yeah, it requires vJass knowledge.
6. Assign unique id to any unit: (vJass) UnitIndexer | (GUI) GUI UnitIndexer
Almost every map use this. UnitIndexer is used to assign unique id to every unit in your map automatically. Sometimes we want to have variables that contain specific information about a unit, as example I want to store a unit's damage into a variable named "UnitDamage": (vJass)
JASS:
Another great deal is UnitIndexer provides events called on index event and on deindex event. Index event is fired when a unit is created (added to the world) and deindex event is fired when a unit is removed from the world. However, you may need to be careful to pick which UnitIndexer for your map. Having multiple indexer systems would likely mess things up. If you use Nestharus' UnitIndexer, you mostly will not be able to use any other systems that requires Bribe's GUI UnitIndexer. And vice versa.
7. Assign certain data into a timer: TimerUtils
This is also one of the best code resource in wc3 so far, widely used among spell makers. It has simple yet very useful feature to allow us to assign any integer data into a timer. And as been mentioned above, TimeUtils (in certain condition) does not destroy timer once you release it but TimeUtils will recycle (store) the timer for later use.
| ||||||||
Last edited: