Jump to content
The Dark Mod Forums

Dragofer's Stuff


Dragofer

Recommended Posts

Very nice looking ship. Just dont make it too tight because I remember some problems in 1st officer room in your carrack. As a suggestion ship could have steam powered winches for sails and anchor like 19th century schooners. Since you cant really put many sailors on ship this would be perfect excuse for smaller crew.

Link to comment
Share on other sites

I'd be happy for others to use it before I do (a while still), though it still needs to be optimised a lot.

 

It's several months away, but there could definitely be a use for those ships in an upcoming project.

  • Like 1
Link to comment
Share on other sites

Man That is awesome. Absolutely well made so far and very impressive.

 

There is a pop about 141.00 in the exterior sound effect stream I think sort of broke the otherwise engrossing sound environment. I could just imagine creeping on and looking over my shoulder as the crack of a rope struck a mast.

Laptop:Metabox P370SM3- Intel Core i7-4800MQ- 2x GTX780M SLI- 16G 1600Mhz- 500G Samsung mSata-1TB Hitachi HDD- 120Hz LG 1080p.Desktops:i75930k-2x GTX980 SLI-16G 2133Mhz-Evo120GSSD-Swift PG278Q1440p Gsync.Spare:AMD A10-7850K-APU-8G 1866Mhz-seagate 4TB-120G ssd. LoL Old:P75-1:1FSB-8M ram 512MB Maxtor HDD-1MB Cirrus Logic video chip-still got the parts somewhere?First PC-Tandy 512K Color computer.

Link to comment
Share on other sites

Very nice looking ship. Just dont make it too tight because I remember some problems in 1st officer room in your carrack. As a suggestion ship could have steam powered winches for sails and anchor like 19th century schooners. Since you cant really put many sailors on ship this would be perfect excuse for smaller crew.

The problems of using a tight space are very familiar to me, I lost count of the number of times I wanted to extend the carack :P After my last experience this one will be more user-friendly. The rooms will use the whole width this time, and with the different hull this new ship has almost the same interior length and width as my old one despite being much smaller. At this point I'll also say that it takes almost the same time to build a smaller ship (exterior) as a larger ship.

Looks really good, the only crit I would have is the lack of hammers on the altar (assuming this is for TDM of course).

That was meant as a church of God, but with a few tweaks and extra patches the cross can turn into a Builder hammer.

Man That is awesome. Absolutely well made so far and very impressive.

 

There is a pop about 141.00 in the exterior sound effect stream I think sort of broke the otherwise engrossing sound environment. I could just imagine creeping on and looking over my shoulder as the crack of a rope struck a mast.

Thanks for your opinion :) - yeah, you can hear a car and someone speaking at some points in the recordings, so my plan is to take a clean 20 second piece and loop it.

 

That's quite stormy weather you're imagining there, my impression is that most of the sound the ropes make is the clattering in the wind and when the mooring ropes rub along the hull and make a creaking noise. But there's a decent ambient for very stormy seas too:

wind - http://freesound.org/people/deku/sounds/115332/

sea - http://freesound.org/people/kangaroovindaloo/sounds/246515/

Edited by Dragofer
Link to comment
Share on other sites

Very nice work young man, that ship is very impressive. My only crits/feed back are -

  • The darkwood used on the hull wont show up to well in-game as its too dark. Maybe change it for "textures/darkmod/wood/boards/ship_hull_dark"
  • The fence on the board plank woudnt be of much use for grabbing onto at the top near the ship. Fyi the handrail should be no more thna 48 units above the plank.
  • Very nice alter, but instead of a scross we should have a builder symbol/model.
Link to comment
Share on other sites

I get what your saying about creeks from the moorings rubbing against the hull. Thats very much part of the internal sound file I think. Environment effects anyone would be happy with but I didn't hear any poeople.

Edited by Tr00pertj

Laptop:Metabox P370SM3- Intel Core i7-4800MQ- 2x GTX780M SLI- 16G 1600Mhz- 500G Samsung mSata-1TB Hitachi HDD- 120Hz LG 1080p.Desktops:i75930k-2x GTX980 SLI-16G 2133Mhz-Evo120GSSD-Swift PG278Q1440p Gsync.Spare:AMD A10-7850K-APU-8G 1866Mhz-seagate 4TB-120G ssd. LoL Old:P75-1:1FSB-8M ram 512MB Maxtor HDD-1MB Cirrus Logic video chip-still got the parts somewhere?First PC-Tandy 512K Color computer.

Link to comment
Share on other sites

Sorry mate, did you say you made those "inside" DR?! Because that would be mental, you deserve some kind of award or something, those models look very refined, plausible you know. And theres a whole fleet of them!

 

Im not sure people are actually aware of the kind of work going on here. Amazing stuff, hopefully you'll put it to good use in your own mission?

 

BTW whats with all these creative work being modeled in DR, Airship Ballet's chests, these ships... :)

Edited by RPGista
  • Like 2
Link to comment
Share on other sites

Thanks! I'm glad to hear you like these.

 

inside DR?

 

Using DR is a bit of a habit - by now I'm familiar with the editor, unlike Blender. There are a lot of vertices to drag around, but it works eventually and it's much less technically involved, skipping things like unwrapping and exporting, and you can use the same controls you've practised in map-building already. Maybe this explains the latest trend in using DR this way.

 

Sometimes I wonder if there are differences between a patch (.ase) "model" and one in Blender, like performance, but then again in a patch ship it's much easier to turn off/on shadows and clipmodels or for someone else to make changes.

 

hopefully you'll put it to good use in your own mission?

 

Certainly, the sloop will be the only reliable connection between a settlement in Newfoundland and an outlying locale, and the tallship brings an unwelcome visitor. What fun mapping is :P

  • Like 1
Link to comment
Share on other sites

I've fixed this a while ago. Do you have the latest export script? (I barely remember greebo forgetting about adding it)

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I've fixed this a while ago. Do you have the latest export script? (I barely remember greebo forgetting about adding it)

I could have sworn I asked him to intergrate the latest script into the DR 2.03, here is a copy of it -

 

 

 

# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****

#TODO:

# Set the command name so that DarkRadiant recognises this file
__commandName__ = 'aseExport'
__commandDisplayName__ = 'Export ASE...'

# The actual algorithm called by DarkRadiant is contained in the execute() function
def execute():
    script = "Dark Radiant ASCII Scene Export (*.ase)"
    author = "Richard Bartlett, some additions by greebo and tels"
    version = "0.8"

    # Check if we have a valid selection

    selectionInfo = GlobalSelectionSystem.getSelectionInfo()

    # Don't allow empty selections or selected components only
    if selectionInfo.totalCount == 0 or selectionInfo.totalCount == selectionInfo.componentCount:
        errMsg = GlobalDialogManager.createMessageBox('No selection', 'Nothing selected, cannot run exporter.', Dialog.ERROR)
        errMsg.run()
        return

    shaderlist = []
    geomlist = []

    # simple linear triangulation of n-sided poly

    def triangulate(pointset):
        tris = []
        for count in range(1, len(pointset) - 1):
            tris.append([pointset[0], pointset[count], pointset[count + 1]])
        return tris

    # skin patch matrix with tris

    def skinmatrix(pointset, width, height):
        tris = []
        for h in range(height-1):
            for w in range(width-1):
                tris.append([pointset[w+(h*width)], pointset[w+1+(h*width)], pointset[w+width+(h*width)]])
                tris.append([pointset[w+1+(h*width)], pointset[w+1+width+(h*width)], pointset[w+width+(h*width)]])
        return tris

    def processBrush(brushnode):
        verts = []
        faces = []

        numfaces = brushnode.getNumFaces()
        for index in range(numfaces):
            facenode = brushnode.getFace(index)
            shader = facenode.getShader()

            # Tels: skip if caulk and no caulk should be exported
            if (shader == 'textures/common/caulk') and (int(GlobalRegistry.get('user/scripts/aseExport/exportcaulk'))) == 0:
                continue

            if not shader in shaderlist:
                shaderlist.append(shader)
            winding = facenode.getWinding()
            tris = triangulate([x+len(verts) for x in range(len(winding))])
            for x in tris:
                x.append(shaderlist.index(shader))
                faces.append(x)
            for x in reversed(winding):
                verts.append([x.vertex.x(), x.vertex.y(), x.vertex.z(), x.texcoord.x(), x.texcoord.y() * -1, x.normal.x(), x.normal.y(), x.normal.z()])

        geomlist.append([verts, faces])
        return

    def processPatch(patchnode):
        verts = []
        faces = []

        shader = patchnode.getShader()

        # Tels: skip if caulk and no caulk should be exported
        if shader == 'textures/common/caulk' and int(GlobalRegistry.get('user/scripts/aseExport/exportcaulk')) == 0:
            return

        if not shader in shaderlist:
            shaderlist.append(shader)
        mesh = patchnode.getTesselatedPatchMesh()
        for x in mesh.vertices:
            verts.append([x.vertex.x(), x.vertex.y(), x.vertex.z(), x.texcoord.x(), x.texcoord.y() * -1, x.normal.x(), x.normal.y(), x.normal.z()])
        tris = skinmatrix([x for x in range(len(verts))], mesh.width, mesh.height)
        for x in tris:
            x.append(shaderlist.index(shader))
            faces.append(x)

        geomlist.append([verts, faces])
        return

    # Branch on primitive nodes
    def processPrimitive(scenenode):
        if scenenode.isBrush():
            processBrush(scenenode.getBrush())
        elif scenenode.isPatch():
            processPatch(scenenode.getPatch())
        return

    # Traversor class to visit child primitives of entities
    class nodeVisitor(SceneNodeVisitor):
        def pre(self, scenenode):
            # Brush?
            if scenenode.isBrush():
                processBrush(scenenode.getBrush())
            # Patch?
            elif scenenode.isPatch():
                processPatch(scenenode.getPatch())

            # Traverse all child nodes, regardless of type
            return 1

    class dataCollector(SelectionVisitor):
        def visit(self, scenenode):

            if scenenode.isBrush() or scenenode.isPatch():
                processPrimitive(scenenode)
            elif scenenode.isEntity():
                # greebo: Found an entity, this could be a func_static or similar
                # Traverse children of this entity using a new walker
                nodewalker = nodeVisitor()
                scenenode.traverse(nodewalker)
            else:
                print('WARNING: unsupported node type selected. Skipping: ' + scenenode.getNodeType())

    # Dialog
    dialog = GlobalDialogManager.createDialog(script + 'v' + version)

    # Add an entry box and remember the handle
    fileHandle = dialog.addEntryBox("Filename:")
    dialog.setElementValue(fileHandle, GlobalRegistry.get('user/scripts/aseExport/recentFilename'))

    # Add an entry box and remember the handle
    pathHandle = dialog.addPathEntry("Save path:", True)
    dialog.setElementValue(pathHandle, GlobalRegistry.get('user/scripts/aseExport/recentPath'))

    # Add a checkbox
    centerObjectsHandle = dialog.addCheckbox("Center objects at 0,0,0 origin")
    dialog.setElementValue(centerObjectsHandle, GlobalRegistry.get('user/scripts/aseExport/centerObjects'))

    # Add another checkbox
    exportCaulkHandle = dialog.addCheckbox("Export caulked faces")
    dialog.setElementValue(exportCaulkHandle, GlobalRegistry.get('user/scripts/aseExport/exportcaulk'))

    if dialog.run() == Dialog.OK:
        fullpath = dialog.getElementValue(pathHandle) + '/' + dialog.getElementValue(fileHandle)
        if not fullpath.endswith('.ase'):
            fullpath = fullpath + '.ase'

        # Save the path for later use
        GlobalRegistry.set('user/scripts/aseExport/recentFilename', dialog.getElementValue(fileHandle))
        GlobalRegistry.set('user/scripts/aseExport/recentPath', dialog.getElementValue(pathHandle))
        GlobalRegistry.set('user/scripts/aseExport/centerObjects', dialog.getElementValue(centerObjectsHandle))
        GlobalRegistry.set('user/scripts/aseExport/exportcaulk', dialog.getElementValue(exportCaulkHandle))

        try:
            file = open(fullpath, 'r')
            file.close()
            prompt = GlobalDialogManager.createMessageBox('Warning', 'The file ' + fullpath + ' already exists. Do you wish to overwrite it?', Dialog.ASK)
            if prompt.run() == Dialog.YES:
                overwrite = True
            else:
                overwrite = False
        except IOError:
            overwrite = True

        if overwrite:

            # Tels: Only collect the data if we are going to export it
            walker = dataCollector()
            GlobalSelectionSystem.foreachSelected(walker)

            # greebo: Check if we should center objects at the 0,0,0 origin
            if int(dialog.getElementValue(centerObjectsHandle)) == 1:
                #center objects at 0,0,0
                xlist = []
                ylist = []
                zlist = []
                for item in geomlist:
                    for vert in item[0]:
                        xlist.append(vert[0])
                        ylist.append(vert[1])
                        zlist.append(vert[2])
                xcenter=(max(xlist)+min(xlist))/2
                ycenter=(max(ylist)+min(ylist))/2
                zcenter=(max(zlist)+min(zlist))/2
                for item in geomlist:
                    for vert in item[0]:
                        vert[0] = vert[0] - xcenter
                        vert[1] = vert[1] - ycenter
                        vert[2] = vert[2] - zcenter

            # split objects that do not share the same texture on all faces
            for x in geomlist:
                texlist = []
                for data in x[1]:
                    texlist.append(data[3])
                if len(set(texlist)) > 1:
                    temp = []
                    for texture in set(texlist):
                        vertlist = []
                        facelist = []
                        for data in x[1]:
                            if data[3] == texture:
                                facelist.append(data)
                        usedverts = []
                        for face in facelist:
                            usedverts.extend(face[0:3])
                        usedverts = list(set(usedverts))
                        for index in usedverts:
                            vertlist.append(x[0][index])
                        newfacelist = []
                        for face in facelist:
                            newfacelist.append([vertlist.index(x[0][face[0]]),vertlist.index(x[0][face[1]]),vertlist.index(x[0][face[2]]),face[3]])
                        temp.append([vertlist, newfacelist])
                    del geomlist[geomlist.index(x)]
                    geomlist.extend(temp)

            scene = '''\t*SCENE_FILENAME "{0}"
\t*SCENE_FIRSTFRAME 0
\t*SCENE_LASTFRAME 100
\t*SCENE_FRAMESPEED 30
\t*SCENE_TICKSPERFRAME 160
\t*SCENE_BACKGROUND_STATIC 0.0000\t0.0000\t0.0000
\t*SCENE_AMBIENT_STATIC 0.0000\t0.0000\t0.0000'''.format(GlobalMap.getMapName())

            materials = str()
            for x in shaderlist:
                materials = materials + '''\t*MATERIAL {0} {{
\t\t*MATERIAL_NAME "{1}"
\t\t*MATERIAL_CLASS "Standard"
\t\t*MATERIAL_AMBIENT 0.5882\t0.5882\t0.5882
\t\t*MATERIAL_DIFFUSE 0.5882\t0.5882\t0.5882
\t\t*MATERIAL_SPECULAR 0.9000\t0.9000\t0.9000
\t\t*MATERIAL_SHINE 0.1000
\t\t*MATERIAL_SHINESTRENGTH 0.0000
\t\t*MATERIAL_TRANSPARENCY 0.0000
\t\t*MATERIAL_WIRESIZE 1.0000
\t\t*MATERIAL_SHADING Blinn
\t\t*MATERIAL_XP_FALLOFF 0.0000
\t\t*MATERIAL_SELFILLUM 0.0000
\t\t*MATERIAL_FALLOFF In
\t\t*MATERIAL_XP_TYPE Filter
\t\t*MAP_DIFFUSE {{
\t\t\t*MAP_NAME "{2}"
\t\t\t*MAP_CLASS "Bitmap"
\t\t\t*MAP_SUBNO 1
\t\t\t*MAP_AMOUNT 1.0000
\t\t\t*BITMAP "\\\\purgatory\\purgatory\\doom\\base\{2}"
\t\t\t*MAP_TYPE Screen
\t\t\t*UVW_U_OFFSET 0.0000
\t\t\t*UVW_V_OFFSET 0.0000
\t\t\t*UVW_U_TILING 1.0000
\t\t\t*UVW_V_TILING 1.0000
\t\t\t*UVW_ANGLE 0.0000
\t\t\t*UVW_BLUR 1.0000
\t\t\t*UVW_BLUR_OFFSET 0.0000
\t\t\t*UVW_NOUSE_AMT 1.0000
\t\t\t*UVW_NOISE_SIZE 1.0000
\t\t\t*UVW_NOISE_LEVEL 1
\t\t\t*UVW_NOISE_PHASE 0.0000
\t\t\t*BITMAP_FILTER Pyramidal
\t\t}}
\t}}
'''.format(shaderlist.index(x), x, x.replace('/','\\'))

            geomobjects = str()

            for x in geomlist:
                # x[0] = vertices
                # vert[0] - vert[2] = vertex coords
                # vert[3] - vert[4] = texture coords
                # vert[5] - vert[7] = normal
                # x[1] = faces
                vertlist = str()
                for count, data in enumerate(x[0]):
                    vertlist = vertlist + '''\t\t\t*MESH_VERTEX {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(count, data[0], data[1], data[2])
                facelist = str()
                for count, data in enumerate(x[1]):
                    facelist = facelist + '''\t\t\t*MESH_FACE     {0}:  A:   {1} B:   {2} C:     {3} AB:       0 BC:    0 CA:    0\t *MESH_SMOOTHING 1 \t*MESH_MTLID {4}\n'''.format(count, data[0], data[1], data[2], data[3])
                tvertlist = str()
                for count, data in enumerate(x[0]):
                    tvertlist = tvertlist + '''\t\t\t*MESH_TVERT {0}\t{1: 10.4f}\t{2: 10.4f}\t0.0000\n'''.format(count, data[3], data[4])
                tfacelist = str()
                for count, data in enumerate(x[1]):
                    tfacelist = tfacelist + '''\t\t\t*MESH_TFACE {0}\t{1}\t{2}\t{3}\n'''.format(count, data[0], data[1], data[2])
                cfacelist = str()
                for count, data in enumerate(x[1]):
                    cfacelist = cfacelist + '''\t\t\t*MESH_CFACE {0}\t0\t0\t0\n'''.format(count)

                normals = str()
                for count, data in enumerate(x[1]):
                    normals += '''\t\t\t*MESH_FACENORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(count, x[0][data[0]][5], x[0][data[0]][6], x[0][data[0]][7]) # greebo: use first vertex normal as face normal
                    normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[0], x[0][data[0]][5], x[0][data[0]][6], x[0][data[0]][7])
                    normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[1], x[0][data[1]][5], x[0][data[1]][6], x[0][data[1]][7])
                    normals += '''\t\t\t\t*MESH_VERTEXNORMAL {0}\t{1: 10.4f}\t{2: 10.4f}\t{3: 10.4f}\n'''.format(data[2], x[0][data[2]][5], x[0][data[2]][6], x[0][data[2]][7])

                if len(x[1]) == 0:
                    continue

                geomobjects = geomobjects + '''*GEOMOBJECT {{
\t*NODE_NAME "{0}"
\t*NODE_TM {{
\t\t*NODE_NAME "{0}"
\t\t*INHERIT_POS 0 0 0
\t\t*INHERIT_ROT 0 0 0
\t\t*INHERIT_SCL 0 0 0
\t\t*TM_ROW0 1.0000\t0.0000\t0.0000
\t\t*TM_ROW1 0.0000\t1.0000\t0.0000
\t\t*TM_ROW2 0.0000\t0.0000\t1.0000
\t\t*TM_ROW3 0.0000\t0.0000\t0.0000
\t\t*TM_POS 0.0000\t0.0000\t0.0000
\t\t*TM_ROTAXIS 0.0000\t0.0000\t0.0000
\t\t*TM_ROTANGLE 0.0000
\t\t*TM_SCALE 1.0000\t1.0000\t1.0000
\t\t*TM_SCALEAXIS 0.0000\t0.0000\t0.0000
\t\t*TM_SCALEAXISANG 0.0000
\t}}
\t*MESH {{
\t\t*TIMEVALUE 0
\t\t*MESH_NUMVERTEX {1}
\t\t*MESH_NUMFACES {2}
\t\t*MESH_VERTEX_LIST {{
{3}\t\t}}
\t\t*MESH_FACE_LIST {{
{4}\t\t}}
\t\t*MESH_NUMTVERTEX {5}
\t\t*MESH_TVERTLIST {{
{6}\t\t}}
\t\t*MESH_NUMTVFACES {7}
\t\t*MESH_TFACELIST {{
{8}\t\t}}
\t\t*MESH_NUMCVERTEX 1
\t\t*MESH_CVERTLIST {{
\t\t\t*MESH_VERTCOL 0\t1.0000\t1.0000\t1.0000
\t\t}}
\t\t*MESH_NUMCVFACES {9}
\t\t*MESH_CFACELIST {{
{10}\t\t}}
\t\t*MESH_NORMALS {{
{11}\t\t}}
\t}}
\t*PROP_MOTIONBLUR 0
\t*PROP_CASTSHADOW 1
\t*PROP_RECVSHADOW 1
\t*MATERIAL_REF {12}
}}\n'''.format('mesh' + str(geomlist.index(x)), \
        len(x[0]), \
        len(x[1]), \
        vertlist, \
        facelist, \
        len(x[0]), \
        tvertlist, \
        len(x[1]), \
        tfacelist, \
        len(x[1]), \
        cfacelist, \
        normals, \
        x[1][0][3]) # material reference from first face

                data = '''*3DSMAX_ASCIIEXPORT\t200
*COMMENT "{0} v{1}"
*SCENE {{
{2}
}}
*MATERIAL_LIST {{
\t*MATERIAL_COUNT {3}
{4}}}
{5}'''.format(script, version, scene, len(shaderlist), materials, geomobjects)

                # Write the compiled data to the output file
                file = open(fullpath, 'w')
                file.write(data)
                file.close()

# __executeCommand__ evaluates to true after DarkRadiant has successfully initialised
if __executeCommand__:
    execute()

 

 

Link to comment
Share on other sites

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

The blend export script works like the normal export script if you don't use the blend texture. ;)

 

I don't have a fixed version of the original script lying around, although I think I've uploaded it once here. But I would have to search it. It's easier if you just use that one.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

  • 3 weeks later...

Agreed, a lot of these incredably impressive models will have to be added to the mod, the stagecoach while impressive is a tad too modern. But on the subject of the stagecoash, you should make one thats static and closed aswell for mappers to use (will have less tris with no interior etc)

 

@Dragofer, can you PM a link to all the models you have made and I will go through them and add all the apropriate ones to the SVN so they are part of the eventual 2.04 update.

Link to comment
Share on other sites

I don't think the stage coaches are especially modern.

 

"By the mid 17th century, a basic stagecoach infrastructure had been put in place.[6] The first stagecoach route started in 1610 and ran from Edinburgh to Leith"

 

It's pretty damn impressive, but what format is it? It's harder to include assets that aren't models or entities.

  • Like 1
Link to comment
Share on other sites

I don't think the stage coaches are especially modern.

 

Agreed, and they would make an excellent addition to the mod.

 

Speaking on the topic of what gets added to the core mod how does that process work? is it upto just whoever places the models in the SVN or do you guys discuss things behind the scenes? or is it just one person deciding what they think should be added or not?

Link to comment
Share on other sites

Thanks for your comments :)

 

Agreed, a lot of these incredably impressive models will have to be added to the mod, the stagecoach while impressive is a tad too modern. But on the subject of the stagecoash, you should make one thats static and closed aswell for mappers to use (will have less tris with no interior etc)

I've followed your suggestion and stripped out the interior. That reduced the total polys by 1000 and now 2100 polys cast shadows. And it led to a fun discovery: the dark wood is actually a colorme texture! I've made another version of this coach that uses the colorme texture for the trim too, so you can select the trim or body panels and give them new colours with the _color spawnarg. A small downside is that the trim looks less sharp because the original texture gives a shadow at the edges.

 

Exterior - [Obsolete]

Exterior, colorme - [Obsolete]

 

vgHvNXS.jpg

 

 

 

@Dragofer, can you PM a link to all the models you have made and I will go through them and add all the apropriate ones to the SVN so they are part of the eventual 2.04 update.

 

Sure, a lot of these things just need to be fixed up so they work properly.

 

I don't think the stage coaches are especially modern.

 

"By the mid 17th century, a basic stagecoach infrastructure had been put in place.%5B6%5D The first stagecoach route started in 1610 and ran from Edinburgh to Leith"

 

It's pretty damn impressive, but what format is it? It's harder to include assets that aren't models or entities.

They're all a collection of patches made in DR. The components of the stagecoach could be converted into .ase models so they show up in the create models list, but a prefab would come with preset spawnargs and can be tweaked easily by other mappers.

Edited by Dragofer
  • Like 4
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...