• New Horizons on Maelstrom
    Maelstrom New Horizons


    Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!

Need Help Mysterious plants unfinished?

Sinbad the Sailor

Sailor Apprentice
Hey!
I completed the Apothecary quest, and all I get is a doctors toolkit? Is that right? I mean it feels weird to get such a small reward (especially considering I can buy tons of these for 3000 coins)
is the sidequest unfinished, are doctors toolkit not meant to be for sale, am I missing something?
 
The doctor's toolkit certainly should be for sale, though you'd be lucky to get even one for 3000 gold. So you're effectively getting a few thousand coins' worth of kit, and in addition a load of XP.

Otherwise, @pedrwyth: any suggestions on a different reward for this quest?
 
The doctor's toolkit certainly should be for sale, though you'd be lucky to get even one for 3000 gold. So you're effectively getting a few thousand coins' worth of kit, and in addition a load of XP.

Otherwise, @pedrwyth: any suggestions on a different reward for this quest?
Sorry, I wrote it all wrong. I can buy ton of these, 3000 each!
The quest was very fun, I particularly liked the ghost section where you have to find some items... But I don't know, the reward doesn't feel... rewarding, you know?
I was expecting something dope, when he said doctor toolkit I thought "well maybe it's an exclusive toolkit!" but alas it was just a common one...
 
Does anyone know what's supposedly still unfinished about this one?
It seems me and @DH27 managed to complete all sections of this one...

@fjx did point out though we forgot about the Indian Treasure Note, so I did some digging.
And in so doing, I found some peculiar code in quests_side.c:
Code:
        case "Indians will slay you now!":
/* -->PW this code in abeyance until impact across storylines better evaluated
            for (i = 0; i < 1; i++)
            {
                indianid = 1+rand(2);
                sld = LAi_CreateFantomCharacterExOtAt(false, OFFIC_TYPE_GUARD,"isIndian","","", 20, true, 1.0, "indian"+indianid, "reload",LAi_FindRandomLocator("reload"));                 
                GiveItem2Character(sld,"tomahawk");//PW make doubly sure they are always armed!!
                LAi_FindRandomLocator("reload"));
                if(rand(99) > 50)
                {
                    TakeNItems(sld,"curare",1+rand(4));
                }
                else
                {
                    TakeNItems(sld,"tar",1+rand(4));
                }
                LAi_SetWarriorType(sld);
                LAi_group_MoveCharacter(sld, "Indian Ambush");
            }
            //Lock all locators
            aref reloads; makearef(reloads,Locations[FindLocation(pchar.location)].reload);
            for(i=0;i<GetAttributesNum(reloads);i++)
            {
                aref lx = GetAttributeN(reloads,i);
                if(!CheckAttribute(lx,"disable")) lx.disabledbylock = true;
                lx.disable = true;
            }
            LAi_group_FightGroups(LAI_GROUP_PLAYER, "Indian Ambush", true);
// <--PW this code in abeyance until impact across storylines better evaluated
*/
            DeleteAttribute(&pchar,"quest.Add_Native_In_Hotel");//PW remove payback indian from Cartagena Hotel
            sld = &characters[sti(PChar.quest.mysterious_plants.give_up.indian)];//PW remove payback indian from Cartagena Hotel
            ChangeCharacterAddressGroup(sld,"none", "", "");    //PW remove payback indian from Cartagena Hotel
            LAi_UnStoreFantom(sld);//PW remove payback indian from Cartagena Hotel
            LAi_SetPlayerType(pchar);

            DeleteAttribute(&pchar,"vcskip");
            DeleteAttribute(&pchar,"quest.mysterious_plants");//PW tidy up all attributes in tree
            AddQuestRecord("plants",40);// PW should be 36 if Indian Ambush is active (final attack if no opium delivery)
            CloseQuestHeader("plants");
            Pchar.quest.plants = "done";
                        
            
/*
// --> PW this code in abeyance until impact across storylines better evaluated
            PChar.quest.wow_you_won_from_ambush.win_condition.l1 = "Group_Death";
            PChar.quest.wow_you_won_from_ambush.win_condition.l1.group = "Indian Ambush";
            PChar.quest.wow_you_won_from_ambush.win_condition = "Release Location from Indian Ambush";
// <--PW this code in abeyance until impact across storylines better evaluated
*/ 
        break;
        
        case "Release Location from Indian Ambush":
            aref reloads2; makearef(reloads2,Locations[FindLocation(pchar.location)].reload);
            for(i=0;i<GetAttributesNum(reloads2);i++)
            {
                aref lx2 = GetAttributeN(reloads2,i);
                if(CheckAttribute(lx2,"disabledbylock")) DeleteAttribute(&lx2,"disable");
            }
        break;
What's with all that out-commented stuff??
Especially all that "Lock all locators" business?
Why not just use this?
Code:
            PChar.locationLock = true;
            StartQuestMovie(true, false, false);
And then there's this section:
Code:
        case "Hide Indian Treasure Random":
            //First decide which of the area's we are going to take
            //We take the highest of the y values so it's always above ground
            switch(rand(0))
            {
                case 0:
                    x1 = -9.0952; y1 = 0.0201; z1 = 44.266;
                    x2 = -13.324; y2 = -0.38841; z2 = 70.357;
                    GetRandom3DPosInRange(x1, x2, y1, y1, z1, z2, &x, &y, &z)
                break;
                
                case 1:
                    x1 = -6.3867; y1 = 0.42929; z1 = 69.24;
                    x2 = 18.156; y2 = 2.0086; z2 = 73.173;
                    GetRandom3DPosInRange(x1, x2, y2, y2, z1, z2, &x, &y, &z)
                break;
                
                case 2:
                    x1 = 14.305; y1 = 1.968; z1 = 70.127;
                    x2 = 15.786; y2 = 0.94652; z2 = 43.087;
                    GetRandom3DPosInRange(x1, x2, y1, y1, z1, z2, &x, &y, &z)
                break;
                
                case 3:
                    x1 = 13.236; y1 = 1.419; z1 = 50.838;
                    x2 = -1.2856; y2 = 0.0201; z2 = 44.577;
                    GetRandom3DPosInRange(x1, x2, y1, y1, z1, z2, &x, &y, &z)
                break;
            }
            HideTreasureAtLocation("Greenford_suburb", x, y, z, "Minersspade", "Open Indian Treasure");
            AddItemToTreasureAtLocation("Greenford_suburb", "vegetal", 10);
            if (ENABLE_AMMOMOD) AddItemToTreasureAtLocation("Greenford_suburb", "quiver", 1);//won't get if ammo off?
            AddItemToTreasureAtLocation("Greenford_suburb", "meds3", 1);//PW med3 rather than curare (so ammo mod off covered)
            AddItemToTreasureAtLocation("Greenford_suburb", "indian14", 1);
        break;
        
        case "Hide Indian Treasure":
            x = 17.455; y=2.0268; z=72.565;
            HideTreasureAtLocation("Greenford_suburb", x, y, z, "Minersspade", "Open Indian Treasure");
            AddItemToTreasureAtLocation("Greenford_suburb", "vegetal", 10);
            if (ENABLE_AMMOMOD) AddItemToTreasureAtLocation("Greenford_suburb", "quiver", 1);
            AddItemToTreasureAtLocation("Greenford_suburb", "meds3", 1);//PW med3 rather than curare (so ammo mod off covered)
            AddItemToTreasureAtLocation("Greenford_suburb", "indian14", 1);
        break;
That second case seems to never be called.
And the first has a 'switch(0)' at the top, rendering the other cases superfluous.

As usual with code by Levis, it does look VERY fancy.
This treasure gets REALLY well hidden.
I had to resort to some console trickery to figure out the digging spot:
Code:
    ref lcn = &Locations[FindLocation(pchar.location)];
    DumpAttributes(lcn);
Then finding this in compile.log:
Code:
[2024-01-31 00:55:43.265] [compile] [trace]   box = (null)
[2024-01-31 00:55:43.265] [compile] [trace]     treasure_box = (null)
[2024-01-31 00:55:43.265] [compile] [trace]       tmplocator = 0
[2024-01-31 00:55:43.265] [compile] [trace]       corpseidx = -1
[2024-01-31 00:55:43.265] [compile] [trace]       text =
[2024-01-31 00:55:43.265] [compile] [trace]       x = -12.6185760
[2024-01-31 00:55:43.265] [compile] [trace]       y = 0.0201000
[2024-01-31 00:55:43.265] [compile] [trace]       z = 47.4518280
And using this to put myself right on top of it:
Code:
TeleportCharacterToPos(pchar, -12.6185760, 0.0, 47.4518280);
 
Just passing and saw this, another four years on from my post about holding off on the surprise attack anywhere anytime when the timer ran down. So yes still "unfinished".


Returning to this four years on (and after disappearing for two years whilst emigrating) I think I have fixed most of the issues listed in @Jack Rackham 's spreadsheet (post 87) and from various other Mysterious Plants threads.

.

Finally, if you default on the opium delivery, indians would turn up at after the timer expired anywhere, anytime (even at sea) and lock the location - a great concept but one which could impact on other quests and storylines in rather an open manner so I have closed that for now (and put a note in the questbook where it would have happened asking for feedback when triggered).
I don't think I ever checked that it actually worked though as I recall.

Also tagged in a reference to further problems not resolved.
4, 6, 9: Indeed this quest is bugged. @pedrwyth tried to fix it some time ago but apparently missed some problems.

It is also unfinished in the sense of not meeting the originators intended ending/result
What you probably didn't knew and what I will fix later is that the whole idea of the quest was to be able to buy ayahuasca at the apothecary also (incase aruba is disabled). So I might change some of your things later.
 
And then there's this section:
Code:
        case "Hide Indian Treasure Random":
            //First decide which of the area's we are going to take
            //We take the highest of the y values so it's always above ground
            switch(rand(0))
            {
                case 0:
                    x1 = -9.0952; y1 = 0.0201; z1 = 44.266;
                    x2 = -13.324; y2 = -0.38841; z2 = 70.357;
                    GetRandom3DPosInRange(x1, x2, y1, y1, z1, z2, &x, &y, &z)
                break;
              
                case 1:
                    x1 = -6.3867; y1 = 0.42929; z1 = 69.24;
                    x2 = 18.156; y2 = 2.0086; z2 = 73.173;
                    GetRandom3DPosInRange(x1, x2, y2, y2, z1, z2, &x, &y, &z)
                break;
              
                case 2:
                    x1 = 14.305; y1 = 1.968; z1 = 70.127;
                    x2 = 15.786; y2 = 0.94652; z2 = 43.087;
                    GetRandom3DPosInRange(x1, x2, y1, y1, z1, z2, &x, &y, &z)
                break;
              
                case 3:
                    x1 = 13.236; y1 = 1.419; z1 = 50.838;
                    x2 = -1.2856; y2 = 0.0201; z2 = 44.577;
                    GetRandom3DPosInRange(x1, x2, y1, y1, z1, z2, &x, &y, &z)
                break;
            }
            HideTreasureAtLocation("Greenford_suburb", x, y, z, "Minersspade", "Open Indian Treasure");
            AddItemToTreasureAtLocation("Greenford_suburb", "vegetal", 10);
            if (ENABLE_AMMOMOD) AddItemToTreasureAtLocation("Greenford_suburb", "quiver", 1);//won't get if ammo off?
            AddItemToTreasureAtLocation("Greenford_suburb", "meds3", 1);//PW med3 rather than curare (so ammo mod off covered)
            AddItemToTreasureAtLocation("Greenford_suburb", "indian14", 1);
        break;
      
        case "Hide Indian Treasure":
            x = 17.455; y=2.0268; z=72.565;
            HideTreasureAtLocation("Greenford_suburb", x, y, z, "Minersspade", "Open Indian Treasure");
            AddItemToTreasureAtLocation("Greenford_suburb", "vegetal", 10);
            if (ENABLE_AMMOMOD) AddItemToTreasureAtLocation("Greenford_suburb", "quiver", 1);
            AddItemToTreasureAtLocation("Greenford_suburb", "meds3", 1);//PW med3 rather than curare (so ammo mod off covered)
            AddItemToTreasureAtLocation("Greenford_suburb", "indian14", 1);
        break;
That second case seems to never be called.
And the first has a 'switch(0)' at the top, rendering the other cases superfluous.

As usual with code by Levis, it does look VERY fancy.
This treasure gets REALLY well hidden.
I had to resort to some console trickery to figure out the digging spot:
Code:
    ref lcn = &Locations[FindLocation(pchar.location)];
    DumpAttributes(lcn);
Then finding this in compile.log:
Code:
[2024-01-31 00:55:43.265] [compile] [trace]   box = (null)
[2024-01-31 00:55:43.265] [compile] [trace]     treasure_box = (null)
[2024-01-31 00:55:43.265] [compile] [trace]       tmplocator = 0
[2024-01-31 00:55:43.265] [compile] [trace]       corpseidx = -1
[2024-01-31 00:55:43.265] [compile] [trace]       text =
[2024-01-31 00:55:43.265] [compile] [trace]       x = -12.6185760
[2024-01-31 00:55:43.265] [compile] [trace]       y = 0.0201000
[2024-01-31 00:55:43.265] [compile] [trace]       z = 47.4518280
And using this to put myself right on top of it:
Code:
TeleportCharacterToPos(pchar, -12.6185760, 0.0, 47.4518280);


My guess would be that Levis started with the single treasure location case but added the three variable random locations case "for variety" without removing the other in case it didn't work out and needed to revert to it. Similarly he left the rand (0) for testing it worked but never moved on to the "guess where it's buried on this playthrough" element. The rand (0) is in the code in April 2016 before any attempts at fixing the problems started so not introduced during that process.

There is dialogue (if you eavesdrop in the warehouse scene) that gives the treasure location as "Yes I've buried them behind the Abbey at the corner of the wall." that would probably need to be varied if the location varied (your console trick would show each location to be described I presume). The Indian note is less specific "There is an old Abbey just outside with plenty of room." so covers any case.

However i'm not suggesting this should be done. This is one of those "if it ain't broke don't fix it"moments, of which the quest has many.

The main element of the treasure is vegetal, once again leading you towards another of his added elements (a constant theme throughout this sidequest. ie the donation leads you to "Church Protection"; the Collector is a thinly disguised way of getting you to kill natives which may lead you to having to smuggle opium, although the main drawbacks of opium smuggling remain disabled I believe- it also has a link to the embryonic concept of a smuggling guild (as does Thomas o'Reily the Smuggler)
 
There's going to be a different development for smuggling, at least in "Tales of a Sea Hawk", and possibly in the long term as a trophy quest for FreePlay smugglers:
Where I can download 1.03 patch?

Basically, discussion about a Russian patch 1.03 mentioned a new quest not currently included in "New Horizons", which I'm now working on importing. The original version has a lot of action involving Arnaud Matton and the possibility of kidnapping Sabine. Not wanting to conflict with existing quests involving those two - including your own excellent work on Baldewyn Coffier and Sabine Matton - I've adapted this quest to focus on Jean Maginot, the storekeeper of Marigot, instead. The main character in the quest is the smuggler boss, Desmond Ray Beltrop.

Which reminds me - have you any thoughts about continuing Baldewyn Coffier's quest? At present he takes over a stall in St. Pierre centre, repays your loan, and remains as the owner of that stall.
 
Back
Top