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