[The Complete Guide] Create your own Breaking Dead mod(Wave-based Zombies) from scratch

Since April this year, I have learnt a lot from this community. Thank you everyone who taught me how to create mods.

  • I believe it is time for me to contribute here.
  • So here is my first actual guide, which would be updated every time new bugs/features/discoveries appear.

Please refer to the latest post after reading Post 2 (in the far future)

Currently, wave-based zombies are bugged
The community is trying to find a temporary fix
It will be shared here unless the devs fix it 
(which they probably never will)

Sources and useful links:

Open-sourced codes available!


[(Definitely not) Ad] Visit my mod page here

6 Likes

In fact not, you can see it from here
(From previous post)


Step 0 - Basics

1) Where is the mod editor
  • “%userprofile%\AppData\Local\Enlisted\modseditor.bat”
    (Paste it in the address bar of your Windows file explorer and press enter)
    Windows 11 explorer.exe:

2) Recommended programs
  • In this guide, you only need a text editor(i.e. the trusty “notepad.exe”). Nothing really fancy or costly required!
  • However, I recommend using another program when it comes to the codes - it will save your life! (really)
  • The program I used for demonstration: Notepad ++
    image


3) What's scene.blk?

image

  • This is used to store all the objects you placed on the map (their location and their configs)
  • It is located here: "%localappdata%\Enlisted\userGameMods\<modName>\scene.blk"
    (change <modName> to the name of your mod folder)
  • You need to know this because you are required to edit it with text editor in some part of the guide.


4) What in the world is entities.blk??

image

  • It is a plain text file stored in the same folder as your scene.blk

  • It is not created by default, so you should create it now (by creating an empty txt file and change its complete file name to entities.blk)

  • It allows you to modify/override the default values for certain objects (such as certain weapon ammo capacity and bullet damage)

  • It allows you to create custom objects and items (using the game’s resources)

  • It is where 90% of the coding in this guide be in - but do not worry: I will provide adequate examples!

  • Further reading - entities.blk modding

    For anyone’s interest, here is the best guide found in the forum by Bazsi37
    [Guide] Entity Modding (Entites.BLK)


Step 1 - Core Map Setup

1) Create Battle Area

Battle Area


a.k.a. grey zone

  • Go create 2 battle areas for Team 1(Players) and Team 3(Zombies).

AI needs battle area to limit the map, so that navmesh(path-finding mechanism) can be generated.

Image

  • Tip: use box_battle_area and the Scale function to create the areas


2) Placing spawn points

Player Spawns




  • Simple as that! Place respTeam1 for your players to spawn
  • (Use respawnChooser+respTeam1 if you want players to choose where they spawn)
  • Remember to put them in open areas if possible, or remove zombie paratroopers (or else they will land on roofs)
  • DONE!

Zombie Spawns

  • Your job is to place down the zombie_spawn_zone and zombie_tank_spawn_zone anywhere in the map. Preferably map edges, for zombies (and zombie tanks) to spawn
  • Remember to place them inside the team 3 battle area
  • DONE!


3) Weapons, ammo, medkits, etc.
a) Ammunition box and med box

Ammunition box and med box

  • To make your life easier, open up your entities.blk and copy the following there
ammo_box{
  _extends:t="base_fortification_build"
  _use:t="base_fortification_build"
  _use:t="tutorial_ammunition_box_a"
  _use:t="paid_ammo_box_ressuply"
  _use:t="undestroyable_ri_extra"
  useful_box__maxUseCount:i=99999
}
med_box{
  _use:t="tutorial_placed_medic_box_item"
  _use:t="placeable_item_in_world"
  _use:t="base_ri_building"
  _use:t="paid_medkit_box_use"
  _use:t="undestroyable_ri_extra"
  medic_box__isOpen:b=yes
  useful_box__maxUseCount:i=99999
  paid_box__ressuplyCost:i=50
  useful_box__uiPrice:i=50
  team:i=1
  placeable_item__ownerTeam:i=1
  ri_extra__name:t="dummy_wooden_box_a"
  builder_info__team:i=1
}
  • Save the entities.blk and restart your scene to take effect

RESTART_BUTTON

  • Then your life(time) will be saved. Spawn in your ammo boxes and med boxes!

b) Random Weapon Boxes

Random Weapon Boxes

  • It is very simple, just press T and place the entity “random_weapon_box”


For customizing:

  • Edit paid_loot__weapRandomizeWeight and paid_loot__weapTemplates
  • Warning! If you add in weapons without “zombie” in their names, they will have NO starting ammo and CANNOT refill ammo
  • For advanced users, a solution to this will be in the sections below!

c) Wallbuys

Wallbuys


  • Wallbuys are very important when it comes to zombies games (because no one wants to always gamble their lives on the random box)
  1. If you are fine with the weapons used in the event only:
  • Just go to weapon tab in the create entity menu
    and fine the weapons with "zombie_gun_item" in their names(this is important because normal weapons will not have initial ammo and refill with the ammo box)

  • Add template (“+” button in the properties menu) "paid_loot_weapon" and edit the property "paid_loot_cost" (or else it defaults to be 10 points for purchase)

  1. If you are not satisfied with only those guns:
  • Please follow the custom weapon guide below


4) AI Tank objective
  • Place zombie_tank_spawn_zone for tank spawns (skip if you followed guide above)
  • Open its properties and set the field "zombie_tank_spawn_zone__objectiveId" to a unique positive integer (do not repeat the number in other zombie_tank_spawn_zone)



  • Create 1 "custom_ai_tank_objective_position" at the middle of the map and leave the Id to be 0. This will be used for the tank to aim their turrets at when they are idle

  • Then place "custom_ai_tank_objective_position" at desired locations. These will act as the objective that the tank drives to.

  • Now back to zombie_tank_objective


    Don’t get scared by the sheer amount of arrays in here. It is actually simple

  1. Firstly, we deal with "ai_tank_objective__positionIds". Press the “+” sign to create an item


    This array is to give the "custom_ai_tank_objective_position" choices for tanks spawned in zombie_tank_spawn_zone with the same id in "zombie_tank_spawn_zone__objectiveId"
    In the picture, it means that tanks spawn in spawn_zone 1 can either go to position 1, 2, or 3. It is all up to you to choose how many locations to fill in.

  2. Let’s make tanks aim at "custom_ai_tank_objective_position" 0 when they do not have a target


    You just have to press the “+” sign on "ai_tank_objective__aimAtPositionIds" and create as many items as you created in the array we just talked above. (In my case, it is 3.)

  3. "ai_tank_objective__probabilityPerPositionType": Press the “+” once and put in 1.0

  4. ".ai_tank_objective__positionCountsPerType": No idea what this is used for. Just press the “+” once and input the number of "custom_ai_tank_objective_position" in there.

  5. "ai_tank_objective__aimAtPositions" and "ai_tank_objective__positions": Leave empty as they will fill themselves automatically when you have the Ids filled as above.

DONE!



5) Zombie Spawing
  • This is the core for zombie mode. It controls the spawning of zombies
  • Create the entity "zombie_spawn_mode" in mod editor
  • Save the scene and restart the scene
  • To customize and add new zombies, use entities.blk (will discuss below)

6) (VERY IMPORTANT) NEW! - Team 1 Only!
  • As you may know, zombies is a team game - not a PvP game.
    With the new update, it is possible to make all players go into the same team.

  • Add mission_specified_team to solve all your problems!
    mission_specified_team - create entities tab

  • Set it up as seen in the following screenshot!
    image

All it does it make all players join the desired team regardless of which side they have chosen to join the game!


7) (Optional) Misc. Configurations

Here are some configs you might want to do to make your map better

a) Wave Change Sound and Music

Open your scene.blk (Where? Go check Step 0 above), and insert the following code somewhere inside:

entity{
  _template:t="battle_music_with_spawn_waves"
  battle_music__intro:t="events/z/music/z_battle_start"
  battle_music__waveStartPath:t="events/z/music/z_wave_new"
  battle_music__waveEndPath:t="events/z/music/z_wave_end"
}

If you do not want the loud rock-type music to be playing, remove the line battle_music__intro:t="events/z/music/z_battle_start"

b) Zombie Mode Scoreboard, Mission Name, and Loading images

Open your scene.blk (Where? Go check Step 0 above), and insert the following code somewhere inside:

entity{
  _template:t="briefing_zombie_mode"
  mission_name:t=""

  "loading_images:list<t>"{
    item:t="ui/breaking_dead_event_login_screen.avif"
  }
}

  • The scoreboard will change to zombie style scoreboard when _template:t="briefing_zombie_mode" is present in your scene

  • Enter your mission name inside the quotations of the line mission_name:t=""

  • For custom loading images:

  1. Create a picture with 16:9 aspect ratio in .jpg format and name it “thumbnail.jpg”
  2. Put it into your mod folder (together with scene.blk and entities.blk in the same folder)
  3. Change the line item:t="ui/breaking_dead_event_login_screen.avif" to item:t="%ugm/thumbnail.jpg" (Other file names will work, as long as it matches with the one in the path code)

Step 2 - Customization

1) (Important!) Custom Weapons
  • As described above any weapons without "zombie" in their names are not specially made zombie mode weapons - and thus do not have initial ammo and cannot refill ammo from ammo box


    -It will keep saying ammo is full

  • The reason being it lacking a code called gun_with_initial_ammo

  • Therefore, we have to create an entity code for each gun in entities.blk

// Weapon format learnt from @Devenddar and many others at https://forum.enlisted.net/en/t/info-zombies-mode-modding/140229
ak_103_zombie_gun{  // name for new entity
  _use:t="ak_103_gun" // takes code from the original gun

  _use:t="gun_with_initial_ammo" // take code from this template, which allows the gun to have initial ammo

  _use:t="paid_loot_ressuply" // take code from this template, which allows the resupply cost function to work

  item__template:t="ak_103_zombie_gun_item"  // tells the game to link this weapon to the item with this name

  item__weapTemplate:t="ak_103_zombie_gun" // tells the game the name of name of this entity (idk, maybe redundant, but leave it here for good measure)

  paid_loot__ressuplyCost:i=90 // the cost for weapon ammo resupply

}

ak_103_zombie_gun_item{
  _use:t="item_gun" 
  _use:t="ak_103_zombie_gun" // tell the game to use the code we defined above
  collres__res:t="ak_103_collision" // set the collision of the gun (must be correct or else it will refuse to spawn in the world ; copy from the original gun_item)
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6 // how many magazines it has initially
	
    }
  }
}

Codes for weapons in Gavtutu Zombies - Timeline Disorder series:

a) Unknown War weapons
WMG 42 Railgun
railgun_germany_zombie_gun{
  _use:t="railgun_germany_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="railgun_germany_zombie_gun_item"
  item__weapTemplate:t="railgun_germany_zombie_gun"
  paid_loot__ressuplyCost:i=300
  gun__reloadTime:r=2.5
  gun__shotFreq:r=10.0
  "gun__ammoHolders:array"{
      item:t="railgun_magazine"
	}
  "gun__firingModes:array"{
	"mode:object"{
	  modeType:t="burst"
	  burstSize:i=3
	}
	"mode:object"{
	  modeType:t="burst"
	  burstSize:i=1
	}
	}
    "gun__firingModeNames:array"{
	  mode:t="semi_auto_3_shots"
	  mode:t="semi_auto"
    }
}

railgun_germany_zombie_gun_item{
  _use:t="item_gun"
  _use:t="railgun_germany_zombie_gun"
  collres__res:t="gewehr_43_collision"
  
  _group{
    _tags:t="server"
	
    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=2
	
    }
  }
}
railgun_magazine{
  _use:t="infinite_magazine"
  ammo_holder__templateName:t="railgun_magazine"
  ammo_holder__ammoCount:i=30
}
Weltraumgewehr 43 Laser Rifle
blaster_germany_zombie_gun{
  _use:t="blaster_germany_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="blaster_germany_zombie_gun_item"
  item__weapTemplate:t="blaster_germany_zombie_gun"
  paid_loot__ressuplyCost:i=200
  gun__reloadTime:r=1.0
  gun__kineticDamageMult:r=7.5
  "gun__ammoHolders:array"{
		item:t="blaster_magazine"
	}
}

blaster_germany_zombie_gun_item{
  _use:t="item_gun"
  _use:t="blaster_germany_zombie_gun"
  collres__res:t="gewehr_43_collision"
  
  _group{
    _tags:t="server"
	
    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=1
	
    }
  }
}
blaster_magazine{
  _use:t="infinite_magazine"
  ammo_holder__templateName:t="blaster_magazine"
  ammo_holder__ammoCount:i=500
}
WMP 43/1 Incendiary Laser
lightthrower_germany_zombie_gun{
  _use:t="lightthrower_germany_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="lightthrower_germany_zombie_gun_item"
  item__weapTemplate:t="lightthrower_germany_zombie_gun"
  paid_loot__ressuplyCost:i=250
  gun__reloadTime:r=0.2
  gun__kineticDamageMult:r=6.0
  specialAIWeaponType:i=0
  "gun__ammoHolders:array"{
      item:t="lightthrower_magazine"
	}
}

lightthrower_germany_zombie_gun_item{
  _use:t="item_gun"
  _use:t="lightthrower_germany_zombie_gun"
  collres__res:t="gewehr_43_collision"
  
  _group{
    _tags:t="server"
	
    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=1
	
    }
  }
}

lightthrower_magazine{
  _use:t="infinite_magazine"
  ammo_holder__templateName:t="lightthrower_magazine"
  ammo_holder__ammoCount:i=500
}
Plasmafaust 100 Anti-tank Plasma Cannon
plasma_cannon_germany_zombie_gun{
  _use:t="plasma_cannon_germany_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="plasma_cannon_germany_zombie_gun_item"
  item__weapTemplate:t="plasma_cannon_germany_zombie_gun"
  paid_loot__ressuplyCost:i=400
  gun__reloadTime:r=3.0
  specialAIWeaponType:i=0
  _group{
    _tags:t="server"
	
	"gun__ammoHolders:array"{
      item:t="plasma_cannon_magazine"
	}
    }
}

plasma_cannon_germany_zombie_gun_item{
  _use:t="item_gun"
  _use:t="plasma_cannon_germany_zombie_gun"
  collres__res:t="gewehr_43_collision"
  
  _group{
    _tags:t="server"
	"gun__initialAmmoHoldersCount:list<i>"{
      item:i=5
	}
    }
}
plasma_cannon_magazine{
  _use:t="infinite_magazine"
  ammo_holder__templateName:t="plasma_cannon_magazine"
  ammo_holder__ammoCount:i=2
}
Browning XM1918 Laser Machinegun
blaster_auto_usa_zombie_gun{
  _use:t="blaster_auto_usa_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="blaster_auto_usa_zombie_gun_item"
  item__weapTemplate:t="blaster_auto_usa_zombie_gun"
  paid_loot__ressuplyCost:i=150
  gun__kineticDamageMult:r=9.0
  gun__reloadTime:r=2.0
  gun__overheatReduce:r=0.0
  specialAIWeaponType:i=0
  "gun__ammoHolders:array"{
		item:t="blaster_auto_magazine"
	}
  item__name:t="Browning XM1918"
}

blaster_auto_usa_zombie_gun_item{
  _use:t="item_gun"
  _use:t="blaster_auto_usa_zombie_gun"
  collres__res:t="browning_m1918_collision"
  _group{
    _tags:t="server"
	
    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=1
	
    }
  }
}
blaster_auto_magazine{
  _use:t="infinite_magazine"
  ammo_holder__templateName:t="blaster_auto_magazine"
  ammo_holder__ammoCount:i=500
}
b) Modern Conflict
Weapons
hk_ump_45_zombie_gun{
  _use:t="hk_ump_45_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="hk_ump_45_zombie_gun_item"
  item__weapTemplate:t="hk_ump_45_zombie_gun"
  paid_loot__ressuplyCost:i=50
}

hk_ump_45_zombie_gun_item{
  _use:t="item_gun"
  _use:t="hk_ump_45_zombie_gun"
  collres__res:t="hk_ump_45_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=11
	
    }
  }
}

hk_mp5n_zombie_gun{
  _use:t="hk_mp5n_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="hk_mp5n_zombie_gun_item"
  item__weapTemplate:t="hk_mp5n_zombie_gun"
  paid_loot__ressuplyCost:i=75
}

hk_mp5n_zombie_gun_item{
  _use:t="item_gun"
  _use:t="hk_mp5n_zombie_gun"
  collres__res:t="hk_mp5n_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
  }
}

m4_zombie_gun{
  _use:t="m4_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="m4_zombie_gun_item"
  item__weapTemplate:t="m4_zombie_gun"
  paid_loot__ressuplyCost:i=70
  item__name:t="M4A1"
}

m4_zombie_gun_item{
  _use:t="item_gun"
  _use:t="m4_zombie_gun"
  collres__res:t="m4_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
  }
}

barrett_m82a1_zombie_gun{
  _use:t="barrett_m82a1_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="barrett_m82a1_zombie_gun_item"
  item__weapTemplate:t="barrett_m82a1_zombie_gun"
  paid_loot__ressuplyCost:i=200
  "customProps:object"{
    "gunMods:object"{
      scope:t="scope_pulsar_n870"
    }
}
}

barrett_m82a1_zombie_gun_item{
  _use:t="item_gun"
  _use:t="barrett_m82a1_zombie_gun"
  collres__res:t="barrett_m82a1_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
	  "customProps:object"{
    "gunMods:object"{
      scope:t="scope_pulsar_n870"
    }
}
  }
}

ak_103_zombie_gun{
  _use:t="ak_103_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="ak_103_zombie_gun_item"
  item__weapTemplate:t="ak_103_zombie_gun"
  paid_loot__ressuplyCost:i=90
}

ak_103_zombie_gun_item{
  _use:t="item_gun"
  _use:t="ak_103_zombie_gun"
  collres__res:t="ak_103_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
  }
}

fn_scar_zombie_gun{
  _use:t="fn_scar_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="fn_scar_zombie_gun_item"
  item__weapTemplate:t="fn_scar_zombie_gun"
  paid_loot__ressuplyCost:i=60
}

fn_scar_zombie_gun_item{
  _use:t="item_gun"
  _use:t="fn_scar_zombie_gun"
  collres__res:t="fn_scar_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
  }
}

spas_12_zombie_gun{
  _use:t="spas_12_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="spas_12_zombie_gun_item"
  item__weapTemplate:t="spas_12_zombie_gun"
  paid_loot__ressuplyCost:i=50
}

spas_12_zombie_gun_item{
  _use:t="item_gun"
  _use:t="spas_12_zombie_gun"
  collres__res:t="spas_12_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
  }
}

steyr_aug_a1_zombie_gun{
  _use:t="steyr_aug_a1_gun"
  _use:t="gun_with_initial_ammo"
  _use:t="paid_loot_ressuply"
  item__template:t="steyr_aug_a1_zombie_gun_item"
  item__weapTemplate:t="steyr_aug_a1_zombie_gun"
  paid_loot__ressuplyCost:i=60
}

steyr_aug_a1_zombie_gun_item{
  _use:t="item_gun"
  _use:t="steyr_aug_a1_zombie_gun"
  collres__res:t="steyr_aug_a1_collision"
  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=6
	
    }
  }
}
Weapon sound patch
// Modern weapon sound fix originally by @Yopsius at https://forum.enlisted.net/en/t/map-ancient-canyon/148847/21
// Modified and updated by Gamer_Victorch

//hk_ump_45_gun////

hk_ump_45_gun{
_override:b=yes

  _group{
    _tags:t="sound"       
    gun_sound__forceOneshot:b=yes   
  }

  "gun_sound__shotPath:shared:object"{   
    _tags:t="sound"
    path:t="/weapon/mgun/ppsh_41_german"
  }

  "sound_irqs:shared:object"{
    _tags:t="sound"

    "reload1:object"{
      path:t="/weapon/mgun/pps_42/reload1/change_ammo"
    }

    "reload2:object"{
      path:t="/weapon/mgun/yazikov_smg/reload_mag_out"
    }
	
	"reload3:object"{
      path:t="/weapon/mgun/yazikov_smg/reload_mag_in"
    }

    "reload4:object"{
      path:t="/weapon/mgun/yazikov_smg/reload_shutter_in"
    }
  }
}

//hk_mp5n_gun////

hk_mp5n_gun{
_override:b=yes

  _group{
    _tags:t="sound"       
    gun_sound__forceOneshot:b=yes   
  }

  "gun_sound__shotPath:shared:object"{   
    _tags:t="sound"
    path:t="/weapon/mgun/mp18"
  }

  "sound_irqs:shared:object"{
    _tags:t="sound"

    "reload1:object"{
      path:t="/weapon/mgun/pps_42/reload1/change_ammo"
    }

    "reload2:object"{
      path:t="/weapon/mgun/yazikov_smg/reload_mag_out"
    }
	
	"reload3:object"{
      path:t="/weapon/mgun/yazikov_smg/reload_mag_in"
    }

    "reload4:object"{
      path:t="/weapon/mgun/yazikov_smg/reload_shutter_in"
    }
  }
}

//steyr_aug_a1_gun////

steyr_aug_a1_gun{
_override:b=yes

  _group{
    _tags:t="sound"       
    gun_sound__forceOneshot:b=yes   
  }

  "gun_sound__shotPath:shared:object"{   
    _tags:t="sound"
    path:t="/weapon/rifle/berthier_m16"
  }

  "sound_irqs:shared:object"{
    _tags:t="sound"

    "reload1:object"{
      path:t="/weapon/rifle/type_hei_automatic_rifle/reload_mag_shutter_out"
    }

    "reload2:object"{
      path:t="/weapon/rifle/type_hei_automatic_rifle/reload_mag_in"
    }

    "reload3:object"{
      path:t="/weapon/rifle/vstg_1_5/reload3/change_ammo"
    }
  }
}

//fn_scar_gun////

fn_scar_gun{
_override:b=yes

  _group{
    _tags:t="sound"       
    gun_sound__forceOneshot:b=yes   
  }

  "gun_sound__shotPath:shared:object"{   
    _tags:t="sound"
    path:t="/weapon/mgun/lahti_saloranta_m26"
  }

  "sound_irqs:shared:object"{
    _tags:t="sound"

    "reload1:object"{
      path:t="/weapon/rifle/t20_early_rifle/reload_mag_out"
    }

    "reload2:object"{
      path:t="/weapon/rifle/type_hei_automatic_rifle/reload_mag_in"
    }

    "reload3:object"{
      path:t="/weapon/mgun/mp18/reload3/change_ammo"
    }
  }
}

//spas_12_gun////

spas_12_gun{
_override:b=yes

  _group{
    _tags:t="sound"       
    gun_sound__forceOneshot:b=yes   
  }

  "gun_sound__shotPath:shared:object"{   
    _tags:t="sound"
    path:t="/weapon/rifle/ithaca_37"
  }

  "sound_irqs:shared:object"{
    _tags:t="sound"
	
	"boltAction:object"{
      path:t="/weapon/rifle/spas_12/bolt_action"
    }
	
    "reload1:object"{
      path:t="/player/walker/ww2_soldier/foley_mov/common/riffle/aim_on"
    }

    "reload2:object"{
      path:t="/weapon/rifle/browning_auto_5/reload2/change_ammo"
    }
	
	"reload3:object"{
      path:t="/weapon/rifle/spas_12/bolt_action"
    }
  }
}
// /Modern weapons patch
Anti-tank weapons - AI patch
// Shooter zombie weapons' patch
// (Some "special" weapons will take the zombie a lot more time to aim than "normal" ones
panzerfaust_60_zombie_gun{
	_override:b=yes
	specialAIWeaponType:i=0
}
sturmpistole_zombie_gun{
	_override:b=yes
	specialAIWeaponType:i=0
}
//
  • For more details and examples:
    Find entities.blk in the drive folder


2) (Important!) Custom Profile
  • Any zombies mods should have a player profile. (Unless you want uncontrolled building and breaking of the map)
  • There are 2 ways to use a custom profile

a) Calling from the game files

  • It is possible to call the player profiles from the game files directly.
  • The downside is that you need to know the path to each of them, and the profile might be removed by developers in the future

Steps:

  1. Go to your scene.blk and paste the following code
entity{
  _template:t="custom_profile"
  customProfile:t="%enlSqGlob/data/zombie_profile_2.json"
}

b) Make your own profiles

Steps:

  1. Go to your scene.blk and paste the following code
entity{
  _template:t="custom_profile"
  customProfile:t="%enlSqGlob/data/zombie_profile_2.json"
}
  1. Then create your own, or download the following file as a template:
    zombie_profile.json.txt (29.5 KB)
  2. Rename it to zombie_profile.json
  3. Lastly, put the renamed file into the folder with the scene.blk and entities.blk (i.e. your mod folder)
  • Note that after you added the custom_profile entity, you can no longer play test your mod in mod editor because it fails to recognize the file path
    The profile will work once it is on live server, in a custom match

  • Warning: you must have team_usa for the downloaded profile to work properly
    For any cases that you need more tailored made profiles, please ask around in the forums, or send me a private message. I am always eager to help any passionate modders out (as long as I am still around).

For more profiles examples:

Further read - Custom Profiles - Another look (Guide)


3) Custom Zombies

Today, I am here to talk about everyone of them, starting with zombies!

How to give weapons to shooter zombies

  • Copy the following code for entities.blk (explanations included):

Melee zombies:

Uber-Samurai
zombie_katana{
  _use:t="base_zombie_armored_soldier" // uses the code of basic shooter zombies
  killLogName:t="Uber-samurai"  // a text value that is displayed in the kill feedw
  navmesh_phys__maxWalkSpeed:r=20.0
  

  "human_weap__weapTemplates:object"{
    primary:t="" // primary slot
    secondary:t="" // secondary slot
    tertiary:t="" // pistol slot
    melee:t="katana_weapon" // melee slot
    grenade:t="" // grenade launcher slot
  }

  "human_weap__weapInfo:array"{ // for extra info of weapons, such as gun attachments and gun modifications

    "human_weap__weapInfo:object"{}
    "human_weap__weapInfo:object"{}
    "human_weap__weapInfo:object"{}
    "human_weap__weapInfo:object"{}
    "human_weap__weapInfo:object"{}
}

  _group{
    _tags:t="server"

    "human_weap__template_deps_list:list<t>"{
      item:t="katana_weapon"
    }
  }

  "walker_agent__distanceToShootError:shared:array"{ 
// Honestly don't know how to explain, please copy the whole thing for now

    "error:object"{
      distance:r=0.0
      min:p2=0.0, 0.0
      max:p2=0.5, 1.0
      maxEnd:p2=0.0, 0.0
    }

    "error:object"{
      distance:r=25.0
      min:p2=0.5, 0.8
      max:p2=0.5, 1.2
      maxEnd:p2=0.3, 0.5
    }

    "error:object"{
      distance:r=50.0
      min:p2=0.7, 1.3
      max:p2=2.0, 2.0
      maxEnd:p2=1.3, 1.4
    }

    "error:object"{
      distance:r=100.0
      min:p2=0.6, 1.4
      max:p2=2.0, 2.0
      maxEnd:p2=2.0, 2.0
    }
}
}

Zombies with guns:

Uber-Shotgunner
Uber-rifleman


7 Likes

Continue of post 2 (because I apparently hit the word limit :slight_smile: )

4) (Unique guide) Custom AI tanks

Custom AI tanks

  • Whats special about this? Well if you have played my mods, you would see the excessive spam of exclusive zombie AI tanks. You cant see them anywhere else.

  • Let’s check out the codes:

type_95_ha_go_ai_tank_vehicle.txt (3.4 KB)

  • Don’t get overwhelmed by the codes. I will explain them one by one

First part:

type_95_ha_go_ai_vehicle_tank{

  _use:t="ai_vehicle_tank_fixed_objective"
  _use:t="jp_type_95_ha_go_14th_inf_div_peleliu_pacific_battlepass_premium"

  bodyCleanupTime:r=7.5 
  
  paid_loot__pointsForKill:i=100
  vehicle_seats__restrictToTeam:i=3

  "dontCreateNphysObstacle:tag"{
  }

  "zombie:tag"{
  }
  destroyIfNoCrewLeft:b=yes
  _group{
    _tags:t="server"
	ai_vehicle_tank__thinkState:i=1
    ai_vehicle_tank__waitTimesUpdatePath:r=60.0
    ai_vehicle_tank__allowCrewExiting:b=no
    zombie_ai_vehicle_tank__timeToDestroy:r=900.0
    zombie_ai_vehicle_tank__destroyAtTime:r=0.0
    ai_vehicle_tank__ignoreBattleArea:b=yes
  }

"vehicle_seats__seats:shared:array"{

    "seats:object"{
      name:t="main_gunner"
      locName:t="vehicle_seats/gunner"
      attachNode:t="commander"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.02, -0.72, -0.07]]
      seatComponent:t="isGunner"
      nextSeat:t="driver"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="commander"
      cameraNodeName:t="bone_camera_gunner"
      cockpitTemplate:t="jp_type_95_ha_go_gunner_cockpit"
      hatchRotationAxis:p3=1.7, 0.0, 0.0
	  directTurretControl:b=yes
	  
      "turretNames:array"{
        turretNames:t="turret_01"
      }

      "hatchNodes:array"{
        node:t="hatch_01"
        node:t="hatch_02"
      }

      "loaderTurretNames:array"{
        turret:t="turret_01"
      }
    }

    "seats:object"{
      name:t="driver"
      locName:t="vehicle_seats/driver"
      seatOwnsEntityControl:b=yes
      attachNode:t="driver"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.25, 0.0]]
      seatComponent:t="isDriver"
      nextSeat:t="main_gunner"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="driver"
      cameraNodeName:t="bone_camera_driver"
      cameraOffset:p3=0.15, -0.0, -0.0
      cockpitTemplate:t="jp_type_95_ha_go_driver_cockpit"
    }

    "seats:object"{
      name:t="main_gunner"
      locName:t="vehicle_seats/additional_gunner"
      attachNode:t="machine_gunner"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
      seatComponent:t="isGunner"
      nextSeat:t="driver"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="machine_gunner"
      cameraNodeName:t="root"
      cockpitTemplate:t="jp_type_95_ha_go_machinegunner_cockpit"
	  directTurretControl:b=yes

      "turretNames:array"{
        turret:t="turret_02"
      }
    }
  }
}

Long code isn’t it?
Actually, you only need to change the following codes for your own tanks

  • Change this to the tank you want
    _use:t="jp_type_95_ha_go_14th_inf_div_peleliu_pacific_battlepass_premium"

  • Change the array vehicle_seats__seats:shared:array to the tank you want. It can be copied by spawning a normal vehicle to check its code



5) Building hammer

Pay Is it possible to make the engineer's hammer and resources buyables like guns a visit for the magic behind this code

// Engineer's hammer section
// Forum post: https://forum.enlisted.net/en/t/142979/ (Thank you! @Bazsi37 @tommyZZM @Devenddar)

test_building_tool{
  _use:t="melee_weapon"
  builder__shootPressed:b=no
  nextTryToSetObjectInTime:r=-1.0
  autoTryBuildingObjectInterval:r=3.0
  engineerBuildingSpeedMul:r=2.0
  gun__reloadable:b=no
  animchar__res:t="hammer_char"
  item__iconYaw:r=145.0
  item__name:t="items/building_tool"
  meleeSoundType:t="buildingTool"
  _tracked:t="previewEid"

  "item__weapSlots:array"{
    slot:t="melee"
  }

  "buildingTool:tag"{
  }

  "itemInWeaponSlot:tag"{
  }

  "previewEid:eid"{
  }
}

test_building_tool_gun{
  _use:t="test_building_tool"
  _use:t="replicating"
  _tracked:t="gun__owner"
  _replicated:t="gun__owner"
  _replicated:t="currentPreviewId"
  buildingInterval:r=0.0
  nextBuildingAtTime:r=0.0
  additionalBuildingTemplate:t="network_fortification_preview"
  currentPreviewId:i=0
  fortification__rayMatId:i=-1
  fortification__rayMatName:t="engineerRay"
  minBuildingRadius:r=1.5
  animchar__res:t="hammer_char"
  gun__blk:t="content/enlisted/gamedata/weapons/building_tool_gun.blk"
  gun__canAim:b=no
  item__template:t="test_building_tools_item"
  animchar_render__enabled:b=yes
  item__proto:t="content/enlisted/gamedata/weapons/building_tool_gun.blk"
  item__weapTemplate:t="test_building_tool_gun"
  item__iconRoll:r=43.0
  item__iconYaw:r=0.0
  item__iconPitch:r=83.0
  item__name:t="items/hammer"
  item__weapType:t="building_tool"
  item__weight:r=0.5
  melee_weapon__blk:t="content/enlisted/gamedata/weapons/building_tool_gun.blk"
  gun__locName:t="Hammer"
  gun__statName:t="melee"
  gun__reloadable:b=no
  weap__sprintLerpFactor:r=1.0
  melee_weapon__attackAt:r=0.4
  melee_weapon__attackTime:r=1.0

  "item__id:i"{
    value:i=0
    _hide:b=yes
  }

  "gun__owner:eid"{
  }

  "net__notInInitialScope:tag"{
  }

  "previewTemplate:list<t>"{
    template:t="sandbags_wall_2_preview"
    template:t="auto_mg42_preview"
	template:t="builded_auto_turret_preview"
	template:t="sandbags_wall_mg_preview_dev"
    template:t="stationary_ampulomet_preview"	
	template:t="sandbags_wall_dshk_1942_preview"
	template:t="pz3n_preview"
	template:t="custom_antipersonnel_mine_preview"
	template:t="christmas_tree_preview"
    //template:t="ammunition_box_a_preview"
    template:t="czech_hedgehog_a_preview"
    template:t="barbedwire_engineer_a_preview"
    //template:t="cannon_germ_20mm_flak38_preview"
    //template:t="cannon_ussr_towed_at_53k_preview"
    //template:t="cannon_germ_towed_at_pak38_preview"
    
  }

  "buildingLimits:list<i>"{
    limit:i=5
    limit:i=3
	limit:i=1
    limit:i=1
	limit:i=3
	limit:i=1
	limit:i=2
	limit:i=5
    limit:i=10
	limit:i=1
	limit:i=3
  }
}

test_building_tools_item{
  _use:t="item_melee"
  _use:t="test_building_tool_gun"
  collres__res:t="construction_hammer_collision"
  item__userstats__pickupName:t="pickup_building_tool"
}

auto_mg42{
  _override:b=yes
  team:i=1
  auto_gun_controller__targetTeam:i=3
  auto_gun_controller__targetOffset:p3=0, 0, 0
  interactable:b=no
  "ai_target__targetForAiGunner:tag"{
   }
}
auto_mg42_preview{
  _use:t="base_animchar_builder_preview"
  animchar__res:t="mg42_char"
  collres__res:t="mg42_collision"
  instantiateTemplate:t="auto_mg42"
  ri_preview__name:t="ri_auto_mg42"
  buildingSoundTag:t="fortification"
  building_builder__maxTimeToBuild:r=10.0
  building_menu__text:t="Sentry Gun 42"
  building_menu__image:t="machine_gun"
  buildingCost:r=8.0
}
ri_auto_mg42{
  _use:t="game_rendinst_decor"
  ri_extra__name:t="auto_mg42"
}

builded_auto_turret_preview{
  _override:b=yes
  building_builder__maxTimeToBuild:r=20.0
  building_menu__text:t="Laser Sentry Gun"
  building_menu__image:t="assault_rifle"
  buildingCost:r=20.0
}
builded_auto_turret{
  _override:b=yes
  "moveable_obstacle:tag"{
  }
}
builded_sg_gun{
  _override:b=yes
  gun__kineticDamageMult:r=20.0
}
sandbags_wall_mg_preview_dev{
  _override:b=yes
  buildingCost:r=10.0
  building_builder__maxTimeToBuild:r=20.0
}

stationary_ampulomet_preview{
  _use:t="base_animchar_builder_preview"
  animchar__res:t="ampulomet_1941_char"
  collres__res:t="ampulomet_1941_collision"
  instantiateTemplate:t="stationary_ampulomet"
  ri_preview__name:t="ri_stationary_ampulomet"
  buildingSoundTag:t="fortification"
  building_builder__maxTimeToBuild:r=20.0
  building_menu__text:t="Ampulomet"
  building_menu__image:t="building_ampulomet"
  buildingCost:r=15.0
}
ri_stationary_ampulomet{
  _use:t="game_rendinst_decor"
  ri_extra__name:t="stationary_ampulomet"
}

custom_antipersonnel_mine_preview{
  _use:t="base_animchar_builder_preview"
  animchar__res:t="type_3_mine_char"
  collres__res:t="type_3_mine_collision"
  instantiateTemplate:t="jp_custom_antipersonnel_mine+placeable_item_in_world"
  ri_preview__name:t="jp_custom_antipersonnel_mine"
  buildingSoundTag:t="fortification"
  building_builder__maxTimeToBuild:r=3.0
  building_menu__text:t="Anti-personnel Mine"
  building_menu__image:t="killlog/kill_explosion"
  buildingCost:r=1.0
}
base_custom_mine_item_gun{
  _use:t="melee_weapon"
  _use:t="placeable_item"
  _use:t="base_mine_item_gun_sound"
  _use:t="replicating"
  _use:t="base_hitpoints"
  _use:t="base_dm_parts"
  weap__sprintLerpFactor:r=1.0
  animchar__res:t="antitank_mine_char"
  collres__res:t="antitank_mine_collision"
  animchar_render__enabled:b=yes
  item__template:t="base_mine_item_gun"
  item__weapTemplate:t="base_mine_item_gun"
  item__name:t="items/antitank_mine"
  item__weapType:t="mine"
  item__weight:r=0.5
  melee_weapon__blk:t="content/enlisted/gamedata/weapons/building_tool_gun.blk"
  gun__locName:t="antitank_mine"
  gun__reloadable:b=no
  _tracked:t="gun__owner"
  _tracked:t="mine__activated"
  _tracked:t="mine__blockedToTime"
  _replicated:t="gun__owner"
  _replicated:t="mine__activated"
  _replicated:t="mine__blockedToTime"
  mineActivatorTemplate:t="antipersonnel_mine_activator"
  mine_activator__offset:p3=0.0, 0.15, 0.0
  activationRadius:r=1.5
  mine__installBlockTime:r=5.0
  mine__blockedToTime:r=-1.0
  mine__activated:b=no
  nextCheckTriggerAtTime:r=-1.0
  checkTriggerInterval:r=0.1
  material:t="steel"
  needsBlood:b=no
  meleeSoundType:t=""
  hitpoints__hp:r=10.0
  hitpoints__maxHp:r=10.0
  hitpoints__hpRecoverySpd:r=0.0
  hitpoints__hpThreshold:r=0.0
  hitpoints__stoppingPower:r=0.0
  hitpoints__shellDmgMult:r=0.075
  hitpoints__shellSplashDmgMult:r=0.075

  "disableDestroyWithRi:tag"{
  }

  "build_attach__riexHandle:u64"{
    value:i64=-1
    _tags:t="server"
  }

  "item__weapSlots:array"{
    slot:t="special"
  }

  "itemInWeaponSlot:tag"{
  }

  collres{
  }

  "gun__owner:eid"{
  }

  "net__notInInitialScope:tag"{
  }

  "specialWeapItem:tag"{
  }

  "disableMelee:tag"{
  }

  "mine_activation_zone__initEids:list<eid>"{
  }

  "engeneer_mine:tag"{
  }

  "dm_parts__parts:object"{

    "mine_b_collision04:object"{
      dmgMult:r=1.0
      armor:r=0.0
    }

    "mine_b_collision05:object"{
      dmgMult:r=1.0
      armor:r=0.0
    }

    "mine_b_collision06:object"{
      dmgMult:r=1.0
      armor:r=0.0
    }
  }

  "killer:eid"{
  }

  _group{
    ui__geom_node_idx:i=-1
    ui__node_pos:p3=0.0, 0.0, 0.0
    ui__geom_node_name:t="weaponRoot"
    _tags:t="ui"
  }

  "animchar__noUpdateOnDedicated:tag"{
  }
}

custom_antipersonnel_mine_item_gun{
  _use:t="base_custom_mine_item_gun"
  animchar__res:t="sprengmine_35_char"
  collres__res:t="sprengmine_35_collision"
  mineActivatorTemplate:t="antipersonnel_mine_activator"
  melee_weapon__blk:t="content/enlisted/gamedata/weapons/mines/antipersonnel_mine_item_gun.blk"
  gun__locName:t="antipersonnel_mine"
  item__name:t="items/antipersonnel_mine"
  item__template:t="antipersonnel_mine_item_gun"
  item__weapTemplate:t="antipersonnel_mine_item_gun"
  item__mineType:t="antipersonnel_mine"
  item__weight:r=4.0
  activationRadius:r=1.4
  shell_explosion_fx__infoTemplate:t="hit_effect_group_antipersonel_mine_explosion"
  shell__waterImpactFx:t="hit_water_medium_effect"

  "ui__placeableItemMarker:tag"{
    _tags:t="ui"
  }

  "mine_activation__delay:r"{
    _tags:t="server"
    value:r=0.5
  }

  "vehicleTriggerable:tag"{
  }

  "humanTriggerable:tag"{
  }

  "dm_parts__parts:object"{

    "volumeBox_1:object"{
      dmgMult:r=1.0
      armor:r=0.0
    }

    "volumeBox_2:object"{
      dmgMult:r=1.0
      armor:r=0.0
    }
  }
}

jp_custom_antipersonnel_mine{
  _use:t="custom_antipersonnel_mine_item_gun"
  animchar__res:t="type_3_mine_char"
  collres__res:t="type_3_mine_collision"
  melee_weapon__blk:t="content/enlisted/gamedata/weapons/mines/jp_antipersonnel_mine.blk"
  item__template:t="jp_antipersonnel_mine"
  item__weapTemplate:t="jp_antipersonnel_mine"
  placeable_item__additionalHeight:r=0.015
  item__weight:r=4.0

  "dm_parts__parts:object"{

    "volumebox_01:object"{
      dmgMult:r=1.0
      armor:r=0.0
    }
  }
  team:i=1
  placeable_item__ownerTeam:i=1
}

custom_ampulomet_preview{
  _use:t="stationary_ampulomet_preview"
  instantiateTemplate:t="custom_stationary_ampulomet"
}
custom_stationary_ampulomet{
  _use:t="stationary_ampulomet"
  "gun__shells:array"{
    gun__shells:t="gamedata/gen/weapons/shells/type_2_grenade_discharger_shell.blk"
  }
}
//Pz3N
pz3n_preview{
  _use:t="base_animchar_builder_preview"
  animchar__res:t="pzkpfw_III_ausf_N_char"
  collres__res:t="pzkpfw_III_ausf_N_collision"
  instantiateTemplate:t="germ_pzkpfw_III_ausf_N_ai_vehicle_tank_defense"
  avaliableAngles:p2=-30.0, 30.0
  buildingSoundTag:t="cannon"
  building_menu__text:t="Panzer III N"
  building_menu__image:t="map_icon_tank"
  building_builder__maxTimeToBuild:r=5.0
  building_builder__maxUnderwaterDistance:r=0.5
  requiredSpaceAboveObjectOffset:r=0.5
  requiredSpaceAboveObject:r=1.0
  buildingDistance:r=2.0
  buildingCost:r=5.0
  savePreviewTeam:b=yes
}

germ_pzkpfw_III_ausf_N_ai_vehicle_tank_defense{
  _use:t="ai_aircraft_crew_ger"
  ai_aircraft_crew__soldier_template:t="zombie_ai_vehicle_tank_crew_member"
  _use:t="ai_vehicle_tank_fixed_objective"
  _use:t="germ_pzkpfw_III_ausf_N_tunis_premium"
  
  cockpit__sightFov:r=360.0
  bodyCleanupTime:r=10.0 
 
  vehicle_seats__restrictToTeam:i=1

  "dontCreateNphysObstacle:tag"{
  }

  
  destroyIfNoCrewLeft:b=yes
  
  _group{
    _tags:t="server"
    ai_vehicle_tank__allowCrewExiting:b=no
    zombie_ai_vehicle_tank__timeToDestroy:r=900.0
    zombie_ai_vehicle_tank__destroyAtTime:r=0.0
    ai_vehicle_tank__ignoreBattleArea:b=yes
  }

"vehicle_seats__seats:shared:array"{
    "seats:object"{
      name:t="driver"
      locName:t="vehicle_seats/driver"
      seatOwnsEntityControl:b=yes
      attachNode:t="driver"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.25, 0.0]]
      seatComponent:t="isDriver"
      nextSeat:t="main_gunner"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="driver"
      //cameraNodeName:t="bone_camera_driver"
      //cameraOffset:p3=0.15, -0.0, -0.0
      //cockpitTemplate:t="germ_pzkpfw_III_ausf_N_driver_cockpit"
    }
    "seats:object"{
	  directTurretControl:b=yes
      name:t="main_gunner"
      locName:t="vehicle_seats/gunner"
      attachNode:t="gunner"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
      seatComponent:t="isGunner"
      nextSeat:t="driver"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="gunner"
      //cameraNodeName:t="bone_camera_gunner"
      //cockpitTemplate:t="germ_pzkpfw_III_ausf_N_gunner_cockpit"

      "turretNames:array"{
        turret:t="turret_01"
		turret:t="turret_02"
      }
    }

    

    "seats:object"{
	  directTurretControl:b=yes
      name:t="commander"
      locName:t="vehicle_seats/commander"
      attachNode:t="commander"
      shouldHideOwner:b=yes
      maxPosWithOpenHatch:r=1.2
      hatchRotationAxis:p3=1.7, 0.0, 0.0
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.1, -0.4, 0.05]]
      seatComponent:t="isDriver"
      receiveDamageFromDMPart:t="commander"
      //cameraNodeName:t="bone_turret"
      //cockpitTemplate:t="germ_pzkpfw_III_ausf_N_commander_cockpit"

      "hatchNodes:array"{
        node:t="hatch_01"
      }

      "turretNames:array"{
        turret:t="turret_03"
      }
    }
	
	"seats:object"{
      attachNode:t="loader"
      locName:t="vehicle_seats/loader"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
      seatComponent:t="isPassenger"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="loader"
      cameraNodeName:t="bone_camera_driver"

      "loaderTurretNames:array"{
        turret:t="turret_01"
      }
    }

    "seats:object"{
	  directTurretControl:b=yes
      name:t="main_gunner"
      locName:t="vehicle_seats/radioman"
      attachNode:t="machine_gunner"
      ignoreAttachNodeRotation:b=yes
      attachTm:m=[[1.0, 0.0, 0.0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0] [-0.25, -0.5, 0.0]]
      seatComponent:t="isPassenger"
      nextSeat:t="driver"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="machine_gunner"
    }

    
    }
}


pzkpfw_iii_ausf_n_turret_01_75mm_kwk37{
  _override:b=yes

  _group{
    _tags:t="server"
    tank_turret_ai__maxBurstCount:i=0
	tank_turret_ai__burstCount:i=3
	tank_turret_ai__burstWaitTime:r=1.0
	tank_turret_ai__dmTargetUpdateInterval:r=1.0
	tank_turret_ai__nextTargetCheckAtTime:r=1.0
	tank_turret_ai__targetCheckInterval:r=1.0
    tank_turret_ai__longPauseWaitTime:r=1.0
    tank_turret_ai__attackDist:r=100.0
	turret_ai__atackDist:r=100.0
	"gun__shellsAmmo:array"{
    gun__shellsAmmo:i=0
	gun__shellsAmmo:i=1000
  }

  "gun__shells:array"{
    gun__shells:t="gamedata/gen/weapons/shells/75mm_kwk37_75mm_ger_kwk40_37_he.blk"
  }
  "ammo_set__shellIds:list<i>"{
    item:i=1
  }
  }
  turret__yawSpeed:r=200.0
  turret__pitchSpeed:r=200.0
  
}
pzkpfw_iii_ausf_n_turret_02_7_92mm_mg34{
  _override:b=yes

  _group{
    _tags:t="server"
    tank_turret_ai__maxBurstCount:i=150
    tank_turret_ai__longPauseWaitTime:r=1.0
    tank_turret_ai__attackDist:r=100.0
  }
}

pzkpfw_iii_ausf_n_turret_03_7_92mm_mg34{
  _override:b=yes
  _group{
    _tags:t="server"
    tank_turret_ai__maxBurstCount:i=150
    tank_turret_ai__longPauseWaitTime:r=1.0
    tank_turret_ai__attackDist:r=100.0
  }
  turret__yawSpeed:r=500.0
  turret__pitchSpeed:r=500.0
  "gun__shellsAmmo:array"{
    gun__shellsAmmo:i=100000
  }

  "gun__shells:array"{
    gun__shells:t="gamedata/gen/weapons/shells/7_92mm_mg34_defaultset_bullet_1.blk"
  }
}


6) Zombie location on minimap

Firstly, copy the following codes to your entities.blk:
(This creates custom decorations that can be attached to anything)

Spoiler - Code
// With thanks to Bazsi37 for providing to me
team1_marker{
  _use:t="custom_marker" // the magic trick here is make use of custom_marker
  _use:t="base_vehicle_decor" // load codes for decor
  animchar__res:t="sandbag_single_decor_a_char" // place holder for decor
  collres__res:t="sandbag_single_decor_a_collision"
  custom_marker__icon:t="!ui/skin#v_arrow.svg" //icon inside uiskin.vromfs.bin
  custom_marker__iconColor:c=167,55,75,255
  custom_marker__iconSize:p2=10.0,10.0
  custom_marker__showForTeam:i=1
  animchar_render__enabled:b=no //make the "sandbag" invisible
}
// for team 2
team2_marker{
  _use:t="custom_marker"
  _use:t="base_vehicle_decor"
  animchar__res:t="sandbag_single_decor_a_char"
  collres__res:t="sandbag_single_decor_a_collision"
  custom_marker__icon:t="!ui/skin#v_arrow.svg" //icon inside uiskin.vromfs.bin
  custom_marker__iconColor:c=167,55,75,255
  custom_marker__iconSize:p2=10.0,10.0
  custom_marker__showForTeam:i=2
  animchar_render__enabled:b=no
}

Then copy and paste the following to the entities.blk:

Spoiler - Code
nzombie_base{
  _override:b=yes
  bodyCleanupTime:r=10.0
   "attach_decorators__entities:list<eid>"{ 
  }
   "attach_decorators__templates:array"{
    "attach_decorators__templates:object"{
      relativeTm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0,0,0]]
      template:t="team1_marker"
      nodeName:t="Bip01 Head"
    }
	"attach_decorators__templates:object"{
      relativeTm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0,0,0]]
      template:t="team2_marker"
      nodeName:t="Bip01 Head"
    } 
}
base_zombie_armored_soldier{
  _override:b=yes
  bodyCleanupTime:r=10.0
  "attach_decorators__entities:list<eid>"{ 
  }

  "attach_decorators__templates:array"{
    "attach_decorators__templates:object"{
      relativeTm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0,0,0]]
      template:t="team1_marker"
      nodeName:t="Bip01 Head"
    } 
	"attach_decorators__templates:object"{
      relativeTm:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [0,0,0]]
      template:t="team2_marker"
      nodeName:t="Bip01 Head"
    }
}
}


7) Charge Attack with Knife
  • Simple codes as follows
Spoiler - Code
// With thanks to Bazsi37
knife_weapon{
  _override:b=yes
  _extends:t="melee_weapon"
  _extends:t="knife"
  meleeSoundType:t="knife"
  meleeActionSoundPath:t="impact/knife"
   "meleeChargeWeapon:tag"{
  }
}


8) Make players killable (reduce server lag)
enlisted_visible_base_soldier{
  _override:b=yes
  _use:t="zombie_mode_soldier" //get the code from "zombie_mode_soldier", which makes revive without medkit possible
  paid_loot__points:i=200  //spawn with points (default was 0)
  hitpoints__downedKillChanceMult:r=0.0 //make sure you cannot die when fatal damage is taken
  hitpoints__downedTimer:r=120.0  //how much time you can spend in downed state before dying
  hitpoints__alwaysDowned:b=no  //when set to yes, you cannot die while downed.
  hitpoints__deathHpThreshold:r=-100000.0 //HP amount when downed (negative number)
  hitpoints__downedKillChanceBase:r=0.0 //chance of getting killed instead of getting downed when receiving damage greater than current HP
  hitpoints__killDownedByMeleeHit:b=no //can be killed by melee hit when downed 
  hitpoints__downedKillWhenBurning:b=no // can be killed by fire damage when downed
  bodyCleanupTime:r=30.0 //time it takes to remove corpses
  human_inventory__canSelfRevive:b=no //set to yes to allow self revive
}

// Codes below is to revert the changes done above
base_zombie_armored_soldier{
  _override:b=yes
  bodyCleanupTime:r=10.0
  paid_loot__pointsForKill:i=35
  hitpoints__deathHpThreshold:r=-10.0
  hitpoints__downedKillChanceBase:r=0.2
  hitpoints__alwaysAllowRevive:b=no
  hitpoints__downedKillWhenBurning:b=yes
  hitpoints__killDownedByMeleeHit:b=yes
  paid_loot__pointsPerDamage:r=0.3
}

(Work in progress - ~80%! TANK GUIDE ADDED!)
The recent Earth Shield update brought many interest features to the game, but also cooked wave-based zombies.
!!! A fix for the current wave-based zombies will be shared here soon!!!
I will also introduce new stuff here after I have digest them

3 Likes

Step 3 - Upload your mod!

1) Pack your mod

See picture below


A command prompt (cmd.exe) window would pop up and you should see it packs your mod into a zip



2) Upload your mod
  1. Now open your web browser and go to this page
  2. Login if you haven’t
  3. Click on the ADD button, and then Game mod
  4. Upload your mod here with the button shown below
  • Your mod is located in “%localappdata%\Enlisted\userGameMods\” as a .zip file
  • Copy the address above to your File Explorer to navigate to the folder
  1. Set a title and an image for your mod (if you have not made a photo as cover, you can use the draft button to make your mod release privately)
  2. Set the correct campaign and make sure this check box is left ON
    image
  3. You can post your mod after you have written something to describe it!

#############################################

  • Use the Save Draft button if you are uploading a test map
    image


3) Launch your mission
  • It hasn’t changed in anyway. So I would just quote him on that.

1 Like

i want the original earth shield, not ur modded one (if it is that is), so can u give me the scene.blk pls

1 Like

Firstly, this post is for breaking dead, not earth shield

Secondly, the scenes can be found in the datamine here: Enlisted Datamine (Resource) - #50 by Bazsi37
I wont upload it here(because I don’t want to trigger the moderators) but i will give you a hint to find them, the files are named “berlin_chancellery_halloween.blkx”, “normandy_factory_halloween.blkx”, “pacific_new_georgia_caves_halloween.blkx”, “rzhev_city_halloween.blkx”, “tunisia_oasis_halloween.blkx”

Scenes are perfectly safe to upload.

1 Like

Ok I see, then here
halloween_scenes (original).zip (38.3 KB)
All 5 are inside the one zip
@MorNloR have you been using it?

I followed the instructions about the custom profiles as stated, didn’t change any of the writing, and i keep getting this error. Besides this it doesn’t state anything else.
image
image
image

1 Like

“Armies is empty” (Nice grammar btw devs)
I haven’t seen it before.
Did you see this error from mod editor or live server (i.e. launched the mod with in game custom mod option after uploading to sandbox.enlisted.net)?
Did you create team_usa+respawn_creators_team for team 1? If not, the above error will occur if you use it

I tested in within the modeditor

The map i made was made to have Germany defend, so everything is set to team 2. But if it only works on team 1, i can change it back, and remake the custom profiles to have german soldiers instead. But i did not add that in, where should i add that?

As stated here, you need to upload it to sandbox for any custom profile to work

However, you also need to make a team_usa
(I just added a warning message. Thank you for reminding me to state that)

So what you need for now, is creating team_usa and make its team__id to 2

But wait, i thought the profile has germany as well.

What team entities are you using? Are you using something like tunisia_axis or something?

In editor, if you see this error message, then it should be correct
image

I have added this, and right now in client the German side just crashes, and forces you back into the lobby, and the US side does get in the game, but can’t choose any squads, and is just stuck on that menu

I haven’t used any team entities before for this map honestly. As the map worked with it before, just had to find ways for players to forcefully get rid of their weapons (high ressupply costs)

This is now the message i am recieving. So atleast that part is correct

@test_Foxy If you are not going to make edits to the custom profile, replace your custom_profile entity with this

entity{
  _template:t="custom_profile"
  customProfile:t="%enlSqGlob/data/zombie_profile_2.json"
}

This allows you to also test in the mod editor like you can in the live server

@test_Foxy please also read this newly updated part of the guide. It helps you a lot

I have added this, and the custom profile now works in the editor. At some point i want to make it custom, and maybe add a few (cosmetical) options to choose from at some point.

Right now the client version doesn’t work. I will change everything to team 1, as you describe there, and let you know if that is gonna work

I am confused why it doesn’t work for team 2 though. I mean if you change the team__id to 2 in team_usa then it should work - you just need team_usa to work, not the team id

Whatever, lets investigate it later

I changed the custom profile back to

entity{
_template:t=“custom_profile”
customProfile:t=“%enlSqGlob/data/zombie_profile.json”
}

To see if that would help solve the issue on the client side. But same with this i keep getting the message ‘‘connection refused’’ That is very odd. And the same stuff that happened before when i tried it myself

1 Like

Ok now would you trust me, and send me your map to me to debug?
Thats the only way we are going to find out whats wrong
Send it in private message by the way, not here of course

If you see this error in editor after restart then it’s okay, because we can’t see custom profiles in editor. Else you probably set wrong campaign preset in sandbox portal or wrong armies on your map. IIRC zombie_profile is outdated and have some problems:

  • Armies still uses campaigns (normandy_allies instead usa).
  • Soldiers guid still contains text.

image
This is how i have set it up on the portal. In the editor the profile works just fine. But whenever i start it up in the client, it just keeps getting a connection error when the custom profile is active.