Jump to content

psy_commando

Innovator
  • Posts

    425
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by psy_commando

  1. What are you using for encoding the PNG ? EDIT: Just to be really sure I made another png from scratch, and imported it, but it seems to load fine
  2. I wrote the format in the readme. Its 4 bpp or 8 bpp indexed, 16 colors. I had no issues in gimp creating one of those, but I don't know what you're using. The grin image you attached seems to be in the right format.. And, I have no clue how you even got a regular PNG in there as PNG++ is set to only accept either 4bpp or 8bpp indexed images The underscore is irrelevant, anything after the number in the name is ignored. I just put a name there to make it convenient. You could name it "2_POTATO.png" and it would still work like it should! Are you using version 0.21 ? And does it do this with all pokemon after re-packing ? Maybe I actually broke something.. EDIT: I wasn't able to reproduce the issue on my end, everything gets put back in just fine.. Can you tell me what steps you went through ? And did you try it manually, not through skyeditor ? (it could have to do with the way the program invokes it maybe ?) You're not running this on a big endian machine ? (I'd really doubt it)
  3. Alright. That's another problem out of the way ! Hopefully, I'll be able to work on sprites pretty soon.. On my end I've been stuck trying to figure out my way out of inheritance and templates, and throwing CRTP into it.. X_X
  4. General Information This page contains data on the Pokémon Mystery Dungeon: Explorers of Sky/Time/Darkness games. Explorers of Sky Data Specific to Explorers of Sky Here's a list of all known functions and data offsets within the game's binaries: Functions and Data Offset NDS9/ARM9 Overlays: A list of all the overlays, and what they're used for. Overlay #00: RAM Load address: 0x022BCA80 Length in RAM: 395,680 bytes Description: Possibly contains data and code related to wifi multiplayer, in addition to the root menu. It mentions several files from the BACK folder that are known backgrounds for the root menu. Overlay #01: RAM Load address: 0x02329520 Length in RAM: 77,088 bytes Description: Seems related to wifi rescue. It mentions several files from the GROUND and BACK folders: 0x11ab8 : "BACK/expback.bgp" 0x11b00 : "BACK/s07p02a.bgp" 0x11b38 : "BACK/expback.bgp" 0x11b70 : "BACK/expback.bgp" 0x11b84 : "GROUND/s18p01a4.wan" 0x11b98 : "GROUND/s18p01a2.wan" 0x11bac : "GROUND/s18p01a3.wan" 0x11be4 : "GROUND/s18p01a1.wan" 0x11bf8 : "BACK/s18p01a.bgp" Overlay #02: RAM Load address: 0x02329520 Length in RAM: 176,032 bytes Description: Most likely code for the Nintendo wifi setup. Overlay #03: RAM Load address: 0x0233CA80 Length in RAM: 41,312 bytes Description: Unknown so far. Contains a single mention of "TABLEDAT/item00.dat" at 0xA078. Overlay #04: RAM Load address: 0x0233CA80 Length in RAM: 11,232 bytes Description: Unknown so far. Contains a single mention of "TABLEDAT/item00.dat" at 0x2BA4. Overlay #05: RAM Load address: 0x0233CA80 Length in RAM: 12,864 bytes Description: Unknown so far. Contain a single line of dialog formated text "[CS:X][string:0][CR][CLUM_SET:88][rank:0]" at 0x31EC Overlay #06: RAM Load address: 0x0233CA80 Length in RAM: 9,312 bytes Description: Probably linked to WiFi rescue. Found those strings: 0x2354 : "Mysterious WiFi: Illegal Identifier" 0x237C : "Mysterious WiFi: Difference Version" 0x23A4 : "Mysterious WiFi: Difference Language" 0x23CC : "Mysterious WiFi: Difference Check Sum: 0x%08x 0x%08x" 0x2404 : "Mysterious WiFi: Illegal Data" Overlay #07: RAM Load address: 0x0233CA80 Length in RAM: 20,736 bytes Description: Unknown so far. Overlay #08: RAM Load address: 0x0233CA80 Length in RAM: 8,704 bytes Description: Seems related to WiFi communications, from the string search results. Overlay #09: RAM Load address: 0x0233CA80 Length in RAM: 11,648 bytes Description: Unknown this far. Has a single mention of "BACK/s18p02a.bgp" at 0x2D00 Overlay #10: RAM Load address: 0x022BCA80 Length in RAM: 128,928 bytes Description: Unknown this far. Some interesting strings: 0x1F58C : "Lv. %d" 0x1F594 : "[value:0:3]/[value:1:3]" 0x1F5AC : "Lv. %d [CLUM_SET:44][value:0:3]/[value:1:3]" 0x1F5D8 : "%s[CLUM_SET:70]%s" 0x1F5EC : "/DUNGEON/sub2.bgp" 0x1F600 : "/DUNGEON/sub.bgp" 0x1F614 : "MainGame enter dungeon mode %d %d" 0x1F638 : "dungeon fade out mode %d" 0x1F654 : "dungeon getout result %d" 0x1F694 : "rom0:BALANCE/mappa_gs.bin" 0x1F6B0 : "dungeon map index %3d floor %3d -> dg index %3d floor max %3d -> bg index %3d table index %3d" 0x1F710 : "rom0:BALANCE/fixed.bin" Overlay #11: RAM Load address: 0x022DC240 Length in RAM: 298,048 bytes Description: Most likely the script engine for the game ! Overlay #12: RAM Load address: 0x0238A140 Length in RAM: 32 bytes Description: Empty, 32 bytes of zeros. Overlay #13: RAM Load address: 0x0238A140 Length in RAM: 11,904 bytes Description: Controls the personality test, including the available partners and playable Pokémon. Personality test questions are stored in the MESSAGE folder. Overlay #14: RAM Load address: 0x0238A140 Length in RAM: 15,072 bytes Description: Probably what runs the gatekeeper mini-game(String search returned mention of footprints). Overlay #15: RAM Load address: 0x0238A140 Length in RAM: 4,192 bytes Description: Possibly has to do with Duskull's bank. Got this "Menu_Bank_Mode_Cancel" at 0xFB4. Overlay #16: RAM Load address: 0x0238A140 Length in RAM: 11,552 bytes Description: Possibly linked to the Chimecho's assembly menu. Got this string "menuMonsterPictureBook_IsBusy busy" at 0x2CC4. Overlay #17: RAM Load address: 0x0238A140 Length in RAM: 7,392 bytes Description: Unknown this far. Overlay #18: RAM Load address: 0x0238A140 Length in RAM: 13,568 bytes Description: Unknown this far. Overlay #19: RAM Load address: 0x0238A140 Length in RAM: 16,960 bytes Description: Possibly linked to Spinda's cafe. Overlay #20: RAM Load address: 0x0238A140 Length in RAM: 12,288 bytes Description: Unknown this far. Overlay #21: RAM Load address: 0x0238A140 Length in RAM: 11,808 bytes Description: Most likely for the swap shop menu. Overlay #22: RAM Load address: 0x0238A140 Length in RAM: 19,264 bytes Description: Most likely for the Keckleon shop menu. Overlay #23: RAM Load address: 0x0238A140 Length in RAM: 14,208 bytes Description: Most likely for the Kangashkan storage menu. Overlay #24: RAM Load address: 0x0238A140 Length in RAM: 9,440 bytes Description: Unknown this far. Overlay #25: RAM Load address: 0x0238A140 Length in RAM: 5,312 bytes Description: Unknown this far. Overlay #26: RAM Load address: 0x0238A140 Length in RAM: 3,648 bytes Description: Unknown this far. Overlay #27: RAM Load address: 0x0238A140 Length in RAM: 11,616 bytes Description: Most likely another menu for item handling storage.. Overlay #28: RAM Load address: 0x0238A140 Length in RAM: 3,168 bytes Description: Unknown this far. Overlay #29: RAM Load address: 0x022DC240 Length in RAM: 488,992 bytes Description: Possibly having to do with running the in-dungeon game. Spotted strings for the in-dungeon menu. Overlay #30: RAM Load address: 0x02382820 Length in RAM: 14,496 bytes Description: Unknown this far. Overlay #31: RAM Load address: 0x02382820 Length in RAM: 31,360 bytes Description: Possibly the tactics menu. Overlay #32: RAM Load address: 0x02382820 Length in RAM: 32 bytes Description: Empty, 32 bytes of zeros. Overlay #33: RAM Load address: 0x02382820 Length in RAM: 32 bytes Description: Empty, 32 bytes of zeros. Overlay #34: RAM Load address: 0x022DC240 Length in RAM: 3,680 bytes Description: Possibly having to do with launching the game. There are mention in the strings of the ERSB logo and the "n_logo" logo. Overlay #35: RAM Load address: 0x022BCA80 Length in RAM: 32 bytes Description: Empty, 32 bytes of zeros. Explorers of Time/Darkness Data Specific to Explorers of Time/Darkness. Those two games have some significant differences with Explorers of Sky in the way data is stored. NDS9/ARM9 Overlays: A list of all the overlays, and what they're used for. File Structure A detailed list of the file structure of the ROM's nitro-fs filesystem. The three games share a pretty similar file structure. The differences between the three file structures will be indicated as such. Note: A lot of files in the ROM have an identifier that correspond to which level/event/cutscene/etc, they're used in. Something like: "s17p01" for example. First/Second level directories: /BACK/ Contains large compressed BGP images. Some of those appear on the main menu, some later during the game. In Explorers of Sky, the backgrounds from Explorers of Time and Darkness are present but unused. /BALANCE/ Contain data about entities/Pokemon, moves, items, and dungeons data. /DUNGEON/ Contains what seems to be some dungeon tiles. /DWC/ Data for the standard NDS Wifi setup screen. /EFFECT/ Contains some of the effect sprites. /FONT/ Contains fonts, UI element resources, palettes, and the portraits for the talking pokemon during the game. /GROUND/ Contains various sprites, map props, cutscene elements, some effects, and more. /MAP_BG/ Contains what seems to be map tiles. /MESSAGE/ Contains the text strings for most of the game! /MONSTER/ Contains the pokemon sprites for battle and the "overworld". /RESCUE/ (Explorers of Sky only) Possibly linked to SOS code generation, and the interactive online rescues. /SCRIPT/ Contains the scripts for the whole game. Each directories has an identifier related to the context it takes place in. /SOUND/BGM/ Contains the main instrument sounds bank, "bgm.swd", and all the music in the game. With each tracks being a pair of a SMD and SWD file. Those files are used by the game's DSE sound driver. /SOUND/ME/ Contains the jingles that plays when obtaining items and etc.. /SOUND/SE/ Possibly sound effects. /SOUND/SWD/ A bunch of sound effects stored as SWDs /SOUND/SYSTEM/ Possibly menu related sound effects. /SYNTH/ (Explorers of Sky only) Possibly data for the swap cauldron. /SYSTEM/ Contains the demo roms for DS Download play, along with the icons and other resources related to that. /TABLEDAT/ (Explorers of Sky only) Possibly recycle shop data. /TOP/ Contains BGP files for the backgrounds used in Pokémon Mystery Dungeon: Blue Rescue Team. It can be deleted with no immediately apparent side effects, as the backgrounds are unused. File/Data Formats A list of all the file/data formats used in the game. Graphics Formats BGP WAN/WAT WBA W16 WTE and WTU CHR PAL BMA BPC BPL BPA SMD(image) SMA Audio Formats (The files the DSE sound driver uses) SWD SMD(Music Sequence) SED Data Formats BIN DAT MD TLK STR Script Engine Formats SSB SSA SSS SSE LSD Container Formats BIN(pack files) KAO SIR0 Compressed Container Formats AT4PX AT4PN PKDPX Font Data DAT (from in the /FONT/ directory) DIC Misc SRL Additionally, several files have a file extension that doesn't match their content. For example, "/SYSTEM/hsd_jap.dat" and "/SYSTEM/hsd_eng.dat" are AT4PX files, but their extension is ".dat". Files with Unique Formats A list of files that have their own unique format. /BALANCE/monster.md /BALANCE/monster.mnd (Explorers of Time/Darkness only) /BALANCE/item_p.bin /BALANCE/item_s_p.bin (Explorers of Sky only) /BALANCE/m_level.bin /BALANCE/waza_p.bin/waza_p2.bin /BALANCE/mappa_s.bin/mappa_t.bin/mappa_y.bin /BALANCE/mappa_gs.bin/mappa_gt.bin/mappa_gy.bin (Explorers of Sky only) /BALANCE/gwdparam.bin (Explorers of Sky only) /BALANCE/fixed.bin /BALANCE/st_i2n_j.bin /BALANCE/st_m2n_j.bin /BALANCE/st_n2m_j.bin /DUNGEON/dungeon.bin /FONT/kaomado.kao /MAP_BG/bg_list.dat /MESSAGE/tbl_talk.tlk /MESSAGE/text_*.str /RESCUE/rescue.bin (Explorers of Sky only) /SYNTH/synth.bin (Explorers of Sky only) /TABLEDAT/item00.dat to item15.dat (Explorers of Sky only) Internal Details Articles on the various inner working of specific aspects of the game. DSE sound driver: Explanation of the sound driver used in all 3 PMD2 games. Level System: Explanation on how the game picks a level to load and all the various sub-systems involved. External Resources Wonder Mail S Tools, research notes. The "items_p_Sky.xlsx" excel sheet contains a comprehensive list of item names/types, pokemon names/types, moves names, etc, along with their associated index values in-game : [1] Pokemon Explorers of Sky research thread on GameFaqs: [2] (lots of great info spread around all those pages)
  5. I guess I should go to bed, I mixed everything up again : The output path is really the path where everything gets extracted.. Not the parent of the folder where it gets extracted.. And, I wasn't able to reproduce the crash. It would only crash if the output directory didn't exist. I tried giving two paths in two completely separate directories and got no issues. EDIT: I think I've found it. I put a trailing backslash in my output path while it was surrounded between double quotes, and it failed. When there's a trailing backslash at the end of any paths you pass the program, it gets parsed as " instead of \. Because \" is the escape sequence for the " character. I can't do much about it, because that's the argument I get from the main function's parameters.. Try not putting any trailing backslash. You can use slashes safely though, given they don't trigger escape sequences. EDIT2: Actually, I made a little hack, Idk if it might break something in the future, but lets try it anyways! I'm guessing others will probably do this mistake too in the future so, lets try to save some headaches to everyone. I made it so the program detects a path ending with a trailing double quote, and just fix the path by itself, after nagging the user of course : https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_kaoutil_0.21.zip
  6. Yeah drag and drop won't work with most comandline program if there is a white space in the path provided. Unless you add "" around the path, but by default it seems windows doesn't do that.. That's a big problem because white spaces are the delimiter for command line arguments. So there is no sane way to tell if its a path with a white space or if its 2 parameters Especially if one parameter is a relative path while the other is an absolute one.. Have you seen my last edit btw ? :
  7. Was there a white space in the path ? EDIT: Nevermind.. I found the screenshot.. That's strange.. Try running it on its own in a cmd window. And then try it with the pokenames.txt and facenames.txt file in the same folder as the exe, and without the -pn and -fn switch. This will probably help finding out which part of my argument parser is crashing.. It looks like its POCO throwing an exception, given all the exceptions it throws are "Unknown Exception" for some reasons.. EDIT2: Does the folder "kaomado_unpack" exists ? If it doesn't I think I know what's going on. The output path is the parent directory where the file will be extracted to. The name of the resulting folder is the filename of the kaomado file. I could change that behavior though. I just found it more practical this far.
  8. I know you can't just add more after the previous entries. I just meant that we can probably mess with the code to get it to load something else instead of that list. And, it would be odd to refer to data in an overlay from the outside.. At least, from what I understand.. I'll try running the no$gba nds debugger on it, and see what can be done with that ! Sounds good. Let me know if there are any issue with the tool ! I'd like to improve it as much as possible ! And I saw that issue plenty of times. I played through the entire game with a pokemon that wasn't meant to be a hero character ! I even recorded most of the cutscenes, so it might even help finding any things we'll need to watch out for ! Lets not forget Zhorken's script! Without that thing Idk if I'd have a decompressor / recompressor by now, and none of the face editing would be possible ! But yeah, we're getting close! Just wondering though, do you think I should focus on the character sprites, the other loose image formats floting around for ui elements and etc, or the tilesets for the levels ? Also, I'm going to spend some time on adding stuff to the wiki!
  9. I mainly meant replacing the pointer in the overlay that points to the array containing those entries, with the address of another array we'd inject into the NDS memory. Since overlays are basically a way to load "static" code and data structure into the WRAM, its possible to change values in there without caring about dynamic allocation issues and whatnot ! At least, from the ARM doc, that's what I understood of the overlays. EDIT: I missed part of the message.. But, can't you change the pokemon ID in the array ? I meant that, the lua script could change the pokemon code in that array while the game is running.
  10. Wow, awesome find ! I'll try taking a look later today too! I'm really curious about overlays. I've read about them, but I never really took the time to look at how they're actually made I wonder if there isn't a way to redirect the pointer to all that to a new memory location, outside the WRAM, and cram a bunch more pokes in a separate array?.. Also, desmume support lua scripting and provide direct access to the emulator's RAM through the script interface.. Maybe there's something to be done with this? Like a button to load lists of pokemon on demand at runtime ? And yeah, that animation glitch when the "lying down" anim should play is what I've come to call the "sleepwalking syndrome" XP Even though all pokes have a sleeping anim, it defaults to the running animation when the player character is sleeping.. Its probably because the sleeping anim for playable pokes is much more elaborate, and got like 5+ frames for waking up and all! And the the standard sleeping anim is just a loop of 2-3 frames ! I haven't figured yet how come it defaults to that specific animation though.. Also, I fixed a couple of minor issues with the ppmd_kaoutils utility, and fixed the output path not working, along with fixing the insanely long allocation phase on startup! I was allocating a little too much memory, and a little too often I think.. Still nothing very alarming.. I also made some optimization and inlined a lot of functions! It still takes a little less than 3 seconds to export or repack the whole thing! But that's libpng and png++ slowing down the whole thing, according to the profiler.. I guess its not to bad considering nobody will batch process those! https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_kaoutil_0.2.zip
  11. Alright. And that makes sense! Also, I got the fixed pxcomp version : https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_pxcomp_0.3.zip I strongly recommend everyone updates as the previous versions incorrectly wrote the wrong compressed size in the AT4PX and PKDPX header. I forgot to count the length of the header itself...
  12. I think that you might be able to change the starter pokemon modding the script for the quizz at the beginning ! We'll have to investigate the scripting more I guess. Nerketur has a lot of info on these in his notes! And we'll see. To be honest, the kaomado format was way simpler than the sprite's ! But now I'm going to investigate as many similar sprite formats as possible, comparing those should give some more hints on the whole thing. Also, I found something else that might be problematic. It seems that what the second ptr in the SIR0 header points at isn't random trash after all.. There's consistent padding bytes across nearly all files with a SIR0 header I've found this far ! I can't figure out what its supposed to contain exactly.. The size vary so much over each files. And some files have exactly the same values in there! This might be a problem when rebuilding any formats contained in a SIR0.. Besides that, I found a new compressed image format ! Its called "AT4PN". It has a very short header, only the magic word and then a size that could be the compressed size.. After that is the compressed data.. It doesn't seem to be compressed the same way.. And we got no control flags, which could mean they have static control flags maybe ? Figuring those out might be annoying.. If its even LZ compression again! And I also figured out a good chunk of the WTE file format. The WTE files, in the FONT folder, seems to be containing the frame sprite for the text and UI. Here are my current WIP notes : https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/FileFormats/SIR0_WTE.txt
  13. OMG, it works now ! It was such a clusterf**k to deal with, but damn it was worth it Here's a build of it : https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_kaoutil_0.1.zip It output 4bpp pngs, and it uses 4bpp pngs to rebuild a kaomado. There is no readme, because I'm a little too excited I found so many problem with the way the whole thing was written.. And I may have figured out a really sneaky bug with the px compressor. I'm going to run some more tests and I'll see if I can release an update to it ! Here's a screenshot showing the new portrait for the "Grin" emotion I added to poochyena! I used a cheat to make it my hero character. Its a quick crappy edit, but it prove that we can add new faces to pokemon that are lacking some of them and they'll be automatically used during the game! : Here's a little video showing the other edits I made: https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/example/test_kaomado_06_9214.avi I replaced all of bulbasaur's face portraits with images with the name of the associated emotion written on it ! And here's an xdelta patch for the rom, to get my edits, for those who want to see for themselves! I also joined a dsv savegame for desmume, right after forcing my party to faint to force the game to reload the sprites and character data! (You won't need a cheat to get poochyena on your team with this savegame!) : EDIT: Some more details: - The exact format for the portrait as PNG is 40 x 40, 4 bits per pixel, 16 colors. - The tool only outputs entries in the table of content that aren't null, and contain portraits. - The name for the folders, and for the "emotions" are stored in the "pokenames.txt" and "facenames.txt" file that come with the utility. You can modify them to your liking. The line number in the text file correspond to the number each folders or images is given ! The line number in the text files begins at 0, not 1, so keep that in mind ! - To add new entries, you just have to put it in the corresponding pokemon folder and give it a number as its filename. No need to give it a specific name, but if you want to, it won't mind as long as the name begins with a number between 0 and 39 (in base 10) ! For example, if I wanted to add a new face portrait for poochyena, say the "grin" emotion, I'd add a png in its folder, and name it "0002.png" or even "2.png". 2 is the slot in the portrait list for all pokemon for the "grin" emotion. - You can even add new pokemon, by simply making a new directory in the root of the extracted kaomado's directory and give it a unique number as name ! The kaomado.kao file has by default 1,154 slots for pokemon, and only 652 are being used, a bunch of those are dummy placeholders too ! And here are some examples of the output: test_bulbapooch.zip
  14. Alright, so I managed to rebuild a kaomado file correctly ! But now, it seems I'm doing something very wrong to the images ! https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/test_kaomado_12_1159.avi I've seen something like this happen before, but I can't remember why.. Could it be endianess ?
  15. Just leaving this here, but I won't be posting updates for probably the rest of the week, because I got Alpha Sapphire :3 (And now I wish I had a 3ds with the old firmware to decrypt the game files, and see for myself instead of waiting for the others to datamine the game, and tell us if Ohmori basically lied about hiding mega evos for the players to find.. )
  16. Yep, we're certainly going somewhere ! I'm almost done with Kaomado file support, so soon we'll be able to add new faces to pokemon that were missing some if we want to ! And sprites are coming along too. We still have to figure out those things though: - Where are the dungeon templates/map and how do they work. - Where are the non-randomized maps, and how do they work. - Figuring out how tilesets works, and the way collision/material(water,lava,etc) data is stored. - Figuring out if we modify the script if we can store script variables, extra data, and etc, in a savegame. - Figuring out how to add script/level/etc.. - Figuring out how to add pokemon to, and modify the quiz at the beginning. - Figuring out the sound format. And etc..
  17. Sorry for the delay ! I got the improved unpx working, but I wanted to be sure it wouldn't crash, so I made a lot of testing, and tried to bulletproof things a little more ! Here's the new version: https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_unpx_0.3.zip It support adding several files to the commandline by using the "+" prefix for additional inputs. You can specify a single file's output filename as second parameter. And when dealing with several input files, you can use the option "-fext" followed with the desired file extension to force a file extension for all outputed files ! The output path can be either a folder or a file in every cases. But when several files are to be handled, the output filename and extension will be ignored, and the input files will be outputed in the output path's parent directory. I hope you'll like it ! Let me know if there are any features you'd like ! I also tried to eradicate all opportunities for heap corruption I could find. But I was wondering if you could tell me a little more what were the parameters involved when it happened ? Heap corruption issues are really scary, so I'd like to get rid of those if possible Also, I figured I was doing something wrong with png++ when loading indexed images. Its undocumented, but if you want to load an indexed png the only way to do so is to do something like this : png::image<png::index_pixel> input; input.read( filepath, png::require_color_space<png::index_pixel>() ); I also modified the way I read data to structs, and upgraded to iterators. No more dirty reinterpret_casts ! I think I've even noticed a speed up since then ^^; Next I'm going to standardize and clean up my codebase because it needs it very much! And then I'll try to implement TruePikachu's findings, and attempt to make sprite files from scratch !
  18. I really thought I had fixed that.. Anyways, I'll make it so you can name the output file as you want! It actually makes a lot of sense too.. Also, I'm planning on adding a batch compression/decompression option to the command line. Something like adding a "+" in front of additional files to extract/compress, like some program already do. But now I'm wondering how I'd implement that with the possibility of specifying the output filename.. And, that's funny that it would give it a .wan extension, because it only gives that to files that got a SIR0 header and a structure vaguely similar to a sprite file.. I'll have to take a look at the BGP file structure I guess... And about the BSOD, I checked the video card recently and it had no visible problems. And they're not instant BSOD, they happen after maybe 10-20 TDR in a row happens. If I can close the browser quickly enough I'll avoid it. And I have no issues running games or anything else really. The issue began when windows updated my drivers when I had explicitly specified to not updated my drivers.. I got a geforce 550 Ti and Nvidia has had very poor support for these cards.. So it could be the drivers, but I tried several times to rollback and even clean completely the drivers, using a driver cleaner, and installing the last version that worked. But nothing helped.. Since I switched from XP to Windows 7 I've had a lot of BSOD that came by waves. And I even built a brand new computer thinking there was something wrong with it, but nothing helped.. Plus, nowadays everything related to networking is laggy and spotty on this computer.. I even installed another wired network adapter not mounted on the motherboard and nothing changed. I even tried booting linux and I still get the same network issues.. I'm seriously stumped at this point..
  19. Hmm, that might just be part of the problem I was trying to fix earlier.. Could you pm me the compressed file, and the decompressed file causing the issue ? Or at least, give me the exact filenames that are involved in this ? I think I might have an idea of what might be the issue. I think I'll also enable logging via a command line option for non-debug builds, that might help figuring future issues. This usually happens when a sequence to copy wasn't properly encoded.. Or it could be the header not being written correctly for some reasons. Sorry for not getting back to you earlier, but I'm getting random BSODs when I run any web browsers now, so as a result I check my messages less often
  20. Nice! Its good to see that thing getting some use ! I haven't touched BGP files yet to be honest. I remember you made some discoveries about those, but I wasn't sure of the specifics. Maybe you'd be better off by exporting all palettes as a huge standalone palette, and just output the image as RGB ? And then you'd have to generate a palette for each tiles when importing the image though. Or maybe you could just take a palette as input ? Or maybe you could also just export each tiles as a separate image ? I've been having my share of problems with image libraries though ! There doesn't seem to be a decent PNG library that is actually C++, works 100%, and is not some jumbled mess of structs, redundant types, and function calls.. And has some actual documentation.. PNG++ looked promising, but for some reasons, reading indexed png is not supported.. Or at least it seems so, because there is literally no documentation, and the whole thing crashes when de-allocating, even though everything went smoothly.. And messing directly with libpng is crazy complicated ! It looks like its meant to make you forget to de-allocate something and get memory leaks.. I'm considering just exporting everything to BMP using EasyBMP given its really as easy as the name implies But idk if I should go with a legacy format like that..
  21. It took really long, but I finally got something working to compress files into the PKDPX and AT4PX format ! I ran binary comparisons on the result of decompressing files compressed with the tool and I got exact matches everytime.. But its probably still buggy, I haven't had as much time as I would have wanted to test it.. **removed link because the utility was broken** Oh, and I don't know yet if the game will complain about those ! I haven't had the time to test that.. But I really doubt there will be any issues, given the resulting files are relatively similar.. EDIT: I made a major derp, and there was an odd case where the whole thing would crash when reaching the end of the file.. I fixed it for now, but I'll have to look into it a little more. Here's the fixed utility ( Also, no more dll ! That was another mistake on my part ^^; ): https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_pxcomp_0.2.zip
  22. Woah, slow down ! That's a lot of information all at once ! Today I actually decided to take the entire day to write the compressor. I wrote all the code and just need to test the whole thing ! But I'm calling it a day, since I'm at a point where I might just begin doing silly things again.. And its great that you've managed to make some sense of the stats ! We already knew m_level.bin and monster.md contained pokemon stats related data, but never had time to deal with the format yet ! And that's a good lead you got with the wondermail codes ! We're so close to knowing nearly everything about this game now! Its kinda exciting
  23. Why not use the util I wrote for that ? Just run it using wine. https://dl.dropboxusercontent.com/u/13343993/my_pmd_utilities/ppmd_unpx_0.2.zip Just give it the file to decompress as parameter. Or if you really want to write an util, just grab all my source code and do what you want with it. In the case you really want to do it yourself, I tried to explain the decompression process in words in this : https://dl.dropboxusercontent.com/u/13343993/my_pmd_research_files/FileFormats/PX_Compression.txt EDIT: Just fixed a lot of typos and rewrote a couple of sentences in that txt file. I shouldn't write those things really late at night I guess ^^; EDIT2: Here's a direct link to the important part for decompressing px data : https://ppmd2utilslib.codeplex.com/SourceControl/latest#PPMD_UtilsLib/px_compression.cpp Its an adapted version of the algorithm in Zhorken's python script. Its not really optimized, because I still don't understand enough about it to really go at it.. (don't mind the code too much.. some old comments weren't updated, and I had an obsession with functors when I wrote that)
  24. Its not beta. Its just that the way sprites are stored is really weird.. A lot of the animations for each pokes are in m_ground.bin, but a lot more are in m_attack.bin. The sleeping sprites for most pokes are in m_attack.bin. You have to unpack those and decompress the content into a regular sir0+sprite ".wan" file. monster.bin also contains frames.. And all pokemons are at the same indexes in all 3 files.
  25. Its not just vaporeon, all the eons and several other pokes, along with a very large proportion of things in /GROUND/ also have these little differences.
×
×
  • Create New...