1 /*-------------------------------------------------------------------------------
2 
3 	BARONY
4 	File: monster_slime.cpp
5 	Desc: implements all of the slime monster's code
6 
7 	Copyright 2013-2016 (c) Turning Wheel LLC, all rights reserved.
8 	See LICENSE for details.
9 
10 -------------------------------------------------------------------------------*/
11 
12 #include "main.hpp"
13 #include "game.hpp"
14 #include "stat.hpp"
15 #include "entity.hpp"
16 #include "items.hpp"
17 #include "monster.hpp"
18 #include "sound.hpp"
19 #include "net.hpp"
20 #include "collision.hpp"
21 
initSlime(Entity * my,Stat * myStats)22 void initSlime(Entity* my, Stat* myStats)
23 {
24 	int c;
25 
26 	my->flags[UPDATENEEDED] = true;
27 	my->flags[INVISIBLE] = false;
28 
29 	if ( multiplayer != CLIENT )
30 	{
31 		if ( myStats->LVL == 7 )
32 		{
33 			my->sprite = 189;    // blue slime model
34 		}
35 		else
36 		{
37 			my->sprite = 210;    // green slime model
38 		}
39 		MONSTER_SPOTSND = 68;
40 		MONSTER_SPOTVAR = 1;
41 		MONSTER_IDLESND = -1;
42 		MONSTER_IDLEVAR = 1;
43 	}
44 	if ( multiplayer != CLIENT && !MONSTER_INIT )
45 	{
46 		if ( myStats != NULL )
47 		{
48 			if ( !myStats->leader_uid )
49 			{
50 				myStats->leader_uid = 0;
51 			}
52 
53 			// apply random stat increases if set in stat_shared.cpp or editor
54 			setRandomMonsterStats(myStats);
55 
56 			// generate 6 items max, less if there are any forced items from boss variants
57 			int customItemsToGenerate = ITEM_CUSTOM_SLOT_LIMIT;
58 
59 			// boss variants
60 
61 			// random effects
62 
63 			// generates equipment and weapons if available from editor
64 			createMonsterEquipment(myStats);
65 
66 			// create any custom inventory items from editor if available
67 			createCustomInventory(myStats, customItemsToGenerate);
68 
69 			// count if any custom inventory items from editor
70 			int customItems = countCustomItems(myStats); //max limit of 6 custom items per entity.
71 
72 														 // count any inventory items set to default in edtior
73 			int defaultItems = countDefaultItems(myStats);
74 
75 			my->setHardcoreStats(*myStats);
76 
77 			// generate the default inventory items for the monster, provided the editor sprite allowed enough default slots
78 			switch ( defaultItems )
79 			{
80 				case 6:
81 				case 5:
82 				case 4:
83 				case 3:
84 				case 2:
85 				case 1:
86 					break;
87 				default:
88 					break;
89 			}
90 		}
91 	}
92 }
93 
slimeAnimate(Entity * my,double dist)94 void slimeAnimate(Entity* my, double dist)
95 {
96 	if (my->skill[24])
97 	{
98 		my->scalez += .05 * dist;
99 		my->scalex -= .05 * dist;
100 		my->scaley -= .05 * dist;
101 		if ( my->scalez >= 1.25 )
102 		{
103 			my->scalez = 1.25;
104 			my->scalex = .75;
105 			my->scaley = .75;
106 			my->skill[24] = 0;
107 		}
108 	}
109 	else
110 	{
111 		my->scalez -= .05 * dist;
112 		my->scalex += .05 * dist;
113 		my->scaley += .05 * dist;
114 		if ( my->scalez <= .75 )
115 		{
116 			my->scalez = .75;
117 			my->scalex = 1.25;
118 			my->scaley = 1.25;
119 			my->skill[24] = 1;
120 		}
121 	}
122 }
123 
slimeDie(Entity * my)124 void slimeDie(Entity* my)
125 {
126 	Entity* entity;
127 	int c = 0;
128 	for ( c = 0; c < 5; c++ )
129 	{
130 		Entity* gib = spawnGib(my);
131 		serverSpawnGibForClient(gib);
132 	}
133 
134 	if ( my->sprite == 210 )
135 	{
136 		my->spawnBlood(212);
137 	}
138 	else
139 	{
140 		my->spawnBlood(214);
141 	}
142 
143 	playSoundEntity(my, 69, 64);
144 	list_RemoveNode(my->mynode);
145 	return;
146 }
147