1480
|
1 #include <assert.h>
|
|
2
|
|
3 #include "Decoration.h"
|
|
4 #include "../Party.h"
|
|
5 #include "../mm7_data.h" // for _449B57_test_bit
|
|
6
|
|
7 //----- (004583B0) --------------------------------------------------------
|
|
8 LevelDecoration::LevelDecoration()
|
|
9 {
|
1489
|
10 memset(this, 0, sizeof(this));
|
1480
|
11 }
|
|
12
|
|
13 //----- (00450929) --------------------------------------------------------
|
|
14 int LevelDecoration::GetGlobalEvent()
|
|
15 {
|
1489
|
16 //LevelDecoration *v1; // esi@1
|
|
17 //signed int v2; // eax@1
|
|
18 //int v3; // eax@5
|
|
19 //int v4; // eax@6
|
|
20 //int v5; // eax@7
|
|
21 //int v6; // eax@8
|
|
22 //int v7; // eax@9
|
|
23 //int result; // eax@14
|
|
24 //int v9; // eax@18
|
|
25 //int v10; // eax@19
|
|
26 //int v11; // eax@20
|
|
27 //int v12; // eax@21
|
|
28 //int v13; // eax@22
|
1480
|
29
|
|
30 switch (uDecorationDescID)
|
|
31 {
|
|
32 case 0: case 1:
|
|
33 case 2: case 3:
|
|
34 return 0;
|
|
35
|
|
36 case 4: return 16; // dec01 "Trash Pile"
|
|
37 case 5: return 32; // dec02 "Campfire"
|
|
38 case 6: return 12 + rand() % 4; // dec03 "Cauldron"
|
|
39 case 7: case 8:
|
|
40 case 9: case 10:
|
|
41 return 0;
|
|
42
|
|
43 case 11: return 34; // dec08 "Fruit plate"
|
|
44 case 12:
|
|
45 return 0;
|
|
46
|
|
47 case 13: return 17; // dec10 "Trash Pile"
|
|
48 case 14: return 18; // dec11 "Filth"
|
|
49 case 15: case 16: case 17:
|
|
50 case 18: case 19: case 20:
|
|
51 case 21: case 22: case 23:
|
|
52 return 0;
|
|
53
|
|
54 case 24: return 36; // dec21 "Keg"
|
|
55 case 25: case 26: case 27: case 28: case 29:
|
|
56 case 30: case 31: case 32: case 33:
|
|
57 return 0;
|
|
58
|
|
59 case 34: return 4 + rand() % 6; // dec32 "Barrel"
|
|
60 case 35: case 36: case 37: case 38: case 39:
|
|
61 case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49:
|
|
62 case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: case 58: case 59:
|
|
63 case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 68: case 69:
|
|
64 case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79:
|
|
65 case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: case 88: case 89:
|
|
66 case 90: case 91: case 92: case 93: case 94: case 95: case 96: case 97: case 98: case 99:
|
|
67 case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109:
|
|
68 case 110: case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119:
|
|
69 case 120: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129:
|
|
70 case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139:
|
|
71 case 140: case 141: case 142: case 143: case 144: case 145: case 146: case 147: case 148: case 149:
|
|
72 case 150: case 151: case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159:
|
|
73 case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: case 168: case 169:
|
|
74 case 170: case 171: case 172: case 173: case 174: case 175: case 176: case 177: case 178: case 179:
|
|
75 case 180: case 181: case 182: case 183:
|
|
76
|
|
77 case 184: return 33; // dec24 "Campfire"
|
|
78 case 185: case 186:
|
|
79 return 0;
|
|
80
|
|
81 case 187: // dec88 "Mushroom"
|
|
82 case 190: // dec91 "Mushroom"
|
|
83 return 37;
|
|
84
|
|
85 case 188: case 189:
|
|
86 case 191: case 192: case 193: case 194: case 195: case 196:
|
|
87 case 197: case 198: case 199: case 200: case 201: case 202:
|
|
88 case 203: case 204: case 205:
|
|
89 return 0;
|
|
90
|
|
91 case 206: return 162 + rand() % 7; // dec60
|
|
92 case 207: return 169 + rand() % 7; // dec61
|
|
93 case 208: return 176 + rand() % 7; // dec62
|
|
94 case 209: return 183 + rand() % 7; // dec63
|
|
95 case 210: return 150; // dec64 "Magic Pedistal"
|
|
96 case 211: return 151; // dec65 "Magic Pedistal"
|
|
97 case 212: return 152; // dec66 "Magic Pedistal"
|
|
98 case 213: return 153; // dec67 "Magic Pedistal"
|
|
99 case 214: return 154; // dec68 "Magic Pedistal"
|
|
100 case 215: return 155; // dec69 "Magic Pedistal"
|
|
101 case 216: return 156; // dec70 "Magic Pedistal"
|
|
102 case 217: return 157; // dec71 "Magic Pedistal"
|
|
103 case 218: return 158; // dec72 "Magic Pedistal"
|
|
104 case 219: return 159; // dec73 "Magic Pedistal"
|
|
105 case 220: return 160; // dec74 "Magic Pedistal"
|
|
106 case 221: return 161; // dec75 "Magic Pedistal"
|
|
107
|
|
108 case 222: case 223: case 224:
|
|
109 case 225: case 226: case 227:
|
|
110 return 0;
|
|
111
|
|
112 default: assert(false && "Invalid Decoration");
|
|
113 }
|
|
114 }
|
|
115
|
|
116 //----- (0047A825) --------------------------------------------------------
|
|
117 bool LevelDecoration::_47A825()
|
|
118 {
|
|
119 //bool v1; // ebx@1
|
|
120 //LevelDecoration *v2; // edi@1
|
|
121
|
|
122 if (pParty->uCurrentHour == 0
|
|
123 && !_449B57_test_bit(pParty->_quest_bits, 178)
|
|
124 && _449B57_test_bit(pParty->_quest_bits, 164)
|
|
125 && _449B57_test_bit(pParty->_quest_bits, 165)
|
|
126 && _449B57_test_bit(pParty->_quest_bits, 166)
|
|
127 && _449B57_test_bit(pParty->_quest_bits, 167)
|
|
128 && _449B57_test_bit(pParty->_quest_bits, 168)
|
|
129 && _449B57_test_bit(pParty->_quest_bits, 169)
|
|
130 && _449B57_test_bit(pParty->_quest_bits, 170)
|
|
131 && _449B57_test_bit(pParty->_quest_bits, 171)
|
|
132 && _449B57_test_bit(pParty->_quest_bits, 172)
|
|
133 && _449B57_test_bit(pParty->_quest_bits, 173)
|
|
134 && _449B57_test_bit(pParty->_quest_bits, 174)
|
|
135 && _449B57_test_bit(pParty->_quest_bits, 175)
|
|
136 && _449B57_test_bit(pParty->_quest_bits, 176)
|
|
137 && _449B57_test_bit(pParty->_quest_bits, 177))
|
|
138 {
|
1489
|
139 this->uFlags &= ~LEVEL_DECORATION_INVISIBLE;
|
1480
|
140 return true;
|
|
141 }
|
|
142
|
1489
|
143 this->uFlags |= LEVEL_DECORATION_INVISIBLE;
|
1480
|
144 return false;
|
|
145 }
|
|
146
|
|
147 //----- (0044C2F4) --------------------------------------------------------
|
|
148 bool LevelDecoration::IsInteractive()
|
|
149 {
|
|
150 switch (uDecorationDescID)
|
|
151 {
|
|
152 case 4: // trash pile
|
|
153 case 5: // campfire
|
|
154 case 6: // cauldron
|
|
155 case 11: // fruit plate
|
|
156 case 13: // trash pile
|
|
157 case 14: // dirt
|
|
158 case 24: // keg
|
|
159 case 184: // fire
|
|
160 case 187: // fire
|
|
161 case 190: // fire
|
|
162 return true;
|
|
163 }
|
|
164
|
|
165 if (uDecorationDescID >= 206 && uDecorationDescID <= 209) // lighthouse fire
|
|
166 return true;
|
|
167 if (uDecorationDescID >= 210 && uDecorationDescID <= 221) // magic pedistal
|
|
168 return true;
|
|
169
|
|
170 return false;
|
|
171 }
|