Must have basic decent coding skills and must know how to change matIds of meshes and code the damage system. Locations of posted code is inferred and common sense on where to put it must be made.
Note: This is a very lengthy tutorial! Be warned! It is designed for the more coding challenged folks out there! So more experienced coders can probably skip most of my lengthy explanations
Begin Tutorial:
Ever since the 1.3 update or so (don't know exactly what version) of the game, projectiles no longer exploded on soldiers using the proximity code. So we were left out in the cold in terms of AP Mines. People have come up a simple method of making the AP Mine a PCO and adding death bubbles to soldier kit parts. But NO. That's not how I roll.

My way is better! And it's team specific too so AP Mines won't go off on friendlies and you can't avoid enemy mines by picking up enemy kits since the deathbubbles aren't attached to the kit parts in my method!
First off, lets make the APMine PCO:
Code: Select all
ObjectTemplate.create PlayerControlObject APLandmineProjectilePCO
ObjectTemplate.networkableInfo APLandminePCO_Info
ObjectTemplate.geometry APLandmine_PCO_base
ObjectTemplate.saveInSeparateFile 1
ObjectTemplate.cullRadiusScale 3
ObjectTemplate.hasDynamicShadow 0
ObjectTemplate.hasMobilePhysics 1
ObjectTemplate.hasCollisionPhysics 1
ObjectTemplate.hasResponsePhysics 0
ObjectTemplate.speedMod 0
ObjectTemplate.hasArmor 1
ObjectTemplate.hitPoints 360
ObjectTemplate.maxHitPoints 360
ObjectTemplate.material 1035
ObjectTemplate.drag 1.0
ObjectTemplate.inertiaModifier 0/0/0
ObjectTemplate.mass 20
ObjectTemplate.damageMod 0
ObjectTemplate.criticalDamage 360
ObjectTemplate.ForceOnExplosion 7
ObjectTemplate.explosionRadius 3.6
ObjectTemplate.explosionMaterial 855
ObjectTemplate.hpLostWhileUpSideDown 0
ObjectTemplate.hpLostWhileDamageFromWater 360
ObjectTemplate.hpLostWhileCriticalDamage 1
ObjectTemplate.timeToLiveAfterDeath 0.5
ObjectTemplate.fadeAtTimeToLiveAfterDeath 0
ObjectTemplate.damageFromWater 1
ObjectTemplate.addArmorEffect 0 e_ExplGranade 0/0/0
ObjectTemplate.addArmorEffect -1 WaterWaterExplosion 0/0/0
rem ------------------------------------
ObjectTemplate.setPrimaryAmmoBar ABNone
ObjectTemplate.setCrossHairType CHTNone
ObjectTemplate.setVehicleCategory VCLand
ObjectTemplate.setVehicleType VTScoutCar
ObjectTemplate.setVehicleIcon "Empty.dds"
ObjectTemplate.setMinimapIcon "Empty.dds"
Network Info for the PCO:
Code: Select all
NetworkableInfo.createNewInfo APLandminePCO_Info
NetworkableInfo.setPredictionMode PMLinear
Code: Select all
GeometryTemplate.create StandardMesh APLandmine_PCO_base
GeometryTemplate.file DesertCombat/APLandmine/APLandmine
GeometryTemplate.hasDynamicShadow 0
Next up lets set spawners to spawn these little devils. You can't fire the PCO directly because the game will force you into it like the WesserFall or SA-3 Missile and we don't want that!
We will need two spawners (one for each team). That way, the mines will be team specific! This will be important later when we set up the death bubbles that will trigger these mines!
Code: Select all
ObjectTemplate.create ObjectSpawner APLandmineSpawnerAllied
ObjectTemplate.setObjectTemplate 2 APLandmineProjectilePCO
ObjectTemplate.minSpawnDelay 5
ObjectTemplate.maxSpawnDelay 5
ObjectTemplate.timeToLive 99999
ObjectTemplate.distance 99999
ObjectTemplate.maxNrOfObjectSpawned 1
ObjectTemplate.spawnOffset 0/0.16/0
ObjectTemplate.team 2
ObjectTemplate.teamOnVehicle 1
ObjectTemplate.create ObjectSpawner APLandmineSpawnerAxis
ObjectTemplate.setObjectTemplate 1 APLandmineProjectilePCO
ObjectTemplate.minSpawnDelay 5
ObjectTemplate.maxSpawnDelay 5
ObjectTemplate.timeToLive 99999
ObjectTemplate.distance 99999
ObjectTemplate.maxNrOfObjectSpawned 1
ObjectTemplate.spawnOffset 0/0.16/0
ObjectTemplate.team 1
ObjectTemplate.teamOnVehicle 1
So use the settings shown above and you should be fine!
That was the spawners. Now we will set up projectiles that will have the spawners attached to them. This is where the real magic happens as it is the initial projectile that spawns the APMine that will also arm the mines. The spawn offset used above ensures the mines will always be within the explosion radius of the projectile that spawned it since the mine will drop as soon as it spawns from the spawner.
The projectile will have no collision physics and will explode after 0.12 seconds. This ensures that the mines spawns in time for the projectile to damage it. This is key. Because the mine will have it's critical damage set to match its starting hitpoint level so that it will always be in critical. The hpLostWhileCriticalDamage setting also makes it so the mine lasts around 320 seconds. (roughly 5 minutes which was how long the original APMine projectiles lasted)
The game will give a kill credit to the last person to deal damage to pco while it is in the critical damage range. That's how you can get a kill credit for severely damaging a enemy tank and the enemy gets out before it explodes but then gets killed from the tank exploding. This is how it works and will work in the same way with the APMines since they are PCOs just like the tanks and vehicles.
Here's the projectiles that will spawn it. Like with the spawners, there will be two. One for each team to fire. We will make a new handfirearm for the axis team so they can fire the axis spawner projectile. We will get to that later.
Also note that we will need to setup the damage system for the custom material ID we will be using on the projectiles so they will deal very small amount of damage. That way it's enough to give you "ownership" of the mine, but not enough to significantly shorten the lifespan of the mine.
Code: Select all
ObjectTemplate.create Projectile APLandmineAlliedSpawnerProjectile
ObjectTemplate.geometry GrenadeAllies
ObjectTemplate.createNotInGrid 1
ObjectTemplate.saveInSeparateFile 1
ObjectTemplate.addTemplate APLandmineSpawnerAllied
ObjectTemplate.setPosition 0/0.2/0
ObjectTemplate.timeToLive CRD_NONE/0.12/0/0
ObjectTemplate.hasMobilePhysics 1
ObjectTemplate.hasCollisionPhysics 0
ObjectTemplate.hasResponsePhysics 0
ObjectTemplate.setHasPointPhysics 0
ObjectTemplate.hasCollisionEffect 0
ObjectTemplate.hasOnTimeEffect 1
ObjectTemplate.invisibleAtEndEffect 1
ObjectTemplate.invisible 1
ObjectTemplate.damageType 1
ObjectTemplate.forceOnExplosion 0
ObjectTemplate.radius 1
ObjectTemplate.material 880
ObjectTemplate.material2 880
ObjectTemplate.minDamage 0.25
ObjectTemplate.create Projectile APLandmineAxisSpawnerProjectile
ObjectTemplate.geometry GrenadeAllies
ObjectTemplate.createNotInGrid 1
ObjectTemplate.saveInSeparateFile 1
ObjectTemplate.addTemplate APLandmineSpawnerAxis
ObjectTemplate.setPosition 0/0.2/0
ObjectTemplate.timeToLive CRD_NONE/0.12/0/0
ObjectTemplate.hasMobilePhysics 1
ObjectTemplate.hasCollisionPhysics 0
ObjectTemplate.hasResponsePhysics 0
ObjectTemplate.setHasPointPhysics 0
ObjectTemplate.hasCollisionEffect 0
ObjectTemplate.hasOnTimeEffect 1
ObjectTemplate.invisibleAtEndEffect 1
ObjectTemplate.invisible 1
ObjectTemplate.damageType 1
ObjectTemplate.ForceOnExplosion 0
ObjectTemplate.radius 1
ObjectTemplate.material 880
ObjectTemplate.material2 880
ObjectTemplate.minDamage 0.25
The custom mat ID ensures that only the APMine will take damage from it and not anything else.
Now before we move on we will need to code a damage system for the new matIDs that the PCOs and projectiles use. Without this, none of this will work. The Mine pcos I used use material 1035. Be sure that you change the material ID in the mesh the mine will use using the forceMatID.exe app or with GMAX/3DSMAX! You can't get away with just changing it in the code! If you don't know how to do this, find a tutorial on how to change material IDs on collision meshes. I won't explain how to do it in this tutorial. Don't worry about this when with creating the projectiles as projectiles don't follow this rule. So lucky you.

The damage system for the APMine PCO uses DesertCombat damage system in mind. So if your mod has projectiles that use a different mat ID setup then what I have, you must change it accordingly. That's if you want this mine to be destructible by shooting it and such that is!
Please remember that the geometry that your APMine PCO uses must have the matIds as defined in the collision meshes match that of the number below. (use your own number if 1035 conflicts with anything you might have setup in your mod)
Here's the damage system for the Mine PCO: (matID 1035)
Code: Select all
rem *********** AP Mine Collision ***********
MaterialManager.material 1035
MaterialManager.materialAttGroup 1035
MaterialManager.materialDefGroup 1035
MaterialManager.materialDamage 10
MaterialManager.materialFriction 100
MaterialManager.materialElasticity 0
MaterialManager.materialResistance 0
rem *** Default Materials for AP Mine ***
rem * *** Dry Grass (yellow) ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 2
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Juicy Grass (Green) ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 3
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Dry Dirt ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 4
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Wet Dirt ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 5
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Mud ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 6
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Deep Mud ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 7
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Gravel ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 8
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Frozen ground ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 9
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Dry Sand ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 10
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Wet Sand ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 11
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Rock ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 12
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Forest Floor ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 13
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDry
rem * *** Dirt Road ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 14
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Paved Road ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 15
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate GranadeExplDirt
rem * *** Solid Wood ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 80
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Wood ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 81
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Thin Wood ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 82
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Hollow Wood ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 83
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Solid Metal ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 84
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Metal ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 85
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Thin Metal ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 86
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Hollow Metal ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 87
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Solid Stone (Rock) ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 88
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Concrete ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 92
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Reinforced Concrete ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 93
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Flesh ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 94
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Exterior Stone Wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 100
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Interior Stone Wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 101
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Exterior brick Wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 102
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Interior brick Wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 103
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Exterior wooden Wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 104
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Interior wooden Wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 105
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Wooden Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 106
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Sandbags ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 107
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Grate ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 108
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Wooden Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 109
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Wire Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 110
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Grated Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 111
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Mesh Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 112
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Bamboo Exterior wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 113
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Bamboo Interior wall ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 114
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Bamboo Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 115
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Bamboo Fence ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 116
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Wooden Floor ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 117
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Stone Floor ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 118
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Glass Pane ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 119
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *************************************************
rem * Special items
rem * *************************************************
rem * *** Wooden door ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 190
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Metal Door ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 191
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Wooden Ladder ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 192
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Metal Ladder ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 193
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem * *** Switch/control panel ***
MaterialManager.attGroup 1035
MaterialManager.defGroup 194
MaterialManager.damageMod 0.0
MaterialManager.setEffectTemplate e_collision_metal
rem ********* Projectiles VS. APMine **********
MaterialManager.attGroup 200
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_ExplGranade
MaterialManager.attGroup 204
MaterialManager.defGroup 1040
MaterialManager.damageMod 100
MaterialManager.attGroup 205
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 226
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_ExplGranade
MaterialManager.attGroup 230
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 232
MaterialManager.defGroup 1040
MaterialManager.damageMod 100
MaterialManager.attGroup 501
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 505
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 506
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 600
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 601
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 602
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 603
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 604
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 650
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 651
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 652
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 653
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 670
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 672
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 673
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 674
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 675
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 676
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 680
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 681
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 682
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 683
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 684
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 689
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_RichoMetal
MaterialManager.attGroup 700
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 701
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 703
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 704
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 705
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 706
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 707
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 708
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 710
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 711
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 712
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 713
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_ExplGranade
MaterialManager.attGroup 714
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 715
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 716
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 717
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 718
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_ExplGranade
MaterialManager.attGroup 750
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 751
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 850
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_ExplGranade
MaterialManager.attGroup 851
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.setEffectTemplate e_ExplAni01
MaterialManager.attGroup 853
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 858
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 860
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
MaterialManager.attGroup 861
MaterialManager.defGroup 1035
MaterialManager.damageMod 100
Now for the damage system for the projetile that spawns and arms the mine at the same time:
Code: Select all
rem *********** AP Mine Arming Projectile **************
MaterialManager.material 880
MaterialManager.materialAttGroup 880
MaterialManager.materialDefGroup 880
MaterialManager.materialDamage 10
rem *** Arming Material vs AP Mine PCO. ***
MaterialManager.attGroup 880
MaterialManager.defGroup 1035
MaterialManager.damageMod 1.0

If someone complains from dieing from APMines just tell them to watch where they are going and shoot them from safe distance.

Now we will set up th APMine handfirearm to fire the correct projectiles. There will be two firearms. One for each team. It's up to you which kits you want the APMine on and what index. So I won't explain the whole adding them to a kit procedure as you should know how to do that. If not...shame on you!
Code: Select all
ObjectTemplate.create HandFireArms APLandmine
ObjectTemplate.networkableInfo HandFireArmsInfo
ObjectTemplate.loadSoundScript Sounds/APLandmine.ssc
ObjectTemplate.itemIndex 6
ObjectTemplate.projectileTemplate APLandmineAlliedSpawnerProjectile
ObjectTemplate.projectilePosition 0/-0.2/2.3
ObjectTemplate.hasDynamicShadow 1
ObjectTemplate.projectileVisible 0
ObjectTemplate.addRootSpeed 0
ObjectTemplate.magSize 4
ObjectTemplate.numOfMag 1
ObjectTemplate.magType 0
ObjectTemplate.setHasMag 0
ObjectTemplate.reloadtime 1
ObjectTemplate.roundOfFire 1
ObjectTemplate.fireOnce 1
ObjectTemplate.autoReload 1
ObjectTemplate.GUIIndex 10
ObjectTemplate.setHudAmmoType ATIcon
ObjectTemplate.setAmmoIcon "Ammo/Icon_APLandmine_64x32.tga"
ObjectTemplate.setCrossHairType CHTIcon
ObjectTemplate.velocity 2
ObjectTemplate.fireInCameraDof 1
ObjectTemplate.hideDuringFireTime 0.4
ObjectTemplate.fireDelay 1.0
ObjectTemplate.soldierCameraPosition 0/-0.03/0.2
ObjectTemplate.ammoType 2
ObjectTemplate.autoReload 1
ObjectTemplate.cantSelectWhenNoAmmo 1
ObjectTemplate.changeWeaponWhenNoAmmo 1
ObjectTemplate.createSkeleton animations/APLandmine.ske
ObjectTemplate.useSkeletonPartAsMain base
ObjectTemplate.addTemplate APLandmineLod
ObjectTemplate.loadSoundScript Sounds/GrenadeAllies.ssc
ObjectTemplate.create HandFireArms APLandmineAxis
ObjectTemplate.networkableInfo HandFireArmsInfo
ObjectTemplate.loadSoundScript Sounds/APLandmine.ssc
ObjectTemplate.itemIndex 6
ObjectTemplate.projectileTemplate APLandmineAxisSpawnerProjectile
ObjectTemplate.projectilePosition 0/0/2.3
ObjectTemplate.hasDynamicShadow 1
ObjectTemplate.projectileVisible 0
ObjectTemplate.addRootSpeed 0
ObjectTemplate.magSize 4
ObjectTemplate.numOfMag 1
ObjectTemplate.magType 0
ObjectTemplate.setHasMag 0
ObjectTemplate.reloadtime 1
ObjectTemplate.roundOfFire 1
ObjectTemplate.fireOnce 1
ObjectTemplate.autoReload 1
ObjectTemplate.GUIIndex 10
ObjectTemplate.setHudAmmoType ATIcon
ObjectTemplate.setAmmoIcon "Ammo/Icon_APLandmine_64x32.tga"
ObjectTemplate.setCrossHairType CHTIcon
ObjectTemplate.velocity 2
ObjectTemplate.fireInCameraDof 1
ObjectTemplate.hideDuringFireTime 0.4
ObjectTemplate.fireDelay 1.0
ObjectTemplate.soldierCameraPosition 0/-0.03/0.2
ObjectTemplate.ammoType 2
ObjectTemplate.autoReload 1
ObjectTemplate.cantSelectWhenNoAmmo 1
ObjectTemplate.changeWeaponWhenNoAmmo 1
ObjectTemplate.createSkeleton animations/APLandmine.ske
ObjectTemplate.useSkeletonPartAsMain base
ObjectTemplate.addTemplate APLandmineLod
ObjectTemplate.loadSoundScript Sounds/GrenadeAllies.ssc
ObjectTemplate.create SimpleObject APLandmineSimple
ObjectTemplate.geometry Shad_APLandmine
ObjectTemplate.create AnimatedBundle APLandmineComplex
ObjectTemplate.createSkeleton animations/APLandmine.ske
ObjectTemplate.geometry Shad_APLandmine
ObjectTemplate.create LodObject APLandmineLod
ObjectTemplate.lodselector HandWeaponLodSelector
ObjectTemplate.addTemplate APLandmineComplex
ObjectTemplate.addTemplate APLandmineSimple
The following goes in the singleshotweaponsmod.inc file found in the animations.rfa. If your mod doesn't have one, copy the one from the mod your mod depends on. If it doesn't have any mod dependencies, then it's the vanilla BF1942 mod that you will get this from!
Add these lines to the file: (doesn't matter where, but just be tidy and remember where you put it)
Code: Select all
AnimationStateMachine.copyState APLandmine v_arg1 GrenadeAllies 1.0 GrenadeAllies 1.0
AnimationStateMachine.copyState APLandmineAxis v_arg1 GrenadeAllies 1.0 GrenadeAllies 1.0
Ok now that we got the handweapons, projectiles, APMine PCO, damages system, and animation system set up, now for the triggering system! The most important part of the whole process. Without this, the apmines will not go off when a soldier gets near the mines. So pay close attention!
We will now create health depots with negative health settings. These are commonely reffered to as death bubbles. These death bubbles will be attached directly to the soldiers and NOT to the kit parts as was the case in older APMine systems. We will get to that in just a bit, but first we need to create the death bubbles:
Code: Select all
ObjectTemplate.create SupplyDepot APMine_Det_Allied
ObjectTemplate.radius 3.6
ObjectTemplate.team 1
ObjectTemplate.addVehicleType APLandmineProjectilePCO -1 -365 0
ObjectTemplate.workOnVehicles 1
ObjectTemplate.workOnSoldiers 0
ObjectTemplate.create SupplyDepot APMine_Det_Axis
ObjectTemplate.radius 3.6
ObjectTemplate.team 2
ObjectTemplate.addVehicleType APLandmineProjectilePCO -1 -365 0
ObjectTemplate.workOnVehicles 1
ObjectTemplate.workOnSoldiers 0
As you can see the allied death bubble is set to team 1 and kills any team 1 apmines. Visa versa for Red team death bubble.
Now to add them to the soldiers! We are almost done! This code has been shrunk down and leaves out some code to save space.
Blue Team:
Code: Select all
ObjectTemplate.create BFSoldier USSOldier
rem [SNIPPED]
rem /////////////////////////////////////////
ObjectTemplate.addTemplate APMine_Det_Allied
rem /////////////////////////////////////////
Code: Select all
ObjectTemplate.create BFSoldier IraqSoldier
rem [SNIPPED]
rem /////////////////////////////////////////
ObjectTemplate.addTemplate APMine_Det_Axis
rem /////////////////////////////////////////
Do NOT put the death bubbles in the commonsoldierdata.inc file! That file is common code used by all soldiers!
Also important that the death bubbles be the LAST child object addTemplated to the soldier! Scroll down through the code till you see the addTemplate entry for the parachute. That is normally the last thing on the soldier. AddTemplate the deathbubble after that. If you put this anywhere else, you risk it not working or screwing up the other lod parts of the soldier!
Also note that with this method, dead bodies and soldiers who are in vehicles will not set off the ap mines. Which means your safe to drop a mine ontop of a dead body or drive over enemy apmines in a vehicle with seats.
Now all you have to do is set up your kits to use the APMines. In my mod the heavy assault and sniper kits have them. But it's your choice as to which ones. Just make sure the index setting for the handweapons don't conflict with anything else on the kit. Also make a kit icon or use the one DC used. You can use the one I made if you wish. The Axis handweapon goes on team 1 kits and the other on team 2 kits!
That's it! Now you got APMines for your mod. Now use your new weapon on the battlefield and win the war soldier!