WIP Back To Footman Empires Project :o

Introduction

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

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).

Stamina

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

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.

Commanders

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

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.
 

Attachments

Races
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.​

Fortresses
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​
JASS:
//! 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

 
From
JASS:
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​
 

Bribe

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

sonofjay

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.
 

Bribe

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
  • No one is chatting at the moment.
  • tom_mai78101 tom_mai78101:
    Labor Day vacation is the best.
    +1
  • tom_mai78101 tom_mai78101:
    Make sure you keep checking out my news..
    +2
  • Jesus4Lyf Jesus4Lyf:
    Man, I made this account 15 years ago? Wild. :)
  • Ghan Ghan:
    Seeing J4L is definitely a blast from the past.
  • Jesus4Lyf Jesus4Lyf:
    Oh hey Ghan! Long time. :)
    +1
  • jonas jonas:
    J4L! What has happened in your life
  • Jesus4Lyf Jesus4Lyf:
    Hmm, how to summarize... Moved to the USA and got married. Became a professional software engineer and solution lead. Learning Godot for game dev. :)
  • jonas jonas:
    So you are pursuing game dev as a hobby? What industry is your dayjob in?
  • jonas jonas:
    FAANG?
  • Jesus4Lyf Jesus4Lyf:
    Not quite FAANG, less pay for a less hours/stress. Yeah, game dev as a hobby.
  • jonas jonas:
    makes sense. Do we have a hobby game dev subforum to showcase some work?
  • Blackveiled Blackveiled:
    Happy Thursday
    +1
  • The Helper The Helper:
    Happy Thursday!
  • The Helper The Helper:
    TGIF!
  • The Helper The Helper:
    hey tom_mai please do not archive anymore news
  • Ghan Ghan:
    AMD Ryzen 7000 next week :D
    +1
  • The Helper The Helper:
    noice!
  • tom_mai78101 tom_mai78101:
    "hey tom_mai please do not archive anymore news" ----> Got it. What should we do with the "News Archive" subforum?
  • The Helper The Helper:
    I think leave it for real old news that cannot be sorted the reason we had it in the first place was a server issue that we do not have anymore. I don't want to get rid of the archive just not put anything in it for now until we figure it out more
  • The Helper The Helper:
    The side chat has nothing on the discord. it is not possible but the biggest thing on my wish list right now is a sidechat channel on the disord that hooks up to this...
  • Ghan Ghan:
    I've been selected for the Diablo IV beta.
    +1
  • Ghan Ghan:
    Woo!
    +1
  • The Helper The Helper:
    that is so cool
  • V-SNES V-SNES:
    Eh just noticed the new discord section on the side. Looks great!

    The Helper Discord

    Staff online

    Members online

    Affiliates

    Hive Workshop NUON Dome World Editor Tutorials

    Network Sponsors

    Apex Steel Pipe - Buys and sells Steel Pipe.
    Top