Leaderboard
Popular Content
Showing content with the highest reputation on 06/22/2021 in all areas
-
LEGO Island Xtreme Stunts Recreations
Ben24x7 reacted to lukas.tcn for a topic
Hello everybody! Because this is actually my first post I just want to say "hi" first. I'm a crazy guy from Germany who wants to share his recreations from Island Xtreme Stunts with you. I've always been a fan of the buldings in Xtreme Stunts and of course my big dream was building Peppers house - Finally I realised it. Yes, I know, the ground floor color looks different ingame - it could be Medium Nougat or such but that color wasn't available back then and I don't really like it either. So, here it is: I also really liked the ambulance. Still need stickers for that. Since nothing looks transparent in Island Xtreme Stunts (does anybody know why?) I did it the same except for the windows. My next project is the hospital. Now I would love to hear your thoughts! Regards Lukas1 point -
Noesis script for hgp files
Cirevam reacted to Sluicer for a topic
I finally found some time to play around with LEGO SW2 again. Here is a noesis script to look into the hgp files: from inc_noesis import * import noesis import rapi def registerNoesisTypes(): '''Register the plugin. Just change the Game name and extension.''' handle = noesis.register("LEGO Star Wars 2", ".hgp") noesis.setHandlerTypeCheck(handle, noepyCheckType) noesis.setHandlerLoadModel(handle, noepyLoadModel) return 1 def noepyCheckType(data): '''Verify that the format is supported by this plugin. Default yes''' bs = NoeBitStream(data) tmp = bs.readInt() tmp = bs.readInt() if tmp == 0x3032554e: #4e553230: # NU20 return 1 return 0 def noepyLoadModel(data, mdlList): bs = NoeBitStream(data) ctx = rapi.rpgCreateContext() stack = [] textures = [] materials = [] fileSize = bs.readInt() #NU20 fourCC = bs.readInt() numberTextures = bs.readInt() print("NumberTextures %d" % numberTextures) offsetTextures = bs.readInt() numberMaterials = bs.readInt() print("NumberMaterials %d" % numberMaterials) offsetMaterials = bs.readInt() numberMatix = bs.readInt() print("NumberMatix %d" % numberMatix) offsetMatix1 = bs.readInt() offsetMatix2 = bs.readInt() offsetMatix3 = bs.readInt() numberUnk1 = bs.readInt() print("NumberUnk1 %d" % numberUnk1) offsetUnk1 = bs.readInt() offsetText = bs.readInt() lenthText = bs.readInt() numberUnk = bs.readInt() #print("NumberBones %d" % numberBones) offsetUnk = bs.readInt() numberAttachment = bs.readInt() #print("NumberAttachment %d" % numberAttachment) offsetAttachment = bs.readInt() numberLayer = bs.readInt() print("NumberLayer %d" % numberLayer) offsetLayer = bs.readInt() offsetMini3D = bs.readInt() # end header bs.seek(offsetTextures, NOESEEK_ABS) offsetTextures2 = bs.readInt() bs.seek(offsetTextures2, NOESEEK_ABS) bs.readInt() #numberOfTextures = bs.readInt() textureHeaderSize = bs.readInt() textureDataOffset = bs.readInt() bs.readInt() bs.seek(offsetTextures2+textureHeaderSize, NOESEEK_ABS) for i in range (1, numberTextures+1): width = bs.readInt() height = bs.readInt() bs.readInt() ddsType = bs.readInt() if ddsType == 0x0C: size = width * height imgType = noesis.NOESISTEX_DXT3 elif ddsType == 0x0F: size = width * height imgType = noesis.NOESISTEX_DXT5 else: print('Unknown dds type: ' + repr(ddsType)) imageOffset = bs.readInt() tmp = bs.tell() bs.seek(offsetTextures2+textureDataOffset+imageOffset+0x80, NOESEEK_ABS) print("Image{0} @ {1:8x}: width = {2:4d}; height = {3:4d}".format(i, offsetTextures2+textureDataOffset+imageOffset, width, height)) data = bs.readBytes(size) #texture = rapi.loadTexByHandler(data, ".dds") #NoeTexture(str(i), width, height, data, imgType) texture = NoeTexture(str(i), width, height, data, imgType) texture.name = "tex%03i"%i textures.append(texture) bs.seek(tmp, NOESEEK_ABS) bs.seek(offsetMaterials, NOESEEK_ABS) materialOffsets = [] for i in range (0, numberMaterials): materialOffsets.append(bs.readInt()) i = 0 for m in (materialOffsets): bs.seek(m, NOESEEK_ABS) material = NoeMaterial("mat%03i"%i, "") #create a material bs.seek(84, NOESEEK_REL) # red = bs.readFloat() green = bs.readFloat() blue = bs.readFloat() alpha = bs.readFloat() material.setDiffuseColor(NoeVec4([red, green, blue, alpha])) #print("DiffuseColor: ", i, red, green, blue, alpha) bs.seek(0x14, NOESEEK_REL) # texId = bs.readShort() #print("TexId: ", texId) if (texId != 0): material.setTexture("tex%03i"%texId) #else: # material.setTexture(None) materials.append(material) i += 1 bones = [] bones0 = [] bones1 = [] bones2 = [] boneNames = [] bonePIndices = [] bs.seek(offsetMatix1, NOESEEK_ABS) for i in range (0, numberMatix): boneMat = NoeMat44.fromBytes(bs.readBytes(0x40)).toMat43() bs.seek(0xc, NOESEEK_REL) offsetText = bs.readInt() mem = bs.tell() bs.seek(offsetText, NOESEEK_ABS) boneName = bs.readString() boneNames.append(boneName) bs.seek(mem, NOESEEK_ABS) bonePIndex = bs.readByte() bonePIndices.append(bonePIndex) bs.readByte() bs.readByte() bs.readByte() bs.readInt() bs.readInt() bs.readInt() print(boneName + ": " + repr(i) + "-->" + repr(bonePIndex)) bones0.append(boneMat) for i in range (0, numberMatix): boneMat = NoeMat44.fromBytes(bs.readBytes(0x40)).toMat43() #print(boneMat) if (bonePIndices[i] != -1): boneMat = boneMat.__mul__(bones1[bonePIndices[i]]) bone = NoeBone(i, boneNames[i], boneMat, None, bonePIndices[i]) bones.append(bone) bones1.append(boneMat) for i in range (0, numberMatix): boneMat = NoeMat44.fromBytes(bs.readBytes(0x40)).toMat43() #print(boneMat) bones2.append(boneMat) layerList = [] bs.seek(offsetLayer, NOESEEK_ABS) for i in range (0, numberLayer): print("Layer %d" % i) parseLayer(bs, numberMatix, layerList) bs.seek(offsetTextures, NOESEEK_ABS) offsetImages = bs.readInt() offsetMesh = bs.readInt() bs.seek(offsetMesh, NOESEEK_ABS) #print("MESH @ 0x%x" % (bs.tell())) numberVertexLists = bs.readInt() #print("{0:08x} numberVertexLists: 0x{1:08x}".format(bs.tell()-4, numberVertexLists)) numberUnk = bs.readInt() size = bs.readInt() type = bs.readInt() offsetMeshHeader = bs.readInt() sizeVertices = bs.readInt() bs.readInt() offsetIndices = bs.readInt() sizeIndices = bs.readInt() bs.seek(offsetMesh+0x30, NOESEEK_ABS) sizeList = [] offsetList = [] for i in range (0, numberVertexLists): sizeList.append(bs.readInt()) id = bs.readInt() offsetList.append(bs.readInt()) bs.seek(offsetMesh+offsetMeshHeader, NOESEEK_ABS) #print("Vertices @ 0x%x" % (bs.tell())) vertexLists = [] for i in range (0, numberVertexLists): bs.seek(offsetMesh+offsetMeshHeader+offsetList[i], NOESEEK_ABS) vertexLists.append(bs.readBytes(sizeList[i])) bs.seek(offsetMesh+offsetIndices, NOESEEK_ABS) #print("Indices @ 0x%x" % (bs.tell())) indexLists = [] indexLists.append(bs.readBytes(sizeIndices)) #print("EOF @ 0x%x" % (bs.tell())) #for layer in (layerList): for i in range (0, numberLayer): layer = layerList[i] for part in (layer): #print("Part") #print("Indices @ 0x%x" % (part.VertexListType[0])) if (part.BoneId != -1): rapi.rpgSetTransform(bones1[part.BoneId]) else: rapi.rpgSetTransform(None) if (part.VertexListType[0] == 0x5D): bytesForPositions = (vertexLists[part.VertexList[0]][part.offsetVertex*0x38:part.offsetVertex*0x38+part.numberVertex*0x38]) rapi.rpgBindPositionBuffer(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x38, 0) rapi.rpgBindBoneWeightBufferOfs(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x38, 0x0c, 2) rapi.rpgBindBoneIndexBufferOfs(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x38, 0x14, 2) rapi.rpgBindUV1BufferOfs(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x38, 0x30) if (part.VertexListType[0] == 0x59): bytesForPositions = (vertexLists[part.VertexList[0]][part.offsetVertex*0x24:part.offsetVertex*0x24+part.numberVertex*0x24]) rapi.rpgBindPositionBuffer(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x24, 0) rapi.rpgBindBoneWeightBufferOfs(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x24, 0x0c, 2) rapi.rpgBindBoneIndexBufferOfs(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x24, 0x14, 2) rapi.rpgBindUV1BufferOfs(bytesForPositions, noesis.RPGEODATA_FLOAT, 0x24, 0x1C) bytesForIndexBuffer = (indexLists[0][part.offsetIndex*2:part.offsetIndex*2+(part.numberIndex+2)*2]) rapi.rpgSetMaterial("mat%03i"%part.MadId) rapi.rpgCommitTriangles(bytesForIndexBuffer, noesis.RPGEODATA_SHORT, part.numberIndex+2, noesis.RPGEO_TRIANGLE_STRIP, 1) rapi.rpgClearBufferBinds() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(textures, materials)) mdl.setBones(bones) mdlList.append(mdl) #important, don't forget to put your loaded model in the mdlList return 1 def parseLayer(bs, numberMatix, layerList): partList = [] layerMeta1 = bs.readInt() layerMeta2 = bs.readInt() #print(" layerMeta2 %d" % layerMeta2) mem = bs.tell() if (layerMeta2 != 0): bs.seek(layerMeta2, NOESEEK_ABS) parseLayerMeta2(bs, numberMatix, partList) bs.seek(mem, NOESEEK_ABS) layerMeta3 = bs.readInt() #print(" layerMeta3 %d" % layerMeta3) mem = bs.tell() if (layerMeta3 != 0): bs.seek(layerMeta3, NOESEEK_ABS) parsePartHeader(bs, partList, -1) bs.seek(mem, NOESEEK_ABS) layerMeta4 = bs.readInt() layerMeta5 = bs.readInt() #print(" layerMeta5 %d" % layerMeta5) mem = bs.tell() if (layerMeta5 != 0): bs.seek(layerMeta5, NOESEEK_ABS) parsePartHeader(bs, partList, -1) bs.seek(mem, NOESEEK_ABS) layerList.append(partList) def parseLayerMeta2(bs, numberMatix, partList): for i in range (0, numberMatix): tmp = bs.readInt() mem = bs.tell() if (tmp != 0): bs.seek(tmp, NOESEEK_ABS) #print(" offsetLayerPart %d" % tmp) parsePartHeader(bs, partList, i) bs.seek(mem, NOESEEK_ABS) def parsePartHeader(bs, partList, boneId): bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readFloat() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() pos = bs.tell() #print(" pos 4 next %x" % pos) next = bs.readInt() #print(" next %d" % next) parsePart(bs, partList, boneId) while (next != 0): bs.seek(next, NOESEEK_ABS) next = bs.readInt() #print(" next %d" % next) parsePart(bs, partList, boneId) def parsePart(bs, partList, boneId): part = Part() part.BoneId = boneId pos = bs.tell() #print(" pos %x" % pos) bs.readInt() part.MadId = bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() fourCC = bs.readInt() bs.readInt() bs.readInt() ext = bs.readInt() bs.readInt() bs.readInt() numberVertexLists = bs.readInt() for i in range (0, 8): part.VertexList.append(bs.readInt()) for i in range (0, 8): part.VertexListType.append(bs.readInt()) bs.readInt() bs.readInt() bs.readInt() bs.readInt() bs.readInt() chunk6 = bs.readInt() bs.readShort() bs.readShort() bs.readInt() bs.readInt() bs.readShort() bs.seek(17*2, NOESEEK_REL) chunk5 = bs.readInt() part.offsetVertex = bs.readInt() bs.readInt() part.numberVertex = bs.readInt() part.offsetIndex = bs.readInt() part.numberIndex = bs.readInt() pos = bs.tell() #print(" pos %x" % pos) print(" PartMeta: ", part.offsetVertex, part.numberVertex, part.offsetIndex, part.numberIndex) partList.append(part) class Part(): def __init__(self): self.VertexList = [] self.VertexListType = [] self.BoneId = 0 self.MadId = -1 self.offsetVertex = 0 self.numberVertex = 0 self.offsetIndex = 0 self.numberIndex = 01 point -
sparky.png
bradleybrand reacted to ticketstoloservile for a gallery image
From the album: LR2 Decals
1 point -
LR2 Decals
Sunchipp reacted to ticketstoloservile for a gallery album
1 point -
LEGO Island Xtreme Stunts Recreations
bradleybrand reacted to lukas.tcn for a topic
The Res-Q-Center is ready - Okay, yes, shame on me, I forgot to put two more round 1x1 studs on the heli pad. In the background you can see the gas station, I'm still waiting for some parts to reach me.1 point -
LEGO Island Xtreme Stunts Recreations
bradleybrand reacted to lukas.tcn for a topic
Hey guys, it's been a while since I started this topic and that's because I'm currently building a LEGO city, of course with some easter eggs related to LEGO Island. This space I'm going to be using to build the hospital: And here we have some parts, I'm still waiting for lots and lots of white bricks. I guess that I'll be able to build it in two weeks. I guess you all know that the Information Centre was produced as a real LEGO set named "Xtreme Tower". If you compare that set to the ingame version you'll find lots of color differences for whatever reason. I changed all the parts to make it look like the ingame version of Island Xtreme Stunts. (released version: here) I'm sorry that it all still looks like a mess and I hope you guys don't mind the, let's say," old fashioned" curtains in the background. Oh, and because this is obviously the beach area, I'm going to place the Res-Q-Center aswell. It also was released as an official LEGO set, just needs a few changes to look like the ingame version. Thanks to everybody who's interested in my little projects! Stay safe out there Lukas1 point -
Decals
LegoLoco7 reacted to Fifi La Fume for a gallery album
1 point -
1 point
-
Custom Game Covers
bradleybrand reacted to MinifigRenderer for a gallery album
1 point -
LEGO Game Logos
bradleybrand reacted to mumboking for a gallery album
1 point -
LEGO Island 2 buildings
Lego Master Maniac reacted to The Brickster for a gallery album
1 point -
Lego Stunt Rally Workshop realtime cars
bradleybrand reacted to k-g for a gallery album
1 point -
f1-speedo.jpg
bradleybrand reacted to k-g for a gallery image
From the album: Lego Stunt Rally Workshop realtime cars
1 point -
1 point
-
1 point
-
1 point
-
1 point
-
1 point
-
1 point
-
1 point
-
Lego Creator Modding: It's possible.
bradleybrand reacted to RR Rocks for a topic
Alright people, some of you may still remember playing Lego Creator and seeing that the part you need to finish your car/plane/house etc. is missing. Now I may not have cracked the file for the model yet, but I KNOW that it's possible to ADD new types of bricks. As a test, I did this: Note the second palmtree in the brick selection palette and the changed image of the yellow 2x2 brick. Secondly it does not seem possible to add new catagories for parts using folders. Perhaps there is a way to change this in a central config file that is compressed. It is also not obviously possible to add sound effects for minifigures to make. I shall update this post with more information as I find it. P.S: I hate having a german disk of the game. Heck, I hate living in germany.1 point
