Skip to content

Commit 58c0ad3

Browse files
Merge branch 'Hide-Ability' into develop
2 parents 9f3fd90 + e24b85c commit 58c0ad3

24 files changed

+325
-193
lines changed

code/location/tile/building/barricade.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ function Barricade:didZombiesIntervene(player) -- make brute zombie count as x2
160160
local nullfied_zombies = math.floor(human_n/num_humans_to_nullify_zombie)
161161
local blockade_n = zombie_n - 1 - nullfied_zombies -- the -1 is to prevent single zombies from blocking an entrance by themselves
162162

163-
local integrity_state = p_tile:getIntegrityState()
163+
local integrity_state = p_tile:getIntegrity()
164164
if integrity_state == 'ransacked' then blockade_n = blockade_n + ransack_blockade_bonus end
165165

166166
if blockade_n <= 0 then return false end -- not high enough chance at blocking to do a roll

code/location/tile/building/machine/generator.lua

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,23 @@ function Generator:isActive() return self.fuel > 0 end
1919

2020
function Generator:hasOperations() return false end
2121

22+
function Generator:activate()
23+
local hidden_players = self:getPlayers(setting, 'hide')
24+
if hidden_players then for player in pairs(hidden_players) do player.status_effect:remove('hide') end end
25+
26+
--------------------------------------------
27+
----------- M E S S A G E --------------
28+
--------------------------------------------
29+
30+
local msg = 'The power to the {building} turns on.'
31+
msg = msg:replace(self.building)
32+
33+
--------------------------------------------
34+
--------- B R O A D C A S T ------------
35+
--------------------------------------------
36+
37+
local event = {'generator', hidden_players} -- maybe change event[1] to 'lightup', 'illumiinate', etc.?
38+
tile:broadcastEvent(msg, event, settings)
39+
end
40+
2241
return Generator

code/location/tile/tile.lua

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function Tile:countPlayers(mob_type, setting)
5050

5151
local count = 0
5252
for player in pairs(players) do
53-
if (mob_type == 'all' or player:isMobType(mob_type) ) and player:isStanding() then
53+
if (mob_type == 'all' or player:isMobType(mob_type) ) and player:isStanding() and not player.status_effect:isActive('hide') then
5454
count = count + 1
5555
end
5656
end
@@ -75,13 +75,13 @@ function Tile:getMap() return self.map_zone end
7575

7676
function Tile:getPos() return self.y, self.x end
7777

78-
function Tile:getIntegrityState()
78+
function Tile:getIntegrity()
7979
if self:isBuilding() then return self.integrity:getState()
8080
else return 'intact'
8181
end
8282
end
8383

84-
function Tile:getPlayers(setting)
84+
function Tile:getPlayers(setting, filter)
8585
local players
8686
if setting == 'inside' then
8787
players = self.inside_players
@@ -90,11 +90,24 @@ function Tile:getPlayers(setting)
9090
elseif not setting then -- get all players
9191
players = {}
9292
if self.inside_players then
93-
for k,v in pairs(self.inside_players) do players[k] = v end
93+
for player in pairs(self.inside_players) do players[player] = true end
9494
end
95-
for k,v in pairs(self.outside_players) do players[k] = v end
95+
for player in pairs(self.outside_players) do players[player] = true end
96+
end
97+
98+
if filter then
99+
for player in pairs(players) do
100+
if not player.status_effect:isActive(filter) then players[player] = nil end
101+
end
102+
end
103+
104+
return next(players) and players or nil
105+
end
106+
107+
function Tile:isIntegrity(setting)
108+
if self:isBuilding() then return self.integrity:getState() == setting
109+
else return 'intact' == setting
96110
end
97-
return players
98111
end
99112

100113
function Tile:isBuilding() return self.inside_players and true or false end
@@ -134,18 +147,24 @@ local function select_item(list)
134147
end
135148

136149
function Tile:search(player, setting, was_flashlight_used)
137-
local integrity_state = self:getIntegrityState()
150+
local integrity_state = self:getIntegrity()
138151

139152
local odds = self:getSearchOdds(player, setting, integrity_state, was_flashlight_used)
140153
local search_success = odds >= math.random()
141154

142155
if not search_success then return false end
143156

144-
local tile_item_list = self.item_chance[setting]
145-
local selected_item_type = select_item(tile_item_list)
146-
147-
local item = Items[selected_item_type]:new(integrity_state)
148-
return item
157+
local hidden_players = self:getPlayers(setting, 'hide')
158+
159+
if hidden_players then
160+
return next(hidden_players) -- probably should shuffle and randomly select player instead of using next()
161+
else
162+
local tile_item_list = self.item_chance[setting]
163+
local selected_item_type = select_item(tile_item_list)
164+
165+
local item = Items[selected_item_type]:new(integrity_state)
166+
return item
167+
end
149168
end
150169

151170
function Tile:__tostring() return self.name..' '..self.class.name end

code/player/human/action/advanced.lua

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,62 @@ function search.activate(player)
1212
local player_has_flashlight, inv_ID = player.inventory:search('flashlight')
1313
local player_inside_unpowered_building = not p_tile:isPowered() and player:isStaged('inside')
1414

15-
local item = p_tile:search(player, player:getStage(), player_has_flashlight)
16-
15+
local discovery = p_tile:search(player, player:getStage(), player_has_flashlight)
16+
1717
if player_has_flashlight and player_inside_unpowered_building then -- flashlight is only used when building has no power
1818
flashlight_was_used = true
1919
local flashlight = player.inventory:lookup(inv_ID)
2020
if flashlight:failDurabilityCheck(player) then flashlight:updateCondition(-1, player, inv_ID) end
2121
end
22-
22+
23+
local item, hidden_player
24+
25+
if discovery and discovery.class.name == 'Item' then item = discovery
26+
elseif discovery then hidden_player = discovery
27+
end
28+
2329
if item then player.inventory:insert(item) end
24-
30+
if hidden_player then hidden_player.status_effect:remove('hide') end
31+
2532
--------------------------------------------
2633
----------- M E S S A G E --------------
2734
--------------------------------------------
2835

29-
local msg = 'You search {with_flashlight} and find {item}.'
36+
local self_msg = 'You search {with_flashlight} and find {discovery}.'
3037
local names = {
3138
with_flashlight = flashlight_was_used and 'with a flashlight' or '',
32-
item = item and 'a '..tostring(item) or 'nothing',
39+
discovery = discovery and 'a '..tostring(discovery) or 'nothing',
40+
player = player,
41+
hidden_player = hidden_player,
3342
}
34-
msg = msg:replace(names)
43+
self_msg = self_msg:replace(names)
3544

45+
local public_msg, hidden_player_msg
46+
47+
if hidden_player then
48+
public_msg = '{player} searches and finds {hidden_player}.'
49+
hidden_player_msg = 'You are discovered by {player}!'
50+
public_msg = public_msg:replace(names)
51+
hidden_player_msg = hidden_player_msg:replace(names)
52+
end
3653
--------------------------------------------
3754
--------- B R O A D C A S T ------------
3855
--------------------------------------------
3956

40-
local event = {'search', player, item, flashlight_was_used}
41-
player.log:insert(msg, event)
57+
local event = {'search', player, discovery, flashlight_was_used}
58+
59+
if hidden_player then
60+
local settings = {stage=player:getStage(), exclude={}}
61+
settings.exclude[player], settings.exclude[hidden_player] = true, true
62+
63+
player.log:insert(self_msg, event)
64+
hidden_player.log:insert(hidden_player_msg, event)
65+
66+
local tile = player:getTile()
67+
tile:broadcastEvent(public_msg, event, settings)
68+
else
69+
player.log:insert(self_msg, event)
70+
end
4271
end
4372

4473
-------------------------------------------------------------------

code/player/human/skill_list.lua

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,61 +3,61 @@ local fillSkillList = require('code.player.fillSkillList')
33
local skill_list = {
44
flag = {
55
-- Classes
6-
military = 1,
7-
research = 2,
8-
engineering = 4,
6+
military = 2^0,
7+
research = 2^1,
8+
engineering = 2^2,
99

1010
-- General
11-
hp_bonus = 1, -- hp_bonus MUST remain flag 1 b/c it's used for both zombies & humans on the bitflag 1 slot
12-
cutting = 2,
13-
swinging = 4,
14-
martial_arts = 8,
15-
martial_arts_adv = 16,
16-
ranged = 32,
17-
roof_travel = 64,
18-
melee = 128,
19-
ip_bonus = 256,
20-
looting = 512,
21-
diagnosis = 1024,
22-
graffiti = 2048,
11+
hp_bonus = 2^0, -- hp_bonus MUST remain flag 1 b/c it's used for both zombies & humans on the bitflag 1 slot
12+
cutting = 2^1,
13+
swinging = 2^2,
14+
martial_arts = 2^3,
15+
martial_arts_adv = 2^4,
16+
ranged = 2^5,
17+
roof_travel = 2^6,
18+
melee = 2^7,
19+
ip_bonus = 2^8,
20+
looting = 2^9,
21+
diagnosis = 2^10,
22+
graffiti = 2^11,
2323

2424
-- Military
25-
ranged_adv = 1,
26-
guns = 2,
27-
light_guns = 4,
28-
heavy_guns = 8,
29-
archery = 16,
30-
archery_adv = 32,
31-
melee_adv = 64,
32-
smacking = 128,
33-
chopping = 256,
34-
slicing = 512,
35-
smashing = 1024,
36-
explosives = 2048,
25+
ranged_adv = 2^0,
26+
guns = 2^1,
27+
light_guns = 2^2,
28+
heavy_guns = 2^3,
29+
archery = 2^4,
30+
archery_adv = 2^5,
31+
melee_adv = 2^6,
32+
smacking = 2^7,
33+
chopping = 2^8,
34+
slicing = 2^9,
35+
smashing = 2^10,
36+
explosives = 2^11,
3737

3838
-- Research
39-
healing = 1,
40-
major_healing = 2,
41-
minor_healing = 4,
42-
diagnosis_adv = 8,
43-
gadgets = 16,
44-
scanner = 32,
45-
syringe = 64,
46-
syringe_adv = 128,
47-
terminal = 256,
48-
terminal_adv = 512,
39+
healing = 2^0,
40+
major_healing = 2^1,
41+
minor_healing = 2^2,
42+
diagnosis_adv = 2^3,
43+
gadgets = 2^4,
44+
scanner = 2^5,
45+
syringe = 2^6,
46+
syringe_adv = 2^7,
47+
terminal = 2^8,
48+
terminal_adv = 2^9,
4949

5050
-- Engineering
51-
repair = 1,
52-
repair_adv = 2,
53-
barricade = 4,
54-
barricade_adv = 8,
55-
reinforce = 16,
56-
renovate = 32,
57-
tech = 64,
58-
power_tech = 128,
59-
radio_tech = 256,
60-
computer_tech = 512,
51+
repair = 2^0,
52+
repair_adv = 2^1,
53+
barricade = 2^2,
54+
barricade_adv = 2^3,
55+
reinforce = 2^4,
56+
renovate = 2^5,
57+
tech = 2^6,
58+
power_tech = 2^7,
59+
radio_tech = 2^8,
60+
computer_tech = 2^9,
6161
},
6262
order = {
6363
category = {'classes', 'general', 'military', 'research', 'engineering'},

code/player/skills.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ end
5757
function Skills:buy(player, skill)
5858
local xp = player:getStat('xp')
5959

60-
local class = self.list.isClass(skill)
60+
local class = self.list:isClass(skill)
6161
local cost = (class and self:getCost('classes') ) or self:getCost('skills')
62-
local required_flags = self.list.getRequiredFlags(skill)
62+
local required_flags = self.list:getRequiredFlags(skill)
6363
print('[skills:buy]', 'player.xp='..xp, 'skill['..skill..'] cost='..cost)
6464
--print('required_flags = ', required_flags)
6565

@@ -83,7 +83,7 @@ function Skills:checkFlag(category, flag) return
8383
function Skills:check(skill) return self:checkFlag(self.list:getCategory(skill), self.list.flag[skill]) end
8484

8585
function Skills:add(skill)
86-
local category = self.list.getCategory(skill)
86+
local category = self.list:getCategory(skill)
8787
self.flags[category] = bor(self.flags[category], self.list.flag[skill])
8888
end
8989

code/player/status_effect/status_effect.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function StatusEffect:elapse(ap)
2525
local mob_type = self.player:getMobType()
2626
for _, Effect in ipairs(StatusEffect[mob_type]) do
2727
local effect = string.lower(Effect.name) -- lowercase the class name
28-
if self[effect] then self[effect]:elapse(player, ap) end
28+
if self[effect] and self[effect].elapse then self[effect]:elapse(player, ap) end
2929
end
3030
end
3131

code/player/zombie/ability/abilities.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
local drag_prey, groan, gesture, armor, ransack, mark_prey, track, acid = unpack(require('code.player.zombie.ability.generic'))
1+
local drag_prey, groan, gesture, armor, ransack, mark_prey, track, hide, acid = unpack(require('code.player.zombie.ability.generic'))
22

33
local abilities = {
44
-- GENERAL
@@ -8,7 +8,7 @@ local abilities = {
88
-- HIVE
99
acid, ransack,
1010
-- HUNTER
11-
track, mark_prey,
11+
track, mark_prey, hide,
1212
}
1313

1414
for _, ability in ipairs(abilities) do

0 commit comments

Comments
 (0)