Speech Recognition in Dialogs?

Post » Wed May 16, 2012 3:42 pm

I love all the voice acting in Skyrim, but one thing that always seemed strange to me is how my character always uses telepathy to 'talk' to the various npcs. I propose a hopefully simple voice recognition mod that allows the player to say the various dialog options instead of clicking on them. I went ahead and whipped up a really crude c# console app to handle the recognition if anyone with some modding experience knows of a way to pass messages to/from the console we'd have a basic working system.

Basically all my app does is take command line input in the form of "option1|option2|option3" etc and then when a match is heard it responds with the zero based index of the match e.g. 0, 1, or 2 for the above. So the idea is to just pass it "What have you got for sale?|Tell me more about Maven Black Briar.|And now you die!" and when the player says one of the phrases to automatically select that choice. if the player instead wants to click the choice or uses [Tab] to exit conversation simply send a "dialogend" message and the recognition engine will stop listening until a new set of words is passed.

tl;dr Voice activation c# app just needs someone capable of hooking up to skyrim's dialog options

SkyrimVoiceRecognition [UPDATED 11/26, now listens on local port 3000]
Spoiler
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Speech.Recognition;using System.Net.Sockets;using System.Net;//Code layout is pretty awful, but I wanted to keep it to 1 file for easy compiling by othersnamespace SkyrimVoiceRecognition{    class Program    {        public static SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();        public static Grammar current_dialog_options;        private static Int32 port;        private static TcpClient client;        private static NetworkStream clientStream;        static void Main(string[] args)        {            if (args.Length >= 1)                port = Int32.Parse(args[0]);            else                port = 3000;            System.Speech.Synthesis.SpeechSynthesizer speaker = new System.Speech.Synthesis.SpeechSynthesizer();            recognitionEngine.SetInputToDefaultAudioDevice();            recognitionEngine.SpeechRecognized += (s, command) =>            {                Console.WriteLine("Heard: " + command.Result.Semantics.Value);                ASCIIEncoding encoder = new ASCIIEncoding();                byte[] buffer = encoder.GetBytes(command.Result.Semantics.Value.ToString());                if (client.Connected)                {                    clientStream.Write(buffer, 0, buffer.Length);                    clientStream.Flush();                }            };            TcpListener tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), port);            tcpListener.Start();                        while(true){                Console.WriteLine("Listening for Skyrim on " + tcpListener.LocalEndpoint);                client = tcpListener.AcceptTcpClient();                clientStream = client.GetStream();                Console.WriteLine("Skyrim Connected");                HandleClientComm();            }        }        public static void setOptions(String[] dialog_options)        {            recognitionEngine.RecognizeAsyncStop();            if (current_dialog_options != null)                recognitionEngine.UnloadGrammar(current_dialog_options);            Choices c = new Choices();            for (int i = 0; i < dialog_options.Length; i++)            {                c.Add(new SemanticResultValue(dialog_options[i], i));            }            current_dialog_options = new Grammar(c);            recognitionEngine.LoadGrammar(current_dialog_options);            recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);        }        private static void HandleClientComm()        {            byte[] message = new byte[4096];            int bytesRead;            String line;            while (true)            {                bytesRead = 0;                try                {                    //blocks until a client sends a message                    bytesRead = clientStream.Read(message, 0, 4096);                }                catch(Exception e)                {                    break;                }                if (bytesRead == 0)                {                    break;                }                //message has successfully been received                ASCIIEncoding encoder = new ASCIIEncoding();                line = encoder.GetString(message, 0, bytesRead);                Console.WriteLine("Skyrim: " + line);                if (line.Equals("dialogend"))                    Program.recognitionEngine.RecognizeAsyncStop();                else                    Program.setOptions(line.Split('|'));            }            client.Close();            Console.WriteLine("Skyrim Disconnected");            Program.recognitionEngine.RecognizeAsyncStop();        }    }}
User avatar
joeK
 
Posts: 3370
Joined: Tue Jul 10, 2007 10:22 am

Post » Wed May 16, 2012 4:55 pm

fascinating....
User avatar
Anthony Diaz
 
Posts: 3474
Joined: Thu Aug 09, 2007 11:24 pm

Post » Wed May 16, 2012 12:16 pm

fascinating....
Not sure if you're being sarcastic or not lol. I know the c# stuff is super basic and connecting the ingame dialog with an external app is going to be the majority of the work, but hey I figured i might as well do what little bit I can to help :P.
User avatar
Daniel Brown
 
Posts: 3463
Joined: Fri May 04, 2007 11:21 am

Post » Wed May 16, 2012 1:55 pm

Wouldn't you need to connect this to Dragon Dictation or something? As a heavy, daily user of Dragon for work, this mod could be interesting and provide a more immersive experience...
User avatar
Liii BLATES
 
Posts: 3423
Joined: Tue Aug 22, 2006 10:41 am

Post » Wed May 16, 2012 12:54 pm

Wouldn't you need to connect this to Dragon Dictation or something? As a heavy, daily user of Dragon for work, this mod could be interesting and provide a more immersive experience...
I assume that's one of the products by http://nuance.com/dragon/index.htm? While it'd be nice it's not all that high up on my priority list. The one i'm currently using is the built-in one that comes with Windows Vista/7 because it's something a vast majority of skyrim users have built-in and it's ridiculously easy to hook into with C#. Although I'll admit it's definitely not the greatest at handling dictation it's plenty good (at least in my experience) at handling detecting a few preset commands (especially if you take the ~15 minutes of training it to understand you via Control Panel -> Ease of Access -> Speech Recognition). Since all it has to listen for is ~1-5 possible choices that usually don't sound anywhere near the same it makes it a lot easier on the engine to correctly determine the sentence you are speaking.

Honestly if anyone would pop in here and at least point me in the right direction I'd probably try and finish this myself. So far I've found out the UI code is some sort of flash based system and I've been digging around in the Interface.bsa and found the dialogmenu.swf and I'm hoping that the actionscript that handles telling it what to display is inside there. However I have 0 experience with flash so I'm not positive that's where the code would be nor am I have much luck decompiling the .swf to see.

Edit: Okay so far all you flash experts out there I think I'm pretty close to the target. Inside interface.bsa is dialogmenu.swf and if you get at the actionscripts inside, the decompiler I'm using has an actionscript it's labeling "Sprite 54(__Packages.DialogMenu) inside that file I'm 99% sure I've got the functions I need onItemSelect() and ShowDialogList(). HOWEVER I'm using some free trial decompiler that won't let me do anything beyond view the files, I've got 0 actionscript experience, and I don't know how to recompile the swf even if I manage to get the files extracted (although I can't imagine it's that hard). So if anyone's feeling generous I'm pretty sure I've got almost all the work done, all I need is actionscript to launch the c# app and to be able to read + write to it's console window. I can even compile the c# to an exe first if you're missing the tools to do so.
User avatar
TRIsha FEnnesse
 
Posts: 3369
Joined: Sun Feb 04, 2007 5:59 am

Post » Wed May 16, 2012 10:53 am

I usually hate double posters... but It's so close I can almost taste it lol. And the rules don't appear to specifically say no double posting (unless 2 equals spam i suppose)... so... since I just need a wee bit of help.... shameless bump?
User avatar
Tamika Jett
 
Posts: 3301
Joined: Wed Jun 06, 2007 3:44 am

Post » Thu May 17, 2012 1:59 am

Very interesting idea. Any mod that implements it will need SKSE. I'm not 100% sure how whoever does this will get your app and SK to talk but I have a feeling it's possible.
User avatar
Devin Sluis
 
Posts: 3389
Joined: Wed Oct 24, 2007 4:22 am

Post » Wed May 16, 2012 11:09 am

Wow I was just thinking about this and came here to post, obviously a lot of other people are thinking the same thing. Silent dialogue alienates the player from the game a lot, speaking into it will make it so much more believable. Man I can't wait for this to be developed.
User avatar
GRAEME
 
Posts: 3363
Joined: Sat May 19, 2007 2:48 am

Post » Wed May 16, 2012 11:11 pm

Very interesting idea. Any mod that implements it will need SKSE. I'm not 100% sure how whoever does this will get your app and SK to talk but I have a feeling it's possible.
As I haven't tried creating plugins for the OBSE I'm not sure if it will supply the hooks I need or not. I'm more than happy to switch to that interface as a permanent solution once it's available, however in the meantime all that really needs done is for the .swf I mentioned to get decompiled, a few changes made to the functions I listed earlier, and then recompiled. Essentially just overwriting Interfaces.bsa (technically just a file inside the .bsa but for most users it'd be easier to just overwrite). I'm sure flash has a means of interacting with other programs whether it be via COM, ActiveX, or some form of shellexecute. I just need someone savvier with flash to implement the flash changes and tell me their preferred method of communication with my app and I'd be more than happy to adapt my app to whatever scheme is easiest for them.

Wow I was just thinking about this and came here to post, obviously a lot of other people are thinking the same thing. Silent dialogue alienates the player from the game a lot, speaking into it will make it so much more believable. Man I can't wait for this to be developed.
Already underway (assuming you're a windows vista/7 user, sry macs). All I need is someone with a little expert flash knowledge to jump in here and help me knock out the last little bit. I've even tried my best to knock out the legwork for them by finding the injection points.

Or... I suppose if someone has the tools to properly decompile this and could zip up the source files for me I could probably figure out the rest on my own if need be.
User avatar
Mimi BC
 
Posts: 3282
Joined: Sat Oct 07, 2006 10:30 pm

Post » Wed May 16, 2012 7:31 pm

Neat.

If you could send key presses then you might be able to cast spells and shouts with voice commands.
User avatar
CSar L
 
Posts: 3404
Joined: Fri Nov 09, 2007 9:36 pm

Post » Wed May 16, 2012 11:47 pm

Neat.

If you could send key presses then you might be able to cast spells and shouts with voice commands.
Well sending keypresses isn't that hard (usually), however until I have an easy way of programmatically selecting shouts that option is out. Unless you want to say "shout" and it just presses "Z" but I'm assuming some of the more diehard players would like to actually scream their shouts and watch the effects. Which also brings up the potential issue of getting windows speech recognition to recognize gibberish (not usually too hard, just have to put the options in how they'd sound phonetically) and I'm also not sure how well it'd understand someone screaming at it while in combat. But don't worry, if this initial bit works fairly well and people show an interest in it I wouldn't have anything against adding that feature further down the road.
User avatar
helen buchan
 
Posts: 3464
Joined: Wed Sep 13, 2006 7:17 am

Post » Wed May 16, 2012 8:16 pm

I have done a system for selecting spells and put the selected to left (sinistra), right (dextera) or both (extremus) hand(s) with glovepie via voice recognition on Win 7.
It works fine with keyboard control active, but not if playing with xbox contoller like i do now. Keyboard controls are deactivated if you activate the controller.

Spoiler
if starting then  var.executed :=0  var.down :=0  var.beforedown := 2  var.lastdown :=90  var.previousdown := 100endvar.notclicked := falseif Microphone.said ("rufe hilfe auf") then {   say ("Kurah teh ipsum entspricht heilung")   wait 2   say ("inflammare entspricht feuerball")      wait 2   say ("frigus entspricht eisball")      wait 2   say ("fulminatio entspricht blitz werfen")      wait 2   say ("providere entspricht hellsehen")      wait 2   say ("scutum entspricht magisches schild")      wait 2   say ("obsecrare entspricht Beschw?rung")      wait 2   say ("extremus entspricht beidh?ndig")      wait 2   say ("sinista entspricht links")       wait 2   say ("dextera entspricht rechts")}if Microphone.said ("help") then {   say ("Kurah teh ipsum for healing")   wait 3   say ("inflammare for firebolt")      wait 3   say ("frigus for icebolt")      wait 3   say ("fulminatio for thunderbolt")      wait 3   say ("providere for divination")      wait 3   say ("scutum for magic shield")      wait 3   say ("obsecrare for resurection")      wait 3}if Microphone.said("cortex extremus",4) then {   var.down := 0   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   var.rightmouse :=1}if Microphone.said("cortex dextera",4) then {   var.down := 0   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   wait 1   var.leftmouse :=0}if Microphone.said("cortex sinistra",4) then {   var.down := 0   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=0}if Microphone.said("cura te ipsum extremus",4) then {   var.down := 4   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("cura te ipsum dextera",4) then {   var.down := 4   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("cura te ipsum sinistra",4) then {   var.down := 4   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=0}if Microphone.said("inflammare extremus",4) then {   var.down := 1   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("inflammare dextera",4) then {   var.down := 1   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("inflammare sinistra",4) then {   var.down := 1   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1      var.rightmouse :=0}if Microphone.said("frigus extremus",4) then {   var.down := 2   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("frigus dextera",4) then {   var.down := 2   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("frigus sinistra",4) then {   var.down := 2   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1      var.rightmouse :=0}if Microphone.said("fulminatio extremus",4) then {   var.down := 3   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("fulminatio dextera",4) then {   var.down := 3   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("fulminatio sinistra",4) then {   var.down := 3   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1      var.rightmouse :=0}if Microphone.said("providere extremus",4) then {   var.down := 5   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("providere dextera",4) then {   var.down := 5   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("providere sinistra",4) then {   var.down := 5   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1      var.rightmouse :=0}if Microphone.said("scutum extremus",4) then {   var.down := 7   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("scutum dextera",4) then {   var.down := 7   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("scutum sinistra",4) then {   var.down := 7   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1      var.rightmouse :=0}if Microphone.said("obsecrare extremus",4) then {   var.down := 11   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=1}if Microphone.said("obsecrare dextera",4) then {   var.down := 11   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.rightmouse :=1   var.leftmouse :=0}if Microphone.said("obsecrare sinistra",4) then {   var.down := 11   var.beforedown := var.down - 2   var.navigate := true   keyboard.q := true   keyboard.q := false   var.leftmouse :=1   var.rightmouse :=0}if (var.navigate and var.upped < 15) then {   keyboard.up = 1   keyboard.up = 0   wait 0.01   var.upped := var.upped + 1    if (var.upped = 14) {}if (var.upped = 15 and var.executed < var.down) then {      keyboard.down = 1      wait 0.01      keyboard.down = 0      var.executed := var.executed + 1}if var.navigate AND var.executed = var.down then {     var.navigate := false     var.executed := false     var.upped := 0     wait 0.01     if (var.leftmouse = 1 AND var.rightmouse = 1) then {         if (var.lastdown = var.down AND var.lastclick = "both") then {            say("wiederholung")            var.notclicked := true         }         if (var.notclicked = false) then {            mouse.LeftButton := true            wait 0.03            mouse.LeftButton := false            wait 0.03            mouse.RightButton := true            wait 0.03            mouse.RightButton := false            wait 0.03            var.leftmouse := 0            var.rightmouse := 0            var.click := "both"            var.previousdown := var.lastdown            var.lastdown := var.down            var.previousclick := var.lastclick            var.lastclick := var.click                      say("beide")         }     }     if (var.leftmouse = 1 AND var.rightmouse = 0) then {            if (var.lastdown = var.down AND var.lastclick = "left") then {            say("wiederholung links")            var.notclicked := true         }        if (var.notclicked = false) then {          mouse.leftbutton := true          wait 0.03          mouse.leftbutton := false          var.leftmouse := 0          var.click := "left"          var.notclicked := true          var.previousdown := var.lastdown          var.lastdown := var.down          var.previousclick := var.lastclick          var.lastclick := var.click                    say("links")        }    }     if (var.rightmouse = 1 AND var.leftmouse = 0 ) then {         if (var.lastdown = var.down AND var.lastclick = "right") then {            say("wiederholung rechts")            var.notclicked := true         }                  if (var.notclicked = false) then {          mouse.RightButton := true          wait 0.03          mouse.Rightbutton := false          var.rightmouse := 0          var.click := "right"          var.notclicked := true          var.previousdown := var.lastdown          var.lastdown := var.down          var.previousclick := var.lastclick          var.lastclick := var.click          say("rechts")          }     }     keyboard.q = 1     wait 0.01}
User avatar
Donald Richards
 
Posts: 3378
Joined: Sat Jun 30, 2007 3:59 am

Post » Wed May 16, 2012 1:51 pm

As I haven't tried creating plugins for the OBSE I'm not sure if it will supply the hooks I need or not. I'm more than happy to switch to that interface as a permanent solution once it's available, however in the meantime all that really needs done is for the .swf I mentioned to get decompiled, a few changes made to the functions I listed earlier, and then recompiled.
Oh, damn. That's pretty clever, I would not have even thought of that.
User avatar
Danii Brown
 
Posts: 3337
Joined: Tue Aug 22, 2006 7:13 am

Post » Wed May 16, 2012 5:15 pm

Step 2 would be to make this work for dragon shouts. :D
User avatar
Greg Cavaliere
 
Posts: 3514
Joined: Thu Nov 01, 2007 6:31 am

Post » Thu May 17, 2012 1:15 am

I have done a system for selecting spells and put the selected to left (sinistra), right (dextera) or both (extremus) hand(s) with glovepie via voice recognition on Win 7.
It works fine with keyboard control active, but not if playing with xbox contoller like i do now. Keyboard controls are deactivated if you activate the controller.
That's actually pretty sweet. And it's nice to see I'm not the only one working on some voice activation. However I'm hoping I'll be able to hook mine into the game itself so that it's a little more universal than mouse/keyboard emulation (everyone has different favorites). Correct me if I'm wrong but it looks like you're automating opening the favorites menu and clicking spells, which if that's the case if you press Q and highlight a favorite you can then press 1-8 and assign it to a number key.

Step 2 would be to make this work for dragon shouts. :D
Step 2 (at 5:47am and haven't slept yet) is to select a bunch of sneak perks, pop an invisibility potion, stealth roll into someone's house and force them at dagger point to help me with the flash part. Dragon shouts is step 2.5 once i've slain the flash developer and absorbed his/her soul so that I don't need one for the next step... Something like that.

Edit: Started playing with step 2.5. Kinda feel [censored] yelling Fus Ro Dah at my mic, however it's recognizing it with some success listening for "foose rah dah". Actually though won't it be kinda funny for YOU to yell and then your character just copies your yell? Almost need to make him not play a sound then, but then the animation will seem super late. Hmmmm.....

Edit2: I'm off to sleep, maybe someone will stumble upon it. If not my research so far looks like i'll be stuck with using local sockets for the flash <-> c# communication.... fun fun fun.
User avatar
David John Hunter
 
Posts: 3376
Joined: Sun May 13, 2007 8:24 am

Post » Thu May 17, 2012 1:12 am

Alright so I've got it decompiling the .swf to either a .fla or a bunch of resource files, however I'm not too sure how to get it back into a .swf. There doesn't appear to be many resources for free flash development. If someone could at least get me to the point where I can rebuild the .swf I can start experimenting with actionscript edits.
User avatar
Hairul Hafis
 
Posts: 3516
Joined: Mon Oct 29, 2007 12:22 am

Post » Wed May 16, 2012 11:16 pm

Don't really have any technical experience in this area to add to the project, but I love where it's going. Good job. :D
User avatar
Daniel Brown
 
Posts: 3463
Joined: Fri May 04, 2007 11:21 am

Post » Wed May 16, 2012 5:16 pm

Don't really have any technical experience in this area to add to the project, but I love where it's going. Good job. :D
Haha thanks for the support.

Anyways I've got the flash files recompiling (terribly broken though, they seem to be missing resources or something) however I'm at least able to modify the actionscript code so I've been focusing on that for the time being. But that brings me to my next roadblock, executing the external app. I've been trying with flash's NativeProcess function however it requires an instance of NativeProcessStartupInfo but when I go to compile it's saying that the class or interface NativeProcessStartupInfo can't be found. Something is obviously fishy here as NativeProcess IS found and can't be used without NativeProcessStartupInfo. Why would only one be available but not the other when they obviously depend on one another.

Edit: Turns out nativeprocess only works on Adobe AIR programs not regular flash? Back to the local sockets idea I guess.

Edit2: I [censored] [censored] [censored] [censored] [censored] [censored] hate flash. It plays my videos... which soon enough will be covered by html5. Once that happens I'm crossing my fingers it gets hit by a bus :P. Anyways it's not wanting to load anything from it's own damn packages... i.e. flash.desktop, flash.net, etc.
User avatar
rolanda h
 
Posts: 3314
Joined: Tue Mar 27, 2007 9:09 pm

Post » Wed May 16, 2012 9:58 pm

Not sure if you're being sarcastic or not lol. I know the c# stuff is super basic and connecting the ingame dialog with an external app is going to be the majority of the work, but hey I figured i might as well do what little bit I can to help :P.
wasn't being sarcastic.
User avatar
Mandy Muir
 
Posts: 3307
Joined: Wed Jan 24, 2007 4:38 pm

Post » Wed May 16, 2012 8:22 pm

Alright so after even more tinkering it looks like their flash VM doesn't contain all of the regular flash libraries. I've been debugging by modifying the npc name getting function to instead return my debug string and I've been getting undefined for a handful of functions so far with two notable ones being System.security.sandboxType and XMLSocket. The sandbox one isn't much of a surprise but at least now I know it's not a security issue I'm hitting.

Edit: I might have to give up till the CK comes out. I'm not really sure what else I can do here, I've pretty much tried the methods I had in mind and Skyrim's vm just doesn't seem to have the program interoperability or networking functions I need.
User avatar
Siobhan Wallis-McRobert
 
Posts: 3449
Joined: Fri Dec 08, 2006 4:09 pm

Post » Thu May 17, 2012 12:28 am

Oh my. If you get this working, and it seems you are well on your way, this would be so awesome. I applaud your creativity for even thinking of this. Knowing that this is possible makes it all the better.
User avatar
JD bernal
 
Posts: 3450
Joined: Sun Sep 02, 2007 8:10 am

Post » Wed May 16, 2012 7:42 pm

Oh my. If you get this working, and it seems you are well on your way, this would be so awesome. I applaud your creativity for even thinking of this. Knowing that this is possible makes it all the better.
It's fairly close to being done. However the last bit is proving to be nigh impossible :/.

As I've never used actionscript before this I'm not positive I've exhausted all options yet, but from looking at the http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=Part2_AS2_LangRef_1.html and trial and error in skyrim it appears that
1) The XMLSocket class doesn't appear to exist in skyrim's vm
2) I can't write to files (really ghetto but I was going to just keep polling the last modified date on a file and pass messages by updating the file)
3) NetStream only works for loading videos
4) ExternalInterface only sends commands to the object containing the flash (not an arbitrary external app)

it doesn't look like there is anything else I can do to communicate with the outside world :/, if anyone has any ideas I'm all ears (and no, implementing the voice recog in flash is a no-go, looked into that too lol).
User avatar
phil walsh
 
Posts: 3317
Joined: Wed May 16, 2007 8:46 pm


Return to V - Skyrim