Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LADX: drop rupee farm condition #4189

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

threeandthreee
Copy link
Contributor

What is this fixing or adding?

There's currently a rule that doesn't allow logic to use rupees until the player can farm them via the trendy game or the raft game. It isn't defined correctly (raft game should require feather to farm rupees), but it also just doesn't make sense as a condition. Logic already requires the player to have enough rupees to not need to farm. This rule pushes things back in logic for no real reason.

How was this tested?

Only generation so far

@ScipioWright
Copy link
Collaborator

So what happens if the player spends their rupees on hearts or some other "useless" thing?

@palex00
Copy link
Contributor

palex00 commented Nov 14, 2024

So what happens if the player spends their rupees on hearts or some other "useless" thing?

So, let me elaborate on the whole PR & also answer your question.

Currently there are 6 checks that require rupees:

  •     Location().add(FishingMinigame()).connect(mabe_village, AND(r.bush, COUNT("RUPEES", 20)))  # actual need: 20
    
  •     Location().add(ShopItem(0)).connect(shop, OR(COUNT("RUPEES", 500), SWORD)) # actual need: 200
    
  •     Location().add(ShopItem(1)).connect(shop, OR(COUNT("RUPEES", 1480), SWORD)) # actual need: 980
    
  •     mamu = Location().connect(Location().add(Song(0x2FB)), AND(OCARINA, COUNT("RUPEES", 1480))) # actual need 500
    
  •     Location().add(KeyLocation("RAFT")).connect(raft_house, COUNT("RUPEES", 100)) # actual need 100
    

The Shop Checks and Mamu are covered by having way more in logic than actually needed.
Fishing Minigame (will never be affected by ER) has a bush breaker in logic: with this one you can also farm money off of monsters.
The RAFT minigame is the only iffy one but to access it in any current iteration of ER or non-ER you'd need to luck into the edge case that the Bird Key Cave is Sphere 1 accessible (that's three entrances out of a lot) and you getting flippers Sphere 1 for it to be logically relevant. Any other case requires you to have a bush breaker already so it's guaranteed that you can farm rupees through monsters and then by proxy with the trendy minigame, etc. etc.

Essentially, we think that this is a tradeoff of ridiculous logic security versus these checks being ridiculously late into logic.

@ScipioWright
Copy link
Collaborator

ScipioWright commented Nov 14, 2024

Are the heavily inflated rupee counts not related to the fact that you can buy things in an "inefficient" order?
The 3rd and 4th ones are both 1480, and they cost 500 and 980, so clearly those two are related.

Let's say you do mamu last. You have received exactly 1480 rupees and you do not have a sword yet. You spent 980 on the expensive shop item and 200 on the other shop item.

You now have 300 rupees and mamu is currently in logic.

@palex00
Copy link
Contributor

palex00 commented Nov 14, 2024

And if you can access Mamu you have enough equipment to farm rupees either through monsters, the fishing minigame or Trendy Minigame. The game only holds 999 rupees. So even the previous solution is just a bandaid fix.

@ScipioWright
Copy link
Collaborator

ScipioWright commented Nov 14, 2024

So, what is this change actually doing then? It doesn't seem to actually bring anything into logic any earlier than before other than the Raft game?

@palex00
Copy link
Contributor

palex00 commented Nov 14, 2024

It does, actually.

All "farming" is reliant on the Events "Raft Access" or "Can Trendy Minigame" being accessible. So stuff like Shop 200 Check can never be Sphere 1, even with 800 Rupees in Start Inventory, because it required access to these. So it'll bump them up by at least One Sphere.

Plus, stuff like the Shop Checks: 200 Rupees wouldn't be in logic even with 900 rupees because it still needed some form of Bush Breaker. With this change the Shops can be in logic with just rupees.

@ScipioWright
Copy link
Collaborator

So let's say someone starts with 200 rupees in start inventory. They spend 10 on a heart or something. They now have 190 rupees and cannot afford the shop check in logic. Is this correct?

@threeandthreee
Copy link
Contributor Author

The rupee requirement for first shop item is inflated to 500, the player would need to burn 300 rupees in this scenario. Fwiw I don't love how inflated they are but it does protect against this in most reasonable cases.

@ScipioWright
Copy link
Collaborator

At the very minimum, you should consider adding a bush breaker to the Raft requirement, since as Palex said, you could get "lucky" enough for it to kill your seed.

@threeandthreee
Copy link
Contributor Author

At the very minimum, you should consider adding a bush breaker to the Raft requirement, since as Palex said, you could get "lucky" enough for it to kill your seed.

Makes sense, I've added this to the logic updates PR

@threeandthreee threeandthreee marked this pull request as ready for review December 20, 2024 20:51
@Exempt-Medic Exempt-Medic added is: bug/fix Issues that are reporting bugs or pull requests that are fixing bugs. waiting-on: peer-review Issue/PR has not been reviewed by enough people yet. labels Dec 24, 2024
@zig-for
Copy link
Collaborator

zig-for commented Jan 5, 2025

FWIW - the reason all of the checks are inflated are to cover the cases of getting the "wrong" item first.

Copy link

@kbranch kbranch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Upstream has also recently relaxed its rupee requirements a bit, to a larger degree than this PR is doing. So far the reception has been positive. The very small chance of a player getting soft locked is worth making rupee-locked items more important, imo. Rupees are also less likely to become junk items if they're not as frontloaded.

The player also always has the option of starting a new save if they do get stuck - softlocks should generally happen pretty early if they're going to.

@NewSoupVi
Copy link
Member

I find this way of doing rupee logic quite confusing - Why exactly is access to a minigame required to farm rupees? Can't you just go kill monsters in the overworld? Why is the logic for rupee checks not just "can repeatedly kill enemies"? Plus some amount of "has received rupees" to be nice

@NewSoupVi
Copy link
Member

NewSoupVi commented Feb 1, 2025

To be clear about what I mean:
This PR feels to me like swinging all the way from "overly restrictive rupee farming condition" over to the other extreme of "no rupee farming condition"

(For the record, this should be seen as a peer review, and is not blocking for this to be merged by me if everyone else approves it)

@palex00
Copy link
Contributor

palex00 commented Feb 1, 2025

To be clear about what I mean: This PR feels to me like swinging all the way from "overly restrictive rupee farming condition" over to the other extreme of "no rupee farming condition"

(For the record, this should be seen as a peer review, and is not blocking for this to be merged by me if everyone else approves it)

So this PR is a bit confusing, but let me fully explain:

There are 6 checks in the game that require rupees: Fishing Minigame (20), Trendy Minigame (10), Shop Check 1 (200), Shop Check 2 (980), Mamu (500), Raft Minigame (100).

This is the current \main\ logic:

        Location().add(FishingMinigame()).connect(mabe_village, AND(r.bush, COUNT("RUPEES", 20)))  # fishing game, heart piece is directly done by the minigame.
        trendy_shop.connect(Location().add(TradeSequenceItem(0x2A0, TRADING_ITEM_YOSHI_DOLL)), FOUND("RUPEES", 50))
        Location().add(ShopItem(0)).connect(shop, OR(COUNT("RUPEES", 500), SWORD))
        Location().add(ShopItem(1)).connect(shop, OR(COUNT("RUPEES", 1480), SWORD))
        mamu = Location().connect(Location().add(Song(0x2FB)), AND(OCARINA, COUNT("RUPEES", 1480)))
        Location().add(KeyLocation("RAFT")).connect(raft_house, AND(r.bush, COUNT("RUPEES", 100))) # add bush requirement for farming in case player has to try again

To explain, "COUNT" does also check if you have a way to rupee farm (which is defined as having a static weapon (no bombs, no bow, no powder) AND being able to access either the Raft minigame (which 3&3 pointed out is erronous already) OR be able to do the Trendy Game.

Notice how every single count (except for the fishing minigame, since that is immediately available and is thus logically the first thing you should do - but even that has a r.bush AKA enemy killing requirement) is extremly inflated.

  • Yoshi doll is +40 (to account for fishing minigame)
  • Shop Item 1 is +300 (to account for Raft, Fishing, Yoshi)
  • Shop Item 2 is +500 (to account for Mamu)
  • Mamu is +980 (to account for Shop Item 2)
  • Raft is an outlier because the initial implementation asssumed you'd be able to farm rupees inside itself - which is not possible without Feather.

It does not make sense to have a farming requirement because the logic already assumes you've obtained enough rupees (via the multiworld even! Ingame farming there's a lot of free rupees) and then some.

Especially in ER if you get unlucky and the Trendy Minigame is somewhere deep gone you're basically locked out of any money checks for a long time. And Raft farming is in itself even locked behind Trendy Minigame because you also need to pay the Raft Guy 100 every time (and again: erronously!)

So yes, this is kind of dropping "overly restrictive" to "absolutely none" because there's no need for it.

It's essentially a design decision between "No rupee farming" versus "Lots of rupee farming" and rupee farming just isn't fun.

@zig-for
Copy link
Collaborator

zig-for commented Feb 2, 2025 via email

@threeandthreee
Copy link
Contributor Author

The option to take stealing out of logic was from a vote.

Theres already a bush breaker requirement on all spending, in addition to rupees being progression and costs inflated.

It is possible to heavily misspend rupees and need to farm, but its hard to do, and the minigame requirement id argue doesnt fix it, in that going infinite on minigames is as much a skill requirement as spending rupees effectively.

Rupee overflow is a real concern and it would be nice to solve it, but again, i dont think the minigame requirement addresses that.

@NewSoupVi
Copy link
Member

Theres already a bush breaker requirement on all spending, in addition to rupees being progression and costs inflated.

I didn't see that. I thought this PR took out the bush breaker requirement as well. So then is the current logic, before this PR, checking for sword twice? 🤔

@threeandthreee
Copy link
Contributor Author

I was thinking that it was represented in the overworld logic definition but I had that wrong, its only certain cases. I'll put the free weapon rule back in.

@NewSoupVi
Copy link
Member

NewSoupVi commented Feb 3, 2025

Good ending ✧・゚: *✧・゚:*

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
is: bug/fix Issues that are reporting bugs or pull requests that are fixing bugs. waiting-on: peer-review Issue/PR has not been reviewed by enough people yet.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants