// Barrels // Author: Wushin 042-2.gat,33,88,24,7|monster|HouseMaggot|1050,2,100000ms,30000ms,Barrel#0::OnMaggotDeath -|script|#BarrelConfig|-1 { end; OnInit: setarray $@BarrelBits, (1 << 20), (1 << 21), (1 << 22), (1 << 23), (1 << 24), (1 << 25), (1 << 26), (1 << 27); setarray $@BarrelRewards, 533, 507, 505, 518, 537, 526; set $@BarrelSpawnCnt, 1; set $@BarrelSpawnId, 1050; set $@BarrelSpawnName$, "House Maggot"; set $@BarrelMax, getarraysize($@BarrelBits); end; } function|script|SetBarrelMask { set STARTAREA, (STARTAREA & ~(NIBBLE_4_MASK) | (@barrel_tmp << NIBBLE_4_SHIFT)); set @barrel_tmp, 0; return; } function|script|CheckBarrelQuest { callfunc "CountBarrels"; set @barrel_quest, ((STARTAREA & NIBBLE_4_MASK) >> NIBBLE_4_SHIFT); return; } function|script|CountBarrels { set @barrel_count, 0; set @count_tmp, 0; goto L_Loop; L_Loop: if (STARTAREA & $@BarrelBits[@barrel_tmp]) goto L_AddOne; goto L_LoopAgain; L_AddOne: set @barrel_count, (@barrel_count + 1); goto L_LoopAgain; L_LoopAgain: set @count_tmp, (@count_tmp + 1); if (@count_tmp == getarraysize($@BarrelBits)) goto L_BarrelTally; goto L_Loop; L_BarrelTally: return; } function|script|CheckBarrel { callfunc "PCtoNPCRange"; if (@npc_check) goto L_Range; callfunc "CheckBarrelQuest"; if (!(@barrel_quest == 2)) goto L_NoI; if (STARTAREA & $@BarrelBits[@barrel]) goto L_Empty; set STARTAREA, STARTAREA | $@BarrelBits[@barrel]; callfunc "CountBarrels"; if (@barrel_count == $@BarrelMax) goto L_QuestReward; set @player_random, rand(@barrel_count * 10); set @barrel_random, rand(@barrel_count * $@BarrelMax); if (@barrel_random > @player_random) goto L_Spawn; goto L_Reward; L_Range: message strcharinfo(0), "You'll need to get closer."; goto L_Return; L_NoI: message strcharinfo(0), "Nothing interesting here."; goto L_Return; L_Empty: message strcharinfo(0), "You've already searched this barrel."; goto L_Return; L_QuestReward: message strcharinfo(0), "You found the bug bomb."; misceffect 33; set @barrel_tmp, 3; callfunc "SetBarrelMask"; killmonster getmap() + ".gat", "Barrel#0::OnMaggotDeath"; goto L_Return; L_Spawn: areamonster getmap() + ".gat", @npc_loc[0], @npc_loc[1], (@npc_loc[0] + 1), (@npc_loc[1] + 1), $@BarrelSpawnName$, $@BarrelSpawnId, $@BarrelSpawnCnt, "Barrel#0::OnMaggotDeath"; goto L_Return; L_Reward: getitem $@BarrelRewards[rand(getarraysize($@BarrelRewards))], 1; goto L_Return; L_Return: return; }