VDL Definition Files for Custom Content

EQ2Emulator Development forum.

Moderator: Team Members

Post Reply
Tiger
Posts: 18
Joined: Thu Dec 25, 2008 1:20 pm
Location: New York

VDL Definition Files for Custom Content

Post by Tiger » Tue Nov 06, 2012 5:13 pm

As you may or might not know, in the client folder (at least on the full client, the streaming client confuses me), there is a file called ClientVDL.BVD. This file contains things such as character creation data, and other things such as the options you see in the options window. The file is a binary file on modern clients but at least on the character creation demo (you can still download it here yes I know you need a free account for gamespot, but aside for the demo being given out to people that preorderd the demo is a GameSpot exclusive:
http://www.gamespot.com/everquest-ii/do ... l-6116708/

The stuff in the VDL file is plain ASCII text. However you first need to extract the clientvdl file from the character creation demo, which you can use the following "QuickBMS" script for:

Code: Select all

log MEMORY_FILE 0 0 ;
ImpType Standard ;
ComType zlib_noerror ;
Get SIZE ASIZE 0 ;
GoTo 0 0 ;
SavePos gold 0 ;
For jjj = 0 To SIZE ;
GoTo gold 0 ;
Get ucsize Long 0 ;
SavePos base 0 ;
GoTo ucsize 0 SEEK_CUR ;
SavePos gold 0 ;
CLog MEMORY_FILE base ucsize 350687200 0 ;
GoTo 0 MEMORY_FILE ;
Get namelength Long MEMORY_FILE ;
Get filesize Long MEMORY_FILE ;
GetDString name namelength  MEMORY_FILE ;
SavePos basex MEMORY_FILE ;
Log name basex filesize MEMORY_FILE ;
log MEMORY_FILE 0 0 ;
Next jjj ;
Use it with the free program QuickBMS from here:
http://aluigi.altervista.org/quickbms.htm
Use the script on the "DemoCreate.vpk" file from the demo.
Now you will have a ClientVDL folder among other stuff.
To use the ClientVDL folder with the full EQ2 client, just copy over the clientVDL folder to the folder where you everquest2.exe are, and then remove the ClientVDL.BVD file (please back it up first very important, but them remove it completely from the everquest 2 directory.
Now there are some redundancies between what is brought over from the server, and what is used from you clientvdl file, but I am pretty sure that Sony uses VDL files themselves on their server and then this gets translated into packets. I reason this because "style guides" for things like spawns and mounts are given in the "runtimeVDL" folder (use the vpk tool here http://eq2.blazlabs.com/) and take a look at some examples.
Some things I have managed to change (and it is buggy for example the eq2 server pack takes probably 6 times longer to reach the character creation scene using the clientvdl folder vs clientvdl.bvd, but is very forgiving, and will tell you exactly what is wrong inside a .vdl file and will ignore any errors. For example here the vdl file for the character creation definitions for male Iksar, also note that in a vdl things are commented out by */ and /* and infact with some races you get the extra option that works both in the demo, and the full client for the skull-shape sliders. Male Kerras had commented out manes, which you can uncomment out by removing the * manes will then work in the demo (the demo does not like 64 bit operating systems, , or even any new versions of directx, so use the trial of the program swiftshader if you want to check out the demo), manes do not work in retail eq2. However you can mess around (there are limits because the left and right slider limits did not change even in the demo, must be in the .exe somewhere), and say put a wolf in place of say the iksar, or add an option for say chest armor, ect, even have custom class descriptions ect, also playing around I even managed to make the ears on the lion (4 legged lion) get much bigger, because some bone names much match. The scary thing is that the server will go along mostly normally, so you could create a wolf, and the server will keep it as a wolf when entering the game. There is so much more I could say. But any ways, if any one has a very old version of eq2, there are 2 folders that will hold even more .vdls (the "server" folder, and the "mudlib" folder) I do not have an old version of eq2, but it would be very worth looking in to as it is very common for betas and new versions of games to have more things client side for early releases before moving server side (is even mentioned in some vdl), I now present you with the iksar_male.vdl from the clientvdl/customization folder (do not confuse with the "shader" folder files that also use the .vdl format that any ordinary run of the mill client will have):

Code: Select all

//------------------------------------------------------------------------------
// File:    Customizations.vdl
//------------------------------------------------------------------------------

CustomizationDefinition
{
    aValueSliders = 
    [
        CustomizationValueSlider
        {
            sDisplayCategory = "Body"
            sDisplayName = "Size"
            sFunctionName = "funScale"
            sLeftDisplayName = "Smaller"
            sRightDisplayName = "Larger"
            fLeftValue = 0.95
            fRightValue = 1.05
        }
    ]

    aMorphRegions =
    [
/*        CustomizationMorphRegion
        {
            sDisplayCategory = "Head"
            sDisplayName = "Skull Shape"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/skull/skull_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "skull1"
                    sLeftDisplayName = "Forward"
                    sRightDisplayName = "Backward"
                    sLeftAnimFileName = "forward_"
                    sRightAnimFileName = "backward_"
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "skull2"
                    sLeftDisplayName = "Narrow"
                    sRightDisplayName = "Wide"
                    sLeftAnimFileName = "narrow_"
                    sRightAnimFileName = "wide_"
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "skull3"
                    sLeftDisplayName = "Short"
                    sRightDisplayName = "Tall"
                    sLeftAnimFileName = "short.anim"
                    sRightAnimFileName = "tall.anim"
                }
            ]
        }*/
        CustomizationMorphRegion
        {
            sDisplayCategory = "Eyes"
            sDisplayName = "Eyes"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/eyes/eyes_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "eyes1"
                    sLeftDisplayName = "Tilt Down"
                    sRightDisplayName = "Tilt Up"
                    sLeftAnimFileName = "tilt_down.anim"
                    sRightAnimFileName = "tilt_up.anim"
                    fLeftValueCap = -0.8
                    fRightValueCap = 0.8
                }
            ]
        }
/*        CustomizationMorphRegion
        {
            sDisplayCategory = "Head"
            sDisplayName = "Ears"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/ears/ears_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "ears1"
                    sLeftDisplayName = "Large"
                    sRightDisplayName = "Small"
                    sLeftAnimFileName = "large_"
                    sRightAnimFileName = "small_"
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "ears2"
                    sLeftDisplayName = "High"
                    sRightDisplayName = "Low"
                    sLeftAnimFileName = "high.anim"
                    sRightAnimFileName = "low.anim"
                }
            ]
        }*/

        CustomizationMorphRegion
        {
            sDisplayCategory = "Eyes"
            sDisplayName = "Eye Brow"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/brow4axis/brow_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "brow1"
                    sLeftDisplayName = "Down"
                    sRightDisplayName = "Up"
                    sLeftAnimFileName = "down_"
                    sRightAnimFileName = "up_"
                    fLeftValueCap = -0.8
                    fRightValueCap = 0.6
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "brow2"
                    sLeftDisplayName = "Curved"
                    sRightDisplayName = "Straight"
                    sLeftAnimFileName = "curved_"
                    sRightAnimFileName = "straight_"
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "brow3"
                    sLeftDisplayName = "Angle Down"
                    sRightDisplayName = "Angle Up"
                    sLeftAnimFileName = "angledown.anim"
                    sRightAnimFileName = "angleup.anim"
                }
            ]
        }
        
        CustomizationMorphRegion
        {
            sDisplayCategory = "Head"
            sDisplayName = "Cheeks"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/cheeks/cheeks_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "cheeks1"
                    sLeftDisplayName = "Full"
                    sRightDisplayName = "Thin"
                    sLeftAnimFileName = "full_"
                    sRightAnimFileName = "thin_"
                    fLeftValueCap = -0.2
                    fRightValueCap = 0.1
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "cheeks2"
                    sLeftDisplayName = "High"
                    sRightDisplayName = "Low"
                    sLeftAnimFileName = "high.anim"
                    sRightAnimFileName = "low.anim"
                    fLeftValueCap = -0.1
                    fRightValueCap = 0.5
                }
            ]
        }
        
        CustomizationMorphRegion
        {
            sDisplayCategory = "Head"
            sDisplayName = "Chin"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/chin/chin_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "chin1"
                    sLeftDisplayName = "Narrow"
                    sRightDisplayName = "Wide"
                    sLeftAnimFileName = "narrow_"
                    sRightAnimFileName = "wide_"
                    fLeftValueCap = -0.5
                    fRightValueCap = 0.9
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "chin2"
                    sLeftDisplayName = "Short"
                    sRightDisplayName = "Long"
                    sLeftAnimFileName = "short_"
                    sRightAnimFileName = "long_"
                    fLeftValueCap = -0.7
                    fRightValueCap = 0.9
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "chin3"
                    sLeftDisplayName = "Thick"
                    sRightDisplayName = "Thin"
                    sLeftAnimFileName = "thick.anim"
                    sRightAnimFileName = "thin.anim"
                    fLeftValueCap = -0.8
                    fRightValueCap = 0.8
                }
            ]
        }        
        CustomizationMorphRegion
        {
            sDisplayCategory = "Head"
            sDisplayName = "Lips"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/lips/lips_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "mouth1"
                    sLeftDisplayName = "Upturn"
                    sRightDisplayName = "Downturn"
                    sLeftAnimFileName = "upturn_"
                    sRightAnimFileName = "downturn_"
                    fLeftValueCap = -0.8
                    fRightValueCap = 0.3
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "mouth2"
                    sLeftDisplayName = "Full"
                    sRightDisplayName = "Thin"
                    sLeftAnimFileName = "full_"
                    sRightAnimFileName = "thin_"
                    fLeftValueCap = -0.4
                    fRightValueCap = 0.8
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "mouth3"
                    sLeftDisplayName = "Narrow"
                    sRightDisplayName = "Wide"
                    sLeftAnimFileName = "narrow.anim"
                    sRightAnimFileName = "wide.anim"
                    fLeftValueCap = -0.9
                    fRightValueCap = 0.4
                }
            ]
        }
        
        CustomizationMorphRegion
        {
            sDisplayCategory = "Head"
            sDisplayName = "Nose"
            sAnimationRoot = "Cooked/Characters/EC/core/customizations/humanfemale/nose4axis/nose_"
            aSliders =
            [
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "nose1"
                    sLeftDisplayName = "Tilt Down"
                    sRightDisplayName = "Tilt Up"
                    sLeftAnimFileName = "tiltdown_"
                    sRightAnimFileName = "tiltup_"
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "nose2"
                    sLeftDisplayName = "Skinny"
                    sRightDisplayName = "Wide"
                    sLeftAnimFileName = "skinny_"
                    sRightAnimFileName = "wide_"
                    fLeftValueCap = -0.9
                    fRightValueCap = 0.3
                }
                CustomizationMorphSlider
                {
                    sCustomMorphSliderSlot = "nose3"
                    sLeftDisplayName = "Short"
                    sRightDisplayName = "Long"
                    sLeftAnimFileName = "short.anim"
                    sRightAnimFileName = "long.anim"
                    fLeftValueCap = -0.5
                    fRightValueCap = 0.9
                }
            ]
        }                
    ]

    aSlots =
    [
    	CustomizationSlot
        {
            sDisplayCategory = "Crest"
            sDisplayName = "Crest"
            sSlot = "hair"
            aAppearanceNodes =
            [
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Bald"
                    sAppearance = "accessories/hair/hair000"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Serpent's Crown"
                    sAppearance = "accessories/hair/hair001"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Broodling Quills"
                    sAppearance = "accessories/hair/hair002"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Gaze of Pain"
                    sAppearance = "accessories/hair/hair003"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Crown of Phara-Dar"
                    sAppearance = "accessories/hair/hair004"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Crest of Timorous"
                    sAppearance = "accessories/hair/hair005"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Basilisk's Hood"
                    sAppearance = "accessories/hair/hair006"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Ridge of Torsis"
                    sAppearance = "accessories/hair/hair007"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Danek's Maw"
                    sAppearance = "accessories/hair/hair008"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Faydedar's Ridge"
                    sAppearance = "accessories/hair/hair009"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Hood of Trakanon"
                    sAppearance = "accessories/hair/hair010"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Sebilite's Plume"
                    sAppearance = "accessories/hair/hair011"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Emerald Thorns"
                    sAppearance = "accessories/hair/hair012"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Ridge of Charsis"
                    sAppearance = "accessories/hair/hair013"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Trakanon's Spine"
                    sAppearance = "accessories/hair/hair014"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Dragon's Fang"
                    sAppearance = "accessories/hair/hair015"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Sathir's Scowl"
                    sAppearance = "accessories/hair/hair016"
                }
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Barbs of Thule"
                    sAppearance = "accessories/hair/hair017"
                }      
                /*CustomizationAppearanceEntry
                {
                    sDisplayName = "Cazic's Grin"
                    sAppearance = "accessories/hair/hair017"
                }  
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Gift of the Scale"
                    sAppearance = "accessories/hair/hair017"
                }  
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Birthright of Cabilis"
                    sAppearance = "accessories/hair/hair017"
                }  
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Scars of Scale"
                    sAppearance = "accessories/hair/hair017"
                }  
                CustomizationAppearanceEntry
                {
                    sDisplayName = "Mark of the Ring"
                    sAppearance = "accessories/hair/hair017"
                }*/                   
            ]
        }

    	CustomizationSlot
        {
            sDisplayCategory = "Scales"
            sDisplayName = "Scale Pattern"
            sSlot = ""
            aAppearanceNodes =
            [
                CustomizationAppearanceEntry
                {
                    sDisplayName = "The Serpent"
                    sAppearance = "ec/pc/iksar/iksar_male"
                }

            ]
        }
    ]

    aTintRegions =
    [
    
        CustomizationTintRegion
        {
            sDisplayCategory = "Body"
            sDisplayName = "Skin Color"
            aTint1Slots =
            [
                "base"
                "hair"
                "beard"
            ]
            sTexture = "cooked/ui/tints/iksar_skin.dds"
            vBaseTint = ( 1.00 1.00 1.00 )
        }
        CustomizationTintRegion
        {
            sDisplayCategory = "Eyes"
            sDisplayName = "Eye Color"
            aTint2Slots =
            [
                "base"
            ]
            sTexture = "cooked/ui/tints/human_eyes.dds"
            vBaseTint = ( 1.0 1.0 1.0 )
        }
        CustomizationTintRegion
        {
            sDisplayCategory = "Body"
            sDisplayName = "Shirt"
            aTint1Slots =
            [
                "naked_chest"
            ]
            sTexture = "cooked/ui/tints/halfelf_hair.dds"
            vBaseTint = ( 0.7 0.7 0.7 )
        }        
        CustomizationTintRegion
        {
            sDisplayCategory = "Body"
            sDisplayName = "Pants"
            aTint1Slots =
            [
                "naked_legs"
            ]
            sTexture = "cooked/ui/tints/halfelf_hair.dds"
            vBaseTint = ( 0.7 0.7 0.7 )
        }                
    ]
}
Some more:

Code: Select all

RaceInfoLore
{
    race = "kerran"

    summary = "Kerra worship the spirits of the land and those of their ancestors.  Their often docile demeanor masks the fearsome and powerful predators that they are."

    description = "The Kerra are a feline race with extreme grace and agility. Their fur patterns range from stripes to spots to solid colors. Their long bodies make them slightly taller than Humans, though they tend to hunch slightly. Female Kerra are a bit larger than males, a fact that has contributed to their development as a matriarchal culture.\n\nDue to their natural agility, Kerra make excellent Brawlers and skilled Scouts. They tend to shy away from higher forms of magic, although many do become Conjurors. In recent times a splinter group of Kerra has become fascinated with necromancy, studying the dark art that once almost destroyed their people in hopes of turning it against those who initiated their suffering.\n\nKerra religion is shamanistic in nature, worshiping no specific deity but honoring the spirits of the land and those of their ancestors. Females are most often the Priests and leaders while males provide food and protect the tribe."

    history = "The Kerra trace their ancestry back to their first great leader, Kejaan. He traveled the continent of Odus, uniting the various tribes into one kingdom.\n\nThis era of peace and prosperity came to an end when Erud and his High Men appeared on Odus and began to take over much of the land that belonged to the Kerra. With the arrival of these outsiders came a great plague that infected many Kerra, causing mass deaths. The Kerra blamed the Heretics, whose study of necromancy brought a new darkness to their land. Kejaan himself eventually succumbed to the plague, leaving his son Vah Kerrath as leader.\n\nDuring the civil war between the Erudites and the Heretics, a huge explosion of mystical forces blasted a giant hole into the ground and teleported an entire Kerran village to Luclin. Vah Kerrath and the other leaders--a noble bloodline of Kerra known as the Vah Shir--survived this journey and went on to develop their own culture on the dark side of the moon.\n\nMost of the surviving Kerra on Norrath left Odus, fleeing westward to settle Kerra Isle. Other tribes established an island colony in Erud's Crossing and a village deep in the Stonebrunt Mountains. After travel to Luclin was reestablished, some of the Vah Shir returned to Norrath seeking a return to a simpler way of life. This led to some of them intermingling with the Kerra, thereby infusing the race with the Vah Shir's greater size and strength."

    role_playing = "The prime motivation for all Kerra is the preservation of their people and culture, and as a result they tend to isolate themselves from the other races. Mingling with outsiders has led only to sorrow, so while they accept the need to take shelter in the Human cities they avoid contact with non-Kerra. This is especially true in the case of the Erudites, with whom they have a long and painful history.\n\nThe Kerra are noble creatures who will, more often than not, honor their word. But due to their instinctive distrust of other races it is rare that they will befriend an outsider. The long years of suffering endured by their ancestors will never be forgotten, and it is difficult for them to relate to races that have not experienced similar hardships.\n\nThe Kerra are clever and perceptive, but they are a people of few words. They tend to be rather reserved around members of different races and are especially reluctant to reveal their personal feelings and beliefs. When in the presence of other Kerra, however, they are quite comfortable and open. The Kerra care deeply for one another and display this familial affection whenever they are in the company of their kin."
}
Last edited by John Adams on Tue Nov 06, 2012 7:55 pm, edited 1 time in total.
Reason: Fix URL tags

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: VDL Definition Files for Custom Content

Post by John Adams » Tue Nov 06, 2012 7:55 pm

Great info, thanks for posting it. Give us some time to absorb it.

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests