shithub: cstory

Download patch

ref: c9ac9d446d56335c278c54f11722e6796660f73a
parent: 75e062c7753c7dd4229f00932ffa34f87fd7fead
author: Clownacy <Clownacy@users.noreply.github.com>
date: Mon May 6 14:09:19 EDT 2019

Made Shoot.cpp ASM-accurate

--- a/msvc2003/devilution/comparer-config.toml
+++ b/msvc2003/devilution/comparer-config.toml
@@ -555,6 +555,54 @@
 addr = 0x41CB10
 
 [[func]]
+name = "ShootBullet_Frontia1"
+addr = 0x41DBD0
+
+[[func]]
+name = "ShootBullet_PoleStar"
+addr = 0x41DE60
+
+[[func]]
+name = "ShootBullet_FireBall"
+addr = 0x41E110
+
+[[func]]
+name = "ShootBullet_Machinegun1"
+addr = 0x41E3D0
+
+[[func]]
+name = "ShootBullet_Missile"
+addr = 0x41E7B0
+
+[[func]]
+name = "ShootBullet_Bubblin1"
+addr = 0x41EFD0
+
+[[func]]
+name = "ShootBullet_Bubblin2"
+addr = 0x41F280
+
+[[func]]
+name = "ShootBullet_Sword"
+addr = 0x41F580
+
+[[func]]
+name = "ShootBullet_Nemesis"
+addr = 0x41F710
+
+[[func]]
+name = "ResetSpurCharge"
+addr = 0x41F9E0
+
+[[func]]
+name = "ShootBullet_Spur"
+addr = 0x41FA10
+
+[[func]]
+name = "ShootBullet"
+addr = 0x41FE70
+
+[[func]]
 name = "PlaySoundObject"
 addr = 0x420640
 
--- a/src/MycParam.cpp
+++ b/src/MycParam.cpp
@@ -2,6 +2,8 @@
 
 #include "SDL.h"
 
+#include "WindowsWrapper.h"
+
 #include "ArmsItem.h"
 #include "CommonDefines.h"
 #include "Caret.h"
@@ -92,7 +94,7 @@
 	gArmsData[gSelectedArms].exp = 0;
 }
 
-bool IsMaxExpMyChar()
+BOOL IsMaxExpMyChar()
 {
 	return gArmsData[gSelectedArms].level == 3
 		&& gArmsData[gSelectedArms].exp >= gArmsLevelTable[gArmsData[gSelectedArms].code].exp[2];
--- a/src/MycParam.h
+++ b/src/MycParam.h
@@ -2,6 +2,8 @@
 
 #include <stdint.h>
 
+#include "WindowsWrapper.h"
+
 struct ARMS_LEVEL
 {
 	int exp[3];
@@ -17,7 +19,7 @@
 
 void AddExpMyChar(int x);
 void ZeroExpMyChar();
-bool IsMaxExpMyChar();
+BOOL IsMaxExpMyChar();
 void DamageMyChar(int damage);
 void ZeroArmsEnergy_All();
 void AddBulletMyChar(int no, int val);
--- a/src/Shoot.cpp
+++ b/src/Shoot.cpp
@@ -28,7 +28,10 @@
 			break;
 	}
 
-	if (CountArmsBullet(1) <= 3 && gKeyTrg & gKeyShot)
+	if (CountArmsBullet(1) > 3)
+		return;
+
+	if (gKeyTrg & gKeyShot)
 	{
 		if (!UseArmsEnergy(1))
 		{
@@ -86,18 +89,21 @@
 	int bul_no;
 	switch (level)
 	{
-	case 2:
-		bul_no = 5;
-		break;
-	case 3:
-		bul_no = 6;
-		break;
-	case 1:
-		bul_no = 4;
-		break;
+		case 1:
+			bul_no = 4;
+			break;
+		case 2:
+			bul_no = 5;
+			break;
+		case 3:
+			bul_no = 6;
+			break;
 	}
 	
-	if (CountArmsBullet(2) < 2 && gKeyTrg & gKeyShot)
+	if (CountArmsBullet(2) > 1)
+		return;
+
+	if (gKeyTrg & gKeyShot)
 	{
 		if (!UseArmsEnergy(1))
 		{
@@ -107,41 +113,41 @@
 		{
 			if (gMC.up)
 			{
-				if (gMC.direct)
+				if (gMC.direct == 0)
 				{
-					SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
-					SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
 				}
 				else
 				{
-					SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
-					SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
 				}
 			}
 			else if (gMC.down)
 			{
-				if (gMC.direct)
+				if (gMC.direct == 0)
 				{
-					SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
-					SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
 				}
 				else
 				{
-					SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
-					SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
 				}
 			}
 			else
 			{
-				if (gMC.direct)
+				if (gMC.direct == 0)
 				{
-					SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x600, 2);
-					SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
+					SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x600, 0);
+					SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
 				}
 				else
 				{
-					SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x600, 0);
-					SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
+					SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x600, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
 				}
 			}
 			
@@ -160,17 +166,17 @@
 	switch (level)
 	{
 		case 1:
-			if (CountArmsBullet(3) >= 2)
+			if (CountArmsBullet(3) > 1)
 				return;
 			bul_no = 7;
 			break;
 		case 2:
-			if (CountArmsBullet(3) >= 3)
+			if (CountArmsBullet(3) > 2)
 				return;
 			bul_no = 8;
 			break;
 		case 3:
-			if (CountArmsBullet(3) >= 4)
+			if (CountArmsBullet(3) > 3)
 				return;
 			bul_no = 9;
 			break;
@@ -186,41 +192,41 @@
 		{
 			if (gMC.up)
 			{
-				if (gMC.direct)
+				if (gMC.direct == 0)
 				{
-					SetBullet(bul_no, gMC.x + 0x800, gMC.y - 0x1000, 1);
-					SetCaret(gMC.x + 0x800, gMC.y - 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x - 0x800, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x - 0x800, gMC.y - 0x1000, 3, 0);
 				}
 				else
 				{
-					SetBullet(bul_no, gMC.x - 0x800, gMC.y - 0x1000, 1);
-					SetCaret(gMC.x - 0x800, gMC.y - 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x800, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x + 0x800, gMC.y - 0x1000, 3, 0);
 				}
 			}
 			else if (gMC.down)
 			{
-				if (gMC.direct)
+				if (gMC.direct == 0)
 				{
-					SetBullet(bul_no, gMC.x + 0x800, gMC.y + 0x1000, 3);
-					SetCaret(gMC.x + 0x800, gMC.y + 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x - 0x800, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x - 0x800, gMC.y + 0x1000, 3, 0);
 				}
 				else
 				{
-					SetBullet(bul_no, gMC.x - 0x800, gMC.y + 0x1000, 3);
-					SetCaret(gMC.x - 0x800, gMC.y + 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x800, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x + 0x800, gMC.y + 0x1000, 3, 0);
 				}
 			}
 			else
 			{
-				if (gMC.direct)
+				if (gMC.direct == 0)
 				{
-					SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x400, 2);
-					SetCaret(gMC.x + 0x1800, gMC.y + 0x400, 3, 0);
+					SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x400, 0);
+					SetCaret(gMC.x - 0x1800, gMC.y + 0x400, 3, 0);
 				}
 				else
 				{
-					SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x400, 0);
-					SetCaret(gMC.x - 0x1800, gMC.y + 0x400, 3, 0);
+					SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x400, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y + 0x400, 3, 0);
 				}
 			}
 			
@@ -231,132 +237,135 @@
 
 void ShootBullet_Machinegun1(int level)
 {
-	if (CountArmsBullet(4) < 5)
+	if (CountArmsBullet(4) > 4)
+		return;
+
+	int bul_no;
+
+	switch (level)
 	{
-		int bul_no;
+		case 1:
+			bul_no = 10;
+			break;
+		case 2:
+			bul_no = 11;
+			break;
+		case 3:
+			bul_no = 12;
+			break;
+	}
+	
+	if (!(gKey & gKeyShot))
+		gMC.rensha = 6;
+	
+	if (gKey & gKeyShot)
+	{
+		if (++gMC.rensha < 6)
+			return;
 
-		switch (level)
+		gMC.rensha = 0;
+
+		if (!UseArmsEnergy(1))
 		{
-			case 1:
-				bul_no = 10;
-				break;
-			case 2:
-				bul_no = 11;
-				break;
-			case 3:
-				bul_no = 12;
-				break;
+			PlaySoundObject(37, 1);
+			
+			if (empty == 0)
+			{
+				SetCaret(gMC.x, gMC.y, 16, 0);
+				empty = 50;
+			}
+
+			return;
 		}
-		
-		if (!(gKey & gKeyShot))
-			gMC.rensha = 6;
-		
-		if (gKey & gKeyShot)
+		else
 		{
-			if (++gMC.rensha > 6)
+			if (gMC.up)
 			{
-				gMC.rensha = 0;
-				if (!UseArmsEnergy(1))
+				if (level == 3)
+					gMC.ym += 0x100;
+			
+				if (gMC.direct == 0)
 				{
-					PlaySoundObject(37, 1);
-					
-					if (!empty)
-					{
-						SetCaret(gMC.x, gMC.y, 16, 0);
-						empty = 50;
-					}
+					SetBullet(bul_no, gMC.x - 0x600, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x - 0x600, gMC.y - 0x1000, 3, 0);
 				}
 				else
 				{
-					if (gMC.up)
-					{
-						if (level == 3)
-							gMC.ym += 0x100;
+					SetBullet(bul_no, gMC.x + 0x600, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x + 0x600, gMC.y - 0x1000, 3, 0);
+				}
+			}
+			else if (gMC.down)
+			{
+				if (level == 3)
+				{
+					if (gMC.ym > 0)
+						gMC.ym /= 2;
 					
-						if (gMC.direct)
-						{
-							SetBullet(bul_no, gMC.x + 0x600, gMC.y - 0x1000, 1);
-							SetCaret(gMC.x + 0x600, gMC.y - 0x1000, 3, 0);
-						}
-						else
-						{
-							SetBullet(bul_no, gMC.x - 0x600, gMC.y - 0x1000, 1);
-							SetCaret(gMC.x - 0x600, gMC.y - 0x1000, 3, 0);
-						}
-					}
-					else if (gMC.down)
+					if (gMC.ym > -0x400)
 					{
-						if (level == 3)
-						{
-							if (gMC.ym > 0)
-								gMC.ym /= 2;
-							
-							if (gMC.ym > -0x400)
-							{
-								gMC.ym -= 0x200;
-								if (gMC.ym < -0x400)
-									gMC.ym = -0x400;
-							}
-						}
-						
-						if (gMC.direct)
-						{
-							SetBullet(bul_no, gMC.x + 0x600, gMC.y + 0x1000, 3);
-							SetCaret(gMC.x + 0x600, gMC.y + 0x1000, 3, 0);
-						}
-						else
-						{
-							SetBullet(bul_no, gMC.x - 0x600, gMC.y + 0x1000, 3);
-							SetCaret(gMC.x - 0x600, gMC.y + 0x1000, 3, 0);
-						}
+						gMC.ym -= 0x200;
+						if (gMC.ym < -0x400)
+							gMC.ym = -0x400;
 					}
-					else
-					{
-						if (gMC.direct)
-						{
-							SetBullet(bul_no, gMC.x + 0x1800, gMC.y + 0x600, 2);
-							SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
-						}
-						else
-						{
-							SetBullet(bul_no, gMC.x - 0x1800, gMC.y + 0x600, 0);
-							SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
-						}
-					}
-					
-					if (level == 3)
-						PlaySoundObject(49, 1);
-					else
-						PlaySoundObject(32, 1);
 				}
-			}
-		}
-		else
-		{
-			static int wait = 0;
-			
-			++wait;
-			if (gMC.equip & 8)
-			{
-				if (wait > 1)
+				
+				if (gMC.direct == 0)
 				{
-					wait = 0;
-					ChargeArmsEnergy(1);
+					SetBullet(bul_no, gMC.x - 0x600, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x - 0x600, gMC.y + 0x1000, 3, 0);
 				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0x600, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x + 0x600, gMC.y + 0x1000, 3, 0);
+				}
 			}
-			else 
+			else
 			{
-				if (wait > 4)
+				if (gMC.direct == 0)
 				{
-					wait = 0;
-					ChargeArmsEnergy(1);
+					SetBullet(bul_no, gMC.x - 0x1800, gMC.y + 0x600, 0);
+					SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
 				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0x1800, gMC.y + 0x600, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
+				}
 			}
+			
+			if (level == 3)
+				PlaySoundObject(49, 1);
+			else
+				PlaySoundObject(32, 1);
 		}
 	}
+	else
+	{
+		static int wait = 0;
+		
+		++wait;
+		if (gMC.equip & 8)
+		{
+			if (wait > 1)
+			{
+				wait = 0;
+				ChargeArmsEnergy(1);
+			}
+		}
+		else 
+		{
+			if (wait > 4)
+			{
+				wait = 0;
+				ChargeArmsEnergy(1);
+			}
+		}
+	}
 }
 
-void ShootBullet_Missile(int level, bool bSuper)
+void ShootBullet_Missile(int level, BOOL bSuper)
 {
 	int bul_no;
 
@@ -375,21 +384,35 @@
 				break;
 		}
 		
-		if (level == 1)
+		switch (level)
 		{
-			if (CountArmsBullet(10) >= 1 || CountArmsBullet(11) >= 1)
-				return;
+			case 1:
+				if (CountArmsBullet(10) > 0)
+					return;
+
+				if (CountArmsBullet(11) > 0)
+					return;
+
+				break;
+
+			case 2:
+				if (CountArmsBullet(10) > 1)
+					return;
+
+				if (CountArmsBullet(11) > 1)
+					return;
+
+				break;
+
+			case 3:
+				if (CountArmsBullet(10) > 3)
+					return;
+
+				if (CountArmsBullet(11) > 3)
+					return;
+
+				break;
 		}
-		else if (level == 2)
-		{
-			if (CountArmsBullet(10) >= 2 || CountArmsBullet(11) >= 2)
-				return;
-		}
-		else if (level == 3)
-		{
-			if (CountArmsBullet(10) >= 4 || CountArmsBullet(11) >= 4)
-				return;
-		}
 		
 	}
 	else
@@ -407,150 +430,164 @@
 				break;
 		}
 		
-		if (level == 1)
+		switch (level)
 		{
-			if (CountArmsBullet(5) >= 1 || CountArmsBullet(6) >= 1)
-				return;
+			case 1:
+				if (CountArmsBullet(5) > 0)
+					return;
+
+				if (CountArmsBullet(6) > 0)
+					return;
+
+				break;
+
+			case 2:
+				if (CountArmsBullet(5) > 1)
+					return;
+
+				if (CountArmsBullet(6) > 1)
+					return;
+
+				break;
+
+			case 3:
+				if (CountArmsBullet(5) > 3)
+					return;
+
+				if (CountArmsBullet(6) > 3)
+					return;
+
+				break;
 		}
-		else if (level == 2)
-		{
-			if (CountArmsBullet(5) >= 2 || CountArmsBullet(6) >= 2)
-				return;
-		}
-		else if ( level == 3 )
-		{
-			if (CountArmsBullet(5) >= 4 || CountArmsBullet(6) >= 4)
-				return;
-		}
 	}
 	
-	if (!(gKeyTrg & gKeyShot))
-		return;
-
-	if (level < 3)
+	if (gKeyTrg & gKeyShot)
 	{
-		if (!UseArmsEnergy(1))
+		if (level < 3)
 		{
-			PlaySoundObject(37, 1);
-
-			if (!empty)
+			if (!UseArmsEnergy(1))
 			{
-				SetCaret(gMC.x, gMC.y, 16, 0);
-				empty = 50;
-			}
+				PlaySoundObject(37, 1);
 
-			return;
-		}
+				if (empty == 0)
+				{
+					SetCaret(gMC.x, gMC.y, 16, 0);
+					empty = 50;
+				}
 
-		if (gMC.up)
-		{
-			if (gMC.direct)
-			{
-				SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
-				SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
+				return;
 			}
-			else
+
+			if (gMC.up)
 			{
-				SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
-				SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
+				if (gMC.direct == 0)
+				{
+					SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
+				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
+				}
 			}
-		}
-		else if (gMC.down)
-		{
-			if (gMC.direct)
+			else if (gMC.down)
 			{
-				SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
-				SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
+				if (gMC.direct == 0)
+				{
+					SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
+				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
+				}
 			}
 			else
 			{
-				SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
-				SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
+				if (gMC.direct == 0)
+				{
+					SetBullet(bul_no, gMC.x - 0xC00, gMC.y, 0);
+					SetCaret(gMC.x - 0x1800, gMC.y, 3, 0);
+				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0xC00, gMC.y, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y, 3, 0);
+				}
 			}
 		}
 		else
 		{
-			if (gMC.direct)
+			if (!UseArmsEnergy(1))
 			{
-				SetBullet(bul_no, gMC.x + 0xC00, gMC.y, 2);
-				SetCaret(gMC.x + 0x1800, gMC.y, 3, 0);
-			}
-			else
-			{
-				SetBullet(bul_no, gMC.x - 0xC00, gMC.y, 0);
-				SetCaret(gMC.x - 0x1800, gMC.y, 3, 0);
-			}
-		}
-	}
-	else
-	{
-		if (!UseArmsEnergy(1))
-		{
-			PlaySoundObject(37, 1);
+				PlaySoundObject(37, 1);
 
-			if (!empty)
-			{
-				SetCaret(gMC.x, gMC.y, 16, 0);
-				empty = 50;
+				if (empty == 0)
+				{
+					SetCaret(gMC.x, gMC.y, 16, 0);
+					empty = 50;
+				}
+
+				return;
 			}
 
-			return;
-		}
-
-		if (gMC.up)
-		{
-			if (gMC.direct)
+			if (gMC.up)
 			{
-				SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
-				SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
-				SetBullet(bul_no, gMC.x + 0x600, gMC.y, 1);
-				SetBullet(bul_no, gMC.x - 0x600, gMC.y, 1);
+				if (gMC.direct == 0)
+				{
+					SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x600, gMC.y, 1);
+					SetBullet(bul_no, gMC.x - 0x600, gMC.y, 1);
+				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x + 0x200, gMC.y - 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x600, gMC.y, 1);
+					SetBullet(bul_no, gMC.x - 0x600, gMC.y, 1);
+				}
 			}
-			else
+			else if (gMC.down)
 			{
-				SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0x1000, 1);
-				SetCaret(gMC.x - 0x200, gMC.y - 0x1000, 3, 0);
-				SetBullet(bul_no, gMC.x + 0x600, gMC.y, 1);
-				SetBullet(bul_no, gMC.x - 0x600, gMC.y, 1);
+				if (gMC.direct == 0)
+				{
+					SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x + 0x600, gMC.y, 3);
+					SetBullet(bul_no, gMC.x - 0x600, gMC.y, 3);
+				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
+					SetBullet(bul_no, gMC.x - 0x600, gMC.y, 3);
+					SetBullet(bul_no, gMC.x + 0x600, gMC.y, 3);
+				}
 			}
-		}
-		else if (gMC.down)
-		{
-			if (gMC.direct)
-			{
-				SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x1000, 3);
-				SetCaret(gMC.x + 0x200, gMC.y + 0x1000, 3, 0);
-				SetBullet(bul_no, gMC.x - 0x600, gMC.y, 3);
-				SetBullet(bul_no, gMC.x + 0x600, gMC.y, 3);
-			}
 			else
 			{
-				SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x1000, 3);
-				SetCaret(gMC.x - 0x200, gMC.y + 0x1000, 3, 0);
-				SetBullet(bul_no, gMC.x + 0x600, gMC.y, 3);
-				SetBullet(bul_no, gMC.x - 0x600, gMC.y, 3);
+				if (gMC.direct == 0)
+				{
+					SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x200, 0);
+					SetCaret(gMC.x - 0x1800, gMC.y + 0x200, 3, 0);
+					SetBullet(bul_no, gMC.x, gMC.y - 0x1000, 0);
+					SetBullet(bul_no, gMC.x + 0x800, gMC.y - 0x200, 0);
+				}
+				else
+				{
+					SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x200, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y + 0x200, 3, 0);
+					SetBullet(bul_no, gMC.x, gMC.y - 0x1000, 2);
+					SetBullet(bul_no, gMC.x - 0x800, gMC.y - 0x200, 2);
+				}
 			}
 		}
-		else
-		{
-			if (gMC.direct)
-			{
-				SetBullet(bul_no, gMC.x + 0xC00, gMC.y + 0x200, 2);
-				SetCaret(gMC.x + 0x1800, gMC.y + 0x200, 3, 0);
-				SetBullet(bul_no, gMC.x, gMC.y - 0x1000, 2);
-				SetBullet(bul_no, gMC.x - 0x800, gMC.y - 0x200, 2);
-			}
-			else
-			{
-				SetBullet(bul_no, gMC.x - 0xC00, gMC.y + 0x200, 0);
-				SetCaret(gMC.x - 0x1800, gMC.y + 0x200, 3, 0);
-				SetBullet(bul_no, gMC.x, gMC.y - 0x1000, 0);
-				SetBullet(bul_no, gMC.x + 0x800, gMC.y - 0x200, 0);
-			}
-		}
-	}
 
-	PlaySoundObject(32, 1);
+		PlaySoundObject(32, 1);
+	}
 }
 
 void ShootBullet_Bubblin1(void)
@@ -557,67 +594,73 @@
 {
 	static int wait;
 
-	if (CountArmsBullet(7) <= 3)
+	if (CountArmsBullet(7) > 3)
+		return;
+
+	if (gKeyTrg & gKeyShot)
 	{
-		if (gKeyTrg & gKeyShot)
+		if (!UseArmsEnergy(1))
 		{
-			if (!UseArmsEnergy(1))
+			PlaySoundObject(37, 1);
+
+			if (empty == 0)
 			{
-				PlaySoundObject(37, 1);
-				if (!empty)
-				{
-					SetCaret(gMC.x, gMC.y, 16, 0);
-					empty = 50;
-				}
+				SetCaret(gMC.x, gMC.y, 16, 0);
+				empty = 50;
 			}
-			else
+
+			return;
+		}
+		else
+		{
+			if (gMC.up)
 			{
-				if (gMC.up)
+				if (gMC.direct == 0)
 				{
-					if (gMC.direct)
-					{
-						SetBullet(19, gMC.x + 0x200, gMC.y - 0x400, 1);
-						SetCaret(gMC.x + 0x200, gMC.y - 0x400, 3, 0);
-					}
-					else
-					{
-						SetBullet(19, gMC.x - 0x200, gMC.y - 0x400, 1);
-						SetCaret(gMC.x - 0x200, gMC.y - 0x400, 3, 0);
-					}
+					SetBullet(19, gMC.x - 0x200, gMC.y - 0x400, 1);
+					SetCaret(gMC.x - 0x200, gMC.y - 0x400, 3, 0);
 				}
-				else if (gMC.down)
+				else
 				{
-					if (gMC.direct)
-					{
-						SetBullet(19, gMC.x + 0x200, gMC.y + 0x400, 3);
-						SetCaret(gMC.x + 0x200, gMC.y + 0x400, 3, 0);
-					}
-					else
-					{
-						SetBullet(19, gMC.x - 0x200, gMC.y + 0x400, 3);
-						SetCaret(gMC.x - 0x200, gMC.y + 0x400, 3, 0);
-					}
+					SetBullet(19, gMC.x + 0x200, gMC.y - 0x400, 1);
+					SetCaret(gMC.x + 0x200, gMC.y - 0x400, 3, 0);
 				}
-				else if (gMC.direct)
+			}
+			else if (gMC.down)
+			{
+				if (gMC.direct == 0)
 				{
-					SetBullet(19, gMC.x + 0xC00, gMC.y + 0x600, 2);
-					SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
+					SetBullet(19, gMC.x - 0x200, gMC.y + 0x400, 3);
+					SetCaret(gMC.x - 0x200, gMC.y + 0x400, 3, 0);
 				}
 				else
 				{
+					SetBullet(19, gMC.x + 0x200, gMC.y + 0x400, 3);
+					SetCaret(gMC.x + 0x200, gMC.y + 0x400, 3, 0);
+				}
+			}
+			else
+			{
+				if (gMC.direct == 0)
+				{
 					SetBullet(19, gMC.x - 0xC00, gMC.y + 0x600, 0);
 					SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
 				}
-	
-				PlaySoundObject(48, 1);
+				else
+				{
+					SetBullet(19, gMC.x + 0xC00, gMC.y + 0x600, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
+				}
 			}
+
+			PlaySoundObject(48, 1);
 		}
-		else if (++wait > 20)
-		{
-			wait = 0;
-			ChargeArmsEnergy(1);
-		}
 	}
+	else if (++wait > 20)
+	{
+		wait = 0;
+		ChargeArmsEnergy(1);
+	}
 }
 
 void ShootBullet_Bubblin2(int level)
@@ -624,127 +667,133 @@
 {
 	static int wait;
 
-	if (CountArmsBullet(7) <= 15)
+	if (CountArmsBullet(7) > 15)
+		return;
+
+	level += 18;
+
+	if (!(gKey & gKeyShot))
+		gMC.rensha = 6;
+
+	if (gKey & gKeyShot)
 	{
-		level += 18;
+		if (++gMC.rensha < 7)
+			return;
 
-		if (!(gKey & gKeyShot))
-			gMC.rensha = 6;
+		gMC.rensha = 0;
 
-		if (gKey & gKeyShot)
+		if (!UseArmsEnergy(1))
 		{
-			if (++gMC.rensha >= 7)
-			{
-				gMC.rensha = 0;
+			PlaySoundObject(37, 1);
 
-				if (!UseArmsEnergy(1))
-				{
-					PlaySoundObject(37, 1);
-					if (!empty)
-					{
-						SetCaret(gMC.x, gMC.y, 16, 0);
-						empty = 50;
-					}
-				}
-				else
-				{
-					if (gMC.up)
-					{
-						if (gMC.direct)
-						{
-							SetBullet(level, gMC.x + 0x600, gMC.y - 0x1000, 1);
-							SetCaret(gMC.x + 0x600, gMC.y - 0x2000, 3, 0);
-						}
-						else
-						{
-							SetBullet(level, gMC.x - 0x600, gMC.y - 0x1000, 1);
-							SetCaret(gMC.x - 0x600, gMC.y - 0x2000, 3, 0);
-						}
-					}
-					else if (gMC.down)
-					{
-						if (gMC.direct)
-						{
-							SetBullet(level, gMC.x + 0x600, gMC.y + 0x1000, 3);
-							SetCaret(gMC.x + 0x600, gMC.y + 0x2000, 3, 0);
-						}
-						else
-						{
-							SetBullet(level, gMC.x - 0x600, gMC.y + 0x1000, 3);
-							SetCaret(gMC.x - 0x600, gMC.y + 0x2000, 3, 0);
-						}
-					}
-					else if (gMC.direct)
-					{
-						SetBullet(level, gMC.x + 0xC00, gMC.y + 0x600, 2);
-						SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
-					}
-					else
-					{
-						SetBullet(level, gMC.x - 0xC00, gMC.y + 0x600, 0);
-						SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
-					}
-
-					PlaySoundObject(48, 1);
-				}
+			if (empty == 0)
+			{
+				SetCaret(gMC.x, gMC.y, 16, 0);
+				empty = 50;
 			}
-		}
-		else if (++wait > 1)
-		{
-			wait = 0;
-			ChargeArmsEnergy(1);
-		}
-	}
-}
 
-void ShootBullet_Sword(int level)
-{
-	if (CountArmsBullet(9) <= 0)
-	{
-		int bul_no;
-
-		switch (level)
-		{
-			case 1:
-				bul_no = 25;
-				break;
-			case 2:
-				bul_no = 26;
-				break;
-			case 3:
-				bul_no = 27;
-				break;
+			return;
 		}
-
-		if (gKeyTrg & gKeyShot)
+		else
 		{
 			if (gMC.up)
 			{
 				if (gMC.direct == 0)
-					SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x800, 1);
+				{
+					SetBullet(level, gMC.x - 0x600, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x - 0x600, gMC.y - 0x2000, 3, 0);
+				}
 				else
-					SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x800, 1);
+				{
+					SetBullet(level, gMC.x + 0x600, gMC.y - 0x1000, 1);
+					SetCaret(gMC.x + 0x600, gMC.y - 0x2000, 3, 0);
+				}
 			}
 			else if (gMC.down)
 			{
 				if (gMC.direct == 0)
-					SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0xC00, 3);
+				{
+					SetBullet(level, gMC.x - 0x600, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x - 0x600, gMC.y + 0x2000, 3, 0);
+				}
 				else
-					SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0xC00, 3);
+				{
+					SetBullet(level, gMC.x + 0x600, gMC.y + 0x1000, 3);
+					SetCaret(gMC.x + 0x600, gMC.y + 0x2000, 3, 0);
+				}
 			}
 			else
 			{
 				if (gMC.direct == 0)
-					SetBullet(bul_no, gMC.x + 0xC00, gMC.y - 0x600, 0);
+				{
+					SetBullet(level, gMC.x - 0xC00, gMC.y + 0x600, 0);
+					SetCaret(gMC.x - 0x1800, gMC.y + 0x600, 3, 0);
+				}
 				else
-					SetBullet(bul_no, gMC.x - 0xC00, gMC.y - 0x600, 2);
+				{
+					SetBullet(level, gMC.x + 0xC00, gMC.y + 0x600, 2);
+					SetCaret(gMC.x + 0x1800, gMC.y + 0x600, 3, 0);
+				}
 			}
 
-			PlaySoundObject(34, 1);
+			PlaySoundObject(48, 1);
 		}
 	}
+	else if (++wait > 1)
+	{
+		wait = 0;
+		ChargeArmsEnergy(1);
+	}
 }
 
+void ShootBullet_Sword(int level)
+{
+	if (CountArmsBullet(9) > 0)
+		return;
+
+	int bul_no;
+
+	switch (level)
+	{
+		case 1:
+			bul_no = 25;
+			break;
+		case 2:
+			bul_no = 26;
+			break;
+		case 3:
+			bul_no = 27;
+			break;
+	}
+
+	if (gKeyTrg & gKeyShot)
+	{
+		if (gMC.up)
+		{
+			if (gMC.direct == 0)
+				SetBullet(bul_no, gMC.x - 0x200, gMC.y + 0x800, 1);
+			else
+				SetBullet(bul_no, gMC.x + 0x200, gMC.y + 0x800, 1);
+		}
+		else if (gMC.down)
+		{
+			if (gMC.direct == 0)
+				SetBullet(bul_no, gMC.x - 0x200, gMC.y - 0xC00, 3);
+			else
+				SetBullet(bul_no, gMC.x + 0x200, gMC.y - 0xC00, 3);
+		}
+		else
+		{
+			if (gMC.direct == 0)
+				SetBullet(bul_no, gMC.x + 0xC00, gMC.y - 0x600, 0);
+			else
+				SetBullet(bul_no, gMC.x - 0xC00, gMC.y - 0x600, 2);
+		}
+
+		PlaySoundObject(34, 1);
+	}
+}
+
 void ShootBullet_Nemesis(int level)
 {
 	int bul_no;
@@ -762,7 +811,10 @@
 			break;
 	}
 
-	if (CountArmsBullet(12) <= 1 && gKeyTrg & gKeyShot)
+	if (CountArmsBullet(12) > 1)
+		return;
+
+	if (gKeyTrg & gKeyShot)
 	{
 		if (!UseArmsEnergy(1))
 		{
@@ -836,9 +888,11 @@
 
 void ShootBullet_Spur(int level)
 {
+	static BOOL bMax;
+	BOOL bShot;
 	int bul_no;
 
-	bool bShot = false;
+	bShot = FALSE;
 
 	if (gKey & gKeyShot)
 	{
@@ -849,42 +903,43 @@
 
 		if (++spur_charge / 2 % 2)
 		{
-			if (level == 1)
+			switch (level)
 			{
-				PlaySoundObject(59, 1);
+				case 1:
+					PlaySoundObject(59, 1);
+					break;
+
+				case 2:
+					PlaySoundObject(60, 1);
+					break;
+
+				case 3:
+					if (!IsMaxExpMyChar())
+						PlaySoundObject(61, 1);
+
+					break;
 			}
-			else if (level == 2)
-			{
-				PlaySoundObject(60, 1);
-			}
-			else if (level == 3)
-			{
-				if (!IsMaxExpMyChar())
-					PlaySoundObject(61, 1);
-			}
 		}
 	}
 	else
 	{
 		if (spur_charge)
-			bShot = true;
+			bShot = TRUE;
 
 		spur_charge = 0;
 	}
 
-	static bool bMax;
-
 	if (IsMaxExpMyChar())
 	{
-		if (bMax == false)
+		if (bMax == FALSE)
 		{
-			bMax = true;
+			bMax = TRUE;
 			PlaySoundObject(65, 1);
 		}
 	}
 	else
 	{
-		bMax = false;
+		bMax = FALSE;
 	}
 
 	if (!(gKey & gKeyShot))
@@ -894,7 +949,7 @@
 	{
 		case 1:
 			bul_no = 6;
-			bShot = false;
+			bShot = FALSE;
 			break;
 		case 2:
 			bul_no = 37;
@@ -904,10 +959,14 @@
 				bul_no = 39;
 			else
 				bul_no = 38;
+
 			break;
 	}
 
-	if (CountArmsBullet(13) <= 0 && CountArmsBullet(14) <= 0 && (gKeyTrg & gKeyShot || bShot))
+	if (CountArmsBullet(13) > 0 || CountArmsBullet(14) > 0)
+		return;
+
+	if (gKeyTrg & gKeyShot || bShot)
 	{
 		if (!UseArmsEnergy(1))
 		{
@@ -992,64 +1051,64 @@
 	}
 	
 	//Run functions
-	if (!(gMC.cond & 2))
+	if (gMC.cond & 2)
+		return;
+
+	switch (gArmsData[gSelectedArms].code)
 	{
-		switch (gArmsData[gSelectedArms].code)
-		{
-			case 1:
-				ShootBullet_Frontia1(gArmsData[gSelectedArms].level);
-				break;
-			case 2:
-				ShootBullet_PoleStar(gArmsData[gSelectedArms].level);
-				break;
-			case 3:
-				ShootBullet_FireBall(gArmsData[gSelectedArms].level);
-				break;
-			case 4:
-				ShootBullet_Machinegun1(gArmsData[gSelectedArms].level);
-				break;
-			case 5:
-				ShootBullet_Missile(gArmsData[gSelectedArms].level, false);
-				break;
-			case 7:
-				switch (gArmsData[gSelectedArms].level)
-				{
-					case 1:
-						ShootBullet_Bubblin1();
-						break;
-					case 2:
-						ShootBullet_Bubblin2(2);
-						break;
-					case 3:
-						ShootBullet_Bubblin2(3);
-						break;
-				}
+		case 1:
+			ShootBullet_Frontia1(gArmsData[gSelectedArms].level);
+			break;
+		case 2:
+			ShootBullet_PoleStar(gArmsData[gSelectedArms].level);
+			break;
+		case 3:
+			ShootBullet_FireBall(gArmsData[gSelectedArms].level);
+			break;
+		case 4:
+			ShootBullet_Machinegun1(gArmsData[gSelectedArms].level);
+			break;
+		case 5:
+			ShootBullet_Missile(gArmsData[gSelectedArms].level, FALSE);
+			break;
+		case 7:
+			switch (gArmsData[gSelectedArms].level)
+			{
+				case 1:
+					ShootBullet_Bubblin1();
+					break;
+				case 2:
+					ShootBullet_Bubblin2(2);
+					break;
+				case 3:
+					ShootBullet_Bubblin2(3);
+					break;
+			}
 
-				break;
-			case 9:
-				switch (gArmsData[gSelectedArms].level)
-				{
-					case 1:
-						ShootBullet_Sword(1);
-						break;
-					case 2:
-						ShootBullet_Sword(2);
-						break;
-					case 3:
-						ShootBullet_Sword(3);
-						break;
-				}
+			break;
+		case 9:
+			switch (gArmsData[gSelectedArms].level)
+			{
+				case 1:
+					ShootBullet_Sword(1);
+					break;
+				case 2:
+					ShootBullet_Sword(2);
+					break;
+				case 3:
+					ShootBullet_Sword(3);
+					break;
+			}
 
-				break;
-			case 10:
-				ShootBullet_Missile(gArmsData[gSelectedArms].level, true);
-				break;
-			case 12:
-				ShootBullet_Nemesis(gArmsData[gSelectedArms].level);
-				break;
-			case 13:
-				ShootBullet_Spur(gArmsData[gSelectedArms].level);
-				break;
-		}
+			break;
+		case 10:
+			ShootBullet_Missile(gArmsData[gSelectedArms].level, TRUE);
+			break;
+		case 12:
+			ShootBullet_Nemesis(gArmsData[gSelectedArms].level);
+			break;
+		case 13:
+			ShootBullet_Spur(gArmsData[gSelectedArms].level);
+			break;
 	}
 }