Pepsee Posted Monday at 12:11 PM Share Posted Monday at 12:11 PM (edited) Hello, all! I am writing regarding a file format I've been looking to rip for a while and have been unable to. (Specifically - These .geo files) An early dev build of one of my favorite games of all time, Oddworld Stranger's Wrath surfaced sometime last year and it has the source files for most of the content. This game was developed entirely within Maya. I have a VERY old Blender 2.49b script that uses Python v26 in order to import bundles and assets from the 2010 HD re-release of the game, however it has issues importing certain models even from that version, let alone models from the Xbox version or this dev version... I hope it helps so I'll upload the script I had for years here from M. Szkaradek123. Here is the script alongside Blender 2.49 as a standalone install (just drag and drop). I have uploaded the geo files here. Here is one region's bundle files in case this might be more helpful. Should also contain animations, skeletal data and textures within each .smb file. Thank you so much for your time, I really hope we are able to finally preview these assets! Edited Monday at 01:30 PM by Pepsee Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 01:18 PM Engineer Share Posted Monday at 01:18 PM Hello Pepsee, before you send someone into a maybe frustrating job I'd really recommend to show some results with the blender script from the 2010 release of OSW. btw, I don't remember the script(s) of AlphaTwentyThree. (The Blender script was from M. Szkaradek123, iirc.) 1 Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 01:29 PM Author Share Posted Monday at 01:29 PM (edited) 13 minutes ago, shak-otay said: Hello Pepsee, before you send someone into a maybe frustrating job I'd really recommend to show some results with the blender script from the 2010 release of OSW. btw, I don't remember the script(s) of AlphaTwentyThree. (The Blender script was from M. Szkaradek123, iirc.) Hey, Shako!! Happy to see you again! Apologies... I could not remember the exact details, I'll edit my original post, thank you! Also as you suggested here are some results of the script: Edited Monday at 01:32 PM by Pepsee 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 01:37 PM Engineer Share Posted Monday at 01:37 PM Thanks. So before someone starts from scratch he should have a look at the python scripts, imho (though they were always a little bit hard to understand for me). (What were the results with the script from AlphaTwentyThree?) 1 Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 01:57 PM Author Share Posted Monday at 01:57 PM 13 minutes ago, shak-otay said: Thanks. So before someone starts from scratch he should have a look at the python scripts, imho (though they were always a little bit hard to understand for me). (What were the results with the script from AlphaTwentyThree?) Sadly, no luck, no error message either. It seems the format is different from that of the files extracted from the bundles on the OG Xbox/PC - here is what it should look like (geo.meshinfo) I tried following the same process as before since the source .geo files were not working, so I tried opening a bundle, however - when I try opening for instance npc_20.smb from Game\data\bundles\Region_05\level_05\ I get this error: npc_20.rar Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 02:34 PM Engineer Share Posted Monday at 02:34 PM Some digging into py source required with inserting some more print commands for debugging. 1 Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 02:36 PM Author Share Posted Monday at 02:36 PM Let me know what I can do to help out 🫡😁 2 minutes ago, shak-otay said: Some digging into py source required with inserting some more print commands for debugging. Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 03:18 PM Engineer Share Posted Monday at 03:18 PM Was there any smb file that had been extracted successfully? Seems lm_level_05_tgl.smb contains a big texture (but not extracted by the py script): Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 03:24 PM Author Share Posted Monday at 03:24 PM 3 minutes ago, shak-otay said: Was there any smb file that had been extracted successfully? Seems lm_level_05_tgl.smb contains a big texture (but not extracted by the py script): I tried multiple, ranging from NPC smb's to level SMB's, no luck in any of them.. Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 03:36 PM Author Share Posted Monday at 03:36 PM 10 minutes ago, Pepsee said: I tried multiple, ranging from NPC smb's to level SMB's, no luck in any of them.. I can try uploading samples from the OG Xbox version. I don't know if they will help much.. At least the SMB's are extractable with the script. The models don't import however sadly... Only a select few.. I've been trying to get the wolvark semi-auto to import for ages. Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 04:06 PM Engineer Share Posted Monday at 04:06 PM 28 minutes ago, Pepsee said: At least the SMB's are extractable with the script. Such an SMB could be helpful (smaller than 6 MB if possible). Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 04:09 PM Author Share Posted Monday at 04:09 PM 2 minutes ago, shak-otay said: Such an SMB could be helpful (smaller than 6 MB if possible). Here you go: npc_17.rar 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 04:44 PM Engineer Share Posted Monday at 04:44 PM (edited) Fine. ..\Blender249[Oddworld Stranger's Wrath][PC][SMD][2016 -06-04]\npc_17.smb ====================================================================== fileCnt 5 \data\textures\character\icons\Wolvark_Semi_Auto.tga \data\textures\attachments\outlaw_SemiAutoNormal.bmp \data\textures\attachments\outlaw_SemiAuto.tga \data\geometry\characters\wolvarkSemiAuto\wolvarkSemiAuto.geo wshtr_wolvark|wshtr_rt|wshtr_stb|wshtr_spn1|wshtr_spn2|wshtr_clvL|wshtr_bcpL|wsh tr_clvR|wshtr_bcpR|wshtr_lgL|wshtr_shnL|wshtr_nklL|wshtr_bllL|wshtr_bllL_nd|wsht r_lgR|wshtr_shnR|wshtr_nklR|wshtr_bllR|wshtr_bllR_nd|wshtr_nk|wshtr_hd|wshtr_fac e|wshtr_earL|wshtr_earR|wshtr_frmL|wshtr_frmR|wshtr_wrstL|wshtr_grbL|wshtr_wrstR |wshtr_grbR|wshtr_grndL|wshtr_grndR|wshtr_jw|wshtr_mBrwL|wshtr_mBrwR|wshtr_mFng1 L|wshtr_mFngL_nd|wshtr_tl|wshtr_tl_nd|wshtr_uprLipM|wshtr_weapnode_ranged_wpn1|w shtr_lwrLipM|wshtr_mFng1R|wshtr_weapnode_ranged_mzzl1| \data\textures\character\wolvarkSemiAuto\wolvarkSemiAuto_Colormap.tga \data\textures\character\wolvarkSemiAuto\wolvarkSemiAuto_Normal.bmp \data\geometry\attachments\Wlvrk_Weapons\Wlvrk_SemiAutoRifle.geo B C B C B C A E B C B C A AA AA AA AA BB AA AA CC Seems smb files with node type 6 don't work: (if node[0][1] in [6]:) Only [0] (A), [1] (B,C) and [20] (E) are feasible. Edited Monday at 04:45 PM by shak-otay Link to comment Share on other sites More sharing options...
Pepsee Posted Monday at 04:48 PM Author Share Posted Monday at 04:48 PM 3 minutes ago, shak-otay said: Fine. ..\Blender249[Oddworld Stranger's Wrath][PC][SMD][2016 -06-04]\npc_17.smb ====================================================================== fileCnt 5 \data\textures\character\icons\Wolvark_Semi_Auto.tga \data\textures\attachments\outlaw_SemiAutoNormal.bmp \data\textures\attachments\outlaw_SemiAuto.tga \data\geometry\characters\wolvarkSemiAuto\wolvarkSemiAuto.geo wshtr_wolvark|wshtr_rt|wshtr_stb|wshtr_spn1|wshtr_spn2|wshtr_clvL|wshtr_bcpL|wsh tr_clvR|wshtr_bcpR|wshtr_lgL|wshtr_shnL|wshtr_nklL|wshtr_bllL|wshtr_bllL_nd|wsht r_lgR|wshtr_shnR|wshtr_nklR|wshtr_bllR|wshtr_bllR_nd|wshtr_nk|wshtr_hd|wshtr_fac e|wshtr_earL|wshtr_earR|wshtr_frmL|wshtr_frmR|wshtr_wrstL|wshtr_grbL|wshtr_wrstR |wshtr_grbR|wshtr_grndL|wshtr_grndR|wshtr_jw|wshtr_mBrwL|wshtr_mBrwR|wshtr_mFng1 L|wshtr_mFngL_nd|wshtr_tl|wshtr_tl_nd|wshtr_uprLipM|wshtr_weapnode_ranged_wpn1|w shtr_lwrLipM|wshtr_mFng1R|wshtr_weapnode_ranged_mzzl1| \data\textures\character\wolvarkSemiAuto\wolvarkSemiAuto_Colormap.tga \data\textures\character\wolvarkSemiAuto\wolvarkSemiAuto_Normal.bmp \data\geometry\attachments\Wlvrk_Weapons\Wlvrk_SemiAutoRifle.geo B C B C B C A E B C B C A AA AA AA AA BB AA AA CC Seems smb files with node type 6 don't work: (if node[0][1] in [6]:) Only [0] (A), [1] (B,C) and [20] (E) are feasible. Is there any way compatibility with these ones can be added? 😟 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted Monday at 05:06 PM Engineer Share Posted Monday at 05:06 PM (edited) Simplest idea was to skip [6] but the result was an empty output folder. The start address of the second node of npc_20.smb is wrong - no idea, why. Added 61 to patch it, still no change in outcome. edit: surprise, I managed to extract lm_level_05_tgl.smb (Some meshes and pics but I'm lacking the correct params.) Edited Monday at 11:42 PM by shak-otay 1 Link to comment Share on other sites More sharing options...
Pepsee Posted 20 hours ago Author Share Posted 20 hours ago (edited) 14 hours ago, shak-otay said: Simplest idea was to skip [6] but the result was an empty output folder. The start address of the second node of npc_20.smb is wrong - no idea, why. Added 61 to patch it, still no change in outcome. edit: surprise, I managed to extract lm_level_05_tgl.smb (Some meshes and pics but I'm lacking the correct params.) Okay, I've actually gotten something to somewhat work.. So using the .geo files from here, if you rename the extension from .geo to .smb and run the script it actually exports something from it: Sadly however the mesh or skeleton do not import using the script and put out this error: I tried even renaming the output files to the appropriate extensions but still the same error: I attached the renamed .geo to .smb as well as the extracted files below! wolvarkLeader.rar Edited 20 hours ago by Pepsee Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted 15 hours ago Engineer Share Posted 15 hours ago (edited) You may compare to npc_10_05.skeleton, which launches an errror, too, but the skeleton is displayed. I tried to patch the script for wolvarkLeader_00.skeleton, but the structure is too different. (Only boneCount 46 is found correctly.) Rewrite of code required, imho. Would be easier to give the skel_builder from Durik a try or AmateurSkeletonHunter from Bigchillghost. edit: here the bone names as a start: wledr_wledr wledr_rt wledr_stb wledr_spn1 wledr_jGuncrank wledr_jGunbarrel wledr_rudderL wledr_rudderR wledr_jPropeller wledr_spn2 wledr_spn3 wledr_nck wledr_hd wledr_hd_nd wledr_face wledr_jw wledr_lwrLipM wledr_lwrLipM_nd wledr_mBrwL wledr_mBrwL_nd wledr_mBrwR wledr_mBrwR_nd wledr_earL wledr_earL_nd wledr_earR wledr_earR_nd wledr_uprLipM wledr_uprLipM_nd wledr_clvL wledr_bcpL wledr_frmL wledr_wrstL wledr_mFng1L wledr_mFngL_nd wledr_clvR wledr_bcpR wledr_frmR wledr_wrstR wledr_mFng1R wledr_mFngR_nd wledr_grbL wledr_grbR wledr_weapnode_ranged_wpn1 wledr_weapnode_ranged_mzzl1 wledr_grndL wledr_grndR Edited 15 hours ago by shak-otay 1 Link to comment Share on other sites More sharing options...
Pepsee Posted 15 hours ago Author Share Posted 15 hours ago 49 minutes ago, shak-otay said: You may compare to npc_10_05.skeleton, which launches an errror, too, but the skeleton is displayed. I tried to patch the script for wolvarkLeader_00.skeleton, but the structure is too different. (Only boneCount 46 is found correctly.) Rewrite of code required, imho. Would be easier to give the skel_builder from Durik a try or AmateurSkeletonHunter from Bigchillghost. This should offer some useful insight: https://talonbrave.info/2023/06/25/anoddworld.html It talks about the SMB's 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted 14 hours ago Engineer Share Posted 14 hours ago Nice reading. Could be a start for more coding but my general feeling is like so: Quote From the standpoint of reverse-engineering, the format is terrible to reverse because there doesn’t appear to be any mechanism for knowing up-front how large a given struct/class is going to be (meaning we can’t cleanly skip the ones we don’t want or don’t have reversed), Maybe time for you to dive into coding? (After 5 years...) I could give you some support from time to time (it won't become a project of mine as I have several open projects of my own). Btw, we were talking about this and that all the time and it would make sense, imho, to focus on 3 to 5 problematic files only, get that solved and transfer the solutions to similar files. Iirc I had expanded the mesh types to recognize 87, 108, 112 and 120. The latter is missing from the script I pmed you October 2019, here's what needs to be added: elif mesh.b[5]==120: for m in range(mesh.b[3]): mesh.vertUVList.append(p.short(2,'h',11)) p.B(4) mesh.vertPosList.append(p.short(3,'h',16)) 1 Link to comment Share on other sites More sharing options...
Pepsee Posted 14 hours ago Author Share Posted 14 hours ago (edited) 1 hour ago, shak-otay said: Nice reading. Could be a start for more coding but my general feeling is like so: Maybe time for you to dive into coding? (After 5 years...) I could give you some support from time to time (it won't become a project of mine as I have several open projects of my own). Btw, we were talking about this and that all the time and it would make sense, imho, to focus on 3 to 5 problematic files only, get that solved and transfer the solutions to similar files. Iirc I had expanded the mesh types to recognize 87, 108, 112 and 120. The latter is missing from the script I pmed you October 2019, here's what needs to be added: elif mesh.b[5]==120: for m in range(mesh.b[3]): mesh.vertUVList.append(p.short(2,'h',11)) p.B(4) mesh.vertPosList.append(p.short(3,'h',16)) If so then I think the Xbox files are a more tangible format to reverse engineer rather than the dev files... I have packed together multiple characters. (7 in total, 5 of which have issues importing with either the base script or your edited version) The two folders with working model imports are: Wolvark handler Shock Tank The rest have issues... In fact I'll make a list here for convenience so we can document which files are compatible and which have issues: Sample_Chars.rar Edited 13 hours ago by Pepsee 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted 13 hours ago Engineer Share Posted 13 hours ago You need to be more specifi; the npc_16_46 from wolvark_grenadier imports without issues. Link to comment Share on other sites More sharing options...
Pepsee Posted 13 hours ago Author Share Posted 13 hours ago (edited) 4 minutes ago, shak-otay said: You need to be more specifi; the npc_16_46 from wolvark_grenadier imports without issues. My apologies, I was referring to the meshes themselves, skeletons work fine for all. Edited 13 hours ago by Pepsee Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted 12 hours ago Engineer Share Posted 12 hours ago Could you add the "unknow[n] mesh type" number(s) to your table? For wolvarkGrenadier it's 96. Link to comment Share on other sites More sharing options...
Pepsee Posted 12 hours ago Author Share Posted 12 hours ago (edited) 56 minutes ago, shak-otay said: Could you add the "unknow[n] mesh type" number(s) to your table? For wolvarkGrenadier it's 96. I have returned with the unknown mesh type numbers. Here is a list of my findings: P.S: I noticed that attachments such as weapons or hats/helmets use Mesh Type 98, or in some rare cases 110. In the case of unsubscriptable files, this is the error message I get, (I am unable to get the unknown mesh type number because of this)😞 Traceback (most recent call last): File "starter.py", line 558, in Parser p.i(8) File "starter.py", line 190, in meshinfoParser if n==8: File "D:\Downloads\Tools\blender-2.49b-windows\python26.zip\ntpath.py", line 198, in basename return split(p)[1] File "D:\Downloads\Tools\blender-2.49b-windows\python26.zip\ntpath.py", line 170, in split d, p = splitdrive(p) File "D:\Downloads\Tools\blender-2.49b-windows\python26.zip\ntpath.py", line 125, in splitdrive if p[1:2] == ':': TypeError: 'NoneType' object is unsubscriptable Edited 12 hours ago by Pepsee 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted 11 hours ago Engineer Share Posted 11 hours ago Thanks for the effort. "None" has to be skipped to avoid this. (You still can't code, can you?) example: no = g.word(g.i(1)[0]) print ">>>",no if no != None: x = os.path.basename(no) split = x.split('.')[0] texName= g.dirname+os.sep+split+'.dds' model.texDiffList.append(texName) 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now