Astroneer, an instruction is shared with tons of total different address and values.

Bloodybone

Expert Cheater
Aug 3, 2017
115
0
16
#21
squall0833 post_id=22894 time=1509561566 user_id=639 said:
Bloodybone post_id=22768 time=1509484815 user_id=7561 said:
squall0833 post_id=22754 time=1509481395 user_id=639 said:
Wow thats a bonus, i have always wanted to learn how to make something like optional cheats, always wonder how to write something like that, learn something new today,
I will look into it, thank you very very much

Right now im not infront of the pc,. Will check it out later :)

Btw how do u write those all drop down menu code? You wrote them all manually? Or is there template in CE assembly section?

I would like to learn this if there are more information on this
I wrote them manually its actualy pretty easy if you know how to :)

Edit: Also if you wan't to learn something like this you can look up tutorials like "cheat engine create your own flags"
hi again bloodybone.
just want to make sure something

cmp r15,0
jne instantcraftbp

i'm still dont really get this part,
when you're crafting something on backpack, it triggers instruction, its r15 is not 0 so it jumps to instantcraftbp:

but when you're harvesting resource,triggers instruction and its r15 is 000000001 isn't that also jump to instantcraftbp? why is it not jumping and proceed massiveresource when it's not equal to 0? then it works as intended

:?: :shock: why is the other offset dont work with cmp xxx,0 when it's not 0? but r15?
So the instacraft adress at that point in the r15 register has some "random" number so if it is not 0, what it is not than jump but the massive recources adress at that point has 0 in the r15 register so don't jump because its 0.
 

squall0833

Expert Cheater
Mar 4, 2017
58
2
8
#22
Bloodybone post_id=22912 time=1509565862 user_id=7561 said:
squall0833 post_id=22894 time=1509561566 user_id=639 said:
Bloodybone post_id=22768 time=1509484815 user_id=7561 said:
I wrote them manually its actualy pretty easy if you know how to :)

Edit: Also if you wan't to learn something like this you can look up tutorials like "cheat engine create your own flags"
hi again bloodybone.
just want to make sure something

cmp r15,0
jne instantcraftbp

i'm still dont really get this part,
when you're crafting something on backpack, it triggers instruction, its r15 is not 0 so it jumps to instantcraftbp:

but when you're harvesting resource,triggers instruction and its r15 is 000000001 isn't that also jump to instantcraftbp? why is it not jumping and proceed massiveresource when it's not equal to 0? then it works as intended

:?: :shock: why is the other offset dont work with cmp xxx,0 when it's not 0? but r15?
So the instacraft adress at that point in the r15 register has some "random" number so if it is not 0, what it is not than jump but the massive recources adress at that point has 0 in the r15 register so don't jump because its 0.
Ahh.. i see,
when the "find what writes to this address" that only shows the offset info from very first count of the instruction(offset info will not refresh), those do not mean are the same values, it could be other random numbers when instruction occur many times so it wont work in the cmp statement

r15 = is the one that is always 1 and thats why it works, the cheats now work but it cause few problems like soil cannot collect when instantcraftbp activated, or the building time for structures freezed when massive resources is active, i just fix them by adding a little bit more cmp value for structure building time and soil collect

massiveResources:
cmp r15,0
jne instaBPcraft
cmp rbp,3 //check and fix several game issues caused by cheats above (rbp for structure building time is static 3)
je code
mov [rbx+00000140],(int)138600 // Massive Resources
jmp return

this fixes all the other problem caused by the cheats, it works because the rbp i use is always the "3" right? just like the r15 = 1

now i get it, how these codes and instructions work in games

also i'm giving up doing instant soil collection, it just dont work properly, looks like there's some instruction behind it to "activate" soil canister to allow soil collecting

when i placed like 4 canisters and active soil insta fill cheat, it only fill 1 or 2, do not fill the rest of the canister unless i disable cheat

now im learning to write flag codes for drop menu :), thanks for all the help, really appreciate :D





one question about registersymbol()
if i use it to contain both address value, i need to alloc memory for that right?

lets say if i need to show health value, i need to do following:

alloc(health,4)
registersymbol(health)
health:
dd 0

somewhere
mov [health],edx (if the edx is address of the health)

unregistersymbol(health)

in table:
[health] will show address and value



in ur flag code, there is no alloc for those symbols, because you only need those symbol to contain a value without any address?

and do i need to dealloc(health) if i use globalalloc(health,4) instead?
 

jungletek

Reality Bytes
Oct 17, 2017
155
6
18
#23
squall0833 post_id=22916 time=1509567028 user_id=639 said:
in ur flag code, there is no alloc for those symbols, because you only need those symbol to contain a value without any address?

and do i need to dealloc(health) if i use globalalloc(health,4) instead?
Yeah, they're 'flags' i.e. boolean values (true or false, 1 or 0), I didn't read all of his AA script, but presumably it checks whether those flags are 1 (on) or 0 (off) to determine which cheats to activate.

Also yes, you need to deallocate any memory you've allocated.
 

Bloodybone

Expert Cheater
Aug 3, 2017
115
0
16
#24
squall0833 post_id=22916 time=1509567028 user_id=639 said:
Bloodybone post_id=22912 time=1509565862 user_id=7561 said:
squall0833 post_id=22894 time=1509561566 user_id=639 said:
hi again bloodybone.
just want to make sure something

cmp r15,0
jne instantcraftbp

i'm still dont really get this part,
when you're crafting something on backpack, it triggers instruction, its r15 is not 0 so it jumps to instantcraftbp:

but when you're harvesting resource,triggers instruction and its r15 is 000000001 isn't that also jump to instantcraftbp? why is it not jumping and proceed massiveresource when it's not equal to 0? then it works as intended

:?: :shock: why is the other offset dont work with cmp xxx,0 when it's not 0? but r15?
So the instacraft adress at that point in the r15 register has some "random" number so if it is not 0, what it is not than jump but the massive recources adress at that point has 0 in the r15 register so don't jump because its 0.
Ahh.. i see,
when the "find what writes to this address" that only shows the offset info from very first count of the instruction(offset info will not refresh), those do not mean are the same values, it could be other random numbers when instruction occur many times so it wont work in the cmp statement

r15 = is the one that is always 1 and thats why it works, the cheats now work but it cause few problems like soil cannot collect when instantcraftbp activated, or the building time for structures freezed when massive resources is active, i just fix them by adding a little bit more cmp value for structure building time and soil collect

massiveResources:
cmp r15,0
jne instaBPcraft
cmp rbp,3 //check and fix several game issues caused by cheats above (rbp for structure building time is static 3)
je code
mov [rbx+00000140],(int)138600 // Massive Resources
jmp return

this fixes all the other problem caused by the cheats, it works because the rbp i use is always the "3" right? just like the r15 = 1

now i get it, how these codes and instructions work in games

also i'm giving up doing instant soil collection, it just dont work properly, looks like there's some instruction behind it to "activate" soil canister to allow soil collecting

when i placed like 4 canisters and active soil insta fill cheat, it only fill 1 or 2, do not fill the rest of the canister unless i disable cheat

now im learning to write flag codes for drop menu :), thanks for all the help, really appreciate :D





one question about registersymbol()
if i use it to contain both address value, i need to alloc memory for that right?

lets say if i need to show health value, i need to do following:

alloc(health,4)
registersymbol(health)
health:
dd 0

somewhere
mov [health],edx (if the edx is address of the health)

unregistersymbol(health)

in table:
[health] will show address and value



in ur flag code, there is no alloc for those symbols, because you only need those symbol to contain a value without any address?

and do i need to dealloc(health) if i use globalalloc(health,4) instead?
Ok first of nice to hear and no you don't have to alloc them because newmem is already allocated and as long as the "health: dd 0"
is under the newmem its fine but you can offcourse allocate new memory but it is just not needed and if you use globalalloc you don't have to dealloc memory because globalalloc uses the same spot in memory every time.
 

Bloodybone

Expert Cheater
Aug 3, 2017
115
0
16
#25
Examples:

1:
[ENABLE]
aobscanmodule(injectionpoint,Game.exe,Array of Bytes)
alloc(newmem,$100)

label(code)
label(return)
label(health) // Label Symbol so it can be used in the script
registersymbol(health) // Registersymbol so it can be used outside of the script

newmem:

code:
mov [health],edx
mov ecx,[edx+254]
jmp return // Over jump "health"

health: // Put it under Newmem, but so it never gets "used"
dd 0

injectionpoint:
jmp newmem
return:
registersymbol(injectionpoint)

[DISABLE]

injectionpoint:
db Some Bytes

unregistersymbol(injectionpoint)
dealloc(newmem)
unregistersymbol(health) // Unregister the Symbol
2:
[ENABLE]
aobscanmodule(injectionpoint,Game.exe,Array of Bytes)
alloc(newmem,$100)
alloc(health,4) // Allocate New Memory for Health

label(code)
label(return)
registersymbol(health) // Registersymbolso it can be used outside of the script

health: // Best to put it outside of newmem
dd 0

newmem:

code:
mov [health],edx
mov ecx,[edx+254]
jmp return

injectionpoint:
jmp newmem
return:
registersymbol(injectionpoint)

[DISABLE]

injectionpoint:
db Some Bytes

unregistersymbol(injectionpoint)
dealloc(newmem)
dealloc(health) // Dealloc The Memory again
unregistersymbol(health) // Unregister the Symbol
3:
[ENABLE]
aobscanmodule(injectionpoint,Game.exe,Array of Bytes)
alloc(newmem,$100)
globalalloc(health,4)

label(code)
label(return)

health: // Best to put it outside of newmem
dd 0

newmem:

code:
mov [health],edx
mov ecx,[edx+254]
jmp return

injectionpoint:
jmp newmem
return:
registersymbol(injectionpoint)

[DISABLE]

injectionpoint:
db Some Bytes

unregistersymbol(injectionpoint)
dealloc(newmem)
Also this is for 32-bit games if you use a 64-bit game u have to change "dd 0" to "dq 0" and if you allocate memory use instead of alloc(health,4)
alloc(health,8) / instead of globalalloc(health,4) = globalalloc(health,8)
 

squall0833

Expert Cheater
Mar 4, 2017
58
2
8
#26
Bloodybone post_id=22946 time=1509583478 user_id=7561 said:
Examples:

1:
[ENABLE]
aobscanmodule(injectionpoint,Game.exe,Array of Bytes)
alloc(newmem,$100)

label(code)
label(return)
label(health) // Label Symbol so it can be used in the script
registersymbol(health) // Registersymbol so it can be used outside of the script

newmem:

code:
mov [health],edx
mov ecx,[edx+254]
jmp return // Over jump "health"

health: // Put it under Newmem, but so it never gets "used"
dd 0

injectionpoint:
jmp newmem
return:
registersymbol(injectionpoint)

[DISABLE]

injectionpoint:
db Some Bytes

unregistersymbol(injectionpoint)
dealloc(newmem)
unregistersymbol(health) // Unregister the Symbol
2:
[ENABLE]
aobscanmodule(injectionpoint,Game.exe,Array of Bytes)
alloc(newmem,$100)
alloc(health,4) // Allocate New Memory for Health

label(code)
label(return)
registersymbol(health) // Registersymbolso it can be used outside of the script

health: // Best to put it outside of newmem
dd 0

newmem:

code:
mov [health],edx
mov ecx,[edx+254]
jmp return

injectionpoint:
jmp newmem
return:
registersymbol(injectionpoint)

[DISABLE]

injectionpoint:
db Some Bytes

unregistersymbol(injectionpoint)
dealloc(newmem)
dealloc(health) // Dealloc The Memory again
unregistersymbol(health) // Unregister the Symbol
3:
[ENABLE]
aobscanmodule(injectionpoint,Game.exe,Array of Bytes)
alloc(newmem,$100)
globalalloc(health,4)

label(code)
label(return)

health: // Best to put it outside of newmem
dd 0

newmem:

code:
mov [health],edx
mov ecx,[edx+254]
jmp return

injectionpoint:
jmp newmem
return:
registersymbol(injectionpoint)

[DISABLE]

injectionpoint:
db Some Bytes

unregistersymbol(injectionpoint)
dealloc(newmem)
Also this is for 32-bit games if you use a 64-bit game u have to change "dd 0" to "dq 0" and if you allocate memory use instead of alloc(health,4)
alloc(health,8) / instead of globalalloc(health,4) = globalalloc(health,8)

you mean use alloc(health,8) or use globalalloc(health,8) if that's a 64bit game?

uhm, isn't Astroneer a 64bit game? sometime i'm confused they also use "dd" in a 64bit only game.
 

seikur0

Expert Cheater
Table Maker
Aug 26, 2017
177
26
28
#27
If you use alloc or globalalloc, you'll often get 0x1000 bytes allocated as a minimum (despite you writing the number 4 there), so for most things you probably don't want to allocate memory twice within one script. And if you don't need it anymore, there's no reason not to deallocate the memory again, for alloc and for globalalloc as well. Globalalloc is for special uses only, don't worry about it as a beginner.

Then the decision, whether you use dd or dq depends on the type of the the value you store, 8 byte or 4 byte (or less). A 64bit game can still use 4 byte integers or floats and a 32bit game can use 8 byte integers or doubles. Though for pointers 64 bit games will always use 64 bit pointers, so dq, and it's similar for 32bit games, dd here. If you're not sure, dq will always work, but it's a bit wasteful and bad style, because it means you have no idea, what you're doing xD db = data byte (1 byte), dw = data word (2 bytes), dd = data double word (4 byte), dq = data quad word(8 bytes)
 

squall0833

Expert Cheater
Mar 4, 2017
58
2
8
#28
seikur0 post_id=22971 time=1509610445 user_id=8101 said:
If you use alloc or globalalloc, you'll often get 0x1000 bytes allocated as a minimum (despite you writing the number 4 there), so for most things you probably don't want to allocate memory twice within one script. And if you don't need it anymore, there's no reason not to deallocate the memory again, for alloc and for globalalloc as well. Globalalloc is for special uses only, don't worry about it as a beginner.

Then the decision, whether you use dd or dq depends on the type of the the value you store, 8 byte or 4 byte (or less). A 64bit game can still use 4 byte integers or floats and a 32bit game can use 8 byte integers or doubles. Though for pointers 64 bit games will always use 64 bit pointers, so dq, and it's similar for 32bit games, dd here. If you're not sure, dq will always work, but it's a bit wasteful and bad style, because it means you have no idea, what you're doing xD db = data byte (1 byte), dw = data word (2 bytes), dd = data double word (4 byte), dq = data quad word(8 bytes)

ah sorry ,my bad, globalalloc() doesnt need to type number there, :p but thx for the info i have better understanding what globalalloc actually does

so using dq on a 4 bytes also works, but not necessary, and for 8bytes values, (example, 64bit game pointer) then I have to use dq to get the correct whole part of the value?

im sorry that this is supposed to be astroneer code help thread only, turns out asking more out of topic questions

I've been watching CE thread,video tutorials out there, and sometime didnt get to know the very basic thing how some of the code does, why and when we need to use them

just like if you never told me there's db dw dq other than dd, I only knows dd , lol

english isn't my first language, sorry about that :p if you don't understand what i'm saying
 

Blayde

Expert Cheater
Aug 25, 2017
220
1
16
#29
squall0833 post_id=22582 time=1509386150 user_id=639 said:
Hello guys,

Recently I went back to play Astroneer, and doing some cheats, then I found most of the stuff in the game shared the same instruction. And I'm running out of idea how to deal with this kind of instruction

However when this cheat is enabled, all building/crafting in the game will be freeze until the cheat is disable, it seems that the building/crafting time is also using the same instruction, I believe when an item is being crafted, the value is the same as harvest resource integer 138600 but decreasing instead, and when it reached 0, item is done,

So I wrote instantcraftbp compare statement, doesn't work, and crafting still freezing at 138600 (0% progression),

did some testing, the code that's freezing the crafting time was coming from massiveresources: code, If i change 138600 to 0, then instant craft works, but can no longer harvesting resources and soil, looks like something is wrong in this code that's still applying 138600 to the crafting time, cmp statement on instantcraftbp doesnt work?

is there any better way to identify what is the "edi" or "rbx+140" for them jump to the right cheat code?


Thanks
This is part of Legends of Ellaria.CT
Maybe this will help you with ''CMP''

You must to "Break and Trace'' + ''Backtrack''
Code:
[ENABLE]
aobscan(godmode,F3 0F 11 2E F3 0F 10 06 F3 0F 5A C0 F3)
alloc(newmem,$1000,0F26CA1C)

label(code)
label(return)

newmem:
  cmp [rsi+60],(float)22
  je Health
  cmp [rsi+48],(float)22
  je Mana
  cmp [rsi+54],(float)22
  je Shield
  cmp [rsi+38],(float)22
  je Breath
  jmp code

Health:
  mov [rsi],(float)999
  cmp [rsi+48],(float)22
  je Mana
  movss xmm0,[rsi]
  jmp return

Mana:
  mov [rsi],(float)999
  cmp [rsi+54],(float)22
  je Shield
  movss xmm0,[rsi]
  jmp return

Shield:
  mov [rsi],(float)999
  cmp [rsi+38],(float)22
  je Breath
  movss xmm0,[rsi]
  jmp return

Breath:
  mov [rsi],(float)999
  movss xmm0,[rsi]
  jmp return

code:
  movss [rsi],xmm5
  movss xmm0,[rsi]
  jmp return

godmode:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(godmode)

[DISABLE]
godmode:
  db F3 0F 11 2E F3 0F 10 06

unregistersymbol(godmode)
dealloc(newmem)
 

squall0833

Expert Cheater
Mar 4, 2017
58
2
8
#30
Blayde post_id=25364 time=1511034843 user_id=8084 said:
squall0833 post_id=22582 time=1509386150 user_id=639 said:
Hello guys,

Recently I went back to play Astroneer, and doing some cheats, then I found most of the stuff in the game shared the same instruction. And I'm running out of idea how to deal with this kind of instruction

However when this cheat is enabled, all building/crafting in the game will be freeze until the cheat is disable, it seems that the building/crafting time is also using the same instruction, I believe when an item is being crafted, the value is the same as harvest resource integer 138600 but decreasing instead, and when it reached 0, item is done,

So I wrote instantcraftbp compare statement, doesn't work, and crafting still freezing at 138600 (0% progression),

did some testing, the code that's freezing the crafting time was coming from massiveresources: code, If i change 138600 to 0, then instant craft works, but can no longer harvesting resources and soil, looks like something is wrong in this code that's still applying 138600 to the crafting time, cmp statement on instantcraftbp doesnt work?

is there any better way to identify what is the "edi" or "rbx+140" for them jump to the right cheat code?


Thanks
This is part of Legends of Ellaria.CT
Maybe this will help you with ''CMP''

You must to "Break and Trace'' + ''Backtrack''
Code:
[ENABLE]
aobscan(godmode,F3 0F 11 2E F3 0F 10 06 F3 0F 5A C0 F3)
alloc(newmem,$1000,0F26CA1C)

label(code)
label(return)

newmem:
  cmp [rsi+60],(float)22
  je Health
  cmp [rsi+48],(float)22
  je Mana
  cmp [rsi+54],(float)22
  je Shield
  cmp [rsi+38],(float)22
  je Breath
  jmp code

Health:
  mov [rsi],(float)999
  cmp [rsi+48],(float)22
  je Mana
  movss xmm0,[rsi]
  jmp return

Mana:
  mov [rsi],(float)999
  cmp [rsi+54],(float)22
  je Shield
  movss xmm0,[rsi]
  jmp return

Shield:
  mov [rsi],(float)999
  cmp [rsi+38],(float)22
  je Breath
  movss xmm0,[rsi]
  jmp return

Breath:
  mov [rsi],(float)999
  movss xmm0,[rsi]
  jmp return

code:
  movss [rsi],xmm5
  movss xmm0,[rsi]
  jmp return

godmode:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(godmode)

[DISABLE]
godmode:
  db F3 0F 11 2E F3 0F 10 06

unregistersymbol(godmode)
dealloc(newmem)
Thanks
Guess I should start to learn to use Break and Trace features, more and more recent game codes are getting more complex lol

maybe that can help me find the offset with static value more accurately
 
Top Bottom