Path-of-Terraria / PathOfTerraria

GNU General Public License v3.0
1 stars 3 forks source link

Ravencrest - The Library #199

Open CollinHerber opened 3 months ago

CollinHerber commented 3 months ago

Created from the Parent Issue https://github.com/Path-of-Terraria/PathOfTerraria/issues/170

The overall goal of this is to have the ability to have a structure that is prebuilt into the world of Ravencrest

Alaric - The Wizard NPC

A npc should be placed inside this structure that is called "The Scented Quill" If we don't have a sprite yet we can use the Wizard npc temporarily image

Elara should have a dialog menu where accept a test quest and sells a few of the starting magic weapons. They should be common rarity when purchased.

Starting Magic Class Quest

Alaric mentions that one of the prized books from his collection was stolen by a Goblin during a recent attack and he is worried the secrets inside may reveal strong magic to the goblins. He asked that you retrieve it from them.

Once the quest is accepted all goblin types will now have a 1/10 chance to drop the "Alaric's Book" Item.

Bringing back the book will complete the quest.

Upon returning the book Alaric will teach the player the Nova Skill and give the player a Magic Rarity Wand

The general look and feel

It should look like a library or a place of study. It can have a more whimsical theme.

What items must be included in The Library - "The Scented Quill"

The above can be used by the player if they need to

Programming Tasks

Spriting Tasks

benj7126 commented 3 months ago

Should we have a quest rarity for items? - for this book, but also, would we at some point get a temporary item that breaks the mold of what rarities do that has to have is own rarity? we could maby also make quest rarity items un-droppable/un-deletable/suck in player inventory?

CollinHerber commented 3 months ago

Should we have a quest rarity for items? - for this book, but also, would we at some point get a temporary item that breaks the mold off what rarities do that has to have is own rarity? we could maby also make quest rarity items un-droppable/un-deletable/suck in player inventory?

That sounds like it could be useful. I don't know if we would want to force it into their inventory - I find that very annoying in a lot of games. It would be nice that if we had an event that was fired off when a Quest item was dropped however that re-added the item to the drop pool.

benj7126 commented 3 months ago

Do we want to let players share quest items? should we make a guard for only dropping the needed amount of quest items? Or do they drop until you pick it up? (Resulting in potentially giving the player multiple)

CollinHerber commented 3 months ago

I would imagine they would stop dropping as soon as the first was dropped until it was turned it; However I could see some future bugs around that such as items never dropping/being lost so it may be easier to not guard.

I was thinking that quests would be shared with players though. If one person completes a quest step everyone on the server would also complete the quest step. Completing the quest would require going and talking to the npc to get their final reward though.

benj7126 commented 3 months ago

Should quests be server linked then? If not, what if the other player hasn't unlocked the quest - or is a step behind?

Do they also get multiple rewards even still? If the quest is a turn-in of some item, that seems kinda unfair to singleplayer... Or when comparing 2 players playing together against 4.

GabeHasWon commented 3 months ago

Should quests be server linked then? If not, what if the other player hasn't unlocked the quest - or is a step behind?

Spirit does this, where quests are world-based instead of player-based. This made it significantly harder to do everything, and didn't even make the player experience better. Usually, this'd mean players don't know they have to manually collect rewards for already completed quests, skipped a lot of already completed quests, and trivialized quests where you have to find X items or kill X enemies. The only exception that makes sense to me is Main path quests, such as repairing the Blacksmith's house or getting the Wizard's tome back, which would be really easy to sync and require little work from what I can tell. But for most quests, it's just so much work for completely superfluous benefit.

CollinHerber commented 3 months ago

Should quests be server linked then? If not, what if the other player hasn't unlocked the quest - or is a step behind?

Do they also get multiple rewards even still? If the quest is a turn-in of some item, that seems kinda unfair to singleplayer... Or when comparing 2 players playing together against 4.

I wasn't imagining they would be world base but rather if a quest step was completed an event would fire off and anybody with that same quest step for the quest would also receive the completion for it. So the quests themselves are still player-bound but you can complete them in tandem.

The only exception that makes sense to me is Main path quests, such as repairing the Blacksmith's house or getting the Wizard's tome back, which would be really easy to sync and require little work from what I can tell. But for most quests, it's just so much work for completely superfluous benefit.

This makes sense to me. I'm also thinking that if a player starts up a solo world and they have the quest completed already we could run the gen that "fixes" the areas for them on world load so it was a simple transition and they didn't need to complete the quest again.

GabeHasWon commented 3 months ago

I wasn't imagining they would be world base but rather if a quest step was completed an event would fire off and anybody with that same quest step for the quest would also receive the completion for it. So the quests themselves are still player-bound but you can complete them in tandem.

How would this work if, say, I complete the quest, then on a new character you join in and start the quest? Would it autocomplete?

CollinHerber commented 3 months ago

How would this work if, say, I complete the quest, then on a new character you join in and start the quest? Would it autocomplete?

I think I would rather them need to complete the quest still and it would only progress/complete if you were in the world at time of step completion.

I think it's okay that the world looks repaired but the quest is incomplete. Since there will be other rewards tied to the completion of the quest such as skills or items that may be relevant to progression.

benj7126 commented 3 months ago

I think it's okay that the world looks repaired but the quest is (here) complete

You mean isn't here, right?

CollinHerber commented 3 months ago

incomplete

Yea sorry incomplete*

GabeHasWon commented 3 months ago

I think this makes sense. One last question, though. Per most quest NPC's quests, there'd necessarily be steps before you complete a quest that do things. For example, repairing the Blacksmith's anvil is the first step, which does do something functional and in-world that needs to be synced, but shouldn't be repeated by other players. How would we deal with that exactly? Would we just make checks manually?

benj7126 commented 3 months ago

Sure, sounds reasonable; but it still seems unbalanced, especially since multiplayer already has boss respawn timers and such. If you can have 4 players, 1 working on msq and 3 on side quests (or some working on future msq steps - but still only have to turn in one time) i just...

Couldn't we at least mark some quests as non-synced, like if we ever have "give me 100 iron and i will give you a rare sword" or something..?

benj7126 commented 3 months ago

I think this makes sense. One last question, though. Per most quest NPC's quests, there'd necessarily be steps before you complete a quest that do things. For example, repairing the Blacksmith's anvil is the first step, which does do something functional and in-world that needs to be synced, but shouldn't be repeated by other players. How would we deal with that exactly? Would we just make checks manually?

Sounds like we just change the world for all players and complete the quest (or rather quest step) for all players that have it unlocked while letting players that have yet to unlock it clear the quest themselves (even though its already fixed/repaired)

GabeHasWon commented 3 months ago

while letting players that have yet to unlock it clear the quest themselves (even though its already fixed/repaired)

This is the issue. Then we'd have to program "only do this if it's not already done" for every action like this, alongside stuff like the Blacksmith incorrectly saying "My anvil is broken this sucks" when it's not. And if we base this hypothetical dialogue off of world state, it'd be incongruous to the quest.

CollinHerber commented 3 months ago

Sure, sounds reasonable; but it still seems unbalanced, especially since multiplayer already has boss respawn timers and such. If you can have 4 players, 1 working on msq and 3 on side quests (or some working on future msq steps - but still only have to turn in one time) i just...

Couldn't we at least mark some quests as non-synced, like if we ever have "give me 100 iron and i will give you a rare sword" or something..?

We could do a check to see if they are in the same subworld at the very minimum. If the quest step was completed and they were outside the subworld it would not progress. That would reduce but not eliminate that.

This is the issue. Then we'd have to program "only do this if it's not already done" for every action like this, alongside stuff like the Blacksmith incorrectly saying "My anvil is broken this sucks" when it's not. And if we base this hypothetical dialogue off of world state, it'd be incongruous to the quest.

Not really sure I see a way around it though without there being some other. The alternative I could see if subworlds were loaded in the state based on the quest progression but now we are talking about saving multiple subworlds and that sounds awful. Having the dialog not match seems like the lesser of the evils.

benj7126 commented 3 months ago

Maby it would make sense to have a class that keeps track of world state then and the quest is just [world_state].Ravencrest.BlacksmitRepair > 2, and it just autocompletes..?

(well, lets not consider rewards for now ig...)

CollinHerber commented 3 months ago

Maby it would make sense to have a class that keeps track of world state then and the quest is just [world_state].Ravencrest.BlacksmitRepair > 2, and it just autocompletes..?

(well, lets not consider rewards for now ig...)

We could potentially have a dynamic dialog based on that as well...

"Oh were you apart of the party that repaired my anvil? Heres ur reward!"

benj7126 commented 3 months ago

We could do a check to see if they are in the same subworld at the very minimum. If the quest step was completed and they were outside the subworld it would not progress. That would reduce but not eliminate that.

I like that a lot more, yeah. (so you only beat a boss if you were actually near the boss when it died)

GabeHasWon commented 3 months ago

Not really sure I see a way around it though without there being some other. The alternative I could see if subworlds were loaded in the state based on the quest progression but now we are talking about saving multiple subworlds and that sounds awful. Having the dialog not match seems like the lesser of the evils.

I think just making main path quests universal, every player has the same progress on it, would make the most sense.

We could potentially have a dynamic dialog based on that as well...

"Oh were you apart of the party that repaired my anvil? Heres ur reward!"

This makes the most sense, yea.

[world_state].Ravencrest.BlacksmitRepair > 2

We could use a dictionary for this to make it nicer, since otherwise we'd have this class bloated with a ton of random variables.

benj7126 commented 3 months ago

I think just making main path quests universal, every player has the same progress on it, would make the most sense.

But we might want world changes in sub quest too...

We could use a dictionary for this to make it nicer, since otherwise we'd have this class bloated with a ton of random variables.

Sure - if its based on strings, though, it would feel worse to code but, you right.

GabeHasWon commented 3 months ago

Sure - if its based on strings, though, it would feel worse to code but, you right.

Would it? No way to get around it, it's not a performance issue and it's easy to understand and use.

benj7126 commented 3 months ago

Maby not? Personally I rely heavily on autocomplete, but like... you could just copy it - you would have to find the exact string first ofc. I'm not saying it's way worse, just that my mind went to fields as that seemed the easiest to just know what variable to get.

Not like I care either way, would simply be a very minor inconvenience. (Likely wouldn't use it often enough that it'd matter)

GabeHasWon commented 3 months ago

Yeah, I'd imagine you'd use the value once or twice manually in the same file and that's it, since it'd be easy to automatically save and load. If we really need to, we could always make a const list of values too.

benj7126 commented 3 months ago

Is a list of const values not more or less the same as just having class fields?

benj7126 commented 3 months ago

Yeah, I'd imagine you'd use the value once or twice manually in the same file and that's it, since it'd be easy to automatically save and load. If we really need to, we could always make a const list of values too.

Well, I was thinking that we would be using it in multiple quests, but still not that much.

GabeHasWon commented 3 months ago

Is a list of const values not more or less the same as just having class fields?

It's the same, albeit in its own file. It'd only be necessary for high usage stuff though. At that point we could also just use named fields too.

shnakamura commented 3 months ago

I'll be building the structure. Let me know if anyone has any references.