fodev.net
FOnline Development => 3D Development => Topic started by: Horatio on October 30, 2012, 08:17:38 pm
-
I was doing some internet archaelogy to find exported materials from Van Buren, but every link i found was dead. Every request got unanswered, except from Xammurapi. (many kudos to him) so i decided to do something by myself - export it again from VB demo. The scripts i could find were for Max, this one worked almost perfectly for the VB maps.
function String4Read f = (
s = ""
for i = 1 to 4 do (
n = readbyte f
s+= bit.intAsChar n
)
return s
)
struct TSectionHeader
(
id = "", -- name
size = 0,
function ReadFromFile f =
(
id = String4Read f
size = readlong f
)
)
function ReadSectionHead f =
(
head = TSectionHeader()
head.ReadFromFile f
return head
)
GVP = #() -- vertex position
GVN = #() -- vertex normal
GVD = #() -- vertex diffuse color
GVT = #() -- texture coords
GVL = #() -- lightmap coords
IDX = #() -- face indexes
buffer_index = 0 -- current vertex buffer index
buffer_offset = #() --
Flag = 1
struct TREE_Data
(
function FileSizeGet f =
(
prev = ftell f
fseek f 0 #seek_end
size = ftell f
fseek f prev #seek_set
return size
),
function FilePosGet f =
(
ret = ftell f
return ret
),
function IsHeader s =
(
return case s of
(
"NODE" : true
"LEAF" : true
"INFO" : true
"IDXD" : true
"IDXS" : true
"FLGS" : true
"TREE" : true
"LVL0" : true
"XYZ " : true
"MATR" : true
"MATD" : true
"TXTD" : true
"TREE" : true
"VTXD" : true
"VTXB" : true
"TXUV" : true
"LMUV" : true
"DIFU" : true
"NRML" : true
"LVLD" : true
"LVL0" : true
"HEAD" : true
"8TRE" : true
"LGTD" : true
"LGTR" : true
default : false
)
),
function ReadBlock f size=
(
header = ReadSectionHead f
if header.id == "FLGS" do
(
fseek f (header.size*Flag) #seek_cur
return 0
)
if header.id == "IDXD" do
(
fseek f -16 #seek_cur
tmp =1 + (readlong f)
if tmp >= 1 and tmp <= buffer_offset.count do
buffer_index = tmp
--format "vertex buffer : % / %" buffer_index buffer_offset.count
fseek f 12 #seek_cur
)
if header.id == "TXTR" do
(
s = ""
for i = 1 to header.size do s += (bit.IntAsChar (readbyte f) )
print s
return 0
)
if header.id == "IDXS" do
(
--print header
end = (ftell f) + header.size
while ((ftell f)+12) < end do
(
tmp = readshort f #unsigned
if tmp == 0 do
(
tmp = readshort f #unsigned
--print tmp
)
if bit.and tmp 0xFF00 == 0x8000 do fseek f 8 #seek_cur
if bit.and tmp 0xFF00 == 0x4000 do fseek f 4 #seek_cur
size = readshort f
for i = 1 to (size/3) do
(
a = buffer_offset[buffer_index] + readshort f #unsigned
b = buffer_offset[buffer_index] + readshort f #unsigned
c = buffer_offset[buffer_index] + readshort f #unsigned
IDX[IDX.count+1] = [a,c,b]
)
)
fseek f end #seek_set
return 0
)
if header.id == "VTXB" do
(
readlong f
header.size -= 4
buffer_offset[buffer_offset.count+1] = GVP.count+1
--format "vertex buffer offset % = %\n" buffer_offset.count (GVP.count+1)
)
if header.id == "VTXD" do
(
readlong f
header.size -= 4
)
if header.id == "XYZ " do
(
--print header
for i = 1 to header.size/12 do
(
x = readfloat f
y = readfloat f
z = readfloat f
GVP[GVP.count+1] = [x,z,y]
)
return 0
)
if IsHeader header.id then
(
--print header
end = ( ftell f ) + header.size
while (ftell f ) < end do
(
ReadBlock f header.size
)
)
else
(
fseek f -8 #seek_cur
if size < 4 and size != 0 do size = 4
fseek f size #seek_cur
)
),
function ReadFromFile f =
(
ReadBlock f 0
)
)
function tre_file f =
(
reader = TREE_Data()
reader.ReadFromFile f
obj = Editable_Mesh()
obj.mesh.numverts = GVP.count
obj.mesh.numfaces = IDX.count
for i = 1 to obj.mesh.numverts do
SetVert obj.mesh i GVP[i]
for i = 1 to obj.mesh.numfaces do
SetFace obj.mesh i IDX[i]
update obj
)
m_roll=newrolloutfloater "TRE Importer" 400 130
rollout TREImport "TRE Import" width:400 height:104
(
edittext filename "File:" pos:[9,6] width:312 height:17
button OpenBtn "Open" pos:[326,7] width:56 height:21 enabled:true
button ImportBtn "Import" pos:[9,68] width:80 height:21
checkbox Flgs "FLGS Size" pos:[9,39] width:94 height:12
on OpenBtn pressed do
(
s = GetOpenFileName types:"TRE file(*.tre)|*.tre" historyCategory:"TREImports"
if s != undefined do
(
filename.text = s
)
)
on ImportBtn pressed do
(
if FileName.text != "" do
(
Flag = if Flgs.checked then 4 else 1
tre_file (fopen FileName.text "rb")
fclose FileName
closeRolloutFloater m_roll
)
)
)
addrollout TREImport m_roll
I hope it survives longer as text, than a download.
(https://i.imgur.com/j8k18.jpg)
The maps i reexported to .OBJ, you can download it if you want.
Van Buren maps (https://rapidshare.com/files/2205227978/vanburenmaps.rar)
edit: Many thanks to Xammurapi for the working g3d script! Thanks, man! :D
-
Here it is, if anyone wants to export the materials in Max 2009, many, many years later, when all download links are dead.
(doublepost due to char limit)
function StringRead f =(
s = ""
len = readshort f
for i = 0 to len - 1 do (
n = readbyte f
s += bit.intAsChar n
)
return s
)
FormatVer = 0
struct g3d_header (
Sign = "", --: array[0..7]of char; // "B3D 1.1 "
Unknown1 = 0, --: byte;
Unknown2 = 0, --: byte;
Unknown3 = 0, --: byte; //Header ID??
GlobalScaleFactor= 0.0, --: single;
Unknown4 = 0, --: byte; //Header ID??
CoordinateScale = 0.0, --: single;
Unknown5 = 0, --: byte; //Header ID??
CoordinateSystem = "", --: TCharArray;
Unknown6 = 0, --: byte;
Unknown7 = 0, --: longword;
function ReadFromFile f =
(
for i = 0 to 7 do (
n = readbyte f
Sign += bit.intAsChar n
)
Unknown2 = readbyte f
if Unknown2 == 3 then ( print "a"; FormatVer = 1; for i = 1 to 2 do readbyte f )
else ( for i = 1 to 4 do readbyte f )
GlobalScaleFactor = readfloat f
CoordinateScale = readfloat f
CoordinateSystem = StringRead f
Unknown6 = readbyte f; Unknown7 = readlong f
)
)
Model_Vertex_Position = #()
Model_Vertex_Texcoords = #()
Model_Vertex_Normal = #()
Model_Faces_Index = #()
Model_Faces_Mats = #()
Txs = #()
TexturesDir = ""
Vertex_Type_Flag = 0
Bones_Flag = 0
FS = 0
Zone_Flag = 0;
struct TVertex64 (
Coordinate = Point3 0.0 0.0 0.0, --: array[0..2]of single;
Normal = Point3 0.0 0.0 0.0, --: array[0..2]of single;
Color = Point4 0.0 0.0 0.0 0.0, --: array[0..3]of single;
Unknown1 = Point2 0.0 0.0, --: array[0..1]of single;
Unknown2 = Point3 0.0 0.0 0.0, --: array[0..1]of single;
Unknown3 = Point2 0.0 0.0, --: array[0..1]of single;
function ReadFromFile f = (
Coordinate.x = readfloat f; Coordinate.z = readfloat f; Coordinate.y = readfloat f
Model_Vertex_Position[Model_Vertex_Position.count + 1] = Coordinate
Model_Vertex_Texcoords[Model_Vertex_Texcoords.count +1] = Unknown2
Normal.x = readfloat f; Normal.y = readfloat f; Normal.z = readfloat f
Model_Vertex_Normal[Model_Vertex_Normal.count + 1] = Normal
Color.x = readfloat f; Color.y = readfloat f; Color.z = readfloat f; Color.w = readfloat f
--TexCoords
Unknown1.x = readlong f
for i = 1 to Unknown1.x do
(
if i==1 then
(
Unknown2.x = readfloat f
Unknown2.y = 1 - readfloat f
Model_Vertex_Texcoords[Model_Vertex_Position.count] = Unknown2
)
else
(
readfloat f
readfloat f
)
)
Unknown1.x = readlong f
for i = 1 to Unknown1.x do (readfloat f; readfloat f;)
)
)
struct TVertex44 (
Coordinate = Point3 0.0 0.0 0.0, -- Eii?aeiaoa oi?ee (x, y, z: single)
Normal = Point3 0.0 0.0 0.0, -- Ii?iaeu oi?ee (x, y, z: single)
Color = #(0, 0, 0, 0), -- Oaao oi?ee (r, g, b, a: byte)
TextureCoord = Point3 0.0 0.0 0.0, -- Oaenoo?iua eii?aeiaou (s, t: single);
Unknown1 = #(), -- Iaecaanoii
function ReadFromFile f = (
Coordinate.x = readfloat f; Coordinate.z = readfloat f; Coordinate.y = readfloat f
Model_Vertex_Position[Model_Vertex_Position.count + 1] = Coordinate
Normal.x = readfloat f; Normal.y = readfloat f; Normal.z = readfloat f
Model_Vertex_Normal[Model_Vertex_Normal.count + 1] = Normal
for i = 1 to 4 do Color[i] = readbyte f
TextureCoord.x = readfloat f; TextureCoord.y = 1 - readfloat f
Model_Vertex_Texcoords[Model_Vertex_Texcoords.count + 1] = TextureCoord
Unknown1[1] = readlong f; Unknown1[2] = readlong f
)
)
struct TVert_Bones_Data (
Bone = 0, --: longword
Weight = 0.0, --: single
function ReadFromFile f = (
Bone = readlong f
Weight = readfloat f
)
)
struct TMaterial_Data44 (
Name = "",
Mtl_ID = "",
Unknown1 = 0.0,
BLEND_STATE = "",
MATERIAL_TYPE = "",
Unknown2 = 0,
Zone = "",
Unknown3 = 0,
function ReadFromFile f = (
Name = StringRead f; Mtl_ID = StringRead f
for i = 0 to 16 do Unknown1 = readfloat f
BLEND_STATE = StringRead f; MATERIAL_TYPE = StringRead f
a = readlong f; print a
for i = 1 to 16 do ( Unknown2 = readlong f; if Unknown2 == 1 then
(
Zone = StringRead f;
tm = bitmaptexture()
tm.alphasource = 2
tm.filename = TexturesDir + Zone
Txs[Txs.count + 1] = standardMaterial diffuseMap:tm showInViewport:true
Unknown2 = readlong f;
for i = 1 to Unknown2 do StringRead f;
exit;
)
)
)
)
struct TMaterial_Data (
Name = "", --: TCharArray;
Mtl_ID = "", --: TCharArray;
Unknown1 = 0.0, --: array[0..16]of single; //Most likely Ambient, Diffuse, Emissive, Specular, Shininess, and Alpha
BLEND_STATE = "", --: TCharArray;
MATERIAL_TYPE = "", --: TCharArray;
Unknown2 = 0, --: array[0..63]of byte; //Flags??
Zone = "", --: TCharArray;
Unknown3 = 0, --: longword;
function ReadFromFile f = (
Unknown3 = readlong f
Name = StringRead f
a = readlong f; for i = 1 to a do Mtl_ID = StringRead f
tm = bitmaptexture()
tm.alphasource = 2
if Mtl_ID != "" then tm.filename = TexturesDir + Mtl_ID
Txs[Txs.count + 1] = standardMaterial diffuseMap:tm showInViewport:true
local kk = 0
readbyte f; readlong f; kk = readlong f; print kk
for i = 1 to kk/3 do (
a = 0; a = readlong f
b = 0; b = readlong f
c = 0; c = readlong f
a = a + 1; b = b + 1; c = c + 1;
Model_Faces_Index[Model_Faces_Index.count + 1] = [b, a, c]
Model_Faces_Mats[Model_Faces_Mats.count + 1] = Txs.count ;
)
for i = 1 to kk do (Unknown2 = readbyte f)
)
)
struct TVertex_Node (
Unknown1 = 0,
Unknown2 = 0,
VertexTypeFlag = 0,
NumberVerts = 0,
SizeOfVerts = 0,
Unknown3 = #(),
IsBones = 0,
BonesPerVert = 0,
NumberMaterial = 0,
function ReadFromFile f = (
Unknown1 = readbyte f;
Unknown2 = readbyte f;
format "VertNode U1 % U2 %\n" Unknown1 Unknown2;
if FormatVer == 0 then
(
VertexTypeFlag = readbyte f;
Vertex_Type_Flag = VertexTypeFlag
)
else Vertex_Type_Flag = 0
NumberVerts = readlong f;
format "Vertex count - %\n" NumberVerts
format "Vertex_Type_Flag - %\n" Vertex_Type_Flag
if Vertex_Type_Flag == 1 then (
SizeOfVerts = readlong f;
format "SizeOfVerts - %\n" SizeOfVerts
for i = 1 to NumberVerts do (Vertex44 = TVertex44(); Vertex44.ReadFromFile f)
for i = 1 to 6 do (Unknown3[i] = readfloat f); IsBones = readbyte f
if IsBones == 1 then
(
BonesPerVert = readlong f
format "BonesPerVert - %\n" BonesPerVert
for i = 1 to NumberVerts * BonesPerVert do (VBD = TVert_Bones_Data(); VBD.ReadFromFile f;)
)
NumberMaterial = readlong f
format "NumberMaterial - %\n" NumberMaterial
for i = 1 to NumberMaterial do (MD = TMaterial_Data44(); MD.ReadFromFile f; print MD)
--for i = 1 to NumberMaterial do (
-- Zone = ""; S = ""
-- for j = 1 to Zone_Flag + 1 do (
-- S = StringRead f; Zone += S
-- )
-- print Zone
-- pos = ftell f; print Pos
--)
--StringRead f
for i = 1 to NumberMaterial do (StringRead f)
--StringRead f
Mat_list = #()
NumVert = 0; NumTri = 0
for i = 1 to NumberMaterial do (a = readlong f; Mat_list[Mat_list.count+1] = a )
for i = 1 to NumberMaterial do (a = readlong f; NumVert +=a; )
print "NumVert"; print NumVert; print "NumTri"; print NumTri;
NumTri = NumTri / 3;
for j = 1 to NumberMaterial do (
for i = 1 to (Mat_list[j]/3) do (
a = 0; a = readshort f #unsigned;
b = 0; b = readshort f #unsigned;
c = 0; c = readshort f #unsigned;
a = a + 1; b = b + 1; c = c + 1;
Model_Faces_Index[Model_Faces_Index.count + 1] = [c, b, a];
Model_Faces_Mats[Model_Faces_Mats.count + 1] = j;
--print Model_Faces_Index[Model_Faces_Index.count]
))
--k = readlong f;
--for i = 1 to k do ( l = StringRead f; print l; )
) else (
for i = 1 to NumberVerts do (Vertex64 = TVertex64(); Vertex64.ReadFromFile f)
pos = ftell f; print pos
NumberMaterial = readlong f
format "NumberMaterial - %\n" NumberMaterial
for i = 1 to NumberMaterial do (MD = TMaterial_Data(); MD.ReadFromFile f; print MD)
--k = readlong f;
--for i = 1 to k do ( l = StringRead f; print l; )
)
-- Print Model_Vertex_Position
)
)
struct TBone (
Name = "",
Unknown1 = 0, --: word;
Flag = 0, --: byte; //Header ID?? For "Transform"
Translation = point3 0.0 0.0 0.0, --: array[0..2]of single;
Rotation = quat 0.0 0.0 0.0 0.0, --: array[0..3]of single;
function ReadFromFile f = (
Name = StringRead f; Unknown1 = readshort f; Flag = readbyte f
if Flag != 0 then
(
Translation.x = readfloat f; Translation.z = readfloat f; Translation.y = readfloat f;
if Flag == 3 then (Rotation.x = readfloat f; Rotation.z = readfloat f; Rotation.y = readfloat f; Rotation.w = readfloat f)
if Flag == 2 then readfloat f
)
)
)
struct TColor (
r = 0, g = 0, b = 0, a = 0,
function ReadFromFile f = (r = readfloat f; g = readfloat f; b = readfloat f; a = readfloat f
)
)
struct TMater (
Ambient = TColor(),
Diffuse = TColor(),
Emissive = TColor(),
Specular = TColor(),
Shininess = 0,
Alpha = 0,
function ReadFromFile f = (
Ambient.ReadFromFile f; Diffuse.ReadFromFile f
Emissive.ReadFromFile f; Specular.ReadFromFile f
Shininess = readfloat f; Alpha = readfloat f
)
)
struct TMaterials (
Mtl_ID = "",
Name = "",
Mater = TMater(),
BLEND_STATE = "",
MATERIAL_TYPE = "",
Flag_1 = 0,
Flag_2 = 0,
function ReadFromFile f = (
Mtl_ID = StringRead f; Name = StringRead f
Mater.ReadFromFile f
BLEND_STATE = StringRead f; MATERIAL_TYPE = StringRead f
Flag_1 = readlong f; Flag_2 = readlong f
)
)
struct TTextures (
Unknown1 = 0, --: byte;
Name = "", --: TCharArray;
FileName = "", --: TCharArray;
Width = 0, --: longword;
Height = 0, --: longword;
function ReadFromFile f = (
Unknown1 = readbyte f; Name = StringRead f; FileName = StringRead f
Width = readlong f; Height = readlong f
)
)
struct TNodes (
Unknown1 = 0, --: byte;
Name = "", --: TCharArray;
function ReadFromFile f = (
Unknown1 = readbyte f; Name = StringRead f
)
)
struct TMat_Data (
Unknown1 = 0, --: array[0..2]of byte;
Name = "", --: TCharArray;
TextureOn = 0, --: longword;
Texture = "", --: TCharArray;
Unknown3 = 0, --: longword;
Unknown4 = 0, --: byte;
NumOfPoints = 0, --: longword;
function ReadFromFile f = (
for i = 0 to 2 do (Unknown1 = readbyte f)
Name = StringRead f
print Name
TextureOn = readlong f
if TextureOn != 0 then Texture = StringRead f
Unknown3 = readlong f
Unknown4 = readbyte f
NumOfPoints = readlong f
print NumOfPoints
)
)
-- Points : array of longword;
-- MatID : array of byte;
struct TMaterial_Node (
NumberMaterialNodes = 0, --: longword;
Unknown1 = 0, --: byte;
function ReadFromFile f = (
NumberMaterialNodes = readlong f
Unknown4 = readbyte f
format "MaterialNode - NumberMaterialNodes = %d\n" NumberMaterialNodes
)
-- Mat_Data : array of TMat_Data;
)
function FileSizeGet f = (
fseek f 0 #seek_end
size = ftell f
return size
)
function FilePosGet f = (
pos = ftell f
return pos
)
function main f asmooth dir = (
print f
TexturesDir = dir
local FileSize = 0
local FilePos = 0
FileSize = FileSizeGet f
FS = FileSize
fseek f 0 #seek_set
g3d_head = g3d_header(); g3d_head.ReadFromFile f; print "head"; print g3d_head; print "head_end"
Material_Node = TMaterial_Node()
do (
b = 0; b = readbyte f
case b of (
0x07: (Materials = TMaterials(); Materials.ReadFromFile f; print "Materials"; print Materials; pos = ftell f; print pos)
0x08: (Textures = TTextures(); Textures.ReadFromFile f; print "Textures"; print Textures; pos = ftell f; print pos)
0x0A: (Nodes = TNodes(); Nodes.ReadFromFile f; print "Nodes"; print Nodes; pos = ftell f; print pos)
0x0E: (Bones_Flag = 1; Bone1 = TBone(); Bone1.ReadFromFile f; print "Bones"; print Bone1; pos = ftell f; print pos)
0x0F: (Vertex_Node = TVertex_Node(); Vertex_Node.ReadFromFile f; print "VertexNodes"; pos = ftell f; print pos)
default: exit
)
FilePos = FilePosGet f
)
while FilePos != FileSize
print (FilePosGet f);
local obj
obj = Editable_Mesh()
obj.material = multimaterial numsubs:Txs.count
print "tx count"; print Txs.count
for i = 1 to Txs.count do
(
obj.material.materialList[i] = Txs[i]
meditMaterials[i] = Txs[i]
)
obj.mesh.numverts = Model_Vertex_Position.count
obj.mesh.numfaces = Model_Faces_Index.count
obj.mesh.numtverts = Model_Vertex_Position.count
format "tx count %\n" Model_Vertex_Texcoords.count
format "vert count %\n" Model_Vertex_Position.count
format "faces count %\n" Model_Faces_Index.count
for i = 1 to obj.mesh.numverts do
SetVert obj.mesh i Model_Vertex_Position[i]
for i = 1 to obj.mesh.numfaces do
SetFace obj.mesh i Model_Faces_Index[i]
for i = 1 to obj.mesh.numtverts do
SetTVert obj.mesh i Model_Vertex_Texcoords[i]
buildTVFaces obj.mesh false
for i = 1 to obj.mesh.numfaces do
(
setTVFace obj.mesh i Model_Faces_Index[i]
setFaceMatID obj.mesh i Model_Faces_Mats[i]
)
meshop.weldVertsByThreshold obj.mesh #{1..obj.mesh.numverts} 0.001
meshop.autoSmooth obj.mesh #{1..obj.mesh.numfaces} asmooth
addmodifier obj (Unwrap_UVW())
update obj
)
m_roll=newrolloutfloater "G3D Importer" 400 130
rollout G3DImport "G3D Import" width:400 height:104
(
edittext filename "File:" pos:[8,8] width:312 height:17
button OpenBtn "Open" pos:[326,7] width:56 height:21 enabled:true
button ImportBtn "Import" pos:[8,72] width:80 height:21
spinner asmooth "Auto Smooth: " pos:[32,39] width:160 height:16 range:[0,180,0] scale:0.1
on G3DImport open do
(
ASmooth.value = 45.0
)
on OpenBtn pressed do
(
s = GetOpenFileName types:"G3D file(*.g3d)|*.g3d" historyCategory:"G3DImports"
if s != undefined do
(
filename.text = s
)
)
on ImportBtn pressed do
(
if FileName.text != "" do
(
main (fopen FileName.text "rb") ASmooth.value (getFilenamePath FileName.text)
fclose FileName
closeRolloutFloater m_roll
)
)
)
addrollout G3DImport m_roll
-
Excellent! I tried this myself a few months back, and got a bit lost with garbled export mess (things like the front of a building randomly being about a mile to the right of the rest of the model).
Have you had any joy with any of the objects? I'm particularly interested in getting the models from the Van Buren cars and a few other small scenery objects, so I could analyse/edit/adjust them (for eventual use as flat rendered scenery objects).
p.s. I should be "back on" with the previously discussed 3D stuff very soon. Just got a few smaller projects at work to finish.
-
Oh yes. :)
All the files i will convert during the week, but here are the vehicles i just ripped out :)
(https://i.imgur.com/wwQ0z.jpg)
https://rapidshare.com/files/2286146652/VBvehicles.rar
Good to have you back, Luther.
-
It reminds me some old NMA thread (http://www.nma-fallout.com/forum/viewtopic.php?t=52696&start=0&postdays=0&postorder=asc)...
-
Nice one! There's a few garbled connections in there, like on the wheels - but it's easily fixable by reconnecting a few vertices here and there. Probably a triangulation/quadrangulation/import/export thing. The car model is surprisingly simple though - it should be fairly easy to adjust, and in theory if rendered at the correct size/angle and repainted carefully, an easy way to build up some extra scenery objects.
Also, yes it's very similar to that thread - though I think many of the links off there died. I can't quite remember, but I know I couldn't find what it was I was looking for.
Anyway, I got my toy cars to play with now :P
VROOOOOOM
-
It reminds me some old NMA thread (http://www.nma-fallout.com/forum/viewtopic.php?t=52696&start=0&postdays=0&postorder=asc)...
All those links are down there. ;)
-
All those links are down there. ;)
But there's some technical blabla here and there, plus shots what else can be found - still worth to check i think.
-
Nice one! There's a few garbled connections in there, like on the wheels - but it's easily fixable by reconnecting a few vertices here and there. Probably a triangulation/quadrangulation/import/export thing.
No, its actually a clever shading trick to reduce polycount on wheels. Check out the renders, they are smooth.
-
Think mine's more garbled than that - possibly from the Wings3D import - on the Police car I've got spiky wheels, a gap missing on the wheel arch and a wonky bonnet - it does seem to "magically" clear up a bit when rendered though (which is something I've never seen before), but not perfectly.
-
It reminds me some old NMA thread (http://www.nma-fallout.com/forum/viewtopic.php?t=52696&start=0&postdays=0&postorder=asc)...
You are right. I actually found the link to the script about a year ago on this forum. But I downloaded it elsewhere. It seems that the author of scripts for 3ds Max http://www.fallout-archives.com/forums/index.php?showuser=1083
Fluke that I saved them, I usually just do bookmark interesting resources ...
-
I used the resources VanBuren in my experiments with Unity3d.
That's what I did:
Character Customization (Cvet posted on its website an animated models. Unfortunately they are now no longer available)
https://www.youtube.com/watch?v=oQX4xUSxPms
A trip to the desert (Location - Desert near San Francisco, terrain is generated based on the data of NASA (http://visibleearth.nasa.gov/view.php?id=73934))
https://www.youtube.com/watch?v=ehYZAXfUaak
Random map generated from tiles.
https://www.youtube.com/watch?v=egEpr07jwMc
Moving around the map using the algorithm A-star (in the style of Diablo or Fallout 1-2)
https://www.youtube.com/watch?v=BVXhPPfoTZw
-
It is most impressive, Xammurapi. :D You're way ahead.
Also, to my fault, I must admit that imports indeed lack some vertex data. I think, it needs some fixes.
-
Can't Van Burren be continued?
-
If somebody is up to somehow getting somekind of tools, then yes. Otherwise - no.
-
If somebody is up to somehow getting somekind of tools, then yes. Otherwise - no.
Or use the fonline engine for it.. we could have 3D enviorments and it would make the game even more open for modders.
-
Or use the fonline engine for it.. we could have 3D enviorments and it would make the game even more open for modders.
This is analogous to how to re-build the great pyramids of Giza.
We know the architectural plans. Know how to use building materials and construction techniques.
But it will not have done ever.
Anyone who wants to do it - does not have the time, wealth, or power, and therefore not in a position to do so. The one who has the power, wealth, and time - has no desire, or just busy with other large-scale projects.
-
Or use the fonline engine for it.. we could have 3D enviorments and it would make the game even more open for modders.
That sounds like a plan. But I'm afraid the project might be too ambitious.
-
Well sadly most things are in a state of pause so I feel 3D environment is a bit too ambitious.
Still these assets could be real useful, a few tweaking with a 3d software be it wings, blender, max or anything else we could produce quite a lot of new sceneries with ease.
-
I think everything is possible to do but someone who really want make this is needed. Look at fonline - fallout 1 and 2 online, our dream has been made and still in development (TLA, 2238 and other servers). Only want we need is few people who can do it, have time and power and REALLY want.
-
The Van Buren engine, it is unfortunately a bit antiqued. Unity and FOnline are better suited now for this.
-
You're not going to do it because of property things and lack of resources (not just art, acting, storylines, etc.)
Honestly there was not much for use, game story was pretty ridiculous when they unveiled it, and something was reused in newer games as well.
-
The Van Buren engine, it is unfortunately a bit antiqued. Unity and FOnline are better suited now for this.
van buren engine is the only engine i could think of which would have be the best engine for a fallout 3 title ...
unitiy is great too but its something different ... because the vanburen or jefferson engine would have be a real improvement to fallout1 and 2 style ... but its just my opinion
-
From purist view, you may be right, I would like to see the VB S.P.E.C.I.A.L. System, too, but first, its property of Beth and still needs to be heavily overhauled. Replicating it with new features is the more comfortable solution.
Why didn't Mr.Cvetinsky modified Fallout engine for multiplayer?
-
Why didn't Mr.Cvetinsky modified Fallout engine for multiplayer?
sometimes make from scratch is easier than to redo the existing
-
Exactly.
-
Well, it is not only about multiplayer. With the FOnline engine, you can do pretty much whatever you want, unlike the Fo2 engine, which is hardcodet from a to z. It took years to get access to even just simple stuff... and this only via hooks and stuff into the engine with Sfall. So it's all nothing but some tricky hackery.
Simply the huge maps you can build in the FOnline engine just aren't possible in Fo1/2. Also editing the graphics - FOnline engine supports all kind of graphic formats, while Fo1/2 only eat converted frms with a limited set of colors, editing the sound, etc. etc. it is all so much easier and more convenient. Another example is the small terrain tiles. You don't have to use them at all. Nothing hinders you to just create a huge scene in a 3d programm, render it to 2d and put it into the game as is.
-
Listen to the man above, he knows about modding.
So if we'd decompile VB engine, we will still stand before a huge wall of tasks, we'd have to understand the foreign code from scratch and THEN, we could add new things.
Art is a different thing, though, even if i noticed that the VB art is somewhat bulky for Fallout scenery.
-
If anyone is interested and wants to see the resources Van Buren near, here is a playable web-builds:
Character customization (http://vaultcrawl.ru/xinoxano/odevashka/odevashka.html)
camera control: arrow keys or WASD,
in the interface, press the arrow keys to select an item or a button with the name to remove the item.
build is based on Flash
A trip to the desert (http://vaultcrawl.ru/xinoxano/pokatushka/WebPlayer.html)
Control: WASD and Space. build based on the technology Unity3d webplayer http://unity3d.com/webplayer/ because Flash does not support terrain
Generating random vault-map (http://vaultcrawl.ru/xinoxano/pathfind/WebPlayer.html)
Controls: Click the left mouse button on the floor or item indicates the place where the character should go. Movement of the mouse + hold the right button moves the camera. Mouse wheel changes the zoom of the camera. Left Control - activates a flamethrower. Left Shift: Increases movement speed.
ISOMETRIC button switches to the orthographic mode that is similar to the style of the classic series camera fallout. However, the shadow does not work in this mode and the light passes through the walls.
New Map button creates another level of the same size, but with a different arrangement of rooms and objects.
build based on the technology Unity3d webplayer http://unity3d.com/webplayer/ because Flash does not support some render features
-
Nice! Technology these days. :o
-
They are showcasing a lot of stuffs. Thanks for sharing them Xammurapi.
-
@xammurapi you are my god! Please recreate Van Buren for game via browser...
(http://i0.kym-cdn.com/photos/images/original/000/241/796/cac.png)
-
Thank you for your feedback.
I would love to join the team, which would deal with the creation of the Van Buren or Fallout or Fonline based on the technologies available in unity3d.
However, all the projects that I have found (eg Postworld) have zero activity.
And the creation of the game by one person is absolutely unreal.
Practical purpose for a single developer can only be a small casual game.
So that together waiting Wasteland 2 by Brian Fargo.
Which by the way, too, like is on unity3d
-
Just for fun.
(https://i.imgur.com/HXC4Amp.png)
video: http://youtu.be/dwAp87S3CLQ
web-build: http://vaultcrawl.ru/webplayer/AllChars/AllChars.html
VB male characters and all the fonline 3d male characters in one scene (except for a child to whom I have not found the texture).
Rigging of Fo3d characters made by me in Blender. Animation - VB
For correct display of webbuild most likely need a video card with shader model of the third version, because I used tessellation to the characters, so they looked at least a little more modern.
Retargeting animation made using system Unity3d Mecanim. Since the characters VB have distinguished the structure of the skeleton,
fo3d characters have glitch with "destabilizing" the legs. In VB, the root element is "root", located at ground level, the legs are not inherited from the pelvis, and from this root. When I did the rigging, I wasn't aware of this, taking the pelvis is the root element of the armature.
Theoretically, a person with sufficient knowledge of C# or JS, can make animation exporter. During playback of a scene, information on the status of each bone is available in each frame, there is information on the number of frames per second, so, all of this can lead to a standard speed of 30 frames per second and write to a file in the format BVH or FBX.
Sounds simple enough, but in practice difficult, at least for me.
-
Wow! Wish I could use these in Van Buren 8)
Good luck with your project!
-
Wow! Wish I could use these in Van Buren 8)
Good luck with your project!
Contact me via Skype! Maybe I can help.
-
Haha that mutant reminds me of the turtle ninja's