Skip to content

Commit 61a13ef

Browse files
committed
v14 newly supported games
007 The World Is Not Enough (PS1), Delta Force: Urban Warfare (PS1), G-Police (PS1), Iron Soldier 3 (PS1), Uprising X (PS1)
1 parent 66a55ce commit 61a13ef

21 files changed

+1305
-84
lines changed

README.md

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -63,37 +63,58 @@ avoid clicking off the window.
6363
| Turok: Evolution | Good | <sup>Optional cheats/patches in **'cheats/TurokEvolutionGTKE51.txt'**</sub> |
6464

6565
## Supported PS1 Titles
66-
| Game Title | Serial | Mouse Support | Issues | Cheat File |
67-
| --- | --- | :---: | ----------- | --- |
68-
| Alien Trilogy (USA) | SLUS-00007 | Good | <sup>Requires supplied cheat file, Not fully tested</sub> | **AlienTrilogy_SLUS-00007.cht** |
69-
| Aquanaut's Holiday (USA) | SCUS-94603 | Good | <sup>Requires supplied cheat file, Very little testing</sub> | **AquanautsHoliday_SCUS-94603.cht** |
70-
| Armored Core (USA) | SCUS-94182 / SLUS-01323 | Fair | <sup>VS Mode not supported, Not fully tested</sub> | |
71-
| Armorines: Project S.W.A.R.M. (USA) | SLUS-01022 | Fair | <sup>Not fully tested</sub> | |
72-
| Baroque - Yuganda Mousou (Japan) | SLPM-86328 | Fair | <sup>Supplied cheat required to prevent camera y-axis from being reset on hit, Not fully tested</sub> | **Baroque_SLPM-86328.cht** |
73-
| Brahma Force: The Assault on Beltlogger 9 (USA) | SLUS-00444 | Good | <sup>Not fully tested</sub> | |
74-
| Codename: Tenka (USA) | SCUS-94409 | Fair | <sup>Strafe/Lean must be set to R2 in-game for strafe to work without holding the button</sub> | |
75-
| Disruptor (USA) | SLUS-00224 | Good | <sup>Requires supplied cheat file, Not fully tested</sub> | **Disruptor_SLUS-00224.cht** |
76-
| Duke Nukem: Time to Kill (USA) | SLUS-00583 | Fair | <sup>Requires supplied cheat file, Not fully tested</sub> | **DukeNukemTimeToKill_SLUS-00583.cht** |
77-
| Echo Night (USA) | SLUS-00820 | Good | <sup>Not fully tested</sub> | |
78-
| Future Cop: L.A.P.D. (USA) | SLUS-00739 | Fair | <sup>Not fully tested</sub> | |
79-
| Hellnight (Europe) | SLES-01562 | Good | <sup>Requires supplied cheat file, Not fully tested</sub> | **Hellnight_SLES-10562.cht** |
80-
| Hybrid (Japan, Europe) | SLPS-01102, SLES-03531 | Fair | <sup>Requires supplied cheat file<br>Not fully tested</sub> | **Hybrid_SLPS-01102.cht (Japan)<br>Hybrid_SLES-03531.cht (Europe)** |
81-
| Jumping Flash (USA) | SCUS-94103 | Good | <sup>Requires supplied cheat file</sub> | **JumpingFlash_SCUS-94103.cht** |
82-
| King's Field (II) (USA) | SLUS-00158 | Good | <sup>Not fully tested</sub> | |
83-
| King's Field (Japan) | SLPS-00017 | Good | <sup>Not fully tested, Will not hook until in-game</sub> | |
84-
| King's Field II (III) (USA) | SLUS-00255 | Good | <sup>Not fully tested</sub> | |
85-
| LSD: Dream Emulator (Japan) | SLPS-01556 | Good | <sup>Requires supplied cheat file, Not fully tested</sub> | **LSDDreamEmulator_SLPS-01556.cht** |
86-
| Medal of Honor: Underground (USA) | SLUS-01270 | Fair | <sup>Machine Gun sentry doesn't always work (depends on objects in line of sight). Sidecar gun in 6-3 not supported. Precise aim not supported (holding trigger aiming). Controller type must be Analog/DualShock or else auto-center will be enabled. </sub> | |
87-
| Men in Black: The Series - Crashdown (NTSC) | SLUS-01387 | Good | <sup>None</sub> | |
88-
| Note, The (Europe) | SLES-00749 | Good | <sup>Not fully tested</sub> | |
89-
| Powerslave (USA) | SLUS-00102 | Good | <sup>Requires supplied cheat file</br>Not fully tested</sub> | **Powerslave_SLUS-00102.cht** |
90-
| Resident Evil: Survivor (USA) | SLUS-01087 | Good | <sup>None</sub> | |
91-
| Revolution X (USA) | SLUS-00012 | Good | <sup>None</sub> | |
92-
| Shadow Tower (USA) | SLUS-00863 | Good | <sup>Not fully tested</sub> | |
93-
| South Park (USA) | SLUS-00936 | Good | <sup>Supplied cheats recommended, Not fully tested</sub> | **SouthPark_SLUS-00936.cht** |
66+
| Game Title | Serial | Mouse Support | Issues | In-game Options | Cheat/Patch File |
67+
| --- | --- | :---: | :-----------: | :---: | :---: |
68+
| 007: The World Is Not Enough (USA) | SLUS-01272 | Fair | <sup>Requires patch be applied to disc image (**See below**)</br>No clamp on lean aiming</br>Not fully tested</sub> | <sup>Auto Assist: Off</sub> | **007TWINE_SLUS-01272_patch.xdelta** |
69+
| Alien Trilogy (USA) | SLUS-00007 | Good | <sup>Requires supplied cheat file</br>Not fully tested</sub> | - | **AlienTrilogy_SLUS-00007.cht** |
70+
| Aquanaut's Holiday (USA) | SCUS-94603 | Good | <sup>Requires supplied cheat file</br>Very little testing</sub> | - | **AquanautsHoliday_SCUS-94603.cht** |
71+
| Armored Core (USA) | SCUS-94182 / SLUS-01323 | Fair | <sup>VS Mode not supported</br>Not fully tested</sub> | - | - |
72+
| Armorines: Project S.W.A.R.M. (USA) | SLUS-01022 | Fair | <sup>Not fully tested</sub> | <sup>Look Spring: Off</br>Auto Aim: Off</sub> | - |
73+
| Baroque - Yuganda Mousou (Japan) | SLPM-86328 | Fair | <sup>Supplied cheat required to prevent camera y-axis from being reset on hit</br>Not fully tested</sub> | - | **Baroque_SLPM-86328.cht** |
74+
| Brahma Force: The Assault on Beltlogger 9 (USA) | SLUS-00444 | Good | <sup>Not fully tested</sub> | - | - |
75+
| Codename: Tenka (USA) | SCUS-94409 | Fair | <sup>Strafe/Lean must be set to R2 in-game for strafe to work without holding the button</sub> | - | - |
76+
| Delta Force: Urban Warfare (USA) | SLUS-01429 | Good | <sup>Not fully tested</sub> | <sup>Aiming Mode: Manual</br>Auto Center: Off</sub> | - |
77+
| Disruptor (USA) | SLUS-00224 | Good | <sup>Requires supplied cheat file</br>Not fully tested</sub> | - | **Disruptor_SLUS-00224.cht** |
78+
| Duke Nukem: Time to Kill (USA) | SLUS-00583 | Fair | <sup>Requires supplied cheat file</br>Not fully tested</sub> | - | **DukeNukemTimeToKill_SLUS-00583.cht** |
79+
| Echo Night (USA) | SLUS-00820 | Good | <sup>Not fully tested</sub> | - | - |
80+
| Future Cop: L.A.P.D. (USA) | SLUS-00739 | Fair | <sup>Not fully tested</sub> | - | - |
81+
| G-Police (USA) | SLUS_005.44/SLUS_005.56 | Good | <sup>Not full tested</sub> | - | - |
82+
| Hellnight (Europe) | SLES-01562 | Good | <sup>Requires supplied cheat file</br>Not fully tested</sub> | - | **Hellnight_SLES-10562.cht** |
83+
| Hybrid (Japan, Europe) | SLPS-01102, SLES-03531 | Fair | <sup>Requires supplied cheat file<br>Not fully tested</sub> | - | **Hybrid_SLPS-01102.cht (Japan)<br>Hybrid_SLES-03531.cht (Europe)** |
84+
| Iron Soldier 3 (USA) | SLUS-01061 | Good | <sup>Advanced Controls not supported</br>Requires supplied cheat file</br>Not fully tested</sub> | - | **IronSoldier3_SLUS-01061.cht** |
85+
| Jumping Flash (USA) | SCUS-94103 | Good | <sup>Requires supplied cheat file</sub> | - | **JumpingFlash_SCUS-94103.cht** |
86+
| King's Field (II) (USA) | SLUS-00158 | Good | <sup>Not fully tested</sub> | - | - |
87+
| King's Field (Japan) | SLPS-00017 | Good | <sup>Not fully tested, Will not hook until in-game</sub> | - | - |
88+
| King's Field II (III) (USA) | SLUS-00255 | Good | <sup>Not fully tested</sub> | - | - |
89+
| LSD: Dream Emulator (Japan) | SLPS-01556 | Good | <sup>Requires supplied cheat file</br>Not fully tested</sub> | - | **LSDDreamEmulator_SLPS-01556.cht** |
90+
| Medal of Honor: Underground (USA) | SLUS-01270 | Fair | <sup>Machine Gun sentry doesn't always work (depends on objects in line of sight). Sidecar gun in 6-3 not supported. Precise aim not supported (holding trigger aiming). Controller type must be Analog/DualShock or else auto-center will be enabled. </sub> | - | - |
91+
| Men in Black: The Series - Crashdown (NTSC) | SLUS-01387 | Good | <sup>None</sub> | <sup>Auto Aim: Off</sub> | - |
92+
| Note, The (Europe) | SLES-00749 | Good | <sup>Not fully tested</sub> | - | - |
93+
| Powerslave (USA) | SLUS-00102 | Good | <sup>Requires supplied cheat file</br>Not fully tested</sub> | - | **Powerslave_SLUS-00102.cht** |
94+
| Resident Evil: Survivor (USA) | SLUS-01087 | Good | <sup>None</sub> | - | - |
95+
| Revolution X (USA) | SLUS-00012 | Good | <sup>None</sub> | - | - |
96+
| Shadow Tower (USA) | SLUS-00863 | Good | <sup>Not fully tested</sub> | - | - |
97+
| South Park (USA) | SLUS-00936 | Good | <sup>Supplied cheats recommended</br>Not fully tested</sub> | - | **SouthPark_SLUS-00936.cht** |
98+
| Uprising X (USA) | SLUS-00686 | Fair | <sup>None</sub> | - | - |
9499
* NOTE: If DuckStation is not hooking, try restoring the default settings. 'Settings->General->Restore Defaults'
95100
* Importing cheat files in DuckStation: 'Tools->Cheat Manager->Cheat List->Import->From File'
96101

102+
## How to apply patch to PS1 game
103+
* Download and run **xdelta UI**
104+
* Select 'Apply Patch' tab
105+
* For 'Patch' select the provided '.xdelta' patch file for the intended game
106+
* For 'Source File' select the game's '.bin' file
107+
* 'Output File' should have a different name to original
108+
* Original: *007 The World Is Not Enough (USA).bin*
109+
* Patched: *007 The World Is Not Enough (USA) (MouseInjector).bin*
110+
* Click 'Patch' and wait until the patch is successful
111+
* Copy original game's '.cue' file to same directory as patched '.bin'
112+
* Rename copied '.cue' to match patched '.bin'
113+
* Patched bin: *007 The World Is Not Enough (USA) (MouseInjector).bin*
114+
* Patched cue: *007 The World Is Not Enough (USA) (MouseInjector).cue*
115+
* Open '.cue' file in a text editor and change first line to match patched file
116+
* *FILE "007 The World Is Not Enough (USA) (MouseInjector).bin" BINARY"*
117+
97118
## Supported Mupen64Plus(RetroArch)
98119
| Game Title | Mouse Support | Issues |
99120
| --- | :---: | ----------- |
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#group=MouseInjector
2+
#type=Gameshark
3+
#activation=EndFrame
4+
[*Disable Cruise Missile Pitch/Roll Auto-Center]
5+
E00A803C 3241
6+
8005F97C 0000
7+
E00A803C 3241
8+
8005F97E 0000
9+
E00A803C 3241
10+
8005F99C 0000
11+
E00A803C 3241
12+
8005F99E 0000
13+

games/game.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,15 @@ extern const GAMEDRIVER *GAME_PS2_GTAVICECITYSTORIES;
150150
extern const GAMEDRIVER *GAME_PS2_GHOSTBUSTERS;
151151
extern const GAMEDRIVER *GAME_PS2_SWAT;
152152
extern const GAMEDRIVER *GAME_PS1_BRAHMAFORCE;
153+
extern const GAMEDRIVER *GAME_PS1_IRONSOLDIER3;
154+
extern const GAMEDRIVER *GAME_PS1_UPRISINGX;
155+
extern const GAMEDRIVER *GAME_PS1_GPOLICE;
156+
extern const GAMEDRIVER *GAME_PS2_ARMYMENSOLDIERSOFFORTUNE;
157+
extern const GAMEDRIVER *GAME_GC_007AGENTUNDERFIRE;
158+
extern const GAMEDRIVER *GAME_PS2_CALLOFDUTYWORLDATWAR;
159+
extern const GAMEDRIVER *GAME_PS2_DELTAFORCE;
160+
extern const GAMEDRIVER *GAME_PS2_FOREVERKINGDOM;
161+
extern const GAMEDRIVER *GAME_PS1_GAMERA2000;
153162

154163
static const GAMEDRIVER **GAMELIST[] =
155164
{ // UNF - Unfinished
@@ -261,7 +270,7 @@ static const GAMEDRIVER **GAMELIST[] =
261270
&GAME_PS2_SHADOWOFROME, // UNF
262271
&GAME_GC_TUROKEVOLUTION,
263272
&GAME_PS2_THESUFFERING, // UNF
264-
&GAME_PS1_007THEWORLDISNOTENOUGH, // UNF
273+
&GAME_PS1_007THEWORLDISNOTENOUGH,
265274
&GAME_PS2_RETURNTOCASTLEWOLF,
266275
&GAME_PS2_BEVERLYHILLSCOP,
267276
&GAME_PS2_KILLZONE, // UNF
@@ -276,11 +285,20 @@ static const GAMEDRIVER **GAMELIST[] =
276285
&GAME_PS2_SPIDERMAN2, // UNF
277286
&GAME_PS1_POWERSLAVE,
278287
&GAME_PS1_GHOSTINTHESHELL,
279-
&GAME_PS1_DELTAFORCEURBANWARFARE,
288+
&GAME_PS1_DELTAFORCEURBANWARFARE, // UNF
280289
&GAME_PS2_GTAVICECITYSTORIES, // UNF
281-
&GAME_PS2_GHOSTBUSTERS,
290+
&GAME_PS2_GHOSTBUSTERS, // UNF
282291
&GAME_PS2_SWAT,
283-
&GAME_PS1_BRAHMAFORCE
292+
&GAME_PS1_BRAHMAFORCE,
293+
&GAME_PS1_IRONSOLDIER3,
294+
&GAME_PS1_UPRISINGX,
295+
&GAME_PS1_GPOLICE,
296+
&GAME_PS2_ARMYMENSOLDIERSOFFORTUNE, // UNF
297+
&GAME_GC_007AGENTUNDERFIRE, // UNF
298+
&GAME_PS2_CALLOFDUTYWORLDATWAR, // UNF
299+
&GAME_PS2_DELTAFORCE,
300+
&GAME_PS2_FOREVERKINGDOM, // UNF
301+
&GAME_PS1_GAMERA2000
284302
};
285303

286304
static const GAMEDRIVER *CURRENT_GAME = NULL;

games/gc_007auf.c

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
//==========================================================================
2+
// Mouse Injector for Dolphin
3+
//==========================================================================
4+
// Copyright (C) 2019-2020 Carnivorous
5+
// All rights reserved.
6+
//
7+
// Mouse Injector is free software; you can redistribute it and/or modify it
8+
// under the terms of the GNU General Public License as published by the Free
9+
// Software Foundation; either version 2 of the License, or (at your option)
10+
// any later version.
11+
//
12+
// This program is distributed in the hope that it will be useful, but
13+
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14+
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15+
// for more details.
16+
//
17+
// You should have received a copy of the GNU General Public License
18+
// along with this program; if not, visit http://www.gnu.org/licenses/gpl-2.0.html
19+
//==========================================================================
20+
#include <stdint.h>
21+
#include <math.h>
22+
#include "../main.h"
23+
#include "../memory.h"
24+
#include "../mouse.h"
25+
#include "game.h"
26+
27+
#define PI 3.14159265f // 0x40490FDB
28+
#define TAU 6.2831853f // 0x40C90FDB
29+
30+
#define AUF_ONFOOT_CAMY 0x8036165C
31+
#define AUF_ONFOOT_CAMX 0x80361660
32+
#define AUF_ONFOOT_FOV 0x802F0BB8
33+
34+
#define AUF_AIMLOCK_BASE_PTR 0x803E74F4
35+
#define AUF_AIMLOCK_SANITY_VALUE 0x80254D50
36+
// offset from aimLockBase
37+
#define AUF_AIMLOCK_SANITY 0x4
38+
#define AUF_AIMLOCK_TOGGLE 0x68C
39+
40+
#define AUF_ONRAILS_CAMY 0x811EE964
41+
#define AUF_ONRAILS_CAMX_SIN 0x811EE804
42+
#define AUF_ONRAILS_CAMX_COS 0x811EE80C
43+
44+
#define AUF_IS_NOT_BUSY 0x80361674
45+
46+
static uint8_t GC_AUF_Status(void);
47+
static void GC_AUF_Inject(void);
48+
49+
static const GAMEDRIVER GAMEDRIVER_INTERFACE =
50+
{
51+
"007: Agent Under Fire",
52+
GC_AUF_Status,
53+
GC_AUF_Inject,
54+
1, // if tickrate is any lower, mouse input will get sluggish
55+
0 // crosshair sway not supported for driver
56+
};
57+
58+
const GAMEDRIVER *GAME_GC_007AGENTUNDERFIRE = &GAMEDRIVER_INTERFACE;
59+
60+
static uint32_t aimLockBase = 0;
61+
static float scale = 5.f;
62+
63+
//==========================================================================
64+
// Purpose: return 1 if game is detected
65+
//==========================================================================
66+
static uint8_t GC_AUF_Status(void)
67+
{
68+
// GW7E69
69+
return (MEM_ReadUInt(0x80000000) == 0x47573745U &&
70+
MEM_ReadUInt(0x80000004) == 0x36390000U);
71+
}
72+
73+
//==========================================================================
74+
// Purpose: calculate mouse look and inject into current game
75+
//==========================================================================
76+
static void GC_AUF_Inject(void)
77+
{
78+
// TODO: find different isBusy
79+
// FIXME: camX movement gets more jittery the farther it is from 0
80+
// you can see the popping by going frame by frame and moving mouse
81+
82+
// if (!MEM_ReadUInt(AUF_IS_NOT_BUSY))
83+
// return;
84+
85+
if (aimLockBase == 0)
86+
aimLockBase = MEM_ReadUInt(AUF_AIMLOCK_BASE_PTR);
87+
88+
if (MEM_ReadUInt(aimLockBase + AUF_AIMLOCK_SANITY) == AUF_AIMLOCK_SANITY_VALUE)
89+
{
90+
// disable aimlock
91+
MEM_WriteUInt(aimLockBase + AUF_AIMLOCK_TOGGLE, 0x0);
92+
}
93+
else {
94+
aimLockBase = MEM_ReadUInt(AUF_AIMLOCK_BASE_PTR);
95+
}
96+
97+
if(xmouse == 0 && ymouse == 0) // if mouse is idle
98+
return;
99+
100+
const float looksensitivity = (float)sensitivity / 40.f;
101+
float fov = MEM_ReadFloat(AUF_ONFOOT_FOV);
102+
103+
104+
if (!MEM_ReadUInt(AUF_ONFOOT_CAMY) && !MEM_ReadUInt(AUF_ONFOOT_CAMX))
105+
{
106+
// onRails (probably not a good sanity check for tank levels)
107+
float scale = 1400;
108+
float camY = MEM_ReadFloat(AUF_ONRAILS_CAMY);
109+
camY += (float)(invertpitch ? -ymouse : ymouse) * looksensitivity / scale;
110+
MEM_WriteFloat(AUF_ONRAILS_CAMY, (float)camY);
111+
112+
float camXSin = MEM_ReadFloat(AUF_ONRAILS_CAMX_SIN);
113+
float camXCos = MEM_ReadFloat(AUF_ONRAILS_CAMX_COS);
114+
float angle = atan(camXSin / camXCos);
115+
if (camXCos < 0)
116+
angle -= PI;
117+
118+
angle += (float)xmouse * looksensitivity / scale * 6;
119+
120+
camXSin = sin(angle);
121+
camXCos = cos(angle);
122+
123+
MEM_WriteFloat(AUF_ONRAILS_CAMX_SIN, (float)camXSin);
124+
MEM_WriteFloat(AUF_ONRAILS_CAMX_COS, (float)camXCos);
125+
}
126+
else
127+
{
128+
// onFoot
129+
float camY = MEM_ReadFloat(AUF_ONFOOT_CAMY);
130+
float camX = MEM_ReadFloat(AUF_ONFOOT_CAMX);
131+
132+
camX -= (float)xmouse * looksensitivity * (fov / 60.f) / scale;
133+
camY += (float)(invertpitch ? -ymouse : ymouse) * looksensitivity * (fov / 60.f) / scale;
134+
135+
MEM_WriteFloat(AUF_ONFOOT_CAMX, camX);
136+
MEM_WriteFloat(AUF_ONFOOT_CAMY, camY);
137+
}
138+
}

0 commit comments

Comments
 (0)