{$CLEO .csa}

thread 'CHEATS'
wait 1000
var 
  11@ : Integer
  12@ : Integer
end  
11@ = 0
12@ = 0

while true
    wait 0
    40@ = 0
    while 40@ < 1500
        wait 100
        0DDD: 0@ = get_mutex_var 0    
        if and
            0@ == 0
            Player.Defined($PLAYER_CHAR)
            Player.Controllable($PLAYER_CHAR)
            80E1: not key_pressed 3 5 
            00E1: key_pressed 3 4
            00E1: key_pressed 3 6 
        then
            continue
        else
            40@ = 0
        end
    end  
    0DDC: set_mutex_var 0 to 1   
    Player.CanMove($PLAYER_CHAR) = false
    0575: set_actor $PLAYER_ACTOR pinned_position 1
    Camera.SetBehindPlayer()
    
    08D4: 10@ = create_panel_with_title 'CHT' position 240.0 100.0 width 150.0 columns 1 interactive 1 background 1 alignment 0
    gosub @update_column  
    090E: set_panel 10@ active_row 11@
    
    wait 1500
    
    while true
      wait 100
      // player checks
      if or
        0117: player $PLAYER_CHAR wasted
        0741: actor $PLAYER_ACTOR busted
      then
        break
      end
      // row switch
      if and
        00E1: key_pressed 3 4
        80E1: not key_pressed 3 6
      then
        if 
            11@ > 0
        then
            11@ -= 1
        else
            11@ = 11
        end
        090E: set_panel 10@ active_row 11@
        wait 200
      end      
      if and
        00E1: key_pressed 3 6
        80E1: not key_pressed 3 4
      then
        if 
            11@ < 11
        then
            11@ += 1
        else
            11@ = 0
        end
        090E: set_panel 10@ active_row 11@
        wait 200
      end      
      // column switch
      if 
        00E1: key_pressed 3 2
      then
        if 
            12@ > 0
        then
            12@ -= 1
        else
            12@ = 8
        end
        gosub @update_column
        090E: set_panel 10@ active_row 11@
        wait 200
      end
      // close
      if and
        00E1: key_pressed 3 4
        00E1: key_pressed 3 6
        80E1: not key_pressed 3 5
      then
        break
      end      
      // use cheat
      if 
        00E1: key_pressed 3 8
      then
        if 
            12@ < 8
        then
            12@ += 1
        else
            12@ = 0
        end
        gosub @update_column
        090E: set_panel 10@ active_row 11@
        wait 200
      end
      if and
        00E1: key_pressed 3 5
        80E1: not key_pressed 3 4
        80E1: not key_pressed 3 6
      then
        0DD0: 0@ = get_label_addr @earr_cheat_funcs
        0DD1: 1@ = get_func_addr_by_cstr_name 0@
        var 
          1@ : Integer
          2@ : Integer
        end                    
        2@ = 12@
        2@ *= 12
        2@ += 11@
        if 
            2@ > 97
        then
            03E5: show_text_box 'CHTNO'
            break         
        end    
        2@ *= 4
        1@ += 2@
        
        0DD8: 2@ = read_mem_addr 1@ size 4 fix_ib 0
        if
            2@ > 0
        then
            0DD2: context_call_func 2@
            03E5: show_text_box 'CHTACT'
            break
        else
            03E5: show_text_box 'CHTNO'
            break    
        end
      end      
    end 
    
    08DA: remove_panel 10@
    Player.CanMove($PLAYER_CHAR) = true
    0575: set_actor $PLAYER_ACTOR pinned_position 0
    0DDC: set_mutex_var 0 to 0
    wait 1000
end

:update_column
if
    12@ == 0 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data 'CHT_0' 'CHT_1' 'CHT_2' 'CHT_3' 'CHT_4' 'CHT_5' 'CHT_6' 'CHT_7' 'CHT_8' 'CHT_9' 'CHT_10' 'CHT_11'
end
if
    12@ == 1 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data 'CHT_12' 'CHT_13' 'CHT_14' 'CHT_15' 'CHT_16' 'CHT_17' 'CHT_18' 'CHT_19' 'CHT_20' 'CHT_21' 'CHT_22' 'CHT_23'
end
if
    12@ == 2 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data 'CHT_24' 'CHT_25' 'CHT_26' 'CHT_27' 'CHT_28' 'CHT_29' 'CHT_30' 'CHT_31' 'CHT_32' 'CHT_33' 'CHT_34' 'CHT_35'
end
if
    12@ == 3 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data 'CHT_36' 'CHT_37' 'CHT_38' 'CHT_39' 'CHT_40' 'CHT_41' 'CHT_42' 'CHT_43' 'CHT_44' 'CHT_45' 'CHT_46' 'CHT_47' 
end
if
    12@ == 4 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data  'CHT_48' 'CHT_49' 'CHT_50' 'CHT_51' 'CHT_52' 'CHT_53' 'CHT_54' 'CHT_55' 'CHT_56' 'CHT_57' 'CHT_58' 'CHT_59' 
end
if
    12@ == 5 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data  'CHT_60' 'CHT_61' 'CHT_62' 'CHT_63' 'CHT_64' 'CHT_65' 'CHT_66' 'CHT_67' 'CHT_68' 'CHT_69' 'CHT_70' 'CHT_71' 
end
if
    12@ == 6 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data  'CHT_72' 'CHT_73' 'CHT_74' 'CHT_75' 'CHT_76' 'CHT_77' 'CHT_78' 'CHT_79' 'CHT_80' 'CHT_81' 'CHT_82' 'CHT_83' 
end
if
    12@ == 7 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data  'CHT_84' 'CHT_85' 'CHT_86' 'CHT_87' 'CHT_88' 'CHT_89' 'CHT_90' 'CHT_91' 'CHT_92' 'CHT_93' 'CHT_94' 'CHT_95' 
end
if
    12@ == 8 
then
    08DB: set_panel 10@ column 0 header 'DUMMY' data  'CHT_96' 'CHT_97' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18' 'CHT_18'
end
return 

:earr_cheat_funcs
hex
  "_ZN6CCheat17m_aCheatFunctionsE" 00
end         