[Open-Sourced Development] Gavutu Zombies: Timeline Disorder - Learn how to create missions here together

Mod codes available here:
https://drive.google.com/drive/folders/1GTnnd2JyxXENfXEXGyxC36x-MUOVqWk7?usp=drive_link

Original post:
So i have basic knowledge of making a zombies map. Like how to set up my spawns and edit the types of zombies spawning in each round thanks to everyone in this post

However, I am lacking the ability to create custom tanks and zombies. I would like to ask about the tank problem first because i saw this post and its now dead silence.
I would like to make like a Ta-Se tank spawn on wave 5 ,a Ha-Go spawn on wave 10, and Chi-Ha on wave 13 (because paratroopers doesn’t work well).
All the tanks have like 3/4 crew and different crew names and placements.
The post above wont work well so I want to ask here

1 Like

because apparently we missed a single tag.

the conversion of a tank into AI one is relatively simple too.

what you want to do is:

soviet_ai_vehicle_tank{
  _use:t="ai_vehicle_tank_no_objective"
  _use:t="ussr_t_34_1941_common"
  _use:t="ai_aircraft_crew_ger"

  paid_loot__pointsForKill:i=500
  vehicle_seats__restrictToTeam:i=3
  ai_aircraft_crew__soldier_template:t="zombie_ai_vehicle_tank_crew_member"

  "dontCreateNphysObstacle:tag"{
  }

  "zombie:tag"{
  }

  _group{
    _tags:t="server"
    ai_vehicle_tank__pathFindingState:i=1
    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"
      cockpitTemplate:t="ussr_t_34_1941_driver_cockpit"
    }

    "seats:object"{
      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="ussr_t_34_1941_gunner_cockpit"
      directTurretControl:b=yes

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

    "seats:object"{
      name:t="commander"
      attachNode:t="loader"
      shouldHideOwner:b=yes
      maxPosWithOpenHatch:r=1.2
      locName:t="vehicle_seats/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.15, -0.35, 0.15]]
      seatComponent:t="isDriver"
      receiveDamageFromDMPart:t="loader"
      cockpitTemplate:t="ussr_t_34_1941_commander_cockpit"

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

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

    "seats:object"{
      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"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="machine_gunner"
    }
  }
}

ussr_t_34_1941_common{
  _override:b=yes

  gunner_cam_limit__useCockpitDir:b=yes
  commanderCockpitFpsCamMaxAngle:p2=40.0, 5.0
}

t_34_1941_turret_01_76mm_f34{
  _override:b=yes

  _group{
    _tags:t="server"
    tank_turret_ai__maxBurstCount:i=0
    tank_turret_ai__longPauseWaitTime:r=0.0
    tank_turret_ai__attackDist:r=40.0
  }
}

first, you want to create the ai vehicle tank base.

/ you can pretty much copy the whole code.

you’ll just have to change the " ussr_t_34_1941_common " with the vehicle that you want,

change the seats objects from the tank in question that you want to change from the blks. ( do not forget to put " directTurretControl:b=yes " underneath the gunner seat )

and change the weapon/turret it self, ( from the ex, t_34_1941_turret_01_76mm_f34 ) with the one of the right tank to make sure it can be used by AI. you can find them over the editor by going in the all category and type the name of your tank.
usually, it’s the turret_01.

you will also need to place tank path / objective in your map like the example from the unded break event.
be mindful that they will not be very precise. so try to place them in open fields. as the pathfinding is a nightmare.

and lastly, you’ll have to go over the entities blk and add the name of the base tank that you made over the waves.

i will leave you the uncripted code blk to do the conversion your self:

jp_type_98_ta_se.blk.txt (4.5 KB)
type_95_ha_go.blk.txt (6.1 KB)
jp_type_97_chi_ha.blkx.txt (4.9 KB)

just keep in mind that, AI will not use coax or any machineguns.
and once again, pathfinding might not be suited for houses and what not.

3 Likes

This is sad but its still better than having no AI tank. Thank you for answering. This will take me hours to convert but your answer definitely saved me days of exploration.
I will upload those stuff and working, in order to let others know how to use them in their own maps.
I will also upload the source codes of my maps as well (once it is out, lol, my school’s yearly exam will make me pause on it very soon)

as usual,

gotta thank @Devenddar . one of the fifth man/pillar that keeps the modding community running and alive.
technically only four remains. since one left. but still.

1 Like

Yes of course, my first map wont be made and i wont be in this community if @Devenddar did not help me.

Btw, i noticed an odd issue. I tried putting a lot of tanks in wave 1 (like 100) but only 4 of them spawned. It does not matter if the number is 5. Only 4 spawned. And they all spawn on the same spawn.

I have no idea if i have done anything wrong, but it did not happen on my last map when i followed your instructions to set the spawns and objectives. This time though, i made 6 objectives and i want the tanks to go to them randomly If anyone have time, please see the code if i have messed anything up.

entity{
  _template:t="zombie_tank_spawn_zone"
  transform:m=[[-0.969167, 0, -0.246406] [0, 1, 0] [0.246406, 0, -0.969167] [467.455, 4.60077, -376.325]]
  zombie_tank_spawn_zone__objectiveId:i=2
  zombie_tank_spawn_zone__curPositionIdx:i=1
}

entity{
  _template:t="zombie_tank_spawn_zone"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [349.64, 2.3078, -410.627]]
  zombie_tank_spawn_zone__objectiveId:i=2
  zombie_tank_spawn_zone__curPositionIdx:i=2
}

entity{
  _template:t="zombie_tank_spawn_zone"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [435.142, 1.59164, -446.646]]
  zombie_tank_spawn_zone__objectiveId:i=2
  zombie_tank_spawn_zone__curPositionIdx:i=3
}

entity{
  _template:t="zombie_tank_objective"
  zombie_tank_objective__id:i=1

  "ai_tank_objective__aimAtPositionIds:list<i>"{
    item:i=1
    item:i=2
    item:i=3
    item:i=4
    item:i=5
    item:i=6
  }

  "ai_tank_objective__aimAtPositions:list<p3>"{}
  "ai_tank_objective__probabilityPerPositionType:list<r>"{
    item:r=1
    item:r=1
    item:r=1
    item:r=1
    item:r=1
    item:r=1
  }

  "ai_tank_objective__positions:list<p3>"{}
  "ai_tank_objective__positionIds:list<i>"{
    item:i=1
    item:i=2
    item:i=3
    item:i=4
    item:i=5
    item:i=6
  }

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

entity{
  _template:t="zombie_tank_objective"
  zombie_tank_objective__id:i=2

  "ai_tank_objective__aimAtPositionIds:list<i>"{
    item:i=1
    item:i=2
    item:i=3
    item:i=4
    item:i=5
    item:i=6
  }

  "ai_tank_objective__aimAtPositions:list<p3>"{}
  "ai_tank_objective__probabilityPerPositionType:list<r>"{
    item:r=1
    item:r=1
    item:r=1
    item:r=1
    item:r=1
    item:r=1
  }

  "ai_tank_objective__positions:list<p3>"{}
  "ai_tank_objective__positionCountsPerType:list<i>"{
    item:i=6
  }

  "ai_tank_objective__positionIds:list<i>"{
    item:i=1
    item:i=2
    item:i=3
    item:i=4
    item:i=5
    item:i=6
  }
}

entity{
  _template:t="zombie_tank_objective"
  zombie_tank_objective__id:i=3

  "ai_tank_objective__aimAtPositionIds:list<i>"{
    item:i=1
    item:i=2
    item:i=3
    item:i=4
    item:i=5
    item:i=6
  }

  "ai_tank_objective__probabilityPerPositionType:list<r>"{
    item:r=1
    item:r=1
    item:r=1
    item:r=1
    item:r=1
    item:r=1
  }

  "ai_tank_objective__positions:list<p3>"{}
  "ai_tank_objective__positionIds:list<i>"{
    item:i=1
    item:i=2
    item:i=3
    item:i=4
    item:i=5
    item:i=6
  }

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

  "ai_tank_objective__aimAtPositions:list<p3>"{}
}

entity{
  _template:t="custom_ai_tank_objective_position"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [399.653, 1.17963, -365.032]]
  ai_tank_objective__positionId:i=1
}

entity{
  _template:t="custom_ai_tank_objective_position"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [400.772, 1.17963, -349.612]]
  ai_tank_objective__positionId:i=2
}

entity{
  _template:t="custom_ai_tank_objective_position"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [384.084, 1.17963, -362.141]]
  ai_tank_objective__positionId:i=3
}

entity{
  _template:t="custom_ai_tank_objective_position"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [400.492, 1.17963, -371.876]]
  ai_tank_objective__positionId:i=4
}

entity{
  _template:t="custom_ai_tank_objective_position"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [396.52, 1.17963, -336.031]]
  ai_tank_objective__positionId:i=5
}

entity{
  _template:t="custom_ai_tank_objective_position"
  transform:m=[[1, 0, 0] [0, 1, 0] [0, 0, 1] [382.796, 1.17963, -339.474]]
  ai_tank_objective__positionId:i=6
}
1 Like

yep.

sorry. can’t really help you there as i don’t deal with zombie stuff my self.

i only found out through devenddar that AI tanks are through zombies.

good luck in your endevours.
( i suggest to wait the man him self to answer )

1 Like

yep thank you for helping me so much today. wish you have a great day

Why?

Here is seats code for jap_type_95_ha_go tank:

  "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

      "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"

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

You will need add directTurretControl:b=yes in gunner seat code.

Just don’t add one of seats.

Unique soldiers names in killlog?

Probably some limit for each wave. Seems it can have only 4 tanks.

I’m not sure, but you edited all properties. Personally I didn’t touch some of them. You can click to property and then click to R to reset it.
image
I didn’t touch…

  • zombie_tank_spawn_zone__curPositionIdx property in zombie_tank_spawn_zone entity.
  • ai_tank_objective__aimAtPositions property in zombie_tank_objective.
  • ai_tank_objective__positions property in same entity.

Also all your spawn point uses same id for objective. So they have only one unique objective.

1 Like

Because in my first map and the map i am working on, there are roofs. And paratroopers just land on roofa and stuck there. So i jist remove them. The new type of zombies i will add is going to be enough to replace the paratroopers

Ok i go try them out later today. Thank you for taking your time with the ha-go code too. Many thanks!

The ha-go mg wont work right? Its like a spg turret so i assume we cant make it work.
But btw i have a suggestion, what if its m3 lee. The m3 lee has an mg turret. You can try if it works because its not needed in my map

By default they use team 1 respawn points. You can make them use team 4 respawn point and put around map human respawn points with team 4.

I don’t know. Would be nice if you test it. Don’t forgot to edit turrets…


added the code

directTurretControl:b=yes

the machine gunner as well to test if it works. I doubt it since the MG works like SPGs and you guys mentioned that it refuses to move.

1 Like

Wait


its a spawner so its not like i can paste the name of the tank and it will work right?

Edit: yep it doesn’t. It would be too easy if that worked lol
Code is here. Btw, should “type_95_ha_go_ai_vehicle_tank” appear in the “create entity” tabs?
Edit #2: It appeared. I just blind all the time. So worry on the problem of how to spawn the tank with zombie_spawn_mode

type_95_ha_go_ai_vehicle_tank{
  _use:t="ai_vehicle_tank_no_objective"
  _use:t="jp_type_95_ha_go_common"
  _use:t="ai_aircraft_crew_ger"

  paid_loot__pointsForKill:i=500
  vehicle_seats__restrictToTeam:i=3
  ai_aircraft_crew__soldier_template:t="zombie_ai_vehicle_tank_crew_member"

  "dontCreateNphysObstacle:tag"{
  }

  "zombie:tag"{
  }

  _group{
    _tags:t="server"
    ai_vehicle_tank__pathFindingState:i=1
    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"
      }
    }
  }

    "seats:object"{
      name:t="commander"
      attachNode:t="loader"
      shouldHideOwner:b=yes
      maxPosWithOpenHatch:r=1.2
      locName:t="vehicle_seats/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.15, -0.35, 0.15]]
      seatComponent:t="isDriver"
      receiveDamageFromDMPart:t="loader"
      cockpitTemplate:t="jp_type_95_ha_go_commander_cockpit"

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

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

    "seats:object"{
      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"
      shouldHideOwner:b=yes
      receiveDamageFromDMPart:t="machine_gunner"
    }
  }


jp_type_95_ha_go_common{
  _override:b=yes

  gunner_cam_limit__useCockpitDir:b=yes
  commanderCockpitFpsCamMaxAngle:p2=40.0, 5.0
}

type_95_ha_go_turret_01_37mm_type_94{
  _override:b=yes

  _group{
    _tags:t="server"
    tank_turret_ai__maxBurstCount:i=0
    tank_turret_ai__longPauseWaitTime:r=0.0
    tank_turret_ai__attackDist:r=40.0
  }
}

type_95_ha_go_turret_02_7_7mm_type_97{
  _override:b=yes

  _group{
    _tags:t="server"
    tank_turret_ai__maxBurstCount:i=0
    tank_turret_ai__longPauseWaitTime:r=0.0
    tank_turret_ai__attackDist:r=80.0
  }
}
1 Like

ok i have added this:

zombie_ai_vehicle_tank_ha_go_spawner{
  isAlive:b=yes
  zombie_ai_vehicle_tank_spawner__spawnCrewDelay:r=2.0
  zombie_ai_vehicle_tank_spawner__tankEid:i=0
  zombie_ai_vehicle_tank_spawner__template:t="type_95_ha_go_ai_vehicle_tank"
}

this is copied from the zombie_ai_vehicle_tank_spawner template i found in the editor and i used my custom tank to replace the “zombie_ai_vehicle_tank”

but it still doesn’t work. It is not even giving any errors too. It just spawned nothing and the wave progresses
and also a non-fatal error occurs

1 Like

Yes.

This means that you have the wrong data type in properties. And it’s probably in zombie_ai_vehicle_tank_spawner__tankEid. It’s not really integer, but looks like it.

"zombie_ai_vehicle_tank_spawner__tankEid:eid"{
}

Also… You can use original entity. Just edit zombie_ai_vehicle_tank_spawner__template. So… Code will be like:

zombie_ai_vehicle_tank_ha_go_spawner{
  _use:t="zombie_ai_vehicle_tank_spawner"
  zombie_ai_vehicle_tank_spawner__template:t="type_95_ha_go_ai_vehicle_tank"
}

Line with _use allows you use all properties from another entity.

1 Like

It gave a red error saying the parent template is broken when i tried use that myself so i copied everything instead

Any screenshots? Would be nice to see what you wrote in entities.blk.

nevermind it doesn’t. I have done sth wrong earlier
However, it still doesn’t spawn anything. It goes straight to next round
i am currently inside an enlisted battle, playing the event, so need some time before answering

Weird. Maybe you did mistake somewhere. Also… It seems limit doesn’t work on custom tanks.


But… Better to not use many tanks in not small maps… Because it so laggy and so many loggers.

i know about the lag so i wont put too many but i am so confused by why it does not spawn