#!/bin/bash
# this script creates a GameConqueror-cheat-file for Spellforce
# Attention! 
#  You have to find the address of xxx for yourself EACH time you play the game!

# Basic var declaration
filename="spellforce.gct"                                              #gct shall insist "game conqueror table" as file hint
full=0  # change to 1 if (unknown) adresses should be written, too

# "ink" colour definitions: bk=black, bl=blue, cn=cyan, gn=green, rd=red, vt=violet, wt=white, yl=yellow
bk="\e[0;30m"
bl="\e[0;34m"
cn="\e[0;36m"
gn="\e[0;32m"
rd="\e[0;31m"
vt="\e[0;35m"
wt="\e[0;37m"
yl="\e[0;33m"
# "paper" colour definitions (enhanced visibility using 1 (lighter ink))
bk_bg="\e[1;40m"
bl_bg="\e[1;44m"
cn_bg="\e[1;46m"
gn_bg="\e[1;42m"
rd_bg="\e[1;41m"
vt_bg="\e[1;45m"
wt_bg="\e[1;47m"
yl_bg="\e[1;43m"
inv="\e[30;47m"
norm="\e[0m"

echo
# procid=` ps aux | grep "./stellaris" | head -1 | awk '{print $2}'`# pgrep is shorter ;)
procid=$(pgrep -f "\\\SpellForce.exe")                              # fetch game process id
if [ -z "$procid" ] ; then
    echo -e "$rd Process .\SpellForce.exe has not been found $norm Ignoring!"
else
    echo -e "$gn Process .\SpellForce.exe found($procid) $norm"
    if [ -z "${1}" ] ; then
        echo -e "$vt ERROR: Nonsense in user!$norm"
        echo "Please launch the script with a GIVEN ADDRESS"
        exit 1
    else
        echo -e  "$cn  Building table using given address..$norm"
        base_address=$(printf "%d\n" "0x0${1}")             # use given value as address of xperience points
    fi
    if (( base_address != 0 )); then                        # only if base_address is valid and NOT ZERO
        address=$base_address
        echo '{"cheat_list": ['>$filename                   # > bedeutet: Datei wird NEU(und leer) begonnen, NICHT angefügt!!
        echo -ne '[false, "000 ╔═════ MAIN Character ═══════   ", '0', "string", "", true], '>>$filename
        echo -ne '[false, "001 ║ Stufenlevel                      ", '$(( address - 21 ))', "int8", "00000000", true], '>>$filename
        echo -ne '[false, "010 ║ Wendigkeit(Basis)                ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "011 ║ Wendigkeit+/-                    ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "012 ║ Wendigkeit?                      ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "013 ║ Charisma(Basis)                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "014 ║ Charisma+/-                      ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "015 ║ Charisma?                        ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "016 ║ Geschicklichkeit(Basis)          ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "017 ║ Geschicklichkeit+/-              ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "018 ║ Geschicklichkeit?                ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "019 ║ Lebenspunkte(Basis)              ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "020 ║ Lebenspunkte+/-                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "021 ║ Lebenspunkte?                    ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "022 ║ Lebenspunkte MALUS!              ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "023 ║ Intelligenz(Basis)               ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "024 ║ Intelligenz+/-                   ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "025 ║ Intelligenz?                     ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "026 ║ Mana(Basis)                      ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "027 ║ Mana+/-                          ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "028 ║ Mana?                            ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "029 ║ Mana MALUS!                      ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "030 ║ Ausdauer(Basis)                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "031 ║ Ausdauer+/-                      ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "032 ║ Ausdauer?                        ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "033 ║ Ausdauer MALUS!                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "034 ║ Stärke(Basis)                    ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "035 ║ Stärke+/-                        ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "036 ║ Stärke?                          ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "037 ║ Weisheit(Basis)                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "038 ║ Weisheit+/-                      ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "039 ║ Weisheit?                        ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "040 ║ Feuerresistenz(Basis)            ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "041 ║ Feuerresistenz+                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "042 ║ Feuerresistenz?                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "043 ║ Eisresistenz(Basis)              ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "044 ║ Eisresistenz                     ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "045 ║ Eisresistenz                     ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "046 ║ Mentalresistenz(Basis)           ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "047 ║ Mentalresistenz+                 ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "048 ║ Mentalresistenz?                 ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "049 ║ Schwarzresistenz(Basis)          ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "050 ║ Schwarzresistenz+                ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "051 ║ Schwarzresistenz?                ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "052 ║ Laufen                           ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "053 ║                                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "054 ║                                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "055 ║ Kampf                            ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "056 ║                                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "057 ║                                  ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "058 ║ Zauber                           ", '$(( address ))', "int16", "00000000", true], '>>$filename
        address=$address+2
        echo -ne '[false, "999 ╚ Tabellenende                     ", '$(( 0 ))', "int32", "00000000", true]'>>$filename    #endfilemark differs!!
        echo -ne ']}'>>$filename
        echo -e "$gn file $filename written."
        echo
    fi
fi