From 7db62ebedf9d544e61c0a95dbe6ed68288279821 Mon Sep 17 00:00:00 2001 From: chimchooree Date: Fri, 29 Jul 2022 09:37:31 -0500 Subject: [PATCH] grid push --- Dockerfile | 7 ++ src/articles | 24 ++++ src/diary/entries/{201010 => 210101} | 3 +- src/diary/entries/{200303 => 210102} | 0 src/diary/entries/{200909 => 210103} | 0 src/diary/entries/210104 | 42 +++++++ src/diary/entries/210105 | 54 +++++++++ src/diary/entries/210106 | 55 +++++++++ src/diary/entries/210107 | 105 ++++++++++++++++++ src/diary/entries/220728 | 3 +- src/diary/entries/220811 | 61 ++++++---- src/diary/entries/220825 | 61 ++++------ src/diary/entries/220908 | 42 +++++++ src/diary/entries/220922 | 54 +++++++++ src/diary/entries/221006 | 55 +++++++++ src/diary/entries/221020 | 105 ++++++++++++++++++ src/index.py | 2 +- ...727_GearsForGold_Participation_Ta5eRVr.png | Bin 0 -> 11572 bytes .../ent/everythingscomingtogether_home.png | Bin 0 -> 178442 bytes .../rpgachievement_KnowledgeBaseDiagram.png | Bin 0 -> 631592 bytes src/static/img/ent/rpgachievement_octopus.png | Bin 0 -> 427239 bytes .../img/ent/rpgachievement_samepicture.png | Bin 0 -> 1700325 bytes .../img/ent/skillsarentamanor_SkillDMV.png | Bin 0 -> 137324 bytes .../skillsarentamanor_SkillDMVFlow1200.png | Bin 0 -> 100653 bytes .../img/ent/skillsarentamanor_SkillManor.png | Bin 0 -> 206622 bytes .../skillsarentamanor_SkillManorFlow1200.png | Bin 0 -> 50974 bytes src/static/img/nav/RingOfFire.jpg | Bin 0 -> 509055 bytes src/static/img/nav/RingOfFirethumb.jpg | Bin 0 -> 40609 bytes src/static/img/nav/about.png | Bin 1223 -> 2725 bytes src/views/diary-boxes.tpl | 8 +- src/views/fashion.tpl | 6 +- 31 files changed, 616 insertions(+), 71 deletions(-) create mode 100644 Dockerfile create mode 100644 src/articles rename src/diary/entries/{201010 => 210101} (96%) rename src/diary/entries/{200303 => 210102} (100%) rename src/diary/entries/{200909 => 210103} (100%) create mode 100644 src/diary/entries/210104 create mode 100644 src/diary/entries/210105 create mode 100644 src/diary/entries/210106 create mode 100644 src/diary/entries/210107 create mode 100644 src/diary/entries/220908 create mode 100644 src/diary/entries/220922 create mode 100644 src/diary/entries/221006 create mode 100644 src/diary/entries/221020 create mode 100644 src/static/img/FR/220727_GearsForGold_Participation_Ta5eRVr.png create mode 100644 src/static/img/ent/everythingscomingtogether_home.png create mode 100644 src/static/img/ent/rpgachievement_KnowledgeBaseDiagram.png create mode 100644 src/static/img/ent/rpgachievement_octopus.png create mode 100644 src/static/img/ent/rpgachievement_samepicture.png create mode 100644 src/static/img/ent/skillsarentamanor_SkillDMV.png create mode 100644 src/static/img/ent/skillsarentamanor_SkillDMVFlow1200.png create mode 100644 src/static/img/ent/skillsarentamanor_SkillManor.png create mode 100644 src/static/img/ent/skillsarentamanor_SkillManorFlow1200.png create mode 100644 src/static/img/nav/RingOfFire.jpg create mode 100644 src/static/img/nav/RingOfFirethumb.jpg diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..119bd1c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM python +RUN pip install bottle +WORKDIR /app +COPY src/ . +EXPOSE 9001 +ENTRYPOINT python3 index.py + diff --git a/src/articles b/src/articles new file mode 100644 index 0000000..1fd4dd4 --- /dev/null +++ b/src/articles @@ -0,0 +1,24 @@ +new entry every 2 weeks on thursdays +new summary every month (doesn't count as one of the entries) + +everything's coming together: a new website - new website announcement, plans for the future +gator swimsuit - full design process from concept to sewing +skills aren't a manor; they're the DMV - skill system redesign +the achievement system is the central nervous system of my game (part 1) - defining achievements in Blessfrey +designing an achievement system (part 2) - diagramming the achievement system +no-legs the cat - demo announcement +animal parade - collection announcement +church girls - collection announcement +divine divinity - game journal, assess as a gamedev +arcanum - game journal, assess as a gamedev +YIIK - game journal, assess as a gamedev +FlightRising - game journal, assess as a gamedev +Verpets - game journal, assess as a gamedev +oblivion - game journal, assess as a gamedev +Goddess of Atvatabar - reading journal, assess for themes, etc +Jeremiah - some takeaways from Bible reading + + +july diary - no daily. just short summary of generalized activities. IRL stuff is okay but nothing too detailed or off-topic + + diff --git a/src/diary/entries/201010 b/src/diary/entries/210101 similarity index 96% rename from src/diary/entries/201010 rename to src/diary/entries/210101 index 6d857f1..cf45d15 100644 --- a/src/diary/entries/201010 +++ b/src/diary/entries/210101 @@ -4,6 +4,7 @@ july 28, 2022
#webdev

Everything's coming together. I've been learning a lot and think I'm finally ready to start sharing my work.

+(screenshot: Blessfrey homepage)

up and up

I've had a mostly solid horizontal slice of Blessfrey ready for a while, and this cycle of system revamps is finally able to support the sophistication of content I want. When I finish this iteration of skill systems and AI, I will be ready to make a real demo release of Blessfrey!

@@ -28,5 +29,5 @@ Maybe best practice is to stay laser-focused on a content niche, but I'm not an Don't go through the motions. If you have anything super cool like a website, don't just use it how you're "supposed" to use it. Put your stuff to work and have fun!



-Last updated July 21, 2022
+Last updated July 28, 2022

diff --git a/src/diary/entries/200303 b/src/diary/entries/210102 similarity index 100% rename from src/diary/entries/200303 rename to src/diary/entries/210102 diff --git a/src/diary/entries/200909 b/src/diary/entries/210103 similarity index 100% rename from src/diary/entries/200909 rename to src/diary/entries/210103 diff --git a/src/diary/entries/210104 b/src/diary/entries/210104 new file mode 100644 index 0000000..9bb22ed --- /dev/null +++ b/src/diary/entries/210104 @@ -0,0 +1,42 @@ + +

the achievement system is the central nervous system of my game (part 1)

+april 2, 2021
+#gamedev #gamedesign #achievements #world-progression #character-progression
+
+

What's the difference between winning a trophy or earning a quest reward for killing 10 rats? Probably nothing.

+(meme: “Corporate needs you to find the differences between this picture and this picture” for Dragon's Dogma achievements like “Defeated an evil eye” and “Defeated 3,000 enemies” vs. quest journal entries like “Slay 25 crows.”)
+

In this series, I'll discuss how to design an achievement system. Mine is for an RPG, but it should work for a variety of achievements and game genres. I won't discuss integrating with Steam or other platforms, but they have their own documentation.

+
+

platform achievements, quest rewards: there's no difference

+

Achievement is a rather nebulous term for gamers, but it's usually defined as an objective that creates a metagame. Devs offer them as a nudge to explore the full depth of games and seek out hidden secrets. For example, Portal's Transmission Received achievement turns the physics puzzle game into a game of hot or cold using radios you may not have even known were there. Most games' achievements look more like an extension of the quest journal than a metagame, though. Those Dragon's Dogma achievements in the image above are indistinguishable from notice board quests. They are practically unavoidable within a couple of hours of standard play.

+
+

Whether your achievements are meta or not, they can be earned through almost any in-game mechanic or system. (Unless they're so meta, they're completely external to the gameplay like The Stanley Parable's Go Outside achievement: don't play for five years.)

+
+

Unlocking an achievement usually awards a trophy or gamer points. In a way, increasing an in-game score is not unlike triggering a "quest complete" popup. An "event" occurs, and a "reward" is given. Some games offer something more tangible alongside their achievements, like a new game mode or item. The hat merchant in Stardew Valley will sell new hats for each achievement earned.

+
+

So not only does a robust achievement system need to be listening to the other game systems, it needs to be able to be able to interact with them. A system with that kind of power can do a lot more than notify you of achievements and add new hat merchandise - that's central nervous system material. It could progress the state of the game world depending on player actions.

+
+

blessfrey's achievement system doubles as the character/world progression system

+

Blessfrey feeds every in-game event through its achievement system, and its reward delivery is flexible enough not only to give a trophy but to cause anything to happen in response. Beyond achievement management, it is the system responsible for all forms of character and world progression. This is how Blessfrey can be a dynamic and responsive game. After all, if a system can dish out a trophy for killing 10 rats, it isn't too much of a stretch to say it could trigger a quest completion, unlock a codex entry, or teach the player a new skill. And if it can do that, why not something more dramatic? Killing the last 10 rats could be a turning point in the game world, putting the player on the post-rat timeline and changing all maps, NPCs, and quests to reflect the newly rat-free society.

+
+

I don't even think that last one is too silly. Games are all about making choices, so ideally, the world should always be responding. The only issue is scope, both in terms of developer workload and maintaining a coherent game vision. Thankfully, creating a system capable of anything is no problem, though. I'd prefer to be my only limitation, not my progression system.

+
+

what is it going to look like?

+

So realistically, how do I plan to use this system?

+
+

Obviously, the completion of a quest will be technically identical to an earned achievement, as will codex entries and level up rewards. They just won't be visible to the player or cause any trophy popups.

+
+

More abstract things will count as achievements, too, like skill acquisition. Blessfrey revolves around skills, so it would be cool if skills were unlocked in a meaningful way through the achievement system. I plan to have them learned through gameplay via a variety of different methods, so skillhunting feels more like exploring than grinding. Maybe the Fire Resistance skill could be learned by standing in lava for 2 minutes, by eating crème brûlée flambé (without blowing it out), or by taking fire damage in combat. Your time spent aflame will be the event needed to unlock the Fire Resistance skill achievement. Then whenever you check your Skill Library, it knows which skills you've unlocked by checking your achievements.

+
+

World progression will also be tied to this system. Spending $1000 at the mall could trigger a new store to open. Selling too many dungeon items to a merchant could cause him to become suspicious of where you come across them, changing your dialogue options or starting a quest. Even the UI could be tied to this system. Maybe the UI displays increasingly more detailed information when you hover your mouse over a slime as you hit different thresholds of slime kills.

+
+

I'm not kidding when I say everything is an achievement, though. When a skill is used, each stage of skill progression is doled out by the achievement system. It will prepare the skill for action, exact any skill costs, listen for required conditions to be met, and apply skill effects on behalf of the skill. Basically, skill use and the completion of each phase is an event, and triggering the next phase of skill progression is the achievement. The skill itself barely does anything besides provide information to the achievement system.

+
+

The more systems mediated by the achievement system, the better, I say! Letting systems run amok and modify each other directly causes unexpected problems all the time, and bringing in a middleman is such a reliable solution.

+
+

stay tuned


+

So a working definition of an achievement is something awarded in response to a player action or game event. Those actions or events could be related to any game mechanic or game system, be it combat, exploration, trading, racing, etc, so the achievement system needs to be linked to all of them. How can you possibly design a system that is distinct from yet deeply intricated in every other system? In part 2, we'll do just that! Keep reading.

+
+
+Last updated July 28, 2022
+
diff --git a/src/diary/entries/210105 b/src/diary/entries/210105 new file mode 100644 index 0000000..b237c00 --- /dev/null +++ b/src/diary/entries/210105 @@ -0,0 +1,54 @@ + +

designing an achievement system (part 2)

+april 2, 2021
+#gamedev #gamedesign #achievements
+
+

Designing an achievement system without any octopus tangles.

+(illustration: an octopus tangling up UI, Dialog, and other game systems.)
+

a trusty mailman

+

Octopus-tangling is a major design concern for a system that is so interconnected with every other system. I could scatter achievement code through every other system, but that would be a problem if I ever need to make a fundamental change to the achievement system. Also, tacking achievement code everywhere will make the other systems cluttered.

+
+

Instead, Blessfrey's achievement system is broken into three main, self-contained pieces: event handlers, the Knowledge Base, and the MessageBus.

+
+

Let's define the terms:

+
+
+

Essentially, there is a database that stores all the achievements in the game, alongside a boolean value for locked or unlocked and some contextual information such as when they were unlocked. There are event handlers that wait for events to happen to unlock achievements and event handlers that wait for unlocked achievements to pay out rewards. Every event is filtered through the MessageBus and sent out to the relevant entities. This way, the only achievement code scattered everywhere are single MessageBus.subscribe("topic") lines.

+
+

an example

+

Let's say you get an achievement for finding the Nurse's Office. The moment the player loads into the Nurse's Office, data will zip back and forth between the MessageBus and the nurse's office object, different event handlers and the Knowledge Base.

+ + (diagram: a zigzagging depiction of the list below.) +
+
    +
  1. (Event Handler) At ready, event handlers call the MessageBus and subscribe to topics.
  2. +
  3. (Nurse's Office) The player enters the Nurse's Office. The room object sends itself to the MessageBus.
  4. +
  5. (MessageBus) Receives room object + sends it to all event handlers subscribed to the "place_entered" topic.
  6. +
  7. (Event Handler) NursesOfficeEntered receives room object. If the room is the Nurse's Office, send its corresponding knowledge key to the MessageBus. It can also verify pre-requisites and gather additional data for the Knowledge Base. This way, the system supports anything I'd like to track about when or how knowledge was learned.
  8. +
  9. (MessageBus) Receives the knowledge key + sends it to the Knowledge Base.
  10. +
  11. (Knowledge Base) Finds the knowledge identified by the incoming key. "Learns" by setting that knowledge to true and filling in additional fields if extra data was sent. Sends the knowledge key to the MessageBus.
  12. +
  13. (MessageBus) Receives the knowledge key + sends it to all "learned" event handlers.
  14. +
  15. (Event Handler) KnowledgeLearned receives the knowledge key + calls code for any changes resulting from learning this knowledge. Maybe you'll get a Steam achievement, but if the Knowledge Base was being to facilitate game progression, a quest could update, the dialog system could unlock the option to ask about the Nurse's Office, or you could gain a Codex entry about the new location. The changes can be conditional, too, so the handler can track whether all necessary keys have been received before enacting the change.
  16. +

+
+

To use the achievement system for cyclical world events, you could trigger knowledge to be "forgotten" or ultimately set back to false in the Knowledge Base. This way, the phases of an event could begin anew.

+
+
+

summary

+

Achievements can come from any combination of in-game actions, so an achievement system should be designed separately from the rest of the game. I achieve this through a couple of separate objects.

+
+