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.
Difference between revisions of "User:Shayra"
|  (→S) |  (→T) | ||
| Line 1,091: | Line 1,091: | ||
| |style="font-weight: bold; background-color: #40E0D0"|Turquoise|| | |style="font-weight: bold; background-color: #40E0D0"|Turquoise|| | ||
| |- | |- | ||
| + | |style="font-weight: bold; background-color: #660023; color: #E4E4E4"|Tyrian Purple ||  | ||
| |- | |- | ||
| |colspan="2"| | |colspan="2"| | ||
Revision as of 20:08, 16 December 2015
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 | |
| Aqua | |
| Aquamarine | |
| Azure | |
| B | |
| Baker Miller Pink | 3 Clay, 2 Carrot, 1 Iron, 1 Sulfur, 1 Saltpeter, 4 RedSand | 
| Banana | |
| Barn Red | 3 Clay, 9 RedSand, 4 SilverPowder | 
| Beet | 8 CabbageJuice, 2 Clay | 
| Beige | |
| Bisque | |
| Black | |
| Blanched Almond | |
| Blaze Orange | |
| Blue | |
| Blue Violet | |
| Boysenberry | 4 CabbageJuice, 6 Clay | 
| Bright Pink | |
| Brown | 2 Carrot, 8 RedSand | 
| Burgundy Red | 8 RedSand, 2 SilverPowder | 
| Burlywood | |
| Burnt Sienna | |
| Burnt Umber | 3 Clay, 7 RedSand | 
| C | |
| Cadet Blue | 7 Clay, 1 Carrot, 1 Copper, 1 Cabbage, 1 Potash | 
| Cadmium Orange | |
| Cadmium Yellow | |
| Carrot | |
| Chartreuse | |
| Chocolate | |
| Cobalt Blue | 1 Cabbage, 1 ToadSkin, 1 Carrot, 1 DeadTongue, 1 Lime, 6 Clay | 
| Cobalt Green | |
| Coral | |
| Cornflower Blue | |
| Cornsilk | |
| Crimson | |
| D | |
| Dark Blue | |
| Dark Cyan | |
| Dark Golden Rod | |
| Dark Gray | |
| Dark Green | |
| Dark Jungle Green | |
| Dark Khaki | 8 Clay, 1 Sulfur, 2 Copper | 
| Dark Magenta | |
| Dark Olive Green | |
| Dark Orange | |
| Dark Orchid | |
| Dark Red | |
| Dark Salmon | |
| Dark Scarlet | |
| Dark Sea Green | |
| Dark Sienna | |
| Dark Slate Blue | |
| Dark Slate Gray | |
| Dark Turquoise | |
| Dark Violet | |
| Deep Pink | |
| Deep Sky Blue | |
| Dim Gray | |
| 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 | |
| Floral White | |
| Forest Green | |
| Fuchsia | |
| G | |
| Gainsboro | |
| Ghost White | |
| Gold | |
| Golden Rod | |
| Gray | |
| Green | |
| Green Yellow | |
| H | |
| Honeydew | |
| Hot Pink | |
| I | |
| Imperial Blue | |
| Indian Red | |
| Indigo | |
| Ivory | |
| K | |
| Khaki | |
| L | |
| Lavender | |
| Lavender Blush | |
| Lawn Green | |
| Lemon Chiffon | |
| Licorice | |
| Light Blue | |
| Light Coral | |
| Light Cyan | |
| Light Goldenrod Yellow | |
| Light Green | |
| Light Grey | |
| Light Pink | |
| Light Salmon | |
| Light Sea Green | |
| Light Sky Blue | |
| Light Slate Blue | |
| Light Slate Gray | |
| Light Steel Blue | |
| Light Yellow | |
| Lime | |
| Lime Green | |
| Linen | |
| M | |
| Maroon | |
| Medium Aquamarine | |
| Medium Blue | |
| Medium Orchid | |
| Medium Purple | |
| Medium Sea Green | |
| Medium Slate Blue | |
| Medium Spring Green | |
| Medium Turquoise | |
| Medium Violet Red | |
| Melon | |
| Midnight Blue | |
| Mint Cream | |
| Misty Rose | |
| Moccasin | |
| N | |
| NavajoWhite | |
| Navy | |
| O | |
| Old Lace | |
| Olive | |
| Olive Drab | |
| Orange | |
| Orange Red | |
| Orchid | |
| Oxford Blue | |
| P | |
| Pale Golden Rod | |
| Pale Green | |
| Pale Turquoise | |
| Pale Violet Red | |
| Papaya Whip | |
| Peach Puff | |
| Peacock | |
| Persian Indigo | |
| Persian Pink | |
| Peru | |
| Pink | |
| Plum | |
| Powder Blue | |
| Prussian Blue | |
| Purple | |
| R | |
| Raw Sienna | |
| Red | |
| Red Devil | |
| Rich Black | |
| Rosy Brown | |
| Royal Blue | |
| Ruby Red | 10 Red Sand | 
| S | |
| Saddle Brown | |
| Salmon | |
| Sandy Brown | |
| Sangria | |
| Sap Green | |
| Sea Green | |
| Seal Brown | |
| Seashell | |
| Sienna | |
| Silver | |
| Sky Blue | |
| Slate Blue | |
| Slate Gray | |
| Smokey Black | |
| Snow | |
| Spring Green | |
| Steel Blue | |
| Steel Pink | |
| T | |
| Tan | |
| Teal | |
| Thistle | |
| Tomato | |
| Turquoise | |
| Tyrian Purple | |
| V | |
| Violet | |
| Violet Red | |
| W | |
| Wheat | |
| White | |
| White Smoke | |
| Y | |
| Yellow | |
| Yellow Green | |
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
