Need help ripping files from Call of Duty: Black Ops DS

XeoSnow

Member
OP
Newcomer
Joined
May 20, 2023
Messages
6
Trophies
0
Age
22
XP
27
Country
United States
Heyy! Pretty new to this but I need help extracting models and other files from Call of Duty Black Ops DS. Whenever I bring it into Every File Explorer it only shows the dwc file and nothing else. Not sure if this can help but I used DSLazy to unpack the files and did the whole DSRCONTENT thing, this is what it shows
Folder PATH listing for volume Hard Drive
Volume serial number is F832-6CFB
D:.
| arm7.bin
| arm9.bin
| banner.bin
| header.bin
| y7.bin
| y9.bin
|
+---data
| | FileData.bin
| | FileInfo.bin
| | FileNames.bin
| |
| \---dwc
| utility.bin
|
\---overlay
overlay_0000.bin
overlay_0001.bin
overlay_0002.bin
overlay_0003.bin

Thank you for any help!
 

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Looks like one of those games that packs everything into a sub archive, and if the names there are anything to go by splits the files between the data, a header and file names which is an odd one (normally bulk data and header/names if any are there is the split).

Even more curiously it looks like the sound might be in that too.

I have not looked at it as I type this but such things are usually not so bad. The File Info probably contains the locations (see pointers as same thing), the names likely correspond to that and for simple extraction then easy enough to make a batch file do it. If you need a program to slice up files from the command line then https://web.archive.org/web/20170218180937/http://min.midco.net/cracker/filecutter.zip is a decent one I have used many times.
If it is not making sense it can help to find the start of a file within the big archive ( https://www.romhacking.net/documents/[469]nds_formats.htm , bound to be something from that in this game) and then match it up to what you find.
 

XeoSnow

Member
OP
Newcomer
Joined
May 20, 2023
Messages
6
Trophies
0
Age
22
XP
27
Country
United States
Thank you for replying, this is very confusing for me and this helps me.
I have a silly little brain but I downloaded filecutter, opened it and am a bit lost. Am I supposed to put in like a certain line with these nds formats and just kinda mess with stuff until I get something? What kind of lines would I put in filecutter to start experimenting? Are there tutorials on how to use this for DS games? Again thank you!

Edit: Kinda figured out how to use filecutter and run batch files with it, but I'm still a bit lost on what exactly to put in to get good results such as file in, file out, and lengths. I also saw one of your threads about it where you put a number after the start text, is that important for this too?
 
Last edited by XeoSnow,

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Random numbers will get you nowhere in this.
There should be a usage if you run it.
For the most part you have a length of data to slice out of it and a location to start at (which is optional/from a switch). Decimal numbers worked (if playing with a spreadsheet then hex2dec() https://help.libreoffice.org/6.4/en-US/text/scalc/01/04060115.html?&DbPAR=WRITER&System=WIN should get it, and also be a nice basis for the batch file. Other tip there if you dumped a bunch of columns from a hex editor is notepad++ has column mode allowing you to grab multiple such things if you want.

To find this data you would presumably be looking at the FileData.bin, FileInfo.bin and FileNames.bin in a hex editor. It might be obvious, it might take a bit of reasoning and testing (I don't see an audio file separate in that so presumably inside the file, the vast majority of DS games using the SDAT format so if you search for something unique to it like SDAT in text search for said hex editor https://www.romhacking.net/documents/[469]nds_formats.htm#Sounds , then it might give you the start of the SDAT file and as SDAT (and most other formats) have length values in them you could fairly easily correlate it to what I imagine is in size thing somewhere* in that) and there might be something extra (the NARC format for instance using the upper bit of the location** to denote a subdirectory) or a quirk (I had one of these sorts of things for touch detective, the locations needed a shift for reasons unknown).

*I have had a few files be a list of lengths or locations such that you can mathematically determine things but rarely in stuff like this where that could be computationally expensive to do every time.

**32 bits long is some 4 gigabytes of addressable space, as that is larger than you will likely need then dropping it to a paltry 2 gigabytes by losing a bit allows you to have such things without having to define a further aspect of the file format and possibly wasting space if barely anything uses it. Only cost is numbers look odd in a hex editor but blanking a single bit in a known location is trivial (AND it with 0 and 31 1s).

Anyway hopefully you then end up with a long list of locations, names (which you don't always have in these scenarios -- not like the game needs to know the name of the file it is using when it more likely references by number or location) and sizes. Bit of fun with the fill command, copy-paste into a text editor, maybe replace tabs with space or something to make it look normal and save as .bat. One extraction script made the cowboy way but if you only want the files to peruse then nobody is judging.
 
  • Like
Reactions: XeoSnow

XeoSnow

Member
OP
Newcomer
Joined
May 20, 2023
Messages
6
Trophies
0
Age
22
XP
27
Country
United States
OKAY SO STILL WORKING ON IT
This is all very new to me, so I'm trying to learn what all these values and stuff mean
So for the filecutter command, would it go like
filecutter, then for file.in it would be like FileData.bin, then would the length be like 0x2 for graphic files, then file out would be the hexidecimal value, then the <-s start> thing, and is the last number like a 16 bit integer from the decimal value thing or whatever space it needs? Does that matter if it's signed or unsigned?
And then would you do that for ever decimal value?
Also the file out, would that be the hexidecimal .bin? What file ending would that be?
Thank you again, it's probably a bit tedious helping newbies like me, hopefully it's not tooo bad
 

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Decided to peel myself away from silly videos to have a look at this. Have the European version here because that is what I grabbed, the general flow should not be any different though and hopefully it is not one of the ones Germany or Australia got the fun police involved in if you do decide to pivot.

Negative sizes tend to make physics cry so signed or not tends not to be a problem there, minor exception for older systems and compression that do relative jumps and might support signed there.

File out. I had a look at the filenames.bin and it appears to have them as well as the names which is very nice of them -- normally I would default to .bin or if there is a nice magic stamp then maybe that instead.
That is probably getting ahead of things though, however might as well start with that as it is a pretty clear example of a file format like this.
Start of the file. Bunch of numbers counting generally upwards after you flip them (see big endian and little endian if you have not met that before).
0000 361C if flipped.
coddsextraction0.jpg
Going there (not necessary in this as you could have scrolled down until things started making sense but I rarely have an example as clean as this and one was called for so hey)
coddsextraction1.jpg
Technically a 00 which is possibly odd but also maybe not, worst case scenario things might need to be shifted down one row in the eventual spreadsheet.
361D however looks like the good stuff. Everything also separated by a 00 (dump the names into another file, find replace 00 with 0d0a aka the Windows way of doing a new line, 0A if doing Unix style) so that is nice for the extraction.
Before getting into that though then
F82C 0100 is just before that and is presumably the last entry in the list.
flipped that is
0001 F82C
Oh look where the file ends/has its last entry
coddsextraction2.jpg

Variations on this is basically ROM hacking in a nutshell, at least the pulling apart of archive formats (which in the end in most things if you want to look at it that way -- most files will have sub sections and you want to be able to get them to start drilling down).
If we were playing big boy ROM hacker you would want to figure out the name location thing and note it down accordingly, as mentioned though with everything nicely being separated by a 00 that should never come up within a normal name (granted I have not checked at time of writing, might be some subdirectories or something which is possibly what that 00 at the start indicated). Similarly there is not much call to alter the names of files in something like this so of minimal interest in this particular instance. Everything else though, yeah you want to know where things are located so call it a gentle introduction.

Onto fileinfo.bin
Whole bunch of numbers counting upwards. Usually then a safe bet on it being the locations, or maybe locations and sizes (not necessarily the same as location+1-current location as it is generally easier to read files starting on boundaries, or if you find yourself on an optical media type device where sectors are a thing*).

*also why your computer says file size and size on disk, and why a few million 100 byte files can eat up hard drive space at a faster rate than you might expect.

Anyway many files will start with maybe some info about the file itself -- how many entries, when the thing ends, when the section ends... and might look a bit different to normal entries that make up the rest of the file.
a25c long so probably not that. If we were sensible we might have grabbed a number of entries in the previous name pondering to see if that is noted (number of entries multiplied by a given amount gives you the file size, which also divides back down so you can get an estimate of length of each entry) but eh.
As this is file sizes and you might have tiny palette files mixed in with huge sound files random jumps in numbers is fairly expected, likewise a whole run of expected to be identically sized files (there are a fixed number of tiles on screen, stats tables tend to be the same for each player character, palettes are a fixed size...) can also hide things from you. Can make patterns a bit harder to spot so I quite often scroll in a bit or find somewhere it is easier to ponder before going out and spreading it file wide.
12 bytes appears to make things line up (really, I make the window larger and smaller until something looks pleasing), albeit with some odd jumps a bit further into the file. That is also a lot of data (32 bits aka 4 bytes, 2^32, is about 4 gigabytes of space) so we then get to start pondering what else (file size, compressed size, file id number, we have names here but also something that can trouble things in other instances... if it makes sense to store the data for an archive or the file type you are looking at it gets to be considered, though this is console hacking and not high end data storage so don't let your imagination run too far -- read only, execute permissions, modified and created dates... kind of pointless where they might be essential to a zip file). Of course 12 bytes might also be a false friend and I want a lesser multiple.
Quick and dirty find and replace back in the names section says 3463 replacements so presumably that many files as well. Though looking more carefully

Code:
animations
collisions
comicpanelscripts
dialogues
fonts
levels
models
nitrochr
simplertas
sounds
int_room
m00_kill
m01_cuba1_a
m01_cuba1_b
m02_cuba2_a
m02_cuba2_b
m03_arctic_a
m03_arctic_b
m03_arctic_c
m04_jungle_a
m04_jungle_b
m05_light_a
m06_river_a
m06_river_b
m06_river_c
m07_afghan1_a
m07_afghan1_b
m08_afghan2_a
m09_afghan3_a
m10_secret_a
m11_esc_int_a
m11_esc_int_b
m12_esc_ext_a
m12_esc_ext_b
m12_esc_ext_c
m13_cuba3_a
m14_paddy_a
m14_paddy_b
m14_paddy_d
m15_mother_a
m15_mother_b
m16_pay_a
m16_pay_b
mp_base
mp_basilica
mp_caves
mp_command
mp_crossfire
mp_graveyard
mp_highrise
mp_lighthouse
mp_paddy
mp_praelium
mp_stronghold
mp_theyard
train
zm_facility
zm_house
zm_overlook
zm_temple
credits - 06-18-09.crdb
templates.crtc
mav.txt
credits_old_052410.crdb
credits.crdb

No extensions where other things have them and those word choices scream directory name to me, or at least further sub archives.
61 of them depending upon whether you include the initial 00 name thing.

a25c = 41564 decimal
dividing that by 3463 (the number of files)
12 exactly (fractional tends to mean you have some extra data like a length of file, length of section, or you miscounted the number of files you had possibly because directory names or something)

The numbers stop making sense around 64 entries as well and follow a new pattern after that. Whether directory names become a thing I don't know. Could be something else entirely.

Onto the filedata itself. If life was horrible and you did not fancy figuring out how the binary handles it then magic stamps noted above also tend to be followed by file sizes. You could possibly then chain a search through there for magic stamps and sizes to figure things out, at least until the devs make a custom format without it. Fortunately we just spent time looking at the helper files.

61 megabytes of file for a 64 megabyte ROM (1 meg of that being the utility.bin in the dwc directory, this usually being the download play) means most of the good stuff is probably in here, though they might have squeaked some into the binaries and overlays.
03C63AA0 is the last byte of the file so needs to be able to handle that if we are contemplating the split back in the info file (6 bytes location, 6 something else, 8 bytes location, 4 something else being the starting bets)
Snippet from the end of the fileinfo.bin, the missing few bytes at the end there is a cause for a pause)
Code:
Offset(h) 00   02   04   06   08   0A

0000A20C  0C69 8D02 2408 0000 7672 99FE  .i..$...vr™þ
0000A218  3071 8D02 4601 0000 E178 99FE  0q..F...áx™þ
0000A224  7872 8D02 4601 0000 1F79 99FE  xr..F....y™þ
0000A230  C073 8D02 301E 0000 E143 CE42  Às..0...áCÎB
0000A23C  F091 8D02 201C 3801 2E4F E566  ð‘.. .8..Oåf
0000A248  10AE C503 8084 0000 C7D2 AFC9  .®Å.€„..ÇÒ¯É
0000A254  9032 C603 3008 0000            .2Æ.0...

The last entry might not be the end of the file as much as the start of the last file in the data blob but fairly safe bet it is going to be somewhere in the region (other than archives like this and audio files you tend not to get that large), though with file names like
cod7_mpbtn_connect3.ncgr
sound_all.sdat
sound_all.sd
digitalmusic.smb
ending off the files... might not be the ideal case (would have loved that ncgr, nice 2d graphics file there ( https://www.romhacking.net/documents/[469]nds_formats.htm ).

Searching the ROM for SDAT lands me at 028D 91F0 which you can see in the above snippet as well (again flipped). Its internal size report (most DS formats from Nintendo have this 8 bytes in) is 201C 3801 (note again it is flipped, but matching the file here for hopefully obvious reasons) so looks like we have file location and file size in fairly plain text there. What the other 4 bytes are remains a bit of a mystery, especially with the bit of randomness there. Whether we can say we are only ripping a file so who cares just make the script I do not know.

Said missing entry rather than the perfect multiple of 12 might also mean the unknown section is actually for the file after rather than this one. Might also be more evidence of directory names (directories don't necessarily need directory indicators of their own, unless they were advanced enough to include subdirectory support which few would have).
Looking more closely at the names "global.roo" features many times as well which makes things a bit trickier, though could always just include the location as a name to make it unique, and is also a further indicator of directories. 2996 I also see .ncgr_ as a name with no file name which might want its own unique effort (underscores by the way tend to indicate compression, which is fairly expected with graphics formats like that).

Anyway back to things. Got a spreadsheet opened up and names imported. Had to line things up and do manual flipping but in the end got myself a nice little batch file. Attached along with spreadsheet. Bit of a system grinder but that might also be 5 browser windows and who knows how many video tabs. Does allow fun like

codblopsdsaudioripping.jpg


Computer is now playing some suitably epic cold war themed music now. Technically could have already done that (searching for SDAT and grabbing the size is fairly basic, some programs might even do it automatically/as a first pass rather than hoping names/extensions/directories make sense). The venerable ndssndext https://gbatemp.net/download/nds-sound-extractor.28818/ doing the deed as vgmtrans was not up to the task it seems.

Also
coddsextraction3.jpg

You might also choose to lose the location # file name part, I mostly included it to make them all unique and dodge the unnamed file mentioned without sorting the presumed directory aspect. Makes the names a bit more amenable and might also allow for easier ripping for programs that only support the same name for the various graphics aspects to be loaded/attached to each other.

Oh for for the curious about the mav.txt that you might have seen in the thing above (full file name list obviously included as part of the spreadsheet)

Code:
Generic_Ally,base_t_idle,base_r,base_strafe_LT,base_strafe_RT,
1911_Aimdown,
NVS,
 

Attachments

  • codripperblopsdseur.7z
    248.1 KB · Views: 37

XeoSnow

Member
OP
Newcomer
Joined
May 20, 2023
Messages
6
Trophies
0
Age
22
XP
27
Country
United States
OKAY I skimmed this and this looks like tons of help, I'll check in depths and mess with stuff
Thank you so much dude, it's probably a bit of a hassle to help every little guy who comes in asking for it, but genuinely thank you.
I'll reply again if I have questions, but this looks like tons of help, I'll mess with it. Thank you again so much!

Edit: Didn't realize you did like all the work for me, thank you so much. I really really appreciate it, this is so awesome. Even reading this I was a bit confused by it all, I just haven't messed with this stuff, but with your help I understand it a bit more, thank you a bunch, for real!
 
Last edited by XeoSnow,

XeoSnow

Member
OP
Newcomer
Joined
May 20, 2023
Messages
6
Trophies
0
Age
22
XP
27
Country
United States
It works very well, but I've noticed a little thing with some models
Certain models like 016D18D4r_fac.nsbmd, or anything with r_ and then the map and stuff don't seem to work, I was trying to look into it some but I'm a bit confused by it. It's at offset 0000B769 in the FileNames.Bin file if that helps any. Trying to open it just leads to nothing. Thank you for any help!
 

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
What are you trying to open them in? NSBMD reverse engineering is not as exact a science/does not feature as nice tools as some of the 2d and audio aspects and plenty of things might balk if some dev decided to colour outside the lines a bit.

Tried with a few things, nsbmdtool (a very old tool) says not a bmd0 and mkdscourse modifier also shows it as an unknown file where it views various other files in the game quite happily (tried it on all the files with the r_ naming format) and all got
Code:
nsbmd -d r_01.nsbmd
DEBUG: file size = 00003894 (14484)
DEBUG: file is not BMD0.

nsbmd -d r_02.nsbmd
DEBUG: file size = 000040b0 (16560)
DEBUG: file is not BMD0.

nsbmd -d r_03.nsbmd
DEBUG: file size = 00003a78 (14968)
DEBUG: file is not BMD0.

nsbmd -d r_04.nsbmd
DEBUG: file size = 000067d4 (26580)
DEBUG: file is not BMD0.

nsbmd -d r_05.2.nsbmd
DEBUG: file size = 0000c508 (50440)
DEBUG: file is not BMD0.

nsbmd -d r_05.nsbmd
DEBUG: file size = 000047b4 (18356)
DEBUG: file is not BMD0.

nsbmd -d r_06.nsbmd
DEBUG: file size = 000040ac (16556)
DEBUG: file is not BMD0.

nsbmd -d r_07.nsbmd
DEBUG: file size = 00005d44 (23876)
DEBUG: file is not BMD0.

nsbmd -d r_08.nsbmd
DEBUG: file size = 0000298c (10636)
DEBUG: file is not BMD0.

nsbmd -d r_09.nsbmd
DEBUG: file size = 000034dc (13532)
DEBUG: file is not BMD0.

nsbmd -d r_10.nsbmd
DEBUG: file size = 00001fb4 (8116)
DEBUG: file is not BMD0.

nsbmd -d r_11.nsbmd
DEBUG: file size = 0000b510 (46352)
DEBUG: file is not BMD0.

nsbmd -d r_12.nsbmd
DEBUG: file size = 00005794 (22420)
DEBUG: file is not BMD0.

nsbmd -d r_13.nsbmd
DEBUG: file size = 00002e6c (11884)
DEBUG: file is not BMD0.

nsbmd -d r_14.nsbmd
DEBUG: file size = 00006f10 (28432)
DEBUG: file is not BMD0.

nsbmd -d r_basil.nsbmd
DEBUG: file size = 000112fc (70396)
DEBUG: file is not BMD0.

nsbmd -d r_beacon.nsbmd
DEBUG: file size = 00009688 (38536)
DEBUG: file is not BMD0.

nsbmd -d r_begin.nsbmd
DEBUG: file size = 0000958c (38284)
DEBUG: file is not BMD0.

nsbmd -d r_begin02.nsbmd
DEBUG: file size = 00006d30 (27952)
DEBUG: file is not BMD0.

nsbmd -d r_begin8.nsbmd
DEBUG: file size = 00004100 (16640)
DEBUG: file is not BMD0.

nsbmd -d r_begin9.nsbmd
DEBUG: file size = 00003afc (15100)
DEBUG: file is not BMD0.

nsbmd -d r_boats.nsbmd
DEBUG: file size = 00004db8 (19896)
DEBUG: file is not BMD0.

nsbmd -d r_bridge.nsbmd
DEBUG: file size = 0000676c (26476)
DEBUG: file is not BMD0.

nsbmd -d r_cat1.nsbmd
DEBUG: file size = 00002c78 (11384)
DEBUG: file is not BMD0.

nsbmd -d r_cat2.nsbmd
DEBUG: file size = 000032bc (12988)
DEBUG: file is not BMD0.

nsbmd -d r_catacomb.nsbmd
DEBUG: file size = 0000bba4 (48036)
DEBUG: file is not BMD0.

nsbmd -d r_catnew.nsbmd
DEBUG: file size = 000026b4 (9908)
DEBUG: file is not BMD0.

nsbmd -d r_command.nsbmd
DEBUG: file size = 00010378 (66424)
DEBUG: file is not BMD0.

nsbmd -d r_contam.nsbmd
DEBUG: file size = 00008714 (34580)
DEBUG: file is not BMD0.

nsbmd -d r_convoy.nsbmd
DEBUG: file size = 0000a3e4 (41956)
DEBUG: file is not BMD0.

nsbmd -d r_cor1.nsbmd
DEBUG: file size = 00002e5c (11868)
DEBUG: file is not BMD0.

nsbmd -d r_cor2.nsbmd
DEBUG: file size = 00001738 (5944)
DEBUG: file is not BMD0.

nsbmd -d r_corn2.nsbmd
DEBUG: file size = 00000454 (1108)
DEBUG: file is not BMD0.

nsbmd -d r_corner.nsbmd
DEBUG: file size = 00006590 (26000)
DEBUG: file is not BMD0.

nsbmd -d r_corner.nsbmd
DEBUG: file size = 00006590 (26000)
DEBUG: file is not BMD0.

nsbmd -d r_crossfire.nsbmd
DEBUG: file size = 000137f4 (79860)
DEBUG: file is not BMD0.

nsbmd -d r_cuba1.nsbmd
DEBUG: file size = 00001a04 (6660)
DEBUG: file is not BMD0.

nsbmd -d r_cuba10.nsbmd
DEBUG: file size = 000078c8 (30920)
DEBUG: file is not BMD0.

nsbmd -d r_cuba11.nsbmd
DEBUG: file size = 0000532c (21292)
DEBUG: file is not BMD0.

nsbmd -d r_cuba12.nsbmd
DEBUG: file size = 0000675c (26460)
DEBUG: file is not BMD0.

nsbmd -d r_cuba13.nsbmd
DEBUG: file size = 0000405c (16476)
DEBUG: file is not BMD0.

nsbmd -d r_cuba14.nsbmd
DEBUG: file size = 00007758 (30552)
DEBUG: file is not BMD0.

nsbmd -d r_cuba15.nsbmd
DEBUG: file size = 0000356c (13676)
DEBUG: file is not BMD0.

nsbmd -d r_cuba16.nsbmd
DEBUG: file size = 000008b4 (2228)
DEBUG: file is not BMD0.

nsbmd -d r_cuba2.nsbmd
DEBUG: file size = 000076d4 (30420)
DEBUG: file is not BMD0.

nsbmd -d r_cuba3.nsbmd
DEBUG: file size = 00005dfc (24060)
DEBUG: file is not BMD0.

nsbmd -d r_cuba6.nsbmd
DEBUG: file size = 00002948 (10568)
DEBUG: file is not BMD0.

nsbmd -d r_cuba7.nsbmd
DEBUG: file size = 00004680 (18048)
DEBUG: file is not BMD0.

nsbmd -d r_cuba8.nsbmd
DEBUG: file size = 00006020 (24608)
DEBUG: file is not BMD0.

nsbmd -d r_cuba9.nsbmd
DEBUG: file size = 00008100 (33024)
DEBUG: file is not BMD0.

nsbmd -d r_dupe.nsbmd
DEBUG: file size = 0000f928 (63784)
DEBUG: file is not BMD0.

nsbmd -d r_encamp.nsbmd
DEBUG: file size = 000071e4 (29156)
DEBUG: file is not BMD0.

nsbmd -d r_end.nsbmd
DEBUG: file size = 00004aa4 (19108)
DEBUG: file is not BMD0.

nsbmd -d r_exit1.nsbmd
DEBUG: file size = 00002e34 (11828)
DEBUG: file is not BMD0.

nsbmd -d r_exit2.nsbmd
DEBUG: file size = 00001bd4 (7124)
DEBUG: file is not BMD0.

nsbmd -d r_fac.nsbmd
DEBUG: file size = 00003468 (13416)
DEBUG: file is not BMD0.

nsbmd -d r_final.nsbmd
DEBUG: file size = 00004098 (16536)
DEBUG: file is not BMD0.

nsbmd -d r_finish.nsbmd
DEBUG: file size = 00004804 (18436)
DEBUG: file is not BMD0.

nsbmd -d r_graveyard.nsbmd
DEBUG: file size = 00013878 (79992)
DEBUG: file is not BMD0.

nsbmd -d r_hally1.nsbmd
DEBUG: file size = 00000fd4 (4052)
DEBUG: file is not BMD0.

nsbmd -d r_hally2.nsbmd
DEBUG: file size = 0000103c (4156)
DEBUG: file is not BMD0.

nsbmd -d r_hally3.nsbmd
DEBUG: file size = 00000a48 (2632)
DEBUG: file is not BMD0.

nsbmd -d r_lab.nsbmd
DEBUG: file size = 0000be74 (48756)
DEBUG: file is not BMD0.

nsbmd -d r_main.nsbmd
DEBUG: file size = 0000fe98 (65176)
DEBUG: file is not BMD0.

nsbmd -d r_middleb.nsbmd
DEBUG: file size = 00005f34 (24372)
DEBUG: file is not BMD0.

nsbmd -d r_mine.nsbmd
DEBUG: file size = 0000b0d8 (45272)
DEBUG: file is not BMD0.

nsbmd -d r_path1.nsbmd
DEBUG: file size = 0000629c (25244)
DEBUG: file is not BMD0.

nsbmd -d r_path2.nsbmd
DEBUG: file size = 00005250 (21072)
DEBUG: file is not BMD0.

nsbmd -d r_preconv.nsbmd
DEBUG: file size = 000036e0 (14048)
DEBUG: file is not BMD0.

nsbmd -d r_room1.nsbmd
DEBUG: file size = 0000563c (22076)
DEBUG: file is not BMD0.

nsbmd -d r_room2.nsbmd
DEBUG: file size = 00002d00 (11520)
DEBUG: file is not BMD0.

nsbmd -d r_room3.nsbmd
DEBUG: file size = 00004050 (16464)
DEBUG: file is not BMD0.

nsbmd -d r_room4.nsbmd
DEBUG: file size = 00002560 (9568)
DEBUG: file is not BMD0.

nsbmd -d r_room5.nsbmd
DEBUG: file size = 00000774 (1908)
DEBUG: file is not BMD0.

nsbmd -d r_room6.nsbmd
DEBUG: file size = 00001b30 (6960)
DEBUG: file is not BMD0.

nsbmd -d r_rooma.nsbmd
DEBUG: file size = 00001778 (6008)
DEBUG: file is not BMD0.

nsbmd -d r_roomb.nsbmd
DEBUG: file size = 00003ce4 (15588)
DEBUG: file is not BMD0.

nsbmd -d r_roomc.nsbmd
DEBUG: file size = 00001568 (5480)
DEBUG: file is not BMD0.

nsbmd -d r_roomr.nsbmd
DEBUG: file size = 00003b94 (15252)
DEBUG: file is not BMD0.

nsbmd -d r_shootout.nsbmd
DEBUG: file size = 000023bc (9148)
DEBUG: file is not BMD0.

nsbmd -d r_smalla.nsbmd
DEBUG: file size = 000013b8 (5048)
DEBUG: file is not BMD0.

nsbmd -d r_smallb.nsbmd
DEBUG: file size = 000020d4 (8404)
DEBUG: file is not BMD0.

nsbmd -d r_stair.nsbmd
DEBUG: file size = 00000cb8 (3256)
DEBUG: file is not BMD0.

nsbmd -d r_start.nsbmd
DEBUG: file size = 0000515c (20828)
DEBUG: file is not BMD0.

nsbmd -d r_survive.nsbmd
DEBUG: file size = 0000b968 (47464)
DEBUG: file is not BMD0.

nsbmd -d r_tanks.nsbmd
DEBUG: file size = 0000d170 (53616)
DEBUG: file is not BMD0.

nsbmd -d r_tower.nsbmd
DEBUG: file size = 00004828 (18472)
DEBUG: file is not BMD0.

nsbmd -d r_uturn.nsbmd
DEBUG: file size = 000012ec (4844)
DEBUG: file is not BMD0.

nsbmd -d r_village.nsbmd
DEBUG: file size = 00005ff0 (24560)
DEBUG: file is not BMD0.

nsbmd -d r_vista.nsbmd
DEBUG: file size = 000092b4 (37556)
DEBUG: file is not BMD0.

nsbmd -d r_ware.nsbmd
DEBUG: file size = 0000924c (37452)
DEBUG: file is not BMD0.

nsbmd -d r_waste.nsbmd
DEBUG: file size = 0000b244 (45636)
DEBUG: file is not BMD0.

nsbmd -d r_yard.nsbmd
DEBUG: file size = 0001158c (71052)
DEBUG: file is not BMD0.
(I made a new set of files for this without the numbers at the start)
More normal output from another file in the game ( 01C3CAA4cuba_gstrckd.nsbmd if it matters, the result is rather deformed in this though but it also is in mkds course modifier so maybe it is blown up or something)
Code:
DEBUG: file size = 00002c58 (11352)
=================================
reading 'MDL0'...
No. of Model = 01
DEBUG: texnum = 3
tex (matid=0): 'RusTruck01'
tex (matid=1): 'tank01'
tex (matid=2): 'truckTire'
DEBUG: palnum = 3
pal (matid=0): 'RusTruck01_pl'
pal (matid=1): 'tank01_pl'
pal (matid=2): 'truckTire_pl'
DEBUG: matid = 0, texname: RusTruck01, palname: RusTruck01_pl
DEBUG: matid = 1, texname: tank01, palname: tank01_pl
DEBUG: matid = 2, texname: truckTire, palname: truckTire_pl
DEBUG: polynum = 3
DEBUG: codeoffset = 000000b4
=================================
reading 'TEX0'...
DEBUG: blockoffset = 000011e0, blocksize = 00001a78
texnum = 3, palnum = 3
tex  0 'RusTruck01      ': offset = 000012d8 size = 00000800 [W,H] = [128,64]
tex  1 'tank01          ': offset = 00001ad8 size = 00000400 [W,H] = [64,64]
tex  2 'truckTire       ': offset = 00001ed8 size = 00000040 [W,H] = [16,16]
pal 'RusTruck01_pl' size = 1184
pal 'tank01_pl' size = 592
DEBUG: 4x4-texel spdataoffset = 00001f18, spdatasize = 00000400
DEBUG: 4x4-texel spdataoffset = 00002318, spdatasize = 00000200
DEBUG: 4x4-texel spdataoffset = 00002518, spdatasize = 00000020
DEBUG: converting pal 'RusTruck01_pl', palentry = 592
DEBUG: converting pal 'tank01_pl', palentry = 296
DEBUG: converting pal 'truckTire_pl', palentry = 24
tex 'RusTruck01' matched.
pal 'RusTruck01_pl' matched.
tex 'tank01' matched.
pal 'tank01_pl' matched.
tex 'truckTire' matched.
pal 'truckTire_pl' matched.
obj 00 [parent 00] ( 0.000000, 0.000000, 0.000000) 'Cuba_GsTrckD'
Enteing OpenGL...
===================================================================
DEBUG: making texture for model 'cuba_gstrckd'...
convert matid = 0
        tex 'RusTruck01': 4x4-Texel [128,64] texsize = 00000800
        pal 'RusTruck01_pl': pixelnum = 8192, repeat = 03
convert matid = 1
        tex 'tank01': 4x4-Texel [64,64] texsize = 00000400
        pal 'tank01_pl': pixelnum = 4096, repeat = 03
convert matid = 2
        tex 'truckTire': 4x4-Texel [32,32] texsize = 00000040
        pal 'truckTire_pl': pixelnum = 256, repeat = 0f
poly 0 'Cuba_GsTrckD_13': matid = 0, texname = 'RusTruck01', palname = 'RusTruck01_pl'
poly 1 'Cuba_GsTrckD_14': matid = 1, texname = 'tank01', palname = 'tank01_pl'
poly 2 'Cuba_GsTrckD_15': matid = 2, texname = 'truckTire', palname = 'truckTire_pl'
===================================================================
 - Hold left mouse button to rotate
 - Hold right mouse button to zoom
 - T toggles texturing
 - C toggles vertex colours
 - W toggles wireframe
 - B toggles backface culling
 - F toggles texture filtering
 - P toggles polygon mode
I opened it in a hex editor, said bmd0 at the start, compared to a working file and it lacks the mdl0 part of it (nsbmd files can be both combos of models and textures or just plain models using material colours, never seen one without a model before) however it is nearing 1am so not going to be able to do much this evening. That it starts with bmd0 and has a nice little file size as well would seem to rule out most normal types of compression as well. I doubt it would be something generated at runtime (did see that for an audio file a while back) when everything else is plaintext but it is a late stage game so chances higher than some other things.
It is at this point we start contemplating replacing files and seeing what happens -- as it is location and size then should be easy enough to alter the fileinfo.bin to have something look at another file, though might have to figure out what the last 4 bytes are (or at least which ones correspond to the file so as to be able to copy-paste the right ones to overwrite with).
 
  • Like
Reactions: XeoSnow

XeoSnow

Member
OP
Newcomer
Joined
May 20, 2023
Messages
6
Trophies
0
Age
22
XP
27
Country
United States
So do you think it really is a model then or something else?
I've been trying to get the facility map models, and there's one called something like fac_part1 and fac_part3, but one of the rooms are missing
I'm hoping maybe that's the missing piece
Also I have been using Apicula for all the model stuff, seems to work for most but sometimes has messed up UVs, not too bad though.
 
Last edited by XeoSnow,

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    K3Nv2 @ K3Nv2: Probably because the game cover looks like it's meant for little kids