Aller au contenu

Photo

[WIP] Al-Qadim: Episode 1 - Thieves of Halwa


  • Veuillez vous connecter pour répondre
142 réponses à ce sujet

#1
Friar

Friar
  • Members
  • 293 messages
Thieves of Halwa

  • On hold
-------------------------------------------------------------------------------

Written by Andrew the Friar

Welcome to the AD&D world of Al-Qadim. This aspires to be a series
of adventures in which the player can use the same character for an
ongoing storyline that ambitiously endeavors to take players on a magnificent voyage around a small continent with thousands of unexplored islands and probably three times as many adventures.

The world of Al-Qadim features an Arabian
setting that is seen in classic Sinbad or Thief of Baghdad movies. The
player will need to create a level one character who must be prepared to
grow into a thief and assassin for the sake of his survival.

Enter
the exotic lands of Zakhara a world of shifting sand dunes, cool oasis,
and clear glittering saphire seas; handsome rogues, sexy harem wenches, beautiful
princesses, evil viziers, and regal caliphs; magic carpets,
exotic belly dancers, genie lamps, and dark sorcerers. It's a world
with ancient ruins to explore and riches to be found. A world with
desert sheiks to race and out ride, corsair bandits to out sail, and wily
merchants to out wit. It's all of those things and much more if only you rub the magic lamp and ask for three wishes!


Posted Image

Posted Image
A journey begins just outside Huzuz, the City of Delights. However, your adventure lies elsewhere for now.

Posted Image
Large cities attract strange bedfellows and even a traveling circus from time to time.

Posted Image
Halwa, the City of Solitude, is more austere than it's coastal cousins. Wind and dust mostly take the place of elegant spiraling minarets. However, no place in Zakhara can brag about having the best "barbequed lizard on a stick" in all of the realms as does this rustic inland city!

Posted Image
Nightfall is coming. The oppressive Pasdar guard has been rumored to sentence curfew violators... to death! If you dare wander the streets at night you had better have a trick or two up your crafty sleeves. Just remember that no one disobeys the Sultan and his Pasdar and live to tell about it!

Posted Image
Zakhara agriculture ranges from olives, apricots, figs, wheat, or barely. This information might be useful if you could actually make a profit from it.

Modifié par koundog1, 24 novembre 2013 - 06:58 .


#2
Arkalezth

Arkalezth
  • Members
  • 3 187 messages
I've always wanted to play:

A) An assassin module.
B) An arab-set module.

Just one question: Do you have much left to do until completion?

#3
Friar

Friar
  • Members
  • 293 messages

Am I close to completion?

I have the entire story for episode 1 plotted in a loose leaf binder and I've mapped it all out with notes that I alone would only understand. I've even made brief outlines for the series that would follow. It's done in terms of ... I'm not stumped on dialogue or story.


Most of the dialogue is already written in conversations

The hold up is that I'm just not good at the technical stuff like the others in our community.

If only I could sit for a week and work in person with one of these other fabulous authors showing them what I like about their mods and how I'd like to implement something similar in mine... that would slice months and possibly years off of my completion date. A date which I'd like to set for 6 months if I took two hours a day and three days a week working on; and all the while know exactly what I'm doing.

Here is what I am finished with or nearly finished with:
- Exterior areas
- Conversations that don't include specialized scripts
- Journal Entries and quest objectives.
- .Hak file is pretty much complete though it holds a messy .2Da tabulate that I alone will have to resurrect.

Not finished:
- I can't advance the player to Act I because this stoopid trigger I put in place won't trigger the conversation that I need. The coversation which instigates a crucial jewel heist! arrggg ((throws his computer out the window and storms out the room))
- Also my badass tiger got messed up from me F'n with the 2Da file. Now he is a giant ant.
- My city guards aren't nearly as oppressive as I want them to be. That might require a bit of illusion and good ole table top magic tricks with what the toolset offers.
- Put NPCs, doorlocks, animals on a time schedule to where they do their thing during the day and then retreat indoors at night
Sheep and Stone did this very nicely, but I go into toolset mode for a look at the guts and I still can't figure it out. how everyone reacts differently at different times of the game clock. Its awesome.


Modifié par Friar, 02 juillet 2014 - 02:23 .


#4
PJ156

PJ156
  • Members
  • 2 980 messages
The screens look great.

Break you questions down and ask them one by one. With as much detail as you can give, especially with that trigger.

Music is not a tough one to sort out there is a very good tutorial which I can link you to later. You need a couple of tools but they are free and you need to use free not ripped music.

Try this one. This is under creative commns and has the feel I think you want. You need to credit:

Bruce W Hathaway, ASCAP (50%), Elizabeth Jean Hanna, BMI (50%)

Get yourself over to Freeplay and all the music you might want is there.

Uncle FB's npc cpntrol is what I used in Sheep and Stone it is easy enough to master but has a steep learning curve. Kamal_ has done some scripts which may well be easier to use. If you pm me I can start to help you with that if you would like.

PJ

Modifié par PJ156, 14 mars 2013 - 08:02 .


#5
Guest_Iveforgotmypassword_*

Guest_Iveforgotmypassword_*
  • Guests
For the first bit you haven't done... Scrap your old speak trigger and re draw a new one and set it for a different conversation that is a barkstring on an npc standing nearby. if that works change the two strings ( make sure it's only conversation name and npc that you put in the string box and all the rest are added as integers ) back to your conversation that starts the next module then try again if it doesn't work it's your conversation and not the trigger.

Is there a chance that this trigger has already been fired earlier on in the game and that's why it wont work. If so set the multi use integer to 1 and the conversation owner to the tag of an npc you are going to spawn then give the trigger a tag.

Now when the time is right in the game and during another conversation spawn in the npc that is the owner of the conversation set on the trigger into the area it's in ( doesn't have to be important just a peasant or even a rat will do ) set all the speakers on the conversation node because you don't want to be talking to a rat/peasant when you have a desert to save and on one of the last lines of conversation use ga_destroy and put in the trigger or spawned in npc's tag to stop it working again

#6
Friar

Friar
  • Members
  • 293 messages

PJ156 wrote...

The screens look great.

Break you questions down and ask them one by one. With as much detail as you can give, especially with that trigger.

Music is not a tough one to sort out there is a very good tutorial which I can link you to later. You need a couple of tools but they are free and you need to use free not ripped music.

Try this one. This is under creative commns and has the feel I think you want. You need to credit:

Bruce W Hathaway, ASCAP (50%), Elizabeth Jean Hanna, BMI (50%)

Get yourself over to Freeplay and all the music you might want is there.

Uncle FB's npc cpntrol is what I used in Sheep and Stone it is easy enough to master but has a steep learning curve. Kamal_ has done some scripts which may well be easier to use. If you pm me I can start to help you with that if you would like.

PJ


I am going to PM you and thanks PJ.

Thanks for the compliment about the screens too, it is very encouraging.
RWS is the most deserving of the credit for most of those screens, I just layed the buildings out in a way that there are dark alleys and secret nooks and crannies the player can find.

That music is perfect! That website is cool too. I like how it lets you search for music by mood, tempo, style and so forth.

#7
Friar

Friar
  • Members
  • 293 messages

Iveforgotmypassword wrote...

For the first bit you haven't done... Scrap your old speak trigger and re draw a new one and set it for a different conversation that is a barkstring on an npc standing nearby. if that works change the two strings ( make sure it's only conversation name and npc that you put in the string box and all the rest are added as integers ) back to your conversation that starts the next module then try again if it doesn't work it's your conversation and not the trigger.

Is there a chance that this trigger has already been fired earlier on in the game and that's why it wont work. If so set the multi use integer to 1 and the conversation owner to the tag of an npc you are going to spawn then give the trigger a tag.

Now when the time is right in the game and during another conversation spawn in the npc that is the owner of the conversation set on the trigger into the area it's in ( doesn't have to be important just a peasant or even a rat will do ) set all the speakers on the conversation node because you don't want to be talking to a rat/peasant when you have a desert to save and on one of the last lines of conversation use ga_destroy and put in the trigger or spawned in npc's tag to stop it working again


In regards to the trigger I have scrapped the speak trigger before many times, but I'll try and see if the conversation is bugged and maybe even hook it into another conversation.

The part you said about the trigger being fired already did come to mind. The reason I say that is because I put conditionals in the script for when the conversation starts up.

Here is the script:

void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRYJob: Lookout");

if (nInt < 1)
   return;

if (!GetIsNight())
   return;

object oTarget;
object oSpawn;
location lTarget;
oTarget = GetWaypointByTag("WP_Dinesh01");

lTarget = GetLocation(oTarget);

oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "c_dinesh0", lTarget);

oTarget = GetWaypointByTag("WP_Mahmoud01");

lTarget = GetLocation(oTarget);

oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "c_mahmoud0", lTarget);

AssignCommand(GetObjectByTag("c_dinesh"), ActionSpeakString("Shhh someone's coming..."));

}


I also considered that because the two waypoints where the thieves spawn is far away then maybe there is an issue with that but I'm inclined to believe it has to do with having the trigger being spoiled already. That has already happened with the characters pet monkey going bonkers when the player gets too close to the caged tiger... which incidentally looks like a giant freaking ant.. arrg!

#8
Friar

Friar
  • Members
  • 293 messages
Actually what I might do is come up with a way to go to the location and have the player give a signal which will spawn the thieves and then initiate the conversation.

I'm probably going to need to cool it because I giving out spoilers and I want everyone to enjoy this mod because everyone has contributed so much cool stuff. And ya'll deserve this. I think it's going to be really awesome.

#9
ColorsFade

ColorsFade
  • Members
  • 1 267 messages

koundog1 wrote...


The part you said about the trigger being fired already did come to mind. The reason I say that is because I put conditionals in the script for when the conversation starts up.

Here is the script:

void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRYJob: Lookout");

if (nInt < 1)
   return;

if (!GetIsNight())
   return;

object oTarget;
object oSpawn;
location lTarget;
oTarget = GetWaypointByTag("WP_Dinesh01");

lTarget = GetLocation(oTarget);

oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "c_dinesh0", lTarget);

oTarget = GetWaypointByTag("WP_Mahmoud01");

lTarget = GetLocation(oTarget);

oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "c_mahmoud0", lTarget);

AssignCommand(GetObjectByTag("c_dinesh"), ActionSpeakString("Shhh someone's coming..."));

}


I also considered that because the two waypoints where the thieves spawn is far away then maybe there is an issue with that but I'm inclined to believe it has to do with having the trigger being spoiled already. That has already happened with the characters pet monkey going bonkers when the player gets too close to the caged tiger... which incidentally looks like a giant freaking ant.. arrg!


One thing I do in these situations is use SendMessageToPC() to debug what lines in my script are getting checked. You migth want to do that before & after each of your first conditionals to see which one of them is preventing the conversation from starting. 

Another thing you might consider is rearranging the way you spawn your NPC's for the encounter. This is just a personal preference thing for me, but in my module, instead of spawning them with CreateObject, I place them in the area and then use ScriptHidden to hide them until the encounter is triggered by my SpeakTrigger. The thing I like about this way of doing things is that I can see what's going on in an area while I'm in the toolset, as opposed to just looking at waypoint markers and trying to remember what encounter that was and how many creatures were involved. 

A couple other things: 

You can use this at the start of your script as a conditional to make sure it's the PC triggering it: 

        object oPC = GetEnteringObject();
if (StandardSpeakTriggerConditions(oPC) == FALSE) { return; }


And also, watch your logic when checking the journal. Haveing < 1 means that it's possible for you to finish the quest and trigger it again. If the journal entry is 21 or something and the PC walks back into that area - the trigger would fire again. Of course, hopefully OnceOnly=1 on the SpeakTrigger, but even so, I like to code mine like so: 

// If we're not at the corrent Journal state, exit.  int journalEntry = GetJournalEntry("q_undesirable_elements", oPC); if(journalEntry != 1) { return; }


Here's a script I am using that sounds like it's doing something similar to what you want to do: 


void main ()
{
object oPC = GetEnteringObject();

if (StandardSpeakTriggerConditions(oPC) == FALSE)
{
return;
}

SendMessageToPC(oPC, "Testing Speak Condition");

// If we're not at the corrent Journal state, exit.
int journalEntry = GetJournalEntry("q_undesirable_elements", oPC);
if(journalEntry != 1)
{
return;
}

// All of the characters are hidden until we start.
object oWurdy = GetObjectByTag("wurdy");
SetScriptHidden(oWurdy, FALSE);

object oThug1 = GetNearestObjectByTag("thug_human_1", oWurdy);
SetScriptHidden(oThug1, FALSE);

object oThug2 = GetNearestObjectByTag("thug_human_2", oWurdy);
SetScriptHidden(oThug2, FALSE);

object oThug3 = GetNearestObjectByTag("thug_human_3", oWurdy);
SetScriptHidden(oThug3, FALSE);

DoSpeakTrigger(oPC);
}



I don't know if ay of that helps or not, but I hope so. Number one thing I'd recommend is using SendMessageToPC and figuring out where the script is failing, if it's failing at all, or if it's being fired too soon (because you'll see the message). 

Modifié par ColorsFade, 14 mars 2013 - 04:03 .


#10
kamal_

kamal_
  • Members
  • 5 238 messages

PJ156 wrote...

Uncle FB's npc cpntrol is what I used in Sheep and Stone it is easy enough to master but has a steep learning curve. Kamal_ has done some scripts which may well be easier to use. If you pm me I can start to help you with that if you would like.

PJ

Here, you'd want the "generics", performance of those is vastly better. There is a readme that hopefully explains things adequately.

The "generics" work entirely by heartbeat script, so they are easy to use, and come in "24/7 activity" and "go home at night" versions. Most common activities are included.

The full version of the ai is much more advanced, but also much more processor intensive, and can easily cause lag.

#11
Guest_Iveforgotmypassword_*

Guest_Iveforgotmypassword_*
  • Guests
You're really making a mountain out of a sand dune with all this scripting, this will take about two minutes... When the quest is started spawn Dinesh and Mamoud. just go to that line in the conversations open the actions use ga_create object and put in C,dineshetc,wp etc.

Slap down a generic from the blueprints speak trigger in the area where they're going to be heard and in the variables part of the properties set the owner tag as dinesh/mamoud, the conversation as whatever you want to call it (both in the value string bit) run to -1, talk now as 1,cutscene bars as 1 and multi use as 1 ( in the value int bit ). Give the trigger a tag and destroy it using the generic ga_destroy in the conversation action and putting in the trigger tag and -1 in the next door box.

This will make a trigger that everybody can jump up and down on with nothing happening until Dinesh or Mahmoud are in the area when the conversation will start and ginesh or mahmoud will utter their barkstring depending on whoever you put in the speaker part of the conversation.

Modifié par Iveforgotmypassword, 15 mars 2013 - 11:11 .


#12
Guest_Iveforgotmypassword_*

Guest_Iveforgotmypassword_*
  • Guests

Iveforgotmypassword wrote...

You're really making a mountain out of a sand dune with all this scripting, this will take about two minutes... When the quest is started spawn Dinesh and Mamoud. just go to that line in the conversations open the actions use ga_create object and put in C,dineshetc,wp etc.

Slap down a generic from the blueprints speak trigger in the area where they're going to be heard and in the variables part of the properties set the owner tag as dinesh/mamoud, the conversation as whatever you want to call it (both in the value string bit) run to -1, talk now as 1,cutscene bars as 1 and multi use as 1 ( in the value int bit ). Give the trigger a tag and destroy it once the conversation has fired and done it's bit using the generic ga_destroy in the conversation action and putting in the trigger tag and -1 in the next door box. Destroying it is not necessary if the PC is alone and Dinesh and Mahmoud are going to die because that means nobody else will trigger it like a companion following the PC and with a dead Dinesh and Mahmoud it might as well not exist.

This will make a trigger that everybody can jump up and down on with nothing happening until Dinesh or Mahmoud are in the area when the conversation will start and ginesh or mahmoud will utter their barkstring depending on whoever you put in the speaker part of the conversation.


I just quoted instead of editted !

But I'll tell you what this fellow really talks some sense and gets a +1 from me Posted Image

Modifié par Iveforgotmypassword, 15 mars 2013 - 11:16 .


#13
ColorsFade

ColorsFade
  • Members
  • 1 267 messages
Now that's very cool. I just changed my implementation to this - spot on IFMP. Nicely done.

#14
Guest_Iveforgotmypassword_*

Guest_Iveforgotmypassword_*
  • Guests
I've got rats, peasants, guards and just about anything that would never be noticed all over my modules that are spawned during other conversations and ensure that everything runs when it should do ( you can spawn into areas you're not in without a problem ), Basically you're making the presence of a creature the only condition to fire a conversation, just remember to destroy the trigger and set who's speaking in the conversation node or you'll be chatting to a rat !

#15
Friar

Friar
  • Members
  • 293 messages

kamal_ wrote...

Here, you'd want the "generics", performance of those is vastly better. There is a readme that hopefully explains things adequately.

The "generics" work entirely by heartbeat script, so they are easy to use, and come in "24/7 activity" and "go home at night" versions. Most common activities are included.

The full version of the ai is much more advanced, but also much more processor intensive, and can easily cause lag.


Thank you very much for this Kamal! Halwa will finally have LIFE!

#16
ColorsFade

ColorsFade
  • Members
  • 1 267 messages

Iveforgotmypassword wrote...
 you can spawn into areas you're not in without a problem 


Yeah, and that was the only issue I was worried about, but I was able to do it with a script so I knew it would work as a conversation action once you said to do it that way. 

What I like is that it's one less script for onExit or onEnter an area. It's tied to the conversation. So the conversation to end Quest_A triggers the appearance of characters and a speak trigger for Quest_B, and I really like that because in my Excel spreadsheet where I'm mapping all of the quests out, that's how it appears there. One thing I write down in the quest spreadsheet is when you can get the quest, and often the text I put in that field is something like, "After Quest_A finishes". 

This is an efficient tip. Very, very handy. 

Good that guys like you are here to help us noobs with this stuff Mr. Password. Thanks so much for being here!

#17
Guest_Iveforgotmypassword_*

Guest_Iveforgotmypassword_*
  • Guests
You're welcome, I can't write scripts never have done and never will so I use the way the toolset and the game works to get around it along with the generic scripts that come with the game.

In my first module I hid tiny invisible kobolds all over the place as owners of conversations before I realised you could just set it to a companion and it didn't matter how many conversations that companion owned !

#18
Friar

Friar
  • Members
  • 293 messages
1) I fixed my appearance.2da and now my badass tiger is back along with all the other creatures I have been wanting to use. Feels good!

Now I need to figure out what happened to my icons from hatsplosion.hak and also the icon I made of a pet monkey that will function like Boo from Baldur's Gate.

2) I think I figured out the frusterating rigger misfire!

It looks like the journal entry tag is wrong in my script. Not sure why it makes more sense when I read the script on here than it does when read in the toolset.
I think this will work better, if someone sees a potential issue then let me know, please.

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

int nInt;
nInt=GetLocalInt(oPC, "NW_JOURNAL_ENTRYjob_lookout");

if (nInt < 1)
   return;

if (!GetIsNight())
   return;
-----------------------------------------------------
UPDATE: That didn't work...
Everyone has contributed a lot of good information, and I apologize for
not acknowledging you sooner. I'm going to try and work my way down the
list and implement everything suggested.

The only other thing I can thing of is that there are too many conditionals. But it is hard to learn how to fix the problem when I don't know what it is yet.

@Colorsfade
I like your solution, but I'm not familiar with sendmessage to pc(). I want to use this because I believe if I learn how it will help me a great deal in hammering out the modules kinks.

------------------------------------------------------
UPDATE:
I learned that the tag for the conversation was incorrect. I know I checked it multiple times, but finally I noticed that the conversation is tagged as 01_footpads3. I had the trigger searching for a condition tagged 01_footpad3.

And so... since the journal entry tag matches up and the conversation tag matches up the trigger now fires off. Hurray!
The only thing to figure out now is why my thieving footpads Dinesh and Mahmoud aren't spawning in. In this event it might behove me to follow the advice from Colorsfade about hiding the two guys rather than having them spawn in.

On the other hand I think I'll just recheck every tag and ref that is involved with the spawn.

Modifié par koundog1, 19 mars 2013 - 09:00 .


#19
Friar

Friar
  • Members
  • 293 messages
Finally, these issues were resolved:

- I can't advance the player to Act I because this stoopid trigger I put in place won't trigger the conversation that I need. The coversation which instigates a crucial jewel heist! arrggg ((throws his computer out the window and storms out the room))
- Also my badass tiger got messed up from me F'n with the 2Da file. Now he is a giant ant.


The first one was a combination of improper tags and also one very peculiar issue I learned with spawning.

I can create one creature at a time with that earlier script, but I can't create two. What I did instead was use the toolsets action node in the conversation to create objects.. in this case two thieves. Once I did that I noticed I couldn't walk up to them and begin talking. Well that was simple enough.. they didn't have so much as a default script. I added the nw_c2_default4. Everything work good now, until I do my fine tuning. ACT I is pretty much "a wrap", time to move forward!

Modifié par koundog1, 20 mars 2013 - 05:59 .


#20
ColorsFade

ColorsFade
  • Members
  • 1 267 messages

koundog1 wrote...

Everything work good now, until I do my fine tuning. ACT I is pretty much "a wrap", time to move forward!


That has to feel great! 

My first "act" has gotten much larger than I initially envisioned, but it's great because I like the content. I have such a huge laundry list of items to accomplish. It's nice seeing it move forward every day though. 

Keep up the good work brother!

#21
ColorsFade

ColorsFade
  • Members
  • 1 267 messages

koundog1 wrote...

@Colorsfade
I like your solution, but I'm not familiar with sendmessage to pc(). I want to use this because I believe if I learn how it will help me a great deal in hammering out the modules kinks.


SendMessageToPC() is just a method call that you can insert into your script to print a line of text into the chat window. It is incredibly usefulf or debugging so you can see if a section of your script is executing or not. In this way, if you don't see the line of text appear in the chat window, then you know your code isn't being reached, and you can start to figure out why. This is a debugging tool. 

Two caveats: First, you have to have the PC selected to see the message appear in the chat window. If you have a party of characters, and select one of your NPC Companions, the messages will stop appearing. Second, if you are sending a LOT of messages to the screen, or you have a lot of attacks going on and flooding the chat window, SendMessagetoPC() will drop messages. 

Using it is easy: 

// First, get the PC
object oPC = GetFirstPC();
// Next, send a message
SendMessageToPC(oPC, "Hello World!");

#22
Friar

Friar
  • Members
  • 293 messages
I never thought of using it that way.
I think I remember seeing it now, when I dissected "Lolthwanchwi.

Well, I just learned malware got in my cpu.
I'm trying to back everything up in dropbox.
As much as I hate doing it I'm probably going to have to do a system recovery.
Anyone have suggestions?

#23
Guest_Iveforgotmypassword_*

Guest_Iveforgotmypassword_*
  • Guests
I just changed a lot of the insides of my computer ( CPU, motherboard and RAM followed by a power supply because the old one blew up and then a cooler because it was too noisy when it was going flat out ) and updated it to windows 7 but beforehand I took ALL my NWN2 files that includes the program files ones and anything else to do with it from my laptop ( already on Windows 7 ) and put them onto an external hard drive. Then I just put them into my PC when all the bits and pieces were installed. I didn't have to change any settings or even update and it went in just the way it was on my lap top and runs perfectly.

If you do it like this you can take all the things you want out of your computer then wipe out absolutely everything in your PC and reinstall windows and have a fresh start. My PC runs like a rocket now because all the rubbish that had built up over the years is gone.

#24
Friar

Friar
  • Members
  • 293 messages
Thanks Iveforgotmypassword,
I was wondering if I could save my programs too. Some of the programs I have, I've taken for granted and I bought from online sources. I don't want to look up their receipt and password and then download them all again.

Might be nice to get rid of some of the clutter though, like you mention.

#25
Friar

Friar
  • Members
  • 293 messages
Malware is gone and I spent a little time off playing Guildwars 2 which has amazing graphics considering most MMOs are garbage. Not even the new Neverwinter mmo that is coming out can top it.

Malware is gone, but when I pieced my project back together I learned some hard to swallow lessons. I also came across a total mystery.
Why did all the terrain in my exterior areas (the areas in the screenshots) get flattened and reset?
-All the buildings are where I left them.
-All the triggers.
-The Bazaar area in screenshot 2 is completely empty.

I am happy that I didn't lose everything. But I'll probably need to rebuild all my exterior areas. I'm going to check and see if the new hak I put together isn't the cause. Hopefully I still have a copy of the old hak.