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 17:58, 3 December 2015 by Shayra (talk | contribs)
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!

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/
http://www.atitd.org/wiki/tale7/File:Dymo.png
http://www.atitd.org/wiki/tale7/File:Water_this.png


-- 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 must be in F8F8 cam zoomed in.  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"; waterthis = "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 = 126;

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)
   if pos then
     window_w = 166;
     window_h = 136;
   end
 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
 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(waterthis);
     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
     hsr = findRegionWithText(harvestSeeds);
     if hsr then
       lsPrintln("hsr found?");
       clickText(findText(utility, nil, nil, hsr));
       ripLoc = waitForText(txtRipOut);
       clickText(ripLoc);
     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
Beet
Beige
Bisque
Black
Blanched Almond
Blaze Orange
Blue
Blue Violet
Boysenberry 1 Cabbage, 8 Clay, 1 Copper, 1 Saltpeter
Bright Pink
Brown
Burgundy Red
Burlywood
Burnt Sienna
Burnt Umber

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 Khaki 8 Clay, 1 Sulfur, 2 Copper
Dark Magenta
Dark Olive Green
Dark Orange
Dark Orchid
Dark Red
Dark Salmon
Dark Sea Green
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

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

Indian Red
Indigo
Ivory

K

Khaki

L

Lavender
Lavender Blush
Lawn Green
Lemon Chiffon
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
Midnight Blue
Mint Cream
Misty Rose
Moccasin

N

NavajoWhite
Navy

O

Old Lace
Olive
Olive Drab
Orange
Orange Red
Orchid

P

Pale Golden Rod
Pale Green
Pale Turquoise
Pale Violet Red
Papaya Whip
Peach Puff
Peru
Pink
Plum
Powder Blue
Purple

R

Red
Rosy Brown
Royal Blue
Ruby Red 10 Red Sand

S

Saddle Brown
Salmon
Sandy Brown
Sea Green
Seashell
Sienna
Silver
Sky Blue
Slate Blue
Slate Gray
Snow
Spring Green
Steel Blue

T

Tan
Teal
Thistle
Tomato
Turquoise

V

Violet
Violet Red

W

Wheat
White
White Smoke

Y

Yellow
Yellow Green


MACRO

This runs on AC Tools (be sure to Run As Admin)
Simple Icon Collector for grass, slate or clay. Select the proper icon, F2 to start it and click ahead to run. The macro automatically picks it.
There is no stop to it unless you open Ac Tools>Editor>Preferences>Global Hotkeys>in SECOND box put any letter (I used Q for Quit) and after that F2 starts and Q will stop it.

//General purpose slate and clay collector.  Works best without water jugs
//or a fishing pole.  To begin, hover your mouse over the icon
//you wish to collect in ATITD (i.e. be over a patch of clay or a piece of
//slate and have this program active.  Press F2, and the macro will start.
Constants
Red = 0
Green = 0
Blue = 0
XPos = 0
YPos = 0
CurrKey = 0
End
SetConst XPos = {MouseX}
SetConst YPos = {MouseY}
LoadRGB $XPos, $YPos
SetConst Red = {RGBRed}
SetConst Blue = {RGBBlue}
SetConst Green = {RGBGreen}
SetConst CurrKey = {GlobalKeys}



loop 10000


GetRed  $XPos, $YPos = $Red
	GetGreen  $XPos, $YPos = $Green
		GetBlue  $XPos, $YPos = $Blue
	
			MousePos $XPos, $YPos
			Delay 10
  		LeftClick 
		End
	End
End
	
Delay 150
End


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
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*H1
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
Pale Ochoa
Pale Russet
Pale Skirret
Panoe
Paradise Lily
Patchouli
Peppermint
Pippali*1
Pitcher Plant*1
Primula
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
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
Yava*1
Yellow Gentian
Yellow Tristeria
Yigory*1
Zanthoxylum*1

ALIGNMENT

stoneshower-- kerisorange-- Chart-- Daetrin-- Amy-- Aarys-- savanah--