summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--VC2008/MCServer.vcproj16
-rw-r--r--source/Mobs/Bat.cpp45
-rw-r--r--source/Mobs/Bat.h14
-rw-r--r--source/Mobs/Witch.cpp55
-rw-r--r--source/Mobs/Witch.h14
-rw-r--r--source/World.cpp4
6 files changed, 148 insertions, 0 deletions
diff --git a/VC2008/MCServer.vcproj b/VC2008/MCServer.vcproj
index c4a0dbb73..fc93c2604 100644
--- a/VC2008/MCServer.vcproj
+++ b/VC2008/MCServer.vcproj
@@ -727,6 +727,14 @@
>
</File>
<File
+ RelativePath="..\source\Mobs\Bat.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\source\Mobs\Bat.h"
+ >
+ </File>
+ <File
RelativePath="..\source\Mobs\Blaze.cpp"
>
</File>
@@ -895,6 +903,14 @@
>
</File>
<File
+ RelativePath="..\source\Mobs\Witch.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\source\Mobs\Witch.h"
+ >
+ </File>
+ <File
RelativePath="..\source\Mobs\Wolf.cpp"
>
</File>
diff --git a/source/Mobs/Bat.cpp b/source/Mobs/Bat.cpp
new file mode 100644
index 000000000..4cc74ec2b
--- /dev/null
+++ b/source/Mobs/Bat.cpp
@@ -0,0 +1,45 @@
+
+#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
+
+#include "Bat.h"
+
+
+
+
+
+cBat::cBat()
+{
+ m_MobType = 65;
+ GetMonsterConfig("Bat");
+}
+
+
+
+
+
+cBat::~cBat()
+{
+}
+
+
+
+
+
+bool cBat::IsA( const char* a_EntityType )
+{
+ if( strcmp( a_EntityType, "cBat" ) == 0 ) return true;
+ return cMonster::IsA( a_EntityType );
+}
+
+
+
+
+
+void cBat::KilledBy( cEntity* a_Killer )
+{
+ cMonster::KilledBy( a_Killer );
+}
+
+
+
+
diff --git a/source/Mobs/Bat.h b/source/Mobs/Bat.h
new file mode 100644
index 000000000..94ae595d0
--- /dev/null
+++ b/source/Mobs/Bat.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "PassiveMonster.h"
+
+class cBat : public cPassiveMonster
+{
+public:
+ cBat();
+ ~cBat();
+
+ virtual bool IsA( const char* a_EntityType );
+
+ virtual void KilledBy( cEntity* a_Killer );
+};
diff --git a/source/Mobs/Witch.cpp b/source/Mobs/Witch.cpp
new file mode 100644
index 000000000..02d1de4fe
--- /dev/null
+++ b/source/Mobs/Witch.cpp
@@ -0,0 +1,55 @@
+
+#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
+
+#include "Witch.h"
+
+
+
+
+
+cWitch::cWitch()
+{
+ m_MobType = 66;
+ GetMonsterConfig("Witch");
+}
+
+
+
+
+
+cWitch::~cWitch()
+{
+}
+
+
+
+
+
+bool cWitch::IsA( const char* a_EntityType )
+{
+ if( strcmp( a_EntityType, "cWitch" ) == 0 ) return true;
+ return cMonster::IsA( a_EntityType );
+}
+
+
+
+
+
+void cWitch::KilledBy( cEntity* a_Killer )
+{
+ cItems Drops;
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_GLASS_BOTTLE);
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_GLOWSTONE_DUST);
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_GUNPOWDER);
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_REDSTONE_DUST);
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_SPIDER_EYE);
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_STICK);
+ AddRandomDropItem(Drops, 0, 6, E_ITEM_SUGAR);
+ m_World->SpawnItemPickups(Drops, m_Pos.x, m_Pos.y, m_Pos.z);
+
+ cMonster::KilledBy( a_Killer );
+}
+
+
+
+
diff --git a/source/Mobs/Witch.h b/source/Mobs/Witch.h
new file mode 100644
index 000000000..303aa7595
--- /dev/null
+++ b/source/Mobs/Witch.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "AggressiveMonster.h"
+
+class cWitch : public cAggressiveMonster
+{
+public:
+ cWitch();
+ ~cWitch();
+
+ virtual bool IsA( const char* a_EntityType );
+
+ virtual void KilledBy( cEntity* a_Killer );
+};
diff --git a/source/World.cpp b/source/World.cpp
index bd77b7f5f..198f32395 100644
--- a/source/World.cpp
+++ b/source/World.cpp
@@ -23,6 +23,7 @@
#include "Simulator/RedstoneSimulator.h"
// Mobs:
+#include "Mobs/Bat.h"
#include "Mobs/Blaze.h"
#include "Mobs/Cavespider.h"
#include "Mobs/Chicken.h"
@@ -41,6 +42,7 @@
#include "Mobs/Spider.h"
#include "Mobs/Squid.h"
#include "Mobs/Villager.h"
+#include "Mobs/Witch.h"
#include "Mobs/Wolf.h"
#include "Mobs/Zombie.h"
#include "Mobs/Zombiepigman.h"
@@ -2196,6 +2198,7 @@ int cWorld::SpawnMob(double a_PosX, double a_PosY, double a_PosZ, int a_EntityTy
switch (a_EntityType)
{
+ case E_ENTITY_TYPE_BAT: Monster = new cBat(); break;
case E_ENTITY_TYPE_BLAZE: Monster = new cBlaze(); break;
case E_ENTITY_TYPE_CAVE_SPIDER: Monster = new cCavespider(); break;
case E_ENTITY_TYPE_CHICKEN: Monster = new cChicken(); break;
@@ -2214,6 +2217,7 @@ int cWorld::SpawnMob(double a_PosX, double a_PosY, double a_PosZ, int a_EntityTy
case E_ENTITY_TYPE_SPIDER: Monster = new cSpider(); break;
case E_ENTITY_TYPE_SQUID: Monster = new cSquid(); break;
case E_ENTITY_TYPE_VILLAGER: Monster = new cVillager(); break;
+ case E_ENTITY_TYPE_WITCH: Monster = new cWitch(); break;
case E_ENTITY_TYPE_WOLF: Monster = new cWolf(); break;
case E_ENTITY_TYPE_ZOMBIE: Monster = new cZombie(); break;
case E_ENTITY_TYPE_ZOMBIE_PIGMAN: Monster = new cZombiepigman(); break;