Page 381 of 400
Re: Ask a simple question, get a simple answer
Posted: Sun Nov 28, 2021 8:33 pm
by Adrageron
@Isaac
You have both submerged and adjacent open-air tiles in your maps? (...with no barriers between?)
Yes, I use underwater tiles with different heights, the party can stand open-air knee-deep in water (height 0) when the adjacent tile is considered underwater (height -2), without unnatural boundaries in-between. So you can dive and emerge by simple walking, without jumps and ladders.
Is there a reason not to flag all of the map tiles as underwater?
This didn't help. Apparently, the sound is blocked if it comes from an object below the water level at the moment when the party is not considered "diving". Eeven if you stand knee-deep in water next to the sound source.
I have no "fake" air tiles, just playing with different heihgts and slightly raised water surface.
Re: Ask a simple question, get a simple answer
Posted: Sun Nov 28, 2021 10:41 pm
by Isaac
Watch the first few seconds of this demo map.
https://vimeo.com/335643649
Is this similar to the water interaction you are trying to have?
This map accomplishes underwater wading using the heightmap, and using a transformed water mesh. This allows attacks from adjacent squares.
*There is no sound in the video, but it plays the water/plunge sounds as expected in the game.
Re: Ask a simple question, get a simple answer
Posted: Sun Nov 28, 2021 10:58 pm
by Adrageron
Yes, this is exactly what I did. Movement sounds of the party works fine. But if there will be a monster in the deepest tile in the pond here, you will not hear it from adjacent tiles.
Re: Ask a simple question, get a simple answer
Posted: Sun Nov 28, 2021 11:07 pm
by Isaac
In the video, all tiles are on elevation zero.
I don't have the map source with me, and I am working on a tablet PC while I am away from home [for a few days].
I can demonstrate it later tonight, if the tablet runs the game okay.
The gist of it is that the water mesh can be transformed via script, so that you don't get wild sharp peaks on the waves when you change the hightmap under the water plane. IIRC... The plunge/wading sounds were handled by floor_triggers.
Re: Ask a simple question, get a simple answer
Posted: Sun Nov 28, 2021 11:28 pm
by Adrageron
I did all of this. Waves are fine, party movement sounds too. The only problem is with underwater objects sounds. For example, try to place a destructible object at the bottom of the pond and hit it from an adjacent tile. Your attacks will be silent.
Re: Ask a simple question, get a simple answer
Posted: Sun Nov 28, 2021 11:54 pm
by Isaac
I think the solution is to not have underwater tiles where the water is only waist deep. The background drone of the under water sound would seem [logically I mean] to dampen all other sounds outside of the water.
For special case (or creatures), you might use a floor trigger to activate combat sounds called from brain events; by activate I mean enabled only while standing on the trigger.
*Such triggers could be added to the map tile itself.
Re: Ask a simple question, get a simple answer
Posted: Mon Nov 29, 2021 12:50 am
by Adrageron
Well, this is what I'm afraid of

So, there is no way to shut down that "drone" or at least fool it somehow?
I was thinking about the script hooked on monster animation event that forcefully plays action sound when monster and party Y positions are on different sides of the logical waterline. But I'm really don't want to do that
I've just done a couple of experiments. Interestingly, sound blocking does not apply to ambient sounds (force field, for example). I can hear force field's noise, but not the monster inside it

Re: Ask a simple question, get a simple answer
Posted: Mon Nov 29, 2021 2:57 am
by Isaac
Adrageron wrote: ↑Mon Nov 29, 2021 12:50 am
I was thinking about the script hooked on monster animation event that forcefully plays action sound when monster and party Y positions are on different sides of the logical waterline. But I'm really don't want to do that
This is sort of what I meant; that the monster definition be changed to play the combat sounds from the events —if— a conditon is met. Conditions like the monster is standing on a tile where they need to be heard (floor_trigger boolean), or perhaps the monster event checks if the party is standing where those sounds need to be played from the combat events.
*This latter case might need an additional condition to stop close range sounds from long range projectile attacks.
Re: Ask a simple question, get a simple answer
Posted: Mon Nov 29, 2021 4:02 am
by minmay
GameObject:playSound() checks if the object's underwaterness matches the party's underwaterness, and if it doesn't, it doesn't play the sound. Other things that play sound don't have this check.
The following things use GameObject:playSound():
- AnimationComponent plays sounds when it encounters a playSound: animation event
- ButtonComponent plays its sound field when it starts
- ChestComponent plays "chest_close" and "chest_open" when it closes and opens, respectively
- CloudSpellComponent plays its sound field when it initializes
- FloorTriggerComponent plays its activateSound field and deactivateSound field
- ForceFieldComponent plays "force_field_cast" when its duration expires
- GoromorgShieldComponent plays "goromorg_shield_hit" and "goromorg_shield_break" when hit
- HealthComponent plays its dieSound field when it dies
- ItemComponent plays "impact_blunt" if it collides with a monster but misses the attack
- LeverComponent plays its sound field when toggled
- LindwormBrainComponent plays "lindworm_shield_break" when it deactivates the shield
- LockComponent plays its sound field when unlocked
- MonsterActionComponents play their sound field when they start
- MonsterAttackComponent plays its impactSound field when it hits
- MonsterComponent plays its footstepSound on "footstep" animation events, plays its hitSound when damaged with DamageFlags.Impact (or plays "ice_hit" instead if it's frozen), and plays its dieSound when it dies
- ObstacleComponent plays its hitSound field when hit, unless the hitSound field is "$weapon" (the sound played for "$weapon" does NOT use GameObject:playSound() and will be audible even if the obstacle is underwater and the party is not!)
- PitComponent plays "pit_close" and "pit_open" when closed and opened
- PushableBlockComponent when it rises, falls, or is pushed
- TentacleHideComponent plays "tentacles_retreat" when it starts and "tentacles_rise" when it starts rising
- TileDamagerComponent plays its sound field every time it triggers
If you can't easily avoid/workaround these, I'd suggest finding a design that doesn't involve things being logically underwater at all. Don't forget that entering/exiting water changes the current ambient track, and even if your level's ambient track is named "underwater", it will still annoyingly restart whenever the party exits water, so it's hard for entering/exiting water to be a smooth experience anyway...
Re: Ask a simple question, get a simple answer
Posted: Mon Nov 29, 2021 8:46 pm
by Adrageron
Isaac, minmay, thank you, guys! I'm understand the problem much better now. I'll try to find not very shameful workaround
