Announcement

Collapse
No announcement yet.

VR Expansion Plugin

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Thanks for the reply! Ahh yeah, we're still on 4.22. Good to know it isn't just me at least! I don't see the GetOpenVRControllerType node either, so it's probably time to update the plugin on my end before I do anything else.

    Comment


      Hey I'm trying to build a system similar to Boneworks, where in the players hand is physical in the world and can't go through solid objects. To accomplish this I've dragged in the skeletal mesh from the valve unreal VR demo level and added it as a grippable skeletal mesh component to a custom player character based on your VR character. I set the grip type on it to custom. I then "grab" it with a grip motion controller component and attempt to set location with sweep on grip tick. Unfortunately grip tick isn't ever firing even though I can hit breakpoints on the component gip event and the owners grip. Any idea what I'm doing wrong or if this is even the best way to approach something like this?
      Check out my weekly dev blog: The Undead Dev

      Comment


        Hi all,

        I am starting to learn Unreal and try to learn the basics. I have an Oculus Quest and loaded this great Plugin. I tried to get the Gesture System to work, but it writes no Data in the Gesture Database. Is it possible, that there are some problems with the Oculus Quest or my project?
        I copied every Step from this tutorial https://www.youtube.com/watch?v=z78CMOwGWxM&list=PLngZ5l9HmlOQBtL8dzDD1lTAdXhsVEm4g&index=7

        My Project Settings are changed for the Quest (Platforms - Android - APK Packaging). I launch the game directly to the Quest (see Screenshot). I can't use the VR Preview because Oculus Link is not working for me (endless 3 Dots Loading Screen).
        When I paint gestures during the game, they get green but don't get saved in the Database. I also tried the "Demo Content 6_Gestures" from the Plugin. It says "New Gesture Recorded" but when i try to paint it, it just crashes. And it also saves no new Gestures in the Database. But at least I can use the Gestures stored in the "DA_GesturesDB_Demo".

        Below the Screenshots you can see the part of the log file when the game crashes.

        Thanks,
        Tommy



        Click image for larger version

Name:	Capture_VR_Pawn.PNG
Views:	379
Size:	284.2 KB
ID:	1702387


        Click image for larger version

Name:	Capture_Launch.jpg
Views:	267
Size:	341.3 KB
ID:	1702388

        LogPlayLevel: 12-28 12:40:58.704 19660 20090 D UE4 : *** JavaEnvDestructor: 20090
        LogPlayLevel: 12-28 12:40:58.705 19660 20089 D UE4 : AndroidEGL::ResetDisplay()
        LogPlayLevel: 12-28 12:40:58.705 19660 20089 D UE4 : *** JavaEnvDestructor: 20089
        LogPlayLevel: 12-28 12:40:59.793 19660 19688 D UE4 : Used memory: 366211
        LogPlayLevel: 12-28 12:41:00.697 19660 20106 D UE4 : [2019.12.28-11.41.00:697][232]LogTcpMessaging: Started Connection to '127.0.0.1:59834'
        LogPlayLevel: 12-28 12:41:00.698 19660 20106 D UE4 : [2019.12.28-11.41.00:698][233]LogTcpMessaging: Discovered node 'A7028A2C40A5692812679294CCBB0A39' on connection '127.0.0.1:59834'...
        LogPlayLevel: 12-28 12:41:10.025 19660 19688 D UE4 : Used memory: 367683
        LogPlayLevel: 12-28 12:41:20.330 19660 19688 D UE4 : Used memory: 368087
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:376][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.377 19660 19686 D UE4 : [2019.12.28-11.41.23:377][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.378 19660 19686 D UE4 : [2019.12.28-11.41.23:378][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.379 19660 19686 D UE4 : [2019.12.28-11.41.23:379][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.379 19660 19686 D UE4 : [2019.12.28-11.41.23:379][266]LogUObjectArray: Warning: Invalid object index -572662307
        LogPlayLevel: Warning: 12-28 12:41:23.379 19660 19686 D UE4 : [2019.12.28-11.41.23:379][266]LogUObjectArray: Warning: Other object in slot
        LogPlayLevel: --------- beginning of crash
        LogPlayLevel: Took 0.3269825s to run adb.exe, ExitCode=0
        LogPlayLevel: Running: C:\NVPACK\android-sdk-windows\platform-tools\adb.exe -s 1PASH9A21T9301 logcat -d
        LogPlayLevel: Took 0.3337775s to run adb.exe, ExitCode=0
        LogPlayLevel: ********** RUN COMMAND COMPLETED **********

        Comment


          Originally posted by JimmothySanchez View Post
          Hey I'm trying to build a system similar to Boneworks, where in the players hand is physical in the world and can't go through solid objects. To accomplish this I've dragged in the skeletal mesh from the valve unreal VR demo level and added it as a grippable skeletal mesh component to a custom player character based on your VR character. I set the grip type on it to custom. I then "grab" it with a grip motion controller component and attempt to set location with sweep on grip tick. Unfortunately grip tick isn't ever firing even though I can hit breakpoints on the component gip event and the owners grip. Any idea what I'm doing wrong or if this is even the best way to approach something like this?
          That is really overdoing it for no reason...... You don't need to grip the hand to sweep it, you can just do it normally on tick. Or better yet, set up a clean physics constraint and have the hand constrained to a primitive component on the controller.

          As for why tick grip isn't firing, it will only fire inside of the gripped component itself.


          Consider supporting me on patreon

          My Open source tools and plugins
          Advanced Sessions Plugin
          VR Expansion Plugin

          Comment


            Originally posted by TommyOnF1r3 View Post
            Hi all,

            I am starting to learn Unreal and try to learn the basics. I have an Oculus Quest and loaded this great Plugin. I tried to get the Gesture System to work, but it writes no Data in the Gesture Database. Is it possible, that there are some problems with the Oculus Quest or my project?
            I copied every Step from this tutorial [URL="https://www.youtube.com/watch?v=z78CMOwGWxM&list=PLngZ5l9HmlOQBtL8dzDD1lTAdXhsVEm4g&index=7"]https://www.youtube.com/watch?v=z78CMOwGWxM&list=PLngZ5l9HmlOQBtL8dzDD1lTAdXhsVEm4g&index=7

            My Project Settings are changed for the Quest (Platforms - Android - APK Packaging). I launch the game directly to the Quest (see Screenshot). I can't use the VR Preview because Oculus Link is not working for me (endless 3 Dots Loading Screen).
            When I paint gestures during the game, they get green but don't get saved in the Database. I also tried the "Demo Content 6_Gestures" from the Plugin. It says "New Gesture Recorded" but when i try to paint it, it just crashes. And it also saves no new Gestures in the Database. But at least I can use the Gestures stored in the "DA_GesturesDB_Demo".

            Below the Screenshots you can see the part of the log file when the game crashes.

            Thanks,
            Tommy


            You are using Runebergs plugin, not mine, they are two entirely seperate things.


            Consider supporting me on patreon

            My Open source tools and plugins
            Advanced Sessions Plugin
            VR Expansion Plugin

            Comment


              Originally posted by mordentral View Post

              You are using Runebergs plugin, not mine, they are two entirely seperate things.

              Oh damned that's embarrassing . But nice to know there are more Plugins - will download yours and try it. Thank you.

              Comment


                EDIT: Never mind, I got it to work.

                My project was a Blueprint project. In case someone arrives here from Google, here's what I did:
                • Add a C++ class through File > New C++ Class > None > Next > Create Class
                • Close Project
                • Download the branch with the same engine version as you're using from https://bitbucket.org/mordentral/vre.../?tab=branches (at time of writing 4.24.1 is the latest version of the engine and I grabbed the Master branch)
                • In your project folder, create a folder called Plugins
                • Unzip the branch you downloaded to this Plugins folder
                • Relaunch the project, you'll get a warning like the screenshot below
                • Click yes to rebuild the VRExpansion module








                ORIGINAL:

                Hey Joshua, I'm running into a bit of a problem trying to use your plugin. Do you think you can help me out?

                I'm trying to follow along with this tutorial:
                https://www.youtube.com/watch?v=3fkCcek6TfU&t=306s

                I grabbed the 4.24 binary from https://vreue4.com/binaries. My engine version is 4.24.1, I'm assuming this is the correct binary to use because there's no 4.24 version to download?


                When I load my project it's giving me this warning, I click Yes.

                Click image for larger version  Name:	cant_compile.png Views:	0 Size:	6.7 KB ID:	1702504

                However, I fails with this error message:

                Click image for larger version  Name:	cant_compile_2.png Views:	0 Size:	3.4 KB ID:	1702505

                Would you happen to know what could be causing this?
                Last edited by nielsvaes; 12-28-2019, 06:11 PM.

                Comment


                  Hey Mordentral. I have been following the documentation and tutorials provided on your website as well as scouring this forum for posts that might lead me to the answer I'm looking for. While I think I'm on the right track, I'm hoping for some clarification.

                  My game is primarily focused on gun interactions, so I decided to work on that after I found the basic grabbing interactions working. I have a gun that fires and all that logic works as well as the logic driven by a slider component. What I'm not sure is how I'm supposed to get the secondary interactions from this point.

                  I have no code set up to designate whether the grip in range is a secondary or primary grip. This should be able to be figured out by the get grip slot in range and according to what I've read on the forum here you suggest running through a branch that then passes through to different logic. Is this the right way to go about doing this? The two slot grips on the mesh I have are just for gripping the gun as in a primary and secondary grip for aiming, no interaction with weapon mechanics if this is important (VRGripP1 and VRGripS1).

                  Secondly, how does this work for something like grabbing a slider component. On my gun I have a slider component that when I pull my secondary hand's trigger it grips that slider from within the gun itself. Is there another way I should go about interacting with components on the gun because I'm not sure how I would grip a slider through a socket on the mesh as they're completely unrelated to each other. Is this a case where gameplay tags would be a good move?

                  Thanks for any pointers I've been trying to sus this all out myself but it's getting to the point where I think I need to ask the big man himself, and well here we are. Thanks again and happy holidays!

                  Comment


                    Originally posted by mittens243 View Post
                    Hey Mordentral. I have been following the documentation and tutorials provided on your website as well as scouring this forum for posts that might lead me to the answer I'm looking for. While I think I'm on the right track, I'm hoping for some clarification.

                    My game is primarily focused on gun interactions, so I decided to work on that after I found the basic grabbing interactions working. I have a gun that fires and all that logic works as well as the logic driven by a slider component. What I'm not sure is how I'm supposed to get the secondary interactions from this point.

                    I have no code set up to designate whether the grip in range is a secondary or primary grip. This should be able to be figured out by the get grip slot in range and according to what I've read on the forum here you suggest running through a branch that then passes through to different logic. Is this the right way to go about doing this? The two slot grips on the mesh I have are just for gripping the gun as in a primary and secondary grip for aiming, no interaction with weapon mechanics if this is important (VRGripP1 and VRGripS1).

                    Secondly, how does this work for something like grabbing a slider component. On my gun I have a slider component that when I pull my secondary hand's trigger it grips that slider from within the gun itself. Is there another way I should go about interacting with components on the gun because I'm not sure how I would grip a slider through a socket on the mesh as they're completely unrelated to each other. Is this a case where gameplay tags would be a good move?

                    Thanks for any pointers I've been trying to sus this all out myself but it's getting to the point where I think I need to ask the big man himself, and well here we are. Thanks again and happy holidays!
                    Generally for sliders you would be removing the secondary attachment (or primary grip) to interact with the slider manually as it is more natural. But if you have good reason to retain the secondary attachment and grip the slider directly from within the gun that workflow is perfectly acceptable. The new door knob in the example door does that to grip the door when the knob has been disengaged.

                    As for primary / secondary grip, you can handle it however you want, in the template I set it up so that when you go to grip an object it first checks if another hand is holding the object, if one is then it checks if the object has secondary grips enabled and is within range of a secondary grip slot. If the checks were valid then it moves on to starting a secondary attachment to the hand. If instead one of those checks fails it falls back to checking if it is within range of a primary grip slot to switch hands.

                    The HasSocketInRange function has a boolean to define if you are checking against a primary or secondary socket, so it will work with both.

                    Some people prefer to not have that much flexibility and just hardcore distance based secondary gripping and the like, and that is fine as well.


                    Consider supporting me on patreon

                    My Open source tools and plugins
                    Advanced Sessions Plugin
                    VR Expansion Plugin

                    Comment


                      Originally posted by mordentral View Post

                      That is really overdoing it for no reason...... You don't need to grip the hand to sweep it, you can just do it normally on tick. Or better yet, set up a clean physics constraint and have the hand constrained to a primitive component on the controller.

                      As for why tick grip isn't firing, it will only fire inside of the gripped component itself.
                      Thanks! I have it working now. I think I was just needlessly over-complicating things in my head.
                      Check out my weekly dev blog: The Undead Dev

                      Comment


                        Hey guys!

                        First I'd like to say that I absolutely love this plugin, it saves a lot of time

                        However, when I try to enable seamless travel, the client crashes during the level-loading..

                        The host is a Windows machine (to be replaced with an android tablet) and the client is an Oculus Quest.

                        Everything else works fine, except the seamless travel.

                        I debugged the game on the quest and during the seamless travel it throws a "Fatal error 11" and then the game just crashes.

                        Could it better during the travel the player controller is destroyed and that the reason is for the crash?

                        I've setup a transition map with a new (empty) game mode (world override) and seamless travel enabled.

                        We're in kind of a hurry to get this working, so please help us

                        The unreal engine we're using is 4.22
                        The game is LAN only.

                        Thanks in advance,

                        Marcel


                        Error log from monitor.exe:

                        01-05 12:51:05.963: D/UE4(19738): localhost-0003199708
                        01-05 12:51:05.963: D/UE4(19738): [2020.01.05-11.51.05:963][483]LogWorld: SeamlessTravel to: /Game/Levels/ROOM_01
                        01-05 12:51:06.032: D/UE4(19738): [2020.01.05-11.51.06:032][484]LogAudioMixer: Display: Flush succeeded in the source manager command queue (1).
                        01-05 12:51:06.047: D/UE4(19738): [2020.01.05-11.51.06:047][484]LogAudio: Warning: Waited 36.750259ms for audio thread.
                        01-05 12:51:06.056: D/UE4(19738): [2020.01.05-11.51.06:056][484]LogAudioMixer: Display: Flush succeeded the source manager command queue (2).
                        01-05 12:51:06.056: D/UE4(19738): [2020.01.05-11.51.06:056][484]LogAudio: Warning: Waited 46.268700ms for audio thread.
                        01-05 12:51:06.088: D/UE4(19738): [2020.01.05-11.51.06:088][484]LogUObjectHash: Compacting FUObjectHashTables data took 4.53ms
                        01-05 12:51:06.094: D/UE4(19738): [2020.01.05-11.51.06:094][484]LogStats: SeamlessTravel FlushLevelStreaming - 0.002 s
                        01-05 12:51:06.097: D/UE4(19738): [2020.01.05-11.51.06:097][484]LogWorld: Bringing World /Game/TransitionLevel.TransitionLevel up for play (max tick rate 0) at 2020.01.05-12.51.06
                        01-05 12:51:06.098: A/libc(19738): Fatal signal 11 (SIGSEGV), code 2, fault addr 0xdddddddc in tid 19755 (Thread-2)
                        Last edited by MarcelEissens; 01-05-2020, 08:04 AM.

                        Comment


                          Originally posted by MarcelEissens View Post
                          Hey guys!

                          First I'd like to say that I absolutely love this plugin, it saves a lot of time

                          However, when I try to enable seamless travel, the client crashes during the level-loading..

                          The host is a Windows machine (to be replaced with an android tablet) and the client is an Oculus Quest.

                          Everything else works fine, except the seamless travel.

                          I debugged the game on the quest and during the seamless travel it throws a "Fatal error 11" and then the game just crashes.

                          Could it better during the travel the player controller is destroyed and that the reason is for the crash?

                          I've setup a transition map with a new (empty) game mode (world override) and seamless travel enabled.

                          We're in kind of a hurry to get this working, so please help us

                          The unreal engine we're using is 4.22
                          The game is LAN only.

                          Thanks in advance,

                          Marcel

                          Trying destroying the characters prior to actually traveling, its a common crash in engine with many characters, not just in VR, a lot of them don't destruct in a normal order when traveling.
                          Also the newer versions of the plugin 12/16/19 and later moved the auto drop on character destruction to EndPlay, which fixes a few issues with things like this.


                          Consider supporting me on patreon

                          My Open source tools and plugins
                          Advanced Sessions Plugin
                          VR Expansion Plugin

                          Comment


                            Originally posted by mordentral View Post

                            Trying destroying the characters prior to actually traveling, its a common crash in engine with many characters, not just in VR, a lot of them don't destruct in a normal order when traveling.
                            Also the newer versions of the plugin 12/16/19 and later moved the auto drop on character destruction to EndPlay, which fixes a few issues with things like this.
                            Hey, thanks for your response.

                            The current way I handle traveling is:

                            Player enters elevator->Elevator checks if it can go up->Call custom event(Server only) to store all positions of the player->Call event on the GameMode->Execute console command (servertravel Levelname).

                            Should I destroy the VivePawnCharacter before the Elevator calls the travel event on the gamemode?
                            Currently I do not spawn the VivePawnCharacter in the gamemode, should I do that aswell??
                            Also, is the newer version of the plugin still compatible with 4.22, or should I upgrade to 4.23?

                            Thanks,
                            Marcel
                            Last edited by MarcelEissens; 01-05-2020, 03:45 PM.

                            Comment


                              Originally posted by MarcelEissens View Post

                              Hey, thanks for your response.

                              The current way I handle traveling is:

                              Player enters elevator->Elevator checks if it can go up->Call custom event(Server only) to store all positions of the player->Call event on the GameMode->Execute console command (servertravel Levelname).

                              Should I destroy the VivePawnCharacter before the Elevator calls the travel event on the gamemode?
                              Currently I do not spawn the VivePawnCharacter in the gamemode, should I do that aswell??
                              Also, is the newer version of the plugin still compatible with 4.22, or should I upgrade to 4.23?

                              Thanks,
                              Marcel
                              Yeah destroy before the travel event

                              there is a 4.22 branch that is locked away, I believe that I ported back that change to it yes, not all changes get ported back if the conversion is too much of a hassle.


                              Consider supporting me on patreon

                              My Open source tools and plugins
                              Advanced Sessions Plugin
                              VR Expansion Plugin

                              Comment


                                Originally posted by mordentral View Post

                                Yeah destroy before the travel event

                                there is a 4.22 branch that is locked away, I believe that I ported back that change to it yes, not all changes get ported back if the conversion is too much of a hassle.
                                Awesome, I'll try that tonight, I'll let you know if it works

                                Thank you,

                                Marcel

                                Comment

                                Working...
                                X