gayav27233 Posted June 2 Share Posted June 2 monopoly plus archives, when opened in hex editor i can see this "v1.2000.77.18 - Asobo Studio - Internal Cross Technology" there are several tools online that i will link but they dont work. there are several files with the same name but different extention: dpc jpg npc and lpc this one doesnt work at all: https://github.com/widberg/dpc this one seems like it would work if "main_switch = 1" but i couldnt figure out how the code works since idk anything about coding https://github.com/bartlomiejduda/Tools/blob/master/NEW Tools/Asobo Studio DPC DPS Research/Asobo_DPC_DPS_Tool.py please, i need help, im trying to get models and textures for a map, id like to 3d print it cuz i think its cool, thanks in advance heres sample https://we.tl/t-Vzji1cpqLJ Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 2 Engineer Share Posted June 2 (edited) 2 hours ago, gayav27233 said: this one doesnt work at all: https://github.com/widberg/dpc Because it doesn't support "monopoly", afaics. Quote "main_switch = 1" Why switch 1? switch 2 seems to do better, creates 38 bin files with a size of 2 MB But you'll need much patience to figure out the structures. And some basic understanding of 3D formats. Edited June 2 by shak-otay Link to comment Share on other sites More sharing options...
gayav27233 Posted June 2 Author Share Posted June 2 2 hours ago, shak-otay said: Because it doesn't support "monopoly", afaics. Why switch 1? switch 2 seems to do better, creates 38 bin files with a size of 2 MB But you'll need much patience to figure out the structures. And some basic understanding of 3D formats. yeah sadly i dont understand that stuff, can u recommend me where do i learn about them? Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 2 Engineer Share Posted June 2 (edited) You might start here: Extracting simple models Or read here (didn't check it so far): Pdf guide for exploring file formats (edit: well, 65 cool pages, but beginners might be, ehm, overwhelmed?) @all: people with more experience could look her: mesh.rs from widberg, game Fuel (There's no guarantee that Fuel meshes are similar to the ones of Monopoly Plus, but guess, it's better than nothing.) Edited December 7 by shak-otay comment on Pdf guide Link to comment Share on other sites More sharing options...
Bigchillghost Posted June 3 Share Posted June 3 Using AXE on decompressed data: ("DB:>OBJECTS>EXPORT>BEACHKIT03_LOD1_MESH.TMESH") The compression scanned by QuickBMS is BIZARRE_SKIP btw. 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 3 Engineer Share Posted June 3 (edited) Thanks! Is "beachkit3" from Living.DPC? Only beach I found in decompressed data (by Bartlomiej Duda's tool) is CITY_amb_area4_beach. Hmm, I'm not sure whether he decompressed the .DPC. Looks like simple splitting up of the file into 2 MB parts. Edited June 3 by shak-otay Link to comment Share on other sites More sharing options...
Bigchillghost Posted June 3 Share Posted June 3 (edited) Use the BMS script in the attachment to unpack the dpc archive. Then run "python restoreFileHierarchy.py" from the cmd to rename the extracted assets. Note that the LIVING.NPC needs to be along side the py script. dpcStuff.zip Edited June 3 by Bigchillghost 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 3 Engineer Share Posted June 3 (edited) Cool! Thanks! (I was just starting a bms script with comtype bizarre_skip and get ZSIZE asize, get NAME basename, etc, but the DPC's structure was unknown to me...) edit: very cool: 9530 files extracted. I started your .py file from blender (not from the command line, as maybe expected). Had to add the full path then: mapFile='D:\\test\\LIVING.NPC' inDir = 'D:\\test\\unpack' outDir = 'D:\\test\\unpack' ----------------- And, nice: BEACHKIT03_LOD1_MESH.TMESH Very appreciated! (Would have taken me 2 weeks at least to get that far...) @all: getting all models as .obj from that DPC will require a script or an app. If noone else will do it I try that (sooner or later). (Well, seems I get x swapped, whyever.) https://imgbox.com/lb5K2JJb FVFsize may vary; for this house it's 44: HOUSECOLOR03_ETAPE6_MESH.TMESH Edited June 3 by shak-otay Link to comment Share on other sites More sharing options...
DKDave Posted June 3 Share Posted June 3 The mesh format isn't too complicated - just been doing some manual testing, but will need a proper script. Textures aren't perfect, just an example ... Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 7 Engineer Share Posted June 7 I was thinking about checking where which object is located on the map but seems the OP has left the scene. Link to comment Share on other sites More sharing options...
gayav27233 Posted June 7 Author Share Posted June 7 2 hours ago, shak-otay said: I was thinking about checking where which object is located on the map but seems the OP has left the scene. i can help with that, what do u need exacly? Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 7 Engineer Share Posted June 7 13 minutes ago, gayav27233 said: i can help with that, what do u need exacly? Oh, you're back. Well, it would be nice to have a map of the Living level (screenshot) where the location of objects, houses etc can be seen. Link to comment Share on other sites More sharing options...
gayav27233 Posted June 7 Author Share Posted June 7 1 hour ago, shak-otay said: Oh, you're back. Well, it would be nice to have a map of the Living level (screenshot) where the location of objects, houses etc can be seen. there is not much i can send u but here is a image i found on google that sure looks like the map from games intros Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 7 Engineer Share Posted June 7 (edited) Thanks. I see, it's not a ready build map. It's developed during the game, I thought, the Living.LPC was a part of the map but it looks like a pure assets' archive. So what I was looking for were the coordinates of objects and maybe they're in the T3DNODE files. The jail for example had a fixed place in the board game, afair, but the buildings not (can be placed nearly everywhere) and interestingly the assumed position in the t3dnode file is filled with FFs. The railway line might have a defined position; I found PATHTRAIN02_001.TSPLINE for example. I judge the FVFsize to be 12 from the DW counters and blocksizes but the lines I get look funny somehow. Couldn't find a trainstation, just: Electricbuilding_trainstation edit: This is supposed to be a board plane (livingboard.tworld) Edited June 7 by shak-otay Link to comment Share on other sites More sharing options...
gayav27233 Posted June 8 Author Share Posted June 8 i tried making a noesis script for importing but idk anything about scripting, there us just some info have gathered that i will share with yall note this was done only on NPC_BOY_NPC_BOY_MESH.TMESH again im not skillful enough since i just started, so if there is anything that i named wrongly feel free to correct me, i wanna learn this stuff, its fun monopolyPlus.rar 1 Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 8 Engineer Share Posted June 8 (edited) 4 hours ago, gayav27233 said: i tried making a noesis script for importing but idk anything about scripting, there us just some info have gathered that i will share with yall Everything ok (though instead of "stride" I prefer using FVFsize which is 44 here): NPC_BOY TMESH Quote i tried making a noesis script for importing but idk anything about scripting, It's on my list to create a script from parameters (sooner or later). Ignore the # lines in this testx.py, they're commented out which I uncomment for debugging purposes. ##### Will work with NPC_BOY_NPC_BOY_MESH.TMESH only! ##### For other TMESH files set vertexCount and faceIndCount manually. vertsStride may be 32 for other models (stride 20 in MR). Also notice that I handle vertsStride as "sizeOfVertexBlock" (=FVFsize) other than MR, where stride is 32 (44 -12) #Noesis Python model import+export test module, imports/exports some data from/to a made-up format from inc_noesis import * import noesis import os #rapi methods should only be used during handler callbacks import rapi #registerNoesisTypes is called by Noesis to allow the script to register formats. #Do not implement this function in script files unless you want them to be dedicated format modules! def registerNoesisTypes(): handle = noesis.register("Monopolyplus", ".TMESH") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) #see also noepyLoadModelRPG noesis.logPopup() print("The log can be useful for catching debug prints from preview loads.\nBut don't leave it on when you release your script, or it will probably annoy people.") return 1 #check if it's this type based on the data def noepyCheckType(data): bs = NoeBitStream(data) #if bs.readInt() != 0x123456AB : # print("not a test model!") # return 0 return 1 #load the model def noepyLoadModel(data, mdlList): ctx = rapi.rpgCreateContext() bs = NoeBitStream(data) #rapi.rpgClearBufferBinds() #fileName= 'D:\not_used.txt' #statinfo = os.stat(fileName) #print("statinfo, file size: ", statinfo.st_size) #fsize= statinfo.st_size #with open(fileName, "rb") as f: # #f.seek(fsize-11, NOESEEK_ABS) # #f.seek(fsize-11, os.SEEK_SET) # bs.seek(-11, 2) # a= f.read() # print("a: ", a) bs.seek(0xB6, NOESEEK_ABS) #Seek to counts vertsCount = bs.readUInt() #vertsCount = 42 bs.seek(8, NOESEEK_REL) #addr=bs.tell(); print(hex(addr)) vertsStride = 44 print("vCnt, stride ", vertsCount, vertsStride) VertBuff = bs.read(vertsCount * vertsStride) bs.seek(0x4BE2, NOESEEK_ABS) faceIndCount = bs.readUInt() # face indices count #faceIndCount= 48 #print("vCnt: %d, fIndCnt: %d" %(vertsCount[0], faceIndCount[0])) bs.seek(4, NOESEEK_REL) #addr=bs.tell(); print(hex(addr)) idxBuff = bs.read(faceIndCount *2) rapi.rpgBindPositionBufferOfs(VertBuff, noesis.RPGEODATA_FLOAT, vertsStride, 0) #rapi.rpgCommitTriangles(None, noesis.RPGEODATA_USHORT, facesCount[0], noesis.RPGEO_POINTS, 1) #rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, 454, noesis.RPGEO_POINTS, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, faceIndCount, noesis.RPGEO_TRIANGLE, 1) mdl = rapi.rpgConstructModel() mdlList.append(mdl) #important, don't forget to put your loaded model in the mdlList return 1 Edited June 8 by shak-otay Link to comment Share on other sites More sharing options...
gayav27233 Posted June 8 Author Share Posted June 8 5 hours ago, shak-otay said: Everything ok (though instead of "stride" I prefer using FVFsize which is 44 here): NPC_BOY TMESH It's on my list to create a script from parameters (sooner or later). Ignore the # lines in this testx.py, they're commented out which I uncomment for debugging purposes. ##### Will work with NPC_BOY_NPC_BOY_MESH.TMESH only! ##### For other TMESH files set vertexCount and faceIndCount manually. vertsStride may be 32 for other models (stride 20 in MR). Also notice that I handle vertsStride as "sizeOfVertexBlock" (=FVFsize) other than MR, where stride is 32 (44 -12) #Noesis Python model import+export test module, imports/exports some data from/to a made-up format from inc_noesis import * import noesis import os #rapi methods should only be used during handler callbacks import rapi #registerNoesisTypes is called by Noesis to allow the script to register formats. #Do not implement this function in script files unless you want them to be dedicated format modules! def registerNoesisTypes(): handle = noesis.register("Monopolyplus", ".TMESH") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) #see also noepyLoadModelRPG noesis.logPopup() print("The log can be useful for catching debug prints from preview loads.\nBut don't leave it on when you release your script, or it will probably annoy people.") return 1 #check if it's this type based on the data def noepyCheckType(data): bs = NoeBitStream(data) #if bs.readInt() != 0x123456AB : # print("not a test model!") # return 0 return 1 #load the model def noepyLoadModel(data, mdlList): ctx = rapi.rpgCreateContext() bs = NoeBitStream(data) #rapi.rpgClearBufferBinds() #fileName= 'D:\not_used.txt' #statinfo = os.stat(fileName) #print("statinfo, file size: ", statinfo.st_size) #fsize= statinfo.st_size #with open(fileName, "rb") as f: # #f.seek(fsize-11, NOESEEK_ABS) # #f.seek(fsize-11, os.SEEK_SET) # bs.seek(-11, 2) # a= f.read() # print("a: ", a) bs.seek(0xB6, NOESEEK_ABS) #Seek to counts vertsCount = bs.readUInt() #vertsCount = 42 bs.seek(8, NOESEEK_REL) #addr=bs.tell(); print(hex(addr)) vertsStride = 44 print("vCnt, stride ", vertsCount, vertsStride) VertBuff = bs.read(vertsCount * vertsStride) bs.seek(0x4BE2, NOESEEK_ABS) faceIndCount = bs.readUInt() # face indices count #faceIndCount= 48 #print("vCnt: %d, fIndCnt: %d" %(vertsCount[0], faceIndCount[0])) bs.seek(4, NOESEEK_REL) #addr=bs.tell(); print(hex(addr)) idxBuff = bs.read(faceIndCount *2) rapi.rpgBindPositionBufferOfs(VertBuff, noesis.RPGEODATA_FLOAT, vertsStride, 0) #rapi.rpgCommitTriangles(None, noesis.RPGEODATA_USHORT, facesCount[0], noesis.RPGEO_POINTS, 1) #rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, 454, noesis.RPGEO_POINTS, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, faceIndCount, noesis.RPGEO_TRIANGLE, 1) mdl = rapi.rpgConstructModel() mdlList.append(mdl) #important, don't forget to put your loaded model in the mdlList return 1 wow thank u so much, may i ask you, would u be able to teach me scripting in ur free time? i really wanna learn Link to comment Share on other sites More sharing options...
Engineer shak-otay Posted June 8 Engineer Share Posted June 8 (edited) 12 hours ago, gayav27233 said: would u be able to teach me scripting in ur free time? Well, no, sorry. My free time is very limited, so I fear, you'll need to read tutorials for such. I don't know a special one for Noesis python scripting but you'll need to learn the 3D basics before, anyways. See links in one of my previous posts. edit: after you've gained the basics we could discuss the previous Noesis script, of course. Edited June 9 by shak-otay Link to comment Share on other sites More sharing options...
gayav27233 Posted June 9 Author Share Posted June 9 17 hours ago, shak-otay said: Well, no, sorry. My free time is very limited, so I fear, you'll need to read tutorials for such. I don't know a special one for Noesis python scripting but you'll need to learn the 3D basics before, anyways. See links in one of my previous posts. edit: after you've gained the basics we could discuss the previous Noesis script, of course. thank u soo mcuh, i will keep on learning so when i gain the basics i will dm u for discussion 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