1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-03-17 20:58:13 +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 "maps.tools.cheat_mode"
require "maps.tools.hunger"
---- enable maps here ----
--require "maps.biter_battles"
--require "maps.cave_miner"
--require "maps.deep_jungle"
--require "maps.lost_desert"
require "maps.labyrinth"
--require "maps.labyrinth"
--require "maps.spaghettorio"
--require "maps.spiral_troopers"
--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 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)
if player.gui.top["labyrinth_difficulty"] then player.gui.top["labyrinth_difficulty"].destroy() 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[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"}
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 = {}
for _, t in pairs (rock_weights) 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
end
local threat_amount = global.labyrinth_size * 4
for _, p in pairs(entities_to_place.biters) do
local evolution = math.ceil(game.forces.enemy.evolution_factor * 10, 0)
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
end
for _, p in pairs(entities_to_place.spitters) do
local evolution = math.ceil(game.forces.enemy.evolution_factor * 10, 0)
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
end
@ -731,7 +752,7 @@ local function on_entity_died(event)
local amount_modifier = math.ceil(1 + game.forces.enemy.evolution_factor * 5)
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
map_functions.draw_smoothed_out_ore_circle(pos, n, surface, 9 + amount_modifier, 200 * amount_modifier)
end

View File

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

View File

@ -1,5 +1,9 @@
-- 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_spawn_value = 80
local player_hunger_stages = {}
@ -52,8 +56,7 @@ local function create_hunger_gui(player)
caption_hunger.style.top_padding = 2
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
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
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")
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})
end
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")
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})
@ -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_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
local function on_player_joined_game(event)
@ -99,4 +121,27 @@ local function on_player_joined_game(event)
hunger_update(player, 0)
end
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)