Classic Battlefield Modding Wikia
Advertisement

How to create working AP mine fields in Bf1942[]

By Apache Thunder

Tutorial Difficulty: Moderate 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

I'm sure there is many out there that want APMines in their mod ever since the 1.4 update broke the proximity fuse code for soldiers. 


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

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"


Notice the use of the code "ObjectTemplate.explosionMaterial 855" in the PCO. This command tells the game to use that mat ID for the explosion that results from the death of this mine. DesertCombat uses 855 for APMine splash damage. If your mod doesn't use DesertCombat or uses a different mat ID, then change this accordingly. This ensures the mines does maximum damage to soldiers while not harming vehicles. Don't use explosionDamage as that code is global and isn't specific like with the damage system. You would end up with APMines doing heavy damage to vehicles like tanks and such and we don't want that!

Network Info for the PCO:


CODE

NetworkableInfo.createNewInfo APLandminePCO_Info NetworkableInfo.setPredictionMode PMLinear


Geoemetry for the PCO: (disabled dynamic shadow as it would be pointless to have one on something this small)

CODE

GeometryTemplate.create StandardMesh APLandmine_PCO_base GeometryTemplate.file DesertCombat/APLandmine/APLandmine GeometryTemplate.hasDynamicShadow 0


Now we got the APMine as a PCO. Later we will code a damage system so you can make the APMine destructible when you hit it with bullets or explosions!

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

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


There we go. The timeToLive and distance are set really high to ensure that mines work properly. If the spawner tries to deal damage to the mine, then the mine will no longer respond to deathbubbles and we can't have that!

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

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


These projectiles will be invisible and only serve the purpose of spawning and arming the mine. Notice that I turned off collision physics. This prevents problems when trying to lay mines near walls and such because if you do, the projectile gets blocked and won't be close enough to arm the mine. (since the projectile will have a tiny blast radius)

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

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


The above defines the damage that most of the projectiles in DC and BF1942 will do to the mine.

Now for the damage system for the projetile that spawns and arms the mine at the same time:


CODE

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


Ok once that is set up the mine should now arm correctly and also be killable by shooting it with guns and blasting them with granades. That way, the mines are destructible and won't cause any bad balance issues and produce the "noob whines about ap mines" effect. 

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

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


Ok before we continue we must do some changes in the animation system so that the new Axis hand fire arm will have the correct 1p and 3p soldier animations when using this hand weapon. If you not doing this in a mod that uses DC code. You will need to define the Blue team one as well. So I will include both strings just in case.

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

AnimationStateMachine.copyState APLandmine v_arg1 GrenadeAllies 1.0 GrenadeAllies 1.0 AnimationStateMachine.copyState APLandmineAxis v_arg1 GrenadeAllies 1.0 GrenadeAllies 1.0


If your mod runs off of DesertCombat, then the first line you can leave out as it is already definied in the file. Otherwise both will be needed. This tells the game to use the granade animations when holding the APMine. Please note that if you plan on using a different AP Mine mesh, be sure to use a different animation or make your own for the new geometry if it differs from the granade. Otherwise use the mesh that DC uses and the above will work fine.

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

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


Be sure you put these on the right soldiers! Mess this up and you could end up with players blowing themselves up from their own mines because of incorrect death bubble settings!

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

ObjectTemplate.create BFSoldier USSOldier


rem [SNIPPED]


rem ///////////////////////////////////////// ObjectTemplate.addTemplate APMine_Det_Allied rem /////////////////////////////////////////


Red Team:

CODE

ObjectTemplate.create BFSoldier IraqSoldier


rem [SNIPPED]


rem ///////////////////////////////////////// ObjectTemplate.addTemplate APMine_Det_Axis rem /////////////////////////////////////////


If your mod uses more and/or different soldiers, be sure to add the death bubbles to those too! Axis deathbubble goes on any soldier that will be on team 1 and the allied death bubble will go on any soldier on team 2.

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! 

Known Issue with using this on a server: The explosion and sound effect tied to the mines will not appear on a server. Kill credits and the like still work. But the client won't see or hear it explode. And also the death effect will work in instances where the mine is killed by a projectile instead of a death bubble if the damage system was set up accordingly.

Advertisement