Results 1 to 9 of 9

Thread: Unmatched functions between CoD

  1. #1
    Private
    Join Date
    Jun 2015
    Posts
    15
    Thanks
    5
    Thanked 3 Times in 3 Posts

    Unmatched functions between CoD

    Hi, I am trying to port to libcod to CoDUO. I am in this situation where in CoD 2, the subroutine (marked as 1 in the screenshot) is a seperate function while it is a set of instructions (marked as 2) in CoDUO.

    Click image for larger version. 

Name:	Capture.PNG 
Views:	31 
Size:	427.2 KB 
ID:	1639

    Is there a way to "extract" the subroutine?

  2. The Following User Says Thank You to ebusiangamers For This Useful Post:

    kung foo man (31st August 2020)

  3. #2
    Sergeant maxdamage99's Avatar
    Join Date
    Aug 2014
    Location
    Russia
    Posts
    458
    Thanks
    79
    Thanked 122 Times in 101 Posts
    There is not much code, you can describe it as your own function (translate pseudocode in C/C++)

    You can analyze the function in which this section is located, it is possible to call the upper function with certain parameters, which guarantees that this piece of code is called and only it is called

    Here is a translation example, simple and straightforward:
    https://github.com/damage99/libcod/b...layer.cpp#L830


    If you need to replace only a piece of code, but leave the main function unchanged, then the simplest options are to analyze the conditions and, if they match (this subroutine is called in the original) - replace it with a function call that you translated from pseudocode; if the conditions are different, just call the original function
    *like this:
    https://github.com/damage99/libcod/b...ibcod.cpp#L139
    : only you need to analyze the input arguments of this function, when you understand that the required subroutine should be called, then call reworked_func(), if not, then call original_func()
    Last edited by maxdamage99; 1st September 2020 at 07:09.
    PHP Code:
    class CoronaVirus 
    {
       
    CoronaVirus(int m 1): multi(m) { Peoples.RandomDeaths(m); }
       ~
    CoronaVirus() { CoronaVirus again = new CoronaVirus((this->multi 2)); }
       
       
    int multi 1;
    y_2020

  4. The Following User Says Thank You to maxdamage99 For This Useful Post:

    kung foo man (2nd September 2020)

  5. #3
    Private
    Join Date
    Jun 2015
    Posts
    15
    Thanks
    5
    Thanked 3 Times in 3 Posts
    How about equivalent offset? Is there an efficient way to recover them?

  6. #4
    Sergeant maxdamage99's Avatar
    Join Date
    Aug 2014
    Location
    Russia
    Posts
    458
    Thanks
    79
    Thanked 122 Times in 101 Posts
    Quote Originally Posted by ebusiangamers View Post
    How about equivalent offset? Is there an efficient way to recover them?

    What do you mean? Will give an example of what you need
    PHP Code:
    class CoronaVirus 
    {
       
    CoronaVirus(int m 1): multi(m) { Peoples.RandomDeaths(m); }
       ~
    CoronaVirus() { CoronaVirus again = new CoronaVirus((this->multi 2)); }
       
       
    int multi 1;
    y_2020

  7. #5
    Private
    Join Date
    Jun 2015
    Posts
    15
    Thanks
    5
    Thanked 3 Times in 3 Posts

  8. The Following User Says Thank You to ebusiangamers For This Useful Post:

    kung foo man (8th September 2020)

  9. #6
    Global Mossaderator Mitch's Avatar
    Join Date
    Nov 2012
    Posts
    654
    Thanks
    204
    Thanked 450 Times in 305 Posts
    Quote Originally Posted by ebusiangamers View Post
    How about equivalent offset? Is there an efficient way to recover them?
    In CoD2, I look for a text close to a function that uses the player client address and then find the same text in other versions.
    This might work depending on much difference between 2 and UO.

    Edit: you might be able to find some of the addresses if you find and decode one of the player GSC functions like GetStance() or getEntityNumber and the kick function too.
    Last edited by Mitch; 6th September 2020 at 16:28.

  10. The Following User Says Thank You to Mitch For This Useful Post:

    kung foo man (8th September 2020)

  11. #7
    Private
    Join Date
    Jun 2015
    Posts
    15
    Thanks
    5
    Thanked 3 Times in 3 Posts
    Quote Originally Posted by Mitch View Post
    In CoD2, I look for a text close to a function that uses the player client address and then find the same text in other versions.
    This might work depending on much difference between 2 and UO.

    Edit: you might be able to find some of the addresses if you find and decode one of the player GSC functions like GetStance() or getEntityNumber and the kick function too.
    Using string work fine to find functions and offset. I search each crossref to find the bit of string that might exist in the other version. It's the huge pain in the arse when the string bit is hidden in several "parent" function away.

  12. #8
    Private
    Join Date
    Jun 2015
    Posts
    15
    Thanks
    5
    Thanked 3 Times in 3 Posts
    I come across many function with the same structure as the on on the right. The functions in the screenshot below are supposed to be "equivalent". I find a lot more like this (right). Is something wrong happening?
    Click image for larger version. 

Name:	Capture.PNG 
Views:	15 
Size:	421.4 KB 
ID:	1640

  13. #9
    Global Mossaderator Mitch's Avatar
    Join Date
    Nov 2012
    Posts
    654
    Thanks
    204
    Thanked 450 Times in 305 Posts
    Quote Originally Posted by ebusiangamers View Post
    Using string work fine to find functions and offset. I search each crossref to find the bit of string that might exist in the other version. It's the huge pain in the arse when the string bit is hidden in several "parent" function away.
    Which functions, addresses and offsets are you currently still looking for?

    Edit: maybe comparing CoD1 with UO is easier.

    https://github.com/riicchhaarrd/CoDExtended

    Edit 2:

    Quote Originally Posted by ebusiangamers View Post
    I come across many function with the same structure as the on on the right. The functions in the screenshot below are supposed to be "equivalent". I find a lot more like this (right). Is something wrong happening?
    Click image for larger version. 

Name:	Capture.PNG 
Views:	15 
Size:	421.4 KB 
ID:	1640
    CoD1 and UO are split into two: a binary (coduo_lnxded) and a library (game.mp.uo.i386.so).
    The game library contains GSC script functions and methods.

    I think the UO code in your screenshot loads the game library like in CoDExtended.

    Loading the library
    https://github.com/riicchhaarrd/CoDE...xtended.c#L257
    https://github.com/riicchhaarrd/CoDE...ymodule.c#L231

    Loading the stock functions:
    https://github.com/riicchhaarrd/CoDE...script.c#L1862
    Return the stock or custom function:
    https://github.com/riicchhaarrd/CoDE.../script.c#L450
    Last edited by Mitch; 19th September 2020 at 18:03.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •