Coder Social home page Coder Social logo

Comments (19)

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

The word "loot" has a meaning in Unciv elsewhere. This is "pillage". And "in sieges and battles" has no relevanve to the issue, not really. And "exploit" is a clearer term than cheating. Still, there are much more confusing issue titles...

That said, I'm pretty sure it's simply - pillage should not be allowed in enemy land, and I'm also pretty sure it must be a recent regression... Might investigate later.

from unciv.

yairm210 avatar yairm210 commented on June 19, 2024

Pillage should be allowed only in enemy land! The repair should be limited, and I thought it was, we'll need to check this

from unciv.

SpacedOutChicken avatar SpacedOutChicken commented on June 19, 2024

I can confirm that it's possible to repair lands outside of your own borders. I take advantage of this to fix tile improvements in city-state territory if someone has been pillaging my allies, but it is also possible to repair tiles in enemy territory, allowing for endless pillaging.

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

pillage should not be allowed in enemy land

Definitely a fumble. Meant repair.

I can confirm that it's possible

As in - current Unciv, older Unciv, or original Civ5?

I'd say:
Pillage in any friendly (owned by anybody not at war with) - NO, pillage in unowned - ??? tend to yes, pillage in enemy - YES.
Repair in own - YES, repair in friendly (including allied and neutral CS, or open borders???) - yes, repair in neutral - no, repair in enemy - NO.

from unciv.

SpacedOutChicken avatar SpacedOutChicken commented on June 19, 2024

As in - current Unciv, older Unciv, or original Civ5?

Current Unciv. I don't know if it works in the original Civ V.

Repair in own - YES, repair in friendly (including allied and neutral CS, or open borders???) - yes, repair in neutral - no, repair in enemy - NO.

I can think of one case where you'd want to repair improvements in neutral territory: if you've got a road outside your borders and someone pillages it, you should be able to fix it. This might also apply to forts and roads within enemy territory, because you want to be able to fix those for your own sake.

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

you'd want

Wishful thinking should not control the rules. Certainly, we can make it so. But for Unciv, reusing the balancing decisions of the original - and simplicity are also factors. See this issue - things go wrong too easily with complexity. Or should we make every aspect of this moddable through OnlyAvailable uniques with arbitrary conditionals as much as you want? Should be possible. Volunteers to do the coding? Warning: Initial effort estimate: coding 1% testing 11% finding all edge cases and ironing them out 111%...

Heh, now I want to buy a brooklyn bridge from the queen of england....

from unciv.

SpacedOutChicken avatar SpacedOutChicken commented on June 19, 2024

At the very least, since it is possible to build roads and forts in neutral territory, it should be possible to maintain roads and forts in neutral territory. If you have to do so by building a new road or fort, that's fine, as long as you have some way of fixing things. I think that's both fair and realistic.

As for fixing pillaged improvements in enemy territory, it makes sense to disallow that, but would doing so complicate the code for the repair action?

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

build ability = maintain ability

Good argument. Also strengthens the argument for Forts&Roads to have/be-allowed-to-have different pillage/repair rules vs Farms to Academies...

would doing so complicate the code

No idea at the moment - consensus is more important, my gut feeling just tends to "no" (no repair in hostile, no matter what) but could be wrong. As for what's a good balance of efficient, "KISS", and logical - would need to dig in, not relaxed enough right now.

from unciv.

NoobTutorial avatar NoobTutorial commented on June 19, 2024

The word "loot" has a meaning in Unciv elsewhere. This is "pillage". And "in sieges and battles" has no relevanve to the issue, not really. And "exploit" is a clearer term than cheating. Still, there are much more confusing issue titles...

@SomeTroglodyte Excuse me for mistakes, english not my native language, I only try to describe situation in a few words.
Of course, it's pillage, not looting. Yeah, it's not a clear bug, maybe exploit would be a good term. But there was no variant "exploit" when i created the issue.

from unciv.

NoobTutorial avatar NoobTutorial commented on June 19, 2024

As in - current Unciv, older Unciv, or original Civ5?

@SomeTroglodyte, I don't remember I could use such exploit in original Civ5 (or Civ4/3/2/1).

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

OK, time to code this, weekend and release approaching:

Simplest common denominator?

  • Block repair altogether in enemy land.

Desirable but could get complicated?

  • Block repair in enemy land if and only if the improvement has a tangible benefit through a set of uniques: PillageYieldRandom, PillageYieldFixed, and a newly to be created one that backs the currently hardcoded healing effect...

Volunteers? Use 'assign yourself' top right.

@NoobTutorial - good first issue!

from unciv.

yairm210 avatar yairm210 commented on June 19, 2024

I think you can only see that because of your repo privilege 😜
A comment will suffice :)

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

🙈 of course assignments are collaborator-level.... But with our coder shortage, isn't there only one coder left without, Oscar?

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

...Still, if I'm still awake after my soup, my movie, my 666 miles on bike, and a summit or two - you might see someone assigned up there.

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

Looked into it, and there's too much stuff that puzzles me..
But at least it looks like @SpacedOutChicken 's argument "should be able to repair what I can build" should be no harder than my simple "no repair in hostile land".

  • Why does MapUnit.canBuildImprovement check for repair from the improvementInProgress and not its improvement parameter? Like - "yes, Legionary, you can build a Farm here, because you have any BuildImprovements unique and on the Tile there's currently a Mine being repaired???"
  • Looking through call trees shows that some automation code does not go through UnitActionType.Repair... But that would be the place to lay down these rules??? Example: automateConnectRoad - is it possible there are more?
  • Why does automateImprovementPlacer not return the success or failure of invokeUnitAction to its caller?

Otherwise, looks like one or two of the commented clauses, likely the improvementFunctions one, in the following:

        val damagedImprovement = tile.getTileImprovement() ?: return null
        val couldConstruct = unit.currentMovement > 0
            && !tile.isCityCenter()
            && tile.improvementInProgress != Constants.repair
            && !tile.isEnemyTerritory(unit.civ)  // Simple allow repair in friendly or neutral land only ??
            && tile.improvementFunctions.canBuildImprovement(damagedImprovement, unit.civ)  // Does enemy land checks through the improvement's uniques - would allow repairing forts ?? Also includes isCityCenter check
            && unit.canBuildImprovement(damagedImprovement)  // Only repair the kinds of improvements we can build from scratch ?? canBuildImprovement looks like that's not intended..

...? Also, I haven't got any saves allowing to test this!

from unciv.

NoobTutorial avatar NoobTutorial commented on June 19, 2024

@SomeTroglodyte, or maybe simply just checking tile.isEnemyTerritory(unit.civ) — and if its true — add some value to the number of turns required to repair the improvement. Of course, the number of turns added should depend on the difficulty level of the game, the speed of the game, and so on. Maybe, add a method like .getTileRepairImprovementCostTurns(tile) which returns correct value.

Over the days, I've played at different difficulty levels and game speeds. And I'll say this: even if a worker can fix an improvement in 2 turns (at the epic speed of the game), this already complicates the use of the exploit.

My main idea is not to remove the possibility of this exploit altogether, but to make the bonus of using it insignificant.

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

add some value to the number of turns required to repair the improvement

That's mod territory. We try to be faithful to some original somewhere... Only for this there's no clear sources, or are there? Hey, come to think of it, a few hours of digging in the dll sources might turn up something clear. IIRC, Unciv had 2-turn repairs long ago, so someone must have successfully argumented that was not the Civ5 way - if you find that please link.

The rest is compromising on that faithfulness and implementation detail...

Letting mods decide who can repair what where in what time - could require some new UniqueTypes...

from unciv.

NoobTutorial avatar NoobTutorial commented on June 19, 2024

That's mod territory.
Letting mods decide who can repair what where in what time

@SomeTroglodyte, from this point of view — agree and support such decision.

I've dig into undocumented Civ5 features and found that, really, worker in original Civ could repair improvements on enemy territory. Proof on Russian forum https://www.strategium.ru/forum/topic/51753-nedokumentirovannyie-osobennosti-igryi-v-tsiv5/, that's quote:

  1. Рабочие могут чинить улучшения на чужой территории.
    То есть, имея пирамиды+политику из воли, можно каждый ход на стандартной скорости чинить улучшение, его тут же грабить и восстанавливать по 25 хп. И ещё останутся очки движения, чтобы пострелять по городу, например.

translation:

  1. Workers can repair improvements on someone else's territory.
    That is, having pyramids + a policy of will, you can fix an improvement every turn at standard speed, immediately rob it and restore it by 25 hp. And there will still be movement points to shoot around the city, for example.

Now i have clear understanding this exploit was part of original mechanic of the game. So, changing this is really modder's territory.

from unciv.

SomeTroglodyte avatar SomeTroglodyte commented on June 19, 2024

OK, if this exploit was part of Civ5 - open to discussion, but I would vote fix it anyway = allow repair only where you could build the thing from scratch.

But - that link talks about BNW, and some parts (me no russkiy read) sound like they contain info that may point out other deviations of our rules from the original... Ruins no Faith until turn 20? Maybe we have that. Gifted Great People? I'm sure ours are more frequent. Then again - BNW, at least some city-state quest rules will be different from G&K which we emulate. Care to analyze and make a List of what may be worth checking?

from unciv.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.