Veins and veinhole monsters
Veinhole monsters grow vein fields that damage objects standing in them; weeders harvest the veins to charge the chemical missile.
Veinhole monsters
Section titled “Veinhole monsters”A veinhole monster sits in one cell and grows a field of veins around itself. It belongs to no house and is neither a building nor a vehicle. Every monster uses the TerrainType named by VeinholeTypeClass in [General], so that type’s Strength, Armor and Immune settings apply to all of them. The monster is drawn from the current theater’s VEINHOLE shape file, such as VEINHOLE.TEM, not from the type’s Image.
[General]VeinholeTypeClass=VEINTREE
[VEINTREE]Name=Veinhole TreeImage=NoneArmor=NoneStrength=1000IsVeinhole=trueSet IsVeinhole=yes on that TerrainType so that players can click the monster. The flag also makes the type a legal target, even if its section sets LegalTarget=no.
Placement
Section titled “Placement”A map places a monster with the VEINHOLE overlay on its center cell. When the map loads, the engine fills the eight surrounding cells with the VEINHOLEDUMMY overlay itself. It neither checks nor reshapes the ground under a monster placed this way, so draw the pit in the map if the monster should sit in one.
The random map generator plants the number of monsters set by VeinholeMonsters. It makes at most 200 placement attempts in total, so a crowded map gets fewer. Each attempt picks a site as that page describes, and a monster is then placed only where all of the following hold, tested in this order:
- no other monster stands inside the five-by-five block centered on the site;
- the center cell is at height 1 or higher;
- every cell of the three-by-three block around the center is flat, of the
Clearland type, and at the center’s height.
The generator then digs the monster’s pit: all nine cells drop one height level, the center stays flat, and the eight cells around it slope back up to the surrounding ground. It also puts mature veins on the outer ring of the monster’s five-by-five block, wherever that ground accepts them.
Idle, alert, and attacking
Section titled “Idle, alert, and attacking”A monster is alert while any cell of the five-by-five block centered on it holds a building, vehicle, infantry, landed aircraft or terrain object, and idle when the block is empty. A single tree in the block keeps the monster alert for as long as the tree stands. Being alert changes only the monster’s animation.
A monster attacks only after it is damaged. A hit that damages it without destroying it makes it attack for 120 frames (8 seconds); a hit that deals no damage does not. While attacking, the monster releases one particle of the GasCloudM1 type, whose name is fixed, each time its mouth opens fully. The particle appears 400 leptons above the monster’s cell, drifts away in a random direction, and joins the scenario’s shared gas cloud system. The particle type decides what the cloud does; in the shipped rules it becomes a GasCloud1 cloud, which damages objects beneath it.
A change of state waits until the monster’s current animation reaches a point where it can switch, so the monster can react a moment late.
Destruction
Section titled “Destruction”Players can attack the monster by clicking it. Vehicles, infantry and aircraft ordered to attack its cell also attack the monster itself. A building given that order fires at the ground in the cell instead.
A destroyed monster plays its dying animation and then turns its pit into part of the field. Its own cell and the four cells beside it take vein overlay, and the four diagonal cells lose their overlay. Veins are then placed across the five-by-five block wherever the ground accepts them, which leaves the pit’s corner slopes bare.
The field then withers. Every VeinholeShrinkRate frames, plus a random extra of up to half as many, 1 to 4 of the monster’s mature cells turn thin or lose their vein, starting with those farthest from the veinhole. Each mature cell withers once, and thin veins disappear once no mature cell remains next to them. Withering continues even while VeinGrowthEnabled is off. When every mature cell has withered, the monster is removed, together with any vein left in its five-by-five block, even vein another monster owns. Veins outside that block stay on the map.
Vein fields
Section titled “Vein fields”Ripeness
Section titled “Ripeness”A vein cell is either thin or mature. Only mature veins spread the field, attack objects, and can be harvested. Thin veins are the connecting pieces drawn beside mature cells. Veins have no numbered growth stages like a Tiberium cell.
Harvesting or withering a mature cell makes it thin, or removes its vein if none of its four cardinal neighbors is mature. A thin neighbor left with no mature cardinal neighbor loses its vein as well.
A mature vein on a slope spreads the field and can be harvested, but it never attacks, and harvesting removes it instead of making it thin.
The shipped VEINS overlay sets Land=Weeds, which gives its cell the Weeds land type whatever the ground tile beneath it. Weeders look for that land type when they search for veins and when they load, so they cannot harvest a vein overlay without it.
Growth
Section titled “Growth”Each monster grows its own field in steps. The first step comes VeinholeGrowthRate frames after the monster is created. Each later step comes that many frames after the previous one, plus a random extra of up to half as many.
A step takes the next 1 to 5 cells from the monster’s growth queue. Each cell taken becomes mature if it still accepts veins.
A cell that matures on flat ground also puts vein on each cardinal neighbor that does not already hold mature vein or a VEINHOLE or VEINHOLEDUMMY overlay. A flat neighbor gets thin vein, and a sloped neighbor gets mature vein at once.
Each cell taken that is mature after the step, whether it has just matured or already was, then adds its cardinal neighbors to the queue. A neighbor is added when all of the following hold:
- it lies inside the playable area;
- its height differs from the mature cell’s by less than two levels;
- it accepts veins;
- no monster owns it yet.
Veins spread only to cardinal neighbors, never diagonally. Cells leave the queue roughly in the order they joined it, but a random offset lets two cells queued up to 2,450 frames apart, nearly three minutes, grow in either order. A field therefore spreads unevenly instead of as an expanding ring.
The monster that queues a cell owns it. That monster regrows the cell when harvesting leaves thin vein in it, and withers it after the monster is destroyed.
A growth step runs only while all of the following hold:
- the monster has queued no more than
MaxVeinholeGrowthminus 40 cells in total; - it covers no more than
MaxVeinholeGrowthminus 100 mature cells, its coverage limit; and - the scenario’s
VeinGrowthEnabledswitch is on. The Vein growth trigger action turns it on and off during play.
The queued total is a budget for the whole scenario. It never goes down, a saved game keeps it, and a harvested cell queued to grow back also adds to it. Once the total passes MaxVeinholeGrowth minus 40, the monster stops growing for the rest of the scenario, and cells harvested after that stay thin. No cell is ever queued past MaxVeinholeGrowth itself.
What stops veins
Section titled “What stops veins”A cell accepts veins when all of the following hold:
-
it is flat, or on one of the four simple slopes, which raise two adjacent corners of the cell. Every other slope shape refuses veins;
-
its land type is not
Water,Rock,IceorBeach; -
it has no overlay, or an overlay with
IsVeins=yes. The shippedVEINS,VEINHOLEandVEINHOLEDUMMYoverlays all set it; and -
each of its four cardinal neighbors meets all of the following, in this order:
- if this cell is flat, the neighbor is flat, on a simple slope, or has an
IsVeins=yesoverlay; - its land type is not
Water,Rock,IceorBeach; - it has no overlay, or an
IsVeins=yesoverlay.
- if this cell is flat, the neighbor is flat, on a simple slope, or has an
The neighbor test is why a field stops one cell short of a wall, a bridge, a crate or Tiberium, even where the cell it would grow into is clear. Tiberium is kept out in return, because it spreads only onto cells with no overlay.
Loading a scenario
Section titled “Loading a scenario”Store vein fields in a map as mature cells. While a scenario loads, right after its overlays are read, the engine removes every vein overlay and places veins again on each stored mature cell that still accepts them. The thin pieces around those cells are redrawn to fit the ground, and thin veins stored in the map are discarded. A cell’s ripeness is stored in the map’s overlay packs.
Each monster then takes ownership of the vein field connected to its five-by-five block, counting diagonal connections, and queues the thin cells in that field to grow first. Vein cells that no monster owns are removed, so a map without monsters loses all its veins. A monster with no vein in its five-by-five block never grows, so a map that places a monster needs mature veins in that block.
The mature cells a monster takes over count toward its coverage limit, and the cells it queues count toward its queued total. A monster that takes over more than MaxVeinholeGrowth minus 100 mature cells, 1,900 with the shipped rules, therefore never grows.
Standing in veins
Section titled “Standing in veins”Flat, mature veins attack buildings, vehicles, infantry and aircraft standing in them. An object is not attacked while it is more than 5 leptons above the ground, when its type sets ImmuneToVeins=yes, or when it has the VEIN_PROOF veteran ability. Thin veins and veins on a slope never attack.
A cell checks for vulnerable objects, and starts an attack if it finds any, whenever an object finishes moving into it, however it travels, or is placed on the map there. It checks again when its vein matures under objects already standing in it. A cell that already has an attack running starts no new one.
The attack is the VeinAttack animation. On every other frame, it deals VeinDamage with VeinholeWarhead to every vulnerable object in its cell. It ends when the cell is empty, when the cell no longer holds flat mature vein, or when the object that entered the cell last is off the ground. The cell can then start another attack.
A cell starts one animation for each vulnerable object standing in it, and each animation damages every vulnerable object there. Three vulnerable infantry in one cell therefore each take three hits every other frame.
If the vein warhead sets Veinhole=yes, a damaged object fights back against the monster that owns the veins where it stands, or, if it is moving, where it steps next. A computer-owned object always does. A player-owned object does so only while it has no target and no movement order, and only when the monster is within its weapon range or sight.
Weed harvesting
Section titled “Weed harvesting”Finding and loading
Section titled “Finding and loading”A UnitType with Weeder=yes harvests veins through the same harvest mission as a Tiberium harvester. It starts harvesting when it is placed on the map, including when it leaves a factory or a repair bay. When it later goes idle, it resumes harvesting if its house is computer-controlled or it is standing on veins. A player-owned weeder that goes idle anywhere else takes a guard mission instead, so a player can park it. A weeder whose house owns none of the buildings in its Dock list switches to guard. Do not also set Harvester=yes: such a vehicle waits for Tiberium ground instead, as Tiberium harvesting explains.
A weeder first checks its own cell, then searches outward one ring at a time and takes a qualifying cell from the nearest ring that has one. The search covers every ring closer than TiberiumFarScan cells when the weeder sets out, and closer than TiberiumNearScan cells while it works a field. A cell qualifies when all of the following hold, tested in this order:
- it lies inside the playable area;
- in a campaign, if the local player owns the weeder, the cell is not shrouded;
- it is in the same movement zone as the cell the weeder is heading to, or its own cell when it is not moving;
- the weeder can enter it now, so a cell with a vehicle parked in it does not qualify;
- it has the
Weedsland type; - it holds mature vein.
[WEED] ; the stock weed eaterWeeder=yesDock=NAWASTStorage=7PipScale=TiberiumImmuneToVeins=yes ; otherwise the veins it harvests damage it
[NAWAST] ; the stock weed refineryWeeder=yesBib=yesPipScale=TiberiumA weeder harvests a mature cell in one go. Each cell gives two units of weed, or one if the first unit fills the weeder; Storage sets how many units it can carry. The cell then turns thin or loses its vein, as described under Ripeness. After each cell, the weeder waits 27 times HarvesterLoadRate frames before it moves on, and it harvests the next cell no sooner than 9 times HarvesterLoadRate frames after it leaves the previous one.
A harvested cell that is left with thin vein and belongs to a live monster rejoins that monster’s growth queue and can mature again, within the limits under Growth. A harvested cell that loses its vein, or that no monster owns, is not queued to grow back. A monster’s field can still spread into it again from a neighboring cell that matures.
Docking and unloading
Section titled “Docking and unloading”A weeder unloads only at a BuildingType with Weeder=yes, which needs no DockUnload=yes. A weeder returning on its own looks only among its own house’s buildings whose types are in its Dock list, so that list must name at least one weed refinery. A player can also send a weeder into another house’s weed refinery, but only when each house is allied with the other. A weeder whose weed refinery is lost before it docks goes back to harvesting, as a Tiberium harvester does.
The weeder docks on a fixed cell of the building’s Foundation=WxH: the third cell along W and the second along H, counting from the foundation’s top corner. Give the building Bib=yes so that vehicles can drive onto that cell:
- With a foundation three cells wide, such as the
3x3of the shippedNAWAST, the dock cell is on the building’s last column, and any vehicle can drive onto it. - With a wider foundation, only a weeder whose house and the building’s house are allied with each other can enter it.
- With a foundation narrower than three cells, or only one row deep, the dock cell lies outside the building.
Without Bib=yes, a dock cell inside the foundation is blocked like the rest of the building, so no weeder can drive onto it.
A docked weeder faces east and hands its house one unit every HarvesterDumpRate minutes of game time. Unlike a Tiberium refinery, the building plays no pre-production animation, and the weeder does not wait for a production animation to finish. To change the weeder’s artwork while it unloads, set UnloadingClass on its type; the rules-wide UnloadingHarvester applies only to Tiberium harvesters. A weeder also never shows the harvesting artwork a Tiberium harvester shows. Once it is empty, the weeder returns to harvesting.
The weed pool
Section titled “The weed pool”Each house stores weed separately from Tiberium, up to WeedCapacity units. Weed unloaded while the pool is full is lost.
When a house’s pool holds exactly WeedCapacity units and the house owns a Type=ChemMissile superweapon that is not ready, the pool is emptied and the weapon’s countdown restarts at its full RechargeTime. A pool below WeedCapacity does nothing.
A full pool restarts a countdown that is already running, so the progress made so far is lost. While the weapon is ready, a full pool waits and further weed is lost.
The shipped chemical missile sets ManualControl=yes, so it does not charge at all until its house’s pool fills. Manual control explains the setting.
A Weeder=yes building with PipScale=Tiberium shows how full its house’s weed pool is, not its own contents. It shows at most WeedCapacity pips, and fewer if its MaxPips or foundation leaves room for fewer.
Settings the engine parses but never reads
Section titled “Settings the engine parses but never reads”VeinholeMonsterStrength and VeinGrowthRate have no effect. Set a monster’s strength with Strength on the type VeinholeTypeClass names, and the time between growth steps with VeinholeGrowthRate.
Related settings
25 of 25
| Key | Description | Value | When omitted |
|---|---|---|---|
DockAircraftType, BuildingType, InfantryType, UnitType | BuildingTypes an object returns to for docking. | list of BuildingTypes | none |
DockUnloadBuildingType | Lets a Tiberium harvester dock at a building and unload there. | boolean | no |
HarvesterDumpRateglobal rules | Minutes a docked harvester spends handing over each stored unit. | floating point | .016 |
HarvesterLoadRateglobal rules | Game frames per step of a harvester's loading cycle, which lifts one unit every nine steps. | integer | 2 |
ImmuneToVeinsAircraftType, BuildingType, InfantryType, UnitType | Exempts the object type from vein damage. | boolean | no |
IsVeinholeTerrainType | Lets a click pick a veinhole monster built from the TerrainType, and makes the monster a legal target. | boolean | no |
IsVeinholeMonsterOverlayType | Lets explosions centered on the veinhole monster's cell damage it. | boolean | no |
IsVeinsAnimType, OverlayType | Treats an overlay as part of a vein field, or an animation as the attack veins make. | boolean | no |
MaxVeinholeGrowthglobal rules | Ceiling on the veins one veinhole monster may cover. | integer | 1000 |
StorageAircraftType, BuildingType, InfantryType, UnitType | Units of Tiberium an object can hold. | integer | 0 |
TiberiumFarScanglobal rules | Distance a harvester searches for Tiberium when it sets out with no recorded patch to return to. | distance (cells) | 32 |
TiberiumNearScanglobal rules | Distance a harvester searches for the next Tiberium cell once the cell it is working runs out. | distance (cells) | 6 |
VeinAttackglobal rules | AnimType a vein cell attaches to itself to hurt what stands in it. | class | none |
VeinDamageglobal rules | Raw damage a vein cell deals on every second frame. | integer | 2 |
VeinGrowthEnabledscenarios | Allows veinhole monsters to spread their fields during a scenario. | boolean | yes |
VeinGrowthRateNo effectglobal rules | Parsed rate that the engine never uses. | floating point | 1 |
VeinholeWarheadType | Lets an object damaged with no credited attacker fire back at the veinhole monster that owns the veins under it or just ahead of it. | boolean | no |
VeinholeGrowthRateglobal rules | Game frames between one veinhole monster's growth steps. | integer | 100 |
VeinholeMonstersrandom map generation | Veinhole monsters the random map generator plants. | integer | 0 |
VeinholeMonsterStrengthNo effectglobal rules | Parsed strength figure that the engine never uses. | integer | 10000 |
VeinholeShrinkRateglobal rules | Game frames between the withering steps of a destroyed monster's field. | integer | 100 |
VeinholeTypeClassglobal rules | TerrainType every veinhole monster in the scenario reports as its own. | class | none |
VeinholeWarheadglobal rules | WarheadType vein damage is applied with. | class | none |
WeedCapacityglobal rules | Units of weed a house can hold. | integer | 0 |
WeederBuildingType, UnitType | Makes a BuildingType the structure vein harvesters dock at, or a UnitType a vein harvester. | boolean | no |
No keys match the current filters.
History
- Changed0.1.0
- Changed0.2.0In development
- Changed0.2.0In development
- Changed0.2.0In development