The Forum is up for sale: XeNTaX Forum looking for new owner
Ripping models and vectors from the My Little Pony Gameloft game.
-
Nelsonarchie
- ultra-n00b
- Posts: 9
- Joined: Tue Aug 09, 2022 12:47 am
- Been thanked: 1 time
Ripping models and vectors from the My Little Pony Gameloft game.
There's this user on Deviantart who managed to both extract and convert the character models from the game into the obj format for blender
https://www.deviantart.com/papercraftking/gallery/all
I want to take a crack at extracting the character models and converting them into Obj Myself. Thing is, i don't know the process of doing this as well as what software is needed to carry out this undertaking. I don't know how he managed to pull it off.
would someone be of assistance in figuring out how the process that DA user used tin extracting and converting those models?
https://www.deviantart.com/papercraftking/gallery/all
I want to take a crack at extracting the character models and converting them into Obj Myself. Thing is, i don't know the process of doing this as well as what software is needed to carry out this undertaking. I don't know how he managed to pull it off.
would someone be of assistance in figuring out how the process that DA user used tin extracting and converting those models?
- Bigchillghost
- double-veteran

- Posts: 1002
- Joined: Tue Jul 05, 2016 9:37 am
- Has thanked: 31 times
- Been thanked: 1171 times
Re: Ripping models and vectors from the My Little Pony Gameloft game.
Not sure about what kind of response you're expecting here but FYI, one usually needs to upload a couple of sample files as a start.
May you find peace in this puzzle-solving game.
when you get helped.
- An Imitable Workflow for Reverse Engineering a Game Model
- Advanced Mesh Reaper
- Reverse Model Wireframe
when you get helped.- Durik256
- ultra-veteran

- Posts: 425
- Joined: Wed Nov 21, 2018 7:26 pm
- Has thanked: 45 times
- Been thanked: 411 times
Re: Ripping models and vectors from the My Little Pony Gameloft game.
I remember making a plugin for Ice Age Gameloft. It seems to be the same format. Ice Age Adventures (.rk/.anim) Android.
ok i downloaded the game, plugin from ice age not working.
I find it easier to write a new plugin than fix my old one. (only mesh without bones)
archives [*.ark] from "..\Android\data\com.gameloft.android.ANMP.GloftPOHM"
drop on ARKdumper.exe for unpacking.
[*.rk] 3d model. open with my using plugin for Noesis.
(drop "fmt_rk.py" in "..\noesis\plugins\python")

You do not have the required permissions to view the files attached to this post.
-
Nelsonarchie
- ultra-n00b
- Posts: 9
- Joined: Tue Aug 09, 2022 12:47 am
- Been thanked: 1 time
Re: Ripping models and vectors from the My Little Pony Gameloft game.
are textures included?Durik256 wrote: ↑Tue Aug 09, 2022 12:42 pmI remember making a plugin for Ice Age Gameloft. It seems to be the same format. Ice Age Adventures (.rk/.anim) Android.
ok i downloaded the game, plugin from ice age not working.
I find it easier to write a new plugin than fix my old one. (only mesh without bones)
archives [*.ark] from "..\Android\data\com.gameloft.android.ANMP.GloftPOHM"
drop on ARKdumper.exe for unpacking.
[*.rk] 3d model. open with my using plugin for Noesis.
(drop "fmt_rk.py" in "..\noesis\plugins\python")
![]()
-
Nelsonarchie
- ultra-n00b
- Posts: 9
- Joined: Tue Aug 09, 2022 12:47 am
- Been thanked: 1 time
Re: Ripping models and vectors from the My Little Pony Gameloft game.
The files are all there to download on the DA page.Bigchillghost wrote: ↑Tue Aug 09, 2022 10:19 am Not sure about what kind of response you're expecting here but FYI, one usually needs to upload a couple of sample files as a start.
-
Nelsonarchie
- ultra-n00b
- Posts: 9
- Joined: Tue Aug 09, 2022 12:47 am
- Been thanked: 1 time
Re: Ripping models and vectors from the My Little Pony Gameloft game.
OK, so I don't know if it's just me but the ARK dumper didn't unpack the files properly. The folders are unpacke but nothing is in themDurik256 wrote: ↑Tue Aug 09, 2022 12:42 pmI remember making a plugin for Ice Age Gameloft. It seems to be the same format. Ice Age Adventures (.rk/.anim) Android.
ok i downloaded the game, plugin from ice age not working.
I find it easier to write a new plugin than fix my old one. (only mesh without bones)
archives [*.ark] from "..\Android\data\com.gameloft.android.ANMP.GloftPOHM"
drop on ARKdumper.exe for unpacking.
[*.rk] 3d model. open with my using plugin for Noesis.
(drop "fmt_rk.py" in "..\noesis\plugins\python")
![]()
- 05SpeedMaster
- veteran
- Posts: 121
- Joined: Mon Feb 10, 2020 9:24 pm
- Has thanked: 18 times
- Been thanked: 41 times
Re: Ripping models and vectors from the My Little Pony Gameloft game.
So, You expect people to wade through a link you post to help you?Nelsonarchie wrote: ↑Sun Aug 14, 2022 5:01 amThe files are all there to download on the DA page.Bigchillghost wrote: ↑Tue Aug 09, 2022 10:19 am Not sure about what kind of response you're expecting here but FYI, one usually needs to upload a couple of sample files as a start.
-
Nelsonarchie
- ultra-n00b
- Posts: 9
- Joined: Tue Aug 09, 2022 12:47 am
- Been thanked: 1 time
Re: Ripping models and vectors from the My Little Pony Gameloft game.
I'm not after a specific model. just the process of how these models were extracted and converted into obj.
Also, I'm getting a failed to load script error on ARKdumper. I'm not sure if it's an issue with the files or the software.
Also, I'm getting a failed to load script error on ARKdumper. I'm not sure if it's an issue with the files or the software.
Re: Ripping models and vectors from the My Little Pony Gameloft game.
Great script many thanks for this! Is there a chance you could update it to support animations and textures too?Durik256 wrote: ↑Tue Aug 09, 2022 12:42 pmarchives [*.ark] from "..\Android\data\com.gameloft.android.ANMP.GloftPOHM"
drop on ARKdumper.exe for unpacking.
[*.rk] 3d model. open with my using plugin for Noesis.
(drop "fmt_rk.py" in "..\noesis\plugins\python")
I ask because you have a fmt_rk.py on your github too that seems to support all those, but its formatted for Ice Age
Here's some sample files attached too, figure that might help
You do not have the required permissions to view the files attached to this post.
Last edited by Pandela on Fri Jan 20, 2023 8:17 am, edited 1 time in total.
Re: Ripping models and vectors from the My Little Pony Gameloft game.
These files partially work, the skeleton loads at least o:
**Edit: Upon further inspection, I'm seeing that a lot of the models have their textures in a separate folder in the pvr format,
I've updated my attachment with a single model and its associated .prv texture.
It appears most if not all the .rk models reference the pvr materials at some point
This is the code I've rather haphazardly modified as I'm just learning all of this, it can load the bones and partially the animations
but the animations are broken in this version it seems :p (the bones move the wrong direction and the model itself stays in place)
This version also doesn't like to load a lot of models besides the bigger ones I think, I know its wrong but I guess its a start
**Edit: Upon further inspection, I'm seeing that a lot of the models have their textures in a separate folder in the pvr format,
I've updated my attachment with a single model and its associated .prv texture.
It appears most if not all the .rk models reference the pvr materials at some point
This is the code I've rather haphazardly modified as I'm just learning all of this, it can load the bones and partially the animations
but the animations are broken in this version it seems :p (the bones move the wrong direction and the model itself stays in place)
This version also doesn't like to load a lot of models besides the bigger ones I think, I know its wrong but I guess its a start
Code: Select all
#by Durik256
from inc_noesis import *
def registerNoesisTypes():
handle = noesis.register("My Little Pony Gameloft", ".rk")
noesis.setHandlerTypeCheck(handle, noepyCheckType)
noesis.setHandlerLoadModel(handle, noepyLoadModel)
noesis.logPopup()
return 1
def noepyCheckType(data):
if data[:8] != b'RKFORMAT':
return 0
return 1
def noepyLoadModel(data, mdlList):
bs = NoeBitStream(data)
header = bs.readInt64()
ver = bs.readInt64()
master = noeAsciiFromBytes(bs.readBytes(64))
print('master title: '+str(master))
#vertex info
v_unk = bs.readInt()
v_offset = bs.readInt()
v_count = bs.readInt()
v_size = bs.readInt()
#face info
f_unk = bs.readInt()
f_offset = bs.readInt()
f_count = bs.readInt()
f_size = bs.readInt()
#bone info
bs.seek(0x50, NOESEEK_REL)
b_unk = bs.readInt()
b_offset = bs.readInt()
b_count = bs.readInt()
b_size = bs.readInt()
print('')
#print('bones: '+str(b_count))
#print('bone offset: '+str(b_offset))
#print('bone size: '+str(b_size))
#weight info
bs.seek(0x80, NOESEEK_REL)
w_unk = bs.readInt()
w_offset = bs.readInt()
w_count = bs.readInt()
w_size = bs.readInt()
#bones read
bones = []
bs.seek(b_offset, NOESEEK_ABS)
print('')
#print('bone names:')
for x in range(b_count):
parent = bs.readInt()
id = bs.readInt()
child = bs.readInt()
mat = NoeMat44.fromBytes(bs.readBytes(64)).toMat43()
name = noeAsciiFromBytes(bs.readBytes(64)).strip()
bones.append(NoeBone(id,name,mat,None,parent))
#print(name)
#weight read
weight = []
bs.seek(w_offset, NOESEEK_ABS)
for x in range(w_count):
boneID = [bs.readUByte() for b in range(4)]
boneW = [bs.readUByte()/255 for b in range(4)]
weight.append(NoeVertWeight(boneID,boneW))
print('')
#print('bone id: '+str(boneID))
#print('bone weight: '+str(boneW))
#face read
face = []
bs.seek(f_offset, NOESEEK_ABS)
face += [bs.readShort() for x in range(f_count)]
#vertex/uv read
vert, uv = [], []
bs.seek(v_offset, NOESEEK_ABS)
for x in range(v_count):
vert.append(NoeVec3.fromBytes(bs.readBytes(12)))
#print(x,"ver",vert[-1])
bs.seek(12, NOESEEK_REL)
uv.append(NoeVec3([bs.readShort()/32768, bs.readShort()/32768]+[0]))
#name2 = noeAsciiFromBytes(bs.readBytes(0)).strip()
#print(name2)
"""
#open all anim from dir
animDir = rapi.getDirForFilePath(rapi.getInputName())
animPaths = []
for root, dirs, files in os.walk(animDir):
for fileName in files:
lowerName = fileName.lower()
if lowerName.endswith(".anim"):
fullPath = os.path.join(root, fileName)
animPaths.append(fullPath)
#print(fullPath)
"""
#open 1 anim
animList = []
animPath = os.path.join(rapi.getDirForFilePath(rapi.getInputName()),"pony_type01_applejack_set_lod1.anim")
with open(animPath, "rb") as animStream:
animList.append(LoadAnim(animStream.read(),bones))
#end open 1 anim
ctx = rapi.rpgCreateContext()
bs.seek(80)
vinf = [bs.readUInt() for x in range(4)]
iinf = [bs.readUInt() for x in range(4)]
#print(vinf)
#print(iinf)
bs.seek(vinf[1])
VBUF = bs.readBytes(vinf[3])
stride = vinf[3]//vinf[2]
rapi.rpgBindPositionBuffer(VBUF, noesis.RPGEODATA_FLOAT, stride)
rapi.rpgBindUV1BufferOfs(VBUF, noesis.RPGEODATA_SHORT, stride, 12)
bs.seek(iinf[1])
IBUF = bs.readBytes(iinf[3])
rapi.rpgCommitTriangles(IBUF, noesis.RPGEODATA_USHORT, iinf[2], noesis.RPGEO_TRIANGLE)
#uv.append(NoeVec3([bs.readShort()/32768, bs.readShort()/32768]+[0]))
mesh = NoeMesh(face, vert , "mesh_0")
mesh.setUVs(uv)
mesh.setWeights(weight)
#mdl = NoeModel([mesh])
#mdl.setBones(bones)
#mdl.setAnims(animList)
#mdl.setModelMaterials(NoeModelMaterials([], [NoeMaterial("default","")]))
#mdlList.append(mdl)
mdl = rapi.rpgConstructModel()
mdl.setAnims(animList) ##comment out to fix bones for now
mdl.setBones(bones) ##comment out to fix bones for now
mdl.setModelMaterials(NoeModelMaterials([], [NoeMaterial("default","")]))
mdlList.append(mdl)
rapi.setPreviewOption("setAngOfs", "0 -90 -90")
return 1
def LoadAnim(data,bones):
bs = NoeBitStream(data)
header = bs.readInt64()
ver = bs.readInt64()
name = noeAsciiFromBytes(bs.readBytes(64))
print('animation name:')
print(name)
#anim info
bone_count = bs.readInt()
print('bones in animation')
print(bone_count)
frame_count = bs.readInt()
unk = bs.readInt()#alweys 4
framerate = bs.readInt()#?
frame_matrix = []
if bone_count > len(bones):
return NoeAnim(name, bones, 1, [NoeMat43()]*len(bones), 1)
for f in range(frame_count):
for x in range(bone_count):
pos = NoeVec3([bs.readShort()/32 for y in range(3)])
unk = bs.readUByte()#/255#scale???
mat = NoeQuat([bs.readByte()/127 for y in range(4)])
mat = mat.toMat43()
mat[3] = pos
frame_matrix.append(mat)
anim = NoeAnim(name, bones, frame_count, frame_matrix, framerate)
print(len(frame_matrix))
return animYou do not have the required permissions to view the files attached to this post.
Last edited by Pandela on Sat Jan 21, 2023 4:47 pm, edited 1 time in total.
Re: Ripping models and vectors from the My Little Pony Gameloft game.
I found where the textures are located in the header now, haven't figured out how to load them onto the model itself in noesis yet however
which prints:
Texture Name: pony_ponyville_67
a_mysterymare_lod1_eyes_open
a_mysterymare_lod1_body
a_mysterymare_lod1_eyes_shut
a_mysterymare_lod1_eyes_frown
a_mysterymare_lod1_eyes_happy
Code: Select all
#texture/material info
bs.seek(0x90, NOESEEK_ABS)
t_unk = bs.readInt()
t_offset = bs.readInt()
t_count = bs.readInt()
t_size = bs.readInt()
t_test1 = bs.readInt()
t_test2 = bs.readInt()
bs.seek(t_offset, NOESEEK_ABS)
textureName = noeAsciiFromBytes(bs.readBytes(24))
textureName = textureName.split('\x00')[0]
print("Texture Name: "+textureName)
#probably texture coordinate/mapping info
bs.seek(0x70, NOESEEK_ABS)
idk_unk = bs.readInt()
idk_offset = bs.readInt()
idk_count = bs.readInt()
idk_size = bs.readInt()
idk_test1 = bs.readInt()
idk_test2 = bs.readInt()
idk_test3 = bs.readInt()
idk_test4 = bs.readInt()
bs.seek(idk_offset, NOESEEK_ABS)
for x in range(idk_count):
name = noeAsciiFromBytes(bs.readBytes(64))
name = name.split('\x00')[0]
print(name)
Texture Name: pony_ponyville_67
a_mysterymare_lod1_eyes_open
a_mysterymare_lod1_body
a_mysterymare_lod1_eyes_shut
a_mysterymare_lod1_eyes_frown
a_mysterymare_lod1_eyes_happy
- Durik256
- ultra-veteran

- Posts: 425
- Joined: Wed Nov 21, 2018 7:26 pm
- Has thanked: 45 times
- Been thanked: 411 times
Re: Ripping models and vectors from the My Little Pony Gameloft game.
i update plugin. (texture, uvs, bones , weight...)
fmt_rk.py

if you go to the topic that I wrote above, you will see that I did not finish the animation, since I am not interested in models from these games
