website update; added bash scripts

This commit is contained in:
chimchooree
2021-01-30 00:19:13 -06:00
parent 4c4436e1c9
commit f1589d597d
344 changed files with 8035 additions and 309 deletions
+28
View File
@@ -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>
+35
View File
@@ -0,0 +1,35 @@
<!--200810-->
<h1>slimeAI - state transition diagram </h1>
december 10, 2020<br>
#ai #programming<br>
<br>
<br>
blessfrey's slimes use finite state machines. <b>Finite state machines</b> (FSM) are models with a finite number of states that either decide to generate output or transition to a new state based on input. They can only be in one state at a time. <br>
<br>
<br>
<h2>why use a finite state machine? </h2><br>
Because they are simple and flexible, while still allowing for interesting behavior. FSMs reflect our own mental model of how slimes behave (attack mode, wander mode, sleep mode, etc). These different modes or states are written as manageable chunks that easy to code, debug, update, and refactor. It's also efficient with processor time, since the behavior is abstracted to basic conditionals. <br>
<br>
A state can be as broad or specific as you need, so long as it's granular. So they can be more easily debugged and swapped out with one another, it's a good idea to have one entry point and one exit point for all your states.<br>
<br>
Of course, since FSMs can be used for anything with states and transitions. You can think of specific menus, mechanics or even your entire game in terms of states. I'm just using them here for understanding the AI for my slime monster. <br>
<br>
<br>
<h2>designing AI </h2><br>
Planning ahead is extra important, since any dead-ends will halt your slime. I used a state transition diagram to design the slime's AI. In the diagram, circles represent states and arrows represent transitions, triggered by some kind of event. I marked the initial state with a star, but Buckland recommends a double circle. <br>
<br>
The slime is a simple creature. It idles, chases anything that gets too close, and attacks until its target dies. Here's the diagram version of that:<br>
<br><center>
<img src="/static/img/ent/slimeai_diagram.png" alt="(image: a state transition diagram for slime ai.)" width="500" height="250"><br>
</center>
<br>
The states are Idle, Choose Target, Attack, and Move to Target. The initial state is Idle. <br>
<br>
If there's a valid target, the slime enters Choose Target. If there's no longer a valid target, it returns to Idle. If it successfully gets a target, it begins moving to target. If the target becomes invalid, it returns to Idle. Once the target is in attack range, it enters Attack. If the foe moves out of range, it returns to Move to Target. If the target becomes invalid, it returns to Choose Target. And the cycle continues. <br>
<br>
No matter how you follow the arrows, there are no dead-ends and all states can be reached eventually, so it'll work okay when it's implemented as code. <img src="/static/img/emo/heart.gif" alt="<3"><br>
<br>
<br>
<h2>reference </h2><br>
<a href="https://www.goodreads.com/book/show/161139.Programming_Game_AI_by_Example"><b>Programming Game AI by Example by Mat Buckland</b></a>. It's an easy to understand introduction to game math + AI concepts. The code examples are in C++, but they are still useful for understanding the underlying principles. I didn't even know where to begin before I started reading and it got me pretty decent groundwork for AI creatures with different behavior that reacts to the players.<img src="/static/img/emo/heart.gif" alt="<3"> <br>
<br>
+28
View File
@@ -0,0 +1,28 @@
<!--200810-->
<h1>my favorite GDC talks </h1>
january 7, 2020<br>
#gamedesign #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>
+94
View File
@@ -0,0 +1,94 @@
<!--200810-->
<h1>questionnaire for making a fantasy race </h1>
march 4, 2021, 2020<br>
#design #lore #worldbuilding<br>
<br>
<h2>Aspects of Culture </h2>
General things to consider about your fantasy race to fill out their culture. Obviously not every point is going to be relevant. <br>
<br>
<h3>Basics </h3>
<ul>
<li>Basic Needs </li>
<li>Reproduction </li>
<li>Survival </li>
<li>Climate </li>
<li>Enemies </li>
<li>Allies </li>
</ul>
<br>
<h3>Lifecycles </h3>
<ul>
<li>Birth - how and where are offspring born? who is allowed to give birth? </li>
<li>Parenthood </li>
<li>Childhood </li>
<li>Coming of Age </li>
<li>Love </li>
<li>Mating </li>
<li>Marriage </li>
<li>Death </li>
<li>Education </li>
<li>Career </li>
</ul>
<br>
<h3>Religion + Legend </h3>
<ul>
<li>Dominant Religions </li>
<li>Denominations </li>
<li>Cults </li>
<li>Atheism </li>
<li>Religious Figures </li>
<li>Central themes of the religious teachings </li>
<li>Explanations for the natural world - how the world came to be? the origin of Man? </li>
<li>Afterlife - where do they go after they die? </li>
<li>Evidence for religion </li>
<li>Local legends </li>
</ul>
<br>
<h3>Climate </h3>
<ul>
<li>Preferred climate, climates inhabitted </li>
<li>How do they adapt to their climate? </li>
<li>Danger </li>
<li>How does their climate connect and separate them from other cultures? </li>
<li>What raw materials are available to them? </li>
<li>What seasons do they have? </li>
<li>Weather </li>
</ul>
<br>
<h3>History </h3>
<ul>
<li>How is history recorded and shared? Is it accurate? </li>
<li>Origin of their people, nation </li>
<li>Significant events - expansion, wars, diaspora, exile, mass murder, transfers of power </li>
<li>Local history - early settlement, original population, development, local heroes, times that national events or figures that visited the local area </li>
</ul>
<br>
<h3>Culture </h3>
<ul>
<li>Cultural Identity </li>
<li>Housing </li>
<li>Cuisine, Dining </li>
<li>Leading Industries, Imports, Exports, Trade </li>
<li>Class Stratification, Castes </li>
<li>Factions, Politics </li>
<li>Gender, Gender Roles </li>
<li>Race, Sub-race - Where and when did the other races or subraces arrive? Where do they tend to live? Influence on the greater culture, and vice versa? Race relations? Stereotypes? How are biracial people perceived? </li>
<li>Foreign culture - immigration policies to and from, perception of immigrants </li>
<li>Crime - Forms of crime, punishment </li>
<li>Health </li>
<li>Beauty, Fashion - Beauty Standards/Desired traits for mating, Differences among different demographics + factions, Influences </li>
<li>Rituals, Holidays, Festivals, Fairs, Masquerades </li>
<li>Language </li>
<li>Naming practices - when are names received? how many names are given? are names ever changed? what are naming conventions and how do they differ among the different factions? are there naming authorities or rules? </li>
<li>Etiquette </li>
<li>Art - Architecture </li>
<li>Entertainment - sports, hobbies</li>
<li>Symbols, Color associations </li>
</ul>
<br>
<h3>Others </h3>
<ul>
<li>Time </li>
<li>
</ul>
<br>
+15
View File
@@ -0,0 +1,15 @@
<!--reading-journal-->
<h1>Magic: A Fantastic Comedy in a Prelude and Three Acts</b> - G.K. Chesterton (1913) </h1>
january 8, 2020<br>
<br>
<br>
Did you know G.K. Chesterton wrote a play? Its existence really surprised me while browsing Project Gutenberg. I know him mostly as the author of The Everlasting Man and lots of other books about philosophy and religion. He's not stuffy, though. His style is so poetic and dramaticized through use of personification, he makes the topics as enjoyable as fiction...at least, from what I remember. It's been 10 years since I read anything else by him. <br>
<br>
Apparently, George Bernard Shaw wrote a letter pressuring him into drama because he felt he was wasting his talent on journalist. (According to <a href="https://www.chesterton.org/lecture-25/">Chesterton University's Lecture 25: Magic by Dale Ahlquist</a>) <br>
"I shall deliberately destroy your credit as an essayist, as a journalist, as a critic, as a Liberal, as everything that offers your laziness as a refuge, until starvation and shame drive you to serious dramatic parturition. I shall repeat my public challenge to you; vaunt my superiority; insult your corpulence; torture Belloc; if necessary, call on you and steal your wifes affections by intellectual and athletic displays, until you contribute something to British drama." (also from that <a href="https://www.chesterton.org/lecture-25/">link</a>) <br>
<br>
You can read Magic, too, at <a href="https://www.gutenberg.org/files/19094/19094-h/19094-h.htm">Project Gutenberg</a>. Plays are meant to be performed, though, so hopefully you can find something on Youtube at least. <br>
<br>
<br>
@@ -0,0 +1,14 @@
<!--reading-journal-->
<h1>Drinker of Souls - Jo Clayton (1986) </h1>
january 8, 2020<br>
<br>
<br>
I usually read classics or philosophy, so I thought I'd cut loose and read my first 80s science fiction novel: Drinker of Souls, from Jo Clayton's Drinker of Souls trilogy. Unfortunately, Clayton's novels are probably all out of print and won't be entering the public domain for a long, long time. I found mine at a thrift store. <br>
<br>
I just picked up a random scifi book, but apparently the Skeen Trilogy by this author is more popular. <br>
<br>
Review here
<br>
I read half of the next book, Blue Magic, but it was kind of boring and the characters were less interesting for me. It explored more parallel worlds, all with dramatically different levels of technology and magic. It had that 'wizards using computers' aesthetic that isn't done often enough. The setting reminded me of the Sigil in Planescape: Torment, how characters from all over get trapped in Brann's world. There was the guy from a futuristic trapped there with his phaser, like that number tattoo guy in the Buried Village who tells you about his cyberpunk world. <br>
<br>
+67
View File
@@ -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>
+116
View File
@@ -0,0 +1,116 @@
<!---->
<h1>FlightRising badges </h1>
january 8, 2020<br>
<br>
<br>
A favorite activity in FR is collecting badges from community-run events. If I back them up here, I won't lose as many. :) <br>
<br>
<b>Fire - Lava Bank - 1/21</b> <br>
<img src="/static/img/fr/XUdWkkW.gif" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/b1AOHoJ.gif" alt="(image: FlightRising badge)" width="100" height="100"><br>
<br>
<b>Fire vs Light - 12/20</b> <br>
<img src="/static/img/fr/yaVmX6u.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/xDr8a1W.png" alt="(image: FlightRising badge)" width="258" height="100"><br>
<br>
<img src="/static/img/fr/ZVJmarp.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/tcCHz91.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/vnh3Mff.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/LYPRI6F.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/SjrQCts.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/GgpglGe.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<img src="/static/img/fr/aaDmWw4.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<br>
<b>Arcane - 9/20</b> <br>
<img src="/static/img/fr/rlMOyL9.png" alt="(image: FlightRising badge)" width="100" height="100"><br>
<br>
<b>Water - Dom Push - 9/20</b> <br>
<img src="/static/img/fr/badge/qjHFcDc3_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/nZVpG4qA_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/zizf7QON_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/w6nm2ozw_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/j8UN9lFU_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/jp31RUVs_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/BQ0130S_o.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/kEdMEAr.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/ooqpaDf.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/TPdrafh.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/uC4Bb27.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/xQhJ1xN.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/z9l1QrF.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Flameforger's Festival - Exalts, Geyser's Grocery Games - 8/20</b> <br>
<img src="/static/img/fr/badge/xtPgVlw.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/4hr3mkF.png" alt="(image: FlightRising badge)" width="466" height="100">
<img src="/static/img/fr/badge/JkzY8tq.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/Ugwb1bB.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Vsjjk1F.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/TikpO8M.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/9fWw4WY.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/aFpsZk8.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/KBPvEjz.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/KBPvEjz.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/KBPvEjz.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Lava Bank - 8/20</b> <br>
<img src="/static/img/fr/badge/5jRjhgz" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Lightning - Thundercrack Carnivale - 7/20</b> <br>
<img src="/static/img/fr/badge/6sma760.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/UBTHVjT.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/yNi4cd2.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Qku4U0s.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Shocking Safari Zone - 7/20</b> <br>
<img src="/static/img/fr/badge/0QLVhCv.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Baldwin's Brew for the Bank Over 9000 - 7/20</b> <br>
<img src="/static/img/fr/badge/Cauldron1.gif" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/bm199ed.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Ice - 7/20</b> <br>
<img src="/static/img/fr/badge/ebTXM7P.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/d2Sm0UO.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Arcane - 7/20</b> <br>
personality quiz result: Starseeker <br>
<img src="/static/img/fr/badge/1532000966.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/R1I3CHl.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/jy44Pp7.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Y6Uxj5O.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/p1lH9gN.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/wBDxnV5.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/t5oWqxC.gif" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Shining Safari Zone - 7/20</b> <br>
<img src="/static/img/fr/badge/l3XfYkQ.gif" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Trash for Cash - 7/20</b> <br>
<img src="/static/img/fr/badge/ASvvnTt.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Pixel_Trash_for_Cash_v2.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Wind vs Plague - 6-7/20</b> <br>
<img src="/static/img/fr/badge/wvpfire.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/hogZwcV.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/wvpwind.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/dqixKfS.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/WvP-OOF-t1.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/WvP-OOF-t2.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<img src="/static/img/fr/badge/Kp99Tes.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Saa8Z5q.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/G130THg.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/vhzV2z9.png" alt="(image: FlightRising badge)" width="100" height="100">
<br>
<b>Fire - Subspecies Raffle - 5-6/20</b> <br>
<img src="/static/img/fr/badge/Cake.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Candles.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/Balloons.png" alt="(image: FlightRising badge)" width="100" height="100">
<img src="/static/img/fr/badge/PartyHat.png" alt="(image: FlightRising badge)" width="100" height="100">
<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>
+514
View File
@@ -0,0 +1,514 @@
abyssal whip
adamantine
airship
alchemy
aloe
alpine
amber fossil
ambrosia
amulet
anachronism
anagram
animal parade
aphrodisiac
apple
apothecary
apricot
asterism
atelier
aura
baby's breath
backhoe
bad cat
Baldur
bamboo
bandit camp
bandit king
basil
bell tower
birthday dress
birthstone
black bear
black market
The Black Hand
black knight
black water
black widow
blackguard
bloodstone
blue and yellow
blue bell
blue blood
blue rose
bluebell
bonfire
box garden
breath of life
bubble bath
bubble tea
bunny boy
buried treasure
butter cake
butterfly woman
café
camel
candlelight
candy store
caravan
cashmere
castle
cat café
cat familiar
cat man
catnip
catacombs
cathedral
celestial
cemetery
centaur
chained to rocks
chain mail
chalcedony
chameleon
chamomile
chandelier
charmeuse
cheese bread
chiffon
chimera
chives
chocolate factory
chronomancer
chrysanthemum
cipher
citadel
citrine
city of the dead
clipart
clover
coin flip
cold iron
confetti
constellation
cookie cutter
copycat
coral
cotton
couture
cove
crab
crazy quilt
Crossroad Keep
crucibled
crystal sea
cucumber
daeva
dark horse
dark hour
dark paradise
death's-head hawkmoth
deep space
diadem
Diana
diorama
dimetrodon
dire wolf
dollhouse
donkey
doppelgänger
double life
dragonfruit
dragonstone
dreamweaver
dump truck
Dymer
dystopia
ectoplasm
edelweiss
egg hunt
El Dorado
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
gingham
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
heather
hermit
hermit crab
holly
holy grail
honeycomb
honeydew
honeysuckle
horizon
hot air balloon
hot and cold game
hot cocoa
hydrangea
igari makeup
illuminated text
imp
incense
invisible man
iridescence
iris
ironwood
ivory
jack-o'-lantern
jacquard
jade chain
jasmine
jellyfish
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
licorice
life-giver
lighthouse
lily
lip gloss
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
lunar eclipse
lust
macramé
mages guild
magic carpet
malachite
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
Milky Way
millennial moon
mind game
miniature
mink
mirage
mire
mirror of Venus
mirror on the wall
mithril
monastery
money tree
monk's hood
monkey and bear
moon rock
moonflower
moonglow
moonstone
morning glory
mossy cobblestone
moth
mudskipper
mural
muse
naga
necromancer
nightlight
nocturnality
nymph
oneiromancer
oblivion
odalisque
olive
omen
opal
orb
orchid
orichalcum
orphan
palace
panda eyes
paper crane
paper fan
paper lantern
paragon
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
rogue
rooibos tea
rose gold
rose petal
rose quartz
rosemary
runestone
s'more
sailor fuku
Sanctum
sandalwood
sandcastle
sandman
sandstone
sanguine, my brother
sardonic
satire
satyr
scone
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
smartphone
smoke and mirrors
smoothie
snow globe
soma
soulmate
space cowboy
spooky chews
squid
spellbook
spelunking
spice cookie
spirit animal
spy
stained-glass
star sapphire
stardust
stargazer
starry sky
statuesque
sticker book
stinky cat
stone circle
stone face
stone people
storm cloud
strawberries and cream
strawberry blonde
strawberry shortcake
streusel
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
topaz
topiary
toy kingdom
treasure trails
tree of life
treehouse
trick or treat
trickster
tulip
tungsten
underwater
underworld
unicorn horn
unstoppable mailman
urban legend
utopia
vampire
Venice
vanity of vanities
Venus
waiting room
waking dream
walled city
wallflower
wampus cat
wandering eye
wanderlust
wasp lady
watchmen on the wall
water bearer
water nymph
waterfall room
waterlily
weeping willow
Whip-Poor-Will
whisper
white Christmas
will-o'-wisp
wind chimes
wings
wishing well
wisteria
witchhouse
witching hour
wizard tower
wolf's-bane
woman and serpent
the woodsman
workshop
wormwood
wreath
wyvern
yak
Yggdrasil
Ys
zealot
zoo
+36
View File
@@ -0,0 +1,36 @@
<!---->
<h1>reading journal </h1>
january 8, 2020<br>
<br>
<br>
I'll collect summaries, thoughts, and excerpts as I read. I used to read so much more. I should read more. <br>
<br>
<b>reading now</b> <br>
<ul>
<li><b>The Goddess of Atvatabar: being the history of the discovery of the interior world, and conquest of Atvatabar</b> - William R. Bradshaw (1892) </li>
<li><b>An American Tragedy</b> - Theodore Dreiser (1925) </li>
<li><b>How Few Remain</b> - Harry Turtledove (1997) </li>
</ul>
<br>
<br>
<b>books to read next</b> <br>
<ul>
<li><b>The Divine Comedy</b> - Dante Alighieri (1320) </li>
<li><b>The Pilgrim's Progress from This World, to That Which Is to Come</b> - John Bunyan (1678) </li>
<li><b>The Faerie Queen</b> - Edmund Spenser (1590) </li>
<li><b>Waiting for Godot</b> - Samuel Beckett (1953) </li>
<li><b>Metamorphoses</b> - Ovid (8) </li>
<li><b>The Canterbury Tales</b> - Geoffrey Chaucer (1320) </li>
<li><b>Phantastes</b> - George MacDonald (1858) </li>
<li><b>The Lady of Shalott</b> - Alfred Tennyson (1833, 1842) </li>
</ul>
<br>
<br>
<b>completed books</b> <br>
<ul>
<li><b>Candide</b> - Voltaire (1759) </li>
<li><b>Drinker of Souls</b> - Jo Clayton (1986) </li>
<li><b>Making of a Bigot</b> - Rose Macaulay (1914) </li>
<li><b>Magic: A Fantastic Comedy in a Prelude and Three Acts</b> - G.K. Chesterton (1913) </li>
</ul>
<br>
+7
View File
@@ -0,0 +1,7 @@
<!--210201-->
<h1>March for Trump </h1>
january 6, 2020<br>
<br>
<br>
Today, the March for Trump resulted in a Capitol break-in. The photos are like something out of a videogame. I took them from Twitter, so I can't easily credit. <br>
<br>