Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Crash while loading
#1
Well guys I tried adding the following character to NTSD but the loading never completes, exe crashes at broken_weapon.dat.
But it works if we remove one character. Now the twist is - when we add hidden characters to NTSD, the game loads but when tried to load this particular character, the game crashes.
Any thoughts?

This is the character:
http://www.mediafire.com/download/oczcmm...ght_Guy.7z

data.txt (just in case)
Code:
<object> id: 50 type: 0 file: chars\pein.dat id: 52 type: 0 file: chars\kyubi.dat id: 38 type: 0 file: chars\sasuke_cs2.dat id: 58 type: 0 file: chars\deidara_bird.dat id: 51 type: 0 file: chars\sasori.dat id: 56 type: 0 file: chars\reaper.dat id: 57 type: 0 file: chars\nckakuzu.dat id: 39 type: 0 file: chars\sand_creature.dat id: 37 type: 0 file: chars\jiroubou.dat id: 36 type: 0 file: chars\tayuya.dat id: 35 type: 0 file: chars\sakon.dat id: 34 type: 0 file: chars\kidomaru.dat id: 33 type: 0 file: chars\naruto_clone.dat id: 55 type: 0 file: chars\puppet_sasori.dat id: 32 type: 0 file: chars\hunter.dat id: 31 type: 0 file: chars\sound_nin2.dat id: 30 type: 0 file: chars\sound_nin.dat id: 2 type: 0 file: chars\naruto.dat id: 1 type: 0 file: chars\sakura.dat id: 3 type: 0 file: chars\kakashi.dat id: 4 type: 0 file: chars\sai.dat id: 11 type: 0 file: chars\sasuke.dat id: 13 type: 0 file: chars\yamato.dat id: 16 type: 0 file: chars\gaara.dat id: 7 type: 0 file: chars\rock_lee.dat id: 18 type: 0 file: chars\neji.dat id: 22 type: 0 file: chars\shikamaru.dat id: 19 type: 0 file: chars\tenten.dat id: 12 type: 0 file: chars\kiba.dat id: 5 type: 0 file: chars\shino.dat id: 8 type: 0 file: chars\chiyo.dat id: 14 type: 0 file: chars\kankuro.dat id: 15 type: 0 file: chars\temari.dat id: 6 type: 0 file: chars\Hsasori.dat id: 17 type: 0 file: chars\kisame.dat id: 9 type: 0 file: chars\itachi.dat id: 10 type: 0 file: chars\deidara.dat id: 24 type: 0 file: chars\hidan.dat id: 25 type: 0 file: chars\kakuzu.dat id: 23 type: 0 file: chars\kabuto.dat id: 20 type: 0 file: chars\orochimaru.dat id: 21 type: 0 file: chars\jiraiya.dat #id: 29 type: 0 file: chars\speedy.dat #The hidden character of NTSD id: 600 type: 0 file: Might_Guy\might_guy.dat id: 601 type: 3 file: Might_Guy\guy_counter.dat id: 100 type: 4 file: chars\weapon6.dat #heal_scroll id: 101 type: 4 file: chars\weapon2.dat #ex_tag id: 120 type: 1 file: chars\weapon4.dat #kunai id: 121 type: 4 file: chars\weapon5.dat #shuriken id: 122 type: 6 file: chars\weapon3.dat #healing id: 150 type: 2 file: chars\weapon1.dat #stone id: 151 type: 2 file: chars\log.dat #log id: 123 type: 6 file: chars\weapon8.dat #beer id: 124 type: 4 file: chars\weapon9.dat #< id: 217 type: 2 file: chars\weapon10.dat #louis_armour id: 218 type: 2 file: chars\weapon11.dat #louis_armour id: 300 type: 5 file: chars\criminal.dat #criminal id: 230 type: 3 file: chars\karasu.dat #karasu id: 500 type: 1 file: chars\heart.dat #heart1 id: 501 type: 1 file: chars\heart2.dat #heart2 id: 502 type: 1 file: chars\heart3.dat #heart3 id: 503 type: 1 file: chars\blood.dat #blood1 id: 504 type: 1 file: chars\blood2.dat #blood2 id: 505 type: 1 file: chars\blood3.dat #blood3 id: 506 type: 1 file: chars\heart0.dat #heartuseless id: 200 type: 3 file: chars\sakura_ball.dat id: 201 type: 3 file: chars\death.dat id: 203 type: 3 file: chars\charge.dat id: 204 type: 3 file: chars\wind.dat id: 205 type: 3 file: chars\poison.dat id: 206 type: 3 file: chars\clay_bird2.dat id: 207 type: 3 file: chars\ink.dat id: 208 type: 3 file: chars\sword.dat id: 209 type: 3 file: chars\area.dat id: 210 type: 3 file: chars\katon_ball.dat id: 211 type: 3 file: chars\firen_flame.dat id: 212 type: 3 file: chars\freeze_column.dat id: 213 type: 3 file: chars\puppet.dat id: 214 type: 3 file: chars\flash.dat id: 215 type: 3 file: chars\frog.dat id: 216 type: 3 file: chars\doggy.dat id: 219 type: 3 file: chars\jan_chaseh.dat id: 220 type: 3 file: chars\crow_2.dat id: 221 type: 3 file: chars\big_boom.dat id: 222 type: 3 file: chars\ironsand.dat id: 223 type: 3 file: chars\mega_ex.dat id: 224 type: 3 file: chars\snake.dat id: 225 type: 3 file: chars\clay_bird.dat id: 226 type: 3 file: chars\coffin.dat id: 228 type: 3 file: chars\bugs.dat id: 229 type: 3 file: chars\rasenshuriken.dat id: 231 type: 3 file: chars\sanshouo.dat id: 235 type: 3 file: chars\criminal2.dat #criminal2 id: 401 type: 3 file: chars\summon.dat id: 400 type: 3 file: chars\dragon.dat id: 417 type: 3 file: chars\tree.dat id: 407 type: 3 file: chars\clay_worm.dat id: 408 type: 3 file: chars\katon_big.dat id: 410 type: 3 file: chars\sand_shield.dat id: 411 type: 3 file: chars\sand.dat id: 412 type: 3 file: chars\sand_2.dat id: 413 type: 3 file: chars\sand_blast.dat id: 416 type: 3 file: chars\water.dat id: 418 type: 3 file: chars\mother_puppet.dat id: 419 type: 3 file: chars\chiyo_kunais.dat id: 420 type: 3 file: chars\father_puppet.dat id: 421 type: 3 file: chars\bugs2.dat id: 422 type: 4 file: chars\ex_ball.dat #exball id: 433 type: 3 file: chars\itachi_kunai.dat id: 434 type: 1 file: chars\rasengan_ball.dat #rasengan id: 435 type: 3 file: chars\drunken.dat id: 436 type: 3 file: chars\wave.dat id: 437 type: 1 file: chars\chakra.dat id: 438 type: 3 file: chars\spider.dat id: 439 type: 3 file: chars\monster.dat id: 440 type: 3 file: chars\chidori.dat id: 441 type: 3 file: chars\wood.dat id: 442 type: 1 file: chars\gate.dat id: 444 type: 1 file: chars\byakugan.dat #byakugan id: 445 type: 1 file: chars\shield.dat id: 446 type: 3 file: chars\4TK_ball.dat id: 447 type: 1 file: chars\die.dat id: 448 type: 1 file: chars\flash_weap.dat id: 449 type: 1 file: chars\jiroubou_rock.dat id: 450 type: 3 file: chars\air_creature.dat id: 507 type: 1 file: chars\air_creature_die.dat id: 451 type: 3 file: chars\thunder_creature.dat id: 452 type: 3 file: chars\fire_creature.dat id: 453 type: 3 file: chars\earth_creature.dat id: 462 type: 3 file: chars\shadow.dat id: 499 type: 3 file: chars\nckakuzuarm.dat id: 510 type: 3 file: chars\100_puppets.dat id: 511 type: 3 file: chars\100_puppets_b.dat id: 512 type: 3 file: chars\100_puppets_c.dat id: 513 type: 3 file: chars\lee_counter.dat id: 514 type: 3 file: chars\katon_kakuzu.dat id: 515 type: 4 file: chars\needle.dat #needle id: 516 type: 3 file: chars\mirror.dat id: 998 type: 5 file: data\etc.dat id: 999 type: 5 file: data\broken_weapon.dat <object_end> <file_editing> data\nothing.txt <file_editing_end> <background> id: 0 file: bg\sys\District\bg.dat id: 1 file: bg\sys\SandCountry\bg.dat id: 4 file: bg\sys\Cave\bg.dat id: 2 file: bg\sys\Deep\bg.dat id: 3 file: bg\sys\Hideout\bg.dat id: 5 file: bg\sys\Rain\bg.dat id: 6 file: bg\sys\SnowCountry\bg.dat id: 7 file: bg\sys\River\bg.dat id: 8 file: bg\sys\Forest\bg.dat id: 9 file: bg\sys\Arena\bg.dat id: 10 file: bg\sys\RamenPlace\bg.dat id: 11 file: bg\sys\Springs\bg.dat id: 12 file: bg\sys\Academy\bg.dat id: 13 file: bg\sys\CastleRoof\bg.dat id: 14 file: bg\sys\Valley\bg.dat id: 15 file: bg\sys\Grassland\bg.dat id: 16 file: bg\sys\Path\bg.dat <background_end>
▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
[Image: 11twnjn.png]
▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
I need a spriter to help in my All Stars Project.. So if anyone interested, please contact me.
Reply
Thanks given by:
#2
To add to this, here is the game where the character is supposed to be added..
https://www.dropbox.com/s/o38iv6h0hyv295...0a.7z?dl=0
It won't work if we use it in any other mod or a fresh lf2 copy as it shares some data from the game I posted above and the character is developed specifically for that game.

Here is the gist of what's happening :

- Adding the character makes exe stop working after loading broken_weapon.dat

- However if we remove one existing character it starts to work. ThoughT of doing so in case the mod reached data limit or something. My character worked flawlessly this time.

- HOWEVER!! If I try to add a random hidden character (i.e. the characters which are in the game but not in data.txt for reasons) instead of my character back into the data.txt the game loads without an issue. Thus eliminating the case of data limit.

It's so damn random I can't even.
(03-20-2016, 06:41 PM)mfc Wrote:  Be the unsqueezable sponge!
My new life motto!
Reply
Thanks given by:
#3
I'm able to add Bandit, Template, Mark & Knight but not Bat, Hunter, Henry, Justin, Monk (just character data, did not include relevant opoints). This happens regardless of whether I added speedy & guy_counter.dat in the data or not (might_guy.dat always crashes). This also happens even if I removed the opoint tags from the latter group of characters.

When I took out Monk's D>A frames except for frame 240, Monk will load.

I have no idea what's causing this problem, but I hope the information provided above will give some clarity to the situation.
Reply
Thanks given by: Rhino.Freak
#4
This is so random. I now have more questions than ever before. Can it be exe's fault? Coz it is hex edited in order to do a few things..
(03-20-2016, 06:41 PM)mfc Wrote:  Be the unsqueezable sponge!
My new life motto!
Reply
Thanks given by:
#5
Nope that's not an issue as I tried other exe too to watch where the loading crashes..
▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
[Image: 11twnjn.png]
▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
I need a spriter to help in my All Stars Project.. So if anyone interested, please contact me.
Reply
Thanks given by:
#6
What message does it throw at you before it crashes? Is it the "LF2 has stopped working" one?
[Image: signature.png]
A-Engine: A new beat em up game engine inspired by LF2. Coming soon

A-Engine Dev Blog - Update #8: Timeout

Reply
Thanks given by:
#7
@Doctor A : Yes
@Tornado: Oh right I forgot about that.

Hmm.. Now this is getting interesting (annoying honestly)
(03-20-2016, 06:41 PM)mfc Wrote:  Be the unsqueezable sponge!
My new life motto!
Reply
Thanks given by:
#8
So I found the issue, and it turns out that sound files are to blame.
Basically LF2 has an array of sound file names. Each sound file is at max 19 characters long (which means that it takes 20 bytes to store its name due to null-terminated strings).
There are a max of 400 sound files in total, loading more than that will cause memory that is not associated with sound files to be overwritten causing weird things to happen.
In this case NTSD was sitting at 400 sound files loaded, and along comes two more sound files from a new character and a pointer to some data to with sprites gets overwritten, so when LF2 tries to load a new sprite, everything comes down burning.

If you look at some of the sound files you may notice that they have names that are longer than 19 characters (for example "data\SNDDATA_2377.wav"). In this case its name will take up some space from the next sound file, and when the next file is then loaded it will invalidate the previous name, so if a data file tries to use it, the sound file will be loaded again.
tl;dr of previous paragraph: Having names longer than 19 characters may cause a sound file to be loaded twice.

So the way to solve this would be to reduce the length of the sound file names.
Specifically "data\SNDDATA_1926.wav", "data\SNDDATA_2133.wav", "data\SNDDATA_2275.wav", "data\SNDDATA_1911.wav", "data\SNDDATA_0552.wav", "data\SNDDATA_1317.wav", "data\SNDDATA_1325.wav", "data\SNDDATA_1330.wav", "data\SNDDATA_1860.wav", "data\SNDDATA_1862.wav", "data\SNDDATA_1883.wav", "data\SNDDATA_1885.wav", "data\SNDDATA_1886.wav", "data\SNDDATA_1922.wav", "data\SNDDATA_1955.wav", "data\SNDDATA_2052.wav", "data\SNDDATA_2058.wav", "data\SNDDATA_2063.wav", "data\SNDDATA_2138.wav", "data\SNDDATA_2150.wav", "data\SNDDATA_2274.wav", "data\SNDDATA_2283.wav", "data\SNDDATA_2308.wav", "data\SNDDATA_2320.wav", "data\SNDDATA_2328.wav", "data\SNDDATA_2352.wav", "data\SNDDATA_2359.wav", "data\SNDDATA_2367.wav", "data\SNDDATA_2373.wav", "data\SNDDATA_2380.wav" and "data\SNDDATA_2382.wav" seem to be loaded multiple times, specifically the first four are loaded thrice while, the rest of them are loaded twice.
You would also need to update the data files to reflect the name change of the sound files.

@Doctor A: Could you write a tool to automate this change? I am too lazy to do it myself.
Age ratings for movies and games (and similar) have never been a good idea.
One can learn a lot from reinventing wheels.
An unsound argument is not the same as an invalid one.
volatile in C++ does not mean thread-safe.
Do not make APIs unnecessarily asynchronous.
Make C++ operator > again
Trump is an idiot.
Reply
#9
That was a nice find indeed! Super thanks for the solution and helping me find the real culprit here!

A program would be great! If it's tough to make or lengthy don't bother, I'll do it manually. :)

So this data\SNDDATA_2377.wav is actually taking up 21 characters right? Also a wild thought, can these "limitations" be simply changed and stuff via exe editing? Like 400 sounds be changed to 600 or so..
(03-20-2016, 06:41 PM)mfc Wrote:  Be the unsqueezable sponge!
My new life motto!
Reply
Thanks given by:
#10
(07-21-2015, 09:12 AM)Rhino.Freak Wrote:  So this data\SNDDATA_2377.wav is actually taking up 21 characters right?
Correct.

(07-21-2015, 09:12 AM)Rhino.Freak Wrote:  Also a wild thought, can these "limitations" be simply changed and stuff via exe editing? Like 400 sounds be changed to 600 or so..
Simply? No.
Very complexly? Yes.
The way it is layed out in memory is 8000 bytes of sound information and then 4 bytes for a pointer, and then a ton of more memory for other stuff after that.
If you were to change the size of the sound name buffer to support 600 files you would have to make every assembly instruction that uses any of the memory after the sound name buffer access a different offset (because it has changed), missing just a single instruction would cause weird things to happen, and can be very hard to debug.
Also finding every instruction is not an easy task as it would essentially involve solving the halting problem.

Of course if you had the original source code it would be as simply as changing a number from 400 to 600.
Age ratings for movies and games (and similar) have never been a good idea.
One can learn a lot from reinventing wheels.
An unsound argument is not the same as an invalid one.
volatile in C++ does not mean thread-safe.
Do not make APIs unnecessarily asynchronous.
Make C++ operator > again
Trump is an idiot.
Reply
Thanks given by:




Users browsing this thread: 1 Guest(s)