Jump to content
The Dark Mod Forums

Subtitles in intro


ajotatxe
 Share

Recommended Posts

I'd love to see some mission authors enabling subtitles in their missions. I often have problems understanding in-game conversations. Compared to the game's sound effects and environmental noise the conversations are just too quiet.

TDM ships with the possibility to display messages on the top-left corner (like in the tutorial). So one could just alter the way they appear, right? I think of displaying them on the bottom of the screen in a larger font size and with no paper background. Trigger them when a conversation is triggered...and that way you would just have implemented a subtitle feature.

Link to comment
Share on other sites

No problem asking common questions. If people could only post things no one else had ever asked, the forum would dry up quick.

Link to comment
Share on other sites

that subtitle system offered by ndk looks like its dead in the water, as all the links in the original post (2010) are dead links, it was a dll and who ever ndk was, they refused to list the source code, without the source code you can't expand on it to fit it into current build.

  • Like 1
Link to comment
Share on other sites

How about implementing the caption system from d3-mod Doom 3 CC?

 

 

 

 

 

 

Can someone can take a look at it?

 

"Doom 3[CC]" Files:

--

To me, showing dialog captions (like T3) are sufficient.

@Nightcrawler, how about using headphones?

Edited by freyk

Info: My portfolio and darkmod graphical installer
Amnesty for Bikerdude!

Link to comment
Share on other sites

That Mod really looks promising. I agree with you: Dialog Captions are sufficient, Captions for sound effects like in the video are definitely over the top.

@Nightcrawler, how about using headphones?

 

 

Have none at the moment. Maybe I'll give them a try when I stumble upon a good offer. But headphones probably wouldn't solve the problem, that the dialogs are hardly hearable when there's a lot of in-game sound effects and environmental noise around. Because their volumes are controlled by the the same slider (effects).

Link to comment
Share on other sites

The subtitles are probably for deaf people who want to play doom 3 but miss all the sound, that why the subtitles cover every sound made, same with own language subtitles on tv, they also say the sound made, eg "door opens, screech, clunk, thud."

 

the code would need to be redone and compiled though, it sends email messages to doom 3's pda, and that's been removed from tdm there is just a def file place holder for the pda so that the code will work but the pda code is gone. plus the subtitles would have to be written to the top of the screen as they will get in the way of the light gem if they are written at the bottom, but that's all configured in the gui files, its a rewritten hud.gui, it will mess with tdm hud if used. so a separate gui which gets drawn after the hud.gui would be better. It would be easier to turn off and on that way.

 

which version of doom 3 is tdm based off, version 1.3, or version 1.3.1 because the subtitle code dont work with the 1.3.1 version

Edited by stumpy
  • Like 1
Link to comment
Share on other sites

dont need the code, just stick the subtitles in the i18n file, then when someone changes the language it will use the alternative #str00000 for the subtitles, then all you need is a gui to display the subtitles, you could trigger that via the conversation entity when it triggers the sound to be played would just mean modifying the conversation entity so that is displays subtitles when the sound for an actor to be played. although subtitles should be above light gem as to not interfere with the operation of than, and probably on a different layer, the hud is on layer 10 in doom 3 its on layer ? in tdm

 

player custom gui's go on layer 100, well thats the layer i used for a custom gui.

 

I look at the code and as far as I could tell it reads in a text file that contains the translated subtitles, depending on which languages selected then selects a color and a preference and then sends that information to a gui to display the information on layer 10, top preference is voice subtitles, then in game voice overs, then pda emails, then pa voice, then sound effects. most of this is already used in the i18n system added to tdm already. so the code isn't needed.

Edited by stumpy
  • Like 1
Link to comment
Share on other sites

 

script file

#ifndef __SUBTEST_SCRIPT__
#define __SUBTEST_SCRIPT__

float overlayHandle;

void subtitle_runner()
{
//0
sys.print("Start with subtitle bank zero.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextOne");
//1
sys.print("Subtitle bank 1.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextTwo");
//2
sys.print("Subtitle bank 2.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextThree");
//3
sys.print("Subtitle bank 3.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextFour");
//4
sys.print("Subtitle bank 4.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextFive");
//5
sys.print("Subtitle bank 5.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(2);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(3);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextSix");
//6
sys.print("Subtitle bank 6.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(7);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextSeven");
//7
sys.print("Subtitle bank 7.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextEight");
//8
sys.print("Subtitle bank 8.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextNine");
//9
sys.print("Subtitle bank 9.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(6);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
//sys.wait(0);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextTen");
//10
sys.print("Subtitle bank 10.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(4);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextEleven");
//11
sys.print("Subtitle bank 11.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(6);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
//sys.wait(0);
$player1.callGui(overlayHandle, "Sub2Off");
$player1.callGui(overlayHandle, "SwaptextTwelve");
//12
sys.print("Subtitle bank 12.\n");
$player1.callGui(overlayHandle, "Sub1On");
sys.wait(1);
$player1.callGui(overlayHandle, "SndEftOn");
sys.wait(10);
$player1.callGui(overlayHandle, "Sub1Off");
$player1.callGui(overlayHandle, "SndEftOff");
$player1.callGui(overlayHandle, "Sub2On");
sys.wait(5);
$player1.callGui(overlayHandle, "Sub2Off");
}

void subtitle_screen_deactivate()
{
sys.print("exit screen.\n");
$player1.destroyOverlay( overlayHandle );
}

void subtitle_screen()
{
sys.print("walk into trigger.\n");
overlayHandle = $player1.createOverlay("guis/subtitle.gui", 101 );
subtitle_runner();
//sys.wait(20);
subtitle_screen_deactivate();
}

void main()
{
sys.print("subtitles test.\n");
//dont need to know language set as using subtitles from i18n file.
//once langage set it will use alternative #strnnnnn for that language
}

#endif /* __SUBTEST_SCRIPT__ */

 

gui file

 

windowDef Desktop
{
rect 0, 0, 640, 480
visible 1
nocursor 1

windowDef Subtitle1
{
rect 30, 10, 610, 70
forecolor 1, 1, 1, 1
font "fonts/mac_humaine"
text "#str_70000"
textalign 0
textscale 0.31
visible 0
}

windowDef Subtitle2
{
rect 30, 10, 580, 70
forecolor 1, 1, 1, 1
font "fonts/mac_humaine"
text "#str_70001"
textalign 2
textscale 0.31
visible 0
}

windowDef SoundEffect
{
rect 30, 50, 610, 70
forecolor 1, 0.3, 0.3, 1
font "fonts/mac_humaine"
text "#str_69900"
textalign 1
textscale 0.31
visible 0
}

onNamedEvent Sub1On
{
set "Subtitle1::visible" "1";
}

onNamedEvent Sub1Off
{
set "Subtitle1::visible" "0";
}

onNamedEvent Sub2On
{
set "Subtitle2::visible" "1";
}

onNamedEvent Sub2Off
{
set "Subtitle2::visible" "0";
}

onNamedEvent SndEftOn
{
set "SoundEffect::visible" "1";
}

onNamedEvent SndEftOff
{
set "SoundEffect::visible" "0";
}


onNamedEvent SwaptextOne
{
set "Subtitle1::text" "#str_70002";
set "Subtitle2::text" "#str_70003";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextTwo
{
set "Subtitle1::text" "#str_70004";
set "Subtitle2::text" "#str_70005";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextThree
{
set "Subtitle1::text" "#str_70006";
set "Subtitle2::text" "#str_70007";
set "SoundEffect::text" "#str_69901";
}

onNamedEvent SwaptextFour
{
set "Subtitle1::text" "#str_70008";
set "Subtitle2::text" "#str_70009";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextFive
{
set "Subtitle1::text" "#str_70010";
set "Subtitle2::text" "#str_70011";
set "SoundEffect::text" "#str_69902";
}

onNamedEvent SwaptextSix
{
set "Subtitle1::text" "#str_70012";
set "Subtitle2::text" "#str_70013";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextSeven
{
set "Subtitle1::text" "#str_70014";
set "Subtitle2::text" "#str_70015";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextEight
{
set "Subtitle1::text" "#str_70016";
set "Subtitle2::text" "#str_70017";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextNine
{
set "Subtitle1::text" "#str_70018";
set "Subtitle2::text" "#str_69900";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextTen
{
set "Subtitle1::text" "#str_70019";
set "Subtitle2::text" "#str_70020";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextEleven
{
set "Subtitle1::text" "#str_70021";
set "Subtitle2::text" "#str_69900";
set "SoundEffect::text" "#str_69900";
}

onNamedEvent SwaptextTwelve
{
set "Subtitle1::text" "#str_70022";
set "Subtitle2::text" "#str_70023";
set "SoundEffect::text" "#str_69900";
}
}

 

english.lang file

 

//subtitle sound effects
"#str_69900" " "
"#str_69901" "Phuuuuzzzzz plup plup plup fffffttttt"
"#str_69902" "BANG pheeeee whizzz pheeee BANG\nSomething pink flies across the sky."
//subtitle voices
"#str_70000" "guard 1: The Inkyquizen, how you get to be a guard in that?"
"#str_70001" "guard 2: I hear you've got to be very pious."
"#str_70002" "guard 1: Well I eat a lot of pies, so I would qualify."
"#str_70003" "guard 2: I think you need to be more pious than that."
"#str_70004" "guard 1: Well I'll eat more pies then, then I'll be more pie us."
"#str_70005" "guard 2: You'll just end up fat, and all the inquisition lot I've seen are very thin."
"#str_70006" "guard 1: farts..."
"#str_70007" "guard 2: What is that smell, smells like cabbage and turnips, eww..."
"#str_70008" "guard 1: Best pies around are cabbage and turnip."
"#str_70009" "guard 2: eww... in one end and out tha other."
"#str_70010" "guard 1: I think its cows that have udders, not me am not a cow."
"#str_70011" "guard 2: Whats that in the sky?"
"#str_70012" "guard 1 : Is it a bird, a duck, its pink, its a pig, well I never, its a flying pig."
"#str_70013" "guard 2: Inventors guild at it again, ever since they proposed that they\ncould develop a pig driven bellows for the metal works,\npigs have been a flying."
"#str_70014" "guard 1: So what do the Inkyquizen do."
"#str_70015" "guard 2: Don't know, people go in, non come out."
"#str_70016" "guard 1: Maybe they get turned into pies,\nlike what happened at that barbers down in the old quarter."
"#str_70017" "guard 2: There ain't no old quarter, here."
"#str_70018" "guard 1: Oh, that was in Bridgeport, ah I miss those days,\na fresh meaty pie from the pie shop below the barbers,"
"#str_70019" "guard 1: then finding a gold ring hidden in the pie,\nthen down the local pawn shop, then off to the cochpitts for a bit of fun."
"#str_70020" "guard 2: Cock pits, whats that, is that like the dog pits they've got here."
"#str_70021" "guard 1: No, you go to the cochpitts, they lived in sunnydown lane,\nthey had a lot of daughters, you go there, cross their palms with silver and...\nmuffle muffle ...carlotter was my favourite she had an interesting trick"
"#str_70022" "guard 1: with two pie halfs, first she would... muffle muffle\n... then whip out the cream and... muffle muffle ...pirate hats and a cannonball...\nmuffle muffle ...then a bottle of ale and some more pies."
"#str_70023" "guard 2: Interesting, remind me never to go to sunnydown lane while am\nvisiting Bridgeport, that jolly roger sounds too painful."

 

  • Like 2
Link to comment
Share on other sites

why in the center, you can't work out where the sound is coming from in game because the sound comes from the same source, the guards in the game don't actually do any talking the conversation entity takes its sound from a bunch of sound shaders and plays them, it just an illusion that the guards are actually speaking, so if the text came from around where the guards actually are then it would make more sense to put the text near their heads than at their feet, and its more cinematic to put the guards at the left and right side of the screen, than lined up in the center.

 

the conversation was originally going to be from two guards behind a high wall, so they would have never have actually existed in a map.

Edited by stumpy
Link to comment
Share on other sites

Usually, movies and games use captions in the lower part of the image, because we read images from left to right and from up to down (in western civilizations, at least). If you leave captions at the top, the audience will focus on the text only. Besides, if you don't see the guards and they're not immediate danger, the information about who stands where is kind of redundant. Unless the two guards are shouting to each other across larger room, they would sound as standing in one spot anyway, as people generally stand close to each other while talking.

Link to comment
Share on other sites

 

 

 

changes to gui

 

windowDef Subtitle1
{
//rect 30, 10, 610, 70
rect 30, 368, 580,70
forecolor 1, 1, 1, 1
font "fonts/mac_humaine"
text "#str_70000"
textalign 1
textscale 0.31
visible 0
}

windowDef Subtitle2
{
//rect 30, 10, 580, 70
rect 30, 368, 580,70
forecolor 1, 1, 1, 1
font "fonts/mac_humaine"
text "#str_70001"
textalign 1
textscale 0.31
visible 0
}

windowDef SoundEffect
{
//rect 30, 50, 610, 70
rect 30, 404, 580, 70
forecolor 1, 0.3, 0.3, 1
font "fonts/mac_humaine"
text "#str_69900"
textalign 1
textscale 0.31
visible 0
}

 

changes to script

 

void subtitle_screen()
{
sys.print("walk into trigger.\n");
//overlayHandle = $player1.createOverlay("guis/subtitle.gui", 101 );
overlayHandle = $player1.createOverlay("guis/subtitle2.gui", 101 );
subtitle_runner();
//sys.wait(20);
subtitle_screen_deactivate();
}

 

 

 

 

tried it with the conversation entity and it doesn't work, when you turn on cameraview (it completely freezes the player so any $player1 script run functions don't work either) it turns off all access to gui's being displayed on screen, hud gets removed, and subtitles wont show, might be the reason the .dll never worked with doom 3 version 1.3.1 must be hardcoded somewhere in the c++ code.

 

the floor texture in the other video, the guards can't stand on it for some strange reason they just fall through it, whether they are on it or slightly above it they fall through it as though its not there, player can walk on it no problem.

Edited by stumpy
  • Like 1
Link to comment
Share on other sites

Is it possible to add a "radius"-trigger (how its called(?) to the player/actors?
So your script display the captions, when the player is nearby the actor/source.
And the captions dont get displayed, when the player is far away of the actor/source?

And is it possible to show captiontext, when something make a sound
(like in the thief 3 walktrough- and doom 3 cc video?)

Edited by freyk

Info: My portfolio and darkmod graphical installer
Amnesty for Bikerdude!

Link to comment
Share on other sites

there's hardly any comments in the code on how it works, so I don't know how that works or why it works, I haven't a clue on how to do that in tdm cos it doesn't seem to do sounds in the same way. Sound speakers that are used in doom 3 are only used in tdm for environment sounds the rest of the sounds is a complete mystery.

Link to comment
Share on other sites

the only way to get a radar system to work to enable a subtitle system to work is to get the sound name generated via the 's_drawSounds 1' cvar http://wiki.thedarkmod.com/index.php?title=Debugging_Your_Speakers

 

currently as far as I can tell there is no map script function that can access the sound name listed when setting s_drawSounds to 1 apparently this is the system used in the doom 3 [cc] mod.

 

you would also need the most of the information that is generated

soundName, occlusion_distance, real_distance, (settings on speaker - - >) min_distance, max_distance, speaker_number

 

not sure you would need the speaker number, but might be useful for debugging.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recent Status Updates

    • freyk

      Some years earlier i created some launchers for TDM. uploaded today some new sourcecode and executables on my github repo.
       
      · 0 replies
    • Epifire

      Say, I know it's been a while since the site got overhauled from the crash. But did we ever figure out if/how to get the recent topics & replies list back? It's not a total deal breaker but it was nice for becoming a thread creeper again...


      · 2 replies
    • Epifire

      Some of you who've been on the TDM discord know I was out of work last Winter, just putting in hrs for the developer portfolio. Currently I've been working a seasonal job to pay the bills and now I'm finally in my last week before I get bumped off. Things will be tight but I'm planning a long off period to make as much content as I can. Big plans in Unreal Engine as well as my most ambitious TDM collab yet! Never been so excited to be a stuck at home to pursue my life's work. With a lotta time and maybe some luck, I'm hoping to get enough art work done that I may start applying around to studios.
      · 4 replies
    • STiFU

      I finally got around to play Prey and I truly loved it. It is an incredible homage to System Shock and Deus Ex. While the gameplay is not en par with those two titles, the game makes up for that with its well written lore and story. The whole "world" just feells so authentic and it features a ton of really god environmental story-telling. Recommended for every immersive sim fan, i.e., everyone on this forum.
      · 2 replies
    • jaxa

      Alder Lake has arrived:
      https://forums.thedarkmod.com/index.php?/topic/18055-2016-cpugpu-news/page/15/&tab=comments#comment-466190
       
      · 0 replies
×
×
  • Create New...