ROM Hack Black Sigil: Blade of the Exiled

Sora de Eclaune

All our splendor...
OP
Member
Joined
Feb 15, 2011
Messages
2,850
Trophies
1
Location
Home
Website
www.youtube.com
XP
1,192
Country
United States
Is there a hack for Black Sigil: Blade of the Exiled that slows down the in-town movement and speeds up the in-overworld movement? The character moves too fast in towns and too slow on the main overworld map (so slow that even the fairly-normal encounter rate is too high).
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,749
Trophies
4
Age
45
Location
Engine room, learning
XP
15,645
Country
France
I don't have other hacks or cheat than the one from the gbatemp cheat file. moving quicker on the map could be useful, but I think slowing down the random battles would be better (You can stop/resume them completely, so you decide when you want to battle).

I find this game's difficulty too high (I even thought it could be an Anti-Piracy check).
A lot of random battles, and they are really hard when you arrive in the forest.
I didn't past the forest because of the battle's difficulty, even with the exp multiplier cheat code, I have a lot of levels of differences with the enemies but it's still hard.

And if I remember, I even noticed few bugs :(

I hope I'll play it again one day, it seemed like a good game nevertheless.
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,749
Trophies
4
Age
45
Location
Engine room, learning
XP
15,645
Country
France
It might depend on the way the encounter rate is calculated.
if it's generating a random number after a battle and decrease after each move depending on the field (field -1, forest-3 etc.), it's possible to modify. for example multiplying the randomly generated number after a battle. (Final Fantasy 6 is working like that).

if it's a random encounter, with no counter, it's probably more difficult to find a code.
each step you do runs a function to determine randomly if it's a battle or not. You'll need to find, understand and alter the function's algorythm using ASM.

There are probably another method used to make random battles, but it's the one which comes to mind.


I've checked the cheat code database.
It seems it's using the first method.
After a battle, the counter is set to 0x0000 and increments, when it reaches 0xFFFF battles starts.
What needs to be determined is how it increments (regularly, based on terrain type, timed, or randomly).

There's also a "No random battle (ASM)" cheat name, implying it's using ASM to edit the encounter rate function. (and always return current value instead of executing the algorithm).
It would require ASM debugger to edit that code. I didn't find any ARDS to ASM (well, Kenobi's one has the option but doesn't work).
I don't know how to debug DS games (probably with an emulator. now that no$gba debug version is free I can check. but don't expect result, I'm not an ASM hacker).


Is there a place with codetype documentation for DS, like the one on geckocodes for wii?
edit: I found this : http://www.bsfree.org/hack/hacking_nds.html
 

Patuli

Well-Known Member
Newcomer
Joined
Jul 26, 2014
Messages
64
Trophies
0
Age
45
XP
192
Country
Mexico
I remember playing this game on a real cart, the game have a lots of ground breaking bug's, not just the insane high encounter rate.
Got stuck inside a plane forever, never touched the game again.
The codes don't help at all, you just stop the encounters or have them all the time, that for me just kill the fun,
a hack to decrease the encounter rate to a minimum would be great.
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,749
Trophies
4
Age
45
Location
Engine room, learning
XP
15,645
Country
France
AR Code :

Battle encounter rate modifier [Cyan]
Code:
220481EC 000000xx

Replace xx with the encounter rate. (higher value = slower encounter rate)
Default is 0F
Max is FF


I started by looking at existing Cheatcode.dat file to see if there were already encounter codes.
There were two for "no more encounter. Press specific buttons to battle!". It contained the address where the battle counter is stored.

In the debugger, I found an address near this one which increased after each steps, and when reaching 0x10 it incremented the battle counter by 0x70.

memory positions:
battle encounter : 0x020D9CE8 (4 bytes little endian)
step counter: 0x020D9D04


So the game has two counters for the battles : a Step counter and a random battle counter.
The step counter incrementing speed is affected by the character's speed: walk = +1, run = +2.
if you are in town, the step counter increases indefinitely without modifying the battle counter, when you go to the map it's reset to 0.
Code:
if(stepCounter > 0x0F)
{
stepcounter = 0;
Battle counter +=0x70; 
}
Sometime it's +0x07, I don't know why. maybe it depends on the map/location/ailment on characters.
battle start randomly regardless of the counter value and long as it's above 0x1000. If below, battle never start.


So we have different possible values we can edit :
- the step counter, which depends on the walk speed : not good, when walking it's already set to minimum value (1). we can't set it less.
- the steps counter limit triggering an increment of the random Battle counter. <-- We can slow encounter rate by increasing the walk limit.
- the battle increment value. <-- We can slow encounter rate by decreasing the battle increment value.

I decided to go with the Battle counter increment value 0x70.
I added a breakpoint on the Battle encounter address, but couldn't trace where the 0x70 came from. It's stored in r0 but when adding the breakpoint r0=70 it often crash the debugger.


I then put a breakpoint on the step counter address, and finally could trace what happened when the counter reaches 0x10. That value is hard coded in the ASM.
I decided that I could edit the 0x10 to increment it. I looked at the memory where the ASM code was located and tried to make it 0xFFFF but it didn't work. (I don't know ASM commands to edit the data size), so I only changed it to 0xFF.

ASM address
020481CC : step counter increment function
020481FC : max value for steps before incrementing the battle counter (memory address 020481E0)
02048204 : battle counter increment function

To create the AR code, I used this website to understand the codetype, and finally tested it in no$gba. hopefully it worked :)

AR Code:
220481EC 0000000F <--Current encounter rate
220481EC 000000FF <-- maximum slower encounter rate
It's my second ASM/debugger hack.
Hope you'll enjoy it :)
Thanks to Martin Korth for releasing the debugger freely.
(suggestion: a "copy address" in right-click prompts would be useful)

if you don't know how to add it to cheatcode dat file, I'll do it tomorrow.

Edit:
As promised, here is Cheatcode.dat 1.4 modv2 (11MB) (based on this version 1.4)
+ Made a copy of Blood of Bahamut JP to use with Blood of Bahamut Translation patch.
+ Added Black Sigil Encounter modifier. (x2, x3, x5, x10, x15 walk time before encounter)

Please, tell me if it works.
I didn't test it!

Edit:
I tested it, and it works fine.
Setting it to x15 (max value) is a little exaggerated, you have almost no more battles lol
I guess X5 or X10 is good, along with Exp X16 code to compensate the missing battles.
 

Patuli

Well-Known Member
Newcomer
Joined
Jul 26, 2014
Messages
64
Trophies
0
Age
45
XP
192
Country
Mexico
Great work Cyan! your info is very helpful and detailed.
As soon as i finish Blood of Bahamut, i will have another run at Black Sigil again.
and just to tell you that the code work on Super card DS two.
Thanks man.
 

Clever_13

New Member
Newbie
Joined
Dec 8, 2014
Messages
1
Trophies
0
Age
25
XP
51
Country
May I request some Action Replay Codes for Black Sigil? I really need it. I always die on that freaking game! XD
Like "Infinite Health" and "Max Level"
Thank you. :lol:
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,749
Trophies
4
Age
45
Location
Engine room, learning
XP
15,645
Country
France
There's no HP modifier in the cheat code database? that game had few code for exp and level I think. you can max out your HP or level up quickly.
or are you looking for "action replay" code specific to use with Datel's card? I can't help with that format, sorry.
 

Karenice

New Member
Newbie
Joined
Dec 10, 2014
Messages
1
Trophies
0
Age
36
XP
51
Country
United States
Hi, I have a question..I have been wanting to play this game with the lowered encounter rate so bad but I can't figure out how to get the cheat to work? I have a supercard dstwo and I put the cheatcode dat file into the dstwo plugin folder but when I press x over the file and then press the y button there is nothing there? I can't figure out what I am doing wrong..could someone maybe give me step by step instructions on how to do this right? I'd really appreciate it thanks:lol:
 

Cyan

GBATemp's lurking knight
Former Staff
Joined
Oct 27, 2002
Messages
23,749
Trophies
4
Age
45
Location
Engine room, learning
XP
15,645
Country
France
I'm also using Supercard DSTwo.

the filename must be named : usrcheat.dat
and located into the folder : _dstwo
(not in the plugin folder)

/_dstwo/usrcheat.dat

Pressing X should open the main game's menu, browse the code list.
select the encounter rate and it should save the selected cheats when you exit the menu. Launch the game with the Cheatcode option enabled.

If you don't see the cheat list, be sure it's in the correct path on your card.
 

SubLoverD

Well-Known Member
Newcomer
Joined
Mar 18, 2017
Messages
96
Trophies
0
Age
32
XP
295
Country
AR Code :

Battle encounter rate modifier [Cyan]
Code:
220481EC 000000xx

Replace xx with the encounter rate. (higher value = slower encounter rate)
Default is 0F
Max is FF


I started by looking at existing Cheatcode.dat file to see if there were already encounter codes.
There were two for "no more encounter. Press specific buttons to battle!". It contained the address where the battle counter is stored.

In the debugger, I found an address near this one which increased after each steps, and when reaching 0x10 it incremented the battle counter by 0x70.

memory positions:
battle encounter : 0x020D9CE8 (4 bytes little endian)
step counter: 0x020D9D04


So the game has two counters for the battles : a Step counter and a random battle counter.
The step counter incrementing speed is affected by the character's speed: walk = +1, run = +2.
if you are in town, the step counter increases indefinitely without modifying the battle counter, when you go to the map it's reset to 0.
Code:
if(stepCounter > 0x0F)
{
stepcounter = 0;
Battle counter +=0x70;
}
Sometime it's +0x07, I don't know why. maybe it depends on the map/location/ailment on characters.
battle start randomly regardless of the counter value and long as it's above 0x1000. If below, battle never start.


So we have different possible values we can edit :
- the step counter, which depends on the walk speed : not good, when walking it's already set to minimum value (1). we can't set it less.
- the steps counter limit triggering an increment of the random Battle counter. <-- We can slow encounter rate by increasing the walk limit.
- the battle increment value. <-- We can slow encounter rate by decreasing the battle increment value.

I decided to go with the Battle counter increment value 0x70.
I added a breakpoint on the Battle encounter address, but couldn't trace where the 0x70 came from. It's stored in r0 but when adding the breakpoint r0=70 it often crash the debugger.


I then put a breakpoint on the step counter address, and finally could trace what happened when the counter reaches 0x10. That value is hard coded in the ASM.
I decided that I could edit the 0x10 to increment it. I looked at the memory where the ASM code was located and tried to make it 0xFFFF but it didn't work. (I don't know ASM commands to edit the data size), so I only changed it to 0xFF.

ASM address
020481CC : step counter increment function
020481FC : max value for steps before incrementing the battle counter (memory address 020481E0)
02048204 : battle counter increment function

To create the AR code, I used this website to understand the codetype, and finally tested it in no$gba. hopefully it worked :)

AR Code:
220481EC 0000000F <--Current encounter rate
220481EC 000000FF <-- maximum slower encounter rate
It's my second ASM/debugger hack.
Hope you'll enjoy it :)
Thanks to Martin Korth for releasing the debugger freely.
(suggestion: a "copy address" in right-click prompts would be useful)

if you don't know how to add it to cheatcode dat file, I'll do it tomorrow.

Edit:
As promised, here is Cheatcode.dat 1.4 modv2 (11MB) (based on this version 1.4)
+ Made a copy of Blood of Bahamut JP to use with Blood of Bahamut Translation patch.
+ Added Black Sigil Encounter modifier. (x2, x3, x5, x10, x15 walk time before encounter)

Please, tell me if it works.
I didn't test it!

Edit:
I tested it, and it works fine.
Setting it to x15 (max value) is a little exaggerated, you have almost no more battles lol
I guess X5 or X10 is good, along with Exp X16 code to compensate the missing battles.

So is this the only way to alter the encounter rate and xp modifier? could someone not go into the roms code and change it outright? also is someone going to look into fixing bugs?
 

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,282
Country
United Kingdom
If you somehow don't have cheats you have two main choices.

1) Hardpatch the cheats with DSATM. Not very elegant but usually gets it done.

2) Several of those cheats look like ROM altering cheats, just rendered in RAM cheat form -- the DS copies its binaries to RAM (most games and homebrew using the ARM9 for everything in the game, the ARM7 then being kicked to basic management such that you can swap ARM7 binaries around from similar vintage ROMs with no ill effect) and thus you can enact changes on par with ROM codes on older devices with simple RAM cheats.
Converting to ROM edits is not necessarily trivial but still easy enough if you think it though.
Three main things to consider
i) where the ARM9 lands in RAM.
ii) whether there is any compression on the binary
iii) if it is not ARM9 but instead an overlay you get to figure out which overlay.

NDSTS ( http://www.no-intro.org/tools.htm ) will tell you where things land in RAM.
Compression is more tricky, and in fact the binaries use a different compression to ones you will see with other files.
Cue's compression tools https://www.romhacking.net/utilities/826/ should have a BLZ (backwards LZ) that works with the binaries if they are compressed.
Once you know where the binary is found and if it is compressed you can figure out what is changed in it, and change it (you literally have the change right there).
Technically you could slice the binary out of a RAM dump, compress it if necessary, and insert it back in.

There are also some other tricks with compression (such as disabling it) but I will leave those for now. Oh and crystaltile2 often lies about compression in binaries.


All that said I played this game a while back. I recommend the experience multiplier at the start at least but most other things were fine for me once you get some sword magic actually going after the intro. It was no Summon Night Swordcraft Story but amusing enough.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    Xdqwerty @ Xdqwerty: Good night