forums | blogs | polls | tutorials | downloads | rules | help

Error message

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in remember_me_form_alter() (line 78 of /var/www/siegetheday.org/sites/all/modules/contrib/remember_me/remember_me.module).

How to get a new map to load into Veteran / Elite.

Sharkull's picture

I'm playing around on a new test map, and can't figure out how to mark the Mercenary difficulty as being "completed" so that I can take a character into the map at the Veteran level... I've set up a single quest (the only Primary quest for the map), and completed it but the saved character is still locked out of Vet. I haven't tried setting up and completing a quest in each of Act 2 and 3 too, to see if that works (that's the next thing I'm going to try), but after that I'm out of ideas.

Question: Is the access into the next world level difficulty contingent on a global setting (like setting a level specific boolean value as being completed...)? Is it linked to completed quests somehow?

Anyone figure this out yet? :?

(Edit: resolved below... removed the "?" from the thread's subject.)

Sharkull's picture

Update: Calix gave a response to my question at the GPGarage:
http://garage.gaspowered.com/?q=node/2524

Calix wrote:
You need to set this in a flick.
For example, act3_ending_nis.flick is where this is set in DS2:

Catalyst:
        CompleteTask a3_p_zaramoth_valdis portal_endgame;
        CompleteQuest a3_p_zaramoth_valdis;
        if WhenModeNormal
        {
            Report "setting Mercenary bool";
            SetLocalJournalBool ( Catalyst, ds2_world_completed_mercenary, true, true );
        }
        else if WhenModeVeteran
        {
            Report "setting Veteran bool";
            SetLocalJournalBool ( Catalyst, ds2_world_completed_veteran, true, true );
        }
        else if WhenModeElite
        {
            Report "setting Elite bool";
            SetLocalJournalBool ( Catalyst, ds2_world_completed_elite, true, true );
        }


My initial brief try applying this logic / code last night didn't work, and hopfully I'll have some luck today.

It is nice that some GPG developper would help. Hopefully Calix will continue doing so.

Anyway, this was just an example. You have to make sure this thing is called. Probably through a trigger, like you did to drop items at the beginning of the game.

It does not show in the code what this Catalyst is, so it needs to be set up somewhere as well. It is probably the hero, I would guess. Should be in that file anyway.

If you have the code to complete your quest and it actually update the journal, you can use the same flick obviously. That is what they did in the DS2 game.

Sharkull's picture

Thanks Episthene... but I just got it working. I already had a working flick with triggers set up, and knew they were working because my quest log was updating as I completed my mindless quest. I'm assuming that a generic trigger sets things up properly for the catylist stuff... I just looked in the ds2_world map for examples of what I wanted and tried to recreate simple examples.

...and I agree that it was very nice of Calix to point me in the right direction. Smile I searched for this, but it never occurred to me to look in the nis flicks. :oops:

Anyways, the problem I had last night was an unknown / unrecognized naming convention. The booleans that are set (ds2_world_completed_mercenary, ds2_world_completed_veteran and ds2_world_completed_elite in the example) MUST be named appropriately for your map... (AFAIK). My map's "Name" is "my_test_world", so my booleans apparently must be called my_test_world_completed_mercenary, my_test_world_completed_veteran and my_test_world_completed_elite.

As far as I can figure out / guess, setting the booleans creates them in the save file. When trying to access the next difficulty level in the game's menu, the engine checks to see if these variables (with the syntax mapname_completed_previousdifficulty) are set to "true".

For anyone interested, here's what I've set up (only the applicable bits). I don't know if completing a quest is absolutely necessary, but this is what I have set up, and it is working for me.

In my map's main.gas (the one in the \my_test_world\ directory):

Quote:

[worlds]
{
[mercenary]
{
screen_name = "Mercenary";
description = "Parties of all levels can play here.";
required_level = 0;
}
[veteran]
{
screen_name = "Veteran";
description = "You must be level 1 or higher to accept this challenge.";
required_level = 1;
}
[elite]
{
screen_name = "Elite";
description = "You must be level 2 or higher to attempt this feat.";
required_level = 2;
}
}

As you can see, I changed the level requirements a little bit... :P (even though the description in game never changed).

In my map's questbook_info.gas:

Quote:
[questbook_info]
{
//////////
// ACTS //
//////////
[t:act,n:act_1]
{
tab_text = "Act I";
title_text = "Act I title...";
num_quests = 1; // total quests in this act ( primary and secondary )

// Primary quests
quest_1 = a1_p_1;

// Secondary quests

// quest_2 = a1_s_1;

}

//////////////////////////////////////////////////////////

[t:act_1_quest,n:a1_p_1]
{
title_text = "Primary Quest 1";
desc_text = "An example quest...";
desc2_text = "";
quest_image = b_gui_ig_m_i_jnl_q-ic-p-final-ascent;
mercenary_level = 0;
veteran_level = 40;
elite_level = 64;

// task names have to be unique within a single map

[task_1]
{
name = pq1_task1;
radar_icon = a1_pq1;
speaker = "";
title_text = "Step on to the carpet.";
desc_text = "That's all... just step on the carpet. Simple eh?";
}
}

// [t:act_1_quest,n:a1_s_1]
// {
// is_secondary = true;
// title_text = "Secondary Quest 1";
// desc_text = "Not implemented.";
// quest_image = b_gui_ig_m_i_jnl_q-ic-s-armorers-apprentice;
// mercenary_level = 3;
// veteran_level = 40;
// elite_level = 64;
//
// [task_1]
// {
// name = sq1_task1;
// speaker = "Nobody special";
// title_text = "Blank.";
// desc_text = "You'll never see this in game because there are no activation triggers in the map / flick.";
// // radar_icon = a1_sq1;
// }
// }
}


That puts the following flicks into perspective... These two flicks are initiated by simple generic triggers objects set with bounding box triggers. "pq1_t1_activate" is activated by just entering the world (the bounding box covers the start locations) and "pq1_t1_stand_on_rug" is activated by moving on to a specific spot on the map (where I also put a rug / carpet object).
Quote:

[pq1_t1_activate]
{
role (actor) catalyst;

entry main;

thread main
{
catalyst:

if !whenQuestComplete (a1_p_1) AND !whenQuestActive (a1_p_1)
{
ActivateAct act_1;
ActivateQuest a1_p1;
ActivateTask a1_p_1 pq1_task1;
}

}
}
[pq1_t1_stand_on_rug]
{
role (actor) catalyst;

thread main
{
catalyst:
Report "completing the task";
CompleteTask a1_p_1 pq1_task1;
CompleteQuest a1_p_1;
Report "completed the quest";
CompleteAct act_1;
Report "completed the act";

if WhenModeNormal
{
Report "setting Mercenary bool";
SetLocalJournalBool ( catalyst, my_test_world_completed_mercenary, true, true );
}
else if WhenModeVeteran
{
Report "setting Veteran bool";
SetLocalJournalBool ( catalyst, my_test_world_completed_veteran, true, true );
}
else if WhenModeElite
{
Report "setting Elite bool";
SetLocalJournalBool ( catalyst, my_test_world_completed_elite, true, true );
}
}
}


That's it. When I load the map, then move on to the carpet, save and try to access the next difficulty level, it works! Laughing out loud

Note: I used a "stats max" character to bypass any level restrictions / if any. Wink

Cool,

the name of the world would have been my next guess at what is wrong, but it did not make too much sense at the time why it would be so, but when I think about it, it makes sense, since the game is probably hard-coded to look at those specific values to set up the character interface and options.

All the quest info, etc. are saved in the save file, you are right, I saw the values. But it is not saved when you set it. The game must save automatically or manually to actually change the file. Detail, but just so you know. It only matters if the game crashes. It does not need to be part of a quest completed flick either. In fact, it could be done in skrit as part of a spell or something, like anything in flick.

You might want to change the name of the quest, just in case it would interfere with the normal game quests (I think you used the same name?). It might not work with the journal though, but if it does, it might be a good idea to do that, just in case. I am not sure if the saved file appends the map name or not. If not, then completing a quest in your map will also compete it in the normal map, and vice versa.

Sharkull's picture

Quote:
All the quest info, etc. are saved in the save file, you are right, I saw the values. But it is not saved when you set it. The game must save automatically or manually to actually change the file. Detail, but just so you know.

Yeah, I worded that part of my explanation poorly. That's what I meant... the values being set up in memory to be saved per normal game saving routines.

I know that each flick quest command can stand alone... I just used the same flick because I didn't want to set up multiple new triggers / flicks to try every new variant I was testing.

Also, all the quest / template names I'm using are unique (GPG's are descriptive, not numbered like I used)... I'm doing this on purpose so that I'm sure when I call something it is not "accidently" working because of something that GPG created.

BTW, I don't think I'm going to wade into skrit... at least not anytime soon. Everytime I even try to even read some skrit I look like this: 8O

:P Laughing out loud

Thanks for the tips though. Smile

Just a thought. Someone should compile all these useful bits of information into a document of some sort.. Cool

Well, a lot of people did this in the past Nooba.

Right now there isn't even a forum which stands out as being the best place to talk about modding. If you look at the forums activity, you would think there is not too much modding going around. If there is, people are not really talking about it. But in essence, that person who compiles could be you. Smile It won't be me, that's for sure. In any case, forums are a fair enough and easy way to put bits of info like this, and they offer a natural organization.

Sharkull, if you do any mod that change things in any appreciable manner, you will need skrit eventually. First time I wanted to mod something, I did not intend to do skrit either, but I quickly met the barrier of the possible. Flick is only a wrapper for skrit, and GPG wrapped only what they needed, obviously. So it is pretty limited, and the templates are fairly limited too. Basically, without skrit, you can only create a different map with existing or new monsters (assuming you can actually create mesh and texture for them), with a new story. It is pretty good overall, but fairly limited as far as giving a new gameplay experience.

What makes DS so moddable is skrit. The rest is pretty much industry standard now. I can easily imagine how the original DS could have been changed to give the most moddable game ever. All it needed is some skrit documentation on the APIs, and more things done in skrit outside the core C++ engine. With a few additional abilities of skrit and a better compiler, GPG had the possibility of an A1 moddable engine in their immediate reach. Unfortunately for the modding community, DS2 was actually a step backward. Flick is a good system, but is essentially just powder in your face and makes some things more readable and standard. It does not add anything to the core moddability of the game. It is like someone who gives up one when the finish line is in sight, and then stop running altogether but still apply for marathons. There is a niche market for RPG modding, and someone will eventually find a way to use it succesfully in their business model. DS reached that market to some extent, and DS2 droppped it, nonwithstanding the selling hype.

Sharkull's picture

Episthene wrote:
What makes DS so moddable is skrit.

That may be true, but I don't need to be the one to write the big changes... Smile There's a ton that can be done easily with just templates and flick, and if I create something worthy of release (nothing planned, but you never know) I could easily look within the community for skritted changes to include (giving credit where it is due of course).

...and I don't see how "DS2 was actually a step backward" for modding. Making it more accessible only makes sense to me... having patch v2.2 without a stand-alone DS2Mod installer does put a cramp on things from the players standpoint, but making it easier to code basic storytelling just makes it possible for even more modders to get inside the game. Not everyone knows C++ type language syntax (like skrit uses) and DS2 allows modders to do more without this knowledge. Yes there is a learning curve with the newly tweaked engine with its new features, and GPG could be doing more in the way of providing modding documentation, but things could be a LOT worse.
Smile

You cannot really understand what I mean by a step backward unless you look at skrit in both versions of the engine. Yeah, like you know I have serious issues with patch 2.2, but I was not talking about this in this case. I was just analysing both engine capabilities toward skritting.

A good analogy would be a V8 car compared to a V6 car. Unless you are a mechanics and look under the hood, you will have a hard time to tell that the V6 is a step backward. If you add to the V6 some steering wheel and brakes, you might even think that it is the other way around, since it makes it easier for some people to drive without needing strenght.

And that is pretty much what I see. DS1 is a V8 without steering wheel, and DS2 is a V6 with steering wheel. I was expecting a V10 with steering wheel or no steering wheel. I mean, steering wheel is nice, but I accord more importance to the engine.

As far as your claim that you have no need of skrit, you were saying the same thing about modding some months ago. Smile

True, skrit has a steep learning curve for non-programmers. It is however, a lot easier than C++ as far as needed knowledge. And it is why skrit was a very good idea. Strong and fairly easy to use. You do not have to worry about memory as much, and a lot of other things that C++ programmers need to take into account. The only drawback compared to C++ programming is the bad compiler and no IDE, which makes things harder to debug. There are also missing features that would truly help. But nothing was done to improve skrit. I did not look at SE2, so I cannot judge the compiler. I have bad premonitions about it. But I was told it was basically the same.