shithub: cstory

Download patch

ref: 754bed870cd91aaf1744c571fee61fd3dd1cc7d4
parent: 8e76e3859155a575af532e352889438d6e8602d9
author: Clownacy <[email protected]>
date: Mon Feb 18 23:33:50 EST 2019

Got NpcAct000.cpp to compile in MSVC2003 and made NPCs 0/1 ASM-accurate

--- a/src/NpcAct000.cpp
+++ b/src/NpcAct000.cpp
@@ -15,18 +15,14 @@
 //Null
 void ActNpc000(NPCHAR *npc)
 {
-	RECT rect[1];
-	rect[0] = {0x00, 0x00, 0x10, 0x10};
+	RECT rect[1] = {0x00, 0x00, 0x10, 0x10};
 
-	switch (npc->act_no)
+	if (npc->act_no == 0)
 	{
-		case 0:
-			npc->act_no = 1;
+		npc->act_no = 1;
 
-			if (npc->direct == 2)
-				npc->y += 0x2000;
-
-			break;
+		if (npc->direct == 2)
+			npc->y += 0x2000;
 	}
 
 	npc->rect = rect[0];
@@ -35,10 +31,48 @@
 //Experience
 void ActNpc001(NPCHAR *npc)
 {
+	//In wind
+	if (gBack.type == 5 || gBack.type == 6)
+	{
+		if (npc->act_no == 0)
+		{
+			//Set state
+			npc->act_no = 1;
+
+			//Set random speed
+			npc->ym = Random(-0x80, 0x80);
+			npc->xm = Random(0x7F, 0x100);
+		}
+
+		//Blow to the left
+		npc->xm -= 8;
+
+		//Destroy when off-screen
+		if (npc->x < 0xA000)
+			npc->cond = 0;
+
+#ifdef FIX_BUGS
+		//Limit speed
+		if (npc->xm < -0x600)
+			npc->xm = -0x600;
+#else
+		//Limit speed (except pixel applied it to the X position)
+		if (npc->x < -0x600)
+			npc->x = -0x600;
+#endif
+
+		//Bounce off walls
+		if (npc->flag & 1)
+			npc->xm = 0x100;
+		if (npc->flag & 2)
+			npc->ym = 0x40;
+		if (npc->flag & 8)
+			npc->ym = -0x40;
+	}
 	//When not in wind
-	if (gBack.type != 5 && gBack.type != 6)
+	else
 	{
-		if (!npc->act_no)
+		if (npc->act_no == 0)
 		{
 			//Set state
 			npc->act_no = 1;
@@ -63,13 +97,13 @@
 
 		//Bounce off walls
 		if (npc->flag & 1 && npc->xm < 0)
-			npc->xm = -npc->xm;
+			npc->xm *= -1;
 		if (npc->flag & 4 && npc->xm > 0)
-			npc->xm = -npc->xm;
+			npc->xm *= -1;
 
 		//Bounce off ceiling
 		if (npc->flag & 2 && npc->ym < 0)
-			npc->ym = -npc->ym;
+			npc->ym *= -1;
 
 		//Bounce off floor
 		if (npc->flag & 8)
@@ -84,7 +118,7 @@
 		{
 			PlaySoundObject(45, 1);
 			if (++npc->count2 > 2)
-				npc->y -= 512;
+				npc->y -= 0x200;
 		}
 		else
 		{
@@ -101,57 +135,20 @@
 		if (npc->ym > 0x5FF)
 			npc->ym = 0x5FF;
 	}
-	//In wind
-	else
-	{
-		if (!npc->act_no)
-		{
-			//Set state
-			npc->act_no = 1;
 
-			//Set random speed
-			npc->ym = Random(-0x80, 0x80);
-			npc->xm = Random(0x7F, 0x100);
-		}
-
-		//Blow to the left
-		npc->xm -= 8;
-
-		//Destroy when off-screen
-		if (npc->x <= 0x9FFF)
-			npc->cond = 0;
-
-#ifdef FIX_BUGS
-		//Limit speed
-		if (npc->xm < -0x5FF)
-			npc->xm = -0x5FF;
-#else
-		//Limit speed (except pixel applied it to the X position)
-		if (npc->x < -0x5FF)
-			npc->x = -0x5FF;
-#endif
-
-		//Bounce off walls
-		if (npc->flag & 1)
-			npc->xm = 0x100;
-		if (npc->flag & 2)
-			npc->ym = 0x40;
-		if (npc->flag & 8)
-			npc->ym = -0x40;
-	}
-
 	//Move
 	npc->x += npc->xm;
 	npc->y += npc->ym;
 
 	//Get framerects
-	RECT rect[6];
-	rect[0] = {0x00, 0x10, 0x10, 0x20};
-	rect[1] = {0x10, 0x10, 0x20, 0x20};
-	rect[2] = {0x20, 0x10, 0x30, 0x20};
-	rect[3] = {0x30, 0x10, 0x40, 0x20};
-	rect[4] = {0x40, 0x10, 0x50, 0x20};
-	rect[5] = {0x50, 0x10, 0x60, 0x20};
+	RECT rect[6] = {
+		{0x00, 0x10, 0x10, 0x20},
+		{0x10, 0x10, 0x20, 0x20},
+		{0x20, 0x10, 0x30, 0x20},
+		{0x30, 0x10, 0x40, 0x20},
+		{0x40, 0x10, 0x50, 0x20},
+		{0x50, 0x10, 0x60, 0x20},
+	};
 
 	RECT rcNo = {0, 0, 0, 0};
 
@@ -158,21 +155,24 @@
 	//Animate
 	++npc->ani_wait;
 
-	if (npc->direct)
+	if (npc->direct == 0)
 	{
 		if (npc->ani_wait > 2)
 		{
 			npc->ani_wait = 0;
+			if (++npc->ani_no > 5)
+				npc->ani_no = 0;
+		}
+	}
+	else
+	{
+		if (npc->ani_wait > 2)
+		{
+			npc->ani_wait = 0;
 			if (--npc->ani_no < 0)
 				npc->ani_no = 5;
 		}
 	}
-	else if (npc->ani_wait > 2)
-	{
-		npc->ani_wait = 0;
-		if (++npc->ani_no > 5)
-			npc->ani_no = 0;
-	}
 
 	npc->rect = rect[npc->ani_no];
 
@@ -179,16 +179,18 @@
 	//Size
 	if (npc->act_no)
 	{
-		if (npc->exp == 5)
+		switch (npc->exp)
 		{
-			npc->rect.top += 16;
-			npc->rect.bottom += 16;
+			case 5:
+				npc->rect.top += 16;
+				npc->rect.bottom += 16;
+				break;
+
+			case 20:
+				npc->rect.top += 32;
+				npc->rect.bottom += 32;
+				break;
 		}
-		else if (npc->exp == 20)
-		{
-			npc->rect.top += 32;
-			npc->rect.bottom += 32;
-		}
 
 		npc->act_no = 1;
 	}
@@ -200,7 +202,7 @@
 	//Blink after 400 frames
 	if (npc->count1 > 400)
 	{
-		if (npc->count1 / 2 & 1)
+		if (npc->count1 / 2 % 2)
 			npc->rect = rcNo;
 	}
 }
@@ -209,23 +211,25 @@
 void ActNpc002(NPCHAR *npc)
 {
 	//Rects
-	RECT rcLeft[7];
-	rcLeft[0] = {32, 0, 64, 24};
-	rcLeft[1] = {0, 0, 32, 24};
-	rcLeft[2] = {32, 0, 64, 24};
-	rcLeft[3] = {64, 0, 96, 24};
-	rcLeft[4] = {96, 0, 128, 24};
-	rcLeft[5] = {128, 0, 160, 24};
-	rcLeft[6] = {160, 0, 192, 24};
+	RECT rcLeft[7] = {
+		{32, 0, 64, 24},
+		{0, 0, 32, 24},
+		{32, 0, 64, 24},
+		{64, 0, 96, 24},
+		{96, 0, 128, 24},
+		{128, 0, 160, 24},
+		{160, 0, 192, 24},
+	};
 
-	RECT rcRight[7];
-	rcRight[0] = {32, 24, 64, 48};
-	rcRight[1] = {0, 24, 32, 48};
-	rcRight[2] = {32, 24, 64, 48};
-	rcRight[3] = {64, 24, 96, 48};
-	rcRight[4] = {96, 24, 128, 48};
-	rcRight[5] = {128, 24, 160, 48};
-	rcRight[6] = {160, 24, 192, 48};
+	RECT rcRight[7] = {
+		{32, 24, 64, 48},
+		{0, 24, 32, 48},
+		{32, 24, 64, 48},
+		{64, 24, 96, 48},
+		{96, 24, 128, 48},
+		{128, 24, 160, 48},
+		{160, 24, 192, 48},
+	};
 
 	//Turn when touching a wall
 	if (npc->flag & 1)
@@ -328,33 +332,35 @@
 	if (++npc->count1 > 100)
 		npc->cond = 0;
 
-	npc->rect = {0, 0, 0, 0};
+	RECT rect = {0, 0, 0, 0};
+	npc->rect = rect;
 }
 
 //Smoke
 void ActNpc004(NPCHAR *npc)
 {
-	RECT rcLeft[8];
-	RECT rcUp[8];
+	RECT rcLeft[8] = {
+		{16, 0, 17, 1},
+		{16, 0, 32, 16},
+		{32, 0, 48, 16},
+		{48, 0, 64, 16},
+		{64, 0, 80, 16},
+		{80, 0, 96, 16},
+		{96, 0, 112, 16},
+		{112, 0, 128, 16},
+	};
 
-	rcLeft[0] = {16, 0, 17, 1};
-	rcLeft[1] = {16, 0, 32, 16};
-	rcLeft[2] = {32, 0, 48, 16};
-	rcLeft[3] = {48, 0, 64, 16};
-	rcLeft[4] = {64, 0, 80, 16};
-	rcLeft[5] = {80, 0, 96, 16};
-	rcLeft[6] = {96, 0, 112, 16};
-	rcLeft[7] = {112, 0, 128, 16};
+	RECT rcUp[8] = {
+		{16, 0, 17, 1},
+		{80, 48, 96, 64},
+		{0, 128, 16, 144},
+		{16, 128, 32, 144},
+		{32, 128, 48, 144},
+		{48, 128, 64, 144},
+		{64, 128, 80, 144},
+		{80, 128, 96, 144},
+	};
 
-	rcUp[0] = {16, 0, 17, 1};
-	rcUp[1] = {80, 48, 96, 64};
-	rcUp[2] = {0, 128, 16, 144};
-	rcUp[3] = {16, 128, 32, 144};
-	rcUp[4] = {32, 128, 48, 144};
-	rcUp[5] = {48, 128, 64, 144};
-	rcUp[6] = {64, 128, 80, 144};
-	rcUp[7] = {80, 128, 96, 144};
-
 	if (npc->act_no)
 	{
 		//Slight drag
@@ -408,17 +414,18 @@
 //Critter (Green, Egg Corridor)
 void ActNpc005(NPCHAR *npc)
 {
-	RECT rcLeft[3];
-	RECT rcRight[3];
+	RECT rcLeft[3] = {
+		{0, 48, 16, 64},
+		{16, 48, 32, 64},
+		{32, 48, 48, 64},
+	};
 
-	rcLeft[0] = {0, 48, 16, 64};
-	rcLeft[1] = {16, 48, 32, 64};
-	rcLeft[2] = {32, 48, 48, 64};
+	RECT rcRight[3] = {
+		{0, 64, 16, 80},
+		{16, 64, 32, 80},
+		{32, 64, 48, 80},
+	};
 
-	rcRight[0] = {0, 64, 16, 80};
-	rcRight[1] = {16, 64, 32, 80};
-	rcRight[2] = {32, 64, 48, 80};
-
 	switch (npc->act_no)
 	{
 		case 0: //Init
@@ -512,21 +519,22 @@
 //Beetle (Goes left and right, Egg Corridor)
 void ActNpc006(NPCHAR *npc)
 {
-	RECT rcLeft[5];
-	RECT rcRight[5];
-	
-	rcLeft[0] = {0, 80, 16, 96};
-	rcLeft[1] = {16, 80, 32, 96};
-	rcLeft[2] = {32, 80, 48, 96};
-	rcLeft[3] = {48, 80, 64, 96};
-	rcLeft[4] = {64, 80, 80, 96};
-	
-	rcRight[0] = {0, 96, 16, 112};
-	rcRight[1] = {16, 96, 32, 112};
-	rcRight[2] = {32, 96, 48, 112};
-	rcRight[3] = {48, 96, 64, 112};
-	rcRight[4] = {64, 96, 80, 112};
-	
+	RECT rcLeft[5] = {
+		{0, 80, 16, 96},
+		{16, 80, 32, 96},
+		{32, 80, 48, 96},
+		{48, 80, 64, 96},
+		{64, 80, 80, 96},
+	};
+
+	RECT rcRight[5] = {
+		{0, 96, 16, 112},
+		{16, 96, 32, 112},
+		{32, 96, 48, 112},
+		{48, 96, 64, 112},
+		{64, 96, 80, 112},
+	};
+
 	switch (npc->act_no)
 	{
 		case 0: //Init
@@ -638,17 +646,18 @@
 //Basil
 void ActNpc007(NPCHAR *npc)
 {
-	RECT rcLeft[3];
-	RECT rcRight[3];
+	RECT rcLeft[3] = {
+		{256, 64, 288, 80},
+		{256, 80, 288, 96},
+		{256, 96, 288, 112},
+	};
 
-	rcLeft[0] = {256, 64, 288, 80};
-	rcLeft[1] = {256, 80, 288, 96};
-	rcLeft[2] = {256, 96, 288, 112};
+	RECT rcRight[3] = {
+		{288, 64, 320, 80},
+		{288, 80, 320, 96},
+		{288, 96, 320, 112},
+	};
 
-	rcRight[0] = {288, 64, 320, 80};
-	rcRight[1] = {288, 80, 320, 96};
-	rcRight[2] = {288, 96, 320, 112};
-
 	switch (npc->act_no)
 	{
 		case 0:
@@ -720,15 +729,16 @@
 //Beetle (Follows you, Egg Corridor)
 void ActNpc008(NPCHAR *npc)
 {
-	RECT rcLeft[2];
-	RECT rcRight[2];
+	RECT rcLeft[2] = {
+		{80, 80, 96, 96},
+		{96, 80, 112, 96},
+	};
 
-	rcLeft[0] = {80, 80, 96, 96};
-	rcLeft[1] = {96, 80, 112, 96};
+	RECT rcRight[2] = {
+		{80, 96, 96, 112},
+		{96, 96, 112, 112},
+	};
 
-	rcRight[0] = {80, 96, 96, 112};
-	rcRight[1] = {96, 96, 112, 112};
-
 	switch (npc->act_no)
 	{
 		case 0:
@@ -872,17 +882,18 @@
 	npc->x += npc->xm;
 	npc->y += npc->ym;
 
-	RECT rect_left[3];
-	RECT rect_right[3];
+	RECT rect_left[3] = {
+		{0, 0, 40, 24},
+		{80, 0, 120, 24},
+		{120, 0, 160, 24},
+	};
 
-	rect_left[0] = {0, 0, 40, 24};
-	rect_left[1] = {80, 0, 120, 24};
-	rect_left[2] = {120, 0, 160, 24};
+	RECT rect_right[3] = {
+		{0, 24, 40, 48},
+		{80, 24, 120, 48},
+		{120, 24, 160, 48},
+	};
 
-	rect_right[0] = {0, 24, 40, 48};
-	rect_right[1] = {80, 24, 120, 48};
-	rect_right[2] = {120, 24, 160, 48};
-
 	if (npc->direct == 0)
 		npc->rect = rect_left[npc->ani_no];
 	else
@@ -983,19 +994,20 @@
 	npc->x += npc->xm;
 	npc->y += npc->ym;
 
-	RECT rect_left[4];
-	RECT rect_right[4];
+	RECT rect_left[4] = {
+		{0, 0, 40, 24},
+		{40, 0, 80, 24},
+		{80, 0, 120, 24},
+		{120, 0, 160, 24},
+	};
 
-	rect_left[0] = {0, 0, 40, 24};
-	rect_left[1] = {40, 0, 80, 24};
-	rect_left[2] = {80, 0, 120, 24};
-	rect_left[3] = {120, 0, 160, 24};
+	RECT rect_right[4] = {
+		{0, 24, 40, 48},
+		{40, 24, 80, 48},
+		{80, 24, 120, 48},
+		{120, 24, 160, 48},
+	};
 
-	rect_right[0] = {0, 24, 40, 48};
-	rect_right[1] = {40, 24, 80, 48};
-	rect_right[2] = {80, 24, 120, 48};
-	rect_right[3] = {120, 24, 160, 48};
-
 	if (gMC.x > npc->x)
 		npc->direct = 2;
 	else
@@ -1019,12 +1031,12 @@
 	npc->y += npc->ym;
 	npc->x += npc->xm;
 
-	RECT rect_left[3];
+	RECT rect_left[3] = {
+		{208, 104, 224, 120},
+		{224, 104, 240, 120},
+		{240, 104, 256, 120},
+	};
 
-	rect_left[0] = {208, 104, 224, 120};
-	rect_left[1] = {224, 104, 240, 120};
-	rect_left[2] = {240, 104, 256, 120};
-
 	if (++npc->ani_wait > 1)
 	{
 		npc->ani_wait = 0;
@@ -1323,39 +1335,40 @@
 	npc->x += npc->xm;
 	npc->y += npc->ym;
 
-	RECT rect_left[14];
-	RECT rect_right[14];
+	RECT rect_left[14] = {
+		{0, 0, 40, 24},
+		{160, 0, 200, 24},
+		{80, 0, 120, 24},
+		{120, 0, 160, 24},
+		{240, 0, 280, 24},
+		{200, 0, 240, 24},
+		{280, 0, 320, 24},
+		{0, 0, 0, 0},
+		{80, 48, 120, 72},
+		{0, 48, 40, 72},
+		{0, 0, 40, 24},
+		{40, 48, 80, 72},
+		{0, 0, 40, 24},
+		{280, 0, 320, 24},
+	};
 
-	rect_left[0] = {0, 0, 40, 24};
-	rect_left[1] = {160, 0, 200, 24};
-	rect_left[2] = {80, 0, 120, 24};
-	rect_left[3] = {120, 0, 160, 24};
-	rect_left[4] = {240, 0, 280, 24};
-	rect_left[5] = {200, 0, 240, 24};
-	rect_left[6] = {280, 0, 320, 24};
-	rect_left[7] = {0, 0, 0, 0};
-	rect_left[8] = {80, 48, 120, 72};
-	rect_left[9] = {0, 48, 40, 72};
-	rect_left[10] = {0, 0, 40, 24};
-	rect_left[11] = {40, 48, 80, 72};
-	rect_left[12] = {0, 0, 40, 24};
-	rect_left[13] = {280, 0, 320, 24};
+	RECT rect_right[14] = {
+		{0, 24, 40, 48},
+		{160, 24, 200, 48},
+		{80, 24, 120, 48},
+		{120, 24, 160, 48},
+		{240, 24, 280, 48},
+		{200, 24, 240, 48},
+		{280, 24, 320, 48},
+		{0, 0, 0, 0},
+		{80, 72, 120, 96},
+		{0, 72, 40, 96},
+		{0, 24, 40, 48},
+		{40, 72, 80, 96},
+		{0, 24, 40, 48},
+		{280, 24, 320, 48},
+	};
 
-	rect_right[0] = {0, 24, 40, 48};
-	rect_right[1] = {160, 24, 200, 48};
-	rect_right[2] = {80, 24, 120, 48};
-	rect_right[3] = {120, 24, 160, 48};
-	rect_right[4] = {240, 24, 280, 48};
-	rect_right[5] = {200, 24, 240, 48};
-	rect_right[6] = {280, 24, 320, 48};
-	rect_right[7] = {0, 0, 0, 0};
-	rect_right[8] = {80, 72, 120, 96};
-	rect_right[9] = {0, 72, 40, 96};
-	rect_right[10] = {0, 24, 40, 48};
-	rect_right[11] = {40, 72, 80, 96};
-	rect_right[12] = {0, 24, 40, 48};
-	rect_right[13] = {280, 24, 320, 48};
-
 	if (npc->direct == 0)
 		npc->rect = rect_left[npc->ani_no];
 	else
@@ -1373,13 +1386,13 @@
 //Forcefield
 void ActNpc013(NPCHAR *npc)
 {
-	RECT rect[4];
+	RECT rect[4] = {
+		{128, 0, 144, 16},
+		{144, 0, 160, 16},
+		{160, 0, 176, 16},
+		{176, 0, 192, 16},
+	};
 
-	rect[0] = {128, 0, 144, 16};
-	rect[1] = {144, 0, 160, 16};
-	rect[2] = {160, 0, 176, 16};
-	rect[3] = {176, 0, 192, 16};
-
 	if (++npc->ani_wait > 0)
 	{
 		npc->ani_wait = 0;
@@ -1395,12 +1408,12 @@
 //Santa's Key
 void ActNpc014(NPCHAR *npc)
 {
-	RECT rect[3];
+	RECT rect[3] = {
+		{192, 0, 208, 16},
+		{208, 0, 224, 16},
+		{224, 0, 240, 16},
+	};
 
-	rect[0] = {192, 0, 208, 16};
-	rect[1] = {208, 0, 224, 16};
-	rect[2] = {224, 0, 240, 16};
-
 	if (npc->act_no == 0)
 	{
 		npc->act_no = 1;
@@ -1435,12 +1448,12 @@
 //Chest (closed)
 void ActNpc015(NPCHAR *npc)
 {
-	RECT rcLeft[3];
+	RECT rcLeft[3] = {
+		{240, 0, 256, 16},
+		{256, 0, 272, 16},
+		{272, 0, 288, 16},
+	};
 
-	rcLeft[0] = {240, 0, 256, 16};
-	rcLeft[1] = {256, 0, 272, 16};
-	rcLeft[2] = {272, 0, 288, 16};
-
 	switch (npc->act_no)
 	{
 		case 0:
@@ -1492,26 +1505,26 @@
 //Save point
 void ActNpc016(NPCHAR *npc)
 {
-	RECT rects[8];
+	RECT rect[8] = {
+		{96, 16, 112, 32},
+		{112, 16, 128, 32},
+		{128, 16, 144, 32},
+		{144, 16, 160, 32},
+		{160, 16, 176, 32},
+		{176, 16, 192, 32},
+		{192, 16, 208, 32},
+		{208, 16, 224, 32},
+	};
 
-	rects[0] = {96, 16, 112, 32};
-	rects[1] = {112, 16, 128, 32};
-	rects[2] = {128, 16, 144, 32};
-	rects[3] = {144, 16, 160, 32};
-	rects[4] = {160, 16, 176, 32};
-	rects[5] = {176, 16, 192, 32};
-	rects[6] = {192, 16, 208, 32};
-	rects[7] = {208, 16, 224, 32};
-
 	switch (npc->act_no)
 	{
 		case 0:
-			npc->bits |= 0x2000u;
+			npc->bits |= 0x2000;
 			npc->act_no = 1;
 
 			if (npc->direct == 2)
 			{
-				npc->bits &= ~0x2000u;
+				npc->bits &= ~0x2000;
 				npc->ym = -0x200;
 
 				for (int i = 0; i < 4; ++i)
@@ -1521,37 +1534,37 @@
 			// Fallthrough
 		case 1:
 			if (npc->flag & 8)
-				npc->bits |= 0x2000u;
+				npc->bits |= 0x2000;
 
 			break;
 	}
 
-	if ( ++npc->ani_wait > 2 )
+	if (++npc->ani_wait > 2)
 	{
 		npc->ani_wait = 0;
 		++npc->ani_no;
 	}
 
-	if ( npc->ani_no > 7 )
+	if (npc->ani_no > 7)
 		npc->ani_no = 0;
 
 	npc->ym += 0x40;
-	if ( npc->ym > 0x5FF )
+	if (npc->ym > 0x5FF)
 		npc->ym = 0x5FF;
 
 	npc->y += npc->ym;
 
-	npc->rect = rects[npc->ani_no];
+	npc->rect = rect[npc->ani_no];
 }
 
 // Health refill
 void ActNpc017(NPCHAR *npc)
 {
-	RECT rect[2];
+	RECT rect[2] = {
+		{288, 0, 304, 16},
+		{304, 0, 320, 16},
+	};
 
-	rect[0] = {288, 0, 304, 16};
-	rect[1] = {304, 0, 320, 16};
-
 	int aa;
 
 	switch (npc->act_no)
@@ -1626,11 +1639,11 @@
 // Door
 void ActNpc018(NPCHAR *npc)
 {
-	RECT rect[2];
+	RECT rect[2] = {
+		{224, 16, 240, 40},
+		{192, 112, 208, 136},
+	};
 
-	rect[0] = {224, 16, 240, 40};
-	rect[1] = {192, 112, 208, 136};
-
 	switch (npc->act_no)
 	{
 		case 0:
@@ -1720,18 +1733,19 @@
 	npc->x += npc->xm;
 	npc->y += npc->ym;
 
-	RECT rect_left[4];
-	RECT rect_right[4];
+	RECT rect_left[4] = {
+		{0, 0, 40, 24},
+		{160, 0, 200, 24},
+		{80, 0, 120, 24},
+		{120, 0, 160, 24},
+	};
 
-	rect_left[0] = {0, 0, 40, 24};
-	rect_left[1] = {160, 0, 200, 24};
-	rect_left[2] = {80, 0, 120, 24};
-	rect_left[3] = {120, 0, 160, 24};
-
-	rect_right[0] = {0, 24, 40, 48};
-	rect_right[1] = {160, 24, 200, 48};
-	rect_right[2] = {80, 24, 120, 48};
-	rect_right[3] = {120, 24, 160, 48};
+	RECT rect_right[4] = {
+		{0, 24, 40, 48},
+		{160, 24, 200, 48},
+		{80, 24, 120, 48},
+		{120, 24, 160, 48},
+	};
 
 	if (npc->direct == 0)
 		npc->rect = rect_left[npc->ani_no];