website update; added bash scripts
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,28 @@
|
||||
<!--200810-->
|
||||
<h1>my favorite GDC talks </h1>
|
||||
september 18, 2020<br>
|
||||
game design, marketing<br>
|
||||
<br>
|
||||
I really should be keeping a list of these with descriptions, so why not keep them in an article? <br>
|
||||
<br>
|
||||
<h2><a href="https://www.youtube.com/watch?v=W20t1zCZv8M">Automated Testing and Instant Replays in Retro City Rampage </a></h2><br>
|
||||
Vblank Entertainment's Brian Provinciano (2015) <br>
|
||||
log button inputs to replay the game, for use in preproducing bugs, sharing replays on the community leaderboard, running cutscenes, and even controlling AI. It is 100% accurate in deterministic engines but also helpful in less deterministic engines.
|
||||
<br>
|
||||
<ul>
|
||||
<li><a href="/static/extra/SimpleInputRec.cpp">I backed up the code he shared here. </a> It is a simple example of how to record and playback button input, written in C++.</li>
|
||||
</ul>
|
||||
<br>
|
||||
<br>
|
||||
<h2><a href="https://www.youtube.com/watch?v=UJiv14uPOac">Empathizing with Steam: How People Shop for Your Game </a></h2><br>
|
||||
Chris Zukowski (2020) <br>
|
||||
tips for how to design your Steam store page based on Zukowski's screenshare and shopping diary observations of ordinary people shopping on Steam <br>
|
||||
<br>
|
||||
<ul>
|
||||
<li>Essentially, make your gameplay genre absolutely clear within the first 4 screenshots and in the short description so that people will wishlist your game to buy during a seasonal Steam Sale. </li>
|
||||
<li>Approach your wishlisters as complete newcomers. Jazz up your Steam page before a Steam Sale. Release an update, post in your forums, put a Santa hat on your character. When wishlisters return to your page, they will see an active game and be sold on it all over again. </li>
|
||||
<li>His conclusions are very similar to how I shop on Steam, except I could care less for the tag section. </li>
|
||||
<li>The romantic indie fiction section on Amazon dwarves the indie game section on Steam. To be immediately visible to their audience, romance authors follow a clear visual language on their covers to communicate their genres and sub-genres. Zukowski uses this as an extreme method for attracting your audience using the tropes of your genre, pointing out common UI elements and the shooter guy on every FPS cover. </li>
|
||||
<li>More notes @ <a href="/diary/entries/extra/gdc-design-steam-store">/diary/entries/extra/gdc-design-steam-store </a>
|
||||
</ul>
|
||||
<br>
|
||||
@@ -0,0 +1,67 @@
|
||||
<!--article,article-->
|
||||
<h1>title in lowercase </h1>
|
||||
date in lowercase<br>
|
||||
#accessibility #ai #apache #blogging #bottle #color #css #design #gamedescription #gamedesign #gamejam #gamemechanics #git #html #internationalization #json #localization #marketing #mockup #nginx #php #programming #python #regex #regularexpression #server #simpletemplate #skills #systemdiagram #webdev #webdesign #website<br>
|
||||
<br>
|
||||
<b>term</b> is etc. <br>
|
||||
<br>
|
||||
Capitalize some words. <br>
|
||||
<br>
|
||||
<ul>
|
||||
<li>CSS, HTML, JSON, PHP </li>
|
||||
<li>CSS Grid, Flexbox </li>
|
||||
<li>MMO, RPG </li>
|
||||
<li>NPC, WASD, XP </li>
|
||||
<li>.CSV </li>
|
||||
<li>IM, PC, UI, URL, VPS </li>
|
||||
<li>GDC, YouTube</li>
|
||||
<li>2D, 3D </li>
|
||||
<li>First Class, Second Class</li>
|
||||
</ul>
|
||||
<br>
|
||||
<br>
|
||||
<h2>lowercase </h2>
|
||||
<ul>
|
||||
<li>blessfrey, chimchooree, pixel joy, pixel sparrow </li>
|
||||
<li>gamedev, webdev </li>
|
||||
</ul>
|
||||
<br>
|
||||
<ul>
|
||||
<li>coroutine </li>
|
||||
<li>lol </li>
|
||||
</ul>
|
||||
<br>
|
||||
How to spell words... <br>
|
||||
<br>
|
||||
<ul>
|
||||
<li>Chatroom </li>
|
||||
<li>Cooldown </li>
|
||||
<li>Eye Shadow </li>
|
||||
<li>Freeform </li>
|
||||
<li>Gameplay </li>
|
||||
<li>Hello World</li>
|
||||
<li>Multiclassing </li>
|
||||
<li>Mockup </li>
|
||||
<li>Petsite </li>
|
||||
<li>Playstyle </li>
|
||||
<li>Plugin </li>
|
||||
<li>Premade </li>
|
||||
<li>Skillbar </li>
|
||||
<li>Subfunction </li>
|
||||
<li>Videogame </li>
|
||||
<li>Web Page </li>
|
||||
</ul>
|
||||
<br>
|
||||
<h2>subtitle </h2><br>
|
||||
spacing like this <br>
|
||||
<br>
|
||||
<br>
|
||||
<a target="_blank" href="/static/img/ent/screenshot_June292019.png">
|
||||
<img src="/static/img/ent/screenshot_June292019.png" alt="(image: Lots of Angels and other characters at a shopping center)" width="500" height="278.66">
|
||||
<br><br>
|
||||
<h3>subsubtitle with BrandName or CSS or chloe </h3>
|
||||
<br><br>
|
||||
<a target="_blank" href="/static/img/ent/screenshot_June292019.png">
|
||||
<img src="/static/img/ent/screenshot_June292019.png" alt="(image: Lots of Angels and other characters at a shopping center)" width="500" height="278.66">
|
||||
</a><br>
|
||||
<br>
|
||||
@@ -0,0 +1,288 @@
|
||||
<code>/******************************************************************************/</code>
|
||||
<code>// SIMPLE INPUT RECORD/PLAYBACK</code>
|
||||
<code>// (c) 2015 Brian Provinciano</code>
|
||||
<code>//</code>
|
||||
<code>// You are free to use this code for your own purposes, no strings attached.</code>
|
||||
//
|
||||
// This is a very basic sample to record and playback button input.
|
||||
// It's most useful when activated on startup, deactivated on shutdown for
|
||||
// global button recording/playback.
|
||||
//
|
||||
// For details on more advanced implementations, see my GDC 2015 session:
|
||||
// -> Automated Testing and Instant Replays in Retro City Rampage
|
||||
// The slides and full video will be available on the GDC Vault at a later date.
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
// wrap it so it can be conditionally compiled in.
|
||||
// for example, set INPUTREPLAY_CAN_RECORD to 1 to play the game and record the input, set it to 0 when done
|
||||
// INPUTREPLAY_CAN_RECORD takes priority over INPUTREPLAY_CAN_PLAYBACK
|
||||
|
||||
#define INPUTREPLAY_CAN_PLAYBACK 1
|
||||
#define INPUTREPLAY_CAN_RECORD 1
|
||||
|
||||
#define INPUTREPLAY_INCLUDED (INPUTREPLAY_CAN_PLAYBACK || INPUTREPLAY_CAN_RECORD)
|
||||
/******************************************************************************/
|
||||
|
||||
#if INPUTREPLAY_INCLUDED
|
||||
|
||||
#define INPUT_BUTTONS_TOTAL 32 // up to 32
|
||||
#define MAX_REC_LEN 0x8000 // the buffer size for storing RLE compressed button input (x each button)
|
||||
|
||||
/******************************************************************************/
|
||||
typedef struct
|
||||
{
|
||||
unsigned short *rledata;
|
||||
unsigned short rlepos;
|
||||
unsigned short datalen;
|
||||
unsigned short currentrun;
|
||||
} ButtonRec;
|
||||
/******************************************************************************/
|
||||
|
||||
// if INPUTREPLAY_CAN_RECORD, as soon as this class is instanced, it will automatically record when instanced/created.
|
||||
// statically creating this as a global will blanket the entire play session
|
||||
//
|
||||
// if INPUTREPLAY_CAN_PLAYBACK, playback will begin as soon as LoadFile() is used
|
||||
//
|
||||
class SimpleInputRec
|
||||
{
|
||||
unsigned int m_buttonstate;
|
||||
ButtonRec m_buttons[INPUT_BUTTONS_TOTAL];
|
||||
bool m_bRecording;
|
||||
|
||||
unsigned char* m_data;
|
||||
|
||||
public:
|
||||
SimpleInputRec()
|
||||
: m_buttonstate(0)
|
||||
, m_data(NULL)
|
||||
, m_bRecording(true)
|
||||
{
|
||||
}
|
||||
|
||||
~SimpleInputRec()
|
||||
{
|
||||
if(m_data)
|
||||
{
|
||||
#if INPUTREPLAY_CAN_RECORD
|
||||
WriteToFile();
|
||||
#endif
|
||||
delete[] m_data;
|
||||
}
|
||||
}
|
||||
|
||||
// run each frame before the game uses the live button input.
|
||||
// when recording, it saves the live input
|
||||
// during playback, it overwrites the live input
|
||||
void Update(bool bForce = false);
|
||||
|
||||
// to start a playback
|
||||
#if INPUTREPLAY_CAN_PLAYBACK
|
||||
bool LoadFile(KSTR szfilename);
|
||||
#endif
|
||||
|
||||
// to finish recording
|
||||
#if INPUTREPLAY_CAN_RECORD
|
||||
void WriteToFile();
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
void SimpleInputRec::Update(bool bForce)
|
||||
{
|
||||
#if INPUTREPLAY_CAN_RECORD
|
||||
if(m_bRecording)
|
||||
{
|
||||
unsigned int newbuttons = nesinput.buttons;
|
||||
|
||||
// allocate and initialize
|
||||
if(!m_data)
|
||||
{
|
||||
m_data = new unsigned char[INPUT_BUTTONS_TOTAL * MAX_REC_LEN * 2];
|
||||
unsigned short* dataptr = (unsigned short*)m_data;
|
||||
|
||||
for(int i=0; i<INPUT_BUTTONS_TOTAL; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
|
||||
btn.rledata = dataptr;
|
||||
dataptr += MAX_REC_LEN;
|
||||
|
||||
btn.rlepos = 0;
|
||||
btn.currentrun = 0;
|
||||
btn.datalen = MAX_REC_LEN;
|
||||
}
|
||||
}
|
||||
|
||||
// write RLE button bit streams
|
||||
for(int i=0; i<INPUT_BUTTONS_TOTAL; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
|
||||
if(bForce || (newbuttons&(1<<i)) != (m_buttonstate&(1<<i)) || btn.currentrun==0x7FFF)
|
||||
{
|
||||
if(btn.currentrun)
|
||||
{
|
||||
int bit = (m_buttonstate>>i)&1;
|
||||
btn.rledata[btn.rlepos++] = (bit<<15) | btn.currentrun;
|
||||
}
|
||||
btn.currentrun = bForce? 0 : 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
++btn.currentrun;
|
||||
}
|
||||
}
|
||||
|
||||
m_buttonstate = newbuttons;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if INPUTREPLAY_CAN_PLAYBACK
|
||||
if(!m_bRecording)
|
||||
{
|
||||
bool bIsRunning = false;
|
||||
for(int i=0; i<INPUT_BUTTONS_TOTAL; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
if(btn.rledata)
|
||||
{
|
||||
bIsRunning = true;
|
||||
if(!btn.currentrun && btn.rlepos<btn.datalen)
|
||||
{
|
||||
unsigned short value = btn.rledata[btn.rlepos++];
|
||||
btn.currentrun = value&0x7FFF;
|
||||
m_buttonstate &= ~(1<<i);
|
||||
m_buttonstate |= ((value>>15)&1)<<i;
|
||||
--btn.currentrun;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(btn.currentrun)
|
||||
{
|
||||
--btn.currentrun;
|
||||
}
|
||||
else if(btn.rlepos==btn.datalen)
|
||||
{
|
||||
btn.rledata = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(bIsRunning)
|
||||
{
|
||||
// TODO: this is where you can overwrite the live button state to the prerecorded one
|
||||
systeminput.buttons = m_buttonstate;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#if INPUTREPLAY_CAN_PLAYBACK
|
||||
bool SimpleInputRec::LoadFile(KSTR szfilename)
|
||||
{
|
||||
for(int i=0; i<INPUT_BUTTONS_TOTAL; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
|
||||
btn.datalen = 0;
|
||||
btn.rledata = NULL;
|
||||
btn.rlepos = 0;
|
||||
btn.currentrun = 0;
|
||||
}
|
||||
|
||||
delete[] m_data;
|
||||
m_bRecording = false;
|
||||
|
||||
if(fcheckexists(szfilename))
|
||||
{
|
||||
FILE* f = fopen(szfilename, "wb");
|
||||
if(f)
|
||||
{
|
||||
// WARNING: You'll want to do more error checking, but just to keep it simple...
|
||||
|
||||
fseek(f,0,SEEK_END);
|
||||
unsigned long filelen = ftell(f);
|
||||
fseek(f,0,SEEK_SET);
|
||||
|
||||
m_data = new unsigned char[filelen];
|
||||
fread(m_data, 1, filelen, f);
|
||||
fclose(f);
|
||||
|
||||
unsigned char* bufptr = m_data;
|
||||
int numbuttons = bufptr[0] | (bufptr[1]<<8);
|
||||
bufptr += 2;
|
||||
if(numbuttons <= INPUT_BUTTONS_TOTAL)
|
||||
{
|
||||
for(int i=0; i<numbuttons; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
|
||||
btn.datalen = bufptr[0] | (bufptr[1]<<8);
|
||||
bufptr += 2;
|
||||
}
|
||||
|
||||
for(int i=0; i<numbuttons; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
if(btn.datalen)
|
||||
{
|
||||
// WARNING: Endian dependent for simplcicity
|
||||
btn.rledata = (unsigned short*)bufptr;
|
||||
bufptr += btn.datalen*2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#if INPUTREPLAY_CAN_RECORD
|
||||
void SimpleInputRec::WriteToFile()
|
||||
{
|
||||
if(m_data && m_bRecording)
|
||||
{
|
||||
Update(true);
|
||||
|
||||
FILE* f = fopen("_autorec.rec","wb");
|
||||
if(f)
|
||||
{
|
||||
fputc(INPUT_BUTTONS_TOTAL, f);
|
||||
fputc(0, f);
|
||||
|
||||
for(int i=0; i<INPUT_BUTTONS_TOTAL; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
|
||||
fputc((unsigned char)btn.rlepos, f);
|
||||
fputc(btn.rlepos >> 8, f);
|
||||
}
|
||||
for(int i=0; i<INPUT_BUTTONS_TOTAL; ++i)
|
||||
{
|
||||
ButtonRec& btn = m_buttons[i];
|
||||
|
||||
// WARNING: Endian dependent for simplcicity
|
||||
fwrite(btn.rledata, 2, btn.rlepos, f);
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
#endif // INPUTREPLAY_INCLUDED
|
||||
</code>
|
||||
@@ -0,0 +1,36 @@
|
||||
<!--200918-->
|
||||
<h1>my favorite GDC talks: Empathizing with Steam: How People Shop for Your Game by Chris Zukowski (2020) </h1>
|
||||
september 18, 2020<br>
|
||||
marketing, sale, steam, wishlist<br>
|
||||
<br>
|
||||
<a href="https://www.youtube.com/watch?v=UJiv14uPOac">Empathizing with Steam: How People Shop for Your Game by Chris Zukowski (2020)</a> - tips for how to design your Steam store page based on Zukowski's screenshare and shopping diary observations of ordinary people shopping on Steam
|
||||
<ul>
|
||||
<li>Essentially, make your gameplay genre absolutely clear within the first 4 screenshots and in the short description so that people will wishlist your game to buy during a seasonal Steam Sale.</li>
|
||||
<li>Approach your wishlisters as complete newcomers. Jazz up your Steam page before a Steam Sale. Release an update, post in your forums, put a Santa hat on your character. When wishlisters return to your page, they will see an active game and be sold on it all over again.</li>
|
||||
<li>His conclusions are very similar to how I shop on Steam, except I could care less for the tag section.</li>
|
||||
<li>first 4 images are shown when hovering over thumbnail in Steam. Make them represent the pillars of your gameplay, so the genre is clear.</li>
|
||||
<li>don't try to coerce new audiences into trying your game. try to find your audience and show them exactly what they are looking for.
|
||||
<li>include UI in screenshots, so gamers can decipher the genre and some gameplay mechanics</li>
|
||||
<li>Gamers naturally compare new games with the leading games of their genres to decide whether they will enjoy it.</li>
|
||||
<li>indie romance authors (who compete on a market of 8 million vs. steam's 40 thousand) use clear visual language in their coverart: tartan kilt + sword + distant castle = highland romance; animal behind a hunk = shapeshifter romance; woman in front of group of hunks = reverse harem. So a reader who sees a cover with multiple guys and a wolf, she knows it's a reverse harem of shape-shifting wolf boys without any descriptions or trailers.</li>
|
||||
<li>applying the wisdom of the romance authors, understand your audience's genre interests as sub-sub-sub-genres and make your genre crystal clear in your store page.</li>
|
||||
<li>Apply the tropes of your genre. The FPS coverart guy with the gun on all CoD and BF games, the two Street Fighter healthbars on the top of any fighter game</li>
|
||||
<li>Part 4 - How to manage a Steam sale</li>
|
||||
<li>People check their wishlist during sales, looking for discounts.</li>
|
||||
<li>People don't remember why they wishlisted games, so your page must look fresh even to your wishlist crew. Before a sale, post an update, theme your capsule image, post an announcement, upload a small patch, and comment in the forums.</li>
|
||||
<li>People remember games that are always on sale. Frequent sales increase familiarity.</li>
|
||||
<li>Power users use gg.deals or steamdb to track historic lows. Strategically staircase your way down over time. Coincide your all-time-lows with Big Steam Sales. Harness the fear of missing out.</li>
|
||||
<li>How to get from wishlist to cart</li>
|
||||
<li>Before clicking 'buy,' they check developer and publisher for someone they recognize or trust. They check 'more from this studio' to check familiarity with the dev's other games.</li>
|
||||
<li>Release more games to build this trust and familiarity.</li>
|
||||
<li>They check the 'relevant to you' bar to see if the genre matches games they've played and that friends with similar taste also like the game.</li>
|
||||
<li>How to manage your sales pricing</li>
|
||||
<li>How to get from cart to library</li>
|
||||
<li>After loading cart, they ask their friends whether they should go for it.</li>
|
||||
<li>Your current customers have to become ambassadors to complete this purchase loop. Treat them well! </li>
|
||||
<li>Abandon cart recovery in other online retailers beckons shoppers back before the sale ends. Steam lacks this, potentially losing devs 10% in revenue - https://www.annexcloud.com/blog/31-shopping-cart-abandonment-statistics-for-2018/</li>
|
||||
<li>Do a second marketing push during the last day of a sale.</li>
|
||||
<li>5 - How to wishlisters into buyers</li>
|
||||
<li></li>
|
||||
</ul>
|
||||
<br>
|
||||
@@ -0,0 +1,443 @@
|
||||
abyssal whip
|
||||
adamantine
|
||||
airship
|
||||
aloe
|
||||
alpine
|
||||
amber fossil
|
||||
ambrosia
|
||||
amulet
|
||||
anachronism
|
||||
anagram
|
||||
animal parade
|
||||
aphrodisiac
|
||||
apple
|
||||
apothecary
|
||||
apricot
|
||||
asterism
|
||||
atelier
|
||||
bad cat
|
||||
Baldur
|
||||
bamboo
|
||||
bandit camp
|
||||
bandit king
|
||||
basil
|
||||
bell tower
|
||||
birthday dress
|
||||
birthstone
|
||||
black bear
|
||||
The Black Hand
|
||||
black knight
|
||||
black water
|
||||
black widow
|
||||
blackguard
|
||||
bloodstone
|
||||
blue and yellow
|
||||
blue blood
|
||||
blue rose
|
||||
bluebell
|
||||
bonfire
|
||||
box garden
|
||||
breath of life
|
||||
bubble bath
|
||||
bubble tea
|
||||
bunny boy
|
||||
buried treasure
|
||||
butterfly woman
|
||||
camel
|
||||
candlelight
|
||||
cashmere
|
||||
castle
|
||||
cat café
|
||||
cat familiar
|
||||
cat man
|
||||
catacombs
|
||||
celestial
|
||||
cemetery
|
||||
chained to rocks
|
||||
chain mail
|
||||
chameleon
|
||||
chamomile
|
||||
chandelier
|
||||
charmeuse
|
||||
cheese bread
|
||||
chimera
|
||||
chives
|
||||
chocolate factory
|
||||
chronomancer
|
||||
cipher
|
||||
citadel
|
||||
city of the dead
|
||||
clipart
|
||||
coin flip
|
||||
cold iron
|
||||
confetti
|
||||
constellation
|
||||
copycat
|
||||
cotton
|
||||
couture
|
||||
cove
|
||||
crab
|
||||
crazy quilt
|
||||
Crossroad Keep
|
||||
crucibled
|
||||
crystal sea
|
||||
daeva
|
||||
dark horse
|
||||
dark hour
|
||||
dark paradise
|
||||
death's-head hawkmoth
|
||||
deep space
|
||||
diadem
|
||||
Diana
|
||||
diorama
|
||||
dimetrodon
|
||||
dire wolf
|
||||
dollhouse
|
||||
donkey
|
||||
doppelgänger
|
||||
dragonfruit
|
||||
dragonstone
|
||||
dreamweaver
|
||||
Dymer
|
||||
dystopia
|
||||
ectoplasm
|
||||
edelweiss
|
||||
egg hunt
|
||||
elemental
|
||||
elipse
|
||||
elixir of life
|
||||
emberlight
|
||||
Entrana
|
||||
eventide
|
||||
epitaph
|
||||
Epsom salt
|
||||
eternal youth
|
||||
ettin
|
||||
evil twin
|
||||
fable
|
||||
falling leaves
|
||||
fairy lights
|
||||
fairy ring
|
||||
faun
|
||||
favored soul
|
||||
femme covert
|
||||
femme fatale
|
||||
fiery sword
|
||||
fire ball
|
||||
fire opal
|
||||
firebrand
|
||||
fishing village
|
||||
floating
|
||||
flower woman
|
||||
flying
|
||||
folklore
|
||||
fountain of youth
|
||||
forge
|
||||
fortress
|
||||
freezing fog
|
||||
fringe
|
||||
frog prince
|
||||
fullness of time
|
||||
gallows
|
||||
Garden of Eden
|
||||
gargoyle
|
||||
genie
|
||||
geode
|
||||
ghost orchid
|
||||
ghost ship
|
||||
ghost town
|
||||
girl in the internet
|
||||
girl in white
|
||||
glow stick
|
||||
glow-in-the-dark stars
|
||||
goblin
|
||||
gold rush
|
||||
gold standard
|
||||
golden apple
|
||||
golden orb weaver
|
||||
golem
|
||||
gray weather
|
||||
griffon
|
||||
grove
|
||||
guild
|
||||
guilty pleasure
|
||||
hall of monuments
|
||||
halo
|
||||
hand of God
|
||||
the hanged man
|
||||
hanging garden
|
||||
happy place
|
||||
haunted house
|
||||
headscarf
|
||||
heart
|
||||
hermit
|
||||
holly
|
||||
honeydew
|
||||
hot air balloon
|
||||
hot and cold game
|
||||
hot cocoa
|
||||
hydrangea
|
||||
igari makeup
|
||||
illuminated text
|
||||
imp
|
||||
incense
|
||||
invisible man
|
||||
iridescence
|
||||
ironwood
|
||||
jack-o'-lantern
|
||||
jacquard
|
||||
jade
|
||||
jasmine
|
||||
juicebox
|
||||
kaleidoscope
|
||||
kesi silk
|
||||
kigurumi
|
||||
kingdom
|
||||
La Belle Sans Merci
|
||||
labyrinth
|
||||
lady cat
|
||||
Lady of Shallot
|
||||
Lady of the Lake
|
||||
lady in black
|
||||
lake of fire
|
||||
lair
|
||||
lamentation
|
||||
lavender
|
||||
lemonade
|
||||
life-giver
|
||||
lighthouse
|
||||
lip oil
|
||||
Little Red Riding Hood
|
||||
lizardman
|
||||
lobster
|
||||
locket
|
||||
Lokasenna
|
||||
loner
|
||||
loom
|
||||
lost city
|
||||
lost continent
|
||||
lost soul
|
||||
lotus
|
||||
love letter
|
||||
love potion
|
||||
low poly
|
||||
lullaby
|
||||
macramé
|
||||
mages guild
|
||||
magic carpet
|
||||
man in the moon
|
||||
mandrake
|
||||
manna
|
||||
marine
|
||||
Mars
|
||||
mask
|
||||
masquerade
|
||||
mead of poetry
|
||||
mean girl
|
||||
melon soda
|
||||
memento mori
|
||||
memoir
|
||||
mercury rivers and lakes
|
||||
metamorphosis
|
||||
meteorite
|
||||
metropolis
|
||||
miasma
|
||||
Midas Touch
|
||||
millennial moon
|
||||
miniature
|
||||
mirror of Venus
|
||||
mirror on the wall
|
||||
mithril
|
||||
monastery
|
||||
money tree
|
||||
monkey and bear
|
||||
moon rock
|
||||
moonflower
|
||||
moonglow
|
||||
moonstone
|
||||
morning glory
|
||||
mossy cobblestone
|
||||
moth
|
||||
mudskipper
|
||||
mural
|
||||
muse
|
||||
necromancer
|
||||
nightlight
|
||||
nocturnality
|
||||
oneiromancer
|
||||
oblivion
|
||||
odalisque
|
||||
omen
|
||||
opal
|
||||
orb
|
||||
orichalcum
|
||||
orphan
|
||||
palace
|
||||
panda eyes
|
||||
paper crane
|
||||
paper fan
|
||||
pearl
|
||||
periwinkle
|
||||
personality test
|
||||
phantom residue
|
||||
phantom thief
|
||||
pharisee
|
||||
philosopher's stone
|
||||
pickpocketing
|
||||
pilgrimage
|
||||
pixie stick
|
||||
pinwheel
|
||||
planetary weather
|
||||
plastic vampire fangs
|
||||
plushie
|
||||
poetry and prose
|
||||
pomegranate
|
||||
poppy
|
||||
post-rock
|
||||
pretzel
|
||||
princess of Kentucky
|
||||
principality
|
||||
prism
|
||||
prison planet
|
||||
poinsettia
|
||||
popcorn
|
||||
porcelain
|
||||
propaganda
|
||||
prophecy
|
||||
proverb
|
||||
psalm
|
||||
pseudonym
|
||||
pumpkin carving
|
||||
quiz show
|
||||
rainbow
|
||||
raw honey
|
||||
reaper
|
||||
reclining woman
|
||||
red
|
||||
reverse trap
|
||||
road roller
|
||||
rooibos tea
|
||||
rose gold
|
||||
rose petal
|
||||
runestone
|
||||
s'more
|
||||
sailor fuku
|
||||
Sanctum
|
||||
sandalwood
|
||||
sandcastle
|
||||
sandman
|
||||
sanguine, my brother
|
||||
sardonic
|
||||
satire
|
||||
satyr
|
||||
scrying pool
|
||||
scythe
|
||||
sea foam
|
||||
sea glass
|
||||
sea of stars
|
||||
sea storm
|
||||
seastrand
|
||||
secret garden
|
||||
secret passageway
|
||||
secret room
|
||||
seven deadly sins
|
||||
seven heavenly virtues
|
||||
shapeshifter
|
||||
sheep
|
||||
shipwreck
|
||||
shoegaze
|
||||
shooting star
|
||||
silk
|
||||
silk embroidery
|
||||
singing sword
|
||||
skeleton
|
||||
skipping stone
|
||||
slide puzzle
|
||||
slime
|
||||
smoke and mirrors
|
||||
snow globe
|
||||
soma
|
||||
soulmate
|
||||
space cowboy
|
||||
spooky chews
|
||||
squid
|
||||
spellbook
|
||||
spelunking
|
||||
spice cookie
|
||||
spirit animal
|
||||
spy
|
||||
stained-glass
|
||||
stardust
|
||||
stargazer
|
||||
starry sky
|
||||
statuesque
|
||||
sticker
|
||||
stinky cat
|
||||
stone face
|
||||
stone people
|
||||
storm cloud
|
||||
strawberries and cream
|
||||
strawberry blonde
|
||||
strawberry shortcake
|
||||
sunflower
|
||||
swamp light
|
||||
swan song
|
||||
sword in the stone
|
||||
taffy
|
||||
talking forest
|
||||
tatting
|
||||
tea garden
|
||||
tears of Guthix
|
||||
terrarium
|
||||
three women
|
||||
tide pool
|
||||
tiger's eye
|
||||
toasted marshmallow
|
||||
topiary
|
||||
treasure trails
|
||||
tree of life
|
||||
trick or treat
|
||||
trickster
|
||||
tulip
|
||||
tungsten
|
||||
underwater
|
||||
underworld
|
||||
unicorn horn
|
||||
unstoppable mailman
|
||||
urban legend
|
||||
utopia
|
||||
vanity of vanities
|
||||
Venus
|
||||
waiting room
|
||||
waking dream
|
||||
walled city
|
||||
wampus cat
|
||||
wandering eye
|
||||
wanderlust
|
||||
wasp lady
|
||||
watchmen on the wall
|
||||
water bearer
|
||||
water nymph
|
||||
waterfall room
|
||||
weeping willow
|
||||
Whip-Poor-Will
|
||||
whisper
|
||||
white Christmas
|
||||
will-o'-wisp
|
||||
wind chimes
|
||||
wings
|
||||
wishing well
|
||||
witchhouse
|
||||
witching hour
|
||||
wizard tower
|
||||
wolf's-bane
|
||||
woman and serpent
|
||||
the woodsman
|
||||
wormwood
|
||||
wreath
|
||||
wyvern
|
||||
yak
|
||||
Yggdrasil
|
||||
Ys
|
||||
zealot
|
||||
zoo
|
||||
Reference in New Issue
Block a user