Turok: Dinosaur Hunter Forums!

Turok Games => Turok 3 Shadow of Oblivion => Topic started by: Drahsid on February 07, 2020, 04:10:23 PM

Title: Turok 3 Mouse Input and other goodies
Post by: Drahsid on February 07, 2020, 04:10:23 PM
This has been superseded by the mod in this thread (https://www.turokforums.com/index.php?topic=840.0)

What is this?
Knockoff Turok 3 EX?
This is NOT a PC port. This is merely a collection of memory hacks that have sprung from my reverse engineering (https://github.com/Drahsid/Turok-3-RAM-Map) utilizing my fork of Mupen64Plus (https://github.com/Drahsid/mupen64plus-core-wren)

What does this give you?

What problem does this solve?
This completely bypasses the joystick, so you are not limited to the game's interpretation of the stick input. You are not limited to the -128-127 range on either axis.
Furthermore, who doesn't want to play at 60 FPS?

Cool. How do I get it?
Download any version of Mupen64Plus that is not Mupen64Plus-nx!!
Download and extract this (https://drive.google.com/open?id=1AqrkhE9RF0XOBblfL6ndBAwNT9-VZR9Q) into the root directory of Mupen64. This should replace "mupen64plus.dll", and you should see a new folder called "scripts."
That's it, run Turok 3 in Mupen!

Note that for proper keyboard controls, you will have to configure the input of Mupen to use your desired buttons. I will not go over how to do that but do highly suggest sharing your configurations when you get something that you like.

How do I configure the options?
In the Mupen64Plus directory, navigate to ./scripts/Turok 3 - Shadow of Oblivion (U) [!]/ and edit MouseInput.wren with your text editor of choice. The options have comments describing their relevance.

Bugs

Other notes
You can press  HOME to lock/unlock the mouse
If you fancy learning a high level scripting language (https://github.com/Drahsid/mupen64plus-core-wren/wiki/Scripting-Reference), you can use what I have already set up to make more memory hacks that may do a plethora of things.

Special thanks to Kaiser
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Nutshot on February 09, 2020, 02:51:42 PM
YES!
Thank you so much.
I will try that immediatly out now. :D
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Nutshot on February 10, 2020, 12:07:14 PM
Okay, so i notice a few things before i could even really try it out.
So you wrote that we should use any version of Mupen64Plus that is not Mupen64Plus-nx.

I normally use mupen64plus-gui from here:
https://github.com/m64p/mupen64plus-gui
With this one i can´t even get to the point of launching any game. Mupen gives me this error:
"Couldn´t load core library, please set the path in settings."
I have that already set, and it´s pointing at it´s dll in the correct folder, but it seems it wants to simply ignore it, which is sad cause i really want to use this Frontend.

The second i use is M64Py from:
http://m64py.sourceforge.net/
I can get it to load the Game as it should. Except nothing i change in the config (MouseInput.wren) does anything. I changed the FOV to 90, FPS to 60 or MAX. But nothing changed. I restarted the Emu and Game multiple times. I still noticed the inbuilt FPS Counter was still on 30 FPS so i think i am doing something wrong?
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on February 10, 2020, 03:49:03 PM
You cannot modify the FOV when running in dynarec mode. Possibly similar issues with fps.
Quite frankly, you shouldn't use a frontend, they all suck.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Nutshot on February 10, 2020, 04:02:51 PM
Aha.
So i should only using the last Release from here is what you´re saying?
https://github.com/mupen64plus/mupen64plus-core/releases

But then it seems also the "Download any version of Mupen64Plus" is missleading, i guess... (no offense).
But... i don´t know any other. What are you using?
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Nutshot on February 12, 2020, 10:32:09 AM
So i tested out yesterday this thing and it does indeed works with some Mupen Frontends too.
But every single Frontend has a flaw that other don´t have and vice versa.
So i ended up using just the standalone Mupen64 with some Command Lines.
All in all, it´s running superb. The only thing yet i have problems are the controls themselfes.
Editing the "mupen64plus.cfg" here is necessary.
I also used this site as a reference:
http://en.qi-hardware.com/wiki/Key_codes

So far i got "Escape" To Menu, the usual WASD to the C Buttons, Q and E are B and E, Space is "Jump".
Now here is what i don´t get.
Other keys such as "Left Ctrl" for "Control Pad Down" isn´t working.
I´m not really sure what is causing this. Left Ctrl should be "305". Yet it still wouldn´t work for that key. It just baffles me that i "somehow" got the other Keys working so far. I have no clue what is preventing this now. Other sites claim it should be "17" and not "305". Still wouldn´t work either.

Edit:
I got it to Shift (304) instead of Ctrl, which isn´t the way i want but at least it´s working.
Still doesn´t explain why Ctrl isn´t working.
Now does anybody have an idea how the Mouse Buttons are called?
It seems to be the only thing left and i could share my config for the controls.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on February 12, 2020, 08:09:29 PM
Editing the "mupen64plus.cfg" here is necessary.
I also used this site as a reference:
http://en.qi-hardware.com/wiki/Key_codes

So far i got "Escape" To Menu, the usual WASD to the C Buttons, Q and E are B and E, Space is "Jump".
Now here is what i don´t get.
Other keys such as "Left Ctrl" for "Control Pad Down" isn´t working.
I´m not really sure what is causing this. Left Ctrl should be "305". Yet it still wouldn´t work for that key. It just baffles me that i "somehow" got the other Keys working so far. I have no clue what is preventing this now. Other sites claim it should be "17" and not "305". Still wouldn´t work either.
Edit:
I got it to Shift (304) instead of Ctrl, which isn´t the way i want but at least it´s working.
Still doesn´t explain why Ctrl isn´t working.
Now does anybody have an idea how the Mouse Buttons are called?
It seems to be the only thing left and i could share my config for the controls.
Yes, I highly suggest everyone to share their input configs because it's not entirely seamless.
Not sure what does and doesn't work, but you might want to consider using device = -2 and name = "Keyboard"
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Kil3r on April 13, 2020, 05:01:35 AM
Is this program like the mouse input injector from Carnivorous (Goldeneye)?  In other words, is it as close to native mouse support that we can get in Turok 3?

EDIT: Yes it is.

Firstly, I like it! Secondly, i'm having issues. The camera is always jiggling. Its almost as if the camera is fighting back against the mouse or perhaps its not super smooth. Furthermore, unrelated to this mouse script, my sound is always out of sync. Another thing. Is there anywhere to unbind the number keys from choosing save states. I like to use 1 and 2 as my change weapon buttons.

Here's some gameplay: https://youtu.be/a__BK2yWF5k (https://youtu.be/a__BK2yWF5k)

I believe this project deserves so much more attention. Its unlikely that we will get a port for T3 and I can imagine that this project must of took alot of time and effort.

My setup is this:
Quote
Latest Mupen64Plus + Mupen64PlusQT launcher + GlideN64 + Input Plugin from this thread's OP(in the bug list).

DPad R = "mouse(2)"
DPad L = ""
DPad D = "key(306)"
DPad U = ""
Start = "key(8)"
Z Trig = "mouse(1)"
B Button = "key(50)"
A Button = "key(49)"
C Button R = "key(100)"
C Button L = "key(97)"
C Button D = "key(115)"
C Button U = "key(119)"
R Trig = "key(32)"
L Trig = "key(120)"
Mempak switch = "key(44)"
Rumblepak switch = "key(46)"
Quote
Controls:
Left Mouse: Fire
Right Mouse: Sniper Zoom
1: Change Weapon\A Button
2: Change Weapon\Activate Gadget\B button
Spacebar: Jump
Ctrl: Crouch
WASD: Move
Backspace: Pause
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on April 13, 2020, 10:32:30 AM
Secondly, i'm having issues. The camera is always jiggling. Its almost as if the camera is fighting back against the mouse or perhaps its not super smooth.
I can't reproduce this myself. It is possibly related to the QT launcher, or perhaps you have the joystick set to the mouse in Mupens config (DONT DO THIS, the mouse input is not linked to the joystick)

Furthermore, unrelated to this mouse script, my sound is always out of sync.
That's a Mupen issue, I think changing the sound-sync type might have better potential results.

Another thing. Is there anywhere to unbind the number keys from choosing save states. I like to use 1 and 2 as my change weapon buttons.
afaik these are near the top of Mupen64plus.cfg

Here's some gameplay: https://youtu.be/a__BK2yWF5k (https://youtu.be/a__BK2yWF5k)
I believe this project deserves so much more attention. Its unlikely that we will get a port for T3 and I can imagine that this project must of took alot of time and effort.
Thanks for the support. I dunno if I'll update this in particular, but I am doing a lot of reverse engineering on Turok 3 itself. In the future, I'm sure an official Turok 3 port is possible.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Kil3r on April 13, 2020, 04:08:03 PM
Quote
I can't reproduce this myself. It is possibly related to the QT launcher, or perhaps you have the joystick set to the mouse in Mupens config (DONT DO THIS, the mouse input is not linked to the joystick)
Thanks! Your second point was the reason behind the issue.  For anyone having the same issue, make sure "mouse = False" in mupen's cfg.

Quote
That's a Mupen issue, I think changing the sound-sync type might have better potential results.
Sounds good i'll be tinkering with that.

Quote
afaik these are near the top of Mupen64plus.cfg
I looked the the entire cfg and couldn't find it :(. It doesn't seem like you can customize that anywhere. For now I will map the buttons to Q and E. https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_Core_Parameters (https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_Core_Parameters)

Quote
Thanks for the support. I dunno if I'll update this in particular, but I am doing a lot of reverse engineering on Turok 3 itself. In the future, I'm sure an official Turok 3 port is possible.

Are your intentions to create a port? As a undergrad CS major, being able to create a port using the resources you have is mindblowing. Your work deserves more support, especially on these forums. Infact, I think your script would bring more attention to the game and therefore would increase the speed of us getting a official port. Maybe https://www.youtube.com/user/Gggmanlives (https://www.youtube.com/user/Gggmanlives) would be interested in visiting T3 again with the script as he talked about Goldeneye's mouse injector in his review. As someone who started Turok on PC, playing Turok 3 with a controller is just not an option haha. I'm sure other people feel the same way.

IIRC, Kaiser (Turok Remastered) had access to very little official code when he was first making his port. T3 unofficial port should be fairly possible right?

EDIT: Is there anyway to reduce the input lag? Furthermore, i've still had no luck with solving the audio delay. What is your audio setup?
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on April 13, 2020, 08:39:28 PM
I looked the the entire cfg and couldn't find it :(. It doesn't seem like you can customize that anywhere. For now I will map the buttons to Q and E. https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_Core_Parameters (https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_Core_Parameters)

There is a section titled [CoreEvents], below that is all of the hotkey mappings.

Are your intentions to create a port? As a undergrad CS major, being able to create a port using the resources you have is mindblowing. Your work deserves more support, especially on these forums. Infact, I think your script would bring more attention to the game and therefore would increase the speed of us getting a official port.

While I have no intention on making a port, recently a lot of people seem to be expecting me too. I am, however, reverse engineering (https://github.com/Drahsid/Turok-3-RAM-Map) the game as a hobby. My findings are public, and I update the repository whenever I feel like I've got some good amount more to show off. I'm sure these findings could be useful for the Kex team in the case that they ever do work on Turok 3 EX.
Perhaps I'd make a port for Rage Wars, but even so, it would feel dirty doing such a thing outside of the Kex engine. Beyond that, it is unreasonable for me to commit to such a large project given my underwhelming lack of finances in recent times.
If you're interested in small tidbits of interesting things I do, I post these on the modding channel in the forums' discord server, and Badger posts them on Turok Sanctum.

IIRC, Kaiser (Turok Remastered) had access to very little official code when he was first making his port. T3 unofficial port should be fairly possible right?

Yeah! When he began Turok EX, and even up to where he had a working demo, I'm fairly certain he had no source code. As aforementioned, I can't commit to doing something so big, but it is beyond reasonable doubt possible. Kaiser has actually helped me a bit in what I've gotten done on Turok 3, so credit to him for his patience.

EDIT: Is there anyway to reduce the input lag? Furthermore, i've still had no luck with solving the audio delay. What is your audio setup?

The game runs at low framerates, so you're more than likely just feeling that. The mouse inputs are processed as soon as a frame has ended rendering.
Other than the default settings, the only changed setting that I have is RESAMPLE = "src-sinc-fastest"
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Nutshot on April 19, 2020, 04:32:15 PM
Oh boy.
A "Rage Wars" or "The World is not Enough" would be great.
I´m still so surprised how this Turok 3 "Hack" feels so much like a proper PC Port which we never got.
All feels so smooth.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on April 19, 2020, 04:57:21 PM
A "Rage Wars"

https://www.turokforums.com/index.php?topic=747.0
Already done, and even better, 60fps is very stable.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Party Boy on May 07, 2020, 03:54:26 AM
Hey, I've just registered to thank you...

However, I did this comment in Kil3r's video:

Quote
Hey, can you post which version of GlideN64 are you using?, I'm using one dated May 6 2020, using your same setup crashes on start up, Glide64 and Rice crashes after choosing a character...

I originally tried to use it with an m64p dated April 9 2020 and it just doesn't work, it's probably something to do with m64p though...

I've read that thread in the Turok forums like 20 times...

I've also added the corresponding [Input-SDL-Control1] to the .cfg (I didn't even know you could do that)...

I've also used the scan codes posted in that thread, I just don't know what I'm doing wrong...

Kil3r setup is: Mupen64Plus + Mupen64PlusQT launcher + GlideN64

tl;dr

I can't make it work, Kil3r setup crashes, mine using m64p does nothing input wise...

Here it is what I added to the .cfg:

Quote
[Input-SDL-Control1]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 0
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -2
# SDL joystick name (or Keyboard)
name = "Keyboard"
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = True
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = "mouse(2)"
DPad L = ""
DPad D = "key(305)"
DPad U = ""
Start = "key(13)"
Z Trig = "mouse(1)"
B Button = "key(101)"
A Button = "key(113)"
C Button R = "key(100)"
C Button L = "key(97)"
C Button D = "key(115)"
C Button U = "key(119)"
R Trig = "key(32)"
L Trig = "key(108)"
Mempak switch = ""
Rumblepak switch = ""



EDIT:

I want to clarify, it doesn't move at all, and yes, I'm pressing HOME...
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Party Boy on May 07, 2020, 12:35:34 PM
Ehhh, I managed to get it to work with Kil3r setup and GlideN64 4.0, it keeps crashing when choosing Danielle over Joseph though...
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on May 07, 2020, 04:58:59 PM
Ehhh, I managed to get it to work with Kil3r setup and GlideN64 4.0, it keeps crashing when choosing Danielle over Joseph though...
Don't run it with the dynarec on, run it in interpreter mode.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Party Boy on May 07, 2020, 09:04:05 PM
It's working now...

I can't explain how long I've been waiting to play this game with keyboard and mouse, maybe since it came out...

I have one last question, is there mouse acceleration in the mouse settings? can it be disabled?..
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on May 07, 2020, 10:37:44 PM
There is no mouse acceleration. Your mouse input is interpreted linearly.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Sirenated on May 21, 2020, 02:33:11 PM
I can't seem to get this to work. I get an "incompatible input plugin" error. Followed the instructions and everything.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Kil3r on May 27, 2020, 01:49:05 AM
Here is my Mupen64Plus config file.

You will need the following plugins:
# Filename of video plugin
VideoPlugin = "mupen64plus-video-GLideN64.dll"
# Filename of audio plugin
AudioPlugin = "mupen64plus-audio-sdl.dll"
# Filename of input plugin
InputPlugin = "mupen64plus-input-sdl.dll"
# Filename of RSP plugin
RspPlugin = "mupen64plus-rsp-z64-hlevideo.dll"
I got them by installing M64Py, taking the plugin dlls out, then uninstalling M64py(to avoid conflicts with normal Mupen64Plus).

Controls:
Left Mouse: Fire
Right Mouse: Sniper Zoom
q: Change Weapon
e: Change Weapon\Activate Gadget
Spacebar: Jump
Ctrl: Crouch
WASD: Move
Backspace: Pause

Just as the OP stated, you must use Mupen64Plus with no frontend for this to work. I finished the entire game using almost identical CFG. I've slightly changed it to this CFG file when I started playing Rage Wars so I can't confirm if it doesn't have the issues that other people were talking about. Let me know if you get past your crashes or not.

I have a mid-high end gpu+cpu with Windows 10 and a 1080p monitor. This CFG is somewhat tailored for that. I am not an expert on configuring N64 emulators so a little extra research may be required to figure some of the best settings (or perhaps even get it to work).

Side Note: My rating of Turok 3 falls in the range of 6.5/10-7/10 without replaying it. Coming from PC Turok(and remastered Turok), i'd say it lost too much of what made Turok "Turok". For example, the slow movement speed hurts. Also, I personally wanted them to take the "key collection" formula(which IMO was done in a fairly unique way for T1+T2) either at the same level or further. Furthermore, there are some straight up bad choices that were likely due to time\resource\tech constraints on the dev team. For example, in the final 2 chapters of the game there is this huge empty space that you proceed through and backtrack through that doesn't contain enemies. It takes a whole boring minute just to walk through an empty space in a straight line. If they were to remaster this game, I would personally want some improvements on enemy counts, placement, and AI(I know this game was more tailored for n64 controllers and HW). I think they should slightly increase the movement speed and\or do other things to make the game feel more like the previous Turoks. On the bright side, I had low expectations for this game but I ended up enjoying it. I played through it very quickly. While I knew that the devs vision was constrained for this game, I took notice of multiple times where the devs put serious thought into adding a fun and interesting moment into the game. If it were to be remastered and they made those changes I suggested, I can imagine the game would be a solid 7/10 or maybe even 7.5/10 for me. For comparison sake I give T1 and T2 both a 8/10-8.5/10. To me, a 8 has done something significantly unique with atleast solid execution. 7 generally is executed solid but has minimal unique ideas\moments in it.

Regardless of that, I have to thank OP a TON for this script. As a Turok fan, it has been my dream to play this game with M+K. I had a great experience using your script! This game is definitely a hidden gen and I would say it deserves the treatment you gave it and what a remaster could give it. Well done.

CFG Location: C:\Users\[username]\AppData\Roaming\Mupen64Plus

Code: [Select]
# Mupen64Plus Configuration File
# This file is automatically read and written by the Mupen64Plus Core library

[64DD]

# Filename of the 64DD IPL ROM
IPL-ROM = ""
# Filename of the disk to load into Disk Drive
Disk = ""


[Audio-SDL]

# Mupen64Plus SDL Audio Plugin config parameter version number
Version = 1.000000
# Frequency which is used if rom doesn't want to change it
DEFAULT_FREQUENCY = 32767
# Swaps left and right channels
SWAP_CHANNELS = False
# Size of primary buffer in output samples. This is where audio is loaded after it's extracted from n64's memory.
PRIMARY_BUFFER_SIZE = 16384
# Fullness level target for Primary audio buffer, in equivalent output samples. This value must be larger than the SECONDARY_BUFFER_SIZE. Decreasing this value will reduce audio latency but requires a faster PC to avoid choppiness. Increasing this will increase audio latency but reduce the chance of drop-outs.
PRIMARY_BUFFER_TARGET = 4096
# Size of secondary buffer in output samples. This is SDL's hardware buffer. The SDL documentation states that this should be a power of two between 512 and 8192.
SECONDARY_BUFFER_SIZE = 1024
# Audio resampling algorithm. src-sinc-best-quality, src-sinc-medium-quality, src-sinc-fastest, src-zero-order-hold, src-linear, speex-fixed-{10-0}, trivial
RESAMPLE = "src-sinc-fastest"
# Volume control type: 1 = SDL (only affects Mupen64Plus output)  2 = OSS mixer (adjusts master PC volume)
VOLUME_CONTROL_TYPE = 1
# Percentage change each time the volume is increased or decreased
VOLUME_ADJUST = 5
# Default volume when a game is started.  Only used if VOLUME_CONTROL_TYPE is 1
VOLUME_DEFAULT = 80
# Synchronize Video/Audio
AUDIO_SYNC = True


[Core]

# Mupen64Plus Core config parameter set version number.  Please don't change this version number.
Version = 1.010000
# Draw on-screen display if True, otherwise don't draw OSD
OnScreenDisplay = True
# Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more
R4300Emulator = 0
# Disable compiled jump commands in dynamic recompiler (should be set to False)
NoCompiledJump = False
# Disable 4MB expansion RAM pack. May be necessary for some games
DisableExtraMem = False
# Increment the save state slot after each save operation
AutoStateSlotIncrement = False
# Activate the R4300 debugger when ROM execution begins, if core was built with Debugger support
EnableDebugger = False
# Save state slot (0-9) to use when saving/loading the emulator state
CurrentStateSlot = 1
# Path to directory where screenshots are saved. If this is blank, the default value of ${UserDataPath}/screenshot will be used
ScreenshotPath = ""
# Path to directory where emulator save states (snapshots) are saved. If this is blank, the default value of ${UserDataPath}/save will be used
SaveStatePath = ""
# Path to directory where SRAM/EEPROM data (in-game saves) are stored. If this is blank, the default value of ${UserDataPath}/save will be used
SaveSRAMPath = ""
# Path to a directory to search when looking for shared data files
SharedDataPath = ""
# Force number of cycles per emulated instruction
CountPerOp = 1
# Randomize PI/SI Interrupt Timing
RandomizeInterrupt = True
# Duration of SI DMA (-1: use per game settings)
SiDmaDuration = -1
# Gameboy Camera Video Capture backend
GbCameraVideoCaptureBackend1 = ""


[CoreEvents]

# Mupen64Plus CoreEvents config parameter set version number.  Please don't change this version number.
Version = 1.000000
# SDL keysym for stopping the emulator
Kbd Mapping Stop = ""
# SDL keysym for switching between fullscreen/windowed modes
Kbd Mapping Fullscreen = ""
# SDL keysym for saving the emulator state
Kbd Mapping Save State = ""
# SDL keysym for loading the emulator state
Kbd Mapping Load State = ""
# SDL keysym for advancing the save state slot
Kbd Mapping Increment Slot = ""
# SDL keysym for resetting the emulator
Kbd Mapping Reset = ""
# SDL keysym for slowing down the emulator
Kbd Mapping Speed Down = ""
# SDL keysym for speeding up the emulator
Kbd Mapping Speed Up = ""
# SDL keysym for taking a screenshot
Kbd Mapping Screenshot = ""
# SDL keysym for pausing the emulator
Kbd Mapping Pause = ""
# SDL keysym for muting/unmuting the sound
Kbd Mapping Mute = ""
# SDL keysym for increasing the volume
Kbd Mapping Increase Volume = ""
# SDL keysym for decreasing the volume
Kbd Mapping Decrease Volume = ""
# SDL keysym for temporarily going really fast
Kbd Mapping Fast Forward = ""
# SDL keysym for advancing by one frame when paused
Kbd Mapping Frame Advance = ""
# SDL keysym for pressing the game shark button
Kbd Mapping Gameshark = ""
# Joystick event string for stopping the emulator
Joy Mapping Stop = ""
# Joystick event string for switching between fullscreen/windowed modes
Joy Mapping Fullscreen = ""
# Joystick event string for saving the emulator state
Joy Mapping Save State = ""
# Joystick event string for loading the emulator state
Joy Mapping Load State = ""
# Joystick event string for advancing the save state slot
Joy Mapping Increment Slot = ""
# Joystick event string for resetting the emulator
Joy Mapping Reset = ""
# Joystick event string for slowing down the emulator
Joy Mapping Speed Down = ""
# Joystick event string for speeding up the emulator
Joy Mapping Speed Up = ""
# Joystick event string for taking a screenshot
Joy Mapping Screenshot = ""
# Joystick event string for pausing the emulator
Joy Mapping Pause = ""
# Joystick event string for muting/unmuting the sound
Joy Mapping Mute = ""
# Joystick event string for increasing the volume
Joy Mapping Increase Volume = ""
# Joystick event string for decreasing the volume
Joy Mapping Decrease Volume = ""
# Joystick event string for fast-forward
Joy Mapping Fast Forward = ""
# Joystick event string for advancing by one frame when paused
Joy Mapping Frame Advance = ""
# Joystick event string for pressing the game shark button
Joy Mapping Gameshark = ""


[Input-SDL-Control1]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 0
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = "Keyboard"
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = "mouse(3)"
DPad L = ""
DPad D = "key(306)"
DPad U = ""
Start = "key(8)"
Z Trig = "mouse(1)"
B Button = "key(113)"
A Button = "key(101)"
C Button R = "key(100)"
C Button L = "key(97)"
C Button D = "key(115)"
C Button U = "key(119)"
R Trig = "key(32)"
L Trig = "key(120)"
Mempak switch = "key(44)"
Rumblepak switch = "key(46)"
# Analog axis configuration mappings
X Axis = "key(276,275)"
Y Axis = "key(273,274)"


[Input-SDL-Control2]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = "axis(4+)"
DPad L = "axis(4-)"
DPad D = "axis(5+)"
DPad U = "axis(5-)"
Start = "button(9)"
Z Trig = "button(6)"
B Button = "button(0)"
A Button = "button(1)"
C Button R = "axis(2-)"
C Button L = "axis(2+)"
C Button D = "axis(3+)"
C Button U = "axis(3-)"
R Trig = "button(7)"
L Trig = "button(4)"
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = "axis(0-,0+)"
Y Axis = "axis(1-,1+)"


[Input-SDL-Control3]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""


[Input-SDL-Control4]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 2
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = False
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad R = ""
DPad L = ""
DPad D = ""
DPad U = ""
Start = ""
Z Trig = ""
B Button = ""
A Button = ""
C Button R = ""
C Button L = ""
C Button D = ""
C Button U = ""
R Trig = ""
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = ""
Y Axis = ""


[rsp-cxd4]

# Mupen64Plus cxd4 RSP Plugin config parameter version number
Version = 1.000000
# Send display lists to the graphics plugin
DisplayListToGraphicsPlugin = False
# Send audio lists to the audio plugin
AudioListToAudioPlugin = False
# Force CPU-RSP signals synchronization
WaitForCPUHost = False
# Support CPU-RSP semaphore lock
SupportCPUSemaphoreLock = False


[Rsp-HLE]

# Mupen64Plus RSP HLE Plugin config parameter version number
Version = 1.000000
# Path to a RSP plugin which will be used when encountering an unknown ucode.You can disable this by letting an empty string.
RspFallback = ""
# Send display lists to the graphics plugin
DisplayListToGraphicsPlugin = True
# Send audio lists to the audio plugin
AudioListToAudioPlugin = False


[Rsp-Z64]



[Transferpak]

# Filename of the GB ROM to load into transferpak 1
GB-rom-1 = ""
# Filename of the GB RAM to load into transferpak 1
GB-ram-1 = ""
# Filename of the GB ROM to load into transferpak 2
GB-rom-2 = ""
# Filename of the GB RAM to load into transferpak 2
GB-ram-2 = ""
# Filename of the GB ROM to load into transferpak 3
GB-rom-3 = ""
# Filename of the GB RAM to load into transferpak 3
GB-ram-3 = ""
# Filename of the GB ROM to load into transferpak 4
GB-rom-4 = ""
# Filename of the GB RAM to load into transferpak 4
GB-ram-4 = ""


[UI-Console]

# Mupen64Plus UI-Console config parameter set version number.  Please don't change this version number.
Version = 1.000000
# Directory in which to search for plugins
PluginDir = ".\"
# Filename of video plugin
VideoPlugin = "mupen64plus-video-GLideN64.dll"
# Filename of audio plugin
AudioPlugin = "mupen64plus-audio-sdl.dll"
# Filename of input plugin
InputPlugin = "mupen64plus-input-sdl.dll"
# Filename of RSP plugin
RspPlugin = "mupen64plus-rsp-z64-hlevideo.dll"


[Video-Angrylion-Plus]

# Distribute rendering between multiple processors if True
Parallel = True
# Rendering Workers (0=Use all logical processors)
NumWorkers = 0
# VI mode (0=Filtered, 1=Unfiltered, 2=Depth, 3=Coverage)
ViMode = 0
# Scaling interpolation type (0=NN, 1=Linear)
ViInterpolation = 0
# Use anamorphic 16:9 output mode if True
ViWidescreen = False
# Hide overscan area in filteded mode if True
ViHideOverscan = False
# Compatibility mode (0=Fast 1=Moderate 2=Slow
DpCompat = 1


[Video-Arachnoid]

# Color bit-depth in fullscreen mode
ColorDepth = 32
# Screen refresh-rate in fullscreen mode
RefreshRate = 60
# Size of texture cache used to store textures
TextureCacheSize = 15728640
# Render in wireframe?
Wireframe = False
# Render fog?
Fog = False
# Use MultiSampling? 0=no 2,4,8,16=quality
MultiSampling = 0
# Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear
Mipmapping = 0
# When to update the screen: 1 - on VI, 2 - on first CI
ScreenUpdateSetting = 2


[Video-General]

# Use fullscreen mode if True, or windowed mode if False
Fullscreen = True
# Width of output window or fullscreen width
ScreenWidth = 1920
# Height of output window or fullscreen height
ScreenHeight = 1080
# If true, activate the SDL_GL_SWAP_CONTROL attribute
VerticalSync = False
# Rotate screen contents: 0=0 degree, 1=90 degree, 2 = 180 degree, 3=270 degree
Rotate = 0


[Video-Glide64]

# Card ID
card_id = 0
# Depth bias level
depth_bias = 0
# Auto-detect microcode
autodetect_ucode = True
# Force microcode
ucode = 2
# Wireframe display
wireframe = False
# Wireframe mode: 0=Normal colors, 1=Vertex colors, 2=Red only
wfmode = 1
# Filtering mode: 0=None, 1=Force bilinear, 2=Force point-sampled
filtering = 1
# Fog enabled
fog = True
# Buffer clear on every frame
buff_clear = True
# Vertical sync
vsync = False
# Fast CRC
fast_crc = False
# Buffer swapping method: 0=Old, 1=New, 2=Hybrid
swapmode = 1
# LOD calculation: 0=Off, 1=Fast, 2=Precise
lodmode = 0
# Logging
logging = False
log_clear = False
elogging = False
# Filter cache
filter_cache = False
# Detect CPU writes
detect_cpu_write = False
# Display unknown combines as red
unk_as_red = False
# Log unknown combines
log_unk = False
unk_clear = False
# Wrap textures too big for tmem
wrap_big_tex = False
# Zelda corona fix
flame_corona = False
# Display performance stats (add together desired flags): 1=FPS counter, 2=VI/s counter, 4=% speed, 8=FPS transparent
show_fps = 1
# Clock enabled
clock = False
# Clock is 24-hour
clock_24_hr = False
# Framebuffer read every frame
fb_read_always = False
# Framebuffer read alpha
fb_read_alpha = False
# Smart framebuffer
fb_smart = False
# Motion blur
motionblur = False
# Hi-res framebuffer
fb_hires = True
# Get framebuffer info
fb_get_info = False
# Clear framebuffer
fb_clear = False
# Depth buffer render
fb_render = False
# Use custom INI settings
custom_ini = False
# Texture filter: 0=None, 1=Blur edges, 2=Super 2xSai, 3=Hq2x, 4=Hq4x
tex_filter = 0
# Disable dithered alpha
noditheredalpha = True
# Disable GLSL combiners
noglsl = True
# Use framebuffer objects
fbo = False
# Disable aux buffer
disable_auxbuf = False


[Video-Glide64mk2]

# Enable full-scene anti-aliasing by setting this to a value greater than 1
wrpAntiAliasing = 0
# Card ID
card_id = 0
# If true, use polygon offset values specified below
force_polygon_offset = False
# Specifies a scale factor that is used to create a variable depth offset for each polygon
polygon_offset_factor = 0.000000
# Is multiplied by an implementation-specific value to create a constant depth offset
polygon_offset_units = 0.000000
# Vertical sync
vsync = True
# TODO:ssformat
ssformat = False
# Display performance stats (add together desired flags): 1=FPS counter, 2=VI/s counter, 4=% speed, 8=FPS transparent
show_fps = 1
# Clock enabled
clock = False
# Clock is 24-hour
clock_24_hr = True
# Wrapper resolution
wrpResolution = 0
# Wrapper VRAM
wrpVRAM = 0
# Wrapper FBO
wrpFBO = True
# Wrapper Anisotropic Filtering
wrpAnisotropic = True
# Texture Enhancement: Smooth/Sharpen Filters
ghq_fltr = 0
# Texture Compression: 0 for S3TC, 1 for FXT1
ghq_cmpr = 0
# Texture Enhancement: More filters
ghq_enht = 0
# Hi-res texture pack format (0 for none, 1 for Rice)
ghq_hirs = 0
# Compress texture cache with S3TC or FXT1
ghq_enht_cmpr = False
# Tile textures (saves memory but could cause issues)
ghq_enht_tile = 0
# Force 16bpp textures (saves ram but lower quality)
ghq_enht_f16bpp = False
# Compress texture cache
ghq_enht_gz = True
# Don't enhance textures for backgrounds
ghq_enht_nobg = False
# Enable S3TC and FXT1 compression
ghq_hirs_cmpr = False
# Tile hi-res textures (saves memory but could cause issues)
ghq_hirs_tile = False
# Force 16bpp hi-res textures (saves ram but lower quality)
ghq_hirs_f16bpp = False
# Compress hi-res texture cache
ghq_hirs_gz = True
# Alternative CRC calculation -- emulates Rice bug
ghq_hirs_altcrc = True
# Save tex cache to disk
ghq_cache_save = True
# Texture Cache Size (MB)
ghq_cache_size = 128
# Use full alpha channel -- could cause issues for some tex packs
ghq_hirs_let_texartists_fly = False
# Dump textures
ghq_hirs_dump = False
# Alternate texture size method: -1=Game default, 0=disable. 1=enable
alt_tex_size = -1
# Use first SETTILESIZE only: -1=Game default, 0=disable. 1=enable
use_sts1_only = -1
# Use spheric mapping only: -1=Game default, 0=disable. 1=enable
force_calc_sphere = -1
# Force positive viewport: -1=Game default, 0=disable. 1=enable
correct_viewport = -1
# Force texrect size to integral value: -1=Game default, 0=disable. 1=enable
increase_texrect_edge = -1
# Reduce fillrect size by 1: -1=Game default, 0=disable. 1=enable
decrease_fillrect_edge = -1
# Enable perspective texture correction emulation: -1=Game default, 0=disable. 1=enable
texture_correction = -1
# Set special scale for PAL games: -1=Game default, 0=disable. 1=enable
pal230 = -1
# 3DFX Dithered alpha emulation mode: -1=Game default, >=0=dithered alpha emulation mode
stipple_mode = -1
# 3DFX Dithered alpha pattern: -1=Game default, >=0=pattern used for dithered alpha emulation
stipple_pattern = -1
# Check microcode each frame: -1=Game default, 0=disable. 1=enable
force_microcheck = -1
# Force 0xb5 command to be quad, not line 3D: -1=Game default, 0=disable. 1=enable
force_quad3d = -1
# Enable near z clipping: -1=Game default, 0=disable. 1=enable
clip_zmin = -1
# Enable far plane clipping: -1=Game default, 0=disable. 1=enable
clip_zmax = -1
# Use fast CRC algorithm: -1=Game default, 0=disable. 1=enable
fast_crc = -1
# Adjust screen aspect for wide screen mode: -1=Game default, 0=disable. 1=enable
adjust_aspect = -1
# Force strict check in Depth buffer test: -1=Game default, 0=disable. 1=enable
zmode_compare_less = -1
# Apply alpha dither regardless of alpha_dither_mode: -1=Game default, 0=disable. 1=enable
old_style_adither = -1
# Scale vertex z value before writing to depth buffer: -1=Game default, 0=disable. 1=enable
n64_z_scale = -1
# Fast texrect rendering with hwfbe: -1=Game default, 0=disable. 1=enable
optimize_texrect = -1
# Do not copy auxiliary frame buffers: -1=Game default, 0=disable. 1=enable
ignore_aux_copy = -1
# Clear auxiliary texture frame buffers: -1=Game default, 0=disable. 1=enable
hires_buf_clear = -1
# Read alpha from framebuffer: -1=Game default, 0=disable. 1=enable
fb_read_alpha = -1
# Handle unchanged fb: -1=Game default, 0=disable. 1=enable
useless_is_useless = -1
# Set frambuffer CRC mode: -1=Game default, 0=disable CRC, 1=fast CRC, 2=safe CRC
fb_crc_mode = -1
# Filtering mode: -1=Game default, 0=automatic, 1=force bilinear, 2=force point sampled
filtering = -1
# Fog: -1=Game default, 0=disable. 1=enable
fog = -1
# Buffer clear on every frame: -1=Game default, 0=disable. 1=enable
buff_clear = -1
# Buffer swapping method: -1=Game default, 0=swap buffers when vertical interrupt has occurred, 1=swap buffers when set of conditions is satisfied. Prevents flicker on some games, 2=mix of first two methods
swapmode = -1
# Aspect ratio: -1=Game default, 0=Force 4:3, 1=Force 16:9, 2=Stretch, 3=Original
aspect = -1
# LOD calculation: -1=Game default, 0=disable. 1=fast, 2=precise
lodmode = -1
# Smart framebuffer: -1=Game default, 0=disable. 1=enable
fb_smart = -1
# Hardware frame buffer emulation: -1=Game default, 0=disable. 1=enable
fb_hires = -1
# Read framebuffer every frame (may be slow use only for effects that need it e.g. Banjo Kazooie, DK64 transitions): -1=Game default, 0=disable. 1=enable
fb_read_always = -1
# Render N64 frame buffer as texture: -1=Game default, 0=disable, 1=mode1, 2=mode2
read_back_to_screen = -1
# Show images written directly by CPU: -1=Game default, 0=disable. 1=enable
detect_cpu_write = -1
# Get frame buffer info: -1=Game default, 0=disable. 1=enable
fb_get_info = -1
# Enable software depth render: -1=Game default, 0=disable. 1=enable
fb_render = -1


[Video-GLideN64]

# Settings version. Don't touch it.
configVersion = 26
# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)
MultiSampling = 0
# Enable/Disable Fast Approximate Anti-Aliasing FXAA
FXAA = False
# Screen aspect ratio (0=stretch, 1=force 4:3, 2=force 16:9, 3=adjust)
AspectRatio = 1
# Swap frame buffers (0=On VI update call, 1=On VI origin change, 2=On buffer update)
BufferSwapMode = 0
# Frame buffer size is the factor of N64 native resolution.
UseNativeResolutionFactor = 0
# Bilinear filtering mode (0=N64 3point, 1=standard)
bilinearMode = True
# Remove halos around filtered textures.
enableHalosRemoval = False
# Max level of Anisotropic Filtering, 0 for off
MaxAnisotropy = 0
# Enable color noise emulation.
EnableNoise = True
# Enable LOD emulation.
EnableLOD = True
# Enable hardware per-pixel lighting.
EnableHWLighting = False
# Use persistent storage for compiled shaders.
EnableShadersStorage = True
# Do not use shaders to emulate N64 blending modes. Works faster on slow GPU. Can cause glitches.
EnableLegacyBlending = False
# Enable writing of fragment depth. Some mobile GPUs do not support it, thus it made optional. Leave enabled.
EnableFragmentDepthWrite = True
# Use GLideN64 per-game settings.
EnableCustomSettings = True
# Make texrect coordinates continuous to avoid black lines between them. (0=Off, 1=Auto, 2=Force)
CorrectTexrectCoords = 0
# Render 2D texrects in native resolution to fix misalignment between parts of 2D image.
EnableNativeResTexrects = False
# Render backgrounds mode (HLE only). (0=One piece (fast), 1=Stripped (precise))
BackgroundsMode = 1
# Enable frame and|or depth buffer emulation.
EnableFBEmulation = True
# Copy auxiliary buffers to RDRAM
EnableCopyAuxiliaryToRDRAM = False
# Enable N64 depth compare instead of OpenGL standard one. Experimental.
EnableN64DepthCompare = False
# Force depth buffer clear. Hack. Needed for Eikou no Saint Andrews.
ForceDepthBufferClear = False
# Disable buffers read/write with FBInfo. Use for games, which do not work with FBInfo.
DisableFBInfo = True
# Read color buffer by 4kb chunks (strict follow to FBRead specification)
FBInfoReadColorChunk = False
# Read depth buffer by 4kb chunks (strict follow to FBRead specification)
FBInfoReadDepthChunk = True
# Enable color buffer copy to RDRAM (0=do not copy, 1=copy in sync mode, 2=Double Buffer, 3=Triple Buffer)
EnableCopyColorToRDRAM = 2
# Enable depth buffer copy to RDRAM  (0=do not copy, 1=copy from video memory, 2=use software render)
EnableCopyDepthToRDRAM = 2
# Enable color buffer copy from RDRAM.
EnableCopyColorFromRDRAM = False
# Enable resulted image crop by Overscan.
EnableOverscan = False
# PAL mode. Left bound of Overscan
OverscanPalLeft = 0
# PAL mode. Right bound of Overscan
OverscanPalRight = 0
# PAL mode. Top bound of Overscan
OverscanPalTop = 0
# PAL mode. Bottom bound of Overscan
OverscanPalBottom = 0
# NTSC mode. Left bound of Overscan
OverscanNtscLeft = 0
# NTSC mode. Right bound of Overscan
OverscanNtscRight = 0
# NTSC mode. Top bound of Overscan
OverscanNtscTop = 0
# NTSC mode. Bottom bound of Overscan
OverscanNtscBottom = 0
# Texture filter (0=none, 1=Smooth filtering 1, 2=Smooth filtering 2, 3=Smooth filtering 3, 4=Smooth filtering 4, 5=Sharp filtering 1, 6=Sharp filtering 2)
txFilterMode = 0
# Texture Enhancement (0=none, 1=store as is, 2=X2, 3=X2SAI, 4=HQ2X, 5=HQ2XS, 6=LQ2X, 7=LQ2XS, 8=HQ4X, 9=2xBRZ, 10=3xBRZ, 11=4xBRZ, 12=5xBRZ), 13=6xBRZ
txEnhancementMode = 0
# Deposterize texture before enhancement.
txDeposterize = False
# Don't filter background textures.
txFilterIgnoreBG = False
# Size of filtered textures cache in megabytes.
txCacheSize = 100
# Use high-resolution texture packs if available.
txHiresEnable = False
# Allow to use alpha channel of high-res texture fully.
txHiresFullAlphaChannel = True
# Use alternative method of paletted textures CRC calculation.
txHresAltCRC = False
# Enable dump of loaded N64 textures.
txDump = False
# Zip textures cache.
txCacheCompression = True
# Force use 16bit texture formats for HD textures.
txForce16bpp = False
# Save texture cache to hard disk.
txSaveCache = True
# Path to folder with hi-res texture packs.
txPath = "C:/Users/GamerPC/AppData/Roaming/Mupen64Plus/hires_texture"
# Path to folder where plugin saves texture cache files.
txCachePath = "C:/Users/GamerPC/AppData/Roaming/Mupen64Plus/cache"
# Path to folder where plugin saves dumped textures.
txDumpPath = "C:/Users/GamerPC/AppData/Roaming/Mupen64Plus/texture_dump"
# File name of True Type Font for text messages.
fontName = "arial.ttf"
# Font size.
fontSize = 18
# Font color in RGB format.
fontColor = "B5E61D"
# Force gamma correction.
ForceGammaCorrection = False
# Gamma correction level.
GammaCorrectionLevel = 2.000000
# Show FPS counter.
ShowFPS = False
# Show VI/S counter.
ShowVIS = False
# Show percent counter.
ShowPercent = False
# Show internal resolution.
ShowInternalResolution = False
# Show rendering resolution.
ShowRenderingResolution = False
# Counters position (1=top left, 2=top center, 4=top right, 8=bottom left, 16=bottom center, 32=bottom right)
CountersPos = 8


[Video-Rice]

# Mupen64Plus Rice Video Plugin config parameter version number
Version = 1
# Frame Buffer Emulation (0=ROM default, 1=disable)
FrameBufferSetting = 0
# Frequency to write back the frame buffer (0=every frame, 1=every other frame, etc)
FrameBufferWriteBackControl = 0
# Render-to-texture emulation (0=none, 1=ignore, 2=normal, 3=write back, 4=write back and reload)
RenderToTexture = 0
# Control when the screen will be updated (0=ROM default, 1=VI origin update, 2=VI origin change, 3=CI change, 4=first CI change, 5=first primitive draw, 6=before screen clear, 7=after screen drawn)
ScreenUpdateSetting = 4
# Force to use normal alpha blender
NormalAlphaBlender = False
# Use a faster algorithm to speed up texture loading and CRC computation
FastTextureLoading = False
# Use different texture coordinate clamping code
AccurateTextureMapping = True
# Force emulated frame buffers to be in N64 native resolution
InN64Resolution = False
# Try to reduce Video RAM usage (should never be used)
SaveVRAM = False
# Enable this option to have better render-to-texture quality
DoubleSizeForSmallTxtrBuf = False
# Force to use normal color combiner
DefaultCombinerDisable = False
# Enable game-specific settings from INI file
EnableHacks = True
# If enabled, graphics will be drawn in WinFrame mode instead of solid and texture mode
WinFrameMode = False
# N64 Texture Memory Full Emulation (may fix some games, may break others)
FullTMEMEmulation = False
# Enable vertex clipper for fog operations
OpenGLVertexClipper = False
# Enable/Disable SSE optimizations for capable CPUs
EnableSSE = True
# If this option is enabled, the plugin will skip every other frame
SkipFrame = False
# If enabled, texture enhancement will be done only for TxtRect ucode
TexRectOnly = False
# If enabled, texture enhancement will be done only for textures width+height<=128
SmallTextureOnly = False
# Select hi-resolution textures based only on the CRC and ignore format+size information (Glide64 compatibility)
LoadHiResCRCOnly = True
# Enable hi-resolution texture file loading
LoadHiResTextures = False
# Enable texture dumping
DumpTexturesToFiles = False
# Display On-screen FPS
ShowFPS = False
# Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear
Mipmapping = 2
# Enable, Disable fog generation (0=Disable, 1=Enable)
FogMethod = 1
# Force to use texture filtering or not (0=auto: n64 choose, 1=force no filtering, 2=force filtering)
ForceTextureFilter = 0
# Primary texture enhancement filter (0=None, 1=2X, 2=2XSAI, 3=HQ2X, 4=LQ2X, 5=HQ4X, 6=Sharpen, 7=Sharpen More, 8=External, 9=Mirrored)
TextureEnhancement = 0
# Secondary texture enhancement filter (0 = none, 1-4 = filtered)
TextureEnhancementControl = 0
# Color bit depth to use for textures (0=default, 1=32 bits, 2=16 bits)
TextureQuality = 0
# Z-buffer depth (only 16 or 32)
OpenGLDepthBufferSetting = 16
# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)
MultiSampling = 0
# Color bit depth for rendering window (0=32 bits, 1=16 bits)
ColorQuality = 0
# OpenGL level to support (0=auto, 1=OGL_FRAGMENT_PROGRAM)
OpenGLRenderSetting = 0
# Enable/Disable Anisotropic Filtering for Mipmapping (0=no filtering, 2-16=quality). This is uneffective if Mipmapping is 0. If the given value is to high to be supported by your graphic card, the value will be the highest value your graphic card can support. Better result with Trilinear filtering
AnisotropicFiltering = 0
# If true, use polygon offset values specified below
ForcePolygonOffset = False
# Specifies a scale factor that is used to create a variable depth offset for each polygon
PolygonOffsetFactor = 0.000000
# Is multiplied by an implementation-specific value to create a constant depth offset
PolygonOffsetUnits = 0.000000


[Video-Z64]

# High resolution framebuffer
HiResFB = True
# Use framebuffer info
FBInfo = True
# Run RDP on thread
Threaded = False
# Run RDP asynchronously
Async = False
# Don't use NPOT FBOs (may be needed for older graphics cards)
NoNpotFbos = False

Title: Re: Turok 3 Mouse Input and other goodies
Post by: Kil3r on May 27, 2020, 01:56:31 AM
Woops delete this post.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Party Boy on May 27, 2020, 07:28:34 AM
Thanks, I already finished my Danielle run, it was a slideshow sometimes...

Your setup runs smooth like a baby ass, I don't know if it's the mupen64plus-rsp-z64-hlevideo.dll or not using a frontend (¿???)...
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Kil3r on May 27, 2020, 03:25:47 PM
Thanks, I already finished my Danielle run, it was a slideshow sometimes...

Your setup runs smooth like a baby ass, I don't know if it's the mupen64plus-rsp-z64-hlevideo.dll or not using a frontend (¿???)...
.

I believe it's the rsp plugin as well. I for sure had laggier results with another rsp plugin. Sorry I didn't get back to you sooner.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Sirenated on June 12, 2020, 12:15:53 PM
Here is my Mupen64Plus config file.

Well, I followed your instructions to a T, and it manages to run, but crashes the instant I try any input. Kinda sucks that OP's instructions weren't clear at all and left out important information like your post did in regards to the dlls needed. Anyway, trying to get this to work hasn't been worth the headache. Thanks for the information though, I appreciate it.

What an absolute slog of an emulator, though. What's the point of a piece of software if it lacks even the most basic user functionality?
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on June 12, 2020, 04:54:50 PM
Kinda sucks that OP's instructions weren't clear at all and left out important information like your post did in regards to the dlls needed.
My instructions were pretty clear.
Quote from: Drahsid
Download any version of Mupen64Plus that is not Mupen64Plus-nx!!
Download and extract this into the root directory of Mupen64. This should replace "mupen64plus.dll", and you should see a new folder called "scripts."
That's it, run Turok 3 in Mupen!
User error does not mean that I wrote unclear instructions.
For example:
What an absolute slog of an emulator, though. What's the point of a piece of software if it lacks even the most basic user functionality?
This is a ridiculous statement. Mupen64plus is pretty good. It has extensive user-functionality. Just because it is CLI doesn't mean it isn't functional; if anything, it gives more power to the user.

If you need a visual tutorial to get this working, maybe I can do that sometime, but it really is pretty simple. The most complicated part ought to be configuring the controls.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Drahsid on June 14, 2020, 05:58:12 PM
I might make a video sometime in the future, but if you get to it first, you are absolutely welcome to do it. No skin off of my nose.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Kil3r on June 26, 2020, 12:12:09 AM
Well, I followed your instructions to a T, and it manages to run, but crashes the instant I try any input.

Maybe this could be due to accidental misconfiguration or maybe a AV detecting a false positive?

Kinda sucks that OP's instructions weren't clear at all and left out important information like your post did in regards to the dlls needed.

For what its worth, the DLLs mentioned in my post are technically optional. I only said they are necessary because if you use the exact same .cfg as mine, mupen will be looking for those specific dlls, as those are the dlls I chose in my cfg. You can use different plugins but you will have to change that in the .cfg. This is somewhat my fault for not giving more vanilla mupen setup, but I really enjoyed my settings so I figured that those were the ones I was going to share.

Both of these issues considered, this type of stuff is bound to have user error because people just don't know. However, putting more work into a UI that sets everything up may not even be worth it if there isn't alot of attention on the mouse script. So for me, its easy to understand why getting this mouse look experience is hard. If you want it to be prepackaged for you, ready to play, then you might be waiting until Night Dive releases a remaster. Otherwise, you have to put some elbow grease into it. I expect people to have issues with a video tutorial as well, but it will certainly help alot.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: captainking117 on June 28, 2020, 11:43:09 AM
Hi, just joined to say that I'm also experiencing the same thing as that other lad (crash on startup).
Any ideas why that might have happened.
What I did is download muppen as OP said, copy pasted the config file posted by kil3r previously (since I wanted to have a similar config to his) and ran the emulator.
It instantly crashes when I press any button on my keyboard.
I don't use an anti virus and everything is up to date regarding GFX cards/firmware and all that jazz.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: eqagunn on February 03, 2021, 05:59:56 AM
@Drahsid Thank you for this! I've set TIMEBEFOREEXECUTE to 0 and the game doesn't softlock in the main menu for me. Any way I can change the initial mouse state to locked?

Here are detailed instructions for anyone having trouble:
- Download newest Win32 Mupen64Plus release (https://github.com/mupen64plus/mupen64plus-core/releases) (I used v2.5.9 (https://github.com/mupen64plus/mupen64plus-core/releases/download/2.5.9/mupen64plus-bundle-win32-2.5.9.zip)) and extract it to the folder of your choice ("GameDir" from now on).
- Download Drahsid's Mouse Input Patch (https://drive.google.com/open?id=1AqrkhE9RF0XOBblfL6ndBAwNT9-VZR9Q), extract it to the GameDir and overwrite.
- Place the game ROM into the GameDir.
- Start the game (by dragging and dropping ROM file onto mupen64plus-ui-console.exe) to generate the config file and close it.
- If you get "Core Error: incompatible Input plugin" crash (I did) download Drahsid's Mupen64Plus SDL Input Plugin v2.5.9 Patch (https://drive.google.com/file/d/176niOUqSvSamkBYn8mn8ZORrDBoYmplG/view), extract it to the GameDir and overwrite.
- To run the game in fullscreen and FullHD edit %appdata%\Mupen64Plus\mupen64plus.cfg and under [Video-General] set Fullscreen to True, ScreenWidth to 1920, and ScreenHeight to 1080.
- If you prefer pixelated textures over blurry ones edit mupen64plus.cfg and under [Video-Rice] set ForceTextureFilter to 1.
- Start the game and spam Enter (also hold F) until you are in control of the character; use the Home button to lock/unlock the mouse (activate/deactivate the script).
- If your game freezes upon character selection, either restart the game and try again as that seems to be random, or edit mupen64plus.cfg and under [Core] set R4300Emulator to 0 as suggested by Drahsid (https://www.turokforums.com/index.php?msg=14166).
- While in-game: Enter > Options > Display > Resolution > Letterbox.

Playing with optional Glide64mk2 video plugin:
- Edit mupen64plus.cfg and under [UI-Console] set VideoPlugin to "mupen64plus-video-glide64mk2.dll".
- Start the game to generate [Video-Glide64mk2] section in the config file.
- Edit mupen64plus.cfg and under [Video-Glide64mk2] set aspect to 2.
- If you prefer pixelated textures over blurry ones under [Video-Glide64mk2] set filtering to 2.
- While in-game: Enter > Options > Display > Resolution > Letterbox.

Playing with optional GLideN64 video plugin:
- This plugin seems to give the best results but has no point-sampled/nearest-neighbor (pixelated) filtering as of this writing.
- Download newest GLideN64 release (https://github.com/gonetz/GLideN64/releases) (I used v4.0 (https://github.com/gonetz/GLideN64/releases/download/Public_Release_4_0/GLideN64_Public_Release_4.0.7z)), open it and extract the contents of bin\Mupen64Plus\ to the GameDir.
- Edit mupen64plus.cfg and under [UI-Console] set VideoPlugin to "mupen64plus-video-GLideN64.dll".
- Start the game to generate [Video-GLideN64] section in the config file.
- If you get a frozen SDL_app window upon start (might happen with newest GLideN64 built from master (https://ci.appveyor.com/project/gonetz/gliden64/build/artifacts)) edit mupen64plus.cfg and under [Video-GLideN64] set ThreadedVideo to False.
- Edit mupen64plus.cfg and under [Video-GLideN64] set AspectRatio to 3.
- To remove the black bars around the game under [Video-GLideN64] set EnableOverscan to True, OverscanNtscLeft, and OverscanNtscRight to 32, OverscanNtscTop and OverscanNtscBottom to 16.
- While in-game: Enter > Options > Display > Resolution > High.

Setting up the controls:
- To get WASD movement, while in-game: Enter > Options > Control > Style > Normal left-handed.
- To turn off automatic aiming: Enter > Options > Control > Auto Aim > No.
- To make Fast-forward your Left-shift running edit mupen64plus.cfg and under [CoreEvents] set Kbd Mapping Fast Forward to 304.
- To disable the keys that terminate/freeze the game under [CoreEvents] set Kbd Mapping Stop, Kbd Mapping Reset, Kbd Mapping Pause, and Kbd Mapping Frame Advance to "".
- Under [Input-SDL-Control1] set the keysyms (https://www.libsdl.org/release/SDL-1.2.15/include/SDL_keysym.h) as follows:
mode = 0 // Custom controller configuration.
Z Trig = "mouse(1)" // Attack/Fire to Left-click.
B Button = "key(113)" // Next-weapon/Use to E.
A Button = "key(101)" // Previous-weapon to Q.
C Button R = "mouse(3)" // Scope-on/Scope-off to Right-click.
C Button D = "key(306)" // Crouch to Left-ctrl.
L Trig = "key(32)" // Jump to Spacebar.

Making the game portable:
- Copy %appdata%\Mupen64Plus\mupen64plus.cfg to the GameDir.
- Edit mupen64plus.cfg (in the GameDir) and under [Core] set ScreenshotPath to "screenshot", SaveStatePath to "save", SaveSRAMPath to "save", and SharedDataPath to "shared".
- Copy the code below into Notepad and save it into the GameDir as play.bat.
for /f "tokens=*" %%a in ('dir /b *.z64') do mupen64plus-ui-console.exe --configdir .\ "%%a"
- Use play.bat to start the game (script assumes ROM file has .z64 extension).
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Skyrider on February 21, 2021, 11:13:34 PM
Just registered to say 1) fantastic effort to make this game PC-playable (the higher difficulties are impossible without snappy KB/M controls), but 2) my framerate is absolutely abysmal for some reason. I've tried using all of the different video plugins and changed the interpreter from dynarec to pure, but while I get 60FPS in the menu and intro scenes, once I get into gameplay I am hitting between 10-20FPS. Any possible explanation?
Title: Re: Turok 3 Mouse Input and other goodies
Post by: Nutshot on June 04, 2021, 03:44:56 PM
Drahsid, i have a question.
I recently finally tried both "Rage Wars" and "Turok 3" out, configured it all to really making a playtrough this time.

Well, i noticed both of these have the exact same issue as the User "Kil3r". He once made a post:
The camera is always jiggling. Its almost as if the camera is fighting back against the mouse or perhaps its not super smooth.

For a solution you said:
"It is possibly related to the QT launcher, or perhaps you have the joystick set to the mouse in Mupens config (DONT DO THIS, the mouse input is not linked to the joystick)".

To which he replied:
"Thanks! Your second point was the reason behind the issue. For anyone having the same issue, make sure "mouse = False" in mupen's cfg."

Well, i already have that set in my Mupen Config and it´s still happening. I guess it has maybe something to do with the Mupen Controls?
In case you have an idea i will post my Control Configs here:
Code: [Select]
[Input-SDL-Control1]

# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2.000000
# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic
mode = 0
# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number
device = -1
# SDL joystick name (or Keyboard)
name = ""
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True
# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak
plugin = 2
# If True, then mouse buttons may be used with this controller
mouse = False
# Scaling factor for mouse movements.  For X, Y axes.
MouseSensitivity = "2.00,2.00"
# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0.  For X, Y axes.
AnalogDeadzone = "4096,4096"
# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80).  For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value
AnalogPeak = "32768,32768"
# Digital button configuration mappings
DPad U = "key(119)"
DPad D = "key(115)"
DPad L = "key(97)"
DPad R = "key(100)"
Start = "key(27)"
Z Trig = "mouse(1)"
B Button = "key(113) mouse(3)"
A Button = "key(101)"
C Button U = "key(119)"
C Button D = "key(115)"
C Button L = "key(97)"
C Button R = "key(100)"
R Trig = "key(32)"
L Trig = ""
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = "axis(0-,0+)"
Y Axis = "axis(1-,1+)"

Edit: I´m also using your fixed input plugin from the first page (i guess it doesn´t matter if you use the one from RW or T3), as with the default one Mupen64Plus always crashed.
Also speaking of Mupen64Plus, i´m using no Frontend or anything. Also using Interpreter Mode.
Title: Re: Turok 3 Mouse Input and other goodies
Post by: FX on July 03, 2021, 06:50:27 AM
I know this is a pretty dead thread, but I am curious if this will work on Turok Rage Wars?

Just read through the rest of the forum, apologies.