#!/bin/bash
# this script creates a GameConqueror-cheat-file for Kenshi

gamename="kenshi"                                           #Here goes the name of the game!
filename="${gamename}cheat.gct"                             #gct shall insist "game conqueror table" as file hint
tempname="${gamename}cheat.tmp"                             #the temp-filename

aob_scan_pre="11 00 00 00 00 00 00 00 60 AE FA 3D 3C 7F 00 00 68 AE FA 3D 3C 7F 00 00 68 AE FA 3D 3C 7F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 F9 17 41 01 00 00 00 01 00 00 00 01 00 00 00 00 D7 4F 89 01 00 00 00 00 50 D7 95 00 00 00 00"
aob_scan_suf="?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 07 00 00 00 00 00 00 00 0F 00 00 00 00 00 00 00 00 00 80 3F 00 00 00 00 60 9B FA 3D 3C 7F 00 00 90 7A FA 3D 3C 7F 00 00 D0 20 FA 3D 3C 7F 00 00 90 27 FA 3D 3C 7F 00 00 E0 13 FA 3D 3C 7F 00 00 D0 3F FA 3D 3C 7F 00 00 48 82 17 41 01 00 00 00 90 B3 17 41 01 00 00 00 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"

# Basic var declaration
# bk=black, cn=cyan, gn=green, rd=red, vt=violet, wt=white
cn="\033[0;36;49m"
gn="\033[0;32;49m"
norm="\033[m"
rd="\033[0;31;49m"
vt="\033[0;35;49m"

# Start(description)
echo 
echo "${gamename}-cheat: Script to create GameConqueror Cheat-Tables"
echo
echo "It creates an addresslist(local path) with name: $filename"
echo 
echo "Usage:"
echo "./keshi-cheat <address> [offset]"
echo "<address> hex number(for example: affe NOT 0xaffe)"
echo "[offset]  optional DECIMAL offset (if NOT being STRENGHT)"
echo 

# fetch process id
procid=$(pgrep "\\${gamename}_x64.exe")
if [ -z "$procid" ] ; then
    echo -e "$rd Process ${gamename} has not been found $norm Aborting!"
    exit 1
else
    echo -e "$gn Process ${gamename} found($procid) $norm"
fi

# Main part: getting input and use it to build a proper table..
value=$1
if [[ -z $value ]]; then
    echo -e "$rd No address has been passed, cant work without!$norm"
    echo 
    exit 1
else
# Wenn Daten in $value übergeben wurden, hier wird eine hexadezimale Eingabe der ATHLETICS Adresse erwartet
    echo "Passed Address: $value"
    value=$(printf "%d\n" "0x0$value")
    if [[ -z $2 ]]; then
        echo -e "$rd illegal offset, ignored! $norm"
    else
        value=$((value-$2))                           # Nötiger Versatz(siehe jeweiligen Eintrag; BSP um von den Adresswert von ATHLETICS zu übergeben muss es -20 sein! -36 schleichen!
    fi

    value=$(printf "%x\n" "$value")                   #Wieder wandeln nach HEX
    echo "Corrected Base: $value"
fi

#address sollte nun auf erstes ATTRIBUT zeigen(Stärke)
address=$(printf "%d\n" "0x0$value")
echo "ADRESS.. DEZ: $address"
printf "%x\n" "$address"
echo '{"cheat_list": ['>$filename

echo -ne '[false, "001 ╭STÄRKE            ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo $address
#echo -ne '[false, "002 │??                [-   ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo $address
echo -ne '[false, "003 │GESCHICK                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "004 │WAHRNEHMUNG             ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "005 │ZÄHIGKEIT               ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "006 │Athletik          [ 020]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "007 │Feldarzt          [ 024]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "008 │??                [ 028]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "009 │??                [ 032]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "010 │Schleichen        [ 036]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "011 │Schwimmen         [ 040]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "012 │Diebstahl         [ 044]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "013 │Knackt Schloß     [ 048]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "014 │??                [ 052]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "015 │Attentat          [ 056]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "016 │??                [ 060]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "017 │??                [ 064]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "018 │??                [ 068]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "019 │??                [ 072]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "020 │Ingenieur         [ 076]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "021 │Waffenschmied     [ 080]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "022 │Rüstungsschmiede  [ 084]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "023 │Armbrustschmiede  [ 088]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "024 │Robotik           [ 092]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "025 │Wissenschaft      [ 096]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "026 │Arbeiten          [ 100]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "027 │Landwirtschaft    [ 104]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "028 │Kochen            [ 108]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "029 │Ausweichen        [ 112]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "030 │Präzises Schießen [ 116]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "031 │Katanas           [ 120]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "032 │Säbel             [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "033 │Hacker            [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "034 │Stumpf            [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "035 │Schwere Waffen    [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "036 │Kampfkunst        [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "037 │Armbrüste         [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "038 │Geschütztürme     [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "039 │Stangenwaffen     [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "040 │??                [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "041 │Nahkampfangriff   [    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
echo -ne '[false, "042 │Nahkampfverteidig.[    ]", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "043 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "044 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "045 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "046 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "047 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "048 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "049 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#echo -ne '[false, "050 │??                ", '$(( address ))', "float32", "0.000000000000", true], '>>$filename
address=$((address+4))
#Closes table finally, this line has to be the last and.. dont change it!!
echo -ne '[false, "999 --------------------", 0, "string", "?", true]'>>$filename
echo -ne ']}'>>$filename
echo -e "$cn $filename created. Done $norm"
echo
