1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-11-06 08:56:27 +02:00

Hunger Module with respawning Fish

This commit is contained in:
MewMew
2018-12-06 23:11:16 +01:00
parent 15b7ae4c36
commit 613201b059
4 changed files with 78 additions and 10 deletions

View File

@@ -10,13 +10,14 @@ require "poll"
require "score" require "score"
require "maps.tools.cheat_mode" require "maps.tools.cheat_mode"
require "maps.tools.hunger"
---- enable maps here ---- ---- enable maps here ----
--require "maps.biter_battles" --require "maps.biter_battles"
--require "maps.cave_miner" --require "maps.cave_miner"
--require "maps.deep_jungle" --require "maps.deep_jungle"
--require "maps.lost_desert" --require "maps.lost_desert"
require "maps.labyrinth" --require "maps.labyrinth"
--require "maps.spaghettorio" --require "maps.spaghettorio"
--require "maps.spiral_troopers" --require "maps.spiral_troopers"
--require "maps.fish_defender" --require "maps.fish_defender"

View File

@@ -10,6 +10,17 @@ local unique_rooms = require "maps.labyrinth_unique_rooms"
local labyrinth_difficulty_curve = 400 --- How much size the labyrinth needs to have the highest difficulty. local labyrinth_difficulty_curve = 400 --- How much size the labyrinth needs to have the highest difficulty.
local threat_values = {
["small-biter"] = 1,
["medium-biter"] = 3,
["big-biter"] = 5,
["behemoth-biter"] = 10,
["small-spitter"] = 1,
["medium-spitter"] = 3,
["big-spitter"] = 5,
["behemoth-spitter"] = 10
}
local function create_labyrinth_difficulty_gui(player) local function create_labyrinth_difficulty_gui(player)
if player.gui.top["labyrinth_difficulty"] then player.gui.top["labyrinth_difficulty"].destroy() end if player.gui.top["labyrinth_difficulty"] then player.gui.top["labyrinth_difficulty"].destroy() end
if not global.labyrinth_size then return end if not global.labyrinth_size then return end
@@ -101,7 +112,7 @@ worm_raffle[7] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turre
worm_raffle[8] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "big-worm-turret", "big-worm-turret"} worm_raffle[8] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "big-worm-turret", "big-worm-turret"}
worm_raffle[9] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "big-worm-turret", "big-worm-turret", "big-worm-turret"} worm_raffle[9] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "big-worm-turret", "big-worm-turret", "big-worm-turret"}
worm_raffle[10] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "big-worm-turret", "big-worm-turret", "big-worm-turret"} worm_raffle[10] = {"medium-worm-turret", "medium-worm-turret", "medium-worm-turret", "big-worm-turret", "big-worm-turret", "big-worm-turret"}
local rock_weights = {{"sand-rock-big", 8}, {"rock-big", 32}, {"rock-huge", 1}} local rock_weights = {{"sand-rock-big", 9}, {"rock-big", 32}, {"rock-huge", 1}}
local rock_raffle = {} local rock_raffle = {}
for _, t in pairs (rock_weights) do for _, t in pairs (rock_weights) do
for x = 1, t[2], 1 do for x = 1, t[2], 1 do
@@ -438,17 +449,27 @@ local function grow_cell(chunk_position, surface)
if surface.can_place_entity({name = n, position = p}) then surface.create_entity {name = n, position = p} end if surface.can_place_entity({name = n, position = p}) then surface.create_entity {name = n, position = p} end
end end
local threat_amount = global.labyrinth_size * 4
for _, p in pairs(entities_to_place.biters) do for _, p in pairs(entities_to_place.biters) do
local evolution = math.ceil(game.forces.enemy.evolution_factor * 10, 0) local evolution = math.ceil(game.forces.enemy.evolution_factor * 10, 0)
local raffle = biter_raffle[evolution] local raffle = biter_raffle[evolution]
local n = raffle[math.random(1,#raffle)] local n = raffle[math.random(1,#raffle)]
if threat_values[n] then
threat_amount = threat_amount - threat_values[n]
if threat_amount < 0 then break end
end
if surface.can_place_entity({name = n, position = p}) then surface.create_entity {name = n, position = p} end if surface.can_place_entity({name = n, position = p}) then surface.create_entity {name = n, position = p} end
end end
for _, p in pairs(entities_to_place.spitters) do for _, p in pairs(entities_to_place.spitters) do
local evolution = math.ceil(game.forces.enemy.evolution_factor * 10, 0) local evolution = math.ceil(game.forces.enemy.evolution_factor * 10, 0)
local raffle = spitter_raffle[evolution] local raffle = spitter_raffle[evolution]
local n = raffle[math.random(1,#raffle)] local n = raffle[math.random(1,#raffle)]
if threat_values[n] then
threat_amount = threat_amount - threat_values[n]
if threat_amount < 0 then break end
end
if surface.can_place_entity({name = n, position = p}) then surface.create_entity {name = n, position = p} end if surface.can_place_entity({name = n, position = p}) then surface.create_entity {name = n, position = p} end
end end
@@ -731,7 +752,7 @@ local function on_entity_died(event)
local amount_modifier = math.ceil(1 + game.forces.enemy.evolution_factor * 5) local amount_modifier = math.ceil(1 + game.forces.enemy.evolution_factor * 5)
if n == "crude-oil" then if n == "crude-oil" then
map_functions.draw_oil_circle(pos, n, surface, 10, 100000 * amount_modifier) map_functions.draw_oil_circle(pos, n, surface, 6, 100000 * amount_modifier)
else else
map_functions.draw_smoothed_out_ore_circle(pos, n, surface, 9 + amount_modifier, 200 * amount_modifier) map_functions.draw_smoothed_out_ore_circle(pos, n, surface, 9 + amount_modifier, 200 * amount_modifier)
end end

View File

@@ -1,4 +1,5 @@
0.03 0.03
biters will spawn weighted
drops from enemies will stop more soon drops from enemies will stop more soon
infinity chests have been nerfed infinity chests have been nerfed
more ore patches more ore patches

View File

@@ -1,5 +1,9 @@
-- hunger module by mewmew -- -- hunger module by mewmew --
local event = require 'utils.event'
local math_random = math.random
local respawn_fish = true
local player_hunger_fish_food_value = 10 local player_hunger_fish_food_value = 10
local player_hunger_spawn_value = 80 local player_hunger_spawn_value = 80
local player_hunger_stages = {} local player_hunger_stages = {}
@@ -52,8 +56,7 @@ local function create_hunger_gui(player)
caption_hunger.style.top_padding = 2 caption_hunger.style.top_padding = 2
end end
local function hunger_update(player, food_value) local function hunger_update(player, food_value)
if food_value == -1 and player.character.driving == true then return end if food_value == -1 and player.character.driving == true then return end
local past_hunger = global.player_hunger[player.name] local past_hunger = global.player_hunger[player.name]
@@ -62,13 +65,14 @@ local function hunger_update(player, food_value)
if past_hunger == 200 and global.player_hunger[player.name] + food_value > 200 then if past_hunger == 200 and global.player_hunger[player.name] + food_value > 200 then
global.player_hunger[player.name] = player_hunger_spawn_value global.player_hunger[player.name] = player_hunger_spawn_value
player.surface.create_entity({name = "big-artillery-explosion", position = player.character.position})
player.character.die("player") player.character.die("player")
local t = {" ate too much and exploded.", " should have gone on a diet.", " needs to work on their bad eating habbits.", " should have skipped dinner today."} local t = {" ate too much and exploded.", " needs to work on their bad eating habbits.", " should have skipped dinner today."}
game.print(player.name .. t[math.random(1,#t)], { r=0.75, g=0.0, b=0.0}) game.print(player.name .. t[math.random(1,#t)], { r=0.75, g=0.0, b=0.0})
end end
if global.player_hunger[player.name] < 1 then if global.player_hunger[player.name] < 1 then
global.player_hunger[player.name] = player_hunger_spawn_value global.player_hunger[player.name] = player_hunger_spawn_value
player.character.die("player") player.character.die("player")
local t = {" ran out of foodstamps.", " starved.", " should not have skipped breakfast today."} local t = {" ran out of foodstamps.", " starved.", " should not have skipped breakfast today."}
game.print(player.name .. t[math.random(1,#t)], { r=0.75, g=0.0, b=0.0}) game.print(player.name .. t[math.random(1,#t)], { r=0.75, g=0.0, b=0.0})
@@ -89,6 +93,24 @@ local function hunger_update(player, food_value)
player.character.character_running_speed_modifier = player_hunger_buff[global.player_hunger[player.name]] * 0.5 player.character.character_running_speed_modifier = player_hunger_buff[global.player_hunger[player.name]] * 0.5
player.character.character_mining_speed_modifier = player_hunger_buff[global.player_hunger[player.name]] player.character.character_mining_speed_modifier = player_hunger_buff[global.player_hunger[player.name]]
create_hunger_gui(player)
end
local function respawn_fishes()
for _, surface in pairs(game.surfaces) do
local water_tiles = surface.find_tiles_filtered({name = {"water", "deepwater", "water-green"}})
for _, tile in pairs(water_tiles) do
local area_entities = {{tile.position.x - 2, tile.position.y - 2},{tile.position.x + 2, tile.position.y + 2}}
local area_tiles = {{tile.position.x - 1, tile.position.y - 1},{tile.position.x + 1, tile.position.y + 1}}
if surface.count_entities_filtered({area = area_entities, name = "fish"}) == 0 and surface.count_tiles_filtered({area = area_tiles, name = {"water", "deepwater", "water-green"}}) > 3 then
if math_random(1, 32) == 1 then
surface.create_entity({name = "fish", position = tile.position})
end
end
end
end
end end
local function on_player_joined_game(event) local function on_player_joined_game(event)
@@ -99,4 +121,27 @@ local function on_player_joined_game(event)
hunger_update(player, 0) hunger_update(player, 0)
end end
create_hunger_gui(player) create_hunger_gui(player)
end end
local function on_player_used_capsule(event)
if event.item.name == "raw-fish" then
local player = game.players[event.player_index]
hunger_update(player, player_hunger_fish_food_value)
player.play_sound{path="utility/armor_insert", volume_modifier=0.75}
end
end
local function on_tick(event)
if game.tick % 5400 == 2700 then
for _, player in pairs(game.connected_players) do
if player.afk_time < 18000 then hunger_update(player, -1) end
end
if respawn_fish then
respawn_fishes()
end
end
end
event.add(defines.events.on_tick, on_tick)
event.add(defines.events.on_player_used_capsule, on_player_used_capsule)
event.add(defines.events.on_player_joined_game, on_player_joined_game)