Here's a starting template i've been working on for spawning players that will help a bit
But you are on the right track for wanting to get things setup cleanly right from the beginning so you dont have to re code things over and over.
making use of functions will help repeat tasks with only having to code them once.
What i've done in this example. is Created a function that spawns a player. I then assign a unique ID or name to the newly created player eg: "player 1", and you can also set specific starting values for their health etc.
on object touched "start" - Function Call "Spawn Player"
you can also add arguments if you want to spawn a player with different variables etc, like more health.
eg: on object touched "start" - function call "Spawn Player" (100)
In the function itself you would setup what each of those unique arguments would be eg: argument1 = max health, argument 2 = max damage, argument 3= lives etc.
Then anytime you need a new character to spawn you would use.
on object touched "start" - function call "Spawn Player" (100)(40)(3)
The function itself would look like this...
Function on "Spawn Player"
-> create object "PlayerObject"
-> PlayerObject -Set Health to Function.Param(0)
-> PlayerObject Set Damage to Function.Param(1)
The same idea can be applied to dealing damage however it occurs.
Create a function called "DealDamage"
-> Subtract Function.Param(0) from Player.health
Now where you would have the event that occurs when a player collides with the lava or an enemy for example.
You can also add an argument that would specify what type of damage they received, if you want to have multiple different amounts based on who hit who, or what hit what.
in the function called "DealDamage"
If Function.Param(0) = "lava"
-> Subtract 10 from Player.health
If Function. Param (0) = "enemy"
-> Subtract 20 from Player.health
So when you call the function On Function Call "Deal Damage" (lava)
it would know to deal the amount of damage according to how much damage lava does. This is also helpful that all of your variables are in one place to find later when you want to tweak them.
You can use an argument as well to specify a specific amount of damage taken.
Subtract Function.Param(0) from Player.health
Player On collision with "enemy" Call Function "Deal Damage" (20)
See if you can apply these ideas to what you want to do, and fire back any questions you may have and i'll do my best to answer them.