summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md33
-rw-r--r--app/controllers/characters/hearth_controller.rb3
-rw-r--r--app/controllers/chat_messages_controller.rb7
-rw-r--r--app/controllers/game_controller.rb2
-rw-r--r--app/controllers/locations_controller.rb9
-rw-r--r--app/controllers/look_controller.rb5
-rw-r--r--app/javascript/controllers/chat_controller.js2
-rw-r--r--app/models/character.rb1
-rw-r--r--app/models/location.rb1
-rw-r--r--app/views/application/_chat.html.erb21
-rw-r--r--app/views/application/_navbar.html.erb2
-rw-r--r--app/views/application/_timer.html.erb8
-rw-r--r--app/views/chat_messages/index.html.erb9
-rw-r--r--app/views/locations/index.html.erb8
-rw-r--r--app/views/look/look.html.erb (renamed from app/views/locations/show.html.erb)2
-rw-r--r--config/routes.rb9
-rw-r--r--data/activities.yml251
-rw-r--r--data/hearth_amenities.yml13
-rw-r--r--data/items.yml45
-rw-r--r--data/locations.yml2
-rw-r--r--data/monsters.yml22
-rw-r--r--data/skills.yml4
-rw-r--r--db/migrate/20210705235925_update_floret_gid.rb5
-rw-r--r--db/migrate/20210706000053_add_location_to_character.rb9
-rw-r--r--db/schema.rb5
25 files changed, 413 insertions, 65 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 55675f7..43995da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,39 @@
# Changelog
All notable changes to this project will be documented in this file.
+## [Unreleased]
+
+### General
+- A new skill, Aetherweave, has been added.
+- Characters now have a location. Correspondingly, the "Locations" menu option and view has been replaced
+ by a "Look" menu and view.
+
+### Hearth
+- New amentity: aetherloom (level 1, level 2)
+- Foundation can now be upgraded to level 2.
+- Constructing all level 2 amenities other than the foundation require a level 2 foundation to be built first.
+ If you already have a level 2 amenity, you are grandfathered in and can continue using it as normal.
+
+### Items
+- New items: pluma moss, laris strand, fine aethermesh, faint weaving haste
+- Aethermesh now increases manatrawl speed by 2.
+- Apprentice wand now requires havencast level 5 to equip.
+
+### Activities
+- Synthsever rusted lockbox base duration reduced from 180 to 120.
+- Adjusted wealdreap drop tables at Twil Woods and Twil Grove to accommodate pluma moss and laris strand.
+
+### Monsters
+- Pit leech, stalk beast, and grinpad damage reduced.
+- XP awards reduced (except balgoloth).
+
+### Chat
+- Chat area now shows most recent 200 messages, instead of 100.
+- New "History" link shows a chat history of the last 2,000 messages.
+
+### UI
+- Number of actions remaining is now displayed below timer when a set amount of actions have been queued.
+
## [0.1.12] - 2021-06-23
### General
diff --git a/app/controllers/characters/hearth_controller.rb b/app/controllers/characters/hearth_controller.rb
index c525add..ab9676e 100644
--- a/app/controllers/characters/hearth_controller.rb
+++ b/app/controllers/characters/hearth_controller.rb
@@ -8,6 +8,7 @@ class Characters::HearthController < ApplicationController
laboratory: [],
spicebench: [],
binding_array: [],
+ aetherloom: [],
}
Activity.where("gid like ?", "craft_%").each do |activity|
@@ -23,6 +24,8 @@ class Characters::HearthController < ApplicationController
@amenity_activities[:spicebench].push(activity) && next
when "binding_array"
@amenity_activities[:binding_array].push(activity) && next
+ when "aetherloom"
+ @amenity_activities[:aetherloom].push(activity) && next
else
raise "Invalid amenity gid (#{requirement_data[:gid]}"
end
diff --git a/app/controllers/chat_messages_controller.rb b/app/controllers/chat_messages_controller.rb
index 9112bb7..a299379 100644
--- a/app/controllers/chat_messages_controller.rb
+++ b/app/controllers/chat_messages_controller.rb
@@ -1,7 +1,10 @@
class ChatMessagesController < ApplicationController
def index
- # TODO: Let's rename this method to #list
- @chat_messages = ChatMessage.order(created_at: :desc).limit(100).reverse
+ @chat_messages = ChatMessage.order(created_at: :desc).limit(2000)
+ end
+
+ def list
+ @chat_messages = ChatMessage.order(created_at: :asc).limit(200)
render partial: "chat_messages/list"
end
diff --git a/app/controllers/game_controller.rb b/app/controllers/game_controller.rb
index 39ea6c9..4bbbf53 100644
--- a/app/controllers/game_controller.rb
+++ b/app/controllers/game_controller.rb
@@ -18,7 +18,7 @@ class GameController < ApplicationController
def stop_activity
current_char.stop_activity
- redirect_to locations_path
+ redirect_to look_path
end
def finish_activity
diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb
deleted file mode 100644
index 4616c3d..0000000
--- a/app/controllers/locations_controller.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class LocationsController < ApplicationController
- def index
- @locations = Location.all
- end
-
- def show
- @location = Location.find(params[:id])
- end
-end
diff --git a/app/controllers/look_controller.rb b/app/controllers/look_controller.rb
new file mode 100644
index 0000000..e604670
--- /dev/null
+++ b/app/controllers/look_controller.rb
@@ -0,0 +1,5 @@
+class LookController < ApplicationController
+ def look
+ @location = current_char.location
+ end
+end
diff --git a/app/javascript/controllers/chat_controller.js b/app/javascript/controllers/chat_controller.js
index 95b61c5..0605b3a 100644
--- a/app/javascript/controllers/chat_controller.js
+++ b/app/javascript/controllers/chat_controller.js
@@ -18,7 +18,7 @@ export default class extends Controller {
load() {
this.scrollToBottom();
if (this.outputTarget.innerHTML.trim() === "") {
- fetch("/chat_messages")
+ fetch("/chat_messages/list")
.then(response => response.text())
.then(html => {
this.outputTarget.innerHTML = html;
diff --git a/app/models/character.rb b/app/models/character.rb
index 2669626..96dafd0 100644
--- a/app/models/character.rb
+++ b/app/models/character.rb
@@ -1,6 +1,7 @@
class Character < ApplicationRecord
belongs_to :user
belongs_to :activity, optional: true
+ belongs_to :location
has_many :title_awards
has_many :titles, through: :title_awards
belongs_to :active_title, class_name: "Title", optional: true
diff --git a/app/models/location.rb b/app/models/location.rb
index e008270..7bd1386 100644
--- a/app/models/location.rb
+++ b/app/models/location.rb
@@ -2,6 +2,7 @@ class Location < ApplicationRecord
include HasWhatnot
has_many :activities
+ has_many :characters
has_many :monster_spawns
validates :gid, :name, presence: true
end
diff --git a/app/views/application/_chat.html.erb b/app/views/application/_chat.html.erb
index b656ed7..1ba6f8f 100644
--- a/app/views/application/_chat.html.erb
+++ b/app/views/application/_chat.html.erb
@@ -3,13 +3,20 @@
<div data-chat-target="output" id="chat_output" class="game-container-box overflow-y-auto overflow-x-hidden break-words flex-grow">
</div>
<div class="flex-none">
- <%= form_with model: ChatMessage.new, html: { autocomplete: "off" }, local: false,
- data: { action: "chat#send" }, class: "flex" do |f| %>
- <%= f.collection_select :chat_room_id, ChatRoom.accessible_to(current_char.user),
- :id, :short_name, class: "flex-none" %>
- <%= f.text_field :body, size: "1", maxlength: 255, required: true,
- data: { chat_target: "message" }, class: "flex-grow inline-flex" %>
- <% end %>
+ <div class="flex items-center">
+ <div class="flex-grow">
+ <%= form_with model: ChatMessage.new, html: { autocomplete: "off" }, local: false,
+ data: { action: "chat#send" }, class: "flex" do |f| %>
+ <%= f.collection_select :chat_room_id, ChatRoom.accessible_to(current_char.user),
+ :id, :short_name, class: "flex-none" %>
+ <%= f.text_field :body, size: "1", maxlength: 255, required: true,
+ data: { chat_target: "message" }, class: "flex-grow inline-flex" %>
+ <% end %>
+ </div>
+ <div class="flex-none text-xs mx-2">
+ <%= link_to "History", chat_messages_path %>
+ </div>
+ </div>
</div>
</div>
<% end %>
diff --git a/app/views/application/_navbar.html.erb b/app/views/application/_navbar.html.erb
index e315b42..d80e7b6 100644
--- a/app/views/application/_navbar.html.erb
+++ b/app/views/application/_navbar.html.erb
@@ -1,7 +1,7 @@
<ul class="py-2 px-2 col-span-12 text-display space-x-2.5">
<% if current_char %>
<li class="inline">
- <%= link_to "Locations", locations_path %>
+ <%= link_to "Look", look_path %>
</li>
<li class="inline">
<%= link_to "Character", character_path(current_char) %>
diff --git a/app/views/application/_timer.html.erb b/app/views/application/_timer.html.erb
index 51d9b81..a18e739 100644
--- a/app/views/application/_timer.html.erb
+++ b/app/views/application/_timer.html.erb
@@ -15,14 +15,18 @@
</div>
</div>
-
<% most_recent_cs = current_char.character_skills.order(:updated_at).last %>
<div class="text-center text-sm">
<div class="text-xs"><%= most_recent_cs.skill.name %> level <%= most_recent_cs.level %></div>
<div><%= most_recent_cs.xp_to_next_level %> XP to next level</div>
</div>
- <div class="text-center my-2">
+ <div class="text-center text-sm my-2">
+ <% if current_char.queued_actions %>
+ <div class="my-1">
+ <%= pluralize(current_char.queued_actions + 1, "action") %> remaining.
+ </div>
+ <% end %>
<%= button_to "Stop", stop_activity_path, class: "text-sm" %>
</div>
diff --git a/app/views/chat_messages/index.html.erb b/app/views/chat_messages/index.html.erb
new file mode 100644
index 0000000..8791e7b
--- /dev/null
+++ b/app/views/chat_messages/index.html.erb
@@ -0,0 +1,9 @@
+<h1 class="text-3xl mb-4">
+ Chat History
+</h1>
+
+<p class="mb-4">Last 2,000 messages listed from newest to oldest.</p>
+
+<div class="text-sm">
+ <%= render "chat_messages/list" %>
+</div>
diff --git a/app/views/locations/index.html.erb b/app/views/locations/index.html.erb
deleted file mode 100644
index 3c9b837..0000000
--- a/app/views/locations/index.html.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<h1 class="text-3xl mb-4">Locations</h1>
-
-<% @locations.each do |location| %>
- <div class="my-4">
- <h2 class="text-xl"><%= link_to location.name, location_path(location) %></h2>
- <p class="italic"><%= location.description %></p>
- </div>
-<% end %>
diff --git a/app/views/locations/show.html.erb b/app/views/look/look.html.erb
index fcc668a..2f1074a 100644
--- a/app/views/locations/show.html.erb
+++ b/app/views/look/look.html.erb
@@ -6,7 +6,7 @@
<% @location.monster_spawns.select(&:alive?).each do |ms| %>
<p class="text-yellow-400">A <%= ms.monster.name %> is ravaging this location! (<%= ms.remaining_hp %> HP)</p>
<%# TODO: HACK %>
- <% activity = Activity.find_by_gid("beastslay_leviathan_floret_region") %>
+ <% activity = Activity.find_by_gid("beastslay_leviathan_floret") %>
<%= form_with url: start_activity_path(activity) do |f| %>
<%= f.hidden_field :id, value: activity.id %>
<%= f.submit "Hunt" %>
diff --git a/config/routes.rb b/config/routes.rb
index 6e435f2..ce39562 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -11,8 +11,13 @@ Rails.application.routes.draw do
put "users", to: "devise/registrations#update", as: "user_registration"
end
- resources :chat_messages, only: [:index, :create]
- resources :locations, only: [:index, :show]
+ get :look, to: "look#look"
+
+ resources :chat_messages, only: [:index, :create] do
+ collection do
+ get :list
+ end
+ end
resources :activities, only: [:index, :show] do
get :costs_and_requirements, on: :member
end
diff --git a/data/activities.yml b/data/activities.yml
index a0a0072..f141500 100644
--- a/data/activities.yml
+++ b/data/activities.yml
@@ -15,6 +15,23 @@ construct_foundation_level1:
- type: "hearth_amenity"
gid: "foundation"
level: 1
+construct_foundation_level2:
+ name: "Construct Foundation Level 2"
+ description: "Upgrade your foundation to level 2."
+ whatnot:
+ duration:
+ base: 600
+ cost:
+ - type: "item"
+ gid: "stone"
+ quantity: 250
+ - type: "item"
+ gid: "wood"
+ quantity: 250
+ results:
+ - type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
construct_forge_level1:
name: "Construct Forge Level 1"
description: "Build a level 1 forge."
@@ -40,6 +57,9 @@ construct_forge_level2:
requirements:
- type: "hearth_amenity"
gid: "foundation"
+ level: 2
+ - type: "hearth_amenity"
+ gid: "forge"
level: 1
duration:
base: 2400
@@ -87,6 +107,9 @@ construct_laboratory_level2:
whatnot:
requirements:
- type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
+ - type: "hearth_amenity"
gid: "laboratory"
level: 1
duration:
@@ -117,6 +140,10 @@ construct_listern_font_level1:
whatnot:
duration:
base: 1000
+ requirements:
+ - type: "hearth_amenity"
+ gid: "foundation"
+ level: 1
cost:
- type: "item"
gid: "stone"
@@ -136,6 +163,9 @@ construct_listern_font_level2:
- type: "hearth_amenity"
gid: "listern_font"
level: 1
+ - type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
duration:
base: 3600
cost:
@@ -179,6 +209,9 @@ construct_loamspire_level2:
whatnot:
requirements:
- type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
+ - type: "hearth_amenity"
gid: "loamspire"
level: 1
duration:
@@ -230,6 +263,9 @@ construct_spicebench_level2:
whatnot:
requirements:
- type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
+ - type: "hearth_amenity"
gid: "spicebench"
level: 1
duration:
@@ -287,6 +323,9 @@ construct_binding_array_level2:
whatnot:
requirements:
- type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
+ - type: "hearth_amenity"
gid: "binding_array"
level: 1
duration:
@@ -314,6 +353,63 @@ construct_binding_array_level2:
- type: "hearth_amenity"
gid: "binding_array"
level: 2
+construct_aetherloom_level1:
+ name: "Construct Aetherloom Level 1"
+ description: "Build a level 1 aetherloom."
+ whatnot:
+ requirements:
+ - type: "hearth_amenity"
+ gid: "foundation"
+ level: 1
+ duration:
+ base: 600
+ cost:
+ - type: "item"
+ gid: "stone"
+ quantity: 50
+ - type: "item"
+ gid: "wood"
+ quantity: 200
+ - type: "item"
+ gid: "pluma_moss"
+ quantity: 50
+ results:
+ - type: "hearth_amenity"
+ gid: "aetherloom"
+ level: 1
+construct_aetherloom_level2:
+ name: "Construct Aetherloom Level 2"
+ description: "Upgrade your aetherloom to level 2."
+ whatnot:
+ requirements:
+ - type: "hearth_amenity"
+ gid: "foundation"
+ level: 2
+ - type: "hearth_amenity"
+ gid: "aetherloom"
+ level: 1
+ duration:
+ base: 2400
+ cost:
+ - type: "item"
+ gid: "stone"
+ quantity: 50
+ - type: "item"
+ gid: "wood"
+ quantity: 200
+ - type: "item"
+ gid: "pluma_moss"
+ quantity: 40
+ - type: "item"
+ gid: "laris_strand"
+ quantity: 40
+ - type: "item"
+ gid: "shimmering_essence"
+ quantity: 15
+ results:
+ - type: "hearth_amenity"
+ gid: "aetherloom"
+ level: 2
plant_mudtub_seed:
name: "Plant Mudtub Seed"
description: "Plant a mudtub seed."
@@ -1668,6 +1764,83 @@ craft_onus_of_vision:
xp:
- gid: "otherforge"
value: 200
+craft_aethermesh:
+ name: "Weave aethermesh"
+ description: "Weave an aethermesh."
+ whatnot:
+ requirements:
+ - type: "hearth_amenity"
+ gid: "aetherloom"
+ level: 1
+ - type: "skill"
+ gid: "aetherweave"
+ level: 1
+ duration:
+ base: 90
+ minimum: 35
+ scaling:
+ - type: "skill"
+ gid: "aetherweave"
+ scale_value: 0.5
+ - type: "stat"
+ gid: "aetherweave_speed"
+ scale_value: 1
+ cost:
+ - type: "item"
+ gid: "pluma_moss"
+ quantity: 20
+ - type: "item"
+ gid: "arcane_dust"
+ quantity: 10
+ - type: "item"
+ gid: "wood"
+ quantity: 5
+ results:
+ - type: "item"
+ gid: "aethermesh"
+ xp:
+ - gid: "aetherweave"
+ value: 8
+craft_fine_aethermesh:
+ name: "Weave fine aethermesh"
+ description: "Weave a fine aethermesh."
+ whatnot:
+ requirements:
+ - type: "hearth_amenity"
+ gid: "aetherloom"
+ level: 2
+ - type: "skill"
+ gid: "aetherweave"
+ level: 10
+ duration:
+ base: 105
+ minimum: 35
+ scaling:
+ - type: "skill"
+ gid: "aetherweave"
+ scale_value: 0.5
+ - type: "stat"
+ gid: "aetherweave_speed"
+ scale_value: 1
+ cost:
+ - type: "item"
+ gid: "laris_strand"
+ quantity: 20
+ - type: "item"
+ gid: "arcane_dust"
+ quantity: 10
+ - type: "item"
+ gid: "shimmering_essence"
+ quantity: 2
+ - type: "item"
+ gid: "wood"
+ quantity: 5
+ results:
+ - type: "item"
+ gid: "fine_aethermesh"
+ xp:
+ - gid: "aetherweave"
+ value: 10
craft_mending_salve:
name: "Mix mending salve"
description: "Mix a mending salve."
@@ -1989,7 +2162,7 @@ craft_mercuria_potion:
planequarry_floret_mines:
name: "Quarry Floret Mines"
description: "Planequarry at the Floret Mines."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2059,7 +2232,7 @@ planequarry_floret_mines:
planequarry_deepshaft:
name: "Quarry Deepshaft"
description: "Descend far below the the Floret Mines into the labyrinth of shafts left behind by the ancients."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2134,7 +2307,7 @@ planequarry_deepshaft:
planequarry_brine_trench:
name: "Quarry Brine Trench"
description: "Planequarry in the south Floret brine trench."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2169,7 +2342,7 @@ planequarry_brine_trench:
beastslay_killing_fields:
name: "Slay in the Killing Fields"
description: "Hunt monsters in the Killing Fields."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2197,7 +2370,7 @@ beastslay_killing_fields:
beastslay_hopegraves:
name: "Slay in the Hopegraves"
description: "Hunt monsters in the Hopegraves."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2223,7 +2396,7 @@ beastslay_hopegraves:
wealdreap_twil_woods:
name: "Reap Twil Woods"
description: "Wealdreap within Twil Woods."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2250,13 +2423,18 @@ wealdreap_twil_woods:
- type: "item"
chance: 1
table:
+ - gid: "pluma_moss"
+ score: 0.10
+ xp:
+ - gid: "wealdreap"
+ value: 1
- gid: "burstshroom"
- score: 0.20
+ score: 0.40
xp:
- gid: "wealdreap"
value: 6
- gid: "aseas_leaf"
- score: 0.59
+ score: 0.70
xp:
- gid: "wealdreap"
value: 8
@@ -2294,7 +2472,7 @@ wealdreap_twil_woods:
wealdreap_twil_grove:
name: "Reap Twil Grove"
description: "Wealdreap within the hidden woodways of the Twil Woods Grove."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2316,13 +2494,18 @@ wealdreap_twil_grove:
- type: "item"
chance: 1
table:
- - gid: "woodrun_bloom"
+ - gid: "laris_strand"
score: 0.10
xp:
- gid: "wealdreap"
+ value: 2
+ - gid: "woodrun_bloom"
+ score: 0.40
+ xp:
+ - gid: "wealdreap"
value: 8
- gid: "last_breath"
- score: 0.65
+ score: 0.70
xp:
- gid: "wealdreap"
value: 10
@@ -2366,7 +2549,7 @@ wealdreap_twil_grove:
manatrawl_sor_well:
name: "Trawl Sor Well"
description: "Manatrawl within Sor Well."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2410,7 +2593,7 @@ manatrawl_sor_well:
manatrawl_sor_well_depths:
name: "Trawl Sor Well Depths"
description: "Manatrawl deep within Sor Well."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2463,7 +2646,7 @@ synthsever_rusted_lockbox:
gid: "synthsever"
level: 1
duration:
- base: 180
+ base: 120
minimum: 35
scaling:
- type: "skill"
@@ -2516,7 +2699,7 @@ open_unlocked_rusted_lockbox:
wildscour_crumbling_ruins:
name: "Scour Crumbling Ruins"
description: "Wildscour within the crumbling ruins."
- location: "floret_region"
+ location: "floret"
whatnot:
requirements:
- type: "skill"
@@ -2795,7 +2978,7 @@ craft_dusted_templis:
xp:
- gid: "spicework"
value: 14
-beastslay_leviathan_floret_region:
+beastslay_leviathan_floret:
name: "Hunt a Leviathan in the Floret Region"
description: "You are hunting down a leviathan ravaging the Floret Region."
whatnot:
@@ -2815,7 +2998,7 @@ beastslay_leviathan_floret_region:
scale_value: 1
results:
- type: "monster_spawn"
- location: "floret_region"
+ location: "floret"
chance: 1
craft_faint_mana:
name: "Bind faint mana"
@@ -2953,6 +3136,40 @@ craft_faint_working_haste:
xp:
- gid: "omenbind"
value: 12
+craft_faint_weaving_haste:
+ name: "Bind faint weaving haste"
+ description: "Bind an omen of faint weaving haste."
+ whatnot:
+ requirements:
+ - type: "hearth_amenity"
+ gid: "binding_array"
+ level: 1
+ - type: "skill"
+ gid: "omenbind"
+ level: 5
+ duration:
+ base: 75
+ minimum: 35
+ scaling:
+ - type: "skill"
+ gid: "omenbind"
+ scale_value: 0.5
+ - type: "stat"
+ gid: "omenbind_speed"
+ scale_value: 1
+ cost:
+ - type: "item"
+ gid: "vestige"
+ quantity: 10
+ - type: "item"
+ gid: "pluma_moss"
+ quantity: 10
+ results:
+ - type: "item"
+ gid: "faint_weaving_haste"
+ xp:
+ - gid: "omenbind"
+ value: 12
craft_minor_mana:
name: "Bind minor mana"
description: "Bind an omen of minor mana."
diff --git a/data/hearth_amenities.yml b/data/hearth_amenities.yml
index e58aa1c..dbc35ed 100644
--- a/data/hearth_amenities.yml
+++ b/data/hearth_amenities.yml
@@ -5,6 +5,8 @@ foundation:
construct_activities:
- level: 1
gid: "construct_foundation_level1"
+ - level: 2
+ gid: "construct_foundation_level2"
forge:
name: "Forge"
description: "A stone furnace. Can be used for practicing the otherforge skill."
@@ -95,4 +97,13 @@ binding_array:
gid: "construct_binding_array_level1"
- level: 2
gid: "construct_binding_array_level2"
-
+aetherloom:
+ name: "Aetherloom"
+ description: >-
+ A construction that allows the user to craft items using the aetherweave skill.
+ whatnot:
+ construct_activities:
+ - level: 1
+ gid: "construct_aetherloom_level1"
+ - level: 2
+ gid: "construct_aetherloom_level2"
diff --git a/data/items.yml b/data/items.yml
index 59ce7ce..44da7b5 100644
--- a/data/items.yml
+++ b/data/items.yml
@@ -470,6 +470,18 @@ last_breath:
whatnot:
tags:
- "material"
+pluma_moss:
+ name: "pluma moss"
+ description: "A fluffy moss that can be woven into cloth."
+ whatnot:
+ tags:
+ - "material"
+laris_strand:
+ name: "laris strand"
+ description: "A long, thin, robust fiber from the laris plant."
+ whatnot:
+ tags:
+ - "material"
woodrun_bloom:
name: "woodrun bloom"
description: >-
@@ -917,6 +929,10 @@ apprentice_wand:
tags:
- "tool"
- "focus"
+ equip_requirements:
+ - type: "skill"
+ gid: "havencast"
+ level: 5
equip_slots:
- "mainhand"
- "offhand"
@@ -933,6 +949,23 @@ aethermesh:
- "aethermesh"
equip_slots:
- "mainhand"
+ equip_effects:
+ - type: "stat_change"
+ gid: "manatrawl_speed"
+ modifier: 2
+fine_aethermesh:
+ name: "fine aethermesh"
+ description: "A fine tool for manatrawl."
+ whatnot:
+ tags:
+ - "tool"
+ - "aethermesh"
+ equip_slots:
+ - "mainhand"
+ equip_effects:
+ - type: "stat_change"
+ gid: "manatrawl_speed"
+ modifier: 10
quarrying_draught:
name: "quarrying draught"
description: "Increases the speed of planequarry for an hour."
@@ -1183,6 +1216,18 @@ faint_working_haste:
- type: "stat_change"
gid: "spicework_speed"
modifier: 2
+faint_weaving_haste:
+ name: "faint weaving haste"
+ description: "A very weak omen that grants a very small increase to aetherweave speed."
+ whatnot:
+ tags:
+ - "omen"
+ infix_skills:
+ - gid: "aetherweave"
+ infix_effects:
+ - type: "stat_change"
+ gid: "aetherweave_speed"
+ modifier: 2
simple_spellpage:
name: "simple spellpage"
description: "An old piece of parchment covered in magical script. Deciphering it can yield knowledge of a spell."
diff --git a/data/locations.yml b/data/locations.yml
index 10bc028..00b48c0 100644
--- a/data/locations.yml
+++ b/data/locations.yml
@@ -1,4 +1,4 @@
-floret_region:
+floret:
name: "Floret"
description: "A relatively safe haven nestled against the great Sor River."
whatnot:
diff --git a/data/monsters.yml b/data/monsters.yml
index 01596b0..8d4cc86 100644
--- a/data/monsters.yml
+++ b/data/monsters.yml
@@ -23,11 +23,11 @@ pit_leech:
- type: "damage"
gid: "pierce"
min: 1
- max: 5
+ max: 2
awards:
- type: "xp"
gid: "beastslay"
- base: 4
+ base: 3
- type: "item"
chance: 1
table:
@@ -63,12 +63,12 @@ stalk_beast:
hit_effects:
- type: "damage"
gid: "bash"
- min: 2
- max: 7
+ min: 1
+ max: 5
awards:
- type: "xp"
gid: "beastslay"
- base: 7
+ base: 4
- type: "item"
chance: 1
table:
@@ -104,12 +104,12 @@ grinpad:
hit_effects:
- type: "damage"
gid: "slash"
- min: 4
- max: 10
+ min: 3
+ max: 9
awards:
- type: "xp"
gid: "beastslay"
- base: 11
+ base: 5
- type: "item"
chance: 1
table:
@@ -157,7 +157,7 @@ lesser_trodgeathomp:
awards:
- type: "xp"
gid: "beastslay"
- base: 16
+ base: 10
- type: "title"
gid: "retributor"
- type: "item"
@@ -213,7 +213,7 @@ bollyrot:
awards:
- type: "xp"
gid: "beastslay"
- base: 13
+ base: 6
- type: "item"
chance: 1
table:
@@ -262,7 +262,7 @@ crypt_writhe:
awards:
- type: "xp"
gid: "beastslay"
- base: 20
+ base: 13
- type: "item"
chance: 0.05
gid: "black_gizzard"
diff --git a/data/skills.yml b/data/skills.yml
index 0bbd63a..ef9cb53 100644
--- a/data/skills.yml
+++ b/data/skills.yml
@@ -1,4 +1,8 @@
---
+aetherweave:
+ name: "Aetherweave"
+ description: >-
+ Crafting aethermeshes, belts, cloaks, and other fabric items.
beastslay:
name: "Beastslay"
description: >-
diff --git a/db/migrate/20210705235925_update_floret_gid.rb b/db/migrate/20210705235925_update_floret_gid.rb
new file mode 100644
index 0000000..db24044
--- /dev/null
+++ b/db/migrate/20210705235925_update_floret_gid.rb
@@ -0,0 +1,5 @@
+class UpdateFloretGid < ActiveRecord::Migration[6.1]
+ def change
+ Location.find_by_gid("floret_region").update(gid: "floret")
+ end
+end
diff --git a/db/migrate/20210706000053_add_location_to_character.rb b/db/migrate/20210706000053_add_location_to_character.rb
new file mode 100644
index 0000000..ec71ee8
--- /dev/null
+++ b/db/migrate/20210706000053_add_location_to_character.rb
@@ -0,0 +1,9 @@
+class AddLocationToCharacter < ActiveRecord::Migration[6.1]
+ def change
+ add_reference :characters, :location, foreign_key: true
+ Character.all.each do |character|
+ character.update(location_id: Location.find_by_gid("floret").id)
+ end
+ change_column :characters, :location_id, :bigint, null: false
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 6c503fd..3c6cc28 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2021_06_16_014044) do
+ActiveRecord::Schema.define(version: 2021_07_06_000053) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -86,8 +86,10 @@ ActiveRecord::Schema.define(version: 2021_06_16_014044) do
t.integer "defensive_style"
t.integer "rested_duration"
t.datetime "started_resting_at"
+ t.bigint "location_id", null: false
t.index ["active_title_id"], name: "index_characters_on_active_title_id"
t.index ["activity_id"], name: "index_characters_on_activity_id"
+ t.index ["location_id"], name: "index_characters_on_location_id"
t.index ["user_id"], name: "index_characters_on_user_id"
end
@@ -319,6 +321,7 @@ ActiveRecord::Schema.define(version: 2021_06_16_014044) do
add_foreign_key "character_skills", "characters"
add_foreign_key "character_skills", "skills"
add_foreign_key "characters", "activities"
+ add_foreign_key "characters", "locations"
add_foreign_key "characters", "titles", column: "active_title_id"
add_foreign_key "characters", "users"
add_foreign_key "chat_messages", "characters", column: "sender_id"