• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Ultimate Map Development Guide - Boost up your development process!

Most popular systems & snippets by vote

  • 1. [Snippet] NewTable

    Votes: 6 42.9%
  • 2. [System] ArrowKeyEvent

    Votes: 0 0.0%
  • 3. [System] Track

    Votes: 1 7.1%
  • 4. Item Cleanup

    Votes: 5 35.7%
  • 5. [System] Missile

    Votes: 3 21.4%
  • 6. UnitIndexer

    Votes: 11 78.6%
  • 7. TimerUtils

    Votes: 4 28.6%

  • Total voters
    14

Kazeon

Hosted Project: EC
Level 33
Joined
Oct 12, 2011
Messages
3,449
Map Development Suite
- for better, faster, and convenient map development
I. Intro
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:
  • 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
Recommendation level: High
Usage difficulty: Easy
Implementation difficulty: Easy
Advantages:
• Hashtable limit is removed


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
Recommendation level: Low
Usage difficulty: Medium
Implementation difficulty: Easy
Advantages:
• Arrow state checking (IsArrowKeyPressed)​


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
Recommendation level: Low
Usage difficulty: Hard
Implementation difficulty: Easy
Advantages:
• Getting the trackable clicker​


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
Recommendation level: Medium
Usage difficulty: Easy
Implementation difficulty: Easy
Advantages:
• -​


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
Recommendation level: High
Usage difficulty: Hard
Implementation difficulty: Easy
Advantages:
• Tons of missile customization​


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
Recommendation level: High
Usage difficulty: Easy
Implementation difficulty: Easy
Advantages:
• Provides on index/deindex events (brief explanation below)​


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:
set UnitDamage[GetUnitUserData(TheUnit)] = 100
(GUI)
  • Set UnitDamage[(Custom value of (TheUnit))] = 100[/FONT]
  • [FONT=Tahoma]
You simply need to call "GetUnitUserData" (for jass) or "Custom value of unit" (for GUI, this is available under Unit function group). That's just one example usage of UnitIndexer, you may discover other usages as you experience more about spell making.

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
Recommendation level: High
Usage difficulty: Easy
Implementation difficulty: Easy
Advantages:
• Preserves & recycles timers​


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:

Zwiebelchen

Hosted Project GR
Level 35
Joined
Sep 17, 2009
Messages
7,236
If you extend this a little bit further, this could become a nice go-to for mappers on what is a great coding framework to start a new project with.

Here's no honorable mentions that imho you should include:


Knockback3D from Cokemonkey.
-> Simple yet effective knockback system; doesn't come with a lot of extra features like custom callbacks, but it's exactly the simplicity that I like about it.

AIDS or UnitIndexer.
-> Nowadays, the unit indexing feature is actually the least significant reason to use an indexer - it's the onIndex and onDeindex events that are so god damn useful. You never need to worry about all the ways a unit can be added or removed from the battlefield anymore ... the onIndex and onDeindex events catch them all.

SimError.
-> Custom error messages are always nice.

DDS:
-> Everyone needs a damage detection system.
 

Ardenian

A

Ardenian

Well, I suggested it as it is GUI-user friendly which is especially good for map creators being new to Jass and vJass.
 

Kazeon

Hosted Project: EC
Level 33
Joined
Oct 12, 2011
Messages
3,449
I will work on this later..

- Going to remove TimerUtils from the list. Because, mostly it's rather for minor improvements, definedly not a must have in a map.
- Adding DDS and CSS to the list.

The list is supposed for systems that seem useful for common map makers, not just for coders, or I will ended up adding every system and snippets in the jass section.

Feels kinda lacking.

Out of those 7 mentioned I have never felt a need for 6 of them.
I am surprised that you haven't included a DDS in the list btw.

Bcs this thread is not made specifically for you. And yes, it needs times to improve.
 
It's approveable, but you would need to keep it up to date, will you?

Like we can discuss about mentioned DDS, CSS, a generic data structure, [vJASS] - [System] Polygon, [System] SoundTools.

Is ItemCleanup important enough for you?

It only makes sense if we keep it up to date from time to time I believe.

Index
(Index is used to ease you in memorizing which entries are useful for your personal needs)
Could you put the library name there instead the index numbers?
 
Top