Important information: this site is currently scheduled to go offline indefinitely by end of the year.

Spotlight: Señor Casaroja's Noesis

General game file tools that are useful for more than one game
pixellegolas
ultra-veteran
ultra-veteran
Posts: 423
Joined: Mon Aug 11, 2008 11:30 pm
Has thanked: 27 times
Been thanked: 15 times

Re: Spotlight: Señor Casaroja's Noesis

Post by pixellegolas »

Super-interesting read that hopefully can make conversions etc easier?

https://godotengine.org/article/we-shou ... me-engines
User avatar
Tosyk
double-veteran
double-veteran
Posts: 1027
Joined: Thu Oct 22, 2009 10:24 am
Location: Russia, Siberia
Has thanked: 269 times
Been thanked: 154 times
Contact:

Re: Spotlight: Señor Casaroja's Noesis

Post by Tosyk »

When I load SMD with long bone names Noesis stripped them into something like 'bone_XX'.
Can you fix this, MrAdults?
Thank you for all you do here
my blog | my forum
Kerilk
beginner
Posts: 38
Joined: Sun Aug 27, 2017 2:08 pm
Has thanked: 9 times
Been thanked: 37 times

Re: Spotlight: Señor Casaroja's Noesis

Post by Kerilk »

I am still working on my Bayonetta 1/2, Vanquish, Nier Automata (let's say PG now) plugin and I would like to know how to blend two materials with a ratio given by the red component of the color vertex buffer. I think I would need to use material expressions for this to work but I couldn't find example of it's usage. I found out that chrrox used them but couldn't find where.

Thanks in advance.

edit: never mind I may have found what I was searching here: viewtopic.php?p=81687#p81687

edit 2: but maybe material expressions are not the way to go. If I understand correctly vertex color is blended with first material and then the result is blended with the next. So maybe classical blending would suffice
Kerilk
beginner
Posts: 38
Joined: Sun Aug 27, 2017 2:08 pm
Has thanked: 9 times
Been thanked: 37 times

Re: Spotlight: Señor Casaroja's Noesis

Post by Kerilk »

Any idea why lightmap don't move with the model?

Image

They also don't disappear when you skip the rendering of the corresponding mesh in the data viewer.

Edit: Using another pass for the lightmap and using the NMATFLAG_USELMUVS flag does the trick, rather than using the rpgSetLightmap command.

Edit: Okay, blending terrain is possible thanks to material expressions and classical blending, here is an example of three materials blended together (with lightmap as an additional pass):
Image

This technique is nonetheless slightly problematic with transparent meshes that have a lightmap:
Image

any idea of how I could avoid this? I think I would need to change the blending function for alpha and I am unsure how I should do this using noesis.
the101gamer
ultra-n00b
Posts: 3
Joined: Thu May 11, 2017 3:51 pm

Re: Spotlight: Señor Casaroja's Noesis

Post by the101gamer »

Does anyone have a plugin for DBZ Ultimate Tenkiachi??
joeyq
n00b
Posts: 18
Joined: Tue Jan 19, 2010 11:14 am
Has thanked: 1 time
Been thanked: 5 times

Re: Spotlight: Señor Casaroja's Noesis

Post by joeyq »

I humbly request for Soul Calibur 6 support, it has the same issue as Tekken 7 with mismatched skeletons and meshes when using gildor's umodel viewer.
I also have long wished for animation support of Soul Calibur series since Soul Calibur 4 but no-one has ever succeeded (or made it public), so support of soul calibur 6 animations would be fantastic!
TrumpetPro
advanced
Posts: 73
Joined: Wed Jul 06, 2016 1:51 am
Has thanked: 5 times
Been thanked: 12 times

Re: Spotlight: Señor Casaroja's Noesis

Post by TrumpetPro »

joeyq wrote:I humbly request for Soul Calibur 6 support, it has the same issue as Tekken 7 with mismatched skeletons and meshes when using gildor's umodel viewer.
I also have long wished for animation support of Soul Calibur series since Soul Calibur 4 but no-one has ever succeeded (or made it public), so support of soul calibur 6 animations would be fantastic!
I second this
Mr.Mouse
Site Admin
Posts: 4073
Joined: Wed Jan 15, 2003 6:45 pm
Location: Dungeons of Doom
Has thanked: 450 times
Been thanked: 682 times
Contact:

Re: Spotlight: Señor Casaroja's Noesis

Post by Mr.Mouse »

http://richwhitehouse.com/index.php?postid=72

Use your Roomba bot to map your house and turn it into a Doom level with Noesis. :) :ninja:
GHFear
advanced
Posts: 50
Joined: Tue Dec 04, 2018 9:29 am
Has thanked: 7 times
Been thanked: 9 times

Re: Spotlight: Señor Casaroja's Noesis

Post by GHFear »

I have been making a script to export all rx2 "xbox 360 EA Games" files from all games that use them lately and can now export every single texture format in the games I have tested except for one.
That last format is "r5g6b5".
I can't find anywhere how to export that from an xbox 360 game with noesis.
So any help on that would mean a lot =]

Thanks,
GHFear
If you appreciate my work and want to donate:
Paypal: [email protected]
ReeceMix
advanced
Posts: 64
Joined: Sat Nov 10, 2007 3:01 pm
Has thanked: 6 times
Been thanked: 14 times

Re: Spotlight: Señor Casaroja's Noesis

Post by ReeceMix »

It may have been mentioned here before .. but can Noesis preview window have an option to flip UVs vertically?

Image
I know objs are a bit backward but it displays normally in other viewers and 3ds max.

Image
Devilot
ultra-veteran
ultra-veteran
Posts: 443
Joined: Tue Sep 07, 2010 10:12 am
Has thanked: 159 times
Been thanked: 49 times

Re: Spotlight: Señor Casaroja's Noesis

Post by Devilot »

Oh look I didn't know that!
User avatar
zheneq
advanced
Posts: 43
Joined: Fri Jul 17, 2015 6:09 am
Location: Moscow, Russia
Has thanked: 7 times
Been thanked: 30 times

Re: Spotlight: Señor Casaroja's Noesis

Post by zheneq »

ReeceMix wrote: Fri Apr 05, 2019 5:05 pm It may have been mentioned here before .. but can Noesis preview window have an option to flip UVs vertically?
Tools -> Data Viewer -> Model -> Global UV Flip
MarieRose1301
veteran
Posts: 97
Joined: Sat Oct 11, 2014 10:29 pm
Has thanked: 17 times
Been thanked: 7 times

Re: Spotlight: Señor Casaroja's Noesis

Post by MarieRose1301 »

Probably a stupid question, but is there a triangle strip function variation with strip termination? If so, how do i call it in a script?
Beedy
advanced
Posts: 47
Joined: Mon Dec 05, 2016 11:12 am
Has thanked: 8 times
Been thanked: 14 times

Re: Spotlight: Señor Casaroja's Noesis

Post by Beedy »

I tried to read materials from modelcontainer with 153 meshes, 65 materials and 41 textures. I assign textures to every material and then read materials to MatList and construct models with 153 range loop. When I load the file it appears 9945 (=153 x 65) materials in Noesis. It reads right material for every meshes but Noesis crashes when I go to Data Viewer because of huge amount of materials. When I move mdl.setModelMaterials(NoeModelMaterials(TexList, MatList)) out of range loop it appears 153 materials in Noesis but materials isn't loaded for meshes. What I do wrong?

Code: Select all

#Noesis python importer - EA NHL games stadium container .rx2 files - version 1.0
from inc_noesis import *
import noesis
#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("NHL Legacy (X360)", ".rx2")
	noesis.setHandlerTypeCheck(handle, noepyCheckType)
	noesis.setHandlerLoadModel(handle, noepyLoadModel)
	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)
    Magic = bs.readBytes(7)
    if Magic != b'\x89\x52\x57\x34\x78\x62\x32':
        return 0
    return 1  

#load the model
def noepyLoadModel(data, mdlList):
   VInfo = []
   VOff = []
   VBufferSize = []
   FInfo = []   
   FOff = []
   FBufferSize = []
   MatInfo = []
   MatIndexInfo = []
   MatIndexTable = []
   TexIndexInfo = []
   TexIndex = []   
   MatNames = []
   NameInfo = []
   TexList = []
   MatList = []
   MaterialInfo = []
   
   ctx = rapi.rpgCreateContext()
   bs = NoeBitStream(data, NOE_BIGENDIAN)
   bs.seek(0x20, NOESEEK_ABS)
   fileCount = bs.read(">i")
   bs.seek(12, NOESEEK_REL)
   fileTable = bs.read(">i")
   bs.seek(16, NOESEEK_REL)
   hdrSize = bs.read(">i")  
   bs.seek(fileTable[0], NOESEEK_ABS)
   meshCount = 0
   texCount = 0
   materialCount = 0
   ebCount = 0
   
   for i in range(0, fileCount[0]):
	    fileInfo = bs.read(">iiiii")
	    fileType = bs.readBytes(4)
	   			    
	    elif fileType == b'\x00\x02\x00\x05':
	   		bs.seek(-48, NOESEEK_REL)
	   		info = bs.read(">iiiiiiiiiiii")
	   		VOff.append([info[0]])
	   		VBufferSize.append([info[2]])
	   		VInfo.append([info[6]])
	   				 			   		
	    elif fileType == b'\x00\x02\x00\x07':
	   		bs.seek(-48, NOESEEK_REL)
	   		info = bs.read(">iiiiiiiiiiii")
	   		FOff.append([info[0]])
	   		FBufferSize.append([info[2]])
	   		FInfo.append([info[6]])	   		

	    elif fileType == b'\x00\x02\x00\x09':
	   		meshCount +=1 
	   		
	    elif fileType == b'\x00\xEB\x00\x03':
	   		MatIndexInfo.append([fileInfo[0]])
	   		ebCount +=1
	   		
	    elif fileType == b'\x00\xEC\x00\x10':
	   		NameInfo.append([fileInfo[0]])
	    
	    elif fileType == b'\x00\xEF\x00\x01':
	   		TexIndexInfo.append([fileInfo[0]])

	    elif fileType == b'\x00\xEF\x00\x05':
	   		MatInfo.append([fileInfo[0]])
	   		materialCount +=1				 			   		
   
#Read material names
   bs.seek(NameInfo[0][0], NOESEEK_ABS)
   nameCount = bs.read(">HH")
   bs.seek(4, NOESEEK_REL)
   for i in range(0, nameCount[1]):
   		nameOff = bs.read(">i")
   		nameType = bs.readBytes(4)
   		nameIndex = bs.read(">i")
   		pos = bs.tell()
   		if nameType == b'\x00\xEF\x00\x05':
   			bs.seek(nameOff[0], NOESEEK_ABS)
   			MatNames.append(bs.readString())
   			bs.seek(pos, NOESEEK_ABS)	
   			
#Read material indices for meshes
   for i in range(0, ebCount):
   		bs.seek(MatIndexInfo[i][0] + 0x10, NOESEEK_ABS)
   		contents = bs.read(">i")
   		tablesize = bs.read(">i")
   		bs.seek(tablesize[0] + 12, NOESEEK_REL)
   		for j in range(0, contents[0]):
   				materialIndex = bs.read(">i")
   				MatIndexTable.append(materialIndex[0])
   				bs.seek(40, NOESEEK_REL)

#Read texture indices for materials
   for i in range(0, materialCount):
   		bs.seek(TexIndexInfo[i][0] + 256, NOESEEK_ABS)
   		index = bs.read(">i")
   		textindex = index[0] // 2
   		TexIndex.append(str(textindex)+".tga")
   		
   for i in range(0, materialCount):
   		material = NoeMaterial(MatNames[i], TexIndex[i])
   		MatList.append(material) 
   		
 #Construct Models		  			   
   for i in range(0, meshCount):
   		bs.seek(VInfo[i][0] + 32, NOESEEK_ABS) #Seek to vertices info
   		VData = bs.read(">HHi") 
   		VBsize = VData[0]
   		VCount = VData[2]
   		bs.seek(FInfo[i][0] + 32, NOESEEK_ABS) #Seek to faces info  
   		FCount = bs.read(">HH")   
   		bs.seek(VOff[i][0] + hdrSize[0], NOESEEK_ABS) #Seek to Vertices Start
   		VertBuff = bs.readBytes(VBufferSize[i][0])
   		rapi.rpgSetOption(noesis.RPGOPT_BIGENDIAN, 1)
   		rapi.rpgBindPositionBufferOfs(VertBuff, noesis.RPGEODATA_FLOAT, VBsize, 0)
   		rapi.rpgBindUV1BufferOfs(VertBuff, noesis.RPGEODATA_FLOAT, VBsize, 16)
   		bs.seek(FOff[i][0] + hdrSize[0], NOESEEK_ABS) #Seek to Faces Start
   		FaceBuff = bs.readBytes(FBufferSize[i][0])
   		rapi.rpgSetMaterial(MatNames[((MatIndexTable[i] - 1) // 3) - 28])
   		rapi.rpgCommitTriangles(FaceBuff, noesis.RPGEODATA_USHORT, FCount[1], noesis.RPGEO_TRIANGLE, 1)
   		mdl = rapi.rpgConstructModel()
   		mdl.setModelMaterials(NoeModelMaterials(TexList, MatList))
   		mdlList.append(mdl)         #important, don't forget to put your loaded model in the mdlList
   		rapi.rpgClearBufferBinds()
   		rapi.rpgReset()   
   
   return 1
Beedy
advanced
Posts: 47
Joined: Mon Dec 05, 2016 11:12 am
Has thanked: 8 times
Been thanked: 14 times

Re: Spotlight: Señor Casaroja's Noesis

Post by Beedy »

I think that solution is read submeshes instead of construct every meshes to single model. Now I have 153 models 153 meshes 153 textures and 9945 materials. Can someone help me to fix the script to read 1 model 153 submeshes and 65 materials? I extract textures separately with name of texture index 1-41.
Here is model sample file with extracted textures:
https://app.box.com/s/gjpzsy19pb45g9cuncwrwl2ewifeg9dd
mdl_nhl_rx2_mat.py.zip
You do not have the required permissions to view the files attached to this post.
Post Reply