changeset 1497:19890e50e2f6

Слияние
author Ritor1
date Sun, 01 Sep 2013 17:10:55 +0600
parents ab6bf38b2940 (current diff) 9e9a12506d51 (diff)
children 878a5c69297a
files Render.cpp
diffstat 14 files changed, 1766 insertions(+), 1792 deletions(-) [+]
line wrap: on
line diff
--- a/Actor.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Actor.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -3468,7 +3468,7 @@
 		if ( v23 <= v11
 		  && v27 <= v11
 		  && v12 <= v11
-		  && sub_4070EF_prolly_collide_objects(PID(OBJECT_Actor, i), PID(OBJECT_Actor, uActorID))
+		  && sub_4070EF_prolly_detect_player(PID(OBJECT_Actor, i), PID(OBJECT_Actor, uActorID))
 		  && v23 * v23 + v27 * v27 + v19 * v19 < (unsigned int)v25 )
 		{
 		  v25 = v23 * v23 + v27 * v27 + v19 * v19;
--- a/Events.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Events.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -65,62 +65,62 @@
 //----- (00443CE1) --------------------------------------------------------
 unsigned int LoadEventsToBuffer(const char *pContainerName, char *pBuffer, unsigned int uBufferSize)
 {
-	FILE *pLodFile; // eax@1
-	unsigned int uTextureSize; // esi@3
-	char Args[60]; // [sp+8h] [bp-B4h]@6
-	void *ptr; // [sp+B8h] [bp-4h]@1
-	Texture DstBuf; // [sp+6Ch] [bp-50h]@1
+  FILE *pLodFile; // eax@1
+  unsigned int uTextureSize; // esi@3
+  char Args[60]; // [sp+8h] [bp-B4h]@6
+  void *ptr; // [sp+B8h] [bp-4h]@1
+  Texture DstBuf; // [sp+6Ch] [bp-50h]@1
 
-	ptr = pEvents_LOD->LoadRaw(pContainerName, 0);
-	pLodFile = pEvents_LOD->FindContainer(pContainerName, 0);
-	if ( !pLodFile )
-		Abortf("Unable to load %s", pContainerName);
-	fread(&DstBuf, 1, 48, pLodFile);
-	uTextureSize = DstBuf.uDecompressedSize;
-	if ( !DstBuf.uDecompressedSize )
-		uTextureSize = DstBuf.uTextureSize;
-	memset(&DstBuf, 0, 72);
-	if ( uTextureSize >= (signed int)uBufferSize )
-		{
-		sprintf(Args, "File %s Size %lu - Buffer size %lu", pContainerName, uTextureSize, uBufferSize);
-		Abortf(Args);
-		}
-	memcpy(pBuffer, ptr, uTextureSize);
-	pAllocator->FreeChunk(ptr);
-	return uTextureSize;
-	}
+  ptr = pEvents_LOD->LoadRaw(pContainerName, 0);
+  pLodFile = pEvents_LOD->FindContainer(pContainerName, 0);
+  if ( !pLodFile )
+    Abortf("Unable to load %s", pContainerName);
+  fread(&DstBuf, 1, 48, pLodFile);
+  uTextureSize = DstBuf.uDecompressedSize;
+  if ( !DstBuf.uDecompressedSize )
+    uTextureSize = DstBuf.uTextureSize;
+  memset(&DstBuf, 0, 72);
+  if ( uTextureSize >= (signed int)uBufferSize )
+    {
+    sprintf(Args, "File %s Size %lu - Buffer size %lu", pContainerName, uTextureSize, uBufferSize);
+    Abortf(Args);
+    }
+  memcpy(pBuffer, ptr, uTextureSize);
+  pAllocator->FreeChunk(ptr);
+  return uTextureSize;
+  }
 
 //----- (00443DA1) --------------------------------------------------------
 void  Initialize_GlobalEVT()
 {
-	struct raw_event_header
-		{ 
-		unsigned char evt_size;
-		unsigned char evt_id_l;
-		unsigned char evt_id_h;
-		unsigned char evt_sequence_num;
-		} ;
-	uint events_count;
-	unsigned int offset_in; 
-	raw_event_header *current_hdr; 
-	uGlobalEVT_NumEvents = 0;
-	uGlobalEVT_Size = LoadEventsToBuffer("global.evt", pGlobalEVT.data(), 46080);
-	if ( !uGlobalEVT_Size )
-		return;
-	memset(pGlobalEVT_Index.data(), 0x80, sizeof(pGlobalEVT_Index));//52800
-	events_count = uGlobalEVT_NumEvents;
-	current_hdr=(raw_event_header *)pGlobalEVT.data();
-	offset_in=0;
-	for (events_count = 0, offset_in = 0; offset_in < uGlobalEVT_Size; ++events_count)
-		{
-		pGlobalEVT_Index[events_count].uEventID=current_hdr->evt_id_l+(current_hdr->evt_id_h<<8);
-		pGlobalEVT_Index[events_count].event_sequence_num=current_hdr->evt_sequence_num;
-		pGlobalEVT_Index[events_count].uEventOffsetInEVT=offset_in;			
-		offset_in+=current_hdr->evt_size+1;
+  struct raw_event_header
+    {
+    unsigned char evt_size;
+    unsigned char evt_id_l;
+    unsigned char evt_id_h;
+    unsigned char evt_sequence_num;
+    } ;
+  uint events_count;
+  unsigned int offset_in;
+  raw_event_header *current_hdr;
+  uGlobalEVT_NumEvents = 0;
+  uGlobalEVT_Size = LoadEventsToBuffer("global.evt", pGlobalEVT.data(), 46080);
+  if ( !uGlobalEVT_Size )
+    return;
+  memset(pGlobalEVT_Index.data(), 0x80, sizeof(pGlobalEVT_Index));//52800
+  events_count = uGlobalEVT_NumEvents;
+  current_hdr=(raw_event_header *)pGlobalEVT.data();
+  offset_in=0;
+  for (events_count = 0, offset_in = 0; offset_in < uGlobalEVT_Size; ++events_count)
+    {
+    pGlobalEVT_Index[events_count].uEventID=current_hdr->evt_id_l+(current_hdr->evt_id_h<<8);
+    pGlobalEVT_Index[events_count].event_sequence_num=current_hdr->evt_sequence_num;
+    pGlobalEVT_Index[events_count].uEventOffsetInEVT=offset_in;
+    offset_in+=current_hdr->evt_size+1;
 
-		current_hdr=(raw_event_header *)&pGlobalEVT[offset_in];
-		}
-	uGlobalEVT_NumEvents = events_count;
+    current_hdr=(raw_event_header *)&pGlobalEVT[offset_in];
+    }
+  uGlobalEVT_NumEvents = events_count;
 
   assert(uGlobalEVT_NumEvents < 4400);
 }
@@ -129,26 +129,26 @@
 
 //----- (00443EF8) --------------------------------------------------------
 void  LoadLevel_InitializeLevelEvt()
-	{
+  {
     struct raw_event_header
-        { 
+        {
         unsigned char evt_size;
         unsigned char evt_id_l;
         unsigned char evt_id_h;
         unsigned char evt_sequence_num;
         } ;
     uint events_count;
-    unsigned int offset_in; 
-    raw_event_header *current_hdr; 
+    unsigned int offset_in;
+    raw_event_header *current_hdr;
 
-	if (!uLevelEVT_Size)
-		return;
+  if (!uLevelEVT_Size)
+    return;
 
-	memset(array_5B5928_timers, 0, 3200);
-	memset(pLevelEVT_Index.data(), 80, sizeof(EventIndex)*4400);
+  memset(array_5B5928_timers, 0, 3200);
+  memset(pLevelEVT_Index.data(), 80, sizeof(EventIndex)*4400);
 
-	uLevelEVT_NumEvents = 0;
-	dword_5B65C8_timers_count = 0;
+  uLevelEVT_NumEvents = 0;
+  dword_5B65C8_timers_count = 0;
 
     current_hdr=(raw_event_header *)pLevelEVT.data();
     offset_in=0;
@@ -156,7 +156,7 @@
         {
         pLevelEVT_Index[events_count].uEventID=current_hdr->evt_id_l+(current_hdr->evt_id_h<<8);
         pLevelEVT_Index[events_count].event_sequence_num=current_hdr->evt_sequence_num;
-        pLevelEVT_Index[events_count].uEventOffsetInEVT=offset_in;			
+        pLevelEVT_Index[events_count].uEventOffsetInEVT=offset_in;
         offset_in+=current_hdr->evt_size+1;
 
         current_hdr=(raw_event_header *)&pLevelEVT[offset_in];
@@ -173,512 +173,512 @@
 
 
 Emerald Isle #110 // Fire Resistance fountain
-0	LocationName
-0	if (Player.FireResistance < 50)
-	{
-1		Set(Player.FireResistance, 50)
-2		SetFooterString(22)	// +50 Fire Resistance (temporarily)
-3		Add(Party.Autonotes, 2)
-4		goto return
-	}
-5	SetFooterString(11)	// Refreshing!
-6	return
+0 LocationName
+0 if (Player.FireResistance < 50)
+  {
+1   Set(Player.FireResistance, 50)
+2   SetFooterString(22) // +50 Fire Resistance (temporarily)
+3   Add(Party.Autonotes, 2)
+4   goto return
+  }
+5 SetFooterString(11) // Refreshing!
+6 return
 
 
 
 Emerald Isle #111 // ???
-	Initialize
-	Set(Map.Variables[0], 30)
-	Set(Map.Variables[1], 30)
+  Initialize
+  Set(Map.Variables[0], 30)
+  Set(Map.Variables[1], 30)
 
 
 Emerald Isle #114 // month timer - manage luck fountain
-0		LocationName
-0	    if (Player.BaseLuck >= 15)
-		{
-2			SetFooterString(11) // Refreshing!
-3			return
-		}
-		else
-		{
-1			if (Map.Variables[2] >= 1)
-			{
-4				Sub(Map.Variables[2], 1)
-5				Add(Player.BaseLuck, 2)
-6				SetFooterString(25) // +2 Luck (Permament)
-7				return
-			}
-			else
-			{
-2				SetFooterString(11) // Refreshing!
-3				return
-			}
-		}
+0   LocationName
+0     if (Player.BaseLuck >= 15)
+    {
+2     SetFooterString(11) // Refreshing!
+3     return
+    }
+    else
+    {
+1     if (Map.Variables[2] >= 1)
+      {
+4       Sub(Map.Variables[2], 1)
+5       Add(Player.BaseLuck, 2)
+6       SetFooterString(25) // +2 Luck (Permament)
+7       return
+      }
+      else
+      {
+2       SetFooterString(11) // Refreshing!
+3       return
+      }
+    }
 
-8		Initialize
-9		Set	Map.Variables[2], 8
+8   Initialize
+9   Set Map.Variables[2], 8
 
 
 
 Emerald Isle #115 // week timer - gold fountain in the center of town
-0	LocationName
-0	if (Map.Variables[4] < 3)
-	{
-1		if (Map.Variables[3] == 0)
-		{
-2			if (Party.Gold < 201)
-			{
-3				if (Player.BaseLuck >= 15)
-				{
-5					Add(Map.Variables[3], 1)
-6					Add(Party.Gold, 1000)
-7					Add(Map.Variables[4], 1)
-8					goto return
-				}
-				else
-				{
-4					goto 9
-				}
-			}
-		}
-	}
-9	SetFooterString(11)	// Refreshing!
-10	return
+0 LocationName
+0 if (Map.Variables[4] < 3)
+  {
+1   if (Map.Variables[3] == 0)
+    {
+2     if (Party.Gold < 201)
+      {
+3       if (Player.BaseLuck >= 15)
+        {
+5         Add(Map.Variables[3], 1)
+6         Add(Party.Gold, 1000)
+7         Add(Map.Variables[4], 1)
+8         goto return
+        }
+        else
+        {
+4         goto 9
+        }
+      }
+    }
+  }
+9 SetFooterString(11) // Refreshing!
+10  return
 
-11	Initialize
-12	Set(Map.Variables[3], 0)
+11  Initialize
+12  Set(Map.Variables[3], 0)
 
 
 
 
 
-Emerald Isle #220	// day timer - monster spawner
-0	LocationName
-0	Initialize
-1	if (NumAliveActors(group=20) != 0)
-2		return
-3	SpawnMonsters(1, level=1, count=10, x=-336, y=14512, z=0,  group=20)
-4	SpawnMonsters(1, level=2, count=5,  x=16,   y=16352, z=90, group=20)
-5	SpawnMonsters(1, level=1, count=10, x=480,  y=18288, z=6,  group=20)
+Emerald Isle #220 // day timer - monster spawner
+0 LocationName
+0 Initialize
+1 if (NumAliveActors(group=20) != 0)
+2   return
+3 SpawnMonsters(1, level=1, count=10, x=-336, y=14512, z=0,  group=20)
+4 SpawnMonsters(1, level=2, count=5,  x=16,   y=16352, z=90, group=20)
+5 SpawnMonsters(1, level=1, count=10, x=480,  y=18288, z=6,  group=20)
 
 
 
-Emerald Isle #200	// margareth dock tip
-0	if (!QBits.QuestDone[17])
-	{
-1		InitiateNPCDialogue(npc=19)
-	}
-2	return
+Emerald Isle #200 // margareth dock tip
+0 if (!QBits.QuestDone[17])
+  {
+1   InitiateNPCDialogue(npc=19)
+  }
+2 return
 
 
-Emerald Isle #201	// margareth armoury tip
-0	if (!QBits.QuestDone[17])
-	{
-1		InitiateNPCDialogue(npc=20)
-	}
-2	return
+Emerald Isle #201 // margareth armoury tip
+0 if (!QBits.QuestDone[17])
+  {
+1   InitiateNPCDialogue(npc=20)
+  }
+2 return
 */
-	}
+  }
 
 
 //----- (0044684A) --------------------------------------------------------
 void EventProcessor(int uEventID, int targetObj, int canShowMessages, int entry_line)
 {
-	unsigned int v3; // eax@5
-	signed int v4; // esi@7
-	//char *v5; // eax@8
-	Player *v6; // ecx@8
-	//char *v7; // ebp@8
-	//signed int v8; // edx@10
-	//int v9; // edi@12
-	//ByteArray *v10; // esi@12
-	int v11; // eax@14
-	char *v12; // eax@15
-	//char *v13; // edi@21
-	int v14; // ebp@21
-	int v15; // edi@21
-	const char *v16; // esi@21
-	bool v17; // edx@21
-	int v18; // ecx@22
-	int v19; // ebp@36
-	signed int v20; // ecx@40
-	int v21; // eax@40
-	int v22; // edx@40
-	int v23; // eax@40
-	unsigned __int16 v24; // ax@45
-	int v25; // eax@54
-	LevelDecoration *v26; // eax@55
-	int v27; // eax@57
-	int v28; // ecx@57
-	//int v29; // edx@58
-	int pEventID; // eax@58
-	int pNPC_ID; // ecx@58
-	int pIndex; // esi@58
-	NPCData *pNPC; // ecx@58
-	int v34; // esi@59
-	int v35; // esi@60
-	int v36; // esi@61
-	int v37; // esi@62
-	int v38; // eax@78
-	int v39; // ecx@78
-	size_t v40; // edx@78
-	Actor *v41; // esi@79
-	int v42; // eax@84
-	int v43; // ecx@84
-	size_t v44; // edx@84
-	Actor *v45; // esi@85
-	void *v46; // eax@91
-	GUIWindow *v47; // eax@93
-	GUIButton *v48; // ecx@93
-	GUIButton *v49; // esi@94
-	char v50; // al@100
-	Player *v51; // esi@103
-	Player *v52; // ecx@106
-	int v53; // ecx@107
-	char v54; // al@111
-	Player *v55; // esi@114
-	Player *v56; // ecx@117
-	int v57; // ecx@118
-	signed int pValue; // ebp@124
-	Player *pPlayer; // esi@125
-	int v60; // eax@126
-	int v61; // edx@133
-	int v62; // eax@139
-	int v63; // ebp@145
-	signed int v64; // edi@146
-	unsigned int v65; // edx@148
-	Player *v66; // ecx@148
-	int v67; // esi@148
-	signed int v68; // eax@151
-	int v69; // esi@151
-	Player *v70; // ecx@158
-	unsigned int v71; // eax@159
-	int v72; // esi@159
-	signed int v73; // eax@162
-	int v74; // esi@162
-	int v75; // edx@172
-	Player *v76; // esi@173
-	signed int v77; // ebp@186
-	int v78; // edx@186
-	Player *v79; // esi@187
-	//signed int v80; // ebp@200
-	//int v81; // edx@200
-	Player *v82; // esi@201
-	int v83; // eax@212
-	int v84; // ebp@220
-	signed int v85; // ebp@224
-	char v86; // al@224
-	Player *v87; // esi@227
-	Player *v88; // ecx@231
-	int v89; // ecx@232
-	int v90; // eax@243
-	const char *v91; // ecx@247
-	int v92; // eax@251
-	char *v93; // eax@252
-	int v94; // ecx@262
-	int v95; // ebp@262
-	int v96; // edx@262
-	int v97; // eax@262
-	unsigned int v98; // edx@265
-	const char *v99; // esi@267
-	int v100; // edx@267
-	//char *v101; // edi@281
-	unsigned int v102; // esi@281
-	int v103; // edi@284
-	int v104; // eax@288
-	int v105; // edx@294
-	int v106; // [sp-20h] [bp-4C8h]@278
-	signed int v107; // [sp-1Ch] [bp-4C4h]@278
-	unsigned int v108; // [sp-18h] [bp-4C0h]@278
-	signed int v109; // [sp-14h] [bp-4BCh]@278
-	signed int v110; // [sp-10h] [bp-4B8h]@278
-	int v111; // [sp-Ch] [bp-4B4h]@278
-	// Event *v112; // [sp-8h] [bp-4B0h]@5
-	int v113; // [sp-8h] [bp-4B0h]@106
-	int v114; // [sp-8h] [bp-4B0h]@117
-	signed int v115; // [sp-8h] [bp-4B0h]@231
-	unsigned int v116; // [sp-8h] [bp-4B0h]@278
-	int v117; // [sp-4h] [bp-4ACh]@106
-	int v118; // [sp-4h] [bp-4ACh]@117
-	int v119; // [sp-4h] [bp-4ACh]@231
-	int v120; // [sp-4h] [bp-4ACh]@278
-	int v121; // [sp-4h] [bp-4ACh]@294
-	int curr_seq_num; // [sp+10h] [bp-498h]@4
-	//char *v123; // [sp+14h] [bp-494h]@0
-	signed int v124; // [sp+18h] [bp-490h]@7
-	//signed int v125; // [sp+1Ch] [bp-48Ch]@155
-	int v126; // [sp+1Ch] [bp-48Ch]@262
-	int player_choose; // [sp+20h] [bp-488h]@4
-	int v128; // [sp+24h] [bp-484h]@21
-	int v129; // [sp+24h] [bp-484h]@262
-	signed int v130; // [sp+28h] [bp-480h]@0
-	//int v131; // [sp+2Ch] [bp-47Ch]@1
-	int v132; // [sp+30h] [bp-478h]@262
-	signed int v133; // [sp+34h] [bp-474h]@1
-	int v134; // [sp+38h] [bp-470h]@262
-	int v135; // [sp+3Ch] [bp-46Ch]@262
-	int v136; // [sp+40h] [bp-468h]@40
-	int v137; // [sp+44h] [bp-464h]@40
-	int v138; // [sp+48h] [bp-460h]@40
-	int v139; // [sp+4Ch] [bp-45Ch]@40
-	ItemGen item; // [sp+50h] [bp-458h]@15
-	char Source[120]; // [sp+74h] [bp-434h]@15
-	char Str[120]; // [sp+ECh] [bp-3BCh]@21
-	Actor Dst; // [sp+164h] [bp-344h]@53
+  unsigned int v3; // eax@5
+  signed int v4; // esi@7
+  //char *v5; // eax@8
+  Player *v6; // ecx@8
+  //char *v7; // ebp@8
+  //signed int v8; // edx@10
+  //int v9; // edi@12
+  //ByteArray *v10; // esi@12
+  int v11; // eax@14
+  char *v12; // eax@15
+  //char *v13; // edi@21
+  int v14; // ebp@21
+  int v15; // edi@21
+  const char *v16; // esi@21
+  bool v17; // edx@21
+  int v18; // ecx@22
+  int v19; // ebp@36
+  signed int v20; // ecx@40
+  int v21; // eax@40
+  int v22; // edx@40
+  int v23; // eax@40
+  unsigned __int16 v24; // ax@45
+  int v25; // eax@54
+  LevelDecoration *v26; // eax@55
+  int v27; // eax@57
+  int v28; // ecx@57
+  //int v29; // edx@58
+  int pEventID; // eax@58
+  int pNPC_ID; // ecx@58
+  int pIndex; // esi@58
+  NPCData *pNPC; // ecx@58
+  int v34; // esi@59
+  int v35; // esi@60
+  int v36; // esi@61
+  int v37; // esi@62
+  int v38; // eax@78
+  int v39; // ecx@78
+  size_t v40; // edx@78
+  Actor *v41; // esi@79
+  int v42; // eax@84
+  int v43; // ecx@84
+  size_t v44; // edx@84
+  Actor *v45; // esi@85
+  void *v46; // eax@91
+  GUIWindow *v47; // eax@93
+  GUIButton *v48; // ecx@93
+  GUIButton *v49; // esi@94
+  char v50; // al@100
+  Player *v51; // esi@103
+  Player *v52; // ecx@106
+  int v53; // ecx@107
+  char v54; // al@111
+  Player *v55; // esi@114
+  Player *v56; // ecx@117
+  int v57; // ecx@118
+  signed int pValue; // ebp@124
+  Player *pPlayer; // esi@125
+  int v60; // eax@126
+  int v61; // edx@133
+  int v62; // eax@139
+  int v63; // ebp@145
+  signed int v64; // edi@146
+  unsigned int v65; // edx@148
+  Player *v66; // ecx@148
+  int v67; // esi@148
+  signed int v68; // eax@151
+  int v69; // esi@151
+  Player *v70; // ecx@158
+  unsigned int v71; // eax@159
+  int v72; // esi@159
+  signed int v73; // eax@162
+  int v74; // esi@162
+  int v75; // edx@172
+  Player *v76; // esi@173
+  signed int v77; // ebp@186
+  int v78; // edx@186
+  Player *v79; // esi@187
+  //signed int v80; // ebp@200
+  //int v81; // edx@200
+  Player *v82; // esi@201
+  int v83; // eax@212
+  int v84; // ebp@220
+  signed int v85; // ebp@224
+  char v86; // al@224
+  Player *v87; // esi@227
+  Player *v88; // ecx@231
+  int v89; // ecx@232
+  int v90; // eax@243
+  const char *v91; // ecx@247
+  int v92; // eax@251
+  char *v93; // eax@252
+  int v94; // ecx@262
+  int v95; // ebp@262
+  int v96; // edx@262
+  int v97; // eax@262
+  unsigned int v98; // edx@265
+  const char *v99; // esi@267
+  int v100; // edx@267
+  //char *v101; // edi@281
+  unsigned int v102; // esi@281
+  int v103; // edi@284
+  int v104; // eax@288
+  int v105; // edx@294
+  int v106; // [sp-20h] [bp-4C8h]@278
+  signed int v107; // [sp-1Ch] [bp-4C4h]@278
+  unsigned int v108; // [sp-18h] [bp-4C0h]@278
+  signed int v109; // [sp-14h] [bp-4BCh]@278
+  signed int v110; // [sp-10h] [bp-4B8h]@278
+  int v111; // [sp-Ch] [bp-4B4h]@278
+  // Event *v112; // [sp-8h] [bp-4B0h]@5
+  int v113; // [sp-8h] [bp-4B0h]@106
+  int v114; // [sp-8h] [bp-4B0h]@117
+  signed int v115; // [sp-8h] [bp-4B0h]@231
+  unsigned int v116; // [sp-8h] [bp-4B0h]@278
+  int v117; // [sp-4h] [bp-4ACh]@106
+  int v118; // [sp-4h] [bp-4ACh]@117
+  int v119; // [sp-4h] [bp-4ACh]@231
+  int v120; // [sp-4h] [bp-4ACh]@278
+  int v121; // [sp-4h] [bp-4ACh]@294
+  int curr_seq_num; // [sp+10h] [bp-498h]@4
+  //char *v123; // [sp+14h] [bp-494h]@0
+  signed int v124; // [sp+18h] [bp-490h]@7
+  //signed int v125; // [sp+1Ch] [bp-48Ch]@155
+  int v126; // [sp+1Ch] [bp-48Ch]@262
+  int player_choose; // [sp+20h] [bp-488h]@4
+  int v128; // [sp+24h] [bp-484h]@21
+  int v129; // [sp+24h] [bp-484h]@262
+  signed int v130; // [sp+28h] [bp-480h]@0
+  //int v131; // [sp+2Ch] [bp-47Ch]@1
+  int v132; // [sp+30h] [bp-478h]@262
+  signed int v133; // [sp+34h] [bp-474h]@1
+  int v134; // [sp+38h] [bp-470h]@262
+  int v135; // [sp+3Ch] [bp-46Ch]@262
+  int v136; // [sp+40h] [bp-468h]@40
+  int v137; // [sp+44h] [bp-464h]@40
+  int v138; // [sp+48h] [bp-460h]@40
+  int v139; // [sp+4Ch] [bp-45Ch]@40
+  ItemGen item; // [sp+50h] [bp-458h]@15
+  char Source[120]; // [sp+74h] [bp-434h]@15
+  char Str[120]; // [sp+ECh] [bp-3BCh]@21
+  Actor Dst; // [sp+164h] [bp-344h]@53
 
-	//v131 = uEventID;
-	v133 = 0;
-	EvtTargetObj = targetObj;
-	dword_5B65C4 = 0;
-	if ( !uEventID )
-		{
-		if ( !GameUI_Footer_TimeLeft )
-			ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here
-		return;
-		}
-	player_choose = (uActiveCharacter == 0)?6:4;  //4 - active or  6 - random player if active =0
-	curr_seq_num = entry_line;
+  //v131 = uEventID;
+  v133 = 0;
+  EvtTargetObj = targetObj;
+  dword_5B65C4 = 0;
+  if ( !uEventID )
+    {
+    if ( !GameUI_Footer_TimeLeft )
+      ShowStatusBarString(pGlobalTXT_LocalizationStrings[521], 2u);// Nothing here
+    return;
+    }
+  player_choose = (uActiveCharacter == 0)?6:4;  //4 - active or  6 - random player if active =0
+  curr_seq_num = entry_line;
 
-	if ( activeLevelDecoration )
-		{
-		uSomeEVT_NumEvents = uGlobalEVT_NumEvents;
-		pSomeEVT = pGlobalEVT.data();
-		memcpy(pSomeEVT_Events.data(), pGlobalEVT_Index.data(), sizeof(EventIndex)*4400); //4400 evts
-		}
-	else
-		{
-		uSomeEVT_NumEvents = uLevelEVT_NumEvents;
-		pSomeEVT = pLevelEVT.data();
-		memcpy(pSomeEVT_Events.data(), pLevelEVT_Index.data(), sizeof(EventIndex)*4400);
-		}
+  if ( activeLevelDecoration )
+    {
+    uSomeEVT_NumEvents = uGlobalEVT_NumEvents;
+    pSomeEVT = pGlobalEVT.data();
+    memcpy(pSomeEVT_Events.data(), pGlobalEVT_Index.data(), sizeof(EventIndex)*4400); //4400 evts
+    }
+  else
+    {
+    uSomeEVT_NumEvents = uLevelEVT_NumEvents;
+    pSomeEVT = pLevelEVT.data();
+    memcpy(pSomeEVT_Events.data(), pLevelEVT_Index.data(), sizeof(EventIndex)*4400);
+    }
 
-	v4 = 0;
-	v124 = 0;
-	//for (uint i = 0; i < uSomeEVT_NumEvents; ++i)
-	//	{
-		//v6 = v123;
-		//v7 = "";
-		while ( 1 )
-		{
-		if ( dword_5B65C4 )
-			goto LABEL_301;
-		//v8 = v4;
-		if ( pSomeEVT_Events[v4].uEventID == uEventID && pSomeEVT_Events[v4].event_sequence_num == curr_seq_num )
-			{
-			//v9 = pSomeEVT_Events[v8].uEventOffsetInEVT;
-			//v10 = (ByteArray *)&v5[v9];
-			auto _evt = (_evt_raw *)(pSomeEVT + pSomeEVT_Events[v4].uEventOffsetInEVT);
+  v4 = 0;
+  v124 = 0;
+  //for (uint i = 0; i < uSomeEVT_NumEvents; ++i)
+  //  {
+    //v6 = v123;
+    //v7 = "";
+    while ( 1 )
+    {
+    if ( dword_5B65C4 )
+      goto LABEL_301;
+    //v8 = v4;
+    if ( pSomeEVT_Events[v4].uEventID == uEventID && pSomeEVT_Events[v4].event_sequence_num == curr_seq_num )
+      {
+      //v9 = pSomeEVT_Events[v8].uEventOffsetInEVT;
+      //v10 = (ByteArray *)&v5[v9];
+      auto _evt = (_evt_raw *)(pSomeEVT + pSomeEVT_Events[v4].uEventOffsetInEVT);
 
-			switch (_evt->_e_type)
-				{
-			case EVENT_CheckSeason:
-				//
-				if ( !sub_4465DF_check_season(_evt->v5) )
+      switch (_evt->_e_type)
+        {
+      case EVENT_CheckSeason:
+        //
+        if ( !sub_4465DF_check_season(_evt->v5) )
                 {
-					++curr_seq_num;
-					v4 = v124;
-					break;
+          ++curr_seq_num;
+          v4 = v124;
+          break;
                 }
-				v124 = -1;
-				curr_seq_num = _evt->v6 - 1;
-			    ++curr_seq_num;
-				break;
-			case EVENT_ShowMovie:
-				{
-				strcpy(Source, (char *)&_evt->v7);
-				v12 = (char *)&item.uExpireTime + strlen(Source) + 7;
-				if ( *v12 == 32 )
-					*v12 = 0;
-				if ( pVideoPlayer->field_54 )
-					pVideoPlayer->Unload();
-				pVideoPlayer->bStopBeforeSchedule = 0;
-				pVideoPlayer->pResetflag = 0;
+        v124 = -1;
+        curr_seq_num = _evt->v6 - 1;
+          ++curr_seq_num;
+        break;
+      case EVENT_ShowMovie:
+        {
+        strcpy(Source, (char *)&_evt->v7);
+        v12 = (char *)&item.uExpireTime + strlen(Source) + 7;
+        if ( *v12 == 32 )
+          *v12 = 0;
+        if ( pVideoPlayer->field_54 )
+          pVideoPlayer->Unload();
+        pVideoPlayer->bStopBeforeSchedule = 0;
+        pVideoPlayer->pResetflag = 0;
 
-				v128 = pCurrentScreen;
-				//v13 = &pSomeEVT[v9];
-				//v14 = (unsigned __int8)v13[5];
-				//v15 = (unsigned __int8)v13[6];
-				v14 = _evt->v5;
-				v15 = _evt->v6;
-				strcpy(Str, Source);
-				v16 = RemoveQuotes(Str);
-				VideoPlayer::MovieLoop(v16, 0, v14, 1);
-				if ( !_stricmp(v16, "arbiter good") )
+        v128 = pCurrentScreen;
+        //v13 = &pSomeEVT[v9];
+        //v14 = (unsigned __int8)v13[5];
+        //v15 = (unsigned __int8)v13[6];
+        v14 = _evt->v5;
+        v15 = _evt->v6;
+        strcpy(Str, Source);
+        v16 = RemoveQuotes(Str);
+        VideoPlayer::MovieLoop(v16, 0, v14, 1);
+        if ( !_stricmp(v16, "arbiter good") )
                 {
                   pParty->alignment = PartyAlignment_Good;
-					v18 = 0;
-					LOBYTE(v17) = 1;
-					SetUserInterface(PartyAlignment_Good, v17);
-					if ( !v15 || v128 == 3 )
-						{
-						pCurrentScreen = v128;
-						if ( v128 == 3 )
-							pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
-						if ( v128 == 13 )
-							pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
-						}
+          v18 = 0;
+          LOBYTE(v17) = 1;
+          SetUserInterface(PartyAlignment_Good, v17);
+          if ( !v15 || v128 == 3 )
+            {
+            pCurrentScreen = v128;
+            if ( v128 == 3 )
+              pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
+            if ( v128 == 13 )
+              pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
+            }
+
+          ++curr_seq_num;
+          v4 = v124;
 
-					++curr_seq_num;
-					v4 = v124;
-					
-					//v6 = v123;
-					//v7 = "";
-					break;
-					}
-				if ( !_stricmp(v16, "arbiter evil") )
-					{
-					v18 = 2;
-					pParty->alignment = PartyAlignment_Evil;
-					LOBYTE(v17) = 1;
-					SetUserInterface(PartyAlignment_Evil, v17);
-					if ( !v15 || v128 == 3 )
-						{
-						pCurrentScreen = v128;
-						if ( v128 == 3 )
-							pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
-						if ( v128 == 13 )
-							pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
-						}
-					++curr_seq_num;
-					v4 = v124;
-					
-					//v6 = v123;
-					//v7 = "";
+          //v6 = v123;
+          //v7 = "";
+          break;
+          }
+        if ( !_stricmp(v16, "arbiter evil") )
+          {
+          v18 = 2;
+          pParty->alignment = PartyAlignment_Evil;
+          LOBYTE(v17) = 1;
+          SetUserInterface(PartyAlignment_Evil, v17);
+          if ( !v15 || v128 == 3 )
+            {
+            pCurrentScreen = v128;
+            if ( v128 == 3 )
+              pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
+            if ( v128 == 13 )
+              pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
+            }
+          ++curr_seq_num;
+          v4 = v124;
 
-					break;
-					}
-				if ( !_stricmp(v16, "pcout01") )    // moving to harmondale from emerald isle
+          //v6 = v123;
+          //v7 = "";
+
+          break;
+          }
+        if ( !_stricmp(v16, "pcout01") )    // moving to harmondale from emerald isle
                 {
-					Rest(0x2760u);
-					pParty->RestAndHeal();
-					pParty->days_played_without_rest = 0;
+          Rest(0x2760u);
+          pParty->RestAndHeal();
+          pParty->days_played_without_rest = 0;
                 }
-				if ( !v15 || v128 == 3 )
-					{
-					pCurrentScreen = v128;
-					if ( v128 == 3 )
-						pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
-					if ( v128 == 13 )
-						pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				}
-				break;
-			case EVENT_CheckSkill:
-				{
-				v19 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8)) << 8);
-				if ( player_choose < 0 )
-					goto LABEL_47;
-				if ( player_choose <= 3 )
-					{
-					v24 = pParty->pPlayers[0].pActiveSkills[3486 * player_choose + _evt->v5];
-					}
-				else
-					{
-					if ( player_choose == 4 )
-						{
-						v24 = pPlayers[uActiveCharacter]->pActiveSkills[_evt->v5];
-						}
-					else
-						{
-						if ( player_choose == 5 )
-							{
-							v20 = 0;
-							v21 = 3486 * v130 + _evt->v5;
-							v136 = 1;
-							LOWORD(v21) = pParty->pPlayers[0].pActiveSkills[v21];
-							v137 = v21 & 0x40;
-							v138 = v21 & 0x80;
-							v22 = v21 & 0x100;
-							v23 = v21 & 0x3F;
-							v139 = v22;
-							while ( v23 < v19 || !*(&v136 + _evt->v6) )
-								{
-								++v20;
-								if ( v20 >= 4 )
-									{
-									++curr_seq_num;
-									v4 = v124;
-									
-									//v6 = v123;
-									//v7 = "";
-									break;
-									}
-								}
-							v11 = _evt->v11;
-							goto LABEL_130;
-							}
+        if ( !v15 || v128 == 3 )
+          {
+          pCurrentScreen = v128;
+          if ( v128 == 3 )
+            pGameLoadingUI_ProgressBar->uType = GUIProgressBar::TYPE_Fullscreen;
+          if ( v128 == 13 )
+            pVideoPlayer->OpenHouseMovie(pAnimatedRooms[uCurrentHouse_Animation].video_name, 1u);
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        }
+        break;
+      case EVENT_CheckSkill:
+        {
+        v19 = _evt->v7 + ((_evt->v8 + ((_evt->v9 + ((unsigned int)_evt->v10 << 8)) << 8)) << 8);
+        if ( player_choose < 0 )
+          goto LABEL_47;
+        if ( player_choose <= 3 )
+          {
+          v24 = pParty->pPlayers[0].pActiveSkills[3486 * player_choose + _evt->v5];
+          }
+        else
+          {
+          if ( player_choose == 4 )
+            {
+            v24 = pPlayers[uActiveCharacter]->pActiveSkills[_evt->v5];
+            }
+          else
+            {
+            if ( player_choose == 5 )
+              {
+              v20 = 0;
+              v21 = 3486 * v130 + _evt->v5;
+              v136 = 1;
+              LOWORD(v21) = pParty->pPlayers[0].pActiveSkills[v21];
+              v137 = v21 & 0x40;
+              v138 = v21 & 0x80;
+              v22 = v21 & 0x100;
+              v23 = v21 & 0x3F;
+              v139 = v22;
+              while ( v23 < v19 || !*(&v136 + _evt->v6) )
+                {
+                ++v20;
+                if ( v20 >= 4 )
+                  {
+                  ++curr_seq_num;
+                  v4 = v124;
+
+                  //v6 = v123;
+                  //v7 = "";
+                  break;
+                  }
+                }
+              v11 = _evt->v11;
+              goto LABEL_130;
+              }
 LABEL_47:
-						//v10 = (ByteArray *)&v5[v9];
-						v24 = pParty->pPlayers[0].pActiveSkills[_evt->v5 + 3486 * rand() % 4];
-						}
-					}
-				v136 = 1;
-				v137 = v24 & 0x40;
-				v138 = v24 & 0x80;
-				v139 = v24 & 0x100;
-				if ( (v24 & 0x3F) >= v19 && *(&v136 + _evt->v6) )
-					{
-					v11 = _evt->v11;
-					goto LABEL_130;
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				}
-				break;
+            //v10 = (ByteArray *)&v5[v9];
+            v24 = pParty->pPlayers[0].pActiveSkills[_evt->v5 + 3486 * rand() % 4];
+            }
+          }
+        v136 = 1;
+        v137 = v24 & 0x40;
+        v138 = v24 & 0x80;
+        v139 = v24 & 0x100;
+        if ( (v24 & 0x3F) >= v19 && *(&v136 + _evt->v6) )
+          {
+          v11 = _evt->v11;
+          goto LABEL_130;
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        }
+        break;
 
-			case EVENT_SpeakNPC:
-				if ( canShowMessages )
-					{
-					//Actor::Actor(&Dst);
-					memset(&Dst, 0, 0x344u);
-					dword_5B65D0_dialogue_actor_npc_id = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8);
-					Dst.sNPC_ID = dword_5B65D0_dialogue_actor_npc_id;
-					GameUI_InitializeDialogue(&Dst, false);
-					}
-				else
-					{
-					bDialogueUI_InitializeActor_NPC_ID = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8);
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ChangeEvent:
-				v25 = EVT_DWORD(_evt->v5);
-				if ( v25 )
-					{
-					stru_5E4C90._decor_events[activeLevelDecoration->_idx_in_stru123] = _evt->v5 - 124;
-					}
-				else
-					{
-					v26 = (LevelDecoration *)activeLevelDecoration;
-					stru_5E4C90._decor_events[activeLevelDecoration ->_idx_in_stru123] = 0;
-					v26->field_2 |= 0x0020;
-					}
-				++curr_seq_num;
-				v4 = v124;
+      case EVENT_SpeakNPC:
+        if ( canShowMessages )
+          {
+          //Actor::Actor(&Dst);
+          memset(&Dst, 0, 0x344u);
+          dword_5B65D0_dialogue_actor_npc_id = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8);
+          Dst.sNPC_ID = dword_5B65D0_dialogue_actor_npc_id;
+          GameUI_InitializeDialogue(&Dst, false);
+          }
+        else
+          {
+          bDialogueUI_InitializeActor_NPC_ID = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((unsigned int)_evt->v8 << 8)) << 8)) << 8);
+          }
+        ++curr_seq_num;
+        v4 = v124;
 
-				break;
-			case EVENT_SetNPCGreeting:
-				v27 = EVT_DWORD(_evt->v5);
-				pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu;
-				pNPCStats->pNewNPCData[v27].greet = EVT_DWORD(_evt->v9);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ChangeEvent:
+        v25 = EVT_DWORD(_evt->v5);
+        if ( v25 )
+          {
+          stru_5E4C90._decor_events[activeLevelDecoration->_idx_in_stru123] = _evt->v5 - 124;
+          }
+        else
+          {
+          v26 = (LevelDecoration *)activeLevelDecoration;
+          stru_5E4C90._decor_events[activeLevelDecoration ->_idx_in_stru123] = 0;
+          v26->uFlags |= LEVEL_DECORATION_INVISIBLE;
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        break;
+      case EVENT_SetNPCGreeting:
+        v27 = EVT_DWORD(_evt->v5);
+        pNPCStats->pNewNPCData[v27].uFlags &= 0xFFFFFFFCu;
+        pNPCStats->pNewNPCData[v27].greet = EVT_DWORD(_evt->v9);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
             case EVENT_SetNPCTopic:
             {
               //v29 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
@@ -722,381 +722,381 @@
             }
             v4 = v124;
             break;
-			case EVENT_NPCSetItem:
-				sub_448518_npc_set_item(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13);
-				++curr_seq_num;
-				v4 = v124;
+      case EVENT_NPCSetItem:
+        sub_448518_npc_set_item(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13);
+        ++curr_seq_num;
+        v4 = v124;
 
-				break;
-			case EVENT_SetActorItem:
-				Actor::GiveItem(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13);
-				++curr_seq_num;
-				v4 = v124;
-				break;
-			case EVENT_SetNPCGroupNews:
-				pNPCStats->pGroups_copy[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)] = _evt->v9 + ((uint)_evt->v10 << 8);
-				++curr_seq_num;
-				v4 = v124;
-				break;
-			case EVENT_SetActorGroup:
-				__debugbreak();
-				*(&pActors[0].uGroup + 0x11000000 * _evt->v8 + 209 * (_evt->v5 + ((_evt->v6 + ((uint)_evt->v7 << 8)) << 8))) = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
-				++curr_seq_num;
-				v4 = v124;
-				break;
-			case EVENT_ChangeGroup:
-				v38 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
-				v39 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
-				v40 = uNumActors;
-				__debugbreak();
-				if ( (signed int)uNumActors > 0 )
-					{
-					v41 = pActors.data();//[0].uGroup;
-					do
-						{
-						if ( v41->uGroup == v38 )
-							v41->uGroup = v39;
-						++v41;
-						--v40;
-						}
-						while ( v40 );
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ChangeGroupAlly:
-				v42 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
-				v43 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
-				v44 = uNumActors;
-				__debugbreak();
-				if ( (signed int)uNumActors > 0 )
-					{
-					v45 = pActors.data();//[0].uAlly;
-					do
-						{
-						if ( v45->uGroup == v42 )
-							v45->uAlly = v43;
-						++v45;
-						--v44;
-						}
-						while ( v44 );
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_MoveNPC:
-				{
+        break;
+      case EVENT_SetActorItem:
+        Actor::GiveItem(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13);
+        ++curr_seq_num;
+        v4 = v124;
+        break;
+      case EVENT_SetNPCGroupNews:
+        pNPCStats->pGroups_copy[_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8)] = _evt->v9 + ((uint)_evt->v10 << 8);
+        ++curr_seq_num;
+        v4 = v124;
+        break;
+      case EVENT_SetActorGroup:
+        __debugbreak();
+        *(&pActors[0].uGroup + 0x11000000 * _evt->v8 + 209 * (_evt->v5 + ((_evt->v6 + ((uint)_evt->v7 << 8)) << 8))) = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
+        ++curr_seq_num;
+        v4 = v124;
+        break;
+      case EVENT_ChangeGroup:
+        v38 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
+        v39 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
+        v40 = uNumActors;
+        __debugbreak();
+        if ( (signed int)uNumActors > 0 )
+          {
+          v41 = pActors.data();//[0].uGroup;
+          do
+            {
+            if ( v41->uGroup == v38 )
+              v41->uGroup = v39;
+            ++v41;
+            --v40;
+            }
+            while ( v40 );
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ChangeGroupAlly:
+        v42 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
+        v43 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
+        v44 = uNumActors;
+        __debugbreak();
+        if ( (signed int)uNumActors > 0 )
+          {
+          v45 = pActors.data();//[0].uAlly;
+          do
+            {
+            if ( v45->uGroup == v42 )
+              v45->uAlly = v43;
+            ++v45;
+            --v44;
+            }
+            while ( v44 );
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_MoveNPC:
+        {
+
+        pNPCStats->pNewNPCData[EVT_DWORD(_evt->v5)].Location2D =EVT_DWORD(_evt->v9);
+        if ( window_SpeakInHouse )
+          {
 
-				pNPCStats->pNewNPCData[EVT_DWORD(_evt->v5)].Location2D =EVT_DWORD(_evt->v9);
-				if ( window_SpeakInHouse )
-					{
-	
-					if ( window_SpeakInHouse->par1C == 165 )
-						{
-						sub_4BD8B5();
-						pVideoPlayer->Unload();
-						window_SpeakInHouse->Release();
-						pParty->uFlags &= ~2;
-						activeLevelDecoration = (LevelDecoration*)1;
-						if ( EnterHouse(HOUSE_BODY_GUILD_ERATHIA) )
-							{
-							pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0);
-							window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0);
-							v48 = window_SpeakInHouse->pControlsHead;
-							if ( v48 )
-								{
-								do
-									{
-									v49 = v48->pNext;
-									pAllocator->FreeChunk(v48);
-									v48 = v49;
-									}
-									while ( v49 );
-								}
-							window_SpeakInHouse->pControlsHead = 0;
-							window_SpeakInHouse->pControlsTail = 0;
-							window_SpeakInHouse->uNumControls = 0;
-							}
-						}
-					else
-						{
-						if ( window_SpeakInHouse->par1C == 553 )
-							pVideoPlayer->bLoopPlaying = 0;
-						}
-					}
-				
-				}
+          if ( window_SpeakInHouse->par1C == 165 )
+            {
+            sub_4BD8B5();
+            pVideoPlayer->Unload();
+            window_SpeakInHouse->Release();
+            pParty->uFlags &= ~2;
+            activeLevelDecoration = (LevelDecoration*)1;
+            if ( EnterHouse(HOUSE_BODY_GUILD_ERATHIA) )
+              {
+              pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0);
+              window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, 165, 0);
+              v48 = window_SpeakInHouse->pControlsHead;
+              if ( v48 )
+                {
+                do
+                  {
+                  v49 = v48->pNext;
+                  pAllocator->FreeChunk(v48);
+                  v48 = v49;
+                  }
+                  while ( v49 );
+                }
+              window_SpeakInHouse->pControlsHead = 0;
+              window_SpeakInHouse->pControlsTail = 0;
+              window_SpeakInHouse->uNumControls = 0;
+              }
+            }
+          else
+            {
+            if ( window_SpeakInHouse->par1C == 553 )
+              pVideoPlayer->bLoopPlaying = 0;
+            }
+          }
+
+        }
                 ++curr_seq_num;
-				v4 = v124;
+        v4 = v124;
+
+        break;
+      case EVENT_Jmp:
+        curr_seq_num = _evt->v5 - 1;
+        ++curr_seq_num;
+        v4 = -1;
 
-				break;
-			case EVENT_Jmp:
-				curr_seq_num = _evt->v5 - 1;
-				++curr_seq_num;
-				v4 = -1;
+        break;
+      case EVENT_ShowFace:
+        if ( _evt->v5 <= 3u ) //someone
+          pParty->pPlayers[_evt->v5].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
+        else if ( _evt->v5 == 4 ) //active
+          pParty->pPlayers[uActiveCharacter].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
+        else if ( _evt->v5 == 5 ) //all players
+          {
+          for(int i=0; i<4; ++i)
+            pParty->pPlayers[i].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
+          }
+        else  //random player
+          pParty->pPlayers[rand() % 4].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
+          ++curr_seq_num;
+          v4 = v124;
 
-				break;
-			case EVENT_ShowFace:
-				if ( _evt->v5 <= 3u ) //someone 
-					pParty->pPlayers[_evt->v5].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
-				else if ( _evt->v5 == 4 ) //active
-					pParty->pPlayers[uActiveCharacter].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
-				else if ( _evt->v5 == 5 ) //all players
-					{
-					for(int i=0; i<4; ++i) 
-						pParty->pPlayers[i].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
-					}
-				else	//random player	  
-					pParty->pPlayers[rand() % 4].PlayEmotion((CHARACTER_EXPRESSION_ID)_evt->v6, 0);
-					++curr_seq_num;
-					v4 = v124;
+          break;
+      case EVENT_CharacterAnimation:
+        if ( _evt->v5 <= 3u ) //someone
+          pParty->pPlayers[_evt->v5].PlaySound((PlayerSpeech) _evt->v6, 0);
+        else if ( _evt->v5 == 4 ) //active
+          pParty->pPlayers[uActiveCharacter].PlaySound((PlayerSpeech) _evt->v6, 0);
+        else if ( _evt->v5 == 5 ) //all
+          for(int i=0; i<4; ++i)
+            pParty->pPlayers[i].PlaySound((PlayerSpeech) _evt->v6, 0);
+        else  //random
+          pParty->pPlayers[rand() % 4].PlaySound((PlayerSpeech) _evt->v6, 0);
+        ++curr_seq_num;
+        v4 = v124;
 
-					break;
-			case EVENT_CharacterAnimation:
-				if ( _evt->v5 <= 3u ) //someone
-					pParty->pPlayers[_evt->v5].PlaySound((PlayerSpeech) _evt->v6, 0);
-				else if ( _evt->v5 == 4 ) //active
-					pParty->pPlayers[uActiveCharacter].PlaySound((PlayerSpeech) _evt->v6, 0);
-				else if ( _evt->v5 == 5 ) //all
-					for(int i=0; i<4; ++i) 
-						pParty->pPlayers[i].PlaySound((PlayerSpeech) _evt->v6, 0);
-				else	//random
-					pParty->pPlayers[rand() % 4].PlaySound((PlayerSpeech) _evt->v6, 0);
-				++curr_seq_num;
-				v4 = v124;
+        break;
+      case EVENT_ForPartyMember:
+        player_choose = _evt->v5;
+        ++curr_seq_num;
+        v4 = v124;
+        break;
+      case EVENT_SummonItem:
+        sub_42F7EB_DropItemAt(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8),
+          _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8),
+          _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8),
+          _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8),
+          _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8),
+          _evt->v25, _evt->v26, 0, 0);
+        ++curr_seq_num;
+        v4 = v124;
 
-				break;
-			case EVENT_ForPartyMember:
-				player_choose = _evt->v5;
-				++curr_seq_num;
-				v4 = v124;
-				break;
-			case EVENT_SummonItem:
-				sub_42F7EB_DropItemAt(_evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8),
-					_evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8),
-					_evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8),
-					_evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8),
-					_evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8),
-					_evt->v25, _evt->v26, 0, 0);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_Compare:
-				pValue = EVT_DWORD(_evt->v7);
-				if ( player_choose <= 3 )
-				{
-					if ( pPlayers[player_choose]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
-					{
-						v124 = -1;
-						curr_seq_num = _evt->v11 - 1;
-					}
-				}
-				else if ( player_choose == 4 ) //active
-				{
-					if ( uActiveCharacter )
-					{
-						if ( pPlayers[uActiveCharacter]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
-						{
-							v124 = -1;
-							curr_seq_num = _evt->v11 - 1;
-						}
-					}
-				}
-				else 	if ( player_choose == 5 )//all
-				{
-					v130=0;
-					for(int i = 1; i < 5; ++i)
-					{
-						if ( pPlayers[i]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
-						{
-							v124 = -1;
-							curr_seq_num = _evt->v11 - 1;
-							break;
-						}
-						++v130;
-					}
-				}
-				else if ( player_choose == 6 ) //random
-				{
-					if ( pPlayers[rand() % 4]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
-					{
-						v124 = -1;
-						curr_seq_num = _evt->v11 - 1;
-					}
-				}
-				++curr_seq_num;
-				v4 = v124;
-				break;
-			case EVENT_IsActorAlive:
-				 if  (IsActorAlive(EVT_BYTE(_evt->v5), EVT_DWORD(_evt->v6), EVT_BYTE(_evt->v10)))
-					 {
-					 v124 = -1;
-					 curr_seq_num = _evt->v11 - 1;
-					 }
-				 ++curr_seq_num;
-				 v4 = v124;
-				 break;
-			case EVENT_Substract:
-				pValue = EVT_DWORD(_evt->v7);
-				if ( EVT_WORD(_evt->v5) == VAR_PlayerItemInHands )
-				{
-					if ( pParty->pPickedItem.uItemID == pValue )//In hand
-					{
-						pMouse->RemoveHoldingItem();
-						++curr_seq_num;
-						v4 = v124;
-						break;
-					}
-					v67 = (int)pPlayers[uActiveCharacter]->pInventoryMatrix;
-					for ( v65 = 0; v65 < 126; ++v65 )
-					{
-						if ( (int)&pPlayers[uActiveCharacter]->pInventoryItemList[v67] == pValue )
-						{
-							pPlayers[uActiveCharacter]->RemoveItemAtInventoryIndex(v65);
-							++curr_seq_num;
-							v4 = v124;
-							break;
-						}
-						v67 += 4;
-					}
-					while ( (signed int)v65 < 126 );
-					v69 = (int)&pPlayers[uActiveCharacter]->pEquipment;
-					for ( v68 = 0; v68 < 16; ++v68 )
-					{
-						if ( *(int *)v69 && (int)&pPlayers[uActiveCharacter]->pInventoryItemList[v69] == pValue )
-						{
-							*(&pPlayers[uActiveCharacter]->pEquipment.uShield + v68) = 0;
-							++curr_seq_num;
-							v4 = v124;
-							break;
-						}
-						v69 += 4;
-					}
-					for (int i = 1; i < 5; i++)
-					{
-						v72 = (int)pPlayers[i]->pInventoryMatrix;
-						for ( int v71 = 0; v71 < 126; ++v71 )
-						{
-							if ( (int)&pPlayers[i]->pInventoryItemList[v72] == pValue )
-							{
-								pPlayers[i]->RemoveItemAtInventoryIndex(v71);
-								break;
-							}
-							v72 += 4;
-						}
-						v73 = 0;
-						v74 = (int)&pPlayers[i]->pEquipment;
-						while ( !*(int *)v74 || (int)&pPlayer->pInventoryItemList[v74] != pValue )
-						{
-							++v73;
-							v74 += 4;
-							if ( v73 >= 16 )
-								break;
-						}
-						*(&pPlayers[i]->pEquipment.uShield + v73) = 0;
-					}
-				}
-				if ( player_choose <= 3 )
-				{
-					pPlayer = &pParty->pPlayers[player_choose];
-					pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-				}
-				else if ( player_choose == 4 ) //active
-				{
-					if ( uActiveCharacter )
-					{
-						pPlayer = pPlayers[uActiveCharacter];
-						pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-					}
-				}
-				else 	if ( player_choose == 5 )//all
-				{
-					v130 = 0;
-					for(int i = 1; i < 5; ++i)
-					{
-						if ( pPlayers[i]->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
-							break;
-					}
-					++v130;
-				}
-				else if ( player_choose == 6 ) //random
-				{
-					player_choose = rand() % 4;
-					pPlayer = &pParty->pPlayers[player_choose];
-					pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-				}
-				++curr_seq_num;
-				v4 = v124;
-				break;
-			case EVENT_Set:
-				pValue = EVT_DWORD(_evt->v7);
-				if ( player_choose <= 3 )
-				{
-					pPlayer = &pParty->pPlayers[player_choose];
-					pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-				}
-				else if ( player_choose == 4 ) //active
-				{
-					if ( uActiveCharacter )
-					{
-						pPlayer = pPlayers[uActiveCharacter];
-						pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-					}
-				}
-				else if ( player_choose == 5 )//all
-				{
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_Compare:
+        pValue = EVT_DWORD(_evt->v7);
+        if ( player_choose <= 3 )
+        {
+          if ( pPlayers[player_choose]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
+          {
+            v124 = -1;
+            curr_seq_num = _evt->v11 - 1;
+          }
+        }
+        else if ( player_choose == 4 ) //active
+        {
+          if ( uActiveCharacter )
+          {
+            if ( pPlayers[uActiveCharacter]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
+            {
+              v124 = -1;
+              curr_seq_num = _evt->v11 - 1;
+            }
+          }
+        }
+        else  if ( player_choose == 5 )//all
+        {
+          v130=0;
+          for(int i = 1; i < 5; ++i)
+          {
+            if ( pPlayers[i]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
+            {
+              v124 = -1;
+              curr_seq_num = _evt->v11 - 1;
+              break;
+            }
+            ++v130;
+          }
+        }
+        else if ( player_choose == 6 ) //random
+        {
+          if ( pPlayers[rand() % 4]->CompareVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
+          {
+            v124 = -1;
+            curr_seq_num = _evt->v11 - 1;
+          }
+        }
+        ++curr_seq_num;
+        v4 = v124;
+        break;
+      case EVENT_IsActorAlive:
+         if  (IsActorAlive(EVT_BYTE(_evt->v5), EVT_DWORD(_evt->v6), EVT_BYTE(_evt->v10)))
+           {
+           v124 = -1;
+           curr_seq_num = _evt->v11 - 1;
+           }
+         ++curr_seq_num;
+         v4 = v124;
+         break;
+      case EVENT_Substract:
+        pValue = EVT_DWORD(_evt->v7);
+        if ( EVT_WORD(_evt->v5) == VAR_PlayerItemInHands )
+        {
+          if ( pParty->pPickedItem.uItemID == pValue )//In hand
+          {
+            pMouse->RemoveHoldingItem();
+            ++curr_seq_num;
+            v4 = v124;
+            break;
+          }
+          v67 = (int)pPlayers[uActiveCharacter]->pInventoryMatrix;
+          for ( v65 = 0; v65 < 126; ++v65 )
+          {
+            if ( (int)&pPlayers[uActiveCharacter]->pInventoryItemList[v67] == pValue )
+            {
+              pPlayers[uActiveCharacter]->RemoveItemAtInventoryIndex(v65);
+              ++curr_seq_num;
+              v4 = v124;
+              break;
+            }
+            v67 += 4;
+          }
+          while ( (signed int)v65 < 126 );
+          v69 = (int)&pPlayers[uActiveCharacter]->pEquipment;
+          for ( v68 = 0; v68 < 16; ++v68 )
+          {
+            if ( *(int *)v69 && (int)&pPlayers[uActiveCharacter]->pInventoryItemList[v69] == pValue )
+            {
+              *(&pPlayers[uActiveCharacter]->pEquipment.uShield + v68) = 0;
+              ++curr_seq_num;
+              v4 = v124;
+              break;
+            }
+            v69 += 4;
+          }
+          for (int i = 1; i < 5; i++)
+          {
+            v72 = (int)pPlayers[i]->pInventoryMatrix;
+            for ( int v71 = 0; v71 < 126; ++v71 )
+            {
+              if ( (int)&pPlayers[i]->pInventoryItemList[v72] == pValue )
+              {
+                pPlayers[i]->RemoveItemAtInventoryIndex(v71);
+                break;
+              }
+              v72 += 4;
+            }
+            v73 = 0;
+            v74 = (int)&pPlayers[i]->pEquipment;
+            while ( !*(int *)v74 || (int)&pPlayer->pInventoryItemList[v74] != pValue )
+            {
+              ++v73;
+              v74 += 4;
+              if ( v73 >= 16 )
+                break;
+            }
+            *(&pPlayers[i]->pEquipment.uShield + v73) = 0;
+          }
+        }
+        if ( player_choose <= 3 )
+        {
+          pPlayer = &pParty->pPlayers[player_choose];
+          pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+        }
+        else if ( player_choose == 4 ) //active
+        {
+          if ( uActiveCharacter )
+          {
+            pPlayer = pPlayers[uActiveCharacter];
+            pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+          }
+        }
+        else  if ( player_choose == 5 )//all
+        {
+          v130 = 0;
+          for(int i = 1; i < 5; ++i)
+          {
+            if ( pPlayers[i]->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue) )
+              break;
+          }
+          ++v130;
+        }
+        else if ( player_choose == 6 ) //random
+        {
+          player_choose = rand() % 4;
+          pPlayer = &pParty->pPlayers[player_choose];
+          pPlayer->SubtractVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+        }
+        ++curr_seq_num;
+        v4 = v124;
+        break;
+      case EVENT_Set:
+        pValue = EVT_DWORD(_evt->v7);
+        if ( player_choose <= 3 )
+        {
+          pPlayer = &pParty->pPlayers[player_choose];
+          pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+        }
+        else if ( player_choose == 4 ) //active
+        {
+          if ( uActiveCharacter )
+          {
+            pPlayer = pPlayers[uActiveCharacter];
+            pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+          }
+        }
+        else if ( player_choose == 5 )//all
+        {
                   //recheck v130
-					for(int i = 1; i < 5; ++i)
-						pPlayers[i]->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+          for(int i = 1; i < 5; ++i)
+            pPlayers[i]->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
 
-				}
-				else if ( player_choose == 6 ) //random
-				{
-					player_choose = rand() % 4;
-					pPlayer = &pParty->pPlayers[player_choose];
-					pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+        }
+        else if ( player_choose == 6 ) //random
+        {
+          player_choose = rand() % 4;
+          pPlayer = &pParty->pPlayers[player_choose];
+          pPlayer->SetVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
 
-				}
+        }
                 ++curr_seq_num;
                 v4 = v124;
                 break;
-			case EVENT_Add:
-				pValue = EVT_DWORD(_evt->v7);
-				if ( player_choose <= 3 )
-				{
-					pPlayer = &pParty->pPlayers[player_choose];
-					pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-				}
-				else if ( player_choose == 4 ) //active
-				{
-					if ( uActiveCharacter )
-					{
-						pPlayer = pPlayers[uActiveCharacter];
-						pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-					}
-				}
-				else if ( player_choose == 5 )//all
-				{
-					//v130 = 0;
-					for(int i = 1; i < 5; ++i)
-						pPlayers[i]->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+      case EVENT_Add:
+        pValue = EVT_DWORD(_evt->v7);
+        if ( player_choose <= 3 )
+        {
+          pPlayer = &pParty->pPlayers[player_choose];
+          pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+        }
+        else if ( player_choose == 4 ) //active
+        {
+          if ( uActiveCharacter )
+          {
+            pPlayer = pPlayers[uActiveCharacter];
+            pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+          }
+        }
+        else if ( player_choose == 5 )//all
+        {
+          //v130 = 0;
+          for(int i = 1; i < 5; ++i)
+            pPlayers[i]->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
 
-				}
-				else if ( player_choose == 6 ) //random
-				{
-					player_choose = rand() % 4;
-					pPlayer = &pParty->pPlayers[player_choose];
-					pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
-				}
+        }
+        else if ( player_choose == 6 ) //random
+        {
+          player_choose = rand() % 4;
+          pPlayer = &pParty->pPlayers[player_choose];
+          pPlayer->AddVariable((enum VariableType)EVT_WORD(_evt->v5), pValue);
+        }
                 v83 = EVT_WORD(_evt->v5);
                 if (v83 == 21 ||  // gold well on emerald isle
                     v83 == 22 || v83 == 23 || v83 == 24 )
@@ -1107,432 +1107,432 @@
                 ++curr_seq_num;
                 v4 = v124;
                 break;
-			case EVENT_InputString:
-				if ( !entry_line )
-					{
-					strcpy(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]);
-					v105 = curr_seq_num;
-					v121 = 26;
+      case EVENT_InputString:
+        if ( !entry_line )
+          {
+          strcpy(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[EVT_DWORD(_evt->v5 )]]);
+          v105 = curr_seq_num;
+          v121 = 26;
 LABEL_295:
-					sub_4451A8_press_any_key(uEventID, v105, v121);
+          sub_4451A8_press_any_key(uEventID, v105, v121);
 LABEL_301:
-					if ( v133 == 1 )
-						OnMapLeave();
-					return;
-					}
-				v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8);
-				if ( !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[_evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]])
-					|| !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[v84]]) )
-					{
-					v11 = _evt->v17;
+          if ( v133 == 1 )
+            OnMapLeave();
+          return;
+          }
+        v84 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8);
+        if ( !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[_evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8)]])
+          || !_stricmp(GameUI_Footer_TimedString.data(), &pLevelStr[pLevelStrOffsets[v84]]) )
+          {
+          v11 = _evt->v17;
 LABEL_130:
-					//v124 = -1;
+          //v124 = -1;
 LABEL_131:
-					curr_seq_num = v11 - 1;
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_RandomGoTo:
-				//v124 = -1;
-				v11 = (unsigned __int8)*(&_evt->v5 + rand() % ((_evt->v5 != 0) + (_evt->v6 != 0) + (_evt->v7 != 0) + (_evt->v8 != 0) + (_evt->v9 != 0)
-					+ (_evt->v10 != 0)));
+          curr_seq_num = v11 - 1;
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_RandomGoTo:
+        //v124 = -1;
+        v11 = (unsigned __int8)*(&_evt->v5 + rand() % ((_evt->v5 != 0) + (_evt->v6 != 0) + (_evt->v7 != 0) + (_evt->v8 != 0) + (_evt->v9 != 0)
+          + (_evt->v10 != 0)));
                 curr_seq_num = v11 - 1;
                 ++curr_seq_num;
                 v4 = v124;
                 break;
-			case EVENT_ReceiveDamage:
-				v85 = EVT_DWORD(_evt->v7 );
-				v86 = _evt->v5;
-				if ( (unsigned __int8)v86 <= 3 )
-					{
-					v119 = _evt->v6;
-					v115 = EVT_DWORD(_evt->v7 );
-					v89 = (unsigned __int8)v86;
-					v88 = &pParty->pPlayers[v89];
-					v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119);
-					++curr_seq_num;
-					v4 = v124;
-					break;
-					}
-				if ( v86 == 4 )
-					{
-					if ( !uActiveCharacter )
-						{
-						++curr_seq_num;
-						v4 = v124;
-						
-						//v6 = v123;
-						//v7 = "";
-						break;
-						}
-					v119 = _evt->v6;
-					v88 = pPlayers[uActiveCharacter];
-					v115 = EVT_DWORD(_evt->v7 );
-					v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119);
-					++curr_seq_num;
-					v4 = v124;
-					break;
-					}
-				if ( v86 != 5 )
-					{
-					v119 = _evt->v6;
-					v115 = EVT_DWORD(_evt->v7 );
-					v89 = rand() % 4;
-					v88 = &pParty->pPlayers[v89];
-					v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119);
-					++curr_seq_num;
-					v4 = v124;
-					
-					//v6 = v123;
-					//v7 = "";
-					break;
-					}
-				v87 = pParty->pPlayers;
-				do
-					{
-					v87->ReceiveDamage(v85, (DAMAGE_TYPE)_evt->v6);
-					++v87;
-					}
-					while ( (signed int)v87 < (signed int)pParty->pHirelings );
-					++curr_seq_num;
-					v4 = v124;
-					
-					//v6 = v123;
-					//v7 = "";
-					break;
-			case EVENT_ToggleIndoorLight:
-				pIndoor->ToggleLight(EVT_DWORD(_evt->v5 ), _evt->v9);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_SetFacesBit:
-				sub_44892E_set_faces_bit(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ToggleChestFlag:
-				Chest::ToggleFlag(EVT_DWORD(_evt->v5 ),	EVT_DWORD(_evt->v9 ), _evt->v13);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ToggleActorFlag:
-				Actor::ToggleFlag(EVT_DWORD(_evt->v5 ),	EVT_DWORD(_evt->v9 ), _evt->v13);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ToggleActorGroupFlag:
-				ToggleActorGroupFlag(EVT_DWORD(_evt->v5 ),	EVT_DWORD(_evt->v9 ), _evt->v13);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_SetSnow:
-				if ( !_evt->v5 )
-					pWeather->bRenderSnow = _evt->v6 != 0;
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_StatusText:
-				v90 = EVT_DWORD(_evt->v5 );
-				if ( activeLevelDecoration )
-					{
-					if ( activeLevelDecoration == (LevelDecoration*)1 )
-						{
-						current_npc_text = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90];
-						}
-					if ( canShowMessages == 1 )
-						{
-						v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90];
-						//LABEL_248:
-						ShowStatusBarString(v91, 2u);
-						}
-					}
-				else
-					{
-					if ( canShowMessages == 1 )
-						{
-						v91 = &pLevelStr[pLevelStrOffsets[v90]];
-						ShowStatusBarString(v91, 2u);
-						}
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ShowMessage:
-				v92 = EVT_DWORD(_evt->v5 );
-				if ( activeLevelDecoration )
-					{
-					v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92];
-					byte_5B0938[0] = 0;
-					current_npc_text = v93;
-					}
-				else
-					{
-					strcpy(byte_5B0938.data(), &pLevelStr[pLevelStrOffsets[v92]]);
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_CastSpell:
+      case EVENT_ReceiveDamage:
+        v85 = EVT_DWORD(_evt->v7 );
+        v86 = _evt->v5;
+        if ( (unsigned __int8)v86 <= 3 )
+          {
+          v119 = _evt->v6;
+          v115 = EVT_DWORD(_evt->v7 );
+          v89 = (unsigned __int8)v86;
+          v88 = &pParty->pPlayers[v89];
+          v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119);
+          ++curr_seq_num;
+          v4 = v124;
+          break;
+          }
+        if ( v86 == 4 )
+          {
+          if ( !uActiveCharacter )
+            {
+            ++curr_seq_num;
+            v4 = v124;
+
+            //v6 = v123;
+            //v7 = "";
+            break;
+            }
+          v119 = _evt->v6;
+          v88 = pPlayers[uActiveCharacter];
+          v115 = EVT_DWORD(_evt->v7 );
+          v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119);
+          ++curr_seq_num;
+          v4 = v124;
+          break;
+          }
+        if ( v86 != 5 )
+          {
+          v119 = _evt->v6;
+          v115 = EVT_DWORD(_evt->v7 );
+          v89 = rand() % 4;
+          v88 = &pParty->pPlayers[v89];
+          v88->ReceiveDamage(v115, (DAMAGE_TYPE)v119);
+          ++curr_seq_num;
+          v4 = v124;
+
+          //v6 = v123;
+          //v7 = "";
+          break;
+          }
+        v87 = pParty->pPlayers;
+        do
+          {
+          v87->ReceiveDamage(v85, (DAMAGE_TYPE)_evt->v6);
+          ++v87;
+          }
+          while ( (signed int)v87 < (signed int)pParty->pHirelings );
+          ++curr_seq_num;
+          v4 = v124;
+
+          //v6 = v123;
+          //v7 = "";
+          break;
+      case EVENT_ToggleIndoorLight:
+        pIndoor->ToggleLight(EVT_DWORD(_evt->v5 ), _evt->v9);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_SetFacesBit:
+        sub_44892E_set_faces_bit(EVT_DWORD(_evt->v5),EVT_DWORD(_evt->v9), _evt->v13);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ToggleChestFlag:
+        Chest::ToggleFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ToggleActorFlag:
+        Actor::ToggleFlag(EVT_DWORD(_evt->v5 ), EVT_DWORD(_evt->v9 ), _evt->v13);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ToggleActorGroupFlag:
+        ToggleActorGroupFlag(EVT_DWORD(_evt->v5 ),  EVT_DWORD(_evt->v9 ), _evt->v13);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_SetSnow:
+        if ( !_evt->v5 )
+          pWeather->bRenderSnow = _evt->v6 != 0;
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_StatusText:
+        v90 = EVT_DWORD(_evt->v5 );
+        if ( activeLevelDecoration )
+          {
+          if ( activeLevelDecoration == (LevelDecoration*)1 )
+            {
+            current_npc_text = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90];
+            }
+          if ( canShowMessages == 1 )
+            {
+            v91 = pNPCTopics[v90-1].pText;//(&dword_721664)[8 * v90];
+            //LABEL_248:
+            ShowStatusBarString(v91, 2u);
+            }
+          }
+        else
+          {
+          if ( canShowMessages == 1 )
+            {
+            v91 = &pLevelStr[pLevelStrOffsets[v90]];
+            ShowStatusBarString(v91, 2u);
+            }
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ShowMessage:
+        v92 = EVT_DWORD(_evt->v5 );
+        if ( activeLevelDecoration )
+          {
+          v93 = (char *)pNPCTopics[v92-1].pText;//(&dword_721664)[8 * v92];
+          byte_5B0938[0] = 0;
+          current_npc_text = v93;
+          }
+        else
+          {
+          strcpy(byte_5B0938.data(), &pLevelStr[pLevelStrOffsets[v92]]);
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_CastSpell:
               EventCastSpell(_evt->v5, _evt->v6, _evt->v7, EVT_DWORD(_evt->v8 ),
                     EVT_DWORD(_evt->v12 ), EVT_DWORD(_evt->v16 ), EVT_DWORD(_evt->v20 ),
                     EVT_DWORD(_evt->v24 ), EVT_DWORD(_evt->v28 ));
               ++curr_seq_num;
               v4 = v124;
               break;
-			case EVENT_SetTexture:
-				sub_44861E_set_texture(EVT_DWORD(_evt->v5 ), (char *)&_evt->v9);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_SetSprite:
-				SetDecorationSprite(EVT_DWORD(_evt->v5 ), _evt->v9, (char *)&_evt->v10);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_SummonMonsters:
-				sub_448CF4_spawn_monsters(_evt->v5, _evt->v6, _evt->v7,EVT_DWORD(_evt->v8 ),
+      case EVENT_SetTexture:
+        sub_44861E_set_texture(EVT_DWORD(_evt->v5 ), (char *)&_evt->v9);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_SetSprite:
+        SetDecorationSprite(EVT_DWORD(_evt->v5 ), _evt->v9, (char *)&_evt->v10);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_SummonMonsters:
+        sub_448CF4_spawn_monsters(_evt->v5, _evt->v6, _evt->v7,EVT_DWORD(_evt->v8 ),
                     EVT_DWORD(_evt->v12 ), EVT_DWORD(_evt->v16 ), EVT_DWORD(_evt->v20 ),
                     EVT_DWORD(_evt->v24 ));
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_MouseOver:
-			case EVENT_LocationName:
-				--curr_seq_num;
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_ChangeDoorState:
-				sub_449A49_door_switch_animation(_evt->v5, _evt->v6);
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_OpenChest:
-				if ( !Chest::Open(_evt->v5) )
-					goto LABEL_301;
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_MoveToMap:
-				v94 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
-				v135 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
-				v132 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
-				v126 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8);
-				v129 = _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8);
-				v95 = _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8);
-				v96 = _evt->v25;
-				v97 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8);
-				v134 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8);
-				if ( _evt->v29 || _evt->v30 )
-					{
-					if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode )
-						pRenderer->_49FD3A();
-					TransitionUI_Load(_evt->v29, _evt->v30, v135, v132, v126, v129, v95, v134, (char *)&_evt->v31);
-					dword_5C3418 = uEventID;
-					dword_5C341C = curr_seq_num + 1;
-					goto LABEL_301;
-					}
-				_5B65AC_npcdata_fame_or_other = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
-				_5B65A8_npcdata_uflags_or_other = v94;
-				_5B65B0_npcdata_rep_or_other = v126;
-				if ( v129 == -1 )
-					{
-					v98 = _5B65B4_npcdata_loword_house_or_other;
-					}
-				else
-					{
-					v98 = v129 & stru_5C6E00->uDoublePiMask;
-					_5B65B4_npcdata_loword_house_or_other = v129 & stru_5C6E00->uDoublePiMask;
-					}
-				v99 = (char *)&_evt->v31;
-				_5B65B8_npcdata_hiword_house_or_other = v95;
-				dword_5B65BC = v97;
-				v100 = v94 | v132 | v126 | v95 | v97 | v98;
-				dword_5B65C0 = v100;
-				if ( *v99 == 48 )
-					{
-					if ( v100 )
-						{
-						pParty->vPosition.x = v135;
-						pParty->vPosition.y = v132;
-						pParty->vPosition.z = v126;
-						pParty->uFallStartY = v126;
-						if ( _5B65B4_npcdata_loword_house_or_other != -1 )
-							pParty->sRotationY = _5B65B4_npcdata_loword_house_or_other;
-						_5B65B4_npcdata_loword_house_or_other = -1;
-						v120 = 0;
-						v116 = 0;
-						v111 = 0;
-						v110 = 0;
-						v109 = -1;
-						v108 = 0;
-						v107 = 0;
-						pParty->sRotationX = v95;
-						pParty->uFallSpeed = v134;
-						dword_5B65C0 = 0;
-						dword_5B65BC = 0;
-						_5B65B8_npcdata_hiword_house_or_other = 0;
-						_5B65B0_npcdata_rep_or_other = 0;
-						_5B65AC_npcdata_fame_or_other = 0;
-						_5B65A8_npcdata_uflags_or_other = 0;
-						v106 = 232;
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_MouseOver:
+      case EVENT_LocationName:
+        --curr_seq_num;
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_ChangeDoorState:
+        sub_449A49_door_switch_animation(_evt->v5, _evt->v6);
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_OpenChest:
+        if ( !Chest::Open(_evt->v5) )
+          goto LABEL_301;
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_MoveToMap:
+        v94 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
+        v135 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
+        v132 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
+        v126 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8);
+        v129 = _evt->v17 + ((_evt->v18 + ((_evt->v19 + ((uint)_evt->v20 << 8)) << 8)) << 8);
+        v95 = _evt->v21 + ((_evt->v22 + ((_evt->v23 + ((uint)_evt->v24 << 8)) << 8)) << 8);
+        v96 = _evt->v25;
+        v97 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8);
+        v134 = v96 + ((_evt->v26 + ((_evt->v27 + ((uint)_evt->v28 << 8)) << 8)) << 8);
+        if ( _evt->v29 || _evt->v30 )
+          {
+          if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode )
+            pRenderer->_49FD3A();
+          TransitionUI_Load(_evt->v29, _evt->v30, v135, v132, v126, v129, v95, v134, (char *)&_evt->v31);
+          dword_5C3418 = uEventID;
+          dword_5C341C = curr_seq_num + 1;
+          goto LABEL_301;
+          }
+        _5B65AC_npcdata_fame_or_other = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
+        _5B65A8_npcdata_uflags_or_other = v94;
+        _5B65B0_npcdata_rep_or_other = v126;
+        if ( v129 == -1 )
+          {
+          v98 = _5B65B4_npcdata_loword_house_or_other;
+          }
+        else
+          {
+          v98 = v129 & stru_5C6E00->uDoublePiMask;
+          _5B65B4_npcdata_loword_house_or_other = v129 & stru_5C6E00->uDoublePiMask;
+          }
+        v99 = (char *)&_evt->v31;
+        _5B65B8_npcdata_hiword_house_or_other = v95;
+        dword_5B65BC = v97;
+        v100 = v94 | v132 | v126 | v95 | v97 | v98;
+        dword_5B65C0 = v100;
+        if ( *v99 == 48 )
+          {
+          if ( v100 )
+            {
+            pParty->vPosition.x = v135;
+            pParty->vPosition.y = v132;
+            pParty->vPosition.z = v126;
+            pParty->uFallStartY = v126;
+            if ( _5B65B4_npcdata_loword_house_or_other != -1 )
+              pParty->sRotationY = _5B65B4_npcdata_loword_house_or_other;
+            _5B65B4_npcdata_loword_house_or_other = -1;
+            v120 = 0;
+            v116 = 0;
+            v111 = 0;
+            v110 = 0;
+            v109 = -1;
+            v108 = 0;
+            v107 = 0;
+            pParty->sRotationX = v95;
+            pParty->uFallSpeed = v134;
+            dword_5B65C0 = 0;
+            dword_5B65BC = 0;
+            _5B65B8_npcdata_hiword_house_or_other = 0;
+            _5B65B0_npcdata_rep_or_other = 0;
+            _5B65AC_npcdata_fame_or_other = 0;
+            _5B65A8_npcdata_uflags_or_other = 0;
+            v106 = 232;
 LABEL_280:
-						pAudioPlayer->PlaySound((SoundID)v106, v107, v108, v109, v110, v111, v116, v120);
-						}
-					}
-				else
-					{
-					pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((activeLevelDecoration == NULL) + 1);
-					sub_44987B(v99, MapStartPoint_Party);
-					v133 = 1;
-					if ( pCurrentScreen == SCREEN_HOUSE )
-						{
-						if ( uGameState == GAME_STATE_2 )
-							{
-							pAudioPlayer->StopChannels(-1, -1);
-							dialog_menu_id = HOUSE_DIALOGUE_NULL;
-							while ( sub_4BD8B5() )
-								;
-							pVideoPlayer->Unload();
-							window_SpeakInHouse->Release();
-							window_SpeakInHouse = 0;
-							if ( pMessageQueue_50CBD0->uNumMessages )
-								pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
-							pCurrentScreen = SCREEN_GAME;
-							viewparams->bRedrawGameUI = 1;
-							pDialogueNPCCount = 0;
-							pDialogueWindow->Release();
-							dialog_menu_id = HOUSE_DIALOGUE_NULL;
-							pDialogueWindow = 0;
-							pIcons_LOD->SyncLoadedFilesCount();
-							}
-						OnMapLeave();
-						return;
-						}
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_PlaySound:
-				v120 = 0;
-				v116 = 0;
-				v111 = 0;
-				v110 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8);
-				v109 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
-				v108 = 0;
-				v107 = 0;
-				v106 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
-				goto LABEL_280;
-			case EVENT_GiveItem:
-				item.Reset();
-				//v101 = &pSomeEVT[v9];
-				v102 = _evt->v7
-					+ ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8);
-				pItemsTable->GenerateItem(_evt->v5, _evt->v6, &item);
-				if ( v102 )
-					item.uItemID = v102;
-				pParty->SetHoldingItem(&item);
-				++curr_seq_num;
-				v4 = v124;
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_SpeakInHouse: 
-				if ( EnterHouse((enum HOUSE_ID)EVT_DWORD(_evt->v5)))
-					{
-					if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode )
-						pRenderer->_49FD3A();
-					pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0);
-					pAudioPlayer->PlaySound(SOUND_EnteringAHouse, 814, 0, -1, 0, 0, 0, 0);
-					v104 = 187;
-					if ( uCurrentHouse_Animation != 167 )
-						v104 = EVT_DWORD(_evt->v5);
-					window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, v104, 0);
-					window_SpeakInHouse->CreateButton( 61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1,  '1', "", 0);
-					window_SpeakInHouse->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2,  '2', "", 0);
-					window_SpeakInHouse->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3,  '3', "", 0);
-					window_SpeakInHouse->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4,  '4', "", 0);
-					window_SpeakInHouse->CreateButton(  0,   0,  0, 0, 1,  0, UIMSG_CycleCharacters, 0, '\t', "", 0);
-					}
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-			case EVENT_PressAnyKey:
-				v121 = 33;
-				v105 = curr_seq_num + 1;
-				goto LABEL_295;
-			case EVENT_Exit:
-				if ( v133 == 1 )
-		      		OnMapLeave();
-				return;
-			default:
-				++curr_seq_num;
-				v4 = v124;
-				
-				//v6 = v123;
-				//v7 = "";
-				break;
-				}
-			}
-		++v4;
-		v124 = v4;
-		if ( v4 >= uSomeEVT_NumEvents )
-		   goto LABEL_301;
-		//}
-		}
-	}
+            pAudioPlayer->PlaySound((SoundID)v106, v107, v108, v109, v110, v111, v116, v120);
+            }
+          }
+        else
+          {
+          pGameLoadingUI_ProgressBar->uType = (GUIProgressBar::Type)((activeLevelDecoration == NULL) + 1);
+          sub_44987B(v99, MapStartPoint_Party);
+          v133 = 1;
+          if ( pCurrentScreen == SCREEN_HOUSE )
+            {
+            if ( uGameState == GAME_STATE_2 )
+              {
+              pAudioPlayer->StopChannels(-1, -1);
+              dialog_menu_id = HOUSE_DIALOGUE_NULL;
+              while ( sub_4BD8B5() )
+                ;
+              pVideoPlayer->Unload();
+              window_SpeakInHouse->Release();
+              window_SpeakInHouse = 0;
+              if ( pMessageQueue_50CBD0->uNumMessages )
+                pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0;
+              pCurrentScreen = SCREEN_GAME;
+              viewparams->bRedrawGameUI = 1;
+              pDialogueNPCCount = 0;
+              pDialogueWindow->Release();
+              dialog_menu_id = HOUSE_DIALOGUE_NULL;
+              pDialogueWindow = 0;
+              pIcons_LOD->SyncLoadedFilesCount();
+              }
+            OnMapLeave();
+            return;
+            }
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_PlaySound:
+        v120 = 0;
+        v116 = 0;
+        v111 = 0;
+        v110 = _evt->v13 + ((_evt->v14 + ((_evt->v15 + ((uint)_evt->v16 << 8)) << 8)) << 8);
+        v109 = _evt->v9 + ((_evt->v10 + ((_evt->v11 + ((uint)_evt->v12 << 8)) << 8)) << 8);
+        v108 = 0;
+        v107 = 0;
+        v106 = _evt->v5 + ((_evt->v6 + ((_evt->v7 + ((uint)_evt->v8 << 8)) << 8)) << 8);
+        goto LABEL_280;
+      case EVENT_GiveItem:
+        item.Reset();
+        //v101 = &pSomeEVT[v9];
+        v102 = _evt->v7
+          + ((_evt->v8 + ((_evt->v9 + ((uint)_evt->v10 << 8)) << 8)) << 8);
+        pItemsTable->GenerateItem(_evt->v5, _evt->v6, &item);
+        if ( v102 )
+          item.uItemID = v102;
+        pParty->SetHoldingItem(&item);
+        ++curr_seq_num;
+        v4 = v124;
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_SpeakInHouse:
+        if ( EnterHouse((enum HOUSE_ID)EVT_DWORD(_evt->v5)))
+          {
+          if ( pRenderer->pRenderD3D && !pRenderer->bWindowMode )
+            pRenderer->_49FD3A();
+          pAudioPlayer->PlaySound((SoundID)0, 0, 0, -1, 0, 0, 0, 0);
+          pAudioPlayer->PlaySound(SOUND_EnteringAHouse, 814, 0, -1, 0, 0, 0, 0);
+          v104 = 187;
+          if ( uCurrentHouse_Animation != 167 )
+            v104 = EVT_DWORD(_evt->v5);
+          window_SpeakInHouse = GUIWindow::Create(0, 0, 640, 480, WINDOW_HouseInterior, v104, 0);
+          window_SpeakInHouse->CreateButton( 61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1,  '1', "", 0);
+          window_SpeakInHouse->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2,  '2', "", 0);
+          window_SpeakInHouse->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3,  '3', "", 0);
+          window_SpeakInHouse->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4,  '4', "", 0);
+          window_SpeakInHouse->CreateButton(  0,   0,  0, 0, 1,  0, UIMSG_CycleCharacters, 0, '\t', "", 0);
+          }
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+      case EVENT_PressAnyKey:
+        v121 = 33;
+        v105 = curr_seq_num + 1;
+        goto LABEL_295;
+      case EVENT_Exit:
+        if ( v133 == 1 )
+              OnMapLeave();
+        return;
+      default:
+        ++curr_seq_num;
+        v4 = v124;
+
+        //v6 = v123;
+        //v7 = "";
+        break;
+        }
+      }
+    ++v4;
+    v124 = v4;
+    if ( v4 >= uSomeEVT_NumEvents )
+       goto LABEL_301;
+    //}
+    }
+  }
 
 //----- (00444732) --------------------------------------------------------
 char *GetEventHintString(unsigned int uEventID)
@@ -1548,14 +1548,14 @@
   event_index = 0;
   if ( uLevelEVT_NumEvents <= 0 )
     return NULL;
- 
+
     //v2 = (char *)&pLevelEVT_Index[0].uEventOffsetInEVT;
     while ( 1 )
     {
       if ( pLevelEVT_Index[event_index].uEventID == uEventID )
       {
-		test_evt=(_evt_raw*)&pLevelEVT[pLevelEVT_Index[event_index].uEventOffsetInEVT];
-		last_evt=test_evt;
+    test_evt=(_evt_raw*)&pLevelEVT[pLevelEVT_Index[event_index].uEventOffsetInEVT];
+    last_evt=test_evt;
         event_pos = pLevelEVT_Index[event_index+1].uEventOffsetInEVT;
         if ( test_evt->_e_type == EVENT_MouseOver )
           break;
@@ -1564,7 +1564,7 @@
       if ( event_index >= uLevelEVT_NumEvents )
        return NULL;
     }
-	test_evt=(_evt_raw*)&pLevelEVT[event_pos];
+  test_evt=(_evt_raw*)&pLevelEVT[event_pos];
     if ( test_evt->_e_type== EVENT_SpeakInHouse )
     {
       str_index = EVT_DWORD(test_evt->v5);
@@ -1575,7 +1575,7 @@
       for ( i = event_index+1; pLevelEVT_Index[i].uEventID  == uEventID; ++i )
       {
         event_pos = pLevelEVT_Index[i].uEventOffsetInEVT;
-		test_evt=(_evt_raw*)&pLevelEVT[event_pos];
+    test_evt=(_evt_raw*)&pLevelEVT[event_pos];
         if ( test_evt->_e_type == EVENT_SpeakInHouse )
         {
           str_index = EVT_DWORD(test_evt->v5);
@@ -1585,6 +1585,6 @@
       }
       result = &pLevelStr[pLevelStrOffsets[EVT_BYTE(last_evt->v5)]];
     }
- 
+
   return result;
 }
--- a/Indoor.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Indoor.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -2245,7 +2245,7 @@
 
   for (uint i = 0; i < uNumLevelDecorations; ++i)
   {
-    memcpy(&pLevelDecorations[i].field_2, pData, 2);
+    memcpy(&pLevelDecorations[i].uFlags, pData, 2);
     pData += 2;
   }
 
@@ -3868,7 +3868,7 @@
         _6807B8_level_decorations_ids[v16] = i;
     }
 
-    if ( !(pDecortaion->field_2 & 0x20) )
+    if (!(pDecortaion->uFlags & LEVEL_DECORATION_INVISIBLE))
     {
       v17 = &pDecorationList->pDecorations[pDecortaion->uDecorationDescID];
       if (!v17->DontDraw())
@@ -3908,7 +3908,7 @@
             v22 = stru_5E4C90._decor_events[v21 + 74 - 75];
             v35 = v21;
             if ( !v22 )
-              pDecortaion->field_2 |= 0x20;
+              pDecortaion->uFlags |= LEVEL_DECORATION_INVISIBLE;
           }
         }
       }
@@ -4397,7 +4397,7 @@
   {
     v20 = &pActors[ai_near_actors_ids[v18]];
     if ( v20->uAttributes & 0x8000
-      || (v21 = sub_4070EF_prolly_collide_objects(PID(OBJECT_Actor,ai_near_actors_ids[v18]), 4u), v18 = i, v21) )
+      || (v21 = sub_4070EF_prolly_detect_player(PID(OBJECT_Actor,ai_near_actors_ids[v18]), 4u), v18 = i, v21) )
     {
       v22 = ai_near_actors_ids[v18];
       v20->uAttributes |= 0x8000u;
@@ -4984,7 +4984,7 @@
   //v26 = uDecorationID;
   //LODWORD(v31) = uSectorID;
   v2 = &pLevelDecorations[uDecorationID];
-  if (v2->field_2 & 0x20)
+  if (v2->uFlags & LEVEL_DECORATION_INVISIBLE)
     return;
 
     v3 = &pDecorationList->pDecorations[v2->uDecorationDescID];
@@ -6159,7 +6159,7 @@
       if ( v9 )
       {
         EventProcessor(v9, a1, 1);
-        LOBYTE(v8->field_2) |= 8u;
+        v8->uFlags |= LEVEL_DECORATION_VISIBLE_ON_MAP;
       }
       else
       {
--- a/Level/Decoration.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Level/Decoration.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -7,33 +7,25 @@
 //----- (004583B0) --------------------------------------------------------
 LevelDecoration::LevelDecoration()
 {
-  this->field_1A = 0;
-  this->field_18 = 0;
-  this->vPosition.z = 0;
-  this->vPosition.y = 0;
-  this->vPosition.x = 0;
-  this->uDecorationDescID = 0;
-  this->field_2 = 0;
-  this->field_16_event_id = 0;
-  this->uCog = 0;
+  memset(this, 0, sizeof(this));
 }
 
 //----- (00450929) --------------------------------------------------------
 int LevelDecoration::GetGlobalEvent()
 {
-  LevelDecoration *v1; // esi@1
-  signed int v2; // eax@1
-  int v3; // eax@5
-  int v4; // eax@6
-  int v5; // eax@7
-  int v6; // eax@8
-  int v7; // eax@9
-  int result; // eax@14
-  int v9; // eax@18
-  int v10; // eax@19
-  int v11; // eax@20
-  int v12; // eax@21
-  int v13; // eax@22
+  //LevelDecoration *v1; // esi@1
+  //signed int v2; // eax@1
+  //int v3; // eax@5
+  //int v4; // eax@6
+  //int v5; // eax@7
+  //int v6; // eax@8
+  //int v7; // eax@9
+  //int result; // eax@14
+  //int v9; // eax@18
+  //int v10; // eax@19
+  //int v11; // eax@20
+  //int v12; // eax@21
+  //int v13; // eax@22
 
   switch (uDecorationDescID)
   {
@@ -100,18 +92,18 @@
     case 207: return 169 + rand() % 7; // dec61
     case 208: return 176 + rand() % 7; // dec62
     case 209: return 183 + rand() % 7; // dec63
-    case 210: return 150;              // dec64 "Magic Pedistal"
-    case 211: return 151;              // dec65 "Magic Pedistal"
-    case 212: return 152;              // dec66 "Magic Pedistal"
-    case 213: return 153;              // dec67 "Magic Pedistal"
-    case 214: return 154;              // dec68 "Magic Pedistal"
-    case 215: return 155;              // dec69 "Magic Pedistal"
-    case 216: return 156;              // dec70 "Magic Pedistal"
-    case 217: return 157;              // dec71 "Magic Pedistal"
-    case 218: return 158;              // dec72 "Magic Pedistal"
-    case 219: return 159;              // dec73 "Magic Pedistal"
-    case 220: return 160;              // dec74 "Magic Pedistal"
-    case 221: return 161;              // dec75 "Magic Pedistal"
+    case 210: return 150;              // dec64 "Magic pedestal"
+    case 211: return 151;              // dec65 "Magic pedestal"
+    case 212: return 152;              // dec66 "Magic pedestal"
+    case 213: return 153;              // dec67 "Magic pedestal"
+    case 214: return 154;              // dec68 "Magic pedestal"
+    case 215: return 155;              // dec69 "Magic pedestal"
+    case 216: return 156;              // dec70 "Magic pedestal"
+    case 217: return 157;              // dec71 "Magic pedestal"
+    case 218: return 158;              // dec72 "Magic pedestal"
+    case 219: return 159;              // dec73 "Magic pedestal"
+    case 220: return 160;              // dec74 "Magic pedestal"
+    case 221: return 161;              // dec75 "Magic pedestal"
 
     case 222: case 223: case 224:
     case 225: case 226: case 227:
@@ -122,7 +114,7 @@
 }
 
 //----- (0047A825) --------------------------------------------------------
-bool LevelDecoration::_47A825()
+bool LevelDecoration::IsObeliskChestActive()
 {
   //bool v1; // ebx@1
   //LevelDecoration *v2; // edi@1
@@ -144,11 +136,11 @@
       && _449B57_test_bit(pParty->_quest_bits, 176)
       && _449B57_test_bit(pParty->_quest_bits, 177))
   {
-    this->field_2 &= ~LEVEL_DECORATION_INVISIBLE;
+    this->uFlags &= ~LEVEL_DECORATION_INVISIBLE;
     return true;
   }
 
-  this->field_2 |= LEVEL_DECORATION_INVISIBLE;
+  this->uFlags |= LEVEL_DECORATION_INVISIBLE;
   return false;
 }
 
@@ -172,7 +164,7 @@
 
   if (uDecorationDescID >= 206 && uDecorationDescID <= 209) // lighthouse fire
     return true;
-  if (uDecorationDescID >= 210 && uDecorationDescID <= 221) // magic pedistal
+  if (uDecorationDescID >= 210 && uDecorationDescID <= 221) // magic pedestal
     return true;
 
   return false;
--- a/Level/Decoration.h	Sun Sep 01 17:10:29 2013 +0600
+++ b/Level/Decoration.h	Sun Sep 01 17:10:55 2013 +0600
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <cstdint>
+
 #include "../VectorTypes.h"
 
 enum LEVEL_DECORATION_FLAGS
@@ -20,18 +22,18 @@
   LevelDecoration();
   int GetGlobalEvent();
   bool IsInteractive();
-  bool _47A825();
+  bool IsObeliskChestActive();
 
 
-  unsigned __int16 uDecorationDescID;
-  __int16 field_2;
-  struct Vec3_int_ vPosition;
-  int field_10_y_rot;
-  __int16 uCog;
-  __int16 field_16_event_id;
-  __int16 field_18;
-  __int16 field_1A;
-  __int16 _idx_in_stru123;
-  __int16 field_1E;
+  uint16_t uDecorationDescID;
+  uint16_t uFlags;
+  Vec3_int_ vPosition;
+  int32_t field_10_y_rot;
+  uint16_t uCog;
+  int16_t field_16_event_id;
+  int16_t field_18;
+  int16_t field_1A;
+  int16_t _idx_in_stru123;
+  int16_t field_1E;
 };
 #pragma pack(pop)
--- a/Outdoor.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Outdoor.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -2271,7 +2271,7 @@
     //thisa = (int)&pLevelDecorations[0].field_2;
     //do
     //{
-    memcpy(&pLevelDecorations[i].field_2, pSrc, 2);
+    memcpy(&pLevelDecorations[i].uFlags, pSrc, 2);
     pSrc += 2;
       //thisa += 32;
       //v85 = (char *)v85 + 2;
@@ -2717,7 +2717,7 @@
         _6807B8_level_decorations_ids[v5] = i;
       }
       if ( v8 && decor->uCog == 20 )
-        decor->field_2 |= 0x0040u;
+        decor->uFlags |= LEVEL_DECORATION_OBELISK_CHEST;
       if ( !decor->field_16_event_id )
       {
         if ( decor->IsInteractive() )
@@ -2727,7 +2727,7 @@
             v6 = v1 + 75;
             decor->_idx_in_stru123 = v6;
             if ( !stru_5E4C90._decor_events[v1++] )
-              decor->field_2 |= 0x0020u;
+              decor->uFlags |= LEVEL_DECORATION_INVISIBLE;
           }
         }
       }
--- a/Render.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Render.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -915,259 +915,259 @@
     auto decor = &pLevelDecorations[i];
     auto v0 = (char *)&pLevelDecorations[i].vPosition.y;
 
-      if ( (!(decor->field_2 & 0x40) || decor->_47A825()) && !(decor->field_2 & 0x20) )
-      {
-        //v1 = &pDecorationList->pDecorations[decor->uDecorationDescID];
-        auto decor_desc = pDecorationList->pDecorations + decor->uDecorationDescID;
-        v2 = decor_desc->uFlags;
-        if ( (char)v2 >= 0 )
+    if ((!(decor->uFlags & LEVEL_DECORATION_OBELISK_CHEST) || decor->IsObeliskChestActive()) && !(decor->uFlags & LEVEL_DECORATION_INVISIBLE))
+    {
+      //v1 = &pDecorationList->pDecorations[decor->uDecorationDescID];
+      auto decor_desc = pDecorationList->pDecorations + decor->uDecorationDescID;
+      v2 = decor_desc->uFlags;
+      if ( (char)v2 >= 0 )
+      {
+        if ( !(v2 & 0x22) )
         {
-          if ( !(v2 & 0x22) )
+          //v4 = decor->vPosition.x;
+          //v5 = decor->vPosition.z;
+          v6 = pMiscTimer->uTotalGameTimeElapsed;
+          //y = decor->vPosition.y;
+          //x = decor->vPosition.x;
+          //v36 = decor->vPosition.z;
+          v7 = abs(decor->vPosition.x + decor->vPosition.y);
+
+
+          #pragma region "New: seasons change"
+          extern bool change_seasons;
+          if (change_seasons)
+            switch (pParty->uCurrentMonth)
+            {
+              // case 531 (tree60), 536 (tree65), 537 (tree66) have no autumn/winter sprites
+              case 11: case 0: case 1: // winter
+                switch (decor_desc->uSpriteID)
+                {
+                  //case 468: //bush02    grows on swamps, which are evergreeen actually
+                  case 548:             // flower10
+                  case 547:             // flower09
+                  case 541:             // flower03
+                  case 539: continue;   // flower01
+
+                  case 483:             // tree01
+                  case 486:             // tree04
+                  case 492:             // tree10
+                    pSpriteFrameTable->InitializeSprite(decor_desc->uSpriteID + 2);
+                    v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID + 2, v6 + v7);
+                  break;
+
+                  default:
+                    v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
+                }
+              break;
+
+              case 2: case 3: case 4: // spring
+                switch (decor_desc->uSpriteID)
+                {
+                }
+                v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
+              break;
+
+              case 8: case 9: case 10: // autumn
+                switch (decor_desc->uSpriteID)
+                {
+                  //case 468: //bush02    grows on swamps, which are evergreeen actually
+                  case 548:             // flower10
+                  case 547:             // flower09
+                  case 541:             // flower03
+                  case 539: continue;   // flower01
+                  
+                  case 483:             // tree01
+                  case 486:             // tree04
+                  case 492:             // tree10
+                    pSpriteFrameTable->InitializeSprite(decor_desc->uSpriteID + 1);
+                    v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID + 1, v6 + v7);
+                  break;
+
+                  default:
+                    v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
+                }
+              break;
+
+              case 5: case 6: case 7: // summer
+                //all green by default
+                v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
+              break;
+
+              default: assert(pParty->uCurrentMonth >= 0 && pParty->uCurrentMonth < 12);
+            }
+          else
+            v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
+          #pragma endregion
+          //v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
+
+          //v9 = v8;
+          v42 = v8->uFlags;
+          a5 = v8->uGlowRadius;
+          v10 = (unsigned __int16 *)stru_5C6E00->Atan2(decor->vPosition.x - pIndoorCamera->pos.x,
+                                                       decor->vPosition.y - pIndoorCamera->pos.y);
+          v11 = *((int *)v0 + 2);
+          v37 = v10;
+          v12 = v42;
+          v38 = 0;
+          v13 = ((signed int)(stru_5C6E00->uIntegerPi
+                            + ((signed int)stru_5C6E00->uIntegerPi >> 3)
+                            + v11
+                            - (signed int)v37) >> 8) & 7;
+          v37 = (unsigned __int16 *)v13;
+          if ( v42 & 2 )
+            v38 = 2;
+          if ( (256 << v13) & v42 )
+            v38 |= 4u;
+          if ( v12 & 0x40000 )
+            v38 |= 0x40u;
+          if ( v12 & 0x20000 )
+            LOBYTE(v38) = v38 | 0x80;
+          if ( a5 )
           {
-            //v4 = decor->vPosition.x;
-            //v5 = decor->vPosition.z;
-            v6 = pMiscTimer->uTotalGameTimeElapsed;
-            //y = decor->vPosition.y;
-            //x = decor->vPosition.x;
-            //v36 = decor->vPosition.z;
-            v7 = abs(decor->vPosition.x + decor->vPosition.y);
-
-
-            #pragma region "New: seasons change"
-            extern bool change_seasons;
-            if (change_seasons)
-              switch (pParty->uCurrentMonth)
-              {
-                // case 531 (tree60), 536 (tree65), 537 (tree66) have no autumn/winter sprites
-                case 11: case 0: case 1: // winter
-                  switch (decor_desc->uSpriteID)
-                  {
-                    //case 468: //bush02    grows on swamps, which are evergreeen actually
-                    case 548:             // flower10
-                    case 547:             // flower09
-                    case 541:             // flower03
-                    case 539: continue;   // flower01
-
-                    case 483:             // tree01
-                    case 486:             // tree04
-                    case 492:             // tree10
-                      pSpriteFrameTable->InitializeSprite(decor_desc->uSpriteID + 2);
-                      v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID + 2, v6 + v7);
-                    break;
-
-                    default:
-                      v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
-                  }
-                break;
-
-                case 2: case 3: case 4: // spring
-                  switch (decor_desc->uSpriteID)
-                  {
-                  }
-                  v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
-                break;
-
-                case 8: case 9: case 10: // autumn
-                  switch (decor_desc->uSpriteID)
-                  {
-                    //case 468: //bush02    grows on swamps, which are evergreeen actually
-                    case 548:             // flower10
-                    case 547:             // flower09
-                    case 541:             // flower03
-                    case 539: continue;   // flower01
-                    
-                    case 483:             // tree01
-                    case 486:             // tree04
-                    case 492:             // tree10
-                      pSpriteFrameTable->InitializeSprite(decor_desc->uSpriteID + 1);
-                      v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID + 1, v6 + v7);
-                    break;
-
-                    default:
-                      v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
-                  }
-                break;
-
-                case 5: case 6: case 7: // summer
-                  //all green by default
-                  v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
-                break;
-
-                default: assert(pParty->uCurrentMonth >= 0 && pParty->uCurrentMonth < 12);
-              }
-            else
-              v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
-            #pragma endregion
-            //v8 = pSpriteFrameTable->GetFrame(decor_desc->uSpriteID, v6 + v7);
-
-            //v9 = v8;
-            v42 = v8->uFlags;
-            a5 = v8->uGlowRadius;
-            v10 = (unsigned __int16 *)stru_5C6E00->Atan2(decor->vPosition.x - pIndoorCamera->pos.x,
-                                                         decor->vPosition.y - pIndoorCamera->pos.y);
-            v11 = *((int *)v0 + 2);
-            v37 = v10;
-            v12 = v42;
-            v38 = 0;
-            v13 = ((signed int)(stru_5C6E00->uIntegerPi
-                              + ((signed int)stru_5C6E00->uIntegerPi >> 3)
-                              + v11
-                              - (signed int)v37) >> 8) & 7;
-            v37 = (unsigned __int16 *)v13;
-            if ( v42 & 2 )
-              v38 = 2;
-            if ( (256 << v13) & v42 )
-              v38 |= 4u;
-            if ( v12 & 0x40000 )
-              v38 |= 0x40u;
-            if ( v12 & 0x20000 )
-              LOBYTE(v38) = v38 | 0x80;
-            if ( a5 )
+            if ( pRenderer->pRenderD3D && pRenderer->bUseColoredLights )
             {
-              if ( pRenderer->pRenderD3D && pRenderer->bUseColoredLights )
-              {
-                v14 = decor_desc->uColoredLightRed;
-                v15 = decor_desc->uColoredLightGreen;
-                v16 = decor_desc->uColoredLightBlue;
-              }
-              else
-              {
-                v16 = 255;
-                v14 = 255;
-                v15 = 255;
-              }
-              b = v16;
-              pStationaryLightsStack->AddLight(
-                decor->vPosition.x,
-                decor->vPosition.y,
-                decor->vPosition.z + decor_desc->uDecorationHeight / 2,
-                a5,
-                v14,
-                v15,
-                v16,
-                byte_4E94D0);
-            }
-            v17 = (decor->vPosition.x - pIndoorCamera->pos.x) << 16;
-            if ( pIndoorCamera->sRotationX )
-            {
-              v40 = (decor->vPosition.y - pIndoorCamera->pos.y) << 16;
-              v18 = ((unsigned __int64)(v17 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16)
-                  + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16);
-              v42 = v18;
-              b = (unsigned __int64)(v17 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16;
-              a5 = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16;
-              v40 = (decor->vPosition.z - pIndoorCamera->pos.z) << 16;
-              v41 = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16;
-              v19 = (unsigned __int64)(v18 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_cosine) >> 16;
-              v20 = v19 + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16);
-              v39 = v19 + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16);
-              if ( v20 >= 262144 && v20 <= pOutdoorCamera->shading_dist_mist << 16 )
-              {
-                v21 = a5 - b;
-                v41 = a5 - b;
-                a5 = (unsigned __int64)(v42 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16;
-                b = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_cosine) >> 16;
-                v22 = ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_cosine) >> 16) - a5;
-LABEL_30:
-                v42 = v22;
-                v40 = 2 * abs(v20);
-                v23 = abs(v21);
-                if ( v40 >= v23 )
-                {
-                  LODWORD(v24) = 0;
-                  HIDWORD(v24) = SLOWORD(pOutdoorCamera->int_fov_rad);
-                  a5 = v24 / v39;
-                  v25 = pViewport->uScreenCenterX
-                      - ((signed int)(((unsigned __int64)(v24 / v39 * v41) >> 16) + 32768) >> 16);
-                  b = (unsigned __int64)(a5 * (signed __int64)v42) >> 16;
-                  v41 = v24 / v39;
-                  v40 = pViewport->uScreenCenterY
-                      - ((signed int)(((unsigned __int64)(a5 * (signed __int64)v42) >> 16) + 32768) >> 16);
-                  v42 = v8->scale;
-                  v41 = (unsigned __int64)(v42 * v24 / v39) >> 16;
-                  v37 = (unsigned __int16 *)&v8->pHwSpriteIDs[(int)v37];
-                  if ( pRenderer->pRenderD3D )
-                  {
-                    v26 = v41;
-                    v42 = pSprites_LOD->pHardwareSprites[(signed __int16)*v37].uBufferWidth >> 1;
-                    b = (unsigned __int64)(v42 * (signed __int64)v41) >> 16;
-                  }
-                  else
-                  {
-                    v26 = v41;
-                    v42 = pSprites_LOD->pSpriteHeaders[(signed __int16)*v37].uWidth >> 1;
-                    b = (unsigned __int64)(v42 * (signed __int64)v41) >> 16;
-                  }
-                  if ( b + v25 >= (signed int)pViewport->uViewportTL_X && v25 - b <= (signed int)pViewport->uViewportBR_X )
-                  {
-                    if (::uNumBillboardsToDraw >= 500)
-                      return;
-                    v27 = &pBillboardRenderList[::uNumBillboardsToDraw++];
-                    ++uNumDecorationsDrawnThisFrame;
-                    v27->uHwSpriteID = *v37;
-                    v28 = v8->uPaletteIndex;
-                    v27->_screenspace_x_scaler_packedfloat = v26;
-                    v27->_screenspace_y_scaler_packedfloat = v26;
-                    v29 = v38;
-                    v27->uScreenSpaceX = v25;
-                    HIBYTE(v29) |= 2u;
-                    v27->uPalette = v28;
-                    v27->field_1E = v29;
-                    v27->world_x = decor->vPosition.x;
-                    v27->world_y = decor->vPosition.y;
-                    v27->world_z = decor->vPosition.z;
-                    v27->uScreenSpaceY = v40;
-                    HIWORD(v30) = HIWORD(v39);
-                    v31 = PID(OBJECT_Decoration,i);
-                    LOWORD(v30) = 0;
-                    v27->uIndoorSectorID = 0;
-                    v27->sZValue = v30 + v31;
-                    v27->dimming_level = 0;
-                    v27->pSpriteFrame = v8;
-                    v27->uTintColor = 0;
-                  }
-                }
-                goto LABEL_38;
-              }
+              v14 = decor_desc->uColoredLightRed;
+              v15 = decor_desc->uColoredLightGreen;
+              v16 = decor_desc->uColoredLightBlue;
             }
             else
             {
-              v42 = (decor->vPosition.x - pIndoorCamera->pos.x) << 16;
-              v40 = (decor->vPosition.y - pIndoorCamera->pos.y) << 16;
-              b = (unsigned __int64)(v17 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16;
-              a5 = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16;
-              v20 = b + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16);
-              v39 = b + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16);
-              if ( v20 >= 262144 && v20 <= pOutdoorCamera->shading_dist_mist << 16 )
+              v16 = 255;
+              v14 = 255;
+              v15 = 255;
+            }
+            b = v16;
+            pStationaryLightsStack->AddLight(
+              decor->vPosition.x,
+              decor->vPosition.y,
+              decor->vPosition.z + decor_desc->uDecorationHeight / 2,
+              a5,
+              v14,
+              v15,
+              v16,
+              byte_4E94D0);
+          }
+          v17 = (decor->vPosition.x - pIndoorCamera->pos.x) << 16;
+          if ( pIndoorCamera->sRotationX )
+          {
+            v40 = (decor->vPosition.y - pIndoorCamera->pos.y) << 16;
+            v18 = ((unsigned __int64)(v17 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16)
+                + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16);
+            v42 = v18;
+            b = (unsigned __int64)(v17 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16;
+            a5 = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16;
+            v40 = (decor->vPosition.z - pIndoorCamera->pos.z) << 16;
+            v41 = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16;
+            v19 = (unsigned __int64)(v18 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_cosine) >> 16;
+            v20 = v19 + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16);
+            v39 = v19 + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16);
+            if ( v20 >= 262144 && v20 <= pOutdoorCamera->shading_dist_mist << 16 )
+            {
+              v21 = a5 - b;
+              v41 = a5 - b;
+              a5 = (unsigned __int64)(v42 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_sine) >> 16;
+              b = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_cosine) >> 16;
+              v22 = ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_x_int_cosine) >> 16) - a5;
+LABEL_30:
+              v42 = v22;
+              v40 = 2 * abs(v20);
+              v23 = abs(v21);
+              if ( v40 >= v23 )
               {
-                a5 = (unsigned __int64)(v42 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16;
-                b = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16;
-                v21 = ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16) - a5;
-                v41 = ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16) - a5;
-                v22 = (decor->vPosition.z - pIndoorCamera->pos.z) << 16;
-                goto LABEL_30;
+                LODWORD(v24) = 0;
+                HIDWORD(v24) = SLOWORD(pOutdoorCamera->int_fov_rad);
+                a5 = v24 / v39;
+                v25 = pViewport->uScreenCenterX
+                    - ((signed int)(((unsigned __int64)(v24 / v39 * v41) >> 16) + 32768) >> 16);
+                b = (unsigned __int64)(a5 * (signed __int64)v42) >> 16;
+                v41 = v24 / v39;
+                v40 = pViewport->uScreenCenterY
+                    - ((signed int)(((unsigned __int64)(a5 * (signed __int64)v42) >> 16) + 32768) >> 16);
+                v42 = v8->scale;
+                v41 = (unsigned __int64)(v42 * v24 / v39) >> 16;
+                v37 = (unsigned __int16 *)&v8->pHwSpriteIDs[(int)v37];
+                if ( pRenderer->pRenderD3D )
+                {
+                  v26 = v41;
+                  v42 = pSprites_LOD->pHardwareSprites[(signed __int16)*v37].uBufferWidth >> 1;
+                  b = (unsigned __int64)(v42 * (signed __int64)v41) >> 16;
+                }
+                else
+                {
+                  v26 = v41;
+                  v42 = pSprites_LOD->pSpriteHeaders[(signed __int16)*v37].uWidth >> 1;
+                  b = (unsigned __int64)(v42 * (signed __int64)v41) >> 16;
+                }
+                if ( b + v25 >= (signed int)pViewport->uViewportTL_X && v25 - b <= (signed int)pViewport->uViewportBR_X )
+                {
+                  if (::uNumBillboardsToDraw >= 500)
+                    return;
+                  v27 = &pBillboardRenderList[::uNumBillboardsToDraw++];
+                  ++uNumDecorationsDrawnThisFrame;
+                  v27->uHwSpriteID = *v37;
+                  v28 = v8->uPaletteIndex;
+                  v27->_screenspace_x_scaler_packedfloat = v26;
+                  v27->_screenspace_y_scaler_packedfloat = v26;
+                  v29 = v38;
+                  v27->uScreenSpaceX = v25;
+                  HIBYTE(v29) |= 2u;
+                  v27->uPalette = v28;
+                  v27->field_1E = v29;
+                  v27->world_x = decor->vPosition.x;
+                  v27->world_y = decor->vPosition.y;
+                  v27->world_z = decor->vPosition.z;
+                  v27->uScreenSpaceY = v40;
+                  HIWORD(v30) = HIWORD(v39);
+                  v31 = PID(OBJECT_Decoration,i);
+                  LOWORD(v30) = 0;
+                  v27->uIndoorSectorID = 0;
+                  v27->sZValue = v30 + v31;
+                  v27->dimming_level = 0;
+                  v27->pSpriteFrame = v8;
+                  v27->uTintColor = 0;
+                }
               }
+              goto LABEL_38;
+            }
+          }
+          else
+          {
+            v42 = (decor->vPosition.x - pIndoorCamera->pos.x) << 16;
+            v40 = (decor->vPosition.y - pIndoorCamera->pos.y) << 16;
+            b = (unsigned __int64)(v17 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16;
+            a5 = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16;
+            v20 = b + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16);
+            v39 = b + ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16);
+            if ( v20 >= 262144 && v20 <= pOutdoorCamera->shading_dist_mist << 16 )
+            {
+              a5 = (unsigned __int64)(v42 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_sine) >> 16;
+              b = (unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16;
+              v21 = ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16) - a5;
+              v41 = ((unsigned __int64)(v40 * (signed __int64)pOutdoorCamera->camera_rotation_y_int_cosine) >> 16) - a5;
+              v22 = (decor->vPosition.z - pIndoorCamera->pos.z) << 16;
+              goto LABEL_30;
             }
           }
         }
-        else
-        {
-          memset(&local_0, 0, 0x68u);
-          v3 = (double)*((signed int *)v0 - 1);
-          local_0.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8;
-          local_0.uDiffuse = 0xFF3C1E;
-          local_0.x = v3;
-          local_0.y = (double)*(signed int *)v0;
-          local_0.z = (double)*((signed int *)v0 + 1);
-          local_0.r = 0.0;
-          local_0.g = 0.0;
-          local_0.b = 0.0;
-          local_0.flt_28 = 1.0;
-          local_0.timeToLive = (rand() & 0x80) + 128;
-          local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01");
-          pGame->pParticleEngine->AddParticle(&local_0);
-        }
-      }
+      }
+      else
+      {
+        memset(&local_0, 0, 0x68u);
+        v3 = (double)*((signed int *)v0 - 1);
+        local_0.type = ParticleType_Bitmap | ParticleType_Rotating | ParticleType_8;
+        local_0.uDiffuse = 0xFF3C1E;
+        local_0.x = v3;
+        local_0.y = (double)*(signed int *)v0;
+        local_0.z = (double)*((signed int *)v0 + 1);
+        local_0.r = 0.0;
+        local_0.g = 0.0;
+        local_0.b = 0.0;
+        local_0.flt_28 = 1.0;
+        local_0.timeToLive = (rand() & 0x80) + 128;
+        local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01");
+        pGame->pParticleEngine->AddParticle(&local_0);
+      }
+    }
 LABEL_38:
       ;
       //++v35;
--- a/SaveLoad.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/SaveLoad.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -415,7 +415,7 @@
 
         for (int i =  0; i <(signed int)uNumLevelDecorations; ++i)
         {
-          memcpy(data_write_pos, &pLevelDecorations[i].field_2, 2);
+          memcpy(data_write_pos, &pLevelDecorations[i].uFlags, 2);
      
           data_write_pos+= 2;
         }
@@ -465,7 +465,7 @@
       
         for (int i = 0; i < (signed int)uNumLevelDecorations; ++i)
         {
-          memcpy(data_write_pos, &pLevelDecorations[i].field_2, 2);
+          memcpy(data_write_pos, &pLevelDecorations[i].uFlags, 2);
           data_write_pos += 2;
         }
       memcpy(data_write_pos, &uNumActors, 4);
--- a/Sprites.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/Sprites.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -753,7 +753,7 @@
               if ( PID_TYPE(v4) == OBJECT_Decoration)
               {
                 v5 = &pLevelDecorations[(signed __int16)v4 >> 3];
-                if ( !(v5->field_2 & 0x20) )
+                if (!(v5->uFlags & LEVEL_DECORATION_INVISIBLE))
                 {
                   v6 = &pDecorationList->pDecorations[v5->uDecorationDescID];
                   if (!v6->CanMoveThrough())
--- a/UI/Books/UIMapBook.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/UI/Books/UIMapBook.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -551,7 +551,7 @@
   {
     for ( uint i = 0; i < (signed int)uNumLevelDecorations; ++i )
     {
-      if ( pLevelDecorations[i].field_2 & 8 )
+      if (pLevelDecorations[i].uFlags & LEVEL_DECORATION_VISIBLE_ON_MAP)
       {
         screenHeight = pLevelDecorations[i].vPosition.y - pCenterY;
         v93 = (unsigned __int16 *)(pLevelDecorations[i].vPosition.x - viewparams->sViewCenterX);
--- a/mm7_3.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/mm7_3.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -7203,7 +7203,7 @@
   v6 = uCog;
   if ( (signed int)uNumLevelDecorations > 0 )
   {
-    v4 = (char *)&pLevelDecorations[0].field_2;
+    v4 = (char *)&pLevelDecorations[0].uFlags;
     do
     {
       if ( *((_WORD *)v4 + 9) == v6 )
--- a/mm7_4.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/mm7_4.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -99,7 +99,7 @@
     v32 = v1->vPosition.y;
     v35 = v1->vPosition.z;
     v31 = v1->field_18;
-    if ( v1->field_2 & 1 )
+    if (v1->uFlags & LEVEL_DECORATION_TRIGGERED_BY_TOUCH)
     {
       v36 = abs(v1->vPosition.x - pParty->vPosition.x);
       v25 = abs(v3 - pParty->vPosition.y);
@@ -127,7 +127,7 @@
       if ( (signed int)(((unsigned int)(11 * v5) >> 5) + (v6 >> 2) + v4) < v2 )
         EventProcessor(v1->field_16_event_id, PID(OBJECT_Decoration,i), 1);
     }
-    if ( v1->field_2 & 2 )
+    if (v1->uFlags & LEVEL_DECORATION_TRIGGERED_BY_MONSTER)
     {
       v37 = 0;
       if ( (signed int)uNumActors > 0 )
@@ -167,7 +167,7 @@
         while ( v37 < (signed int)uNumActors );
       }
     }
-    if ( v1->field_2 & 4 )
+    if (v1->uFlags & LEVEL_DECORATION_TRIGGERED_BY_OBJECT)
     {
       v38 = 0;
       if ( (signed int)uNumSpriteObjects > 0 )
@@ -466,7 +466,7 @@
   for ( i = 0; i < v0->uNumDecorations; ++i )
   {
     v1 = &pLevelDecorations[v0->pDecorationIDs[i]];
-    if ( !(v1->field_2 & 0x20) )
+    if (!(v1->uFlags & LEVEL_DECORATION_INVISIBLE))
     {
       v2 = &pDecorationList->pDecorations[v1->uDecorationDescID];
       if (!v2->CanMoveThrough())
--- a/mm7_5.cpp	Sun Sep 01 17:10:29 2013 +0600
+++ b/mm7_5.cpp	Sun Sep 01 17:10:55 2013 +0600
@@ -4316,14 +4316,14 @@
 
 
 //----- (004070EF) --------------------------------------------------------
-bool __fastcall sub_4070EF_prolly_collide_objects(unsigned int uObjID, unsigned int uObj2ID)
+bool __fastcall sub_4070EF_prolly_detect_player(unsigned int uObjID, unsigned int uObj2ID)
 {
   signed int v2; // eax@1
-  unsigned int v3; // ecx@1
-  signed int v4; // esi@1
+  //unsigned int v3; // ecx@1
+  //signed int v4; // esi@1
   int v5; // ecx@2
   signed int v6; // eax@4
-  int v7; // eax@4
+  int object1_sector; // eax@4
   float v8; // ST24_4@5
   double v9; // ST18_8@5
   signed int v10; // eax@6
@@ -4333,18 +4333,18 @@
   int v14; // esi@8
   int v15; // esi@9
   signed int v16; // eax@11
-  int v17; // edi@11
-  int v18; // esi@11
-  int v19; // eax@13
+  int obj2_z; // edi@11
+  int obj2_x; // esi@11
+  int obj2_sector; // eax@13
   float v20; // ST24_4@14
   double v21; // ST18_8@14
   signed int v22; // eax@15
-  int v23; // ebx@16
+  int dist2_x; // ebx@16
   signed int v24; // ecx@16
   int v25; // eax@18
-  int v26; // eax@28
-  BLVSector *v27; // edx@31
-  int v28; // ecx@31
+  //int v26; // eax@28
+  //BLVSector *v27; // edx@31
+  //int v28; // ecx@31
   BLVFace *v29; // ebx@32
   Vec3_short_ *v30; // esi@32
   int v31; // eax@32
@@ -4360,12 +4360,12 @@
   __int16 v42; // bx@58
   int v43; // [sp-8h] [bp-70h]@11
   int v44; // [sp-4h] [bp-6Ch]@11
-  int v45; // [sp+Ch] [bp-5Ch]@32
-  __int16 v46; // [sp+10h] [bp-58h]@32
+  //int v45; // [sp+Ch] [bp-5Ch]@32
+  //__int16 v46; // [sp+10h] [bp-58h]@32
   int v47; // [sp+18h] [bp-50h]@20
   int v48; // [sp+1Ch] [bp-4Ch]@20
   int v49; // [sp+20h] [bp-48h]@20
-  int v50; // [sp+24h] [bp-44h]@16
+  int dist2_z; // [sp+24h] [bp-44h]@16
   signed int v51; // [sp+24h] [bp-44h]@27
   signed int v52; // [sp+28h] [bp-40h]@26
   signed int v53; // [sp+2Ch] [bp-3Ch]@23
@@ -4375,101 +4375,85 @@
   signed int v57; // [sp+3Ch] [bp-2Ch]@28
   int v58; // [sp+44h] [bp-24h]@50
   int v59; // [sp+48h] [bp-20h]@44
-  int v60; // [sp+50h] [bp-18h]@11
+  int obj2_y; // [sp+50h] [bp-18h]@11
   signed int v61; // [sp+50h] [bp-18h]@31
-  int v62; // [sp+54h] [bp-14h]@16
-  int v63; // [sp+58h] [bp-10h]@4
-  int v64; // [sp+5Ch] [bp-Ch]@4
-  int v65; // [sp+60h] [bp-8h]@4
+  //int v62; // [sp+54h] [bp-14h]@16
+  int obj_x; // [sp+58h] [bp-10h]@4
+  int obj_y; // [sp+5Ch] [bp-Ch]@4
+  int obj_z; // [sp+60h] [bp-8h]@4
   int v66; // [sp+64h] [bp-4h]@7
 
   v2 = PID_ID(uObjID);
-  v3 = PID_TYPE(uObjID) - 2;
-  v4 = uObj2ID;
-  if ( v3 )
+  if ( PID_TYPE(uObjID) == 5 )
   {
-    v5 = v3 - 1;
-    if ( v5 )
-    {
-      if ( v5 != 2 )
-        return 0;
       v6 = v2;
-      v63 = pLevelDecorations[v6].vPosition.x;
-      v64 = pLevelDecorations[v6].vPosition.y;
-      v65 = pLevelDecorations[v6].vPosition.z;
-      v7 = pIndoor->GetSector(v63, v64, v65);
-    }
-    else
-    {
-      v63 = pActors[v2].vPosition.x;
-      v64 = pActors[v2].vPosition.y;
+      obj_x = pLevelDecorations[v6].vPosition.x;
+      obj_y = pLevelDecorations[v6].vPosition.y;
+      obj_z = pLevelDecorations[v6].vPosition.z;
+      object1_sector = pIndoor->GetSector(obj_x, obj_y, obj_z);
+  }
+  else if ( PID_TYPE(uObjID) == 3 )
+  {
+      obj_x = pActors[v2].vPosition.x;
+      obj_y = pActors[v2].vPosition.y;
       v8 = (double)pActors[v2].uActorHeight * 0.69999999;
-      v9 = v8 + 6.7553994e15;
-      v65 = LODWORD(v9) + pActors[v2].vPosition.z;
-      v7 = pActors[v2].uSectorID;
-    }
+      //v9 = v8 + 6.7553994e15;
+      //obj_z = LODWORD(v9) + pActors[v2].vPosition.z;
+	  obj_z = (int)v8 + pActors[v2].vPosition.z;
+      object1_sector = pActors[v2].uSectorID;
   }
-  else
+  else if ( PID_TYPE(uObjID) == 2 )
   {
     v10 = v2;
-    v63 = pSpriteObjects[v10].vPosition.x;
-    v64 = pSpriteObjects[v10].vPosition.y;
-    v11 = pSpriteObjects[v10].vPosition.z;
-    v7 = pSpriteObjects[v10].uSectorID;
-    v65 = v11;
-  }
-  v66 = v7;
-  v12 = PID_ID(v4);
-  v13 = PID_TYPE(v4) - 2;
-  if ( v13 )
-  {
-    v14 = v13 - 1;
-    if ( v14 )
-    {
-      v15 = v14 - 1;
-      if ( v15 )
-      {
-        if ( v15 != 1 )
-          return 0;
-        v16 = v12;
-        v17 = pLevelDecorations[v16].vPosition.z;
-        v18 = pLevelDecorations[v16].vPosition.x;
-        v44 = pLevelDecorations[v16].vPosition.z;
-        v60 = pLevelDecorations[v16].vPosition.y;
-        v43 = pLevelDecorations[v16].vPosition.y;
-      }
-      else
-      {
-        v18 = pParty->vPosition.x;
-        v17 = pParty->sEyelevel + pParty->vPosition.z;
-        v60 = pParty->vPosition.y;
-        v44 = pParty->sEyelevel + pParty->vPosition.z;
-        v43 = pParty->vPosition.y;
-      }
-      v19 = pIndoor->GetSector(v18, v43, v44);
-    }
-    else
-    {
-      v60 = pActors[v12].vPosition.y;
-      v18 = pActors[v12].vPosition.x;
-      v20 = (double)pActors[v12].uActorHeight * 0.69999999;
-      v21 = v20 + 6.7553994e15;
-      v17 = LODWORD(v21) + pActors[v12].vPosition.z;
-      v19 = pActors[v12].uSectorID;
-    }
+    obj_x = pSpriteObjects[v10].vPosition.x;
+    obj_y = pSpriteObjects[v10].vPosition.y;
+    obj_z = pSpriteObjects[v10].vPosition.z;
+    object1_sector = pSpriteObjects[v10].uSectorID;
   }
   else
+	  return 0;
+  v66 = object1_sector;
+  v12 = PID_ID(uObj2ID);
+  if ( PID_TYPE(uObj2ID) == 5)
+  {
+	v16 = v12;
+    obj2_z = pLevelDecorations[v16].vPosition.z;
+    obj2_x = pLevelDecorations[v16].vPosition.x;
+    obj2_y = pLevelDecorations[v16].vPosition.y;
+	obj2_sector = pIndoor->GetSector(obj2_x, obj2_y, obj2_z);
+   }
+   else if ( PID_TYPE(uObj2ID) == 4)
+   {
+     obj2_x = pParty->vPosition.x;
+     obj2_z = pParty->sEyelevel + pParty->vPosition.z;
+     obj2_y = pParty->vPosition.y;
+	 obj2_sector = pIndoor->GetSector(obj2_x, obj2_y, obj2_z);
+    }
+  
+  else if( PID_TYPE(uObj2ID) == 3)
+  {
+    obj2_y = pActors[v12].vPosition.y;
+    obj2_x = pActors[v12].vPosition.x;
+    v20 = (double)pActors[v12].uActorHeight * 0.69999999;
+    //v21 = v20 + 6.7553994e15;
+    //obj2_z = LODWORD(v21) + pActors[v12].vPosition.z;
+	obj2_z = (int)v20 + pActors[v12].vPosition.z;
+    obj2_sector = pActors[v12].uSectorID;
+  }
+  
+  else if ( PID_TYPE(uObj2ID) == 2)
   {
     v22 = v12;
-    v18 = pSpriteObjects[v22].vPosition.x;
-    v17 = pSpriteObjects[v22].vPosition.z;
-    v60 = pSpriteObjects[v22].vPosition.y;
-    v19 = pSpriteObjects[v22].uSectorID;
+    obj2_x = pSpriteObjects[v22].vPosition.x;
+    obj2_z = pSpriteObjects[v22].vPosition.z;
+    obj2_y = pSpriteObjects[v22].vPosition.y;
+    obj2_sector = pSpriteObjects[v22].uSectorID;
   }
-  v62 = v19;
-  v23 = v18 - v63;
-  v50 = v17 - v65;
-  v24 = integer_sqrt(v23 * v23 + (v60 - v64) * (v60 - v64) + v50 * v50);
+  else
+	  return 0;
+  dist2_x = obj2_x - obj_x;
+  dist2_z = obj2_z - obj_z;
+  v24 = integer_sqrt(dist2_x * dist2_x + (obj2_y - obj_y) * (obj2_y - obj_y) + dist2_z * dist2_z);
   if ( v24 > 5120 )
     return 0;
   if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor)
@@ -4477,120 +4461,116 @@
   v25 = 65536;
   if ( v24 )
     v25 = 65536 / v24;
-  v49 = v23 * v25;
-  v47 = v50 * v25;
-  v48 = (v60 - v64) * v25;
-  v56 = v63;
-  if ( v63 < v18 )
+  v49 = dist2_x * v25;
+  v47 = dist2_z * v25;
+  v48 = (obj2_y - obj_y) * v25;
+  if ( obj_x < obj2_x )
   {
-    v55 = v18;
+	v56 = obj_x;
+    v55 = obj2_x;
   }
   else
   {
-    v56 = v18;
-    v55 = v63;
+    v56 = obj2_x;
+    v55 = obj_x;
   }
-  v54 = v64;
-  if ( v64 < v60 )
+  if ( obj_y < obj2_y )
   {
-    v53 = v60;
+	v54 = obj_y;
+    v53 = obj2_y;
   }
   else
   {
-    v54 = v60;
-    v53 = v64;
+    v54 = obj2_y;
+    v53 = obj_y;
   }
-  v52 = v65;
-  if ( v65 < v17 )
+  if ( obj_z < obj2_z )
   {
-    v51 = v17;
+	v52 = obj_z;
+    v51 = obj2_z;
   }
   else
   {
-    v52 = v17;
-    v51 = v65;
+    v52 = obj2_z;
+    v51 = obj_z;
   }
   v57 = 0;
-  v26 = v66;
-  while ( 2 )
-  {
-    if ( v26 == v62 )
+  if ( v66 == obj2_sector )
       return 1;
-    if ( v57 >= 30 || (v27 = pIndoor->pSectors, v28 = v66, v61 = 0, pIndoor->pSectors[v66].uNumPortals <= 0) )
-      break;
-    while ( 1 )
-    {
-      v29 = &pIndoor->pFaces[v27[v28].pPortals[v61]];
+  //for ( v57 = 0; v57 < 30; v57++ )
+  if ( v57 < 30 && !(v61 = 0, pIndoor->pSectors[v66].uNumPortals <= 0) )
+	for( int v61 = 0; v61 < pIndoor->pSectors[v66].uNumPortals; v61++ )
+	{
+      v29 = &pIndoor->pFaces[pIndoor->pSectors[v66].pPortals[v61]];
       v30 = &pIndoor->pVertices[*v29->pVertexIDs];
-      v45 = *(int *)&v30->x;
-      v46 = v30->z;
-      v31 = v29->pFacePlane_old.vNormal.z * (v46 - v65)
-          + v29->pFacePlane_old.vNormal.y * (SHIWORD(v45) - v64)
-          + v29->pFacePlane_old.vNormal.x * ((signed __int16)v45 - v63);
+      //v45 = *(int *)&v30->x;
+      //v46 = v30->z;
+      //v31 = v29->pFacePlane_old.vNormal.z * (v46 - obj_z)
+	  v31 = v29->pFacePlane_old.vNormal.z * (v30->z - obj_z)
+          //+ v29->pFacePlane_old.vNormal.y * (SHIWORD(v45) - obj_y)
+		  + v29->pFacePlane_old.vNormal.y * (v30->y - obj_y)
+          //+ v29->pFacePlane_old.vNormal.x * ((signed __int16)v45 - obj_x);
+		  + v29->pFacePlane_old.vNormal.x * (v30->x - obj_x);
       if ( v66 != v29->uSectorID )
         v31 = -v31;
-      if ( v31 >= 0 && (signed __int16)v45 != v63 && SHIWORD(v45) != v64 && v46 != v65
+      //if (!( v31 >= 0 && (signed __int16)v45 != obj_x && SHIWORD(v45) != obj_y && v46 != obj_z
+	  if (!( v31 >= 0 && v30->x != obj_x && v30->y != obj_y && v30->z != obj_z
         || v56 > v29->pBounding.x2
         || v55 < v29->pBounding.x1
         || v54 > v29->pBounding.y2
         || v53 < v29->pBounding.y1
         || v52 > v29->pBounding.z2
-        || v51 < v29->pBounding.z1 )
-        goto LABEL_54;
-      v32 = (unsigned __int64)(v49 * (signed __int64)v29->pFacePlane_old.vNormal.x) >> 16;
-      v33 = (unsigned __int64)(v47 * (signed __int64)v29->pFacePlane_old.vNormal.z) >> 16;
-      v34 = (unsigned __int64)(v48 * (signed __int64)v29->pFacePlane_old.vNormal.y) >> 16;
-      v35 = v32 + v33 + v34 == 0;
-      v36 = v32 + v33 + v34;
-      v59 = v32 + v33 + v34;
-      if ( v35 )
-        goto LABEL_53;
-      v37 = v65 * v29->pFacePlane_old.vNormal.z;
-      v38 = -(v29->pFacePlane_old.dist + v37 + v63 * v29->pFacePlane_old.vNormal.x + v64 * v29->pFacePlane_old.vNormal.y);
-      if ( v36 <= 0 )
-        break;
-      if ( v29->pFacePlane_old.dist + v37 + v63 * v29->pFacePlane_old.vNormal.x + v64 * v29->pFacePlane_old.vNormal.y <= 0 )
-        goto LABEL_49;
-LABEL_53:
-      v27 = pIndoor->pSectors;
-LABEL_54:
-      ++v61;
-      if ( v61 >= v27[v28].uNumPortals )
-        goto LABEL_55;
+        || v51 < v29->pBounding.z1 ) )
+	  {
+		  v32 = (unsigned __int64)(v49 * (signed __int64)v29->pFacePlane_old.vNormal.x) >> 16;
+		  v33 = (unsigned __int64)(v47 * (signed __int64)v29->pFacePlane_old.vNormal.z) >> 16;
+		  v34 = (unsigned __int64)(v48 * (signed __int64)v29->pFacePlane_old.vNormal.y) >> 16;
+		  v35 = v32 + v33 + v34 == 0;
+		  v36 = v32 + v33 + v34;
+		  v59 = v32 + v33 + v34;
+		  if ( !v35 )
+		  {
+			  v37 = obj_z * v29->pFacePlane_old.vNormal.z;
+			  v38 = -(v29->pFacePlane_old.dist + v37 + obj_x * v29->pFacePlane_old.vNormal.x + obj_y * v29->pFacePlane_old.vNormal.y);
+			  if ( v36 <= 0 ^ v29->pFacePlane_old.dist + v37 + obj_x * v29->pFacePlane_old.vNormal.x + obj_y * v29->pFacePlane_old.vNormal.y <= 0)
+			  {
+				v39 = abs(-(v29->pFacePlane_old.dist
+						  + v37
+						  + obj_x * v29->pFacePlane_old.vNormal.x
+						  + obj_y * v29->pFacePlane_old.vNormal.y)) >> 14;
+				if ( v39 > abs(v36)
+				  || (LODWORD(v40) = v38 << 16, HIDWORD(v40) = v38 >> 16, v58 = v40 / v59, (signed int)(v40 / v59) < 0)
+				  || !sub_4075DB(
+						obj_x + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v49) >> 16) + 32768) >> 16),
+						obj_y + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v48) >> 16) + 32768) >> 16),
+						obj_z + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v47) >> 16) + 32768) >> 16),
+						v29) )
+				{
+				  continue;
+				}
+				if ( v29->uSectorID == v66 )
+				  v42 = v29->uBackSectorID;
+				else
+				  v42 = v29->uSectorID;
+				if ( v42 != v66 )
+				{
+				  ++v57;
+				  v66 = v42;
+				  if ( v42 == obj2_sector )
+					return 1;
+				  if ( v57 < 30 && pIndoor->pSectors[v66].uNumPortals > 0)
+				  {
+					  v61=-1;
+					  continue;
+				  }
+
+				}
+				break;
+			  }
+		  }
+	  }
     }
-    if ( v29->pFacePlane_old.dist + v37 + v63 * v29->pFacePlane_old.vNormal.x + v64 * v29->pFacePlane_old.vNormal.y < 0 )
-      goto LABEL_53;
-LABEL_49:
-    v39 = abs(-(v29->pFacePlane_old.dist
-              + v37
-              + v63 * v29->pFacePlane_old.vNormal.x
-              + v64 * v29->pFacePlane_old.vNormal.y)) >> 14;
-    if ( v39 > abs(v36)
-      || (LODWORD(v40) = v38 << 16, HIDWORD(v40) = v38 >> 16, v58 = v40 / v59, (signed int)(v40 / v59) < 0)
-      || !sub_4075DB(
-            v63 + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v49) >> 16) + 32768) >> 16),
-            v64 + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v48) >> 16) + 32768) >> 16),
-            v65 + ((signed int)(((unsigned __int64)(v58 * (signed __int64)v47) >> 16) + 32768) >> 16),
-            v29) )
-    {
-      v28 = v66;
-      goto LABEL_53;
-    }
-    if ( v29->uSectorID == v66 )
-      v42 = v29->uBackSectorID;
-    else
-      v42 = v29->uSectorID;
-    v26 = v42;
-    if ( v42 != v66 )
-    {
-      ++v57;
-      v66 = v42;
-      continue;
-    }
-    break;
-  }
-LABEL_55:
-  if ( v66 != v62 )
+  if ( v66 != obj2_sector )
     return 0;
   return 1;
 }
@@ -4621,7 +4601,7 @@
   signed int a3a; // [sp+24h] [bp+8h]@14
   int a4a; // [sp+28h] [bp+Ch]@2
 
-  __debugbreak();
+  //__debugbreak();
 
   v5 = a4->uAttributes;
   v9 = pIndoor->pVertices;
--- a/mm7_data.h	Sun Sep 01 17:10:29 2013 +0600
+++ b/mm7_data.h	Sun Sep 01 17:10:55 2013 +0600
@@ -1073,7 +1073,7 @@
 void MakeActorAIList_ODM();
 int MakeActorAIList_BLV();
 void UpdateActorAI();
-bool __fastcall sub_4070EF_prolly_collide_objects(unsigned int uObjID, unsigned int uObj2ID);
+bool __fastcall sub_4070EF_prolly_detect_player(unsigned int uObjID, unsigned int uObj2ID);
 bool __fastcall sub_4075DB(int a1, int a2, int a3, struct BLVFace *a4);
 bool __fastcall sub_4077F1(int a1, int a2, int a3, struct ODMFace *a4, struct BSPVertexBuffer *a5);
 bool __fastcall sub_407A1C(int x, int z, int y, struct Vec3_int_ v); // idb