Release EDDI Scripts and EDDI enabled VA Commands Thread

Have you checked the EDDI tab "Text-to-Speech" ? The third slider from the top distorts the voice.
1683641667558.png

Sorry, picture only in German.
 
My EDDI voice (Ivona Amy) sounds like it's underwater when used by an EDDI script. HCS voicepacks are fine. Any ideas?

Cheers.
As an addition to @nepomuk's reply, is your ship damaged? EDDI is supposed to sound distorted when your ship takes a certain amount of damage. I also seem to remember from a long time ago (so may not be relevant now) that EDDI sometimes got stuck using the 'damaged' voice even after a repair. Something to consider anyway. :)
 
My EDDI voice (Ivona Amy) sounds like it's underwater when used by an EDDI script. HCS voicepacks are fine. Any ideas?

Cheers.
in the text to speech tab, is the option enabled to distort the voice on ship damage? And is the ship's hull damaged?

You can also adjust the effects level from the same tab.

Edit: It looks like @nepomuk and @Darkcyde are already on the case. o7
 
Thanks i will try it too. My EDDI voice is IVONA 2 Brian. The thing is with orginal code :
Code:
 VoiceDetails().name
Brian, from time to time plays as NPC on radio like it gets not prevented at all.
BTW. Is there any repository of usefull additional scripts created by community?
It's possible that EDDI is falling back in some cases to your default voice when an error occurs trying to use another voice.
There is no official repository but this thread is full of useful scripts and commands.
 
I don't know, someone already made a script for this, I was bothered because eddi didn't recognize the fleet carriers in Entered normal space, so I tweaked the scripts and found a way to make it work, I used the script next destination to save the name of the destination in which we are going to exit the supercruise, so when we exit the Entered normal space script will check if the name of the destination matches event.bodyname, if that is the case it will say the name of the body, if not it will say the name of the destination selected before .

I used Commander Darkcyde's Entered normal space script as a base (I'm Brazilian so I translated the lines into Portuguese, I also don't understand much about programming or how eddi works, I just looked at the scripts and tested to see how it worked, so it could be that have a better way to do this)

Entered normal space script

{_ Context _} {SetState('eddi_context_last_subject', 'fsd')} {SetState('eddi_context_last_action', 'disengage')} {SetState('eddi_context_system_name', event.systemname)} {SetState('eddi_context_body_name', event.bodyname)} {SetState('eddi_context_body_type', event.bodytype)} {SetState('eddi_context_body_system', event.systemname)} {_ Define notifications function _} {set station_notifications to: {set station_missions to F("Mission check station")} {set station_crimes to F("Crime check station")} {if station_missions || station_crimes: {_ Pause for station ATC before speaking again _} {if find(station.model, "Porto Estelar") > -1 || find(station.model, "Asteroide") > -1: {Pause(10000)} } Informação: {if station_missions: {Pause(500)} {station_missions} } {if station_crimes: {Pause(500)} {station_crimes} } } } {Pause(500)} {OneOf("saindo da supervelocidade", "{OneOf('entramos no','retornnamos ao','saimos para o')} espaço normal")} {if event.bodytype_invariant = "Planeta" || event.bodytype_invariant = "Lua": {OneOf("perto de", "próximo de", "nas proximidades de")} {set time to SecondsSince(0) - state.eddi_context_approach_time} {if time < 60: {set settlement to state.eddi_context_last_settlement} {set reportStation to StationDetails(settlement, event.systemname)} {if reportStation: {SetState('eddi_context_body_name', settlement)} {if reportStation.Model.invariantName != "Unknown Station": {P(reportStation.model, "Estação")}, } {P(settlement, "Estação")} {station_notifications} |else: {P(settlement, "Estação")}. } |else: {set reportBody to BodyDetails(event.bodyname, event.systemname)} {if event.bodyname = state.d_name: {event.bodytype)} {P(reportBody.shortname, "Corpo")} |elif state.l_name !="" && state.d_name !="": {state.l_name}{state.d_name} |elif sate.l_name !="": {state.l_name} |else: {state.d_name} }. } |elif event.bodytype_invariant = "Estrela": {set reportBody to BodyDetails(event.bodyname, event.systemname)} {OneOf("perto de", "próximo de", "nas proximidades de")} {if reportBody.shortname = event.system: estrela primaria |else: estrela {P(reportBody.shortname, "Corpo")} }. |elif event.bodytype_invariant = "Estação": {set reportStation to StationDetails(event.bodyname, event.systemname)} {OneOf("perto de", "próximo de", "nas proximidades de")} {P(reportStation.model, "Estação")}, {P(event.bodyname, "Corpo")}. {station_notifications} |elif event.bodytype_invariant = "Anel Planetario": Anel-{P(token(event.bodyname, " Anel", 0), "Corpo")}, de {P(reportBody.shortname, "Corpo")}. |elif event.bodytype = "None": {set body to slice(event.bodyname, len(event.systemname) + 1)} {if len(body) > 1: , proximo a estrelas {set cur to 0} {set length to len(body) - 1} {while cur < len(body): {slice(body, cur, 1)} {set cur to cur + 1} {if cur = length: e |elif cur < length:, } }. } |elif state.l_name != "" : Nas Proximidades de {state.l_name} |elif state.d_name !="": Nas Proximidades de {state.d_name} }
Next destination script
{SetState("l_name",event.localizedName)} {SetState("d_name",event.name)}
 
Last edited:
I don't know, someone already made a script for this, I was bothered because eddi didn't recognize the fleet carriers in Entered normal space, so I tweaked the scripts and found a way to make it work, I used the script next destination to save the name of the destination in which we are going to exit the supercruise, so when we exit the Entered normal space script will check if the name of the destination matches event.bodyname, if that is the case it will say the name of the body, if not it will say the name of the destination selected before .

I used Commander Darkcyde's Entered normal space script as a base (I'm Brazilian so I translated the lines into Portuguese, I also don't understand much about programming or how eddi works, I just looked at the scripts and tested to see how it worked, so it could be that have a better way to do this)

Entered normal space script

{_ Context _} {SetState('eddi_context_last_subject', 'fsd')} {SetState('eddi_context_last_action', 'disengage')} {SetState('eddi_context_system_name', event.systemname)} {SetState('eddi_context_body_name', event.bodyname)} {SetState('eddi_context_body_type', event.bodytype)} {SetState('eddi_context_body_system', event.systemname)} {_ Define notifications function _} {set station_notifications to: {set station_missions to F("Mission check station")} {set station_crimes to F("Crime check station")} {if station_missions || station_crimes: {_ Pause for station ATC before speaking again _} {if find(station.model, "Porto Estelar") > -1 || find(station.model, "Asteroide") > -1: {Pause(10000)} } Informação: {if station_missions: {Pause(500)} {station_missions} } {if station_crimes: {Pause(500)} {station_crimes} } } } {Pause(500)} {OneOf("saindo da supervelocidade", "{OneOf('entramos no','retornnamos ao','saimos para o')} espaço normal")} {if event.bodytype_invariant = "Planeta" || event.bodytype_invariant = "Lua": {OneOf("perto de", "próximo de", "nas proximidades de")} {set time to SecondsSince(0) - state.eddi_context_approach_time} {if time < 60: {set settlement to state.eddi_context_last_settlement} {set reportStation to StationDetails(settlement, event.systemname)} {if reportStation: {SetState('eddi_context_body_name', settlement)} {if reportStation.Model.invariantName != "Unknown Station": {P(reportStation.model, "Estação")}, } {P(settlement, "Estação")} {station_notifications} |else: {P(settlement, "Estação")}. } |else: {set reportBody to BodyDetails(event.bodyname, event.systemname)} {if event.bodyname = state.d_name: {event.bodytype)} {P(reportBody.shortname, "Corpo")} |elif state.l_name !="" && state.d_name !="": {state.l_name}{state.d_name} |elif sate.l_name !="": {state.l_name} |else: {state.d_name} }. } |elif event.bodytype_invariant = "Estrela": {set reportBody to BodyDetails(event.bodyname, event.systemname)} {OneOf("perto de", "próximo de", "nas proximidades de")} {if reportBody.shortname = event.system: estrela primaria |else: estrela {P(reportBody.shortname, "Corpo")} }. |elif event.bodytype_invariant = "Estação": {set reportStation to StationDetails(event.bodyname, event.systemname)} {OneOf("perto de", "próximo de", "nas proximidades de")} {P(reportStation.model, "Estação")}, {P(event.bodyname, "Corpo")}. {station_notifications} |elif event.bodytype_invariant = "Anel Planetario": Anel-{P(token(event.bodyname, " Anel", 0), "Corpo")}, de {P(reportBody.shortname, "Corpo")}. |elif event.bodytype = "None": {set body to slice(event.bodyname, len(event.systemname) + 1)} {if len(body) > 1: , proximo a estrelas {set cur to 0} {set length to len(body) - 1} {while cur < len(body): {slice(body, cur, 1)} {set cur to cur + 1} {if cur = length: e |elif cur < length:, } }. } |else: Nas Proximidades de {state.l_name} {state.d_name} }
Next destination script
{SetState("l_name",event.localizedName)} {SetState("d_name",event.name)}
Hi MrOz!

I'm glad you like my EDDI personality. I put a lot of work into it for my own personal enjoyment of the game (and enjoyment of programming it!), and only released it because others said they would like to try it out. Now many people like to use it, or base their own from it. 😊

I like your idea, but did you know my personality already has this function? It is in the Music script, at the top:
Code:
{if event.musictrack = "DestinationFromSupercruise":
    {set reportSystem to SystemDetails(system.systemname)}
    {if find(reportSystem.carriersignalsources, status.destination_localized_name) > -1:
        {if status.destination_localized_name = carrier.name:
            Welcome back to your carrier, {F("Honorific")}.
        |else:
            {Occasionally(2, "The")} Fleet Carrier
            {status.destination_localized_name} is
            {OneOf("{OneOf('located', 'orbiting', 'stationed')} here",
                   "{OneOf('orbiting', 'stationed')} at this location",
                   "in orbit {OneOf('here', 'at this location')}")}.
        }
    |elif status.destination_localized_name:
        Arrived at {status.destination_localized_name}.
    }
|elif event.musictrack = "GalaxyMap":
    {SetState('eddi_onfoot_gui_status', "GalaxyMap")}
|elif event.musictrack = "SystemMap":
    {SetState('eddi_onfoot_gui_status', "SystemMap")}
|elif event.musictrack = "MainMenu":
    {SetState('eddi_relog', false)}
    {SetState('eddi_logoff_time', SecondsSince(0))}
|elif event.musictrack = "NoTrack":
    {SetState('eddi_onfoot_gui_status', "NoTrack")}
}
It uses variables already in the default EDDI personality, so no need to make any new ones for it to work, and no need to make any changes to other scripts. You can try it, and see what you think. 😊
 
Hi MrOz!

I'm glad you like my EDDI personality. I put a lot of work into it for my own personal enjoyment of the game (and enjoyment of programming it!), and only released it because others said they would like to try it out. Now many people like to use it, or base their own from it. 😊

I like your idea, but did you know my personality already has this function? It is in the Music script, at the top:
Code:
{if event.musictrack = "DestinationFromSupercruise":
    {set reportSystem to SystemDetails(system.systemname)}
    {if find(reportSystem.carriersignalsources, status.destination_localized_name) > -1:
        {if status.destination_localized_name = carrier.name:
            Welcome back to your carrier, {F("Honorific")}.
        |else:
            {Occasionally(2, "The")} Fleet Carrier
            {status.destination_localized_name} is
            {OneOf("{OneOf('located', 'orbiting', 'stationed')} here",
                   "{OneOf('orbiting', 'stationed')} at this location",
                   "in orbit {OneOf('here', 'at this location')}")}.
        }
    |elif status.destination_localized_name:
        Arrived at {status.destination_localized_name}.
    }
|elif event.musictrack = "GalaxyMap":
    {SetState('eddi_onfoot_gui_status', "GalaxyMap")}
|elif event.musictrack = "SystemMap":
    {SetState('eddi_onfoot_gui_status', "SystemMap")}
|elif event.musictrack = "MainMenu":
    {SetState('eddi_relog', false)}
    {SetState('eddi_logoff_time', SecondsSince(0))}
|elif event.musictrack = "NoTrack":
    {SetState('eddi_onfoot_gui_status', "NoTrack")}
}
It uses variables already in the default EDDI personality, so no need to make any new ones for it to work, and no need to make any changes to other scripts. You can try it, and see what you think. 😊


I didn't know, in fact I don't use all of your personality, I'm just using some of her scripts that I thought were better than the default, as my English isn't very good I preferred to stick with the default already translated, and I used only two or three your scripts, because I thought it was better than the default ones, I didn't use your entire personality because I would have to translate everything and there are a lot of scripts and I ended up being too lazy to do it, I want to translate everything any time to see how it really is
 
Yes, with the event "Glide" (or/and "Near surface") in cooperation with the function BodyDetails() this is possible.
Take a look at the events.

EDIT, an example:
Code:
{_ Context }
{SetState('eddi_context_last_subject', 'fsd')}
{SetState('eddi_context_last_action', 'glide')}
{SetState('eddi_context_system_name', event.system)}
{SetState('eddi_context_body_name', event.body)}
{SetState('eddi_context_body_system', event.system)}

{if event.gliding:
    Glide {Occasionally(2, "mode")}
    {OneOf("engaged.", "initiated.")}

    {Pause(1000)}
    {set body to BodyDetails(event.body, event.system)}
    {if !body.name || body.name = "" || !body.gravity:
        Planetary approach data not available.
    |else:
        {if body.landable:
            {set gravity to round(body.gravity,2)}
            {if gravity > 4:
                Danger! {body.bodytype} {P(body.shortname, "body")} is an extremely high gravity world, at {gravity} G.
            |elif gravity > 2:
                Caution! {body.bodytype} {P(body.shortname, "body")} is a high gravity world, at {gravity} G.
            |elif gravity > 0.5:
                Warning! {body.bodytype} {P(body.shortname, "body")} is a medium gravity world, at {gravity} G.
            |else:
                {body.bodytype} {P(body.shortname, "body")} is a low gravity world, at {gravity} G.
            }
        }
    }
|else:
    Glide completed.
}

Line 13: {set body to BodyDetails(event.body, event.system)} - the variable "body" gets values from the function BodyDetails() from the current body
Line 17: {if body.landable: ... - Query for landing possibility or not (true or false)
Line 18: {set gravity to round(body.gravity,2)} - the variable "gravity" gets values of gravity from this body
 
Last edited:
Hello.
My name is Eridani5, and I am a Nerd.
As such, making my experience playing Elite as immersive as possible goes a long way towards my enjoyment of the game. Obviously, EDDI does a lot to further this. So here is my question. I have an idea for a script that will sometimes, play a different piece of music, specifically, while lifting off or undocking.

In my mind, the script should look something like this:

Code:
{Occasionally(10,
    OneOf
        (
        {Play('Music_Cue_1.mp3', true, 100),
        {Play('Music_Cue_2.mp3', true, 100),
        {Play('Music_Cue_3.mp3', true, 100)
        )
}

Unfortunately, it seems I can't use the Play function inside a OneOf. Do any of you have any idea if this is achievable, and if so, how?

Thanks to everyone who contributes on these boards and, thank you in advance for any pointers regarding my question.

- Eridani5
 
Hello.
My name is Eridani5, and I am a Nerd.
As such, making my experience playing Elite as immersive as possible goes a long way towards my enjoyment of the game. Obviously, EDDI does a lot to further this. So here is my question. I have an idea for a script that will sometimes, play a different piece of music, specifically, while lifting off or undocking.

In my mind, the script should look something like this:

Code:
{Occasionally(10,
    OneOf
        (
        {Play('Music_Cue_1.mp3', true, 100),
        {Play('Music_Cue_2.mp3', true, 100),
        {Play('Music_Cue_3.mp3', true, 100)
        )
}

Unfortunately, it seems I can't use the Play function inside a OneOf. Do any of you have any idea if this is achievable, and if so, how?

Thanks to everyone who contributes on these boards and, thank you in advance for any pointers regarding my question.

- Eridani5
If you wish to use VoiceAttack along with the EDDI Event liftoff then you could just use this, you'd have to add whatever audio files you wanted
1690604217167.png

The same thing could also be done for the undocked event
 
Last edited:
For example, you could evaluate the game status.
state.environment
or the corresponding event itself.
E.g. when the event "Undocked event" is triggered, generate random number (for three music titles, random 1 out of 3),
select the music title according to the number and play it. The same with another event e.g. "Liftoff event".
Sorry, can't tell you exactly right now. i'm at work (maybe in the evening). Maybe CMDR @Darkcyde or CMDR @T'kael will drop by, they'll know right away.
Or you can do it as CMDR @UseLessUK described, with Voice Attack.

Translated with www.DeepL.com/Translator (free version)
 
Hello.
My name is Eridani5, and I am a Nerd.
As such, making my experience playing Elite as immersive as possible goes a long way towards my enjoyment of the game. Obviously, EDDI does a lot to further this. So here is my question. I have an idea for a script that will sometimes, play a different piece of music, specifically, while lifting off or undocking.

In my mind, the script should look something like this:

Code:
{Occasionally(10,
    OneOf
        (
        {Play('Music_Cue_1.mp3', true, 100),
        {Play('Music_Cue_2.mp3', true, 100),
        {Play('Music_Cue_3.mp3', true, 100)
        )
}

Unfortunately, it seems I can't use the Play function inside a OneOf. Do any of you have any idea if this is achievable, and if so, how?

Thanks to everyone who contributes on these boards and, thank you in advance for any pointers regarding my question.

- Eridani5
I want to support this pattern (though it does need a few syntax corrections) but the nested custom functions seem to be creating some issues with how the data is being passed through the Cottle rendering engine. It might be possible to correct this with a rewrite of the rendering engine but I'm not certain. I'll have to tinker with it and see what I can come up with.
 
Hello.
My name is Eridani5, and I am a Nerd.
As such, making my experience playing Elite as immersive as possible goes a long way towards my enjoyment of the game. Obviously, EDDI does a lot to further this. So here is my question. I have an idea for a script that will sometimes, play a different piece of music, specifically, while lifting off or undocking.

In my mind, the script should look something like this:

Code:
{Occasionally(10,
    OneOf
        (
        {Play('Music_Cue_1.mp3', true, 100),
        {Play('Music_Cue_2.mp3', true, 100),
        {Play('Music_Cue_3.mp3', true, 100)
        )
}

Unfortunately, it seems I can't use the Play function inside a OneOf. Do any of you have any idea if this is achievable, and if so, how?

Thanks to everyone who contributes on these boards and, thank you in advance for any pointers regarding my question.

- Eridani5
You can get around this by programming the code in a different way. Take the Play() out of the Occasionally(), and set your file path.

The below works perfectly:
Code:
{Occasionally(4, "{set file to OneOf('Music_Cue_1.mp3', 'Music_Cue_2.mp3', 'Music_Cue_3.mp3')}")}

{if file:
    {Play(cat('C:\\Users\\Jason\\AppData\\Roaming\\EDDI\\Sounds\\Music\\', file), true, 100)}
}
Note the double \ in the file path, as you have to 'escape' them. I would also suggest a much smaller number for the Occasionally() otherwise you'll almost never hear it. Having tested the above a bit, I found 3 or 4 to be better, although it is down to personal preference.

Have fun! 😊

EDIT: After some additional testing, I've found that if your file path has other characters that need to be 'escaped', the Play() function doesn't like it. So for example, if your path has a single quote in, like \\jay's, then using the \ to escape it \\jay\'s will not work. I guess this may be a limitation of Play(). Something to be aware of.

EDIT 2: Made the Play() code more efficient.
 
Last edited:
They say bad things happen in threes...

1. So a month ago I fractured my wrist at work. This meant I couldn't play, and more importantly, I couldn't really do much testing of the things I want to do in my EDDI personality. The two fractures were in one of the long forearm bones (the Radius) at the wrist end, running lengthways down the bone. Very uncommon apparently.

2. Two weeks ago, the doctors found it wasn't healing, and was in fact getting worse. The fractured parts were actually splitting off even more, so I had to have emergency surgery, and metal plate bolted in. For some reason they wouldn't let me install Predator wrist blades, or Wolverine claws. Spoilsports. So, I still have another four weeks of resting my wrist, and still no gaming.

3. Yesterday, my second monitor decided that it was going to be an ass, and now the HDMI interface will only detect as 640x480 @ 32Hz. I've tried everything I can find online to try fixing it, but no luck. It's a no-so-expensive Asus gaming monitor, so only has HDMI, DVI, and VGA. My GPU only has HDMI and DP. I think I may have an HDMI to DVI adapter somewhere, but I think it's in the loft, which is not really easy to get to while only using one hand.

So, I'm really hoping those are the three bad things that are going to happen. And I really hope I can get back to Elite soon and carry on with my EDDI personality. I wanted to make a new release at the end of August, but then this all happened. Hopefully I can do it after my wrist is fully healed.

I know this is kind of an odd post, and not really script related, but I wanted you to know that I've not forgotten about EDDI and Elite, and that I do intend to keep posting my personality for others to use for the foreseeable future (considering it's been a very long time since my last release).

Happy gaming everyone, and I hope to be back soon. 😊

DC
 
They say bad things happen in threes...

1. So a month ago I fractured my wrist at work. This meant I couldn't play, and more importantly, I couldn't really do much testing of the things I want to do in my EDDI personality. The two fractures were in one of the long forearm bones (the Radius) at the wrist end, running lengthways down the bone. Very uncommon apparently.

2. Two weeks ago, the doctors found it wasn't healing, and was in fact getting worse. The fractured parts were actually splitting off even more, so I had to have emergency surgery, and metal plate bolted in. For some reason they wouldn't let me install Predator wrist blades, or Wolverine claws. Spoilsports. So, I still have another four weeks of resting my wrist, and still no gaming.

3. Yesterday, my second monitor decided that it was going to be an ass, and now the HDMI interface will only detect as 640x480 @ 32Hz. I've tried everything I can find online to try fixing it, but no luck. It's a no-so-expensive Asus gaming monitor, so only has HDMI, DVI, and VGA. My GPU only has HDMI and DP. I think I may have an HDMI to DVI adapter somewhere, but I think it's in the loft, which is not really easy to get to while only using one hand.

So, I'm really hoping those are the three bad things that are going to happen. And I really hope I can get back to Elite soon and carry on with my EDDI personality. I wanted to make a new release at the end of August, but then this all happened. Hopefully I can do it after my wrist is fully healed.

I know this is kind of an odd post, and not really script related, but I wanted you to know that I've not forgotten about EDDI and Elite, and that I do intend to keep posting my personality for others to use for the foreseeable future (considering it's been a very long time since my last release).

Happy gaming everyone, and I hope to be back soon. 😊

DC
Sorry to hear you're having such misfortune.

Suggest you might test the HDMI monitor as the primary and only monitor to determine if it's the monitor or the graphics card.

Let's hope you're due for some positives on the horizon... and Odyssey as well.
 
Top Bottom