The Wiki for Tale 5 is in read-only mode and is available for archival and reference purposes only. Please visit the current Tale 11 Wiki in the meantime.

If you have any issues with this Wiki, please post in #wiki-editing on Discord or contact Brad in-game.

Crematory Macro/Crematory Macro

From ATITD5
Jump to navigationJump to search
// This currently works for my screen resolution 1600x1200 with ATITD in windowed mode
// Pin the crematory window in the upper left of the screen as far into the corner as possible
// Load with stuff manually and make sure the window is fully refreshed so that the
// "fire crematory" button appears and there is no slider bar!

// Start the macro - it will click the fire button which will also bring ATITD to the top
// Once the crematory has finished go back to ACTOOL and stop the macro - it currently just
// has a huge crude loop - it would be relatively easy to monitor the progress bar but I
// haven't done that yet

// For different screen resolutions I guess use "pixie" or something similar to get coords
// Need to change slider and button numbers under slider control for your particular crematory
// (The wiki explains how to analyse your crematory)

//SACFAR:
//Sliders numbered left-to-right 1-7.
//Buttons labeled left-to-right 1-5.

//Button 1 -> 1
//Button 2 -> 3, 7
//Button 3 -> 4
//Button 4 -> 2
//Button 5 -> 5, 6



Constants
  
  
  
  //Make sure the "Take..." option is NOT in the pinup menu or else this script will fail
  //(burn your loaded resources).
  //Make sure the crematory is completely empty before pinning up the menu, in the upper left corner.
  //More instructions/screenshots at http://www.atitd.org/wiki/tale5/User:KasumiGhia/Macros/Crematory
  
  //These settings will work on 1600x1200 windowed. Only change these it you want it work
  //at a different resolution.
  
  // Vertical position of middle of slider bar
  midSlider = 250
  
  // Vertical position of button centres
  vrtButton = 329
  
  // Horizontal positions of seven slider bars
  hrzSlider1 = 30
  hrzSlider2 = 66
  hrzSlider3 = 102
  hrzSlider4 = 138
  hrzSlider5 = 174
  hrzSlider6 = 210
  hrzSlider7 = 246
  
  
  // Horizontal positions of five button centres
  hrzButton1 = 57
  hrzButton2 = 98
  hrzButton3 = 137
  hrzButton4 = 177
  hrzButton5 = 217
  
  
  // Position of left most point of red line
  hrzRed = 34
  verRed = 159
  
  
  
  //Leave these alone
  count = 0
  counthi = 0
  countlo = 0
  clickflag = 0
  flag = 1
  posSlider1 = 0
  posSlider2 = 0
  posSlider3 = 0
  posSlider4 = 0
  posSlider5 = 0
  posSlider6 = 0
  posSlider7 = 0
  comSlider1 = 0
  comSlider2 = 0
  absSlider1 = 0
  absSlider2 = 0
  posSlider1old = 0
  posSlider2old = 0
  posSlider3old = 0
  posSlider4old = 0
  posSlider5old = 0
  posSlider6old = 0
  posSlider7old = 0
  comSlider1old = 0
  comSlider2old = 0
  absSlider1old = 0
  absSlider2old = 0
END



//Click the top of menu to refresh the menu
mousepos 120, 44
delay 50
LeftClick


// Clicks to fire the crematory (need to specify centre of fire button)
mousepos 65, 71
delay 50
LeftClick

// First call to obtain initial positions of sliders
call GETSLIDERPOS
Compute posSlider1old = $posSlider1
Compute posSlider2old = $posSlider2
Compute posSlider3old = $posSlider3
Compute posSlider4old = $posSlider4
Compute posSlider5old = $posSlider5
Compute posSlider6old = $posSlider6
Compute posSlider7old = $posSlider7
Compute comSlider1old = ($posSlider3 + $posSlider7)/2
Compute comSlider2old = ($posSlider5 + $posSlider6)/2

// Crude loop at the moment. Should really monitor the progress bar.

loop 1000
  
  
  //Credit to Daniels for this sniplet of code to watch the red progress bar
  //and exit script when the bar disappears (when done).
  
  // Checks whether the batch is done, breaks loop if so
  LoadRGB $hrzRed,$verRed
  delay 100
  if {RGBRed} < 250
    break
  END
  
  
  
  
  call GETSLIDERPOS
  
  // One slider per button control
  // Need to alter slider and button numbers for particular crematory
  
  
  //1st single slider/button combo:
  
  if $posSlider1 > 0
    if $posSlider1 > $posSlider1old
      mousepos $hrzButton1,$vrtButton
      delay 50
      LeftClick
    END
  END
  if $posSlider1 < 0
    if $posSlider1 < $posSlider2old
      mousepos $hrzButton1,$vrtButton
      delay 50
      LeftClick
    END
  END
  
  
  //2nd single slider/button combo:
  
  if $posSlider4 > 0
    if $posSlider4 > $posSlider4old
      mousepos $hrzButton3,$vrtButton
      delay 50
      LeftClick
    END
  END
  if $posSlider4 < 0
    if $posSlider4 < $posSlider4old
      mousepos $hrzButton3,$vrtButton
      delay 50
      LeftClick
    END
  END
  
  
  //3rd single slider/button combo:
  
  if $posSlider2 > 0
    if $posSlider2 > $posSlider2old
      mousepos $hrzButton4,$vrtButton
      delay 50
      LeftClick
    END
  END
  if $posSlider2 < 0
    if $posSlider2 < $posSlider2old
      mousepos $hrzButton4,$vrtButton
      delay 50
      LeftClick
    END
  END
  
  // Two sliders per button control (use centre of mass, i.e. average)
  // Need to alter slider and button numbers for particular crematory
  //Note Editing a slider number is $posSlider#, not comSlider#.
  //     Do not change the 1 or 2 on $comSlider1 and $comSlider2
  
  //1st two slider/one button combo:
  
  Compute comSlider1 = ($posSlider3 + $posSlider7)/2
  Compute absSlider1 = abs($posSlider3) + abs($posSlider7)
  Compute clickflag = 0
  if $absSlider1 > $absSlider1old
    Compute clickflag=1
  END
  if $hrzRed > 50000
    if $comSlider1 > 0
      if $posSlider3 > 0 and $posSlider7 > 0
        if $comSlider1 > $comSlider1old
          Compute clickflag = 1
        END
      else
        if $posSlider3 > 0 and $posSlider3 > $posSlider3old
          Compute clickflag = 1
        END
        if $posSlider7 > 0 and $posSlider7 > $posSlider7old
          Compute clickflag = 1
        END
      END
    END
    if $comSlider1 < 0
      if $posSlider3 < 0 and $posSlider7 < 0
        if $comSlider1 < $comSlider1old
          Compute clickflag = 1
        END
      else
        if $posSlider3 < 0 and $posSlider3 < $posSlider3old
          Compute clickflag = 1
        END
        if $posSlider7 < 0 and $posSlider7 < $posSlider7old
          Compute clickflag = 1
        END
      END
    END
  END //if 0
  if $clickflag = 1
    mousepos $hrzButton2,$vrtButton
    delay 50
    LeftClick
  END
  
  
  //2nd two slider/one button combo:
  
  Compute comSlider2 = ($posSlider5 + $posSlider6)/2
  Compute absSlider2 = abs($posSlider5) + abs($posSlider6)
  Compute clickflag = 0
  if $absSlider2 > $absSlider2old
    Compute clickflag=1
  END
  if $hrzRed > 50000
    if $comSlider2 > 0
      if $posSlider5 > 0 and $posSlider6 > 0
        if $comSlider2 > $comSlider2old
          Compute clickflag = 1
        END
      else
        if $posSlider5 > 0 and $posSlider5 > $posSlider5old
          Compute clickflag = 1
        END
        if $posSlider6 > 0 and $posSlider6 > $posSlider6old
          Compute clickflag = 1
        END
      END
    END
    if $comSlider2 < 0
      if $posSlider5 < 0 and $posSlider6 < 0
        if $comSlider2 < $comSlider2old
          Compute clickflag = 1
        END
      else
        if $posSlider5 < 0 and $posSlider5 < $posSlider5old
          Compute clickflag = 1
        END
        if $posSlider6 < 0 and $posSlider6 < $posSlider6old
          Compute clickflag = 1
        END
      END
    END
  END //if 0
  if $clickflag = 1
    mousepos $hrzButton5,$vrtButton
    delay 50
    LeftClick
  END
  
  
  
  
  Compute posSlider1old = $posSlider1
  Compute posSlider2old = $posSlider2
  Compute posSlider3old = $posSlider3
  Compute posSlider4old = $posSlider4
  Compute posSlider5old = $posSlider5
  Compute posSlider6old = $posSlider6
  Compute posSlider7old = $posSlider7
  Compute comSlider1old = $comSlider1
  Compute comSlider2old = $comSlider2
  Compute absSlider1old = $absSlider1
  Compute absSlider2old = $absSlider2
  
  
END

// Procedure to find slider positions

Procedure GETSLIDERPOS
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider1, $midSlider
    Compute posSlider1 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider1, $counthi
      Compute posSlider1 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider1, $countlo
      Compute posSlider1 = $midSlider - $countlo
      Compute flag = 0
    END
  END
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider2, $midSlider
    Compute posSlider2 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider2, $counthi
      Compute posSlider2 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider2, $countlo
      Compute posSlider2 = $midSlider - $countlo
      Compute flag = 0
    END
  END
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider3, $midSlider
    Compute posSlider3 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider3, $counthi
      Compute posSlider3 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider3, $countlo
      Compute posSlider3 = $midSlider - $countlo
      Compute flag = 0
    END
  END
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider4, $midSlider
    Compute posSlider4 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider4, $counthi
      Compute posSlider4 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider4, $countlo
      Compute posSlider4 = $midSlider - $countlo
      Compute flag = 0
    END
  END
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider5, $midSlider
    Compute posSlider5 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider5, $counthi
      Compute posSlider5 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider5, $countlo
      Compute posSlider5 = $midSlider - $countlo
      Compute flag = 0
    END
  END
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider6, $midSlider
    Compute posSlider6 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider6, $counthi
      Compute posSlider6 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider6, $countlo
      Compute posSlider6 = $midSlider - $countlo
      Compute flag = 0
    END
  END
  
  Compute counthi = $midSlider
  Compute countlo = $midSlider
  Compute flag = 1
  IsBlack $hrzSlider7, $midSlider
    Compute posSlider7 = 0
    Compute flag = 0
  END
  while $flag > 0
    Compute counthi = $counthi + 1
    IsBlack $hrzSlider7, $counthi
      Compute posSlider7 = $midSlider - $counthi
      Compute flag = 0
    END
    Compute countlo = $countlo - 1
    IsBlack $hrzSlider7, $countlo
      Compute posSlider7 = $midSlider - $countlo
      Compute flag = 0
    END
  END
END