The Wiki for Tale 7 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.

User:Shayra

From ATITD7
Revision as of 14:33, 17 December 2015 by Shayra (talk | contribs) (→‎S)
Jump to navigationJump to search

HI :D

My main home is Seven Lakes. My main focus is Amigos Public Works by University of Body.
Look me up and acro with me!

Ariella flax:
http://www.speedyshare.com/pGJBe/AutomatoImages.rar
For flax_stable already in Automato, drop the Ariella.png into C://Games/Automato/games/Atitd/images and when you start that lua, change Old to Ariella. No other changes needed.


Shayra's dymoflaxer:
Drop both images in your Automato Atitd images folder then copy/paste the script onto a notepad (be sure suffix is .lua) and drop into Atitd scripts.
On mine: C://Games/Automato/games/Atitd/
You must rename this to anything you want to or any update will revert it back to flax_stable. I renamed mine Shayra's dymoflaxer and whatever name you give it is what it will be in your Automato list.


http://www.speedyshare.com/pGJBe/AutomatoImages.rar

-- flax_stable.lua v1.2 -- by Jimbly, tweaked by Cegaiel and
--   KasumiGhia, revised by Tallow.
--
-- Plant flax and harvest either flax or seeds.
--
-- Works Reliably: 2x2, 3x3, 4x4, 5x5
-- May Work (depends on your computer): 6x6, 7x7
--

dofile("common.inc");

-- flax_stable.lua v1.2 -- by Jimbly, tweaked by Cegaiel and
--   KasumiGhia, revised by Tallow.
--
-- Plant flax and harvest either flax or seeds.
--
-- Works Reliably: 2x2, 3x3, 4x4, 5x5
-- May Work (depends on your computer): 6x6, 7x7
--

dofile("common.inc");

askText = singleLine([[
  flax_stable v1.1 (by Jimbly, tweaked by Cegaiel and KasumiGhia,
  revised by Tallow. Updated for T7 by Skyfeather) --
  Plant flax and harvest either flax or seeds. --
  Make sure the plant flax window is pinned and on the RIGHT side of
  the screen. Your Automato window should also be on the RIGHT side
  of the screen. You may need to
  F12 at low resolutions or hide your chat window (if it starts
  planting and fails to move downward, it probably clicked on your
  chat window). Will plant grid NE of current location.  'Plant all
  crops where you stand' must be ON.  'Right click pins/unpins a menu'
  must be ON. Enable Hotkeys on flax must be OFF.
]]);

-- Global parameters set by prompt box.
num_loops = 5;
grid_w = 5;
grid_h = 5;
is_plant = true;
seeds_per_pass = 5;
seeds_per_iter = 0;

seedType = "dymo";
harvest = "Harvest this";
weedAndWater = "Weed and Water";
weedThis = "Water this";
harvestSeeds = "Harvest seeds";
thisIs = "This is";
utility = "Utility";
txtRipOut = "Rip out";
useable = "Useable";

imgUseable = "UseableBy.png";
imgThisIs = "ThisIs.png";
imgUtility = "Utility.png";
imgSeeds = "HarvestSeeds.png";

-- Tweakable delay values
refresh_time = 60; -- Time to wait for windows to update
walk_time = 300;

-- Don't touch. These are set according to Jimbly's black magic.
walk_px_y = 340;
walk_px_x = 380;

xyCenter = {};
xyFlaxMenu = {};

-- The flax bed window
window_w = 168;
window_h = 150;

FLAX = 0;
ONIONS = 1;
plantType = FLAX;
CLICK_MIN_WEED = 15*1000;
CLICK_MIN_SEED = 27*1000;
numSeedsHarvested = 0;

-------------------------------------------------------------------------------
-- initGlobals()
--
-- Set up black magic values used for trying to walk a standard grid.
-------------------------------------------------------------------------------

function initGlobals()
  -- Macro written with 1720 pixel wide window

  srReadScreen();
  xyWindowSize = srGetWindowSize();

  local pixel_scale = xyWindowSize[0] / 1720;
  lsPrintln("pixel_scale " .. pixel_scale);

  walk_px_y = math.floor(walk_px_y * pixel_scale);
  walk_px_x = math.floor(walk_px_x * pixel_scale);

  local walk_x_drift = 14;
  local walk_y_drift = 18;
  if (lsScreenX < 1280) then 
    -- Have to click way off center in order to not move at high resolutions
    walk_x_drift = math.floor(walk_x_drift * pixel_scale);
    walk_y_drift = math.floor(walk_y_drift * pixel_scale);
  else
    -- Very little drift at these resolutions, clicking dead center barely moves
    walk_x_drift = 1;
    walk_y_drift = 1;
  end

  xyCenter[0] = xyWindowSize[0] / 2 - walk_x_drift;
  xyCenter[1] = xyWindowSize[1] / 2 + walk_y_drift;
  if plantType == FLAX then
    xyFlaxMenu[0] = xyCenter[0] - 43*pixel_scale;
    xyFlaxMenu[1] = xyCenter[1] + 0;
  else
    xyFlaxMenu[0] = xyCenter[0] - 20;
    xyFlaxMenu[1] = xyCenter[1] - 10;
  end
end

-------------------------------------------------------------------------------
-- checkWindowSize()
--
-- Set width and height of flax window based on whether they are guilded.
-------------------------------------------------------------------------------

window_check_done_once = false;
function checkWindowSize(x, y)
  if not window_check_done_once then
    srReadScreen();
    window_check_done_once = true;
     local pos = srFindImageInRange(imgUseable, x-5, y-50, 150, 100)
  end
end

-------------------------------------------------------------------------------
-- promptFlaxNumbers()
--
-- Gather user-settable parameters before beginning
-------------------------------------------------------------------------------

function promptFlaxNumbers()
  scale = 1.0;
	
  local z = 0;
  local is_done = nil;
  local value = nil;
  -- Edit box and text display
  while not is_done do
    -- Make sure we don't lock up with no easy way to escape!
    checkBreak();

    lsPrint(10, 10, z, scale, scale, 0xFFFFFFff, "Choose passes and grid size");

    -- lsEditBox needs a key to uniquely name this edit box
    --   let's just use the prompt!
    -- lsEditBox returns two different things (a state and a value)
    local y = 40;

    lsPrint(5, y, z, scale, scale, 0xFFFFFFff, "Flax Name:");
    is_done, seedType = lsEditBox("flaxname", 120, y, z, 100, 30, scale, scale,
                                   0x000000ff, seedType);
    y = y + 32

    lsPrint(5, y, z, scale, scale, 0xFFFFFFff, "Passes:");
    is_done, num_loops = lsEditBox("passes", 120, y, z, 50, 30, scale, scale,
                                   0x000000ff, num_loops);
    if not tonumber(num_loops) then
      is_done = nil;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER");
      num_loops = 1;
    end
    y = y + 32;

    lsPrint(5, y, z, scale, scale, 0xFFFFFFff, "Grid size:");
    is_done, grid_w = lsEditBox("grid", 120, y, z, 50, 30, scale, scale,
                                0x000000ff, grid_w);
    if not tonumber(grid_w) then
      is_done = nil;
      lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER");
      grid_w = 1;
      grid_h = 1;
    end
    grid_w = tonumber(grid_w);
    grid_h = grid_w;
    y = y + 32;

    if not is_plant then
      lsPrint(5, y, z, scale, scale, 0xFFFFFFff, "Seeds per:");
      is_done, seeds_per_pass = lsEditBox("seedsper", 120, y, z, 50, 30,
                                          scale, scale, 0x000000ff, 4);
      seeds_per_pass = tonumber(seeds_per_pass);
      if seeds_per_pass then
        seeds_per_iter = seeds_per_pass * grid_w * grid_h;
      end
      if not seeds_per_pass then
        is_done = nil;
        lsPrint(10, y+18, z+10, 0.7, 0.7, 0xFF2020ff, "MUST BE A NUMBER");
        seeds_per_pass = 1;
      end
      y = y + 32;
    end

    is_plant = lsCheckBox(10, y, z+10, 0xFFFFFFff, "Grow Flax", is_plant);
    y = y + 32;

    if lsButtonText(170, y-32, z, 100, 0xFFFFFFff, "OK") then
      is_done = 1;
    end

    if is_plant then
      lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff,
                     "This will plant and harvest a " .. grid_w .. "x" ..
                     grid_w .. " grid of " .. seedType .. " Flax " .. num_loops ..
                     " times, requiring " .. (grid_w * grid_w * num_loops) ..
                     " seeds, doing " .. (grid_w*grid_w*num_loops) ..
                     " flax harvests.");
    else
      local seedTotal = grid_w * grid_h * num_loops * seeds_per_pass
      lsPrintWrapped(10, y, z+10, lsScreenX - 20, 0.7, 0.7, 0xD0D0D0ff,
                     "This will plant a " .. grid_w .. "x" .. grid_w ..
                     " grid of " .. seedType .. " Flax and harvest it " .. seeds_per_pass ..
                     " times, requiring " .. (grid_w * grid_w) ..
                     " seeds, and repeat this " .. num_loops ..
                     " times, yielding " .. seedTotal .. " seed harvests.");
    end

    if is_done and (not num_loops or not grid_w) then
      error 'Canceled';
    end
		
    if lsButtonText(lsScreenX - 110, lsScreenY - 30, z, 100, 0xFFFFFFff,
                    "End script") then
      error "Clicked End Script button";
    end

    lsDoFrame();
    lsSleep(tick_delay);
  end
end

-------------------------------------------------------------------------------
-- getPlantWindowPos()
-------------------------------------------------------------------------------

lastPlantPos = null;

function getPlantWindowPos()
  srReadScreen();
  local plantPos = findText(seedType);
  if plantPos then
    plantPos[0] = plantPos[0] + 20;
    plantPos[1] = plantPos[1] + 10;
  else
    plantPos = lastPlantPos;
    if plantPos then
      safeClick(plantPos[0], plantPos[1]);
      lsSleep(refresh_time);
    end
  end
  if not plantPos then
    error 'Could not find plant window';
  end
  lastPlantPos = plantPos;
  return plantPos;
end

-------------------------------------------------------------------------------
-- getToggle()
--
-- Returns 0 or 2 alternately. Used to slightly shift position of windows
-- while collecting them.
-------------------------------------------------------------------------------

toggleBit = 0;

function getToggle()
  if toggleBit == 0 then
    toggleBit = 2;
  else
    toggleBit = 0;
  end
  return toggleBit;
end

-------------------------------------------------------------------------------
-- doit()
-------------------------------------------------------------------------------

function doit()
  promptFlaxNumbers();
  askForWindow(askText);
  initGlobals();
  srReadScreen();
  local startPos = findCoords();
  lsPrintln("Start pos:" .. startPos[0] .. ", " .. startPos[1]);
  if not startPos then
    error("ATITD clock not found.\Verify entire clock and borders are visible. Try moving clock slightly.");
  end

  setCameraView(CARTOGRAPHER2CAM);
  drawWater();

  for loop_count=1, num_loops do
    error_status = "";
    numSeedsHarvested = 0;
    clicks = {};
    local finalPos = plantAndPin(loop_count);
    dragWindows(loop_count);
    harvestAll(loop_count);
    walkHome(loop_count, startPos);
    drawWater();
  end
  lsPlaySound("Complete.wav");
end

-------------------------------------------------------------------------------
-- plantAndPin()
--
-- Walk around in a spiral, planting flax seeds and grabbing windows.
-------------------------------------------------------------------------------

function plantAndPin(loop_count)
  local xyPlantFlax = getPlantWindowPos();
		
  -- for spiral
  local dxi=1;
  local dt_max=grid_w;
  local dt=grid_w;
  local dx={1, 0, -1, 0};
  local dy={0, -1, 0, 1};
  local num_at_this_length = 3;
  local x_pos = 0;
  local y_pos = 0;
  local success = true;

  for y=1, grid_h do
    for x=1, grid_w do
      statusScreen("(" .. loop_count .. "/" .. num_loops .. ") Planting " ..
                   x .. ", " .. y);
      success = plantHere(xyPlantFlax, y);
      if not success then
        break;
      end

      -- Move to next position
      if not ((x == grid_w) and (y == grid_h)) then
        lsPrintln('walking dx=' .. dx[dxi] .. ' dy=' .. dy[dxi]);
	lsSleep(40);
        x_pos = x_pos + dx[dxi];
        y_pos = y_pos + dy[dxi];
	local spot = getWaitSpot(xyFlaxMenu[0], xyFlaxMenu[1]);
        safeClick(xyCenter[0] + walk_px_x*dx[dxi],
                  xyCenter[1] + walk_px_y*dy[dxi], 0);
	
        spot = getWaitSpot(xyFlaxMenu[0], xyFlaxMenu[1]);
	if not waitForChange(spot, 1500) then
	  error_status = "Did not move on click.";
	  break;
	end
        lsSleep(walk_time);
        waitForStasis(spot, 1500);
        dt = dt - 1;
        if dt == 1 then
          dxi = dxi + 1;
          num_at_this_length = num_at_this_length - 1;
          if num_at_this_length == 0 then
            dt_max = dt_max - 1;
            num_at_this_length = 2;
          end
          if dxi == 5 then
            dxi = 1;
          end
          dt = dt_max;
        end
      else
        lsPrintln('skipping walking, on last leg');
      end
    end
    checkBreak();
    if not success then
      break;
    end
  end
  local finalPos = {};
  finalPos[0] = x_pos;
  finalPos[1] = y_pos;
  return finalPos;
end

-------------------------------------------------------------------------------
-- plantHere(xyPlantFlax)
--
-- Plant a single flax bed, get the window, pin it, then stash it.
-------------------------------------------------------------------------------

function plantHere(xyPlantFlax, y_pos)
  -- Plant
  lsPrintln('planting ' .. xyPlantFlax[0] .. ',' .. xyPlantFlax[1]);
  local bed = clickPlant(xyPlantFlax);
  if not bed then
    return false;
  end

  -- Bring up menu
  lsPrintln('menu ' .. bed[0] .. ',' .. bed[1]);
  if not openAndPin(bed[0], bed[1], 3500) then
    error_status = "No window came up after planting.";
    return false;
  end

--  if plantType == ONIONS then
--    lsPrintln("Onions");
--    lsSleep(200);
--    srReadScreen();
--    local waters = findAllImages("WaterThese.png");
--    for i = 1,#waters do
--      lsPrintln("Water");
--      safeClick(waters[i][0]+5, waters[i][1]+5);
--    end
--    sleepWithStatus(1000, "First Water");
--  end

  -- Check for window size
  checkWindowSize(bed[0], bed[1]);

  -- Move window into corner
  stashWindow(bed[0] + 5, bed[1], BOTTOM_RIGHT);

  return true;
end

function clickPlant(xyPlantFlax)
  local result = xyFlaxMenu;
  local spot = getWaitSpot(xyFlaxMenu[0], xyFlaxMenu[1]);
  safeClick(xyPlantFlax[0], xyPlantFlax[1], 0);

  local plantSuccess = waitForChange(spot, 1500);
  if not plantSuccess then
    error_status = "No flax bed was placed when planting.";
    result = nil;
  end
  return result;
end

-------------------------------------------------------------------------------
-- dragWindows(loop_count)
--
-- Move flax windows into a grid on the screen.
-------------------------------------------------------------------------------

function dragWindows(loop_count)
  statusScreen("(" .. loop_count .. "/" .. num_loops .. ")  " ..
               "Dragging Windows into Grid");
  arrangeStashed(nil, true, nil, window_h);
end

-------------------------------------------------------------------------------
-- harvestAll(loop_count)
--
-- Harvest all the flax or seeds and clean up the windows afterwards.
-------------------------------------------------------------------------------

function harvestAll(loop_count)
  local did_harvest = false;
  local harvestLeft = 0;
  local seedIndex = 1;
  local seedWave = 1;
  local lastTops = {};
  while not did_harvest do
    -- Monitor for Weed This/etc
    lsSleep(refresh_time);
    srReadScreen();
    local tops = findAllText(thisIs);
    for i=1,#tops do
      safeClick(tops[i][0], tops[i][1]);
    end

    if is_plant then
      harvestLeft = #tops;
    else
      harvestLeft = seeds_per_iter - numSeedsHarvested;
    end

    statusScreen("(" .. loop_count .. "/" .. num_loops ..
                 ") Harvests Left: " .. harvestLeft);

    lsSleep(refresh_time);
    srReadScreen();
    if is_plant then
      lsPrintln("Checking Weeds");
      lsPrintln("numTops: " .. #tops);
      local weeds = findAllText(weedThis);
      for i=#weeds, 1, -1 do
        lastClick = lastClickTime(weeds[i][0], weeds[i][1]);
        if lastClick == nil or lsGetTimer() - lastClick >= CLICK_MIN_WEED then
          clickText(weeds[i]);
          trackClick(weeds[i][0], weeds[i][1]);
        end
      end

      local waters = findAllText(weedAndWater);
      for i=#waters, 1, -1 do
        lastClick = lastClickTime(waters[i][0], waters[i][1]);
        if lastClick == nil or lsGetTimer() - lastClick >= CLICK_MIN_WEED then
          clickText(waters[i]);
          trackClick(waters[i][0], waters[i][1]);
        end
      end

      local harvests = findAllText(harvest);
      for i=#harvests, 1, -1 do
        lastClick = lastClickTime(harvests[i][0], harvests[i][1]);
        if lastClick == nil or lsGetTimer() - lastClick >= CLICK_MIN_WEED then
          clickText(harvests[i]);
          trackClick(harvests[i][0], harvests[i][1]);
        end
      end
      
      -- check for beds needing ripping out
      local hsr = findText(harvestSeeds, nil, REGION);
      if hsr then
        clickText(findText(utility, hsr));
        ripLoc = waitForText(txtRipOut, 1000);
        if ripLoc then
          clickText(ripLoc);
        end
      end
    else
      seedsList = findAllText(harvestSeeds);
      for i=#seedsList, 1, -1 do
        lastClick = lastClickTime(seedsList[i][0], seedsList[i][1]);
        if lastClick == nil or lsGetTimer() - lastClick >= CLICK_MIN_SEED then
          clickText(seedsList[i]);
          trackClick(seedsList[i][0], seedsList[i][1]);
          numSeedsHarvested = numSeedsHarvested + 1;
        end
      end
    end
    
    if numSeedsHarvested >= seeds_per_iter and not is_plant  then
      did_harvest = true;
    end

    if #tops <= 0 then
      lsPrintln("finished harvest");
      did_harvest = true;
    end
    checkBreak();
  end
  lsPrintln("ripping out all seeds");
  ripOutAllSeeds();
  -- Wait for last flax bed to disappear
  sleepWithStatus(1500, "(" .. loop_count .. "/" .. num_loops ..
		  ") ... Waiting for flax beds to disappear");
end

-------------------------------------------------------------------------------
-- walkHome(loop_count, finalPos)
--
-- Walk back to the origin (southwest corner) to start planting again.
-------------------------------------------------------------------------------

function walkHome(loop_count, finalPos)
  -- Close all empty windows
  closeEmptyAndErrorWindows();
  -- remove any screens with the too far away text
  statusScreen("(" .. loop_count .. "/" .. num_loops .. ") Walking...");

  walkTo(finalPos);

  -- Walk back
--  for x=1, finalPos[0] do
--    local spot = getWaitSpot(xyCenter[0] - walk_px_x, xyCenter[1]);
--    safeClick(xyCenter[0] - walk_px_x, xyCenter[1], 0);
--    lsSleep(walk_time);
--    waitForStasis(spot, 1000);
--  end
--  for x=1, -(finalPos[1]) do
--    local spot = getWaitSpot(xyCenter[0], xyCenter[1] + walk_px_y);
--    safeClick(xyCenter[0], xyCenter[1] + walk_px_y, 0);
--    lsSleep(walk_time);
--    waitForStasis(spot, 1000);
--  end
end

-------------------------------------------------------------------------------
-- ripOutAllSeeds
--
-- Use the Utility menu to rip out a flax bed that has gone to seed.
-- pos should be the screen position of the 'This Is' text on the window.
-------------------------------------------------------------------------------

function ripOutAllSeeds()
  statusScreen("Ripping Out");
  srReadScreen();
  flaxRegions = findAllText("This is ", nil, REGION)
  for i = 1, #flaxRegions do
    local utloc = waitForText(utility, nil, nil, flaxRegions[i]);
    lsPrintln("Clicking Utility.. button at: " .. utloc[0] .. ", " .. utloc[1]);
    clickText(utloc);
    lsPrintln("Clicking rip out");
    clickText(waitForText(txtRipOut));
    lsSleep(refresh_time);
    lsPrintln("Unpinning region");
    unpinWindow(flaxRegions[i]);
    lsSleep(refresh_time);
    checkBreak();
  end
end

clicks = {};
function trackClick(x, y)
  local curTime = lsGetTimer();
  lsPrintln("Tracking click " .. x .. ", " .. y .. " at time " .. curTime);
  if clicks[x] == nil then
    clicks[x] = {};
  end
  clicks[x][y] = curTime;
end

function lastClickTime(x, y)
  if clicks[x] ~= nil then
    if clicks[x][y] ~= nil then
      lsPrintln("Click " .. x .. ", " .. y .. " found at time " .. clicks[x][y]);
    end
    return clicks[x][y];
  end
  lsPrintln("Click " .. x .. ", " .. y .. " not found. ");
  return nil;
end

 



My Paint Recipes

A B C D F G H I K L M N O P R S T V W Y

A

AliceBlue
AntiqueWhite
Amethyst 1 Iron, 5 Clay, 1 Potash, 1 Saltpeter, 1 Lead, 2 Copper
Aqua
Aquamarine 3 Copper, 7 EarthLight
Azure

B

Baker Miller Pink 3 Clay, 2 Carrot, 1 Iron, 1 Sulfur, 1 Saltpeter, 4 RedSand
Banana
Barn Red 1 Clay, 2 Iron, 6 RedSand, 2 Silver
Beet 10 Cabbage
Beige
Bisque
Black
Blanched Almond
Blaze Orange
Blue
Blue Violet
Boysenberry 4 Cabbage, 6 Clay
Bright Pink
Brown 2 Carrot, 8 RedSand
Burgundy Red 8 RedSand, 2 Silver 4 Iron 5 RedSand 1 Silver
Burlywood
Burnt Sienna
Burnt Umber 3 Clay, 7 RedSand 10 Iron

C

Cadet Blue 4 Cabbage, 6 Copper
Cadmium Orange
Cadmium Yellow
Carrot 10 Carrot
Chartreuse
Chocolate
Cobalt Blue 1 Cabbage, 1 ToadSkin, 1 Carrot, 1 DeadTongue, 1 Lime, 5 Clay 3 Cabbage, 4 Copper, 1 Lead, 2 Silver
Cobalt Green 1 Potash, 6 Cabbage, 2 Copper, 1 Lime, 1 RedSand, 1 Clay
Coral
Cornflower Blue
Cornsilk
Crimson

D

Dark Blue
Dark Cyan
Dark Golden Rod
Dark Gray
Dark Green
Dark Jungle Green 1 Cabbage, 2 Clay, 7 Silver
Dark Khaki 8 Clay, 1 Sulfur, 2 Copper 10 Carrot, 6 Copper
Dark Magenta
Dark Olive Green 2 CabbageJuice, 7 Clay, 1 Silver 4 Carrot, 5 Copper, 1 EarthLight
Dark Orange
Dark Orchid 1 Iron, 4 RedSand, 1 Potash, 4 Cabbage, 1 Clay
Dark Red
Dark Salmon
Dark Scarlet 7 RedSand, 3 Silver
Dark Sea Green 4 Clay, 5 Copper, 1 Potash
Dark Sienna 3 Clay, 3 RedSand, 4 Silver
Dark Slate Blue 8 CabbageJuice, 2 Silver
Dark Slate Gray 2 CabbageJuice, 4 Clay, 4 Silver 10 ToadSkin
Dark Turquoise
Dark Violet
Deep Pink
Deep Sky Blue
Dim Gray 4 Clay, 3 Copper, 4 ToadSkin
Dodger Blue 1 Cabbage, 1 ToadSkin, 1 Clay, 1 DeadTongue, 1 Carrot, 5 Copper
Duke Blue

E

Eggshell White
Emerald Green

F

Feldspar
Fire Brick 3 Carrot, 7 RedSand
Floral White
Forest Green
Fuchsia

G

Gainsboro
Ghost White
Gold
Golden Rod 1 Copper, 7 Clay, 1 Potash, 2 Cabbage
Gray 4 Carrot, 4 Copper, 2 RedSand
Green
Green Yellow

H

Honeydew
Hot Pink

I

Imperial Blue
Indian Red 2 Cabbage, 8 Carrot
Indigo 6 Cabbage, 1 Sulfur, 1 Clay, 1 Saltpeter, 1 Carrot
Ivory

K

Khaki

L

Lavender
Lavender Blush
Lawn Green
Lemon Chiffon
Licorice 1 RedSand, 9 SilverPowder
Light Blue
Light Coral
Light Cyan
Light Goldenrod Yellow
Light Green
Light Grey
Light Pink
Light Salmon
Light Sea Green 8 Copper, 2 SilverPowder
Light Sky Blue
Light Slate Blue
Light Slate Gray 5 CabbageJuice, 5 Copper
Light Steel Blue
Light Yellow
Lime
Lime Green
Linen

M

Maroon
Medium Aquamarine 1 Carrot, 9 Copper
Medium Blue
Medium Orchid
Medium Purple
Medium Sea Green 9 Copper, 1 RedSand, 2 SilverPowder, 1 ToadSkin, 1 Sulfur, 2 Clay
Medium Slate Blue
Medium Spring Green
Medium Turquoise 10 Copper
Medium Violet Red
Melon
Midnight Blue
Mint Cream
Misty Rose
Moccasin

N

NavajoWhite
Navy

O

Old Lace
Olive
Olive Drab 9 Clay, 1 EarthLight
Orange
Orange Red
Orchid
Oxford Blue

P

Pale Golden Rod
Pale Green
Pale Turquoise
Pale Violet Red
Papaya Whip
Peach Puff
Peacock 1 CabbageJuice, 9 Copper
Persian Indigo 5 CabbageJuice, 5 SilverPowder
Persian Pink
Peru 9 Carrot, 1 Copper
Pink
Plum
Powder Blue
Prussian Blue
Purple 6 Cabbage, 1 Sulfur, 1 Clay, 1 Saltpeter, 4 Carrot

R

Raw Sienna
Red
Red Devil
Rich Black
Rosy Brown 2 Cabbage, 8 Carrot, 2 Copper
Royal Blue
Ruby Red 10 Red Sand

S

Saddle Brown 10 Clay
Salmon
Sandy Brown 4 Carrot, 4 Clay, 1 Sulfur, 1 Carrot
Sangria 5 Carrot, 3 Clay, 1 Iron, 1 ToadSkin, 1 Saltpeter
Sap Green
Sea Green 6 Copper, 1 RedSand, 3 SilverPowder
Seal Brown 3 Clay, 7 SilverPowder
Seashell
Sienna 1 CabbageJuice, 9 Clay
Silver
Sky Blue 2 Clay, 1 Potash, 7 Copper
Slate Blue
Slate Gray 8 CabbageJuice, 2 Copper 1 Potash, 6 Cabbage, 3 Copper
Smokey Black
Snow
Spring Green
Steel Blue 4 CabbageJuice, 5 Copper, 1 Lead 1 Potash, 6 Cabbage, 2 Copper, 1 Lime
Steel Pink

T

Tan
Teal 6 Copper, 4 Silver
Thistle
Tomato
Turquoise
Tyrian Purple 1 Copper, 6 RedSand, 3 SilverPowder

V

Violet
Violet Red

W

Wheat
White
White Smoke

Y

Yellow
Yellow Green

Z

Zaffre



HERBS


Allbright*1
Aloe
Altar's Blessing*1
Anansi*1
Apiphenalm*1
Apothecary's Scythe
Artemisia
Asafoetida
Asane
Ashoka
Azure Tristeria
Banto*H
Bay Tree
Bee Balm
Beetle Leaf*1
Beggar's Button
Bhillawa*1
Bilimbi
Bitter Florian
Black Pepper Plant*1
Blessed Mariae
Bleubillae
Blood Balm
Blood Blossom
Blooded Harebell
Blood Root*1
Bloodwort
Blue Damia
Blue Tarafern*1
Blueberry Tea Tree*1
Bluebottle Clover*1
Blushing Blossom
Brassy Caltrops
Brown Muskerro*1
Buckler-leaf*1
Bull's Blood
Burnt Tarragon
Butterfly Damia
Butterroot
Calabash
Camelmint
Caraway
Cardamom*1
Cassia
Chaffa
Chatinabrae*1
Chives*1
Chukkah
Cicada Bean*1
Cinnamon
Cinquefoil
Cirallis
Clingroot*1
Common Basil*1
Common Rosemary*1
Common Sage*1
Corsacia
Covage*1
Crampbark*1
Cranesbill*1
Creeping Black Nightshade
Creeping Thyme
Crimson Clover
Crimson Lettuce*1
Crimson Nightshade*1
Crimson Pipeweed*1
Crimson Windleaf
Crumpled Leaf Basil
Curly Sage
Cyan Cressida
Daggerleaf*1
Dalchini
Dameshood
Dank Mullien
Dark Ochoa*1
Dark Radish
Dark Russet
Deadly Catsclaw
Deadwood Tree
Death's Piping
Dewplant
Digweed Burnt
Discorea*1
Drapeau D'or
Dusty Blue Sage*1
Dwarf Hogweed*1
Dwarf Wild Lettuce*1
Earth Apple*1
Elegia
Enchanter's Plant
Finlow*1
Fire Allspice*1
Fire Lily*1
Fivesleaf*1
Flaming Skirret
Flander's Blossom*1
Fleabane
Fool's Agar*1
Fumitory
Garcinia*1
Garlic Chives
Ginger Root*1
Ginger Tarragon
Ginseng Root
Glechoma*1
Gnemnon
Gokhru*1
Golden Dubloons
Golden Gladalia
Golden Sellia
Golden Sun
Golden Sweetgrass
Golden Thyme*1
Gynura*1
Harebell*1
Harrow*1
Hazlewort*1
Headache Tree
Heartsease
Hogweed
Homesteader's Palm
Honey Mint
Houseleek*1
Hyssop
Ice Blossom
Ice Mint
Ilex
Indigo Damia
Ipomoea*1
Jagged Dewcup*1
Jaivanti
Jaiyanti
Joy of the Mountain
Jugwort Spicy
Katako Root
Khokali Toasty
King's Coin
Lamae
Larkspur
Lavender Navarre
Lavender Scented
Lemon Basil
Lemondrop*1
Lemon Grass
Lilia
Liquorice
Lungclot
Lythrum*1
Mahonia
Malice Weed
Mandrake Root
Maragosa
Mariae*1
Meadowsweet*H2
Medicago
Mindanao*1
Miniature Bamboo
Miniature Lamae
Mirabellis Fern
Moon Aloe*1
Morpha*1
Motherwort*1
Mountain Mint*1
Myristica*1
Myrrh
Naranga
Nubian Liquorice
Octec's Grace
Opal Harebell
Orange Niali
Orange Sweetgrass
Orris
Pale Dhamasa*H1
Pale Ochoa
Pale Russet
Pale Skirret
Panoe
Paradise Lily
Patchouli
Peppermint
Pippali*1
Pitcher Plant*1
Primula*1
Prisniparni
Pulmonaria Opal
Purple Tintiri
Quamash
Red Pepper Plant*1
Revivia
Rhubarb Harsh
Royal Rosemary
Rubia
Rubydora
Sacred Palm
Sagar Ghota
Sandalwood
Sandy Dustweed
Satsachi
Scaley
Schisandra
Shrub Sage*1
Shrubby Basil
Shyama*1
Shyamalata
Sickly Root
Silvertongue Damia*1
Skirret Spicy
Sky Gladalia
Soapwort
Sorrel
Spinach
Spinnea Harsh
Squill Mellow
Steel Bladegrass
Stickler Hedge
Strawberry Tea
Strychnos
Sugar Cane
Sweet Groundmaple
Sweetflower
Sweetgrass
Sweetsop
Tagetese*1
Tamarask
Tangerine Dream
Thunder Plant
Thyme*1
Tiny Clover*1
Trilobe Mellow
Tristeria
True Tarragon*1
Tsangto Bitter
Tsatso Antiseptic
Turtle's Shell
Umber Basil
Upright Ochoa
Vanilla Tea Tree
Verdant Squill
Verdant Two-Lobe
Wasabi
Weeping Patala
White Pepper Plant
Whitebelly
Wild Garlic
Wild Lettuce
Wild Onion
Wild Yam
Wood Sage
Xanat
Xanosi*1
Yava*1
Yellow Gentian
Yellow Tristeria
Yigory*1
Zanthoxylum*1