Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

AnalogsEnhancerKai Vita: Difference between revisions

From GameBrew
Created page with "{{Infobox Vita Homebrews |title=AnalogsEnhancerKai |image=AnalogsEnhKaiVita.png |description=A Modified version of AnalogEnhancer plugin for PSVITA. Now with outer deadzone and 8-way digital. |author=t0mizwf26, yakit4k0, Rinnegatamante |lastupdated=2025/08/02 |type=Plugins |version=1.1.0 |license=GPL-3.0 |download=https://dlhb.gamebrew.org/vitahomebrews/AnalogsEnhKaiVita.7z |website=https://github.com/t0mizwf26/AnalogsEnhancerKai |source=https://github.com/t0mizwf26/Anal..."
 
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Infobox Vita Homebrews
{{Infobox Vita Homebrews
|title=AnalogsEnhancerKai
|title=AnalogsEnhancerKai
|image=AnalogsEnhKaiVita.png
|image=psvita2.png
|description=A Modified version of AnalogEnhancer plugin for PSVITA. Now with outer deadzone and 8-way digital.
|description=A Modified version of AnalogEnhancer with new features.
|author=t0mizwf26, yakit4k0, Rinnegatamante
|author=t0mizwf26, yakit4k0, Rinnegatamante
|lastupdated=2025/08/02
|lastupdated=2025/08/04
|type=Plugins
|type=Plugins
|version=1.1.0
|version=1.2.0
|license=GPL-3.0
|license=GPL-3.0
|download=https://dlhb.gamebrew.org/vitahomebrews/AnalogsEnhKaiVita.7z
|download=https://dlhb.gamebrew.org/vitahomebrews/AnalogsEnhKaiVita.7z
Line 16: Line 16:
|title=Vita Homebrew Apps (Plugins) - GameBrew
|title=Vita Homebrew Apps (Plugins) - GameBrew
|title_mode=append
|title_mode=append
|image=AnalogsEnhKaiVita.png
|image=psvita2.png
|image_alt=AnalogsEnhancerKai
|image_alt=AnalogsEnhancerKai
}}
}}
A Modified version of AnalogEnhancer plugin for PSVITA. Now with outer deadzone and 8-way digital.
A Modified version of [[AnalogsEnhancer Vita|AnalogsEnhancer plugin]]. Now with outer deadzone and 8-way digital.


Based on the original AnalogsEnhancer v1.1 code (commit [https://github.com/Rinnegatamante/AnalogsEnhancer/tree/0629c4b8ca124bc08cf6a6dc3e759a0eb8bbc45a 0629c4b])
Based on the original AnalogsEnhancer v1.1 code (commit [https://github.com/Rinnegatamante/AnalogsEnhancer/tree/0629c4b8ca124bc08cf6a6dc3e759a0eb8bbc45a 0629c4b])
With "Outer Dead Zone" idea from u/lizin5ths (fork [https://github.com/Haasman0/AnalogsEnhancer Haasman0 / AnalogsEnhancer])
With "Outer Dead Zone" idea from u/lizin5ths (fork [https://github.com/Haasman0/AnalogsEnhancer Haasman0 / AnalogsEnhancer]).


== Features Explained ==
== Features ==
=== Introduction ===
* Classic features from Rinnegatamante/AnalogsEnhancer:
If .txt config file is missing, the following default config will be used instead.
** (Inner) Dead Zone for both analogue sticks.
<code>l=0,127,n,s=0,0;r=0,127,n,s=0,0;n</code>
** Rescaling.
Which means every feature offered by this plugin is turned OFF.
** ANALOG_WIDE.
* New features:
** Outer Dead Zone.
** Slow (Precision) Mode.
** Load config file from ur0 or ux0.
** Pseudo 8-Way stick with customisable actuation point (via Outer Dead Zone w/ Rescaling OFF).
** Diagonal Scaling.
** And more.


https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-01.png
== Installation ==
Copy AnalogsEnhancerKai.skprx into "ur0:tai/".


=== 2) Inner Dead Zone ===
Customise AnalogsEnhancerKai's config.txt config file. You can either place it in "ux0:data/AnalogsEnhancerKai/" or "ux0:data/".
Classic feature from the original Rinnegatamante/AnalogsEnhancer.


With 2 different modes to choose from: Rescaling On & Rescaling Off.
Option 1 (ux0:data/AnalogsEnhancerKai/):
*Copy "config.txt" into "ux0:data/AnalogsEnhancerKai/".


==== 2.1) Inner Dead Zone - Rescaling On (Scaled Radial Dead Zone) ====
Option 2 (ur0:tai/):
<code>l=64,127,y,s=0,0;r=64,127,y,s=0,0;n</code>
*Rename "config.txt" to "AnaEnKaiCfg.txt" and place into "ur0:tai/".
*( Handle ur0:tai/, or anything ur0: with Caution )
*( If both "ur0:tai/AnaEnKaiCfg.txt" &amp; "ux0:data/AnalogsEnhancerKai/config.txt" are present, will use "AnaEnKaiCfg.txt" )


This is probably the most common Dead Zone people would use to fix drifting analogue sticks.
Edit "ur0:tai/config.txt", add the following, and save.
<pre class="notranslate"># AnalogsEnhancerKai
*KERNEL
ur0:tai/AnalogsEnhancerKai.skprx</pre>
Reboot PS Vita.


The full range is available, no input is ignored (skipped), allowing low-magnitude adjustments.
Note: If .txt config file is missing, the below default config will be used instead, which means every feature offered by this plugin is turned OFF.


https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-02.png
==User guide==
=== Config file and examples ===
Default config: <code>l=0,127,n,s=0,0;r=0,127,n,s=0,0;n;d=0</code>


==== 2.2) Inner Dead Zone - Rescaling Off (Radial Dead Zone) ====
Break it into 4 sections:
<code>l=16,127,n,s=0,0;r=16,127,n,s=0,0;n</code>


Fewer people would choose to use this. Less ideal, some input is ignored (skipped).
{| class="wikitable" style="width:300px"
|-
! Section
! Content
|-
| Left Stick
| l=0,127,n,s=0,0;
|-
| Right Stick
| r=0,127,n,s=0,0;
|-
| -----------
| ----------------
|-
| ANALOG_WIDE
| n;
|-
| -----------
| ----------------
|-
| Diag. Scaling
| d=0
|}


In this example, low-magnitude adjustments with magnitude < 16 are impossible.
Now, we could see Left Stick and Right Stick configs sharing the same structure:


There's one advantage, though. Notice the gradient here is still 1?
<code>l(/r)=0,127,n,s=0,0;</code>


Unlike the previous Rescaling On example with gradient 2.
Each part means:


This means it's a little easier to make precise adjustments for the remaining range (16 to Max).
{| class="wikitable" style="width:300px"
|-
! Config
! Meaning
|-
| l(/r)=0,127,
| Inner Dead Zone, Outer Dead Zone
|-
| n,
| Rescaling (y=ON ; n=OFF)
|-
| s=0,0;
| Slow Mode Range, Slow Mode Max Output
|-
| ------------
| -------------------------------------
|-
| n;
| ANALOG_WIDE, (y=ON ; n=OFF)
|-
| ------------
| -------------------------------------
|-
| d=0
| Diagonal Scaling
|}


https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-03.png
For each non-&quot;y/n&quot; config:


=== 3) Outer Dead Zone ===
{| class="wikitable"
Outer Dead Zone is useful with situations like
|-
 
! Config
"since putting little joystick covers on them makes it extremely difficult to hit the maximum values."
! Legit Range if &quot;ON&quot;
u/lizin5ths
! Special Cases (switch OFF, etc.)
|-
| Inner Dead Zone
| 1 ~ 126
| 0 : Inner DZ OFF
|-
|
|
| &gt; 126 : Stick Disabled (Always Centre)
|-
| --------------------
| ----------------------
| -------------------------------------------------------------
|-
| Outer Dead Zone
| 1 ~ 126
| 0 or 127 : Outer DZ OFF
|-
|
|
| Never overlap, Autocorrect if Outer DZ &lt; Inner DZ
|-
| --------------------
| ----------------------
| -------------------------------------------------------------
|-
| Slow Mode Range
| 5 ~ &quot;50% Non-DZ range&quot;
| 0 : Slow Mode OFF
|-
|
|
| &quot;50% Non-DZ range&quot; means 0.5 * (Outer DZ - Inner DZ)
|-
|
|
| Autocorrect to Legit Min/Max
|-
|
|
| if both Inner DZ &amp; Outer DZ = OFF, Slow Mode OFF
|-
|
|
| if 0.5 * (Outer DZ - Inner DZ) &lt; 5, Slow Mode OFF
|-
| --------------------
| ----------------------
| -------------------------------------------------------------
|-
| Slow Mode Max Output
| 5 ~ &quot;Slow Mode Range&quot;
| Autocorrect to Legit Min/Max
|-
| --------------------
| ----------------------
| -------------------------------------------------------------
|-
| Diagonal Scaling
| 1 ~ 42
| 0 : Diagonal Scaling OFF
|-
|
|
| Autocorrect to OFF/Max
|-
|
|
| Only works with &quot;Rescaling On&quot;
|-
|
|
| if both Inner DZ &amp; Outer DZ = OFF, DS OFF
|}


Outer Dead Zone with Rescaling On could help to solve the problem by reaching the max earlier. The code is based on u/lizin5ths's implementation (fork [https://github.com/Haasman0/AnalogsEnhancer Haasman0 / AnalogsEnhancer]), with many improvements.


Outer Dead Zone with Rescaling Off however, is something a little different. More on that below.
==== Inner Dead Zone ====
Classic feature from the original Rinnegatamante/AnalogsEnhancer. With 2 different modes to choose from: Rescaling On & Rescaling Off.


==== 3.1) Outer Dead Zone - Rescaling On (360-Degree Movement) ====
*'''Rescaling On (Scaled Radial Dead Zone)'''
<code>l=0,80,y,s=0,0;r=0,80,y,s=0,0;n</code>
** <code>l=64,127,y,s=0,0;r=64,127,y,s=0,0;n;d=0</code>
** In this example, the stick ignores the first 50% of the movement but scales the remaining range. Best for fixing drift without losing precision.
*'''Rescaling Off (Radial Dead Zone)'''
** <code>l=16,127,n,s=0,0;r=16,127,n,s=0,0;n;d=0</code>
** Fewer people would choose to use this. Less ideal, some input is ignored (skipped).
** In this example, low-magnitude adjustments with magnitude < 16 are impossible.
** With rescaling off meaning it's a little easier to make precise adjustments for the remaining range (16 to Max).


In this example, the stick reaches the max much earlier. Bring more ''cute cat paw claw grip cap cover''!!.
==== Outer Dead Zone ====
Outer Dead Zone is useful for those who use joystick covers or grips that make it hard to push the stick all the way.


https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-04.png
Outer Dead Zone with Rescaling On could help to solve the problem by reaching the max earlier. The code is based on u/lizin5ths's implementation, with many improvements. Outer Dead Zone with Rescaling Off however, is something a little different.  


==== 3.2) Outer Dead Zone - Rescaling Off (8-Way, "Axial Dead Zone") ====
*'''Rescaling On (360-Degree Movement)'''
<code>l=0,80,n,s=0,0;r=0,80,n,s=0,0;n</code>
**<code>l=0,80,y,s=0,0;r=0,80,y,s=0,0;n;d=0</code>
**In this example, the stick hits 100% output at 80% input.
*'''Rescaling Off (8-Way, "Axial Dead Zone")'''
**<code>l=0,80,n,s=0,0;r=0,80,n,s=0,0;n;d=0</code>
**The outer part of the stick acts like a digital joystick (up/down/left/right only).
**Feels like old-school fighting games.
*'''Using Inner & Outer Dead Zone together:'''
** <code>l=80,80,n,s=0,0;r=80,80,n,s=0,0;n;d=0</code>
** By setting "Inner Dead Zone = Outer Dead Zone", you could make the stick 8-way only when pushed hard.


The problem is solved by using Rescaling On.
==== Slow Mode ====
Aka Sniper / Snail / Shooter / High-Precision Mode.  


Q: What should Rescaling Off do? A: Go retro.
*'''Rescaling On'''
** <code>l=64,127,y,s=32,16;r=64,127,y,s=32,16;n;d=0</code>
** This option makes small movements easier, but outer range becomes twitchier.
*'''Rescaling Off'''
** <code>l=16,127,n,s=32,16;r=16,127,n,s=32,16;n;d=0</code>
** If rescaling is off (n), Slow Mode locks the output to a fixed value (e.g. always 16).


Now here's something niche.
==== ANALOG_WIDE ====
That last "n" before "d=0" in <code>l=0,127,n,s=0,0;r=0,127,n,s=0,0;n;d=0</code>


https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-05.png
Also a classic feature from the original Rinnegatamante/AnalogsEnhancer: "ANALOG_WIDE is one of the two modalities to poll analogs from Vita OS (one being ANALOG that simulates PSP polling and ANALOG_WIDE). In ANALOG mode (used even in several commercial games as well as PSP and PSX titles), max range of analogs is reduced thus making analogs feel less reactive."


==== 3.3) Whoa, hang on a second! ====
It's a very nice feature but might "causes issues in some games". So it's disabled by default in AnalogsEnhancerKai.
Why should people use a normal 360-degree analogue stick with only the outer one-third as 8-Way?


Right, but we could use Inner & Outer Dead Zone together.
If needed, please re-enable it manually (by changing that last n into y).


<code>l=80,80,n,s=0,0;r=80,80,n,s=0,0;n</code>
==== Diagonal Scaling ====
The "d=0" from <code>l=0,127,n,s=0,0;r=0,127,n,s=0,0;n;d=0</code>


Note the 8-Way always has an "Axial Dead Zone" of magnitude 49.
In some software, the stick may have difficulty in reaching Max output in diagonal directions. This Diagonal Scaling feature might be useful when trying to fix that. (For example, there are people reporting issues with PSP games using Adrenaline.)
 
So by setting "Inner Dead Zone = Outer Dead Zone", we could have an 8-Way joystick with customisable actuation point (49 to 126)
 
https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-06.png
 
<code>l=80,80,y,s=0,0;r=80,80,y,s=0,0;n</code>
 
You probably guessed we could do the same with Rescaling On, 360-Degree Movement with Max output only.
 
However, personally, I can't think of a reason to.
 
=== 4) S for Sniper? Snail? Shooter? ...Well, it's "Slow Mode" ===
 
Very boring name I know. Just call it Sniper / Snail / Shooter / High-Precision Mode, or whatever you like.
 
I'm just way too lazy to change all related names in the code, so I will keep calling it: "Slow Mode".
 
Remember earlier example in 2.1) Inner Dead Zone - Rescaling On (Scaled Radial Dead Zone)?
 
<code>l=64,127,y,s=0,0;r=64,127,y,s=0,0;n</code>
 
Inner 50% = Dead Zone, gradient is "2" instead of the normal "1". Everything's so fast, it's hard to make tiny adjustments!
 
Let's try to fix this, but unfortunately with a price to pay.
 
==== 4.1) Slow Mode - Rescaling On ====
 
<code>l=64,127,y,s=32,16;r=64,127,y,s=32,16;n</code>
 
Change <code>s=0,0</code> to <code>s=32,16</code>, here's the result:
 
https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-07.png
 
Now it's easier to sneak / snipe.
 
However, the outer half is sacrificed. Gradient is increased, making the outer half even harder to do tiny adjustments.
 
==== 4.2) Slow Mode - Rescaling Off ====
<code>l=16,127,n,s=32,16;r=16,127,n,s=32,16;n</code>
 
Also change <code>s=0,0</code> to <code>s=32,16</code>, see what happens here when Rescaling Off:
 
https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-08.png
 
In this particular example, within Slow Mode range (32), the output magnitude will always be "16".
 
==== 4.3) Have some fun ====
 
<code>l=16,80,n,s=32,8;r=16,80,n,s=32,8;n</code>
 
Who's going to do this?
 
https://dlhb.gamebrew.org/vitahomebrews/images/AnalogsEnhKaiVita-09.png
 
=== 5) ANALOG_WIDE ===
That last "n" in <code>l=0,127,n,s=0,0;r=0,127,n,s=0,0;n</code>
 
Also a classic feature from the original Rinnegatamante/AnalogsEnhancer.
 
Please allow me to quote from [https://github.com/Rinnegatamante Rinnegatamante]
 
"ANALOG_WIDE is one of the two modalities to poll analogs from Vita OS (one being ANALOG that simulates PSP polling and ANALOG_WIDE)."
 
"In ANALOG mode (used even in several commercial games as well as PSP and PSX titles), max range of analogs is reduced thus making analogs feel less reactive."
 
It's a very nice feature but might [https://github.com/Rinnegatamante/AnalogsEnhancer/issues/2 "causes issues in some games"].
 
So it's disabled by default in AnalogsEnhancerKai.
 
If needed, please re-enable it manually (by changing that last n into y).
 
== How to Use ==
# Copy AnalogsEnhancerKai.skprx into ur0:tai/
# Customise AnalogsEnhancerKai's config.txt config file
# Copy config.txt into ux0:data/AnalogsEnhancerKai
 
Alternatively, if you prefer to use ur0:tai/ instead:
 
Rename config.txt to AnaEnKaiCfg.txt
Copy AnaEnKaiCfg.txt directly into ur0:tai/
 
( !! Handle "ur0:tai/", or anything "ur0:" with Caution !! )
( If both ur0:tai/AnaEnKaiCfg.txt & ux0:data/AnalogsEnhancerKai/config.txt are present, will use AnaEnKaiCfg.txt )
 
Edit ur0:tai/config.txt, add the following, and save
 
<pre class="notranslate"># AnalogsEnhancerKai
*KERNEL
ur0:tai/AnalogsEnhancerKai.skprx</pre>
 
Reboot PS Vita
 
== Understand & Customise Config File ==
 
<code>l=0,127,n,s=0,0;r=0,127,n,s=0,0;n</code>
 
Break it into 3 sections:
 
{| class="wikitable" style="border-spacing: 0px; margin-bottom: 16px; display: block; width: max-content; max-width: 100%; overflow: auto; font-variant-numeric: tabular-nums; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal;"
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Section
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Content
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Left Stick
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| l=0,127,n,s=0,0;
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Right Stick
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| r=0,127,n,s=0,0;
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| -----------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| ----------------
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| ANALOG_WIDE
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| n
|}
 
Now, we could see Left Stick and Right Stick configs sharing the same structure:
<code>l(/r)=0,127,n,s=0,0;</code>
 
Each part means:
 
{| class="wikitable" style="border-spacing: 0px; margin-bottom: 16px; display: block; width: max-content; max-width: 100%; overflow: auto; font-variant-numeric: tabular-nums; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal;"
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Config
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Meaning
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| l(/r)=0,127,
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Inner Dead Zone, Outer Dead Zone
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| n,
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Rescaling (y=ON ; n=OFF)
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| s=0,0;
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Slow Mode Range, Slow Mode Max Output
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| ------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| -------------------------------------
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| n
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 5) ANALOG_WIDE, (y=ON ; n=OFF)
|}
 
For each non-"y/n" config:
 
{| class="wikitable" style="border-spacing: 0px; margin-bottom: 16px; display: block; width: max-content; max-width: 100%; overflow: auto; font-variant-numeric: tabular-nums; font-variant-east-asian: normal; font-variant-alternates: normal; font-variant-position: normal; font-variant-emoji: normal;"
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Config
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Legit Range if "ON"
! style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Special Cases (switch OFF, etc.)
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Inner Dead Zone
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 1 ~ 126
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 0 : Inner DZ OFF
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| > 126 : Stick Disabled (Always Centre)
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| --------------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| ----------------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| -------------------------------------------------------------
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Outer Dead Zone
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 1 ~ 126
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 0 or 127 : Outer DZ OFF
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Never overlap, Autocorrect if Outer DZ < Inner DZ
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| --------------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| ----------------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| -------------------------------------------------------------
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Slow Mode Range
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 5 ~ "50% Non-DZ range"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 0 : Slow Mode OFF
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| "50% Non-DZ range" means 0.5 * (Outer DZ - Inner DZ)
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Autocorrect to Legit Min/Max
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| if both Inner DZ & Outer DZ = OFF, Slow Mode OFF
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"|
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| if 0.5 * (Outer DZ - Inner DZ) < 5, Slow Mode OFF
|- style="background-color: rgb(246, 248, 250); border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| --------------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| ----------------------
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| -------------------------------------------------------------
|- style="border-top-width: 0.909091px; border-top-color: rgba(209, 217, 224, 0.7);"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Slow Mode Max Output
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| 5 ~ "Slow Mode Range"
| style="padding: 6px 13px; border-color: rgb(209, 217, 224); border-width: 0.909091px; border-image: none 100% / 1 / 0 stretch"| Autocorrect to Legit Min/Max
|}


Eagle-eyed readers might spot in 4.1) Slow Mode - Rescaling On
* Off is 0 (Diagonal Scale Factor = 1.00x).
<code>l=64,127,y,s=32,16;r=64,127,y,s=32,16;n</code>
* The Minimum is 1 and the Maximum is 42 (Answer to the Ultimate Question of Life, The Universe, and Everything).
32 > (127-64)/2, <code>s=32,16</code> will get autocorrected to <code>s=31,16</code>
* (Out of range value will get autocorrected.)
* Increasing the value makes the stick reach its diagonal Max output faster.
* This feature only works with "Rescaling On". It also requires "Dead Zone On" to function. (E.g. "Inner DZ = 1")
** You might have to edit this value often. For example, if you find "d=42" works best for Adrenaline, leaving it at 42 will cause other games to reach diagonal Max too early. Since those games might work best with "d=0".


==Changelog==  
==Changelog==  
* 1.1.0
'''1.2.0 2025/08/04'''
** Add new Slow Mode feature for better low-magnitude stick movement
* Add new Diagonal Scaling (DS) feature for fixing inability to reach diagonal Max output in some games.
** Can use either ur0:tai or ux0:data/AnalogsEnhancerKai as config file folder
* [ IMPORTANT ] Config structure changed again for DS, please update your config file to v1.2.0.<br />
** Config structure changed and is no longer compatible with older versions
'''1.1.0 2025/08/01'''
* 1.0.1
* Add new Slow Mode feature for better low-magnitude stick movement.
** Initial Release
* Can use either ur0:tai or ux0:data/AnalogsEnhancerKai as config file folder.
** Add new Outer Dead Zone feature
* Config structure changed and is no longer compatible with older versions.<br />
** Config file moved to ur0:tai/
'''1.0.1 2025/07/27'''
* Initial Release.
* Add new Outer Dead Zone feature.
* Config file moved to ur0:tai/.


== Acknowledgements ==
==Credits==
Acknowledgements:
* [https://github.com/Rinnegatamante Rinnegatamante], for the original plugin
* [https://github.com/Rinnegatamante Rinnegatamante], for the original plugin
* [https://github.com/yakit4k0 yakit4k0], for compiling, testing, making README images, and helping to implement Outer Dead Zone & Slow Mode
* [https://github.com/yakit4k0 yakit4k0], for compiling, testing, making README images, and helping to implement Outer Dead Zone & Slow Mode
Line 321: Line 283:


== External links ==
== External links ==
* Github - https://github.com/t0mizwf26/AnalogsEnhancerKai
* GitHub - https://github.com/t0mizwf26/AnalogsEnhancerKai
* VitaDB - https://www.rinnegatamante.eu/vitadb/#/info/1294
* VitaDB - https://www.rinnegatamante.eu/vitadb/#/info/1294

Latest revision as of 02:18, 9 August 2025

AnalogsEnhancerKai
General
Authort0mizwf26, yakit4k0, Rinnegatamante
TypePlugins
Version1.2.0
LicenseGPL-3.0
Last Updated2025/08/04
Links
Download
Website
Source

A Modified version of AnalogsEnhancer plugin. Now with outer deadzone and 8-way digital.

Based on the original AnalogsEnhancer v1.1 code (commit 0629c4b) With "Outer Dead Zone" idea from u/lizin5ths (fork Haasman0 / AnalogsEnhancer).

Features

  • Classic features from Rinnegatamante/AnalogsEnhancer:
    • (Inner) Dead Zone for both analogue sticks.
    • Rescaling.
    • ANALOG_WIDE.
  • New features:
    • Outer Dead Zone.
    • Slow (Precision) Mode.
    • Load config file from ur0 or ux0.
    • Pseudo 8-Way stick with customisable actuation point (via Outer Dead Zone w/ Rescaling OFF).
    • Diagonal Scaling.
    • And more.

Installation

Copy AnalogsEnhancerKai.skprx into "ur0:tai/".

Customise AnalogsEnhancerKai's config.txt config file. You can either place it in "ux0:data/AnalogsEnhancerKai/" or "ux0:data/".

Option 1 (ux0:data/AnalogsEnhancerKai/):

  • Copy "config.txt" into "ux0:data/AnalogsEnhancerKai/".

Option 2 (ur0:tai/):

  • Rename "config.txt" to "AnaEnKaiCfg.txt" and place into "ur0:tai/".
  • ( Handle ur0:tai/, or anything ur0: with Caution )
  • ( If both "ur0:tai/AnaEnKaiCfg.txt" & "ux0:data/AnalogsEnhancerKai/config.txt" are present, will use "AnaEnKaiCfg.txt" )

Edit "ur0:tai/config.txt", add the following, and save.

# AnalogsEnhancerKai
*KERNEL
ur0:tai/AnalogsEnhancerKai.skprx

Reboot PS Vita.

Note: If .txt config file is missing, the below default config will be used instead, which means every feature offered by this plugin is turned OFF.

User guide

Config file and examples

Default config: l=0,127,n,s=0,0;r=0,127,n,s=0,0;n;d=0

Break it into 4 sections:

Section Content
Left Stick l=0,127,n,s=0,0;
Right Stick r=0,127,n,s=0,0;
----------- ----------------
ANALOG_WIDE n;
----------- ----------------
Diag. Scaling d=0

Now, we could see Left Stick and Right Stick configs sharing the same structure:

l(/r)=0,127,n,s=0,0;

Each part means:

Config Meaning
l(/r)=0,127, Inner Dead Zone, Outer Dead Zone
n, Rescaling (y=ON ; n=OFF)
s=0,0; Slow Mode Range, Slow Mode Max Output
------------ -------------------------------------
n; ANALOG_WIDE, (y=ON ; n=OFF)
------------ -------------------------------------
d=0 Diagonal Scaling

For each non-"y/n" config:

Config Legit Range if "ON" Special Cases (switch OFF, etc.)
Inner Dead Zone 1 ~ 126 0 : Inner DZ OFF
> 126 : Stick Disabled (Always Centre)
-------------------- ---------------------- -------------------------------------------------------------
Outer Dead Zone 1 ~ 126 0 or 127 : Outer DZ OFF
Never overlap, Autocorrect if Outer DZ < Inner DZ
-------------------- ---------------------- -------------------------------------------------------------
Slow Mode Range 5 ~ "50% Non-DZ range" 0 : Slow Mode OFF
"50% Non-DZ range" means 0.5 * (Outer DZ - Inner DZ)
Autocorrect to Legit Min/Max
if both Inner DZ & Outer DZ = OFF, Slow Mode OFF
if 0.5 * (Outer DZ - Inner DZ) < 5, Slow Mode OFF
-------------------- ---------------------- -------------------------------------------------------------
Slow Mode Max Output 5 ~ "Slow Mode Range" Autocorrect to Legit Min/Max
-------------------- ---------------------- -------------------------------------------------------------
Diagonal Scaling 1 ~ 42 0 : Diagonal Scaling OFF
Autocorrect to OFF/Max
Only works with "Rescaling On"
if both Inner DZ & Outer DZ = OFF, DS OFF


Inner Dead Zone

Classic feature from the original Rinnegatamante/AnalogsEnhancer. With 2 different modes to choose from: Rescaling On & Rescaling Off.

  • Rescaling On (Scaled Radial Dead Zone)
    • l=64,127,y,s=0,0;r=64,127,y,s=0,0;n;d=0
    • In this example, the stick ignores the first 50% of the movement but scales the remaining range. Best for fixing drift without losing precision.
  • Rescaling Off (Radial Dead Zone)
    • l=16,127,n,s=0,0;r=16,127,n,s=0,0;n;d=0
    • Fewer people would choose to use this. Less ideal, some input is ignored (skipped).
    • In this example, low-magnitude adjustments with magnitude < 16 are impossible.
    • With rescaling off meaning it's a little easier to make precise adjustments for the remaining range (16 to Max).

Outer Dead Zone

Outer Dead Zone is useful for those who use joystick covers or grips that make it hard to push the stick all the way.

Outer Dead Zone with Rescaling On could help to solve the problem by reaching the max earlier. The code is based on u/lizin5ths's implementation, with many improvements. Outer Dead Zone with Rescaling Off however, is something a little different.

  • Rescaling On (360-Degree Movement)
    • l=0,80,y,s=0,0;r=0,80,y,s=0,0;n;d=0
    • In this example, the stick hits 100% output at 80% input.
  • Rescaling Off (8-Way, "Axial Dead Zone")
    • l=0,80,n,s=0,0;r=0,80,n,s=0,0;n;d=0
    • The outer part of the stick acts like a digital joystick (up/down/left/right only).
    • Feels like old-school fighting games.
  • Using Inner & Outer Dead Zone together:
    • l=80,80,n,s=0,0;r=80,80,n,s=0,0;n;d=0
    • By setting "Inner Dead Zone = Outer Dead Zone", you could make the stick 8-way only when pushed hard.

Slow Mode

Aka Sniper / Snail / Shooter / High-Precision Mode.

  • Rescaling On
    • l=64,127,y,s=32,16;r=64,127,y,s=32,16;n;d=0
    • This option makes small movements easier, but outer range becomes twitchier.
  • Rescaling Off
    • l=16,127,n,s=32,16;r=16,127,n,s=32,16;n;d=0
    • If rescaling is off (n), Slow Mode locks the output to a fixed value (e.g. always 16).

ANALOG_WIDE

That last "n" before "d=0" in l=0,127,n,s=0,0;r=0,127,n,s=0,0;n;d=0

Also a classic feature from the original Rinnegatamante/AnalogsEnhancer: "ANALOG_WIDE is one of the two modalities to poll analogs from Vita OS (one being ANALOG that simulates PSP polling and ANALOG_WIDE). In ANALOG mode (used even in several commercial games as well as PSP and PSX titles), max range of analogs is reduced thus making analogs feel less reactive."

It's a very nice feature but might "causes issues in some games". So it's disabled by default in AnalogsEnhancerKai.

If needed, please re-enable it manually (by changing that last n into y).

Diagonal Scaling

The "d=0" from l=0,127,n,s=0,0;r=0,127,n,s=0,0;n;d=0

In some software, the stick may have difficulty in reaching Max output in diagonal directions. This Diagonal Scaling feature might be useful when trying to fix that. (For example, there are people reporting issues with PSP games using Adrenaline.)

  • Off is 0 (Diagonal Scale Factor = 1.00x).
  • The Minimum is 1 and the Maximum is 42 (Answer to the Ultimate Question of Life, The Universe, and Everything).
  • (Out of range value will get autocorrected.)
  • Increasing the value makes the stick reach its diagonal Max output faster.
  • This feature only works with "Rescaling On". It also requires "Dead Zone On" to function. (E.g. "Inner DZ = 1")
    • You might have to edit this value often. For example, if you find "d=42" works best for Adrenaline, leaving it at 42 will cause other games to reach diagonal Max too early. Since those games might work best with "d=0".

Changelog

1.2.0 2025/08/04

  • Add new Diagonal Scaling (DS) feature for fixing inability to reach diagonal Max output in some games.
  • [ IMPORTANT ] Config structure changed again for DS, please update your config file to v1.2.0.

1.1.0 2025/08/01

  • Add new Slow Mode feature for better low-magnitude stick movement.
  • Can use either ur0:tai or ux0:data/AnalogsEnhancerKai as config file folder.
  • Config structure changed and is no longer compatible with older versions.

1.0.1 2025/07/27

  • Initial Release.
  • Add new Outer Dead Zone feature.
  • Config file moved to ur0:tai/.

Credits

Acknowledgements:

External links

Advertising: