(WIP) Lands of Intrigue development thread

Thanks to @Proleric guidance i’m almost there on pre-spawn customizing npcs.

In this case using NESS.

The modification goes in the spawn_main.nss.

#include “nw_inc_gff” is needed on top.

    // Validate sSpawnTag
    if (sTemplate != "")
    {
        // Spawn
        if (nSpawnCamp == TRUE)
        {
            oSpawned = CampSpawn(oSpawn, sTemplate, lSpawnLocation);
            RecordSpawned(oSpawn, oSpawned, lHome, lEntranceExit, fSpawnFacing);
        }
        else
        {
            //This is original code replaced by the "if (nObjectType == 1) {..." secuence
            //We don't want any customization if oSpawned is not creature.
            //oSpawned = CreateObject(nObjectType, sTemplate, lSpawnLocation);
            if (nObjectType == 1) {
                json jTemplate = TemplateToJson (sTemplate, RESTYPE_UTC);
                int  iGender = JsonGetInt (GffGetByte (jTemplate, "Gender"));
                int  iApp    = JsonGetInt (GffGetWord (jTemplate, "Appearance_Type"));
                if ((iApp > -1 && iApp < 7) && iGender == 2 ) {
                    jTemplate = GffReplaceByte(jTemplate, "Gender", GENDER_FEMALE);
                }
                oSpawned = JsonToObject (jTemplate, lSpawnLocation, OBJECT_INVALID, TRUE);
            } else {
                oSpawned = CreateObject(nObjectType, sTemplate, lSpawnLocation);
            }
            SpawnDelayDebug(oSpawn, "spawned " + ObjectToString(oSpawned));
            RecordSpawned(oSpawn, oSpawned, lHome, lEntranceExit,
               fSpawnFacing);
            SetupSpawned(oSpawn, oSpawned, lHome, nTimeNow, nWalkToHome);
        }
    }
}

If Gender isn’t set to Both on the UTC and the appearance isn’t a playable race it won’t change anything.

To do:
Set up a random chance for gender 0/1
Set up a proper soundset & make a workaround for the vanilla spawn system.

B.

PS.:

                json voiceSet;
                int voiceFile;
                json jTemplate = TemplateToJson (sTemplate, RESTYPE_UTC);
                int  iGender = JsonGetInt (GffGetByte (jTemplate, "Gender"));
                int  iApp    = JsonGetInt (GffGetWord (jTemplate, "Appearance_Type"));
                if ((iApp > -1 && iApp < 7) && iGender == 2 ) {
                    if (d3(1) == 1) {
                        //female
                        iGender = 1;
                        voiceSet = JsonParse ("[357,358,359,360,361]");
					} else {
                        //male
                        iGender = 0;
                        voiceSet = JsonParse ("[363,364,365,366,367,368]");
                    }
                    //Set up voice set
                    jTemplate = GffReplaceByte(jTemplate, "Gender", iGender);
                    voiceFile = JsonGetInt(JsonArrayGet(voiceSet,Random(JsonGetLength(voiceSet))));
                    jTemplate = GffReplaceWord(jTemplate, "SoundSetFile", voiceFile);
                }

To Do
Workaround a solution for the vanilla spawn system.

B.

1 Like

Finally, I said goodbye to the Seminary of St. Ostus to move on to County Rivershire’s River Ith areas.

St. Ostus surrounding village:


Guest rooms:

Library:



Mess hall:

Temple:

B.

While refurbishing the task system to comply with a more JSONized style, I’m doing some finishing on areas, especially Inns & Taverns:

Asdefk’s Inn in Darromar, located west side of Star Street in the Temple Quarter, south of the River Ith, directly across the Wheel Market.

PC can find a couple of randomly generated adventurer followers, and Jozan (at least for now).

B.

1 Like

The Sea Lion’s Pride Inn, in the Royal Quarter, just south of the northern gate and across the city’s Cloister of Ilmater.

The Anvil’s Ring Tavern in the Black Quarter:

B.

2 Likes

One more Darromar Inn visited…

  • Ith-Side Inn, in the Black Quarter, north of River Ith.

…one more to go.

B.

A tour on one of Darromar’s Watchtowers, in this Black Quarter’s one:

B.

It’s been a long time since last update.

Area Transitions:

I’ve changed the exterior areas transition style to something similar, I guess, to the Seamless Area Transition System available in the vault. I say “I guess” mine is limited to required features.

As soon as player enters the module thi sscript is run on it:

void loop_transit (object oPC)
{
    vector vPos = GetPosition (oPC);
    string sTravel;
    string sAreaTo = "";
    object oAreaTo;
    vector vPosTo;
    location locPosTo;

    if        (vPos.x != 0.0 && vPos.x < 4.5) {
        if (GetLocalString (GetArea(oPC), "AreaW") != "") {
            sAreaTo = GetLocalString (GetArea(oPC), "AreaW");
            sTravel = "Travelling WEST to " + GetName(GetObjectByTag (sAreaTo, 0));
            oAreaTo = GetObjectByTag (sAreaTo, 0);
            vPosTo = Vector (310.0, vPos.y, 0.0);
            locPosTo = Location (oAreaTo,vPosTo,180.0);
        } else {
            sTravel = "You can't go any further";
        }
    } else if (vPos.x != 0.0 && vPos.x > 315.5) {
        if (GetLocalString (GetArea(oPC), "AreaE") != "") {
            sAreaTo = GetLocalString (GetArea(oPC), "AreaE");
            sTravel = "Travelling EAST to " + GetName(GetObjectByTag (sAreaTo, 0));
            oAreaTo = GetObjectByTag (sAreaTo, 0);
            vPosTo = Vector (10.0, vPos.y, 0.0);
            locPosTo = Location (oAreaTo,vPosTo,0.0);
        } else {
            sTravel = "You can't go any further";
        }
    } else if (vPos.y != 0.0 && vPos.y < 4.5) {
        if (GetLocalString (GetArea(oPC), "AreaS") != "") {
            sAreaTo = GetLocalString (GetArea(oPC), "AreaS");
            sTravel = "Travelling SOUTH to " + GetName(GetObjectByTag (sAreaTo, 0));
            oAreaTo = GetObjectByTag (sAreaTo, 0);
            vPosTo = Vector (vPos.x, 310.0, 0.0);
            locPosTo = Location (oAreaTo,vPosTo,-90.0);
        } else {
            sTravel = "You can't go any further";
        }
    } else if (vPos.y != 0.0 && vPos.y > 315.5) {
        if (GetLocalString (GetArea(oPC), "AreaN") != "") {
            sAreaTo = GetLocalString (GetArea(oPC), "AreaN");
            sTravel = "Travelling NORTH to " + GetName(GetObjectByTag (sAreaTo, 0));
            oAreaTo = GetObjectByTag (sAreaTo, 0);
            vPosTo = Vector (vPos.x, 10.0, 0.0);
            locPosTo = Location (oAreaTo,vPosTo,90.0);
        } else {
            sTravel = "You can't go any further";
        }
    }
    string sPos;
    if (sTravel == "You can't go any further") {
        if (!GetIsAreaInterior(GetArea(oPC))) {
            sPos = sTravel;
            AssignCommand (oPC, ActionSpeakString ("I can't go any further this way.", TALKVOLUME_TALK));
        }
    } else {
        //sPos = "position " + FloatToString (vPos.x) + FloatToString (vPos.y) + sTravel;
        sPos = sTravel;
    }
    SendMessageToPC (oPC, sPos);
    if (sAreaTo != "" && !GetIsInCombat(oPC)) {
        AssignCommand (oPC, (ActionJumpToLocation(locPosTo)));
    }
    DelayCommand (3.0, loop_transit (oPC));
}

void main()
{
    object oPC = OBJECT_SELF;
    loop_transit (oPC);
}

I’m sure it can be cleaned up, but for the time being it will work.
As it stands now it only works with 32x32 areas, but it can be easily modified to adjust other area sizes.

Module Scope

https://baireswolf.github.io/TDLI/maps/no-scroll.html

Here you can find and updated map of the surface lands available right now in the module.

1 Like

Playing with the Tethyr Coat of Arms (according to Ed Greenwood in What is the coat of arm of Tethyr?)

Fabric style:

Wood style:

Wooden shield style:

I’ll see if I can find some shield texturing tutorial to give it a real try (banners are a lot easier)

Ahem…

TR’s Custom Shield Designs

Plus look at “Standard material inputs” in the wiki.

TR

1 Like

I was just looking at your work cause I remembered I’ve got it at home.
The work above is just a placeholder made in paint/paint 3d while at work =P
Next step will be make it work with Qv3 (to not have to redo all item customizing again)

I thought it would be a little tougher…

image

Forgot to make the inventory icon…

image

… and done.

Next step: adding versions for the Myratma and Zazesspurr banners and city guards shields.




So far so good

image

image