DCFFVII Research Thread

This whole venture began with the Omega- and G Reports. Long ago I had found addresses for changing the reports currently in the dropdown menu but I couldn't make sense of the values.

Upon revisiting the Omega Reports address, 2050DD4C, I found that each respective bit in this single-byte address sets each respective Omega Report to On or Off. I knew then the 0th bit was responsible for Omega Report #1, the 1st bit was responsible for Omega Report #2 and so on. The mystery though was that the game kept changing its mind about whether a bit value of 0- or a bit value of 1 meant that the report was collected and available in the dropdown menu.

Tests revealed that the game would randomly decide the "meaning" of each bit every time you returned to the Dirge of Cerberus logo-reveal prior to the start menu. Still meant though that I had no way of knowing beforehand which value of 2050DD4C meant that, for example, all eight Omega Reports had been collected. It could be any value in- and between 0 and 255.


A quick look into the assembler revealed a particular address that 2050DD4C liked to connect with: 2046F834. Observing the changing values then revealed to me what was going on. These two address values were performing an Exclusive Or operation to yield the final, actual result.

[2050DD4C] XOR [2046F834] = Omega Reports collected

Say that you boot up the game and get to the start screen. You observe that the value of 2050DD4C is 249. The value 2046F834 is also 249.

249 XOR 249 = 0

No Omega Reports have been collected. This makes sense that the default value before loading any gameplay would be that no reports are in your inventory. So you then load a chapter checkpoint, for example one where the first six reports have been collected. The value of 2050DD4C gets changed to 198 but the value of 2046F834 remains 249 so long as you don't return to the Dirge of Cerberus logo-reveal.

198 XOR 249 = 63

63 in binary is 00111111 (zeros added to match the number of bits in a byte). The value makes sense, given what we established earlier about which bit is responsible for which report. The bit to the most-right is the one I referred to as the 0th bit.

Code:
00000001 = Omega Report #1 Collected
00000010 = Omega Report #2 Collected
00000100 = Omega Report #3 Collected
00001000 = Omega Report #4 Collected
00010000 = Omega Report #5 Collected
00100000 = Omega Report #6 Collected
01000000 = Omega Report #7 Collected
10000000 = Omega Report #8 Collected
11111111 = All Omega Reports Collected
With this knowledge you can easily adjust which Omega Reports are present. In order to bypass having to make XOR calculations on my own I simply set the 2046F834 value to 0. This works because A XOR 0 = A. Subsequently I can look at address 2050DD4C, set it to 255 and instantly have all Omega Reports in the dropdown menu.


Zooming out at the whole area of 64 address flags, these are the memory regions in which they are placed in DCFFVII International.
Flag address values that change with gameplay: 2050DD20 - 2050DD5F
Flag address values that don't change with gameplay: 2046F808 - 2046F847

Random values are assigned to each of the 64 addresses in 2046F808 - 2046F847 whenever you return to the Dirge of Cerberus logo-reveal.

I may dub these areas the "64 Static Global Flag Addresses" due to how these addresses aren't moved about in memory and how they act in conjunction with more local variables like the game zone flags.


There is actually a third memory region that shows these 64 "flag addresses" yet again: 204B2900 - 204B293F

These addresses actually show the results that you get after the Exclusive Or operations. The downside is that the values are only updated as you load a chapter checkpoint or transition to a new checkpoint. So yes, you can use the address 204B292C (contained in the aforementioned region) to change the number of Omega Reports in your inventory, but you will only spot the result after reloading the zone or transitioning to a new checkpoint. It is much more useful to observe the 2050DD20 - 2050DD5F region because there I can observe changes in the game as they happen LIVE. Far easier to figure out the functions of each address that way.



This whole business with XOR operations to get the final result is not exclusive to the 64 Static Global Flag Addresses. The address I used to unlock hidden menu maps, such as those for the online Deepground lobby, worked in just the same way. Back then though the address values made no sense to me because I didn't know about the XOR operation that was happening.

Menu map address value that changes with gameplay: 20A06237
Menu map address value that doesn't change with gameplay: 2047DE2F

[20A06237] XOR [2047DE2F] = Current Menu Map

Is there an equivalent address that shows the final menu map number, without all that XORing business? Yes: Address 204C2ABC. But it only updates every time you open up the actual menu map. In comparison, 20A06237 updates immediately as the player enters an area that calls for a different menu map compared to earlier.
 
Last edited:
Nothing important but it always amuses me when I find yet another "new" online mode screenshot to add to the archive.



- Blog entry

Dozens of tries with various search terms usually doesn't yield anything unfamiliar. But 1 out of 50 times the google algorithms decide to pop up a surprise. In this case, the blog entry from summer 2007 is the blog's only post about the DCFFVII multiplayer. The screenshot was taken on 2006 September 29, the very last day of the online mode.

Speaking of algorithms, I am relatively close to solving something important in Dirge of Cerberus but in order to make use of it I need to get back into programming. The task is not necessarily of overwhelming difficulty but it's my inability to concentrate that's putting a wrench in the machinery.

Somebody whip me into shape. I could be a few weeks away from a breakthrough if I just stopped dilly-dallying. :wacky:
 
This is off to a good start.

Just a little less than eleven months ago I solved the so-called TTTT-encryption. Back then I couldn't write a single line of programming so I had no way of making practical use of this algorithm. Now I know enough C++ to actually write a program that runs this algorithm and thusly decrypts a TTTT file. Got it working for the first time yesterday and let's just say I felt great! *blasts victory music through speakers*

Some new revelations for me this week:
- There are actually multiple types of TTTT-encryptions (henceforth referred to as T4-encryptions), depending on the T4 file you are dealing with. The decryption starts the same but then deviates halfway through. I've spent most of today solving another T4 encryption and I'm almost finished.

- The encryption I looked at eleven months ago was solved with almost 100% accuracy. The only thing I missed were three cases of the Carry Flag being used. In other words: overflow leading to a 1 being carried into subsequent calculations.

- The header isn't always changed from TTTT to SSSS immediately after decryption. After a T4 is decrypted, its pointer values may change to (presumably) reflect the different areas in memory that it retrieves resources from. It is somewhere at this stage when the T4 file is "updated" that the header is changed to SSSS, perhaps as a signal that "yes, the update is complete". So yes, simply decrypting a lone T4 file isn't the end of the story.



So what is a T4 file? For one it holds the Text String IDs used to reference different text entries. For example the T4 file for the ending credits of the online mode contain strings like these:
ID_CREDIT_01
ID_CREDIT_02
ID_CREDIT_03
ID_CREDIT_04
...and so on. Each ID_CREDIT references a set of staff member titles- and names.

But it also contains strings referencing background music, particle effects and multiple other variable names for various features.

bgm_350
FEDEF_A0313_MULTI_END01_LEAF_0
ev2090
getstate
isdebugmode
enableSkip
...etc.
An aside: "LEAF" is associated with particle effects and it is in fact through a "LEAF" that the Protomateria is displayed in-game rather than through a standard 3D model object. It appears that the standard/"normal" 3D models for the Protomateria, g006 and g007, are unused (or used so rarely that I haven't found them yet in normal gameplay).


One common type of T4 file is one devoted to the menu map. Say that you load up Chapter 2 in Dirge of Cerberus and gameplay begins. The T4 file for the menu map is still encrypted at this stage. One particular section of the T4 file, if looked at in RAM, would look like this if you tried to view it as text:

eÑ.Rý%ž Jq.äæß:‚nqIícÄà…h...÷6Ø.Déég0-'Ý|.!34ç^†éý_¼Ý.Þl°½ÒF¼Ã.‡Yò\QÁ”HÐYfagÝ.Ä"~qÕrV^ýð‹¿ç,ô ¡Øåz.jS.¦ýꇮˆ½°²œ‹-.¨.D쨣0.@/êJ)OÆèRÏ×÷¨ô”Ö.E €¬ä³Qo¨.0.èG¥è2y_ß: @ìʈ.ZœBhp..né.ÒPtjì.*.ˆ.‡V.úT¹Cs3.rªà&—ÿ.÷.°}Î.ç..^äߺ¯ÅX¼ë.Å›Nð×ñm$x´%.º±_7;K¸Â.—Ð.á.~9‡Ñ.y<c.º.È.b..ˇ.uø..ï.$.œP.A2æíäHmØ1S&ã.$˜!+.ÅZ¢./®ï.®Ž$ïÖ@í"«Jžw'ù.×*¼®>.š vCT!‰ÓF”@CCp¾Í;ç...°-HCâE .¶üb]hM-CÝ.‘N¢vÁ..‰P?´ÄØ·À¯¿È¼æ¡îtY0á>.ûÑ-ÖsŠŒ‡€ƒÝé+0ÏÐ&ŠÑ¹*bh.4Q9%..÷)..Ð.ú4ŒRä.ª¤=.Øá.AÞ.:þMM¸Ó.Y../7üR§Þi¡öL

But once you enter the menu map, the T4 file gets decrypted and now the same area in memory will have turned into this:
<init>..()V..Code..LineNumberTable..gmap_exec..SourceFile..mm_z130.java..ID_PLACE_0..ID_MISSION_0..ID_SAVE_0..ID_PLACE_1..ID_MISSION_1..ID_SAVE_1..ID_PLACE_2..ID_MISSION_2..ID_SAVE_2..ID_PLACE_3..ID_MISSION_3..ID_SAVE_3..mm_z130..java/lang/Object..fake/KerberosGlobalMap..getZoneFlag..(I)I..setMap2..(IFFF)V..setMapString..(Ljava/lang/String; )V..setMapMissionString..setQuickSaveString..setPlayerPosition..(FFF)V..setPlayerDirection..(I)V..addMapMarker..(IFF)V....

Apart from menu maps, T4 files typically appear to code for cutscenes, general zone data (including juicy things like the online DG lobby) and Extra Features menus.


The TTTT files I have extracted from Dirge of Cerberus (by using Noesis) are naturally in their encrypted state. Thanks to the code I've written (and the code I am going to write once more encryptions are solved) I can unlock T4 data that normally isn't shown to me because I can't visit those areas in the game. This is how I am able to get these string variable references from one T4 file used for the Deepground lobby:

errorhandle
(Lfake/KerberosZone; )V
changeServer
select_main
vl_main
(Z)V
br_main
main
([Ljava/lang/String; )V
fake/KerberosWindow
fake/KerberosZone
fake/KerberosCamera
fake/KerberosActor
ID_LOBBY_OVL_DAME
bgm_069
csj_059
o099
c_tf_0
ID_NO_USE
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ccccccccccccccccccccccccccccccccccccccc
p_Vin
get rot
ID_BT_END_ERR
bgm_008
mrst0000
ev2046
java/lang/Object
fake/KerberosNetLobby
isError
()Z
exit
(I)V
fake/KerberosEvent
getflag
(I)B
fake/KerberosEffect
fadeout
(FII)V
set_usercontrol
setflag
(IB)V
lobby_init
()I
open
(IIIIILjava/lang/String; )V
getstate
sleep
close
prg_006
enterLobby
ev2046_sub
act_vlinit
(Lfake/KerberosZone;Lfake/KerberosActor;Lfake/KerberosCamera; )V
fake/KerberosSound
loadSoundEffectBySituationId
(I)I
wait
setNameVisible
playMusic3
(Ljava/lang/String;II)V
playBgSound
(Ljava/lang/String;I)V
load
(Ljava/lang/String;I)I
setmotion
(Ljava/lang/String;ZF)V
getvalue
(II)I
cmake_camera
(ILfake/KerberosCamera; )V
print
(Ljava/lang/String; )V
setdebugvalue
active
setVisible
get_charamake
act_select
(Lfake/KerberosActor; )V
changeMusicVol
(II)V
voice_load
server_selected
(Lfake/KerberosActor;II)V
sv_ucon_ctrl
changeSoundEffectVol
setbattlename
battle
stopMusic
enableBattleEffect
event
getOnlineBgm
fake/base/KerberosMath
random
()F
quest_scr005
changeBgmStr
(II)Ljava/lang/String;
getLobbyInitPos
()Lfake/base/KerberosVector;
getLobbyInitRot
getbattleactor
setdir
fake/base/KerberosVector
setpos
(Lfake/base/KerberosVector; )V
isNovicePlayer
setVisibleByGroupForOnline

(IZ)V
loadSoundEffectEx
loadStringData
quest_scr003
ev
(Lfake/KerberosZone;Lfake/KerberosActor;I)V
(III)I
quest
handle_event

The final section becomes partially gibberish however because the encryption algorithm changes unexpectedly. Hopefully by solving the encryptions for other T4 files I can figure this one out and get the correct symbols printed.

freEßvsercontral
eNôdrLobbyFitst
Fácein
pacuetcoNôsol
minotErroRÈbndle
enoble3dòdnder
stgrt_oNìfnebattle>.getpì`yerRoundCndStAôf
warp
gsfadEéoout
entcrBriEænngRoom
lesetcïrtume
vlYbrf. ¨Ofake/Kerlerosaãuor;Lfake)KerbEòpsCamera;2fake.ËdrberosZohe; )V €ptartsend~ackeT€.closeall
joiNÔbam
leav{Team €meaveBrie`ingROïn
exitBrgefinGÒnom
addCnatLoG€.get_onliPezonE€.(Z)Lfake)KerbEòlsZone;
gsNovIãdRoom
vlYbrf2 €/Lfake/KelberoSÁbtor;Lfakc/KerBåqosZone; )X
seTÔhmer
exir_onlIî.battle
’oadcHò^bzd
(Ljgva/lAîd/String;'I
rEðnrtQuestEpentDOîb



Why the sudden motivation to revisit the T4 files? Because I'm making progress with understanding the so-called "Text Preview Files". I have determined with certainty that the Text Preview Files generate a map which is then used by the game's decompressor to pick out each individual letter that forms the game's actual text entries.

The algorithm to generate this map is quite similar to the first T4 encryption I looked at. Writing the code for this is only the first step. Beyond this point is new territory: Understanding the decompression algorithm, which by its very nature will be quite different from the single byte-to-byte adventures I've had up until this point.

If I can figure out the decompression algorithm then I should be able to extract the game's text at long last, even without having to visit the game area. Here's hoping this goal is achieved sooner rather than later.
 
Just your reminder that, yes, Gackt still exists and he still performs Redemption. :monster:

See 07:10 - 11:14
- [TV] GACKT - Live at Hong-Kong Asian Pop Festival (2019.03.22)


I am making progress with reverse engineering the compression algorithm for DCFFVII's text. The algorithm is many times more complex than anything else I've dealt with so far, ergo why I expect progress to continue being slow. Not much else to do but to continue pressing on, driven by the Longing of uncovering this game's secrets.
 
I need to make a choice on whether to continue researching the decompression algorithm for the game's text the way I've been doing it thus far. There are just MASSIVE amounts of assembly code to read. Even with my improving skills at reading assembly I am questioning what is reasonable or not. There may be ways of being more effective in this reverse engineering process that I'm simply not aware of. Perhaps it's better to take a break?

Whatever the case, I'll share a few of the facts I've uncovered thus far, using the menu text for Chapter 2 (The Wastelands) as the main example. This example is chosen because it is one of the smallest Text Preview Files (TPF).

So this is what the TPF for the Chapter 2 menu text looks like in a simple hex editor:

The section at the end is why I call these the "Text Preview" files. Funny thing is that this text displayed here is not strictly relevant to the algorithm I want to solve (read further below to learn why).

The decompression of all this data into a list of text entries is a multi-step process. Firstly, ALL the text entries are spawned from the TPF, used and unused entries alike.

Code:
String ID - Actual Text

ID_PLACE_0          Wastelands
ID_PLACE_1          Wastelands
ID_PLACE_2          Wastelands
ID_PLACE_3          Wastelands
ID_MISSION_0        Travel through the wastelands to Edge!
ID_MISSION_1        Eliminate the Guard Hounds!
ID_MISSION_2        Travel through the wastelands to Edge!
ID_MISSION_3        Defeat the Pegasus Riders!
ID_SAVE_0           1:Tempsave Data:Wastelands
ID_SAVE_1           1:Tempsave Data:Wastelands
ID_SAVE_2           1:Tempsave Data:Wastelands
ID_SAVE_3           1:Tempsave Data:Wastelands
ID_STR_NONE
The final text entry is indeed empty, with a matching STRing ID name.

After the full text has been printed, the game will then pick out the text entries that will actually be used for the menus. This is when the actual Text Preview section of the TPF is used: The game will cycle through each text entry, changing the text displayed in the preview section as it goes along.

Ergo, the preview text helps me pick out the correct game files but it doesn't help me solve the primary decompression algorithm. The decompression has already happened at that point, plus the preview section only cycles through USED text. I want ALL the text!


As mentioned in a previous post, the TPF is run through a T4-esque decryption algorithm. This creates a "map" of sorts: A guide for the rest of the algorithm to follow. The T4-esque decryption does not touch the bytes at the end devoted to the Text Preview.


I wrote a program that can, at least, decrypt fairly short Text Preview files. I've come to refer to the map that's created as a "String Guide", though I really should pick a better name.


So one mess is replaced with a different mess. But wait! Notice how the first two rows of bytes, and the final row, doesn't look like a mess. There is data to be read from here. In the first row, the hex value 0D (13 in decimal) tells us the total number of text entries. If you go back to the text table from earlier, you'll see that the number of entries count to 13 if you include the empty one.

The other offsets show us the sizes of related files and the sizes of certain sections. Some I've figured out, some I haven't.

Here is the String Guide again, but now marked with two boxes.


The offsets in the blue box is involved in a massive, highly complex algorithm to generate what I call "The Letter Pile". This is the part that has me questioning if I should leave this reverse-engineering challenge behind. The algorithm is incredibly long-winded, in other words there is so much assembly code that it'd take me months to comb over.

View the Letter Pile here

The green box contain the values used in an algorithm that picks out specific letters from the Letter Pile. The final result will look familiar:


I'm guessing that the non-text values in the first section are used as guides for the remaining process, like when the game picks out which text entries to actually use for the menu.

I have almost completely figured out the algorithm for the "green box" section and I'm confident in my ability to, within a reasonable timeframe, learn the rest and write a program for it. Of course, without understanding how the Letter Pile is formed then all I could do with this program is (after a lot of effort) print text that the game already prints for me while I'm playing the game. I need to also understand the "blue box" algorithm if I am to decompress Text Preview Files that the final game never accesses.


Just for funsies, here are the offsets from the Letter Pile that together form the first instance of the text entry "Wastelands".
 

Makoeyes987

Listen closely, there is meaning in my words.
AKA
Smooth Criminal
Well what are you looking for in the raw game text? Cut content? Hidden data that may have been meant to be implemented but was removed close to production?

This is a massive undertaking you're doing so a break would be wise. Going through that much code is going to take a long time, and it may only yield very little new information. Don't want you to burn out doing this, you've already done a lot to de-encrypt a PS2 game, which isn't easy. Are you hoping to find more secrets about the multiplayer mode that may have been left behind in the Western release?
 
@Makoeyes987
Indeed, I'm hoping to learn more about the multiplayer mode. I already know there's a good chance that a big treasure trove awaits. The Text Preview Files for the areas of the online mode tease us with dialogue that we can't find anywhere else.

Worst-case scenario these files are mostly nonsense, but in this example from the Deepground hub menu text I was able to find more text than what existed in the preview. The preview only showed us "- Sector 4.Deepground - Sector 1.Deepground - S" but I was able to confirm these text entries in-game:
Code:
Deepground - Sector 1
Deepground - Sector 2
Deepground - Sector 3
Deepground - Sector 4
Briefing Room
Thus giving me hope that there are indeed secrets beneath the water's surface.

One frustrating aspect is that I know a Russian team already reverse engineered the text encryption/compression. They made a mod of Dirge of Cerberus with Russian text. However I haven't found any of their documentation online or managed to get in touch with them. I say I'm frustrated but I also kind of don't want them to share their secrets because I want to figure out this mystery on my own. :wacky:

Regardless of subject matter it is my goal to always become better at reverse engineering software. If the topic wasn't Dirge of Cerberus it would be something else. But if I'm ever to crack the text compression I need to learn new tricks and git gud.
 
Holy moogles this was amusing XD

I took a look back at this old post from when I confirmed all three variations of Cait Sith's line on the Shera.

When looking at the RAM snapshot for the umpteenth time, something suddenly struck me.



I looked at the area that I've marked here in blue and I thought "Wait, is that...Japanese text?!?!"

I copied the bytes, pasted them into a hex editor, viewed the file in Notepad++ with Shift-JIS character encoding on and unveiled this:

スクリプトより削除されていました​
Google translate:​
It was removed from the script

...WHAT WAS REMOVED FROM THE SCRIPT?! :wacky:

I just love how this piece of text was staring me in the face all this time and I didn't know it!
 
A cursory look at text in RAM shows that "スクリプトより削除されていました" appears numerous times in the English script. The corresponding text entry in the Japanese files do contain stuff but so far it is always mundane content.

What was removed in the example from the previous post? Just Vincent's silent reaction to Reeve not knowing who his benefactor is.
Vincent: ?
This reaction is in fact unused in the Japanese game.

In many cases textual expressions of silence, sighing, laughing etc may be included in the Japanese game but excluded in the English game. These text entries in the English game may be deleted or replaced with "スクリプトより削除されていました".

Other times, like in the previous example, is omitted even in the JP game. Another example is from Weiss's transmission viewed from the Shadowfox in Chapter 2.
くっ……ははっ、
ははははははははははははははは!!
Weiss's laughter exists as a text entry in JP but it isn't used.


More examples of more-or-less mundane unused text in Chapter 2 in the spoiler tag below. Text in bold is unused.

リーブ:なんだ?
リーブ:!?
リーブ:ガードハウンド?!
ヴィンセント:私が相手をする、このまま走れ!
リーブ:は、はい、お願いします!
リーブ:ヴィンセント、それを使ってください
リーブ:!?
リーブ:ヴィ、ヴィンセント……
リーブ:ヴィ、ヴィンセント!
う、うわぁーーーーーーーー!



***English version***

Reeve: What was that?
{Empty Text Entry}
Reeve: Guard hounds!
Vincent: I'll take care of your pet problem.
Just keep driving.
スクリプトより削除されていました
Reeve: Vincent! Use this!
{Empty Text Entry}
Reeve: Vincent!
スクリプトより削除されていました

リーブ:は、はい、お願いします!
Google translate:
Reeve: Yes, please!


リーブ:ヴィ、ヴィンセント……
リーブ:ヴィ、ヴィンセント!
う、うわぁーーーーーーーー!
Google translate:
Reeve: Vin, Vincent...
Reeve: Vin, Vincent!
W, woaaaah!


I wonder if those latter reactions were intended for the final cutscene when you are being chased by the guard hounds.
 
Last edited:
How to naturally unlock Cait Sith's "Number 7. Nice to meet you!" line.

Chapter 4-1:​
Get a score of 0-2 in the stage mission "Time to WRO Command".​
Chapter 5-2:​
Get KO'd at least once as Cait Sith (don't forget to select "Restart" so the KO/Game Over gets saved).​

Fulfill both these conditions and the "Number 7. Nice to meet you!" line will be the one used.
If only one of these two conditions is fulfilled then the line "Number 6, ready for action!" will be used.
If neither condition is met then Cait Sith will say "Number 5 is alive!".


Don't ask me how I was able to miss the obvious second condition because I can't explain it myself. :wacky:

The flag for Cait Sith's KO/Game Over was indeed among the 64 Flag Addresses.

Flag 32 - Chapter 4 Stage Mission "Time to WRO Command" result.
Flag 34 - Chapter 5-2 flag: Sets to 1 if Cait Sith gets KO'd.
Flag 35 - Cait Sith Chapter 7-2 Scene: Line Variation.

With Flag 32, this result gets saved in memory when you clear Chapter 4.
The Flag 34 result is saved in Chapter 5-2 after getting KO'd and selecting "Restart".
The results in Flag 32 and Flag 34 are taken into account when gameplay begins in Chapter 7-1 (the Shera) and this is when Flag 35 is set to either 0, 1 or 2.
0 = Number 5 is alive!
1 = Number 6, ready for action!
2 = Number 7. Nice to meet you!

NOTE: Getting KO'd multiple times in Chapter 5-2 will have the same effect as getting KO'd only once. In other words you CAN'T unlock the Number 7 line simply by dying over and over and ignoring the Chapter 4 condition.


This adds to the list of what I need to try out next time I play through Dirge of Cerberus on console:

1) Play with mouse and keyboard​
2) Complete a playthrough in a corrupted save file to see if the save gets un-corrupted​
3) Unlock the Cait Sith "Number 7" line naturally, no hacks​
 
Last edited:


After something of a hiatus from Dirge I'm revisiting it for, you guessed it, playing it on console by using a keyboard and mouse. I bought a new keyboard+mouse specifically for this purpose so I wouldn't have to constantly switch my only set between my computer and my PS2. :monster:

You may wonder "But Shademp haven't you also played DoC with keyboard and mouse by virtue of emulating the game on your PC?"

The answer to that is no. Yes, I can play with normal "controller" settings on my keyboard, minus support for analog stick and minus support for mouse. But there doesn't seem to be a setting to align my keyboard with DoC's internal keyboard+mouse setup. Therefore, my only way to properly play with keyboard+mouse is to play on console. Then again I could easily have missed some simple setting that was right in front of me.

But even if I have been blind in that regard I know that there's just no way for me to maintain a proper framerate when emulating DCFFVII so console is my only choice if I want gameplay at a reasonable pace.

My next post will be more about my initial impressions playing Dirge with first keyboard only and then with keyboard+mouse. For now here are some miscellaneous observations:

- The startup screen of my PS2 where you can check your memory card and/or change your console settings did NOT register neither my keyboard nor the mouse. Ergo, in order to copy a DCFFVII save from one memory card to the other I still had to plug in a normal controller.

- Dirge will not object if you have a controller, keyboard and mouse all plugged in at once. I was kinda expecting some form of conflict if you tried to combine controller and keyboard but there was none.

- The tutorial mode, when you play as Turk Vincent, does not adjust its text boxes to teach you the keys for when playing with a keyboard. You either have to memorize the mappings as shown in the Reference Mode of the tutorial or simply play around with the keys until you find the correct ones. In other words the gameplay tutorial very much expects you to play using a normal controller.


Speaking of Reference Mode (the text-only tutorial you can access either before the gameplay Tutorial or via the TTT terminals in gameplay) I found a plethora of inconsequential version differences for these.


JORG


NA


Only the original release includes the Sony PlayStation logo and the hint of the blue text reading "Dualshock".

The downward directional button and the Select button were used for the online mode and are thusly not referenced post-JORG for obvious reasons.


方向キー下
Direction Key Down
…アイコンチャット呼び出し
Call Icon Chat


SELECTボタン
Select Button
…チャット入カ
Enter Chat



In PAL and (J)INT, this page got VERY cleaned up!

INT (International with English language setting)


JINT (International with Japanese language setting)


JORG


NA



Many multiplayer-only keys that only appear highlighted in the JORG version of this Reference Mode.

The keys are no longer color-highlighted post-NA.

INT


JINT

...and many, many more differences like these between the various verions of the Reference Mode pages.
 
Last edited:
For readability I'm combining the keyboard reference mode pages for NA and the descriptive button mapping of post-NA.




Although not highlighted here, the Esc key is used as the Cancel button in menus. The full numpad is also available (closer to how the keys are highlighted in the JORG version of the Reference Mode) so long as you have Num Lock disabled.


I should emphasize that I am not used to playing shooters with mouse+keyboard. I know that for precise aim and all those lovely 360-no-scope memes you must join the PC master race and shun the console controller for any- and all shooter games. But the simple fact is that I have never spent more than a few hours playing a shooter with m+k setup. I'm drawn to the console controller because that's what I'm used to since early childhood. Expect my reflections on this new gameplay experience to mirror this fact.



Keyboard-only: Impressions after 30 minutes of play

Analog movement I miss you dearly.

When I emulated Dirge using my keyboard as a controller there was obviously no way for me to perform analog movement, thus having no way for precise aiming or to walk slowly with the player character. With the console keyboard setup we are *slightly* less limited than on PCSX2. Observe that the Shift key allows you to walk. This is quite a neat feature. I was hoping it had a dual use to also slow down your scope speed, thus moderately emulating an analog stick, but unfortunately no. The closest thing you can get to that sort of precise aiming is to have Vincent walk (using Shift) while also having your gun raised. You'd get the same effect if Vincent's equipment was so heavy that he could only walk while his gun is raised.

In other words I can only recommend this aspect of keyboard-only if you play the game with auto-targetting. The lack of proper analog control is an unfair handicap and so playing the game without auto-targetting, with the "Manual Scope" as it were, would be the errand of only a severe masochist. Hint: I am not that level of masochistic. :monster:


What about the keys in general? I am yet to try out re-mapping the keys so my impression is based on the default mapping.



Observe that the V key opens the main menu. Now what button must you use to exit the menu? With a controller you could have used the Melee button. Here you can't. You have to press Esc. So if you just decided to enter the main menu you better be committed to it because the Esc key is REEEAAAALLY far away. I hope that re-mapping allows you to set Esc to C instead. In the original release of Dirge, C was mapped for Enter Chat, same as the Select button on the controller.

Speaking of far away, look at the Pause key. That is the ONLY WAY for you to enter the Pause menu or to pause a cutscene. Every time I press Pause I feel like I'm making a detour to Mordor because the journey is so long! The Pause key is just so far away from everything else!


WASD is difficult enough as is for me as a console gamer and in particular as a DCFFVII aficionado. I keep wishing that X was down and not S, so that it would mimic the directional buttons on a controller. This leads to lots of accidental crouches with X. With melee set to B and jumping to Space my dexterity with the controls is many, many times slower than it would be with a normal PS2 controller. How am I supposed to precisely control Vincent's movement in 360 degrees with WASD while also at the same accessing jump and melee? This problem matters since, at times, melee is an important complement to the gameplay in Dirge.

Is this just my inexperience or are the default key mappings genuinely bad? I do not know for sure. Examples like how I often accidentally press E, thus consuming an item, rather than pressing R to reload is probably just me needing to git gud. I find it humorous though. Item toggling in the shortcut menu is counter-intuitive already since you can only toggle to the left and you use up items with the right directional button (unless you change your controls). Hours of having played Dirge has trained away the instinctive desire to toggle to the right in the shortcut menu. That's why I find it so humorous that now I'm accidentally pressing E instead of R. :wacky: It's like a rebirth of the beast.


For all my complaining, yes the game is technically playable even if you are using only a keyboard. You feel like you are playing with a distorted PS2 controller with only 1 1/2 hands but even so you can play the game this way. Maybe that's impressive?

Beyond being a fun experiment and a way for me to get accustomed with the keyboard in general, I can only recommend this setup if you REALLY don't want to use a PS2 controller and if you only intend to play with auto-targetting on.



Keyboard+Mouse: 30 minutes of nigh-bliss



My headshots. They're so...fluid. I have so much control. Such precision. It's beautiful. Okay I'm still having some trouble with the keyboard but man this is a delicious gameplay experience. The key of course is to play the game with the manual scope. Auto-targetting would remove the point of the mouse and almost equate it to using a PS2 controller. I guess it harkens back to a simple truth about Dirge of Cerberus: In order to enjoy it you need to impose challenges on yourself since the game on its own doesn't promote mastery. One key way to do this is to cancel that auto-targetting and play the game with a mouse.



Observe that clicking the scroll/turn wheel opens the main menu. This is only slightly inconvenient since you often accidentally turn the wheel and thus toggle your weapon slot, but it's still way better than pressing V on the keyboard. The fact that a simple left-click also acts as the Escape key (or Cancel button) is a welcome gift. Both menu navigation and shooting is so much more smooth thanks the mouse. Oh, AND MELEE WITH THE MOUSE IS PERFECT! I HAVE REGAINED MY ACROBATICS!

With a mouse you'll also enjoy the resurrection of Vincent's claw as an arrow pointer. It looks just like what you see in this old recording from the online mode (see 0:09 - 0:12) and if nothing else it's nice to see the arrow claw surviving beyond the original Japanese release where it was always present in the menus.


In the Config menu these are the default "speeds" for Sight, Camera and Mouse.



You gotta pump those numbers up. Those are rookie numbers. Adjust the speeds for Sight and Camera to maximum or close to maximum and you'll get the precision and full rotation capabilities that you need in order to get full use out of the mouse. You probably won't need to change the Mouse speed.



So there you have it. Only thirty minutes so far with Keyboard+Mouse and it is feeling quite promising. I already knew that, objectively, controlling aim using your whole hand on a mouse is far easier than tiny thumb-precision on a PS2 controller analog stick. I was thusly not surprised to see just how good it felt to reign in all those headshots using the mouse. Still feels amazing to actually experience it though.


The next step now is to complete a full playthrough of Dirge using the K+M setup.
 

Unlocked the Number 7 line with no hacks involved. All you need is to take 80 seconds or longer to reach Reeve's office in Chapter 4 and also save a Game Over as Cait Sith in Chapter 5.
Extra detail: Going from emulated research, the more precise time is 80.07 seconds or longer. Any faster and you won't be able to unlock the Number 7 line.

I'm having fun playing through Dirge with keyboard+mouse setup. I've mapped the Pause key to T and I've been experimenting with Camera- Sight- and Mouse Speed. One thing I definitely still miss- and feel inhibited by is the lack of analog movement for Vincent. It's a bit like you are enhancing your scope aim with the use of a mouse but you are sacrificing more precise control over the player character. You can press Shift + Directional Keys to move Vincent slowly, yes, but that's far more complicated than using the left analog stick on a PS2 controller.

Can't tell how feasible it would be for me to become as good- or better at the game with a K+M setup than with a controller. The latter I have thousands of hours of experience with while the former I only have about 3 1/2 hours with so far. Leaning towards there being pros and cons to both ways of playing the game. That's about what I can say with confidence for the moment.

All things considered I'm happy with my decent performance in this playthrough of Hard Mode in the NA/US version. I conveniently already had a corrupted save file for this version of the game which is why I'm playing that: I'm testing out the claim that finishing a new playthrough will un-corrupt the save file.

Maintaining my honor by always keeping Vincent av Level 1 and only ever using manual targeting. :monster:
Oh and for those who don't remember, I have a second YouTube channel under the name of "Gast Faremis". That channel is reserved for miscellaneous/extra/joke/junk videos and so that's where I uploaded "The moment of truth" video.
 
Top Bottom