I have some underwater areas, and I am wondering if anyone has any ideas on a system that would work for player immersion. For instance, how do character’s breath and what happens to them if they can’t breath.
Nothing creative comes to my mind other than just giving a plot item that gives “water breathing” strictly for story and roleplay reasons.
Any ideas and/or has anyone implemented something similar they’d be willing to share?
You could make it so that if the player enters an underwater area he has a certain amount of time (measured by heartbeat) to hold his breath until his health start to slowly decrease. You could also add an item (a flask of oxygen) that prevents health from decreasing in underwater areas, but needs to be activated first. If you also give it limited charges, players could run out of oxygen if they enter the underwater areas too often.
If you wanted to be extra fancy, you could repurpose the spirit meter mechanic from Mask of the Betrayer to be a display of that timer instead of the spirit meter.
/I’d also make an exception for Water Genasi, I think they can officially breathe water, and possibly air genasi, iirc air genasi don’t need to breathe at all.
Iron Body (spell) protects the recipient from the Drown spell, so perhaps it could count as underwater breathing as well.
The same applies to constructs, undead and elementals.
Good stuff already mentioned. I’d consider having area layouts that promote the idea of the danger of drowning. In other words, have areas of bubbles rising up from the floor of the underwater area, spaced apart so you can ‘just reach one’ before your breath timer expires. Then, place interesting or desirable things outside of those areas to lure the player into trying to get them, while also not running out of breath. That way, the danger of drowning is offset by the feeling of accomplishment and also the feeling of balancing life vs. gain (should I try for that sunken chest, but maybe drown in the attempt, or head for those bubbles now?).
We put air bladders in creature drops in underwater areas. They add 3 minutes before the fort saves start again (escalate slowly, just do damage, pnp is rough and stock you don’t have the answers to it.) Maybe think about checking for effects from the resist elements or protection lines of spells.
I think Harvest of Souls has underwater scripts, some kinda water breathing potion that lasts X minutes and a helmet of Waterbreathing. It’s on the vault.
Here is what I did.
I made a generic always on trigger and put a script on it to do a 1d20 damage to entering player characters. Then I placed 5-8 of those triggers overlapping each other to cover the area. It is a low level area so 1d20 damage can be rough for a level 5 character. If they have a specific helmet equipped, the trigger doesn’t damage them. If they are a water genasi it doesn’t damage them. So, a character can try to tank the damage with heal pots, but moving through the area without the helmet equipped is a bad idea. I am also planning to up the damage to 2d20 the deeper the characters go. There are speak strings that notify the player that their character is drowning on the triggers as well.
I played around with applying effect to the player that damages them on area heart beat, got it to work but that as with most other options to me feels heavy handed. I want a gentle touch for the players. Lets be honest most players would just load up on the immunity items anyway, and the method I chose is no different. But forcing them to wear a helmet with no stats might be enough of a nuisance to low level characters. Also, I have the option to change the damage type, would cold damage be more appropriate here?
Here is the script if you want it, it is a simple one.
void main()
{
effect eDamage;
// Get the creature who triggered this event.
object oPC = GetEnteringObject();
// Only fire for (real) PCs.
if ( !GetIsPC(oPC) || GetIsDMPossessed(oPC) )
return;
// Abort if the PC has the item "quest_water_gills" equipped.
if ( "quest_water_gills" == GetTag(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)) )
return;
// Abort if the PC's subrace is xxxxxxxx.
if ( GetSubRace(oPC) == RACIAL_SUBTYPE_WATER_GENASI )
return;
// Cause damage and let player know
eDamage = EffectDamage(d20(), DAMAGE_TYPE_BLUDGEONING);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
SendMessageToPC(oPC, "You cannot breathe underwater!");
AssignCommand(oPC, ActionSpeakString("*You are drowning!*"));
}
This here looks a bit odd. Should there really be a paranthesis after DAMAGE_TYPE_BLUDGEONING? Also, is bludgeoning the right way to go? I’m just thinking out loud here…If the player has a resistance to bludgeoning damage, I mean. Anyway, great work and ideas with this, @MagicalWisps ! I’ve always had problems (they were always solved in the end, but…) with removing effects, like I think you mentioned in another post here, so with your current method you don’t need that, which is pretty neat.
Yeah, I agree that bludgeoning is incorrect to use here, do you know what I should use instead? I have said it before and I will say it until the day of my last breath. I am no scripter. The simpler the solution for me is not to use much scripting.
Removing the effect once I applied it to the PC was difficult to understand and I still haven’t gotten it, but I still feel that the trigger solution works better for what I am doing.
I’m no scripter either. I only know the basics even though I’ve been making modules for about 6 years now.
Maybe use DAMAGE_TYPE_MAGICAL or DAMAGE_TYPE_COLD or DAMAGE_TYPE_ALL? There’s no good one for drowning…eh, I don’t know. Maybe use bludgeoning after all?
I realize you’re pretty far down the scripting path already, I like GCoyote’s post.
“Drowning”, in 3.5, has a lot to do with constitution. Making a Con check every round can add to suspense. PnP is pretty brutal, though.
The idea of using a Hit Point bar brings a smile to my face. It reminds me of playing “Jungle King”/“Jungle Hunt” in the arcade in the 1980’s. There was a breath bar when your sprite swam underwater while knifing alligators.
Any character can hold her breath for a number of rounds equal to twice her Constitution score. After this period of time, the character must make a DC 10 Constitution check every round in order to continue holding her breath. Each round, the DC increases by 1. See also: Swim skill description.
When the character finally fails her Constitution check, she begins to drown. In the first round, she falls unconscious (0 hp). In the following round, she drops to -1 hit points and is dying. In the third round, she drowns.
It is possible to drown in substances other than water, such as sand, quicksand, fine dust, and silos full of grain."