Legalizing gay marriage in Crusader Kings III with Ghidra(waffleironer.medium.com) |
Legalizing gay marriage in Crusader Kings III with Ghidra(waffleironer.medium.com) |
I'm a bit surprised by the reaction from Paradox - I assume the standard forum mod has neither the time nor skillset to assess whether any game binary patch is going to be safe, so banning them by default seems like a safe way to go, but removing even the discussion of it feels a bit overkill.
So you could say that Paradox is sensitive when it comes to people poking around or pushing boundaries.
Open knowledge is important, especially in video game scenes where elitism is a real issue, stopping people from getting into great hobbies that I'm sure many only got into due to that one person that didn't give in to elitism and bothered to listen and to answer questions.
https://github.com/nickbabcock/jomini.git
disclaimer: author
If you can add an option between Seduce and Romance of “Mine body ages and the offers are few, but my family hath bequeathed land” I’m buying this game right now.
The self-marriage part was pretty hilarious. "Do I take myself? I do!"
People are doing that in real life: https://www.abc.net.au/everyday/why-women-marry-themselves/1...
Of course, it isn't legally recognised anywhere. And I doubt it will be – marriage as a legal relationship between two distinct people has various legal consequences on property law, taxation law, etc – a self-married person is legally indistinguishable from an unmarried person. But no law against holding a party called a "self-marriage ceremony", if your guests are happy to attend it.
It's amazing how cheating or tweaking a game can spark a lot of interest professionally.
I also discovered signed/unsigned integers at this time : give yourself too much money in the save file, it overflows, and you end up with negative money in the game...
See: Matrilineal Marriages, Gender Equality, Same-Sex Relations, and Sexuality Distribution
"The core engine" doesn't do what you think it does. It's actually a running joke on /r/paradoxplaza that every time you mention Clausewitz, Meneth (or one of the other developers) pops up to explain this. It just does what every other game engine does, none of the actual game mechanics are coded into the engine. The reason why all Paradox games have so many things in common—a map-based UI, the scripting language, everything else that makes a GSG a GSG—is that game code gets copied and pasted from game to game as they start new projects. None of this is in the Clausewitz engine itself.
Funny thing though, they actually did decide (relatively) recently to centralize a lot of basic GSG functionality in one place so they don't have to keep copying-and-pasting code. The result is a library called Jomini. But this is a recent development; the only games so far that use Jomini are Imperator and CK3. It's a very new library, so it shouldn't have 15 years of legacy cruft in it.
If they made it by copy-pasting one last time, it certainly could.
If you make it equal, you remove the drama. If you force equality onto history, you falsify it.
Case in point: Edward II, king of England. He had affairs with Gaveston and Despenser the Younger, all the while in a marriage with queen Isabella. He wasn't too subtle about what he was doing, showered his lovers with gifts, prestige and land. His nobles pressured him send him away, but he was the KING, and it went back and forth a few times.
If it's in game, it should be called "sodomy".
And the first paragraph seems to confirm this interpretation:
> Crusader Kings III is a pretty impressive game. It’s impressive not only for its official content, but also for its extensive modding tools. Even before its release, I was drawn in by its promises of an improved modding experience. Relevant to this post, I was also impressed by an apparent dedication towards improved inclusivity.
Now I don't know what the creator originally wrote on there, or what the people who mentioned the patch have been saying, but it does raise eyebrows...
So no reason to get your pitchforks yet, but definitely reason enough to demand some form of explanation from paradox's side.
The game logic around this is simple enough that changing two byes fixes it, so it's not a technical issue.
What gives?
Further, not all jumps are equal; while you can certainly patch the assembly and let the assembler manage the variant selection and relocations etc., doing bytecode patching is a different story. You might have to change the jump instruction altogether depending on how "far" away the pointer is.
Also, jumps hold conditions in most cases (the exception being an unconditional jump, JMP) which means that you have to adhere to whatever state is expected at that point in time.
The NOP approach is usually the soundest and safest.
The NOPs as suggested by GP are meant to replace unwanted instructions. The purpose of a NOP slide is to serve as target area for jumps and to guide the flow of execution to a particular adress at the end of the slide, independent of where in the NOPed range a jump was actually executed to.
Instead what we actually do is 'disassembly'. We just perform the minimal processing to get the human readable form of the assembly instructions that make up the binary. This is very hard to directly get you head round, so 'decompilation tools' are then all assistants that help the manual process of understanding the structure of the program. You can see a very basic example of that in the article where the author is looking for references to an address so they can see which functions reference the string.
The gold standard tool in the space is IDA Pro. You can see in these screenshots the visual tool it gives that allows you to group chunks of assembly together into functions and keep track of the linkages to codify the person's understanding as the process continues.
The article shows snippets of decompiled C++ code. No, nobody is claiming that it is the "original" code. But it is C++ code derived from the compiled binary. Decompilation.
> Instead what we actually do is 'disassembly'.
Additionally what we do is disassembly.
It's like the difference between cleaning guano from your car with the localized application of a wet rag or by disassembling the car down to the last screw, putting all pieces in a giant dishwasher, replacing all parts that got damaged, and reassembling the car.
So the resulting patch will be significantly smaller if only a few bytes need to be changed.
There is absolutely no need to do any of that, even in cases where you write a lot of new code yourself. 99% of the time it is enough to find the code location, insert a call to a DLL (which can be created in any language of your choice) you injected and be done with it.
If they were made in ASM? Well, then it is easy, what you get from the decompiler is probably very close to what went into the compiler.
C? It gets harder, but decompilation to C is possible, you lose function names and whatnot but that is alright.
C++? Then you are 100% screwed, virtual functions, polymorphism, etc... it all becomes just a huge mess, if they used some common libraries it helps (STL, BOOST, etc...) but if they made a ton of custom classes that have virtual functions, polymorphism and composition at same time, then nothing can be done, you will get some ASM that almost looks like non-sense.
Do you mean the symbols next to "This is you"? I think you're misinterpreting them. That's the character's sexual orientation. It's always there, regardless of the character's marriage status. And gay or lesbian characters can and do marry people of the other sex even if that would not be what they want. The sexual orientation symbol doesn't change.
But it's not a good reason for why they are blocking all discussion about a mod that implements the feature in a buggy way.
As to not wanting to do the work to make it implementable without a binary patch, well, it's just not in the game. I can imagine hesitance to start modifying the game based on demands of modders for multiple reasons, even if they liked the mod itself.
As there is no adoption mechanic, same-sex relationships will lead to a game over unless you are one of the few countries that can use the House Seniority mechanic.
So I guess they never got around to implementing adoption.
Banning though...? That was weird.
If you think about this, it seems pretty obvious the reason they didn’t include adoption was that it’s overpowered. The CK series is all about managing dynasties, so the randomness of reproduction is a major game mechanic, one of the primary sources of problems and challenges. Adoption would totally negate all of that.
Like, if Henry VIII could just have adopted a son, his whole story would have been so much more straightforward! :)
(None of which really justifies the Paradox response, of course, since adoption isn’t necessary for having same-sex marriages (even player ones) and not losing.)
But I look forward to the woke brigade assuming the devs hate the LGBT community, and showing up with virtual pitchforks... /s (Disclaimer: I support the struggles of the LGBT community, but I do have a problem with stupid extremist unthinking zealots, and there seems to be plenty of them everywhere.)
No, you play on as your heir, which may be your uncle or some distant relative. This may even be your liege.
(also, there is the possibility your character will cheat, sire a bastard, and then have the bastard legitimized)
I personally wouldn't want a seemingly historically accurate (ish) game to present the churches of the age as being okay with same sex marriage when they weren't. Although being able to toggle it on in the settings would be cool.
I'm guessing it's just more or less something they didn't get around to implementing. Perhaps they wanted to tackle it in a future patch or DLC (I can see this happening if turning this on somehow led to buggy behavior in other areas)
https://theconversation.com/a-thousand-years-ago-the-catholi...
It is as though one attempt to translate the ranks of entirely different historical military structures.
Though, such is also often done, such as the “Kings” of Rome which were elected and had a co-ruler.
In any case, one might for instance argue that a male Japanese samurai in 1800 could be “bound” to both a male and a female at the same time, but only one of each, but only the latter union is traditionally translated as “marriage” for “reasons” even though the former comes no less close. In act, the former union was typically more so one of love, and the latter more so one of business.
No Christian cultures, obviously.
Presumably the AI would have the ability as well, and then you would have to start coding some restrictions to avoid a dynasty simulator spanning 100s of years going off the rails and then you'll be in for all sorts of progressive political wrangling.
Frankly if it was me I'd have stayed well away from it as well.
Also, Paradox have not a great track record of balancing things or maintaining quality straight out of the gate with their games anyway. I do love their games though.
And as an aside the game had homosexuality and so assuming there was some conservative stance on the part of the game developer appears ill founded.
> You can make same-sex relations acceptable, but marriage will still only be opposite due to historical constraints.
Other than their official stance, I wonder if it's because they'd need to script in the in-game church's (presumably negative) reaction to this. Also there doesn't seem to be adoption in the base game, so maybe they didn't want to hand the player a quick path to a game over?
Because the love/sex/reproduction angle was separate from the marriage angle, the game already has very deep support for all variants of human relationship when it comes to lovers, concubines, and uh, other special situations and it's very historically accurate. Homosexuality among nobles was not uncommon in the middle ages and the game supports this directly, but marriage had nothing to do with love or sex.
I went to Glitterhoof's chambers and gave him a good tumble. It is good to be the king.
Or maybe it's just a simulator of dark ages where same-sex marriage just wasn't. Go ahead, point out my wrong usage of "dark ages".
I have zero familiarity with the game so am purely considering the title here.
> it became clear from statements both on the forums and off of it that while the concern was noted, fixing the issue would be difficult, and it wasn’t a current priority.
Doesn't look like it's that easy.
It doesn't fill me with joy that a 2020 game would make that choice.
Also the choice to have characters default to open homophobia, and for that to be used as a positive in promotional material, is not an indicator of a gay-friendly organisation.
Occam’s razor suggests they built a historical game and just ended up embedding some in-game cultural background in the game engine. As others pointed out, dealing with same-sex marriages affects several aspects of the game, particularly dynastic rules.
> It doesn't fill me with joy that a 2020 game would make that choice.
You are working from your assumption, here. We really have no idea how it ended up that way.
> Also the choice to have characters default to open homophobia, and for that to be used as a positive in promotional material, is not an indicator of a gay-friendly organisation.
I find it interesting that you genuinely feel that. If anything, it tells a lot about how pervasive violence is in our societies. The game is full of back-stabbing, lies, cheating, poisonings, forced marriages, the occasional war, and yes, hate and irrational beliefs. Not much of it is moral, and yet you’re not pained that the developers might be enthusiastic about smothering babies.
It is a game set up in Europe in the Middle Ages. Hardly the most progressive environment. If you want to build a tolerant utopia, Cities Skylines is probably a better game. It is also great, but you might also like the occasional opportunity to be a ruthless, amoral, power hungry arsehole every now and then, regardless of your personal situation IRL.
I don't play Crusader Kings, was more curious about the technical bit, but it would be a shame to not be able to release what seems like a quazi-historical game with fairly different cultural norms by default.
Thanks to Ollydbg, I just had to open the executable, find the error message and change a JZ to a JNZ *. Incredibly easy if you know how to, but you look like a cool HACKERMAN to everybody else.
Sadly, my professional life nowadays as a full stack engineer is much less glamorous than cracking software for street cred.
* A NOP would have been preferrable in retrospect, though I like the idea that with my patch you'd get locked out iff you have the hardware key.
imho the thing to do is take OPs suggestion, Paradox should make gay-marriage possible but have people refer to it in variable ways. Some egalitarian societies can call it marriage, others sodomy, etc. And then add other cross-cultural restrictions too, where civilizations may not recognize bi-religious or bi-racial marriages for various reasons.
In other words don't minimize the issue, lean into it in a CK way, deeply and unsettlingly.
- https://github.com/eteran/edb-debugger
Other tools you might like...
- https://github.com/longld/peda
- https://github.com/Gallopsled/pwntools
And of course, Ghidra, that means no mention.
> You are working from your assumption, here.
I can rephrase: "It doesn't fill me with joy that any game company in 2020, particularly one known for encouraging modding, would hard-code marriage as between a man and a woman"
What's the difference? The outcome is the same.
You have the ability to arrange marriages as King or Queen. Just as if you could adopt, you could dilute the power of your enemies by arranging same-sex marriages that can have no legal heir.
Note that this was unintentional ;)
Apparently one can marry a piece of furniture with the scripting language, so long as the sex be appropriate.
What's an anachronism in a sea of many others, if you wish to have them in your personal save games. And if you don't, you stick to whatever is historically accurate.
Not having the foresight to be aware of this matter and the issues that come with it(going as far to be be especially exclusive) as a game studio in 2020 is what they should think about the next time they set out to make a game like this.
It's far more than a one-byte modification.
Not counting the fact that a change like that would need to be more thoroughly QA-ed to make sure it doesn't break something at some point.
You don't need to do any of the above, everything else you mentioned is something that can be done in the scripting language. The community will do it for you. You just have to hide a toggle somewhere.
Maybe games just shouldn't be rushed out this much either.
That's some bad advice. ToS are irrelevant only if you don't expect retaliation from ToS owner, or the costs are trivial.
> Open knowledge is important, especially in video game scenes where elitism is a real issue
Open knowledge? This is reverse engineering someone's cash cow. Kinda like claiming Win 10 code is open knowledge.
Video game scenes? Elitist? It's just a silly option in some medieval sim. There are other games that allow these kinds of things. Massive chalice for example.
By that stretch, why not complain Hearts of Iron don't allow you to create a third Furry side in WW2?
Or if you really want to be part of video game scene make your own. But I doubt you'd open source it. It takes monumental effort.
Did you see indie games? It's veritable farmers market of small games.
I have minted a few very active video game scenes with a good culture, open codebases and devs that are happy to help and introduced many people to reverse engineering that wouldn't otherwise have gotten into it, and it's really not as hard as you make it seem. Good resources are easy to write when you're passionate.
You just don't have to be so bitter all the time :)
> Kinda like claiming Win 10 code is open knowledge.
It arguably is and you can plop any Windows binary into Ghidra or IDA and learn from it. There's a huge amount of books and free information on NT internals on the internet.
It's the same with games, just that you might be more invested in your favorite game than in NT internals.
Sure. Nice of you to assume I haven't made any games, and put words in my mouth.
So to repay the kindness, I'm going to assume your games weren't on scale of Paradox games. Because those games shave man decades. That means collaborative effort on a longer timescale. That means people sacrificed their time to make this. And people need to eat.
> It arguably is...
Arguably you could open a beer bottle with your eye. That doesn't make your eye a bottle opener.
In same vein, just because you can reverse engineer something doesn't make it open source.
I'm not bitter, just realistic. Poking a sleeping lion isn't guaranteed to kill you, it's just a stupid thing to do. Especially when you are way weaker than a lion and within his claw's reach.
You can read and change your copy, regardless of what the ToS says. The owner of the game can retaliate, this is not law after all.
Moment you start open sourcing someone's game behind their back, is when they get defensive.
Not right after you were refused permission though, that's too obvious.
Homosexual activity cannot result in biological children so there was really never any society that considered anything like homosexual marriage until our own. The main reason for marriage was to control sexual unions and the children who might result from them. In societies which had marriage (many had no such concept) homosexual marriage didn't make much sense.
The wikipedia article on historical same-sex unions mentions that some cultures had rituals around cementing homosexual relationships but those wouldn't be considered the same as marriage, they'd be more like any pre-sexual / pre-relationship rituals. Marriage typically is about the sharing of finances, responsibilities, the raising and rights of children, etc. And none of the examples in the wikipedia article on historical same-sex unions concerned any of these.
I'm not sure that the points you're making about shared finances are particularly important, or even true, based on this. But I'm not a historian.
Interestingly, the vast majority of countries that now permit gay marriage have Christian histories.
Since this is a digital world, hacking doesn't have to lead to a loss for the creator. It can be done for your own intellectual pleasure and exploration. But making it available online to the general public is no longer exploration. So depending on the case you no longer have the moral cover of "I was just exploring".
In this account of the relationship between two men they are termed in quotes as "husband" and "wife" to imply sarcasm . They were not literally considered with seriousness to be married by their society the way we consider men to be able to do to each other now.
Marriage, in societies where it existed often served two functions: binding families and providing for the legal rights of children. Unions of lovers did not do either of these.
Many ritualized unions of a same-sex variety in history were of the latter type and those of the former would not likely have been seriously recognized by the outward society. There isn't a strong record of that anyways.
Why not? I'd argue the opposite: that making something available online to the general public is the first step toward maximizing exploration - in particular, enabling exploration beyond the limits of your own imagination/ability.
This is the point of contention though. In EU courts have ruled over and over and over again that you cannot be bound by terms set AFTER the purchase of any software. As a result, EULAs are pretty much worthless, because they are presentented post-purchase.
If you went to a store and bought a copy of this game then that's it, you haven't agreed to anything, and you own a copy of it and you can do almost whatever you wish with it. You cannot make further copies and sell those because that's governed by copyright law, but modifying the binaries to do what you want them to do? Absolutely fine.
It's like with cars - obviously someone put a huge amount of work into making them, they contain a huge amount of software in them, yet the idea that the manufacturer tells you what you can or cannot do with it after purchase is ridiculous(and yes, I know some companies like Tesla are already trying).
Thanks for the European perspective. Not a big fan of EULAs myself, especially ones where the cost to properly analyze by your own lawyer is likely much greater than the value of the software itself, which is the case for most consumer software.