WIP Back To Footman Empires Project :o


Footman Empires is largely influenced by Dynasty Warriors Empires 4

The object of the game is to take out the opposing teams

The first arena I am working on for the game has 4 teams and 9 bases. Each base is color coded to make it easier to see. The 4 teams are located on the four corners of the map.

A player loses when their general falls. A team loses when all their generals have fallen or their main camp is taken (very corners of map).

Controlling Areas

To control an area, build a fortress at a control point. Medium squares are control points (see very center of map). The team bases have 3 control points. The black, red, blue, yellow, and white bases each have 1 control point. Building any sort of building on all control points will ensure that the team controls the area.

When an area is controlled, the controlling team gets taxes from that area depending on the tier. Orange/Pink/Teal/Grey are tier 3, Black/Blue/Red/Yellow are tier 1, and White is tier 5.

While units are not on the front lines, they get a variety of bonuses. While units are behind enemy lines, they get various penalties.

Bases are linked together to their neighbors. Fortresses in bases stop spawning when they are no longer connected to the owning team's main camp. To give an example.

Pink controlled by Team 1
Teal controlled by Team 2
Orange controlled by Team 3
Grey controlled by Team 4

White controlled by Team 1
Yellow controlled by Team 1
Red controlled by Team 1

Black controlled by Team 2

In this case, Yellow and Red are connected to Team 1's main camp through White. Let's say that Team 2 takes away Team 1's control of White

White controlled by No Team

Team 1 is still ok as no team is controlling the White base, so Red/Yellow are still connected to the main camp through it. Now Team 2 takes the White base.

White controlled by Team 2

Now the Red and Yellow bases aren't connected to Team 1's main camp. This means that if there are forts at those bases, they will stop spawning. Furthermore, units at those bases will get major penalties as they aren't connected to the main camp.


Morale is how confident a unit is to fight. 100 morale gives a 50% bonus to attack speed and movement speed and a 50% reduction to incoming damage. 0 morale gives a 50% reduction to attack speed and movement speed and a 50% increase in incoming damage.

As a force of units in a colored region fight enemies, their morale changes. Killing enemies increases morale while dying to enemies lowers morale.

Let's consider 3 Team 1 units and 2 Team 2 units all with 50 morale in the Blue Region.

Team 1 kills one of Team 2's units in the blue region. The remaining Team 2 unit in the blue region loses morale based on the dead unit's rank while Team 1's units in the blue region get the same amount of morale that Team 2 lost. Only units in the affected region are modified. If that units leaves the region, their morale does not change to reflect the new region, their morale is their own. If a unit enters the blue region, their morale won't suddenly increase or decrease as well.

When a unit is cut off from the main camp, their morale lowers at a constant rate until they are reconnected to the main camp. Morale only goes up when the unit is part of a force killing other units. It goes down when either the unit is part of a force with dying units or the unit is cut off from the main camp. In this way, cutting off bases from the main camp can be a devastating blow.

Units that are in enemy territory or that are cut off from the main camp get less morale per kill and lose more morale per death. Units in allied territory gain more morale per kill and lose less morale per death. In this way, it can be relatively difficult to take a base.

Some units, like flag bearers and commanders, increase the rate of morale gain per kill and lower the rate of morale loss per death. Structures can also do this, like towers and fortresses within an area. The bonuses depend on the rank and type of the unit/structure. Generals give the most bonuses, but losing them will cost the player the game (like the King in chess).


Whenever a unit attacks or while a unit is moving, that unit uses up stamina. When a unit hits 0 stamina, they begin to lose morale and their attack/movement speed are lowered by 50% and their damage taken is increased by 50%. While a unit is regenerating stamina, their food consumption is increased. If that unit is out of food, they begin losing stamina and morale. No morale and no stamina will decrease their attack speed and damage by an additional 25% and increase their damage taken by an additional 25%.


Food is produced at the main camp and can be carried to outlying fortresses. Each unit can carry a certain amount of food. Some units act purely as supply units (when in areas without a fortress). These supply units give other units in the area food. If the supply unit is killed, those supplies are taken by the killing force (distributed among units, rest discarded).

Mechanical Units

Mechanical units do not have stamina or food, instead they have power. Mechanical units use a constant amount of power. When they run out of power , they can't attack or move. Mechanical units do not have morale. They give extra morale bonuses to allied units and lower morale bonuses for enemy units. They are rather high ranking, so they can increase enemy morale and lower allied morale when they are destroyed.

Power can be transmitted via Power Towers or by suppliers holding battery packs.

Undead Units

Undead units do not use stamina, food, or morale. They give major morale penalties to both allies and enemies (same amount). Undead units use energy and when they run out of energy, they immediately die. Energy is supplied by undead commanders, undead generals, and energy towers. Undead units do not store energy at all, so if there is no energy source in an area, they will immediately die.


When a commander is killed, it will be revived at the main camp after a period of time. If the commander is killed with 0 morale or in an area that is not connected to the main camp, that commander will be lost.


Combat is highly customized so that unit attacks are based on their gear and stats.

If a unit with a low amount of strength were to wield an extremely heavy weapon, they would take a cooldown penalty and would lose more stamina per attack. When a unit is encumbered (more gear than they can carry), they take a movement speed penalty and stamina penalty based on how encumbered they are (less stamina, less movement speed).

If a unit were to wield two weapons, they would lose stamina for each weapon (two attacks at a time). The weapons actually run their own attacks and the armor run their own defenses.

Combat Experience

As a unit gains combat experience, they get morale bonuses (more morale per kill, less morale lost per death). When they get enough experience, they can become a commander. Experience also increases their stats, allowing them to equip better gear.

Units can gain experience by either killing other units directly (this includes heroes) or by being trained at a fortress/main camp for gold.


Each team only gets 1 main camp of 1 race. Each race has a variety of race specific heroes that the team can pick. The highest ranking player on the team can pick the race (save/load), otherwise the race is randomized.​

Each fortress can spawn 6 types of units. Unit spawns are increased via fortress spawn points. When a fortress is upgraded, it gets more spawn points. Gold may be spent to redeem spawn points and change the spawns around. The UI is 6 items in the fortress inventory with item charges representing spawn count.​
Fortresses can be equipped with weapons to give to the spawning units, otherwise the spawning units spawn with default gear. Modifying what a unit spawns with is done by first clicking on the unit in the inventory menu to open its menu (spellbook) and then clicking the equip weapons or equip armor button. From here, different types of weapons and armor are shown. Select the type, select the grade, then select the actual item. Units of the chosen type will spawn with that item from then on (but it will cost gold depending on item).​
Researched technology gives you access to more items to equip units with. It also gives you access to items at the main camp to equip your hero with. Research is all done at the main camp and is shared across the team.​
You may manipulate every spawn within a fort (decide what items it will spawn with and so forth). For example, if 2 elven warriors spawned at a fort, they could each have their own item configurations.​
Different units use up different amounts of spawn points. For example, an Ogre might use 11 points whereas a goblin might use 1. A tier 1 shrine may only have 5 points, making it impossible to spawn an ogre.​

Modularity of the Map
One great thing about the map is that it can be loaded into an arena. The arena only needs to have rects laid out in WE and labeled correctly. From there, the JASS code generated by those rects can be plugged into a program I wrote and then the vjass code to run that arena will automatically be generated!​
Example of generated code​
//! textmacro REGION_SETUP
local ArenaArea TopLeft = ArenaArea.create(true, TopLeftTier, 3)
local ArenaArea Right = ArenaArea.create(false, RightTier, 1)
* Right
call Right.region.setFort(4832, -416, 5152, -96, 1)
call Right.region.addTerritory(1056, -704, 5952, 192)
call Right.region.addTerritory(4064, -2080, 5952, 1568)
call Right.region.addTerritory(4832, 1536, 5824, 1888)
call Right.region.addTerritory(4832, -2400, 5824, -2048)
call Right.region.addTerritory(3936, -1216, 4224, 672)
call Right.region.addTerritory(3808, -1088, 4096, 544)
call Right.region.addTerritory(2176, -1056, 2464, 544)
call Right.region.addTerritory(2048, -1216, 2336, 672)
call Right.region.addTerritory(2112, -1856, 2208, 1280)
call Right.region.addTerritory(1984, -1728, 2176, 1184)
call Right.region.addTerritory(1856, -1600, 2144, 1056)
call Right.region.addTerritory(1760, -1472, 2048, 928)
call Right.region.addTerritory(1632, -1312, 1920, 800)
call Right.region.addTerritory(2304, -928, 3936, 416)
call Right.region.addTerritory(1472, -960, 1600, 416)
call Right.region.addTerritory(1376, -832, 1504, 288)
call Right.region.setTower(5472, -1184, 5664, -992, 1)
call Right.region.setTower(4320, -1824, 4512, -1632, 2)
call Right.region.setTower(4064, -928, 4256, -736, 3)
call Right.region.setTower(4064, 224, 4256, 416, 4)
call Right.region.setTower(5472, 480, 5664, 672, 5)
call Right.region.setTower(4320, 1120, 4512, 1312, 6)
call Right.region.setTower(2016, -1056, 2208, -864, 7)
call Right.region.setTower(2016, 352, 2208, 544, 8)
* TopLeft
call TopLeft.region.setFort(-3872, 3424, -3552, 3744, 1)
call TopLeft.region.setFort(-3744, 992, -3424, 1312, 2)
call TopLeft.region.setFort(-1440, 3296, -1120, 3616, 3)
call TopLeft.region.setMain(-6720, 5952, -6080, 6592)
call TopLeft.region.addTerritory(-6208, 1952, -2080, 6080)
call TopLeft.region.addTerritory(-7360, 4896, -5024, 7232)
call TopLeft.region.addTerritory(-5056, 1632, -1216, 1984)
call TopLeft.region.addTerritory(-2080, 1568, -1472, 2240)
call TopLeft.region.addTerritory(-1952, 1568, -1344, 2112)
call TopLeft.region.addTerritory(-1696, 1600, -1088, 1856)
call TopLeft.region.addTerritory(-1632, 1568, -1024, 1696)
call TopLeft.region.addTerritory(-2528, 1344, -1696, 1696)
call TopLeft.region.addTerritory(-2368, 1216, -1696, 1568)
call TopLeft.region.addTerritory(-2240, 1088, -1696, 1440)
call TopLeft.region.addTerritory(-2144, 960, -1696, 1312)
call TopLeft.region.addTerritory(-1984, 832, -1696, 1184)
call TopLeft.region.addTerritory(-1856, 672, -1696, 992)
call TopLeft.region.addTerritory(-2144, 1984, -1696, 4928)
call TopLeft.region.addTerritory(-4032, 448, -2752, 1696)
call TopLeft.region.addTerritory(-1728, 2688, -576, 3872)
call TopLeft.region.addTerritory(-1728, 2336, -832, 4128)
call TopLeft.region.addTerritory(-1056, 2528, -704, 4000)
call TopLeft.region.addTerritory(-4288, 704, -2496, 1664)
call TopLeft.region.addTerritory(-4160, 608, -2624, 832)
call TopLeft.region.addTerritory(-2528, 1568, -1600, 2368)
call TopLeft.region.setTower(-5280, 5344, -5088, 5536, 1)
call TopLeft.region.setTower(-5664, 4960, -5472, 5152, 2)
call TopLeft.region.setTower(-4256, 3936, -4064, 4128, 3)
call TopLeft.region.setTower(-2976, 3296, -2784, 3488, 4)
call TopLeft.region.setTower(-3616, 2656, -3424, 2848, 5)
call TopLeft.region.setTower(-2848, 5600, -2656, 5792, 6)
call TopLeft.region.setTower(-2080, 3296, -1888, 3488, 7)
call TopLeft.region.setTower(-1440, 2656, -1248, 2848, 8)
call TopLeft.region.setTower(-2976, 1120, -2784, 1312, 9)
call TopLeft.region.setTower(-3616, 1760, -3424, 1952, 10)
call TopLeft.region.setTower(-5920, 2528, -5728, 2720, 11)
//! endtextmacro

set gg_rct_Right_Fort_001=Rect(4832.0, - 416.0, 5152.0, - 96.0)
set gg_rct_Right_Region_001=Rect(1056.0, - 704.0, 5952.0, 192.0)
set gg_rct_Right_Region_002=Rect(4064.0, - 2080.0, 5952.0, 1568.0)
set gg_rct_Right_Region_003=Rect(4832.0, 1536.0, 5824.0, 1888.0)
set gg_rct_Right_Region_004=Rect(4832.0, - 2400.0, 5824.0, - 2048.0)
set gg_rct_Right_Region_005=Rect(3936.0, - 1216.0, 4224.0, 672.0)
set gg_rct_Right_Region_006=Rect(3808.0, - 1088.0, 4096.0, 544.0)
set gg_rct_Right_Region_007=Rect(2176.0, - 1056.0, 2464.0, 544.0)
set gg_rct_Right_Region_008=Rect(2048.0, - 1216.0, 2336.0, 672.0)
set gg_rct_Right_Region_009=Rect(2112.0, - 1856.0, 2208.0, 1280.0)
set gg_rct_Right_Region_010=Rect(1984.0, - 1728.0, 2176.0, 1184.0)
set gg_rct_Right_Region_011=Rect(1856.0, - 1600.0, 2144.0, 1056.0)
set gg_rct_Right_Region_012=Rect(1760.0, - 1472.0, 2048.0, 928.0)
set gg_rct_Right_Region_013=Rect(1632.0, - 1312.0, 1920.0, 800.0)
set gg_rct_Right_Region_014=Rect(2304.0, - 928.0, 3936.0, 416.0)
set gg_rct_Right_Region_015=Rect(1472.0, - 960.0, 1600.0, 416.0)
set gg_rct_Right_Region_016=Rect(1376.0, - 832.0, 1504.0, 288.0)
set gg_rct_Right_Tower_001=Rect(5472.0, - 1184.0, 5664.0, - 992.0)
set gg_rct_Right_Tower_002=Rect(4320.0, - 1824.0, 4512.0, - 1632.0)
set gg_rct_Right_Tower_003=Rect(4064.0, - 928.0, 4256.0, - 736.0)
set gg_rct_Right_Tower_004=Rect(4064.0, 224.0, 4256.0, 416.0)
set gg_rct_Right_Tower_005=Rect(5472.0, 480.0, 5664.0, 672.0)
set gg_rct_Right_Tower_006=Rect(4320.0, 1120.0, 4512.0, 1312.0)
set gg_rct_Right_Tower_007=Rect(2016.0, - 1056.0, 2208.0, - 864.0)
set gg_rct_Right_Tower_008=Rect(2016.0, 352.0, 2208.0, 544.0)
set gg_rct_TopLeft_Fort_001=Rect(- 3872.0, 3424.0, - 3552.0, 3744.0)
set gg_rct_TopLeft_Fort_002=Rect(- 3744.0, 992.0, - 3424.0, 1312.0)
set gg_rct_TopLeft_Fort_003=Rect(- 1440.0, 3296.0, - 1120.0, 3616.0)
set gg_rct_TopLeft_Main=Rect(- 6720.0, 5952.0, - 6080.0, 6592.0)
set gg_rct_TopLeft_Region_001=Rect(- 6208.0, 1952.0, - 2080.0, 6080.0)
set gg_rct_TopLeft_Region_002=Rect(- 7360.0, 4896.0, - 5024.0, 7232.0)
set gg_rct_TopLeft_Region_003=Rect(- 5056.0, 1632.0, - 1216.0, 1984.0)
set gg_rct_TopLeft_Region_004=Rect(- 2080.0, 1568.0, - 1472.0, 2240.0)
set gg_rct_TopLeft_Region_005=Rect(- 1952.0, 1568.0, - 1344.0, 2112.0)
set gg_rct_TopLeft_Region_006=Rect(- 1696.0, 1600.0, - 1088.0, 1856.0)
set gg_rct_TopLeft_Region_007=Rect(- 1632.0, 1568.0, - 1024.0, 1696.0)
set gg_rct_TopLeft_Region_008=Rect(- 2528.0, 1344.0, - 1696.0, 1696.0)
set gg_rct_TopLeft_Region_009=Rect(- 2368.0, 1216.0, - 1696.0, 1568.0)
set gg_rct_TopLeft_Region_010=Rect(- 2240.0, 1088.0, - 1696.0, 1440.0)
set gg_rct_TopLeft_Region_011=Rect(- 2144.0, 960.0, - 1696.0, 1312.0)
set gg_rct_TopLeft_Region_012=Rect(- 1984.0, 832.0, - 1696.0, 1184.0)
set gg_rct_TopLeft_Region_013=Rect(- 1856.0, 672.0, - 1696.0, 992.0)
set gg_rct_TopLeft_Region_014=Rect(- 2144.0, 1984.0, - 1696.0, 4928.0)
set gg_rct_TopLeft_Region_015=Rect(- 4032.0, 448.0, - 2752.0, 1696.0)
set gg_rct_TopLeft_Region_016=Rect(- 1728.0, 2688.0, - 576.0, 3872.0)
set gg_rct_TopLeft_Region_017=Rect(- 1728.0, 2336.0, - 832.0, 4128.0)
set gg_rct_TopLeft_Region_018=Rect(- 1056.0, 2528.0, - 704.0, 4000.0)
set gg_rct_TopLeft_Region_019=Rect(- 4288.0, 704.0, - 2496.0, 1664.0)
set gg_rct_TopLeft_Region_020=Rect(- 4160.0, 608.0, - 2624.0, 832.0)
set gg_rct_TopLeft_Region_021=Rect(- 2528.0, 1568.0, - 1600.0, 2368.0)
set gg_rct_TopLeft_Tower_001=Rect(- 5280.0, 5344.0, - 5088.0, 5536.0)
set gg_rct_TopLeft_Tower_002=Rect(- 5664.0, 4960.0, - 5472.0, 5152.0)
set gg_rct_TopLeft_Tower_003=Rect(- 4256.0, 3936.0, - 4064.0, 4128.0)
set gg_rct_TopLeft_Tower_004=Rect(- 2976.0, 3296.0, - 2784.0, 3488.0)
set gg_rct_TopLeft_Tower_005=Rect(- 3616.0, 2656.0, - 3424.0, 2848.0)
set gg_rct_TopLeft_Tower_006=Rect(- 2848.0, 5600.0, - 2656.0, 5792.0)
set gg_rct_TopLeft_Tower_007=Rect(- 2080.0, 3296.0, - 1888.0, 3488.0)
set gg_rct_TopLeft_Tower_008=Rect(- 1440.0, 2656.0, - 1248.0, 2848.0)
set gg_rct_TopLeft_Tower_009=Rect(- 2976.0, 1120.0, - 2784.0, 1312.0)
set gg_rct_TopLeft_Tower_010=Rect(- 3616.0, 1760.0, - 3424.0, 1952.0)
set gg_rct_TopLeft_Tower_011=Rect(- 5920.0, 2528.0, - 5728.0, 2720.0)

Systems That Aren't Finished
1. Food​
2. Energy​
3. Morale​
4. Power​
5. Spawning​
6. Equipment (damage/combat is done though)​
7. Combat Experience​


vJass errors are legion
Looks pretty awesome to me. Too bad I have zero time to try it out at home.


New Member
This looks awesome, the fact that I love Dynasty Warriors Series, I'll be looking forward on this project.

I hope you can improve the terrain.


vJass errors are legion
I can improve the terrain for you if you want. I am fairly not too terrible with that sort of thing.
General chit-chat
Help Users
  • jonas jonas:
    I'm a bit worried about the future of data science, there's an influx of incompetent people hired by incompetent managers, that can't last. But I'm sure smart data scientists will always be useful and hireable. Same as smart security people.
  • jonas jonas:
    My sister in law worked in a vegan food truck, the owners were also making a killing, added several trucks and opened two restaurants over 5 years
  • Ghan Ghan:
    The CompTIA stuff is pretty much crap unfortunately. The places that ask for those low-level certs aren't likely places you want to work. For IT you really want a degree, but in the meantime you need to figure out some way to learn the skills. Cybersecurity is really hot right now so competition is fierce.
  • tom_mai78101 tom_mai78101:
    I realized I don't have anything much to say, other than "Good luck!". Compared to other places, I'm just very lucky we didn't have a lot of surges of cases coming in.
  • The Helper The Helper:
    My daughter just got back from school at Georgetown TX, outside of Austin and said there were 100 cases in the last week but she also said nobody was wearing a mask anywhere so people mask up and stay safe!
  • thewrongvine thewrongvine:
    happy thanksgiving folks!
  • Ralle Ralle:
  • Varine Varine:
    @Gyah Yeah I figured they aren't particularly valuable, but they'll at the least act as a baseline for some entry level work somewhere.
  • Varine Varine:
    I now see how horribly I spelled @Ghan
  • Varine Varine:
    I had a rough morning
  • The Helper The Helper:
    that field is going to explode and though there is competition there is going to be room for all levels in the coming years imho.
  • tom_mai78101 tom_mai78101:
    Why are we competing for rough mornings? :(
  • Varine Varine:
    I don't want to compete for that, yall can have it.
  • Varine Varine:
    @The Helper I'm trying. Once I am more prepared to be figuring out school I'll probably ask for your advice
  • Varine Varine:
    Right now I'm just trying to get through the pandemic and figure out how I'm going to pay for it, and figure out what I need to get a job at Best Buy instead of a kitchen somewhere.
  • thewrongvine thewrongvine:
    oy just catching up on the discussion above. @Varine yeah I usually alternate between claritin & zyrtec, depending on whatever my body decides to reject at the time lol
  • thewrongvine thewrongvine:
    the more I use it the less effective it gets over time as my body accustoms to it so I try to not use it every day
  • S songbird:
    Glad to see some interest in the IS3 NUON reprint. :)
  • The Helper The Helper:
    Thank you Carl for making that happen that just might be the spark we need.
  • Varine Varine:
    I'm confused and amazed that NUON and TWV's news postings are the things still active.
  • Varine Varine:
    Or Tom Mai, not TWV
  • Varine Varine:
    Whatever happened to Cheshire? Or Firecat, whatever his real name was?
  • Varine Varine:
    I've been using both claritin and fexofenadine or something like that recently alternately and that's been kinda working, I don't feel like my face is going to explode at least. Eyes are still itchy as fuck though
  • tom_mai78101 tom_mai78101:
    I dunno, haven't seen Firecat in a long while now.
  • tom_mai78101 tom_mai78101:
    By the way, we have new file attachment size limits now.

    Staff online

    • Ghan
      Administrator - Servers are fun
    • tom_mai78101
      The Helper Connoisseur / Ex-MineCraft Host

    Members online


    Hive Workshop