<aside> ⚠️ Warning: Before beginning this tutorial, you should already be familiar with the DECORATE and ACS languages.

</aside>

Some actor properties are floating point numbers and must be modified multiplicatively in order for multiple effects to impact the same property.

The engine handles certain effects like this automatically, such as PowerSpeed or PowerDamage. However, not all features you may want to modify are supported for us, or situations where supported properties can’t be modified due to complications such as morphs. This is where AProp Powerups come in.

AProp Powerups support the following actor properties:

The following custom actor properties are also supported. These actor properties are accessed using [core_SetCustomActorProperty](<https://mm8bdm.notion.site/core_SetCustomActorProperty-e510672de29d4dfa9445816166a54ede>) and [core_GetCustomActorProperty](<https://mm8bdm.notion.site/core_GetCustomActorProperty-906cf910277c4895b70aa2914270e675>).

Creating an AProp Powerup


To create an AProp Powerup, you need some code in DECORATE and ACS. in DECORATE, you need to define two actors: a powerup giver and the powerup itself. These actors are only really used as triggers for the scripts they run, so they require minimal information, but they should exist regardless.

actor MushJumpPowerGiver : PowerApropGiver {}
actor MushJumpPower : PowerUp
{ 
	+INVENTORY.ALWAYSPICKUP 
	powerup.duration -20 
}

actor MushGravPowerGiver : PowerApropGiver {}
actor MushGravPower : PowerUp 
{ 
	+INVENTORY.ALWAYSPICKUP 
	powerup.duration -20 
}

actor MushHeightPowerGiver : PowerApropGiver {}
actor MushHeightPower : PowerUp
{ 
	+INVENTORY.ALWAYSPICKUP 
	powerup.duration -20 
}

The first actor inherits from PowerApropGiver, the second inherits from PowerUp. Be sure to specify the time limit in the powerup.duration. As with normal powerups, using +INVENTORY.ALWAYSPICKUP allows the duration to be reset if the powerup is given again within the initial duration.