diff --git a/ai/actions/fisher/go_fish_action.lua b/ai/actions/fisher/go_fish_action.lua index d4edcb2..ca88d95 100644 --- a/ai/actions/fisher/go_fish_action.lua +++ b/ai/actions/fisher/go_fish_action.lua @@ -1,7 +1,6 @@ ---I do not give consent to copy this local GoFish = class() -GoFish.name = 'go to a dock to fish' +GoFish.name = 'go to a fishing_spot to fish' GoFish.does = 'archipelago_biome:go_fish' GoFish.status_text_key = 'archipelago_biome:ai.actions.status_text.fishing' GoFish.args = { } @@ -21,6 +20,7 @@ function find_a_fishing_spot(ai_entity) end local function rate_fishing_spot(entity) + --take entity type (zone, boat or dock) and distance into consideration local rng = _radiant.math.get_default_rng() return rng:get_real(0, 1) end @@ -42,7 +42,7 @@ return ai:create_compound_action(GoFish) :execute('stonehearth:find_best_reachable_entity_by_type', { filter_fn = ai.CALL(find_a_fishing_spot, ai.ENTITY), rating_fn = rate_fishing_spot, - description = 'find a dock' + description = 'find a fishing_spot' }) :execute('stonehearth:goto_entity', { entity = ai.PREV.item diff --git a/ai/actions/fisher/turn_to_face_water_action.lua b/ai/actions/fisher/turn_to_face_water_action.lua index 9b2919e..84ffd12 100644 --- a/ai/actions/fisher/turn_to_face_water_action.lua +++ b/ai/actions/fisher/turn_to_face_water_action.lua @@ -1,17 +1,30 @@ local Entity = _radiant.om.Entity local TurnToFaceWater = class() +local rng = _radiant.math.get_default_rng() TurnToFaceWater.name = 'correct rotation facing the water' TurnToFaceWater.does = 'archipelago_biome:turn_to_face_water' TurnToFaceWater.args = { -dock = Entity + dock = Entity } TurnToFaceWater.version = 2 TurnToFaceWater.priority = 1 function TurnToFaceWater:run(ai, entity, args) - local face = radiant.entities.get_facing(args.dock) - radiant.entities.turn_to(entity, face) + if radiant.entities.get_posture(entity) == "stonehearth:in_boat" then + radiant.entities.turn_to(entity, rng:get_int(0,360)) + else + local face = 0 + local fisher_field_component = args.dock:get_component("archipelago_biome:fisher_field") + if fisher_field_component then + local water_location = fisher_field_component:get_water_direction(radiant.entities.get_world_grid_location(entity)) + entity:get_component('mob'):turn_to_face_point(water_location) + face = radiant.entities.get_facing(entity) + else + face = radiant.entities.get_facing(args.dock) + end + radiant.entities.turn_to(entity, face+rng:get_int(-35,35)) + end end return TurnToFaceWater \ No newline at end of file diff --git a/archipelago_biome_server.lua b/archipelago_biome_server.lua index 14fe5e6..b3b9ac2 100644 --- a/archipelago_biome_server.lua +++ b/archipelago_biome_server.lua @@ -1,13 +1,13 @@ archipelago_biome = {} -print("Archipelago Biome Mod version 22.6.13") +print("Archipelago Biome Mod version 22.7.4") --[[ +fisher village + spawn whale, maybe from turtle rig. or as a fancy and decorated landmark wave effect for storm weather -fish anywhere near water, docks will be just a prefered place - rework pirate hat Bugs: diff --git a/call_handlers/fishing_call_handler.lua b/call_handlers/fishing_call_handler.lua new file mode 100644 index 0000000..ab3fe13 --- /dev/null +++ b/call_handlers/fishing_call_handler.lua @@ -0,0 +1,137 @@ +local Color4 = _radiant.csg.Color4 +local Point3 = _radiant.csg.Point3 +local Cube3 = _radiant.csg.Cube3 + +local validator = radiant.validator + +local FishingCallHandler = class() + +function FishingCallHandler._custom_is_valid_location(self_variable, brick) + --i had to hack into this stupid function because it was the only way to make it work 😡 + if not brick then + return false + end + + if radiant.terrain.is_blocked(brick) then + return false + end + if not radiant.terrain.is_supported(brick) then + return false + end + local entities = radiant.terrain.get_entities_at_point(brick) + for _, entity in pairs(entities) do + if not self_variable._can_contain_entity_filter_fn(entity, self_variable) then + return false + end + end + return FishingCallHandler.has_water_below(brick) +end + +function FishingCallHandler:choose_new_fish_location(session, response) + stonehearth.selection:select_xz_region("fish_zone") + :use_designation_marquee(Color4(129, 192, 165, 255)) + :set_cursor('archipelago_biome:cursors:zone_fish') + :set_invalid_cursor('archipelago_biome:cursors:zone_fish_invalid') + :require_unblocked(true) + :require_supported(true) + :allow_unselectable_support_entities(true) + :set_can_contain_entity_filter(function(entity) + if radiant.entities.get_entity_data(entity, 'stonehearth:designation') then + return false + end + if entity:get_component('terrain') then + return false + end + return true + end) + :set_find_support_filter(function(result, select_xz_region) + select_xz_region._is_valid_location = FishingCallHandler._custom_is_valid_location + + local entity = result.entity + if not entity then + return stonehearth.selection.FILTER_IGNORE + end + local rcs = entity:get_component('region_collision_shape') + local region_collision_type = rcs and rcs:get_region_collision_type() + if region_collision_type == _radiant.om.RegionCollisionShape.NONE then + return stonehearth.selection.FILTER_IGNORE + end + + if result.brick then + return true + end + return stonehearth.selection.FILTER_IGNORE + end) + + :done(function(selector, box) + local size = { + x = box.max.x - box.min.x, + y = box.max.z - box.min.z, + } + _radiant.call('archipelago_biome:create_new_field', box.min, size) + :done(function(r) + response:resolve({ field = r.field }) + end) + :always(function() + selector:destroy() + end) + end) + :fail(function(selector) + selector:destroy() + response:reject('no region') + end) + :go() +end + +function FishingCallHandler.has_water_below(origin) + return + FishingCallHandler._get_water_below(origin-Point3.unit_z) or + FishingCallHandler._get_water_below(origin+Point3.unit_z) or + FishingCallHandler._get_water_below(origin-Point3.unit_x) or + FishingCallHandler._get_water_below(origin+Point3.unit_x) +end + +function FishingCallHandler._get_water_below(neighbor_point) + local ground_point = radiant.terrain.get_standable_point(neighbor_point) + local entities_present = radiant.terrain.get_entities_at_point(ground_point) + + for id, entity in pairs(entities_present) do + local water_component = entity:get_component('stonehearth:water') + if water_component then + return true + end + end + return false +end + +function FishingCallHandler:create_new_field(session, response, location, size) + validator.expect_argument_types({'Point3', 'table'}, location, size) + + local entity = radiant.entities.create_entity('archipelago_biome:fisher:field', { owner = session.player_id }) + radiant.terrain.place_entity(entity, location) + + local shape = Cube3(Point3.zero, Point3(size.x, 1, size.y)) + entity:add_component('region_collision_shape') + :set_region_collision_type(_radiant.om.RegionCollisionShape.NONE) + :set_region(_radiant.sim.alloc_region3()) + :get_region():modify(function(cursor) + cursor:add_unique_cube(shape) + end) + entity:add_component('destination') + :set_region(_radiant.sim.alloc_region3()) + :get_region():modify(function(cursor) + cursor:add_unique_cube(shape) + end) + entity:get_component('destination') + :set_adjacent(_radiant.sim.alloc_region3()) + :get_adjacent():modify(function(cursor) + cursor:add_unique_cube(shape) + end) + + local fisher_field = entity:get_component('archipelago_biome:fisher_field') + fisher_field:set_size(size.x,size.y) + + return { field = entity } +end + +return FishingCallHandler \ No newline at end of file diff --git a/components/boat_dock/boat_dock.lua b/components/boat_dock/boat_dock.lua index 1cc4dbb..7919187 100644 --- a/components/boat_dock/boat_dock.lua +++ b/components/boat_dock/boat_dock.lua @@ -18,6 +18,7 @@ end function ArchipelagoBoatDock:initialize() self._sv.platform = nil self._sv.other_dock = nil + self._sv.dock_spots = {} self._sv._effect_overlay = nil end @@ -26,6 +27,7 @@ function ArchipelagoBoatDock:activate() self._removed_from_world_listener = radiant.events.listen(self._entity, 'stonehearth:on_removed_from_world', function() self:destroy_platform() self:destroy_other_dock() + self:destroy_fishing_spot() if self._sv._effect_overlay then self._sv._effect_overlay:stop() self._sv._effect_overlay = nil @@ -54,12 +56,29 @@ function ArchipelagoBoatDock:create_connections() if other_side then self:create_platform(other_side) self:create_destination_dock(other_side) + self:create_fishing_spot(radiant.entities.get_world_grid_location(self._entity), other_side) else self._sv._effect_overlay = radiant.effects.run_effect(self._entity, "archipelago_biome:effects:overlay:no_connection", nil, nil, { playerColor = radiant.entities.get_player_color(self._entity) }) end end end +function ArchipelagoBoatDock:create_fishing_spot(this_side, other_side) + local total_distance = this_side:distance_to(other_side) + if total_distance > 15 then + local middle_point = (this_side+other_side)/2 + local dock_spot = radiant.entities.create_entity("archipelago_biome:decoration:dock_spot", + {owner = self._entity:get_player_id()}) + radiant.terrain.place_entity_at_exact_location(dock_spot, + middle_point +Point3.unit_y*2) + + table.insert(self._sv.dock_spots, dock_spot) + + self:create_fishing_spot(middle_point, this_side) + self:create_fishing_spot(middle_point, other_side) + end +end + function ArchipelagoBoatDock:find_other_side() local mob = self._entity:get_component('mob') local facing = mob:get_facing() @@ -153,9 +172,21 @@ function ArchipelagoBoatDock:destroy_other_dock() end end +function ArchipelagoBoatDock:destroy_fishing_spot() + if self._sv.dock_spots then + for i, dock_spot in ipairs(self._sv.dock_spots) do + if dock_spot and dock_spot:is_valid() then + radiant.entities.destroy_entity(dock_spot) + end + end + self._sv.dock_spots = {} + end +end + function ArchipelagoBoatDock:destroy() self:destroy_platform() self:destroy_other_dock() + self:destroy_fishing_spot() if self._sensor_trace then self._sensor_trace:destroy() diff --git a/components/fisher_field/fisher_field.lua b/components/fisher_field/fisher_field.lua new file mode 100644 index 0000000..57d6e18 --- /dev/null +++ b/components/fisher_field/fisher_field.lua @@ -0,0 +1,39 @@ +local FisherFieldComponent = class() +local Point2 = _radiant.csg.Point2 +local Point3 = _radiant.csg.Point3 + +function FisherFieldComponent:initialize() + self._sv.size = nil +end + +function FisherFieldComponent:create() + self._sv.size = Point2.zero +end + +function FisherFieldComponent:set_size(x, z) + self._sv.size = Point2(x, z) + self.__saved_variables:mark_changed() +end + +function FisherFieldComponent:get_water_direction(origin) + return + FisherFieldComponent:_get_water_below(origin-Point3.unit_z) or + FisherFieldComponent:_get_water_below(origin+Point3.unit_z) or + FisherFieldComponent:_get_water_below(origin-Point3.unit_x) or + FisherFieldComponent:_get_water_below(origin+Point3.unit_x) +end + +function FisherFieldComponent:_get_water_below(neighbor_point) + local ground_point = radiant.terrain.get_standable_point(neighbor_point) + local entities_present = radiant.terrain.get_entities_at_point(ground_point) + + for id, entity in pairs(entities_present) do + local water_component = entity:get_component('stonehearth:water') + if water_component then + return neighbor_point + end + end + return false +end + +return FisherFieldComponent \ No newline at end of file diff --git a/data/commands/archer_arrows/fish_arrows.png b/data/commands/archer_arrows/fish_arrows.png index 60a59e3..67aaf17 100644 Binary files a/data/commands/archer_arrows/fish_arrows.png and b/data/commands/archer_arrows/fish_arrows.png differ diff --git a/data/cursors/zone_fish.cur b/data/cursors/zone_fish.cur new file mode 100644 index 0000000..1b71b3e Binary files /dev/null and b/data/cursors/zone_fish.cur differ diff --git a/data/cursors/zone_fish_invalid.cur b/data/cursors/zone_fish_invalid.cur new file mode 100644 index 0000000..fc09a28 Binary files /dev/null and b/data/cursors/zone_fish_invalid.cur differ diff --git a/data/fishing/fishing.json b/data/fishing/fishing.json index e245d6f..281b189 100644 --- a/data/fishing/fishing.json +++ b/data/fishing/fishing.json @@ -253,15 +253,6 @@ "effort":100, "xp":10 }, - "ice_cube":{ - "alias":"archipelago_biome:resources:ice_cube", - "weight":1, - "is_biome":[ - "stonehearth:biome:arctic" - ], - "effort":10, - "xp":1 - }, "tropical_fish":{ "alias":"archipelago_biome:food:tropical_fish", "weight":20, diff --git a/data/traits/passion_fisher/passion_fisher_trait.png b/data/traits/passion_fisher/passion_fisher_trait.png index 0aa631a..28cefb9 100644 Binary files a/data/traits/passion_fisher/passion_fisher_trait.png and b/data/traits/passion_fisher/passion_fisher_trait.png differ diff --git a/data/ui/start_menu.json b/data/ui/start_menu.json index 74a71bd..890971f 100644 --- a/data/ui/start_menu.json +++ b/data/ui/start_menu.json @@ -14,5 +14,19 @@ "hotkey": "" } } + }, + "zone_menu": { + "items": { + "create_fish": { + "name": "i18n(archipelago_biome:ui.game.menu.zone_menu.items.create_fish.display_name)", + "description": "i18n(archipelago_biome:ui.game.menu.zone_menu.items.create_fish.description)", + "required_job": "archipelago_biome:jobs:fisher", + "required_job_text": "i18n(archipelago_biome:ui.game.menu.zone_menu.items.create_fish.required_job_text)", + "class": "button", + "icon": "/archipelago_biome/ui/game/start_menu/images/zone_fish.png", + "sticky": true, + "hotkey_action": "zone:fish" + } + } } } \ No newline at end of file diff --git a/jobs/archer/archer_buffs/fish_in_face.png b/jobs/archer/archer_buffs/fish_in_face.png index 55928eb..94ae843 100644 Binary files a/jobs/archer/archer_buffs/fish_in_face.png and b/jobs/archer/archer_buffs/fish_in_face.png differ diff --git a/jobs/fisher/field/field.json b/jobs/fisher/field/field.json new file mode 100644 index 0000000..aa1d389 --- /dev/null +++ b/jobs/fisher/field/field.json @@ -0,0 +1,25 @@ +{ + "type": "entity", + "components": { + "stonehearth:defense_zone": {}, + "archipelago_biome:fisher_field": {}, + "stonehearth:commands": { + "commands": [ + "stonehearth:commands:destroy_item" + ] + } + }, + "entity_data": { + "archipelago_biome:fishing_spot":{}, + "stonehearth:designation": { + "allow_placed_items": false + }, + "stonehearth:item": { + "clearable": false + }, + "stonehearth:catalog": { + "display_name": "i18n(archipelago_biome:jobs.fisher.field.display_name)", + "description": "i18n(archipelago_biome:jobs.fisher.field.description)" + } + } +} \ No newline at end of file diff --git a/jobs/fisher/fisher.lua b/jobs/fisher/fisher.lua index c78653e..4289de7 100644 --- a/jobs/fisher/fisher.lua +++ b/jobs/fisher/fisher.lua @@ -112,7 +112,15 @@ function FisherClass:chose_random_fish() end local fish_key = weighted_set:choose_random() self.current_fish_key = fish_key - return self.fishing_data[level][fish_key] + local boat_effort = 1 + if radiant.entities.get_posture(self._sv._entity) == "stonehearth:in_boat" then + boat_effort = 0.8 + end + local to_AI = { + effort = self.fishing_data[level][fish_key].effort * boat_effort, + alias = self.fishing_data[level][fish_key].alias + } + return to_AI end function FisherClass:_is_valid_X(is_X, is_not_X, X_alias) diff --git a/jobs/fisher/images/faster_fishing_perk.png b/jobs/fisher/images/faster_fishing_perk.png index 0ec20f4..7d10c2e 100644 Binary files a/jobs/fisher/images/faster_fishing_perk.png and b/jobs/fisher/images/faster_fishing_perk.png differ diff --git a/jobs/fisher/recipes/food/fish_cooked_recipe.json b/jobs/fisher/recipes/food/fish_cooked_recipe.json index 3478324..7a95be0 100644 --- a/jobs/fisher/recipes/food/fish_cooked_recipe.json +++ b/jobs/fisher/recipes/food/fish_cooked_recipe.json @@ -6,7 +6,7 @@ "description": "i18n(archipelago_biome:entities.food.fish_cooked.recipe.description)", "flavor": "i18n(archipelago_biome:entities.food.fish_cooked.recipe.flavor)", "portrait" : "/archipelago_biome/entities/food/fish_cooked/fish_cooked.png", - "level_requirement": 2, + "level_requirement": 3, "workshop": "archipelago_biome:fisher:firepit", "ingredients": [ { diff --git a/locales/en.json b/locales/en.json index 06ff6b2..5577136 100644 --- a/locales/en.json +++ b/locales/en.json @@ -659,6 +659,10 @@ } }, "fisher": { + "field": { + "display_name":"Fishing Area", + "description":"Fishers can stop here to fish" + }, "fisher_description": { "display_name": "Fisher", "description": "Will capture crabs, harvest pearls, and do other water related works", @@ -874,6 +878,17 @@ "required_job_text": "Requires a fisher" } } + }, + "zone_menu": { + "items": { + "create_fish": { + "display_name": "Fishing Spot", + "description": "Marks a place to fish", + "required_job_text": "Requires a fisher", + "tip_title": "Click and drag to mark as a fishing spot", + "tip_description": "The zone area will be considered a valid fishing spot that fishers can go to fish.

Right click to exit this mode" + } + } } }, "zones_mode": { diff --git a/locales/pt-BR.json b/locales/pt-BR.json index 84d23ab..7039f9c 100644 --- a/locales/pt-BR.json +++ b/locales/pt-BR.json @@ -659,6 +659,10 @@ } }, "fisher": { + "field": { + "display_name":"Área de Pesca", + "description":"Pescadores podem vir aqui para pescar" + }, "fisher_description": { "display_name": "Pescador", "description": "Irá pegar caranguejos, colher pérolas, e fazer outras tarefas relacionadas a água", @@ -874,6 +878,17 @@ "required_job_text": "Requer um pescador" } } + }, + "zone_menu": { + "items": { + "create_fish": { + "display_name": "Ponto de Pesca", + "description": "Marca um lugar para pescar", + "required_job_text": "Requer um pescador", + "tip_title": "Clique e arraste para marcar como local de pesca", + "tip_description": "A área será considerada um local de pesca que os pescadores podem ir para pescar.

Clique com o botão direito para sair deste modo" + } + } } }, "zones_mode": { diff --git a/manifest.json b/manifest.json index d5c2f74..f63d82f 100644 --- a/manifest.json +++ b/manifest.json @@ -72,6 +72,9 @@ "crops:palm_tree_crop": "file(entities/crops/palm_tree_crop)", + "cursors:zone_fish": "file(data/cursors/zone_fish.cur)", + "cursors:zone_fish_invalid":"file(data/cursors/zone_fish_invalid.cur)", + "data:fishing": "file(data/fishing)", "data:gm_index": "file(data/gm/gm_index.json)", @@ -169,6 +172,7 @@ "fisher:talisman": "file(jobs/fisher/fisher_bucket/fisher_bucket_talisman.json)", "fisher:workbench": "file(jobs/fisher/fisher_workbench)", "fisher:firepit": "file(jobs/fisher/fisher_firepit)", + "fisher:field": "file(jobs/fisher/field)", "kingdoms:atlanteans": "file(data/atlanteans_population.json)", "atlantean_male": "file(entities/atlanteans/male)", @@ -509,28 +513,43 @@ "class:fisher": "file(jobs/fisher/fisher.lua)", "game_master:util:choose_water_location_outside_town": "file(services/server/game_master/controllers/util/choose_water_location_outside_town.lua)" }, + "functions": { + "choose_new_fish_location": { + "controller": "file(call_handlers/fishing_call_handler.lua)", + "endpoint": "client" + }, + "create_new_field": { + "controller": "file(call_handlers/fishing_call_handler.lua)", + "endpoint": "server" + } + }, "components": { "boat_dock": "file(components/boat_dock/boat_dock.lua)", "cave": "file(components/cave/cave.lua)", "crab_spawner": "file(components/crab_spawner/crab_spawner.lua)", "dock": "file(components/dock/dock.lua)", "explosive": "file(components/explosive/explosive.lua)", + "fisher_field": "file(components/fisher_field/fisher_field.lua)", "need_water": "file(components/need_water/need_water.lua)", "trojan": "file(components/trojan/trojan.lua)", "wave": "file(components/wave/wave.lua)" }, + "component_renderers":{ + "fisher_field": "file(renderers/fisher_field/fisher_field.lua)" + }, "ui":{ "html":[ "file(ui/game/bulletin/bulletin_dialog/fisher_bulletin_dialog/fisher_bulletin_dialog.html)" ], "js":[ - "file(ui/shell/select_settlement/map.js)", - "file(ui/game/bulletin/bulletin_dialog/fisher_bulletin_dialog/fisher_bulletin_dialog.js)" + "file(ui/game/bulletin/bulletin_dialog/fisher_bulletin_dialog/fisher_bulletin_dialog.js)", + "file(ui/game/start_menu/start_menu.js)", + "file(ui/shell/select_settlement/map.js)" ], "less":[ "file(jobs/fisher/skin/workshop.less)", - "file(ui/shell/select_settlement/select_settlement.less)", - "file(ui/game/bulletin/bulletin_dialog/fisher_bulletin_dialog/fisher_bulletin_dialog.less)" + "file(ui/game/bulletin/bulletin_dialog/fisher_bulletin_dialog/fisher_bulletin_dialog.less)", + "file(ui/shell/select_settlement/select_settlement.less)" ] } } \ No newline at end of file diff --git a/renderers/fisher_field/fisher_field.lua b/renderers/fisher_field/fisher_field.lua new file mode 100644 index 0000000..e62b43b --- /dev/null +++ b/renderers/fisher_field/fisher_field.lua @@ -0,0 +1,41 @@ +local ZoneRenderer = require 'stonehearth.renderers.zone_renderer' +local Color4 = _radiant.csg.Color4 +local Point2 = _radiant.csg.Point2 + +local FisherFieldRenderer = class() + +function FisherFieldRenderer:initialize(render_entity, datastore) + self._datastore = datastore + + self._zone_renderer = ZoneRenderer(render_entity) + :set_designation_colors(Color4(129, 192, 165, 255), Color4(129, 192, 165, 255)) + :set_ground_colors(Color4(77, 62, 38, 10), Color4(77, 62, 38, 30)) + + self._datastore_trace = self._datastore:trace_data('rendering fisher field') + :on_changed( + function() + self:_update() + end + ) + :push_object_state() +end + +function FisherFieldRenderer:destroy() + if self._datastore_trace then + self._datastore_trace:destroy() + self._datastore_trace = nil + end + + self._zone_renderer:destroy() +end + +function FisherFieldRenderer:_update() + local data = self._datastore:get_data() + local size = data.size + local items = {} + + self._zone_renderer:set_size(size) + self._zone_renderer:set_current_items(items) +end + +return FisherFieldRenderer \ No newline at end of file diff --git a/ui/game/start_menu/images/zone_fish.png b/ui/game/start_menu/images/zone_fish.png new file mode 100644 index 0000000..37adc94 Binary files /dev/null and b/ui/game/start_menu/images/zone_fish.png differ diff --git a/ui/game/start_menu/start_menu.js b/ui/game/start_menu/start_menu.js new file mode 100644 index 0000000..559f13e --- /dev/null +++ b/ui/game/start_menu/start_menu.js @@ -0,0 +1,31 @@ +App.StonehearthStartMenuView.reopen({ + init: function() { + var self = this; + + self.menuActions.create_fish = function() { + self.createFish(); + } + + self._super(); + }, + + createFish: function() { + var self = this; + + App.setGameMode('zones'); + var tip = App.stonehearthClient.showTip('archipelago_biome:ui.game.menu.zone_menu.items.create_fish.tip_title', + 'archipelago_biome:ui.game.menu.zone_menu.items.create_fish.tip_description', { i18n: true }); + + return App.stonehearthClient._callTool('createFish', function(){ + return radiant.call('archipelago_biome:choose_new_fish_location') + .done(function(response) { + radiant.call('radiant:play_sound', {'track' : 'stonehearth:sounds:place_structure'} ); + radiant.call('stonehearth:select_entity', response.field); + self.createFish(); + }) + .fail(function(response) { + App.stonehearthClient.hideTip(tip); + }); + }); + } +}); \ No newline at end of file diff --git a/ui/shell/select_settlement/images/wildlife.png b/ui/shell/select_settlement/images/wildlife.png index 7395428..e42463c 100644 Binary files a/ui/shell/select_settlement/images/wildlife.png and b/ui/shell/select_settlement/images/wildlife.png differ diff --git a/ui/shell/select_settlement/images/wildlife_empty.png b/ui/shell/select_settlement/images/wildlife_empty.png index 9a2c6ae..7b6f006 100644 Binary files a/ui/shell/select_settlement/images/wildlife_empty.png and b/ui/shell/select_settlement/images/wildlife_empty.png differ diff --git a/update_log.txt b/update_log.txt index 44145c7..8ccb0d9 100644 --- a/update_log.txt +++ b/update_log.txt @@ -1,12 +1,12 @@ Additions: -Jellyfish enemies -Seaweed seeds, so you can grow more of it (drop from seaweed or crafted by herbalist) +Fishing zones. Draw it at the water edge and the fisher will be able to fish there. Changes: +With boat docks, fisher can go fish with boats on those paths +Updated old fish images with a new fish design Changes for ACE: Fixes: -(for ACE mod) -Fixed bug with seed crafting while ACE auto craft is on. \ No newline at end of file +(for ACE mod) \ No newline at end of file