Jump to content

[PC] Monopoly plus .DPC


Recommended Posts

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

Posted (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.

 

d_b_file2-bin.png

Edited by shak-otay
Link to comment
Share on other sites

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.

 

d_b_file2-bin.png

yeah sadly i dont understand that stuff, can u recommend me where do i learn about them?

 

Link to comment
Share on other sites

Posted (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 by shak-otay
Link to comment
Share on other sites

Posted (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 by shak-otay
Link to comment
Share on other sites

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.:classic_huh:

i can help with that, what do u need exacly?

 

Link to comment
Share on other sites

13 minutes ago, gayav27233 said:

i can help with that, what do u need exacly?

 

Oh, you're back.:classic_smile:

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

1 hour ago, shak-otay said:

Oh, you're back.:classic_smile:

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

PREVIEW_SCREENSHOT4_68735-1583459547.jpg

Link to comment
Share on other sites

Posted (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 by shak-otay
Link to comment
Share on other sites

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

  • Like 1
Link to comment
Share on other sites

Posted (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 by shak-otay
Link to comment
Share on other sites

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

Posted (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 by shak-otay
Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...