1. Put "stopallmusic" before startcutscene.
2. Currently we don't have any sort of inheritance, so you'll have to use a trick. First, you'll need to create a per-actor gamevar like "bloodpooltype". Then,
espawn BLOODPOOL
setactorvar[RETURN].bloodpooltype 1 // or 2, or 3, etc. if you have multiple types
Now there are two ways you can do things.
I'm not sure if this first way will work, but it's simpler. Create an action with an offset from BLOODPOOL to your new tilenum, and apply it to BLOODPOOL actors in EVENT_GAME if their bloodpooltype is the right non-zero value.
The second way is to add "setactor[RETURN].mdflags 16" to the code above, and use EVENT_ANIMATESPRITES to "settspr[THISACTOR].tsprpicnum <your new picnum>" on BLOODPOOL actors. If you do this, you may want to make "bloodpooltype" be the picnum itself instead of 1, 2, 3.
3. Doing this is simple in practice, but hard to explain unless you're familiar with the concept of a
finite state machine. Basically, your actor will have some kind of state (unrelated to the CON concept of "state" meaning a subroutine) that can be changed, and it will need to do different things based on that state. The simplest way is to create two new actions for your 2nd and 3rd states (you get the first one for free with "ifaction 0"):
action APalmTree2 1
action APalmTree3 2
useractor notenemy MyPalmTree
ifaction 0
{
ifhitweapon
{
action APalmTree2
}
}
else ifaction APalmTree2
{
ifhitweapon
{
action APalmTree3
}
}
else ifaction APalmTree3
{
ifhitweapon
{
killit
}
}
enda
You can also add "ifwasweapon" inside the ifhitweapon if you only want it to respond to a certain one. Similarly, if you would like it to need to take more than a single point of damage to change state, you can add a strength to the actor, use an "ifdead" condition to check when it has been depleted, and use the "strength" command when setting a new action to set the new necessary value.
4. The easiest way to do this is to shoot a custom projectile that you create with defineprojectile. You can create one projectile for each pickup and set each one's PROJ_SPAWNS accordingly, or you can create a single projectile,
eshoot MyMobilePickup
setthisprojectile[RETURN].spawns MyPickupTilenum
and use EVENT_ANIMATESPRITES to set its .tsprpicnum to its projectile spawn.
5. I need to create an EVENT_DAMAGEWALL. Others may tell you to use a hack they have come up with, but you should not.