Page 4 of 7

Oxygen Not Included

Posted: Wed May 23, 2018 8:34 pm
by BringChaos
[URL]https://fearlessrevolution.com/threads/oxygen-not-included.2694/page-2#post-25242[/URL]

Seems like this post from 6 months ago works on v267379. Has anyone asking for updates even tried it?

Oxygen Not Included

Posted: Wed May 23, 2018 9:23 pm
by pahbi
SunBeam, post: 46740, member: 12587 wrote:In my days, people were adapting to the game version the table was conceived for; nowadays though there's constant whining over updates...


I saw that the OP script had something to do with mono, so I poked around with oxygen not included and cheat engine, and was browsing the mono stuff, but I couldn't figure out how OP made the connection between mono and what he or she was writing to memory.



Its pretty interesting though. I'm gonna go poke around and see if there is a tutorial or something to read up on.



- P

Oxygen Not Included

Posted: Wed May 23, 2018 9:59 pm
by BringChaos
[QUOTE="pahbi, post: 46765, member: 17549"]I saw that the OP script had something to do with mono, so I poked around with oxygen not included and cheat engine, and was browsing the mono stuff, but I couldn't figure out how OP made the connection between mono and what he or she was writing to memory.



Its pretty interesting though. I'm gonna go poke around and see if there is a tutorial or something to read up on.



- P[/QUOTE]

The author only uses mono to load a symbol list for addresses. The intent is to inject into named Mono functions in Assembly-CSharp.dll.

E.I MinionStartingStats:GenerateAttributes+25b rather than doing an AOB scan for the opcodes. You can browse classes in Mono -> Dissect Mono

Oxygen Not Included

Posted: Thu May 24, 2018 1:43 am
by pahbi
Does that make the table more future proof than a aob scan?



- P

Oxygen Not Included

Posted: Thu May 24, 2018 1:04 pm
by BringChaos
[QUOTE="pahbi, post: 46777, member: 17549"]Does that make the table more future proof than a aob scan?[/QUOTE]

If the developer is not sabotaging this method yes. After a year the only thing that changed was mov rax,[rbp-00000158] became mov rax,[rbp-00000140] in the GenerateAttributes+25b for the Super Duplicate Cheat. It also makes updating the table much faster if the devs only tweak a function/pointer a little. This method is also faster for injecting since AOB sometimes takes awhile to scan.

Oxygen Not Included

Posted: Thu May 24, 2018 3:19 pm
by SunBeam
[USER=14031]@BringChaos[/USER]: "If the developer is not sabotaging this method yes." - wow; it's not the developer's call to "sabotage" whatever; it's how the code is compiled, therefore the compiler's fault. And this can change based on random race conditions, they don't really need to add something in the function itself to change.

Oxygen Not Included

Posted: Thu May 24, 2018 4:10 pm
by BringChaos
[USER=12587]@SunBeam[/USER] The IL code for this game's base functions has hardly compiled any differently after a year of development. Sure the frame/stack pointers get changed randomly based on the flow into/around a function even if that function does not get changed. I understand why it happens and it has hasnt been a real issue for this game. Most functions in this pop general registers at the start and thus the compiled code does not change much at all.

I have seen developers add multiple redundancy checks, multi-threaded failure to obfuscate what set it off or even taking what was once a simple xmm read and write into a 2000 line mess all in response to an asm injection that was developed. Some compilers have obfuscation security options to make it difficult to read and follow. Thats what I mean by sabotage and developers can do these things on purpose. Why use a symbol thats obfuscated randomly every patch over an aobscan? He asked to compare I think he got a reasonable answer.

This engine and particular game however are very gentle for the technique he is asking about. I'm not new, I just like to keep to myself.

Re: Oxygen Not Included

Posted: Wed Oct 31, 2018 5:34 pm
by Csimbi
I decided to try this game again.
Here is a table I built. It's the "debug" version so it should be easier to update for anyone interested in the future.
It includes a few scripts (I kept them separate for now), important code locations, structures and so on.

A few words on those scripts:
- aobCellMassGrabber; for devs only. It gives you the visual pointer for a cell you clicked (which, in turn can be used to track down the actual grid in the cell later - the grid is a massive array).
- Diable CE HotKeys LUA script; disables CE's hotkeys. Not specific to this game, I just like to disable hotkeys in some CE instances when I play multiple games so the hotkeys don't interfere with the games I want to leave alone.
- aobAttributeGenerator; enable and your newly created duplicants' random stats will be generated from a much bigger pool.
- aobXPCalc; enable and duplicants assigned to jobs gain job-related experience faster.
- aobManualGeneratorTick enable to make manual generators super efficient (you can recharge massive battery arrays in just a few secs).
- aobAIAmountUpdater; this is comparable to pox991's vital stat script; in general, it keeps a bunch of duplicant vitals up so you can focus on base building instead of people management.
- aobDebugKeyTester; enable this to enable debug mode/keys.
- aobMeteorBombardmentToggle; enable this to have no meteor showers.
- aobConduitBoilCalc; enabling this won't cause damage to the pipes when the liquid inside starts boiling.
- aobConduitBoilEmpty; enabling this won't empty the pipes when the liquid inside starts boiling.
- aobConduitFreezeCalc; same logic as boil.
- aobConduitFreezeEmpty; same logic as boil.
- aobOverCalc*; there are two of these. One is for machinery overheat and the other is for electric wire overload - these scripts prevent damage for either one. The thing is the code is identical in both functions so you never know which one you enable ;-) Enable both for best effect.

Note: most scripts you can enable after you loaded a save, except the last two. These two need the game running a bit (so a machine or a wire does get damage).

As usual, no support.
Good luck!

Props to TechnoJacker

Update #1
Meteors are a pest, so I added aobMeteorBombardmentToggle.

Update #2
I tried filling up a rocket's hydrogen liquid tank and guess what.
The hydrogen starts boiling inside the insulated pipe (!), causing damage to the pipe and leaking all the gas.
Well, no more because I added aobConduitBoilCalc and aobConduitBoilEmpty ;-).
While at it, I also added aobConduitFreezeCalc and aobConduitFreezeEmpty - logic is the same there.

Re: Oxygen Not Included

Posted: Mon Nov 19, 2018 9:14 am
by mulrich
Several or all of the duplicant vitals cheats crash the game.

Re: Oxygen Not Included

Posted: Fri Jul 26, 2019 9:54 pm
by STN
I love this game and play it a lot. Here are a few cheats i made for myself, thought i'd share them with you guys :D
  • Super Duplicants(On Generation) - Fixed Pox's script. All credits to him for this. Very useful when printing new dupes or new game.
  • Enable Debug Menu
  • Full Breath
  • No Stress
  • Incubator Egg - Eggs will incubate to 100% instantly in the incubator
  • Gain Skill Points - Change the value to 1 to enable this, it will automatically disable after adding a bunch of skill points to your dupes. Change to value to 1 again if you want more skill points to be added.
Have fun :)

Re: Oxygen Not Included

Posted: Sat Jul 27, 2019 3:49 am
by drunksanta
STN wrote:
Fri Jul 26, 2019 9:54 pm
TY

Re: Oxygen Not Included

Posted: Thu Aug 01, 2019 1:41 pm
by Gine
Super Duplicants is not working game will be crashing

Re: Oxygen Not Included

Posted: Fri Aug 02, 2019 1:50 am
by ONI_Player69
STN wrote:
Fri Jul 26, 2019 9:54 pm
I love this game and play it a lot. Here are a few cheats i made for myself, thought i'd share them with you guys :D
  • Super Duplicants(On Generation) - Fixed Pox's script. All credits to him for this. Very useful when printing new dupes or new game.
  • Enable Debug Menu
  • Full Breath
  • No Stress
  • Incubator Egg - Eggs will incubate to 100% instantly in the incubator
  • Gain Skill Points - Change the value to 1 to enable this, it will automatically disable after adding a bunch of skill points to your dupes. Change to value to 1 again if you want more skill points to be added.
Have fun :)
With the duplicity save editor not working, I came here looking for something to help out and was super exited when I found your updated table from just a few days ago! But, of course, they just did their final release update and now the super dupe function just crashes the game. I'm not familiar enough with how it works to understand how to fix it. Would you be kind enough to take a look and see if you can figure it out? It would be appreciated, thanks so much.

Re: Oxygen Not Included

Posted: Fri Aug 02, 2019 2:01 am
by STN
ONI_Player69 wrote:
Fri Aug 02, 2019 1:50 am
With the duplicity save editor not working, I came here looking for something to help out and was super exited when I found your updated table from just a few days ago! But, of course, they just did their final release update and now the super dupe function just crashes the game. I'm not familiar enough with how it works to understand how to fix it. Would you be kind enough to take a look and see if you can figure it out? It would be appreciated, thanks so much.
Sure, i love to play this game. What other cheats are broken?

They completely redesigned the character generation screen so i hope a super dupes script can be made again. Will take a look when i get on my PC.

Re: Oxygen Not Included

Posted: Fri Aug 02, 2019 2:56 am
by Zanzer
Does this achieve the desired effect without breaking anything else?

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
  <CheatEntries>
    <CheatEntry>
      <ID>73</ID>
      <Description>"Set Starting Attributes to 99"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscan(attributes,48 63 09 44 03 C1)
alloc(newmem,$1000,attributes)

label(code)
label(return)

newmem:
  mov dword ptr [rcx],#99
code:
  movsxd  rcx,dword ptr [rcx]
  add r8d,ecx
  jmp return

attributes:
  jmp newmem
  nop
return:
registersymbol(attributes)

[DISABLE]
attributes:
  db 48 63 09 44 03 C1
unregistersymbol(attributes)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 2790EC464F4

2790EC464C9: 4C 8B 8D 58 FE FF FF           -  mov r9,[rbp-000001A8]
2790EC464D0: 4D 8B 49 58                    -  mov r9,[r9+58]
2790EC464D4: 4D 8B D1                       -  mov r10,r9
2790EC464D7: 41 83 3A 00                    -  cmp dword ptr [r10],00
2790EC464DB: 4D 63 49 38                    -  movsxd  r9,dword ptr [r9+38]
2790EC464DF: 41 FF C9                       -  dec r9d
2790EC464E2: 4D 63 C9                       -  movsxd  r9,r9d
2790EC464E5: 44 39 49 18                    -  cmp [rcx+18],r9d
2790EC464E9: 0F 86 FC 05 00 00              -  jbe MinionStartingStats:GenerateAttributes+9db
2790EC464EF: 4A 8D 4C 89 20                 -  lea rcx,[rcx+r9*4+20]
// ---------- INJECTING HERE ----------
2790EC464F4: 48 63 09                       -  movsxd  rcx,dword ptr [rcx]
2790EC464F7: 44 03 C1                       -  add r8d,ecx
// ---------- DONE INJECTING  ----------
2790EC464FA: 48 8B C8                       -  mov rcx,rax
2790EC464FD: 48 83 EC 20                    -  sub rsp,20
2790EC46501: 83 38 00                       -  cmp dword ptr [rax],00
2790EC46504: 49 BB E0 56 15 15 79 02 00 00  -  mov r11,System.Collections.Generic:Dictionary`2:set_Item
2790EC4650E: 41 FF D3                       -  call r11
2790EC46511: 48 83 C4 20                    -  add rsp,20
2790EC46515: 41 FF C7                       -  inc r15d
2790EC46518: 48 8B 85 B8 FE FF FF           -  mov rax,[rbp-00000148]
2790EC4651F: 48 8B 40 38                    -  mov rax,[rax+38]
2790EC46523: 48 8B C8                       -  mov rcx,rax
}
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
</CheatTable>