Designing Princess Rescue

#Villian

# Less techy news, more sexy news. Been making a game where you’re told to go rescue princesses. But things are not what they seem. Experimenting with a single scrolling textbox. Maybe good for impatient porn players? Has an interesting effect on how I make scenes.  

1249858156819361793 EVhiitAXgAIqJMW

# Aaaand back to techy stuff. I finally accomplished smooth scrolling text in Flash! This is actually tricky to do because masking doesn’t normally work on text, but I found a way. Animation is useful for this to show new text being added and show where the old text went to.  

# Can’t decide if I want girls to turn into bunnygirls or lay bunnygirl eggs. Seeing one of your party members unexpectedly transform is a cool surprise. But egg-laying means the characters who got abducted still stay in the dungeon and sex continues. I like that better.  

1277245280849707013 Ebmvo2iXYAISz4Q

# The plot works better with egg-laying. The villian’s motive makes more sense if they’re creating bunnygirls instead of turning every woman in the game into bunnygirls, because where’s the end of their goal? I want them to be seeking a specific number of captives.  

1277245394657980416 Ebmv6WFWkAIRCeZ

# The game design is easier with the egg-laying scenario. I’ll get to have more NPC’s in towns to explain things because I won’t have to remove all the women.  

1277245918421700609 EbmwUqnWkAIt5tE

# I’ll need to re-do a bunch of scenes though. And some of them were pretty good.  

1277246016849424384 EbmweJHXkAEbnJb

# I’ve come up with an intriguing idea about how a succubus could perform summoning in my game. It’s a much more sexual process that’s very different from a witch’s spell. I won’t spoil anything, but it ties in nicely with some other events that are occurring in the game.  

1331457350096580608 EnpJREcXYAABCl3

# I think I’ve finally made up my mind about what I want the “villian’s” plan and motivation to be. It seems much more interesting for them to have good intentions but a flawed or misinformed approach to accomplishing their goal.  

1331797508159385601 Ent xTdXIAErQn2

#Personalities

# I’ve been trying to find ways to show the personalities of each of the girls. It’s harder to do with a single on-screen textbox that limits how much text you can show to the player at any moment.  

1333576639117209601 EoHQ2YBWMAEvbId

# I particularly want to do this with Julia to show her being shy but secretly curious about everything. That will make her endings more comfortable since you’ll already know she’s curious about the things that will happen to her later.  

1333579292647763971 EoHTNqpXYAAKNpg

# I decided to give Julia an obsession with a specific kink that she keeps casually bringing up. It makes it very clear what she secretly wants.  

# 1333581584134496256 EoHVW8iXIAM1aNu1333581584134496256 EoHVXMDXEAceZzy

#Gameplay Needed

# As I was added characters in the maps, it became painfully obvious how little gameplay this “game” has. Most of the fun is just finding situations and details about what’s really going on.  

1333585603011743746 EoHZB9 XYAArA94

# But I copied the maps from another game out of nostalgia, and they don’t lend themselves well to this approach. The player wanders through too many areas with nothing really happening in them.  

1333585712709562371 EoHZITrW8AE yvq

# Adding some traditional game mechanics might fix this, but the motivation for adding it is “filler” to make the areas between story less boring. That doesn’t seem like a good reason to do anything. Ideally a game’s mechanics ARE the reason for the game existing.  

1333586540858118150 EoHZ4lyW4AEYZoJ

# Maybe I should think about this another way. How do story-driven games make exploration interesting from moment to moment?  

1333587036931026944 EoHaVm5XIAM wHc

# Phoenix Wright games are mostly a series of puzzle scavenger hunts.  

1333587658392678402 EoHa5f7XEAAXg

# What about point-and-click adventure games? I played some as a kid and most of the fun I had was just clicking random things just to see what would happen. That approach means giving the player a way to interact with anything and having them react in interesting ways.  

1333589101946265600 EoHcNcgW4AEIIgL

# An RPG already has a contextual “talk” or “interact” so… make things animate in amusing ways when you “talk” to them? That seems too nonsensical for a story like this.  

# Final Fantasy games are story-driven but fill their exploration with unrelated combat that tends to have very little to do with the story most of the time. It’s just sort of gameplay existing along side the story. But those games design their gameplay well enough to work.  

1333590668334292992 EoHdo2kXEAEQ67e

# I tend to feel that adding combat to a game is kind of an over-used generic approach to “gameplay.” Yes it works. But it doesn’t make sense in every situation or story.  

1333596991360741382 EoHjY 2XIAcp6Uu

# Gameplay isn’t about mechanics anyway. It’s about the game you’re playing with the player. Guessing. Hiding. Searching. Chasing. Escaping. Aiming. Evading. It’s what you’re asking the player to accomplish. Mechanics are just a means for the player to attempt those things.  

1333600143497629703 EoHmP9HWMAYNGBw

# Maybe I can just replace the boring maps in my game with ones that lend themselves more to the story interactions? It’s already interesting to explore towns filled with characters to talk to since “talk” is your main way of interacting with everything.  

1333602823955771404 EoHosESW8AAF8 d

# … which would make all the places without characters, boring places.  

1333603544193261570 EoHpWeHWEAAjaJN

# You don’t necessarily need elaborate game mechanics to make gameplay. Final Fantasy Adventure on the gameboy had a huge variety of interesting gameplay built out of very primitive mechanics. Maybe I should play that game again to get some ideas.  

1333604146335731713 EoHp5XiXYAI2Yqg

#Endings

# I’ve been figuring out a bunch of various endings for the game. You rescue a bunch of girls, and where you choose to take them afterwards will determine what happens to them.  

1332184546503176193 EnzexxzXUAEjRge

# None of the endings are “bad.” I personally don’t enjoy bad endings. They don’t feel like a fitting reward for finishing a game. Besides, choosing endings in my games is mostly just a way for the player to choose what they want to see. No need to punish people for fantasy  

1332185816114794496 Enzf7wXXEAEw 4n

#Endings (2)

# I need to flesh-out Marle’s ending better. “Addicted to sex” is kind of a vague outcome. What does she actually DO? Where does she do it? What’s the situation?  

1333605301174624259 EoHq7zvXUAEITF5

# Okay, a princess who’s always masturbating can’t just walk into their home in that state. Not daring to return, she goes “feral” … a sexy kind of feral. But she still considers herself royalty so, she makes herself an Amazon queen. There! An interesting and unique ending.  

1333608181134741510 EoHtj95XYAAa6v4

# In fact… I should probably make ALL the character’s endings equally unique and unexpected. I guess I’ll re-think all the other endings now.  

1333608860402200576 EoHuLdoXMAEb4KV

# Re-thinking and replacing various ending ideas to create a “balanced” variety of situations. But I have a few favorite ending ideas that are just too damn good. I can’t bear to replace them, which means I’ll have to replace other endings to achieve balanced variety.  

1333610039962185728 EoHvQnYXcAER0o6

# I think I’ve achieved a good balance in situation variety AND managed to keep most of the interesting ending ideas.  

1333610523280207872 EoHvstwXUAER r6

# I admit I kind of liked the ending idea where a bunny follows Julia home, her mother assumes it’s a pet and insists that she regularly take it for walks, where it secretly molests her. but…  

1333611377773203457 EoHweRUW8AIn1if

# Julia is obsessed with becoming a sex-pet. It’s her obvious secret kink and a concept that she keeps mentioning during the game. So she kind of HAS to have at least one ending where she ends up as someone or something’s pet.  

1333612473283440640 EoHxeaGW4AcA8Iy

# I think I managed to come up with a “sex-pet” ending for her that’s almost as interesting.  

1333613797093814272 EoHyrY5W8AAQAaa

# I think I figured out a clever way to turn the bunny-pet ending into a sex-pet situation. So I get to have my preferred ending and still maintain a balance of ending situation variety.  

1333615786599047168 EoH0fShXIAEnVix

# Both endings are good… hard to decide which one to use.  

# I think it makes more sense for Julia to choose to become the succubus’ sex-pet. It completes her character-arc better. And it makes more sense.  

1333616513253838850 EoH1Ja3XEAEuDed

# … oh by the way, spoiler alert, I guess.  

1333619828586901505 EoH4KYdXYAAf87y

# Discovered it was possible to leave a character behind in a cave after disbanding a cult, which means the “left with cult” ending wasn’t guaranteed.  

1336580478288211970 Eox824oXIAAiqx3

# So I decided the freed lesbian cultists will take the girl with them if you leave the girl behind. Later on you can find her at their home. This also enables another sexy ending if you leave her with them.  

1336581323356598273 Eox9oLgXYAEaVFP

# Discovered it was possible to leave another girl behind in a cave regardless of whether the cult is there. The cave is where you first meet this character.  

1336582155925917696 Eox Yi6XMAAXhgf

# I decided to make this situation unlock another ending, but I needed to add some more characters to the cave for the girl to interact with in that ending. Well… I say “characters” but in this case, I mean a pack of wolves.  

1336582557597569024 Eox v8EXUAACXef

# I think I should make all the girls’ “drop-off points” reversible so the player can easily experiment with different endings from the end of the game instead of having to replay the entire game. In most cases, this is a surprisingly easy change to make.  

1336585022749478913 EoyA fiXMAAN1gA

#Gameplay Needed (2)

# My game is technically “done” as originally designed, but… many of the maps feel too large and empty, with nothing to do except pass through them. I need to add gameplay to this game. I probably shouldn’t have waited until the END to consider that.  

1336586196504502274 EoyCDn7XEAI5y0k

# The reason why the maps ended up too big was I copied their layout from another very old game I used to play in the 90’s. The Quest of Yipe 3 for the Classic Macintosh, a primitive RPG. It was the first game I ever modded, so I copied the maps out of nostalgia.  

1336586511660310528 EoyCWBRXMAIP8d

# But those maps were designed for treasure hunting and enemy encounters… which my game doesn’t have… it COULD have them, but do I want that? A major theme of my game’s story is that the monsters aren’t dangerous, people just assume they are.  

1336586736059682816 EoyCi82W4AA5C4g

# It would be nice to find items. I always enjoy treasure hunting in games. Maybe new abilities? I can make these rewarding by having them give you access to places with sexy scenes.  

1336588526276784129 EoyELN6XIAAFGb

# But adding a hundred abilities and moves would be kinda ridiculous. So maybe you find money and BUY the abilities? That could work, but finding nothing but money all the time might get boring.  

1336589256609951744 EoyEwCPXcAAPx4k

# The game doesn’t necessarily need more mechanics. It needs gameplay. Challenge the player to accomplish something interesting. Then add a twist or throw a fun monkey-wrench into the works along the way. An adventure is a plan going wrong.  

1336591025935175688 EoyGcriW8AESjCY

# I mentioned how clever Final Fantasy Adventure was, but it’s not perfect. Using up mattocks to find hidden walls is aggravating without hints.  

1336591993770799104 EoyHVKYXUAAI4sF

# Zelda did the same thing with bombs. But Zelda Link to the Past added hints about where to use them to remove all the expense of random guesswork.  

1336592646773612545 EoyH6 pW8AMRUVv

# Zelda Link’s Awakening made secret seashells collectible. How did it do that? A promise of a mysterious reward? Periodic rewards for every 5 or 10 shells? A variety of ways to discover them? It also had a clear place to take them to.  

1336593493368647683 EoyIptDWMAED6FB

# The princesses in my game are like Zelda’s seashells. It’s implied that something will happen when you find them all.  

1336594044533809158 EoyJL2kXIAAWI P

# Gameplay ultimately boils down to different ways to entertain the player. Interesting situations and concepts can also entertain. Maybe the first cave should be a mine overgrown with plants that turn out to be intelligent. That would be interesting for the player to realize  

1336594678410522625 EoyJxGjXUAE gGt

# I can just add unexpected twists to seemingly familiar settings and situations.  

1336595751997202432 EoyKv8hXUAAZF7C

# Maybe add another “hero.” A character obsessed with glory who always shows up and cluelessly makes situations worse, turning them into unexpected challenges for you.  

1336597854576660485 EoyMpMwW8AAWm b

# Maybe that “hero” got defeated and ran off, leaving behind a key you need… somewhere. Then something picked it up. Now you have to follow the correct footprints, while ignoring the wrong footprints. That’s a situation that creates gameplay. These would make good sidequests  

1336599245512699906 EoyN7DlXUAIHhpC

# I could use puzzles to add gameplay to my “dungeon” areas without adding combat. But my game shouldn’t just be puzzles. Doing the same kinds of things over and over gets boring. Gameplay variety is needed. Pacing. Switch between at least 2 types of games.  

# 1337532756239249410 Eo e6PdW4AUIK7u1337532756239249410 Eo e6sHW8AsQ44x

# My game isn’t all dungeons either. There are a few towns with interesting characters and an overworld. So those places should probably provide a different “game” to play. Different game-play. Cycling back and forth is basically a gameplay loop.  

1337534212082196484 Eo gQNDXUAACF1v

# But I want to avoid fetch-quests. They get overused for side-quests. They’re not even all that fun. They’re better used as a ruse to lead the player to a fun situation. An adventure going wrong.  

1337536144217698305 Eo iBruXEAAxnoJ

# So far, my list of possible quest / situation gameplay is something like this…

# Guessing
Hiding
Searching
Chasing
Escaping
Aiming
Dodging danger
Searching for something hidden
Navigating mazes
Solving Mysteries
Figuring something out from clues  

# Maybe a gameplay pacing loop like this?

# side-quests => earn money
money => buy ability
ability => dungeon access
dungeon => sexy scenes + more side-quests unlocked (implied passage of time, not tied to any character)  

1337539251081269249 Eo k20 WEAA5354

# My game’s too small to need side-quests, so I think I’ll go with this…

  1. money => buy ability
  2. ability => access new area
  3. new area => money + sexy scenes
    repeat

# ability => unlock new NPC hints about new scenes/places you’re able to find.  

1337549671909167105 Eo uVWQWMAAqB4Q

# The best game loop I ever made was my Tears of Inferno game. But I wasn’t thinking in terms of gameplay loops. Instead it was about 3 forms of entertainment taking turns:

  1. gameplay
  2. sex scene
  3. storytelling  
1337552303465836547 Eo wug1XYAA7LZ3

# In practice that game’s loop was something like:

  1. Sleep = Cryptic dream (Mysteries keep story interesting)
  2. Next day NPC clues about where to go next
  3. Zelda-like dungeon puzzles and combat
  4. Sexy scenes at end explain mystery
  5. New ability
  6. Find new side-quests in town  

# 1337567424342876160 Eo  RWzXYAATdc71337567424342876160 Eo  bhqXYAAHm9X1337567424342876160 Eo  csUXMAERG0D1337567424342876160 Eo  dtvXUAAsX s

# The town changed after each dungeon like Paper Mario, with the characters all doing different things.  

1337569197019291649 EpAAFrjW4AIk0U0

# Snes Drunk on YouTube recently reviewed an interesting SNES game called Ihatovo. No combat. Just story and fetch-quests. kind of a 2D walking-simulator. Seems boring but it has an interesting structure.
https://www.youtube.com/watch?v=LNp0n6LAGSY  

# The “quests” aren’t missons. People just casually mention odd things. Your curiosity drives you to seek these out, causing story to happen. It would be a good way to handle side-quests. NPC’s don’t ask you to do things. They mention what they desire or odd things they saw.  

1337573112246915072 EpADpyoXUAMS p5

# So far I’ve already created a surprising amount of fun just from level gimmicks. Some statue-pushing puzzles with a twist. A mine-cart that breaks open walls. All without any added abilities. Do I even NEED abilities? Well… I DO want treasure hunting so… probably yes.  

1356043187140370433 EtGiFgAXMAIQtlL

# In an effort to add more treasures to search for, I think I’ll add fortune crystals to the dungeons. Collecting them all and taking them to a fortune teller will reveal background events of how one of the girls ended up in that particular place.  

1356044431489695748 EtGjLcvXYAA63wV

# The idea is kind of inspired by a collectable in the game Psychonauts where you open mental safes to learn a character’s backstory.  

# 1356045633023574022 EtGkSpPXAAcjd7i1356045633023574022 EtGkTECXIAAy1Ns

# I chose to color each crystal set to help the player keep track of which ones go with each dungeon. I experimented with using one image of a crystal and then subtracting color channels to change the color to whatever I want. Good results, but takes trial and error to tune.  

# 1356046734498136073 EtGlSwcW4AAGIjV1356046734498136073 EtGlTUvW8Agf1Fj

# I decided to just pre-render the different colored crystals as separate image files. This makes it much easier to display them in things like item menus. This also lets me fine-tune the exact colors of each.  

1356047331808964610 EtGl2hsW4AIzhYO

# It also lets me adjust the hilights to be a slightly different color. What’s better than colored crystals? Iradescent colored crystals!  

1356048243541618691 EtGmr4KW8AIex N

#Dungeon Variety

# There are too many dragons and too many caves, maybe I should re-theme one of the dungeons. I think I’ll replace the “fire cave” with a magic forest. And replace the dragon ladies with fairies. This also matches one of the player’s abilities better.  

# 1356049643017297932 EtGn9EcXMAA6Pmh1356049643017297932 EtGn9ElXYAEME751356049643017297932 EtGn9XeW8AANmkc

# Another cave, another dungeon to re-theme. Maybe a town that was invaded by monsters long ago? This would tie into why one of the towns has an orphanage in the first place. They’re refugees. Also this town could have an interesting new culture because of the monsters.  

1356050199706279940 EtGodz9WMAEcVhw

# It would also add some tantalizing foreshadowing for a different town that’s in the middle of being invaded.  

1356050644319281152 EtGo3zyXMAAyd6j

#Maps

# Added a map system. This lets me add another item for players to find (the map) and it can provide Super Metroid style hints for the player to search for hidden passages.  

1356051247154028548 EtGparOWMAEkPFE

#Quest Hints

# I decided to avoid additional side-quests and instead just have all NPC hints refer to whatever main quests are currently available to do based on your current abilities. This leaves no room for confusion about what to do next to progress the story. All quests are relevant.  

1356051742782328834 EtGp3ZsXMAEtFNh

# I can still hide bonus items in the town areas. But they already have interesting characters so they don’t need as much help as the dungeons do to be interesting to explore.  

1356052391951536129 EtGqdOtXEAELCeC

# When you get a new ability, you can access new places. So characters with new relevant hints should move to new places to hint to the player that they have something new to say, otherwise the player would just assume these characters would just say their original lines.  

1356053268372353027 EtGrQXiW4AAJoVv

# I might add a day-evening-night cycle to hint to the player that all NPC’s might have new things to say. Time progresses each time you acquire a new ability, which enables access to a new place, which unlocks new hints from characters about seeking those places.  

1356053763279220736 EtGrtH1W8AE klX

# It’s natural for people to be in different places at different times of day, doing and saying different things. It creates the illusion of an overall story progressing, even though the dungeons can be done in any order.  

1356054133225226247 EtGsCliWMAA8S9m

#Shop Menu

# I’ve been watching a YouTube series called “Good Design, Bad Design” about how games succeed and fail at making good menus and things. It got me thinking about how I might make my little shop system more elegant.
https://www.youtube.com/playlist?list=PL8K0_g1wdQeoxta9RyvTK-DnhU4jI2QJN  

# I don’t need text in 3 places when I have a permanent textbox at the bottom. I should re-use that. Then again, I kind of like how the shop-keeper seems to describe the items when you highlight them. Maybe I should turn the bottom textbox into a speech balloon when shopping.  

1356055622693875717 EtGtZZsXUAIS9yJ

#Optional Conversations

# I was thinking about ways to show the character’s personalities, and I realized that when a textbox isn’t interrupting the player like in most RPGs, then a conversation can only start when the player chooses to talk to someone.  

1383571778149052419 EzNvMhKVcAI6BFJ

# This led to a clever idea. I love when characters banter back and forth or comment about things that are happening, so… what if a party member stepped aside and started staring at something, and when you talk to them you’ll see what they have to say about it?  

# But if you wander away, the party member automatically rejoins you. There’s no interruption. The player can just keep walking and completely ignore the potential scene if they want to.  

# This took some tricky scripting, and I even had to add a new feature to the RPG Maker so scripts can wait for program events. But the result is working beautifully!  

# The tricky part about this is that it pulls a switcheroo. The “follower” character turns invisible revealing an identical “scene” sprite that you can talk to. Wandering away from the scene sprite switches back and reveals the invisible follower again.  

# During a scene the invisible follower is still chasing the player. When it’s time to end the scene, the “scene” sprite needs to walk to where its invisible clone is and turn invisible while un-hiding it in order to switch back seamlessly, so there are coordinates to juggle.  

1383572802825949185 EzNwIQBVUAQp686

# I discovered it was easier and more seamless to have the scene sprite literally chase the follower instead of walking towards its coordinates from a half-second ago. I had already created a SWF plugin that causes sprites to chase other sprites, so I just used that.  

1383572923391246337 EzNwOjUVkA0BUb1

# These character cutscenes are easier to find when editing the maps since they have their own sprite instead of the old way of hiding a scene inside an IF statement of another NPC sprite.  

# 1383573498715508741 EzNwv zVUAM5Tbl1383573498715508741 EzNwwjQVIAAVsao

#Managing NPC’s

# Programming the various townspeople to say different things based on what abilities you have OR based on time of day is trickier than I expected. I can do it, but it’s much more complex.  

1434370116859297794 E foACoUUAAyDQv

# It’s much harder when I want to put the same NPC in different places to hint to the player they have something new to say. If it’s the same map, I could just teleport them to different spots, but it’s hard to keep track of in the editor.  

1434370197305970689 E foFX9VIAE8839

# It gets even harder if I want them to be on different maps, such as inside or outside houses. Do I make separate copies, or try Skyrim’s technique of having one copy of the NPC in the game and just place them? I’d need to alter the editor to make that intuitive.  

1434370287261290499 E foKGfVIAASeFi

# Maybe I’m overthinking this. If an NPC is going to say different things in different places, then just make each of these into separate NPC’s with only one thing to say and change their spawn conditions. The editor can already do that easily.  

# 1434370599829184522 E fob0qVgAI7YGM1434370599829184522 E fochQVEAUisVk

# The problem with this approach is if any version of an NPC requires complex conditions, then the other versions need to explicitly exclude that combination of conditions. It would be better if these different versions of the same NPC did not need to know about each other.  

# 1434370868449202178 E fosPLUYAI7d S1434370868449202178 E fosl3VUAAYJVa

# … Otherwise I’m likely to have the same character appearing in multiple places by accident. I need an override system.  

1434370960300253194 E foxrJUUAEoLpb

# I guess the solution is to try to keep the conditions simple for the NPC’s. What if I use a single flag to represent a complex condition, and then have a COMMON sprite handle that flag? A “common” sprite exists all the time no matter what map you’re on.  

# 1434371035680309253 E fo19qVUAMBiuQ1434371035680309253 E fo2P1VUAQ5x7Y

# Hmm… even with simple conditions I still need an override system. A SHARED state for multiple versions of a person. I could give each person their own variable, and have its value control which version of them appears. Yes, I think that might be the simplest way to handle this.  

1434371213426520066 E fpAqYVEAADMBm

# … So instead of using multiple flags, I use a single variable with multiple values. This means only one condition exists at a time. This helps with continuity. It guarantees the character only appears in one place at a time.  

1434371419735924736 E fpKyEVEAQ1WdZ

# This will also be easy to preview in the editor since it already lets me preview sprites based on spawn conditions.  

# I could even have 2 copies of the editor open in case I want to easily change these without switching back and forth between maps. It’s fine as long as both editors aren’t trying to edit the same map. I’ll just keep one on the COMMON map.  

1434371765472358401 E fpg1uVUAEQWEw

# I should probably try this with just one NPC before I jump straight into revising the ENTIRE GAME. That would probably be wise. If this idea is flawed then the flaws should hopefully emerge while revising one NPC.  

1440848771802288143 E 7sUMDVIAYRZ23

# I just realized I was already doing something similar to this with all the “princesses” you rescue, because I wanted the game to keep track of their locations to determine each of their endings when you finish the game.  

# 1440849155639808009 E 7so5sVUAcfGv 1440849155639808009 E 7spieVEAQAIYH

# The actual code is similar but it just sets a single variable’s value. Which acts as a spawn condition for the NPC’s sprites.  

# Each appearance of a particular character is a separate sprite using a single variable as a simple spawn condition. The complex conditions behind each spawn are handled by its master script so the sprite itself can be simple.  

# 1440849392349577217 E 7s2U VUAE7ECm1440849392349577217 E 7s3QHVIAQUt0v

# By moving the spawn complexity outside of the NPC itself, its master script can choose where they are and what they’re generally up to, simply by setting that single variable. That variable acts as their global state.  

# Their master script chooses what they do. The sprite itself handles the details of HOW they do it. And since this character’s sprites use the same variable with different values, they become mutually exclusive. Only one will appear at a time. This helps avoid spawn mistakes  

# 1440849621878657027 E 7tDlhVEAMq4NG1440849621878657027 E 7tFhZVUAAAWCA

# This also makes any NPC easy to keep track of because everything they’re doing is grouped together all in one place, so it’s easy to look up and change.  

1440849705496317958 E 7tKiTVQAs9uSM

# Now the question is WHEN should these checks occur? Probably when switching maps. My exit-map trigger is still flakey, so I guess I’ll use the enter-map trigger and then update all sprites after a short delay.  

1440849841886695431 E 7tR oVQAsZm5g

# Time-based hacks like these are always lame, but I don’t have a choice until I can get my exit-map scripts to fire reliably.  

1440849919380656132 E 7tXNyVUA8CfJJ

# Obviously the right decision is to fix that bug instead of hacking around it. But I already spent most of last night trying and failing to fix this. I’m tired of wrestling with it and I need to do something else for awhile.  

1440850005300953091 E 7tb4qVkAYDp6m

# If you’re wondering why I have separate events for leaving a map and entering a map, it’s because the map transition takes time and sometimes I also want to do last-minute things before leaving a map.  

Leave map

# For example, if the player chooses to walk away from a situation, it could be a significant decision, and the game can detect this happening using the exit-map event.  

# Leave decision 1Leave decision 2

# After revising the sailor man, it looks like the global NPC spawn control approach will work nicely.  

Npc sailor test success

# Good programming is only partly about knowing what to type. A lot of it boils down to organizing information well, or finding simpler ways to accomplish things.  

Programming fuckery

# Some characters just follow other characters around. I could either have both share the same variable, or have one read the other’s variable while doing their own logic checks.  

Npc based on other npcs

# I prefer not to share variables so I can keep the possiblity of the characters doing separate things too.  

Npc still independant

# Of course that means that the order will matter. The bunnygirl needs to know when the boy’s position has finished being figured out. I happen to have a “wait” command that can pause until another script finishes.  

Npc dependency wait

#Garden Level

# Alright, let’s finally take a shot at the fairy garden tileset.
But… browsing through my old downloads of RPG Maker chipsets, there’s pretty much nothing that looks like a hedge maze. Looks like I’ll have to just roll up my sleeves and make one myself.  

1393348171766587393 E1YqvIQXoAErlW8

# Hmm… I guess I’m supposed to give credit to http://www.rpg2knet.com  

1393349111517093888 E1YroH1XsAIqZTN

# … which doesn’t exist anymore. (yes, this is actually what’s on their page now)  

1393349859000918017 E1YsT2WWQAEbwAl

# Maybe I should upload all these old files somewhere later. You probably can’t find some of these anymore.  

1393350165365395456 E1Ysln2WEAIJvE

# Hmm… I think I could make this grass work for a hedge maze. Just gotta remove the grey pixels.  

1393350590105784321 E1Ys SyX0AEwSVI

# This old RPG Maker 95 chipset has some NICE stone walls!  

1393351061365198853 E1YtZ1QX0AAhGx3

# Ooh, this fountain is nice! The fairy garden is supposed to be a royal garden that was taken over by fairies, so decorations like these would make a lot of sense. They’ll also provide useful landmarks for the player while they navigate the maze.  

1393351530917416960 E1Yt1H3XIAEki76

# That’s a nice archway. It might go well with the stone walls.
… after I change the colors to match.  

1393352077175296000 E1YuU62WYAMbqXC

# A royal garden should probably have some opulent pillars too.  

1393352732535402496 E1Yu7DTX0AYdyTO

# When remapping colors I usually use the pencil tool to place every color in order of brightness and place the two palettes next to each other so that colors of the same brightness match up.  

1393353077227393034 E1YvPFcWQAkgSMt

# God, Photoshop’s swatch window is completely useless. It’s a pain to use. I can’t sort the colors or even manually rearrange them to match them up with each other.  

1393353584197181440 E1YvsrqXMAAzzx

# Even the Indexed Color palette has no way to sort the colors.  

1393353875835469825 E1Yv9jnWEAIzEwf

# But there is one other way… ye olde ancient Save for Web dialog box CAN sort palettes!  

1393354201212784643 E1YwQhPWEAIP7l

# Just recalculate the palette by choosing one of the options.  

1393354451671470080 E1YwfKaXoAIPf2t

# And use the fly-out menu to sort the palette.  

1393355297935200266 E1YxQe9XIAEA4fT

# Now I just need a picture of this. Screenshot time!
Aaaand just use the pencil and hold ALT to temporarily use the eyedropper to grab colors from the screenshot.  

1393355588202078216 E1YxhSfXoAwTz1t

# A big part of the reason why I like the look of this stone wall are all the little colors mixed into it. But that also means it’s not going to be a direct monochromatic remap. I’ll put the palettes on their own layer.  

1393356141409755139 E1YyAVXWYAIgoWc

# Many of the colors are simlar brightness to the greys, so I’ll put them side-by-side. Colors on the left, greys on the right, original palette in the middle. I don’t care if the pillar gets darker.  

1393356379591749634 E1YyPX1WYAIzfIy

# Now just select the pillar’s layer. Grab the magic wand, sample all layers, pick the original colors from the center palette and eyedropper to grab a replacement colors from either the left or right. Then ALT+Enter to fill.  

1393356691048214529 E1YyhhFXIAklc7t

# I changed the colors, but the lighting is off. So I’ll just recolor the top entirely.  

1393357051867406338 E1Yy2hJWEAYBu9m

# … and tweak the left side a little. The light is not perfectly front and above, but it’s closer. Hopefully it’ll fit in convincingly.  

1393357347008000001 E1YzHtbWUAkWf3m

# Now where am I going to find some wrought iron garden gates?
Ooh! Terranigma’s tiles have some NICE rusty prison bars. These are definitely iron gate colors!  

1393357832406409216 E1Yzj1KXoAcr9Gc

# Just chop off the tops, make them pointy, and make the whole thing about 1 tile shorter. That’s a pretty good iron fence.  

1393358140876460045 E1Yz14dXsAEuW n

# What about the door? I guess I couuuld just recolor the old RPG Maker prison door I’ve been using.  

1393358516124012548 E1Y0LtJWQAkE2Qj

# … aaaand round off the top into a fancy arch. Not bad!
Now I just need to create the opening frames, so… indexed palette, perspective skew distortion, and scale to shrink the width. That’ll work.  

1393358907930730500 E1Y0ikbXoAAF0m

# I kind of want a double-door for the gates. I guess I can just horizontally flip these frames.  

1393359237489827844 E1Y01w3XoAAkSwc

# But maybe I should reshape that arch to point up where the doors meet instead?  

1393359467916431366 E1Y1DJRWYAM89ff

# Waiiit a minute… I already MADE a good tileset for a stone garden! Those leaves on the left will even tile together to make a hedge maze. Didn’t I use this in my last game? Royal Pets? Yeah, there was a hedge maze at the end of that game. DAMMIT!  

1393359880354947075 E1Y1bIUX0AAm9vk

# Damn, I just finished and then remembered that Secret of Evermore literally has a hedge maze in it. I could have just used that.  

1393360134563377152 E1Y1p8QXMAgZuys

# Hell it has MULTIPLE maps with foliage mazes!  

1393360391003119619 E1Y144zX0AAcrFN

# … and an archway.
… and an iron gate.  

1393360693169111041 E1Y2KaeWYAUnu1K

# It also has some nice statues and pillars I could have used. They even have the right lighting to match the stone wall and archway. Yeah… I think I’ll use these pillars instead.  

1393360886916599810 E1Y2VtvXoAQnZVP

# Welp, at least I have options now. I might stick with the square style hedge tiles. A royal garden would be well trimmed.  

1393361136117035008 E1Y2kRMWYAEMOlN

# Hmm… remapping the colors of the Secret of Evermore pillar is looking kind of… ugly.  

1393362377907884033 E1Y3skOX0AACHHO

# First, I’ll match the overall contrast of the stone wall by converting to greyscale and using auto-levels…  

1393362419943100418 E1Y3u 5X0AUzlRs

# … then apply a gradient map using the stone wall’s darkest and brightest colors.  

1393363013948878851 E1Y4Rk1WYAAqhd5

# And now to add a few of those interesting colors. I think I’ll start by adding a few more color stops along the gradient.  

1393363343239524357 E1Y4kr8XEAEtsIA

# Then replace a few colors using the stone wall’s palette and slide them where their brightness seems to belong.  

1393364220331364353 E1Y5XzaWQAceUpg

# Well that’s… a bit better than before.
At least the lighting flows more smoothly, which was the main issue. I suppose I can use this. The small pillar on the right still looks nicer, but the lion-heads will provide better landmarks for the maze.  

1393364557603692546 E1Y5raKXoAM2G6D

# Whoops… my hand slipped.  

Soe statue boobs anim 3x

# I mean, it IS more authentic.  

1393365367683158016 E1Y6agVXsAALerD

# I think I’m just about ready to turn this into a tile set.  

1393365622797574146 E1Y6paeWQAEjdWn

# Set up a 16x16 pixel grid with snapping and it’s pretty easy.  

# And a quick test map so see how it all looks together. I ended up switching the grass tile to something darker.  

1393441750598000643 E1Z 4lyWUAMoUru

# The doors and statue are sprites. Which is easier for me to add since I’ll never want to place pieces of the statue on the map.  

1393441837298470914 E1Z 9LoWUAAuzvp

# Hmm… by that logic the trees should probably also be sprites. Placing and overlapping them is a pain when they’re tiles.  

1393583224975208462 E1cAjm1WUAEw4Wz

# BUT! Sometimes I want house tiles to overlap trees. So I do need tree tiles for towns.  

1393585369292197890 E1cCgVKXoAEbGWv

# But the garden doesn’t need tree tiles. I decided to rearrange the chipset and add path edges for the stone tile.  

1393589479663882241 E1cGPpKWUAUN3zg

# I’m using smart objects and masks so I can easily replace all grass or stone tiles.  

1393589563642236931 E1cGUgrXsAUOiG0

# The logic of this new arrangement is additional floor tiles can go along the top, more path tiles can go below the stone tiles. Walls can go below the walls. And stuff I’m less certain about are placed farther away.  

1393589694651318272 E1cGXVeXIAImUoZ

# Almost done with the layout. I can’t believe I did ALL that in just one day!  

Mostly fairy garden done

# So I’ve been playing through Tales of Phantasia lately, and then I come across this place. Dude, that is one fancy looking iron fence down there… Hey, wait a minute!  

1408229560546639876 E4sJP0vXEAEu3kd

# My fairy garden has iron fences. And they look kinda crappy compared to those beauties. In fact, a royal garden’s fences probably should be fancy. Let’s fix these.  

1408230924324646920 E4sKda9WEAgjAiG

# I considered just using these instead, but I’d still need to recolor them to match the other tiles. Also their contrast against the grass is bad. Also the light direction should be from above. I might as well re-make them from scratch… but with a damn good reference!  

1408231285655584769 E4sK3ygWYAYst7S

# It took awhile, but these look MUCH nicer than the old ones!  

1408231762799517701 E4sLUN1XIAALPcE

# Wait, Tales of Phantasia ALSO had half-naked statues all along?? Damn now they’re just rubbing it in.  

1408243859461709829 E4sWJuwWEAQb1P

# Hmm… decisions, decisions. I kind of want to stick with the Secret of Evermore statue because I’m proud of my boobie edit and its blocky base works better for the garden puzzle. But the Tales of Phantasia statue has a delightfully less tasteful pose.  

# 1408247174954196995 E4sZUE XoAM3Lv31408247174954196995 E4sZUiMWUAk0AgA

# These new statues blend in way too much. You can barely see them.  

1408595037219442691 E4xVs5JXwAcipSO

# Adding some darker outlines and brightening the shades helps a little, but the details are still too busy and get lost in the background walls. I think I might keep using the old statues instead.  

1408595135202529283 E4xVyysWQAMYAS

# But before I give up, there’s a couple more tweaks I can try. First of all the reason the old statues work better seems to be that they are brighter overall than the walls. While the new statues have more contrast but also more dark areas, and those tend to blend into walls  

1408595409463877634 E4xV9yVX0AEs5bt

# The 2nd change might be their color. So far I’ve been trying to give most things the same general colors as the stone walls so they look like they belong together but this can also potentially make stuff blend together. So what if I just use a different color?  

1408595753644273664 E4xWKbzWUAcv9D4

# I already do this with the tables and fountains because they’re meant to stand out as landmarks. The statues serve the same purpose so it would make sense if their colors match these objects.  

1408595871697145858 E4xWdj5XwAAHlOE

# But this might be overkill. These objects almost look like they’re glowing. I should probably tone it back a little. Maybe turn down the saturation?  

1408596061980082178 E4xWnszWQAICLZS

# Hmm, this is an interesting compromise. I just overlapped the blue version of the statue over the dark version and faded it halfway. This looks kind of like faded marble. I like it.  

1408596177155768323 E4xWv0TXMAAIKoz

# But the only way to know for sure if it “works” is to see it in-game. Hmm… sure the blue tint helps it stand out, but… now it looks completely out of place.  

1408596374942257156 E4xW23TX0AEmzW

# So I’m back to my original conclusion. Use the old statue. Making the new statue brighter sort of works but the boob details get lost in the highlights. Making it blue keeps the contrast but makes to look completely out-of-place.  

1408596510007336966 E4xXDOVWYAEkbzL

# The raised arm of the left statue provides a dark backdrop for the boobs that gives them good contrast. And the fabric uses bright faded details that don’t break up the statue’s overall shape, allowing it to stand out better against busy backgrounds.  

1408596937444581381 E4xXSOzXEAAcfBt

# … It also lets me do this.  

1408602790738468866 E4xcwfRWQAAZh8F

#A Minor Setback

# Welp, the roof blew off my house so I packed up all my stuff to keep it safe until that’s fixed. In the meantime I’ll be tinkering on projects using a little old Intel NUC computer.  

1425280071980421125 E8ecqNmWEAAIozp

# 1425280071980421125 E8ecqeuWQAE5bIp1425280071980421125 E8ecq0NWQAYQTRQ

# My game sometimes chugs on this underpowered computer. I guess it’s time to optimize the performance. Most of it runs fine, but the magic garden hedge maze is slowing the game to about 5 or 6 FPS.  

1425280132248477701 E8ecuMGWEAAa  f

# I have massively improved how the game handles player collision so that map size and number of sprites no longer matters. Just check for collision against sprites that are near the player and ignore the rest. But the garden maze still chugs.  

1425280248057323524 E8ec1GhXsAswym3

# I discovered that firing an event every frame is actually pretty hard on the CPU. That might not even be a flaw in my code. Flash’s built-in event system might be the cause.  

1425280316109905924 E8ec5CiWYAYdax2

# In contrast, just running a few functions each frame is so much faster.  

1425280426621521920 E8ec a1WQAgBAtZ

# Either way, I can just avoid this problem entirely by not using events for looping code. I’ve switched the sprite code to just call an array of functions each frame. This is still fairly modular, but much faster. Now the garden maze runs at 8 FPS instead of 6!  

1425280492618801155 E8edDRhWYAMnY9

# As an experiment, I tried removing ALL THE CODE from game sprites. It turns out that just having 200 empty movieClips in existence is enough to slow the game to 20 FPS.  

1425280669236793350 E8edNiTXIAM7Wgj

# So it doesn’t even matter how efficient the sprites are, the only solution is to reduce the number of sprites.  

1425280726518411267 E8edQ8XWUAQNy8O

# I could break the garden maze up into multiple maps. That could work. Less scrolling will tend to make each map feel like its own “place” which makes navigation easier for the player.  

1425280784643072000 E8edUSDXsAkltlL

# I had another idea. The main culprit are the invisible walls in the garden maze. There are a TON of them. But the thing about invisible sprites is they don’t need to exist most of the time. The player only needs to see an animation when they collide with those tiles.  

1425280877777543172 E8edY7xWQAIhmfM

# The invisible walls only need to accomplish 2 things. Block the player, and animate when the player hits them.  

1425280948875182081 E8eddYwWYAMaigE

# The actual collision can just be handled by the map itself. Maps already have solid walls, but nothing requires them to be visible. I can assign a “wall” collision-value to any spot on the map no matter what it looks like.  

1425281018337058830 E8edh7YXoAAC6YW

# So all that needs to happen is spawning animations when the player bumps into certain map walls.  

# 1425281107176603652 E8edl7GXsAQVBqz1425281107176603652 E8ednARWUAIY4lN

# So I plan to create a new kind of sprite. A dedicated “invisible wall” sprite. I can conveniently place these in various places on the map using the editor. But when the game runs, they store their tile locations somewhere and then immediately delete themselves.  

1425281199782645762 E8edsbXXIAUOIRs

# I can just have one piece of code that stores a list of tile locations and detects where the player is colliding. When the player moves it spawns collision animations when they touch those tiles. Only a few animations would exist at a time. And therefore only a few sprites.  

1425281354300895238 E8edyx XoAcPLTB

# When I think about it, the player can only collide with 2 wall tiles at a time. If I wanted to be super-stingy I could cap the animations to a maximum of 2 existing at a time. If a third one spawns the 1st one can immediately de-spawn. But that’s probably not necessary.  

Can only hit 2 tiles at once

# I got it all working pretty quickly (maybe an hour?) It works pretty well. The garden maze now runs around 15 FPS on the Intel NUC, and probably faster on a “real” computer.  

# This is probably good enough, but I bet I could optimize all the cracked walls like this too.  

Cracked walls

# Before doing that, I can check the potential performance gain by making all the cracked walls remove themselves to see what the framerate would be. It looks like it would hit 20 FPS instead of 15. That seems minor, but it feels noticeably better to play.  

Remove all cracked walls

# So the plan for the cracked walls is they just need to set map collision to be a “wall” change the map tile to a “cracked” image…  

# …and then a single piece of code can detect when the player presses the “talk” button. Make them do a “claw swipe” animation. Spawn a crumbling animation at the tile location, then remove the collision and the wall images.  

Cracked wall shared code

# These might not even need to be placed using sprites. I could just place these as map tiles with a unique collision value, and have a game script detect when the player “talks” to any of these tiles.  

Cracked wall image and id

# Everything’s working pretty well! Now I just need to figure out how to make all these “secret” blocks show up when the player uses the scanner item.  

Need scan image

#Dragon Statue

# Man, I put WAY too much effort into this visual gag.  

1409284361338359808 E47IikDXoAQ96CQ

# Much better! I just couldn’t ignore how bad those wings looked.  

1409685598676217856 E5A1kqtWUAUSDjq

# Now it resembles the dragon statues I was trying to imitate. I’m not sure what game they originally came from.  

1409685762036047872 E5A1rYAWYAIif8P

#Walking Plants

# Okay so, I just spent the past few hours working on a, um… walk cycle?  

# Are these tentacles? Kinda. They’re roots.  

1424363823574700035 E8RbWC3XMAA Jb5

# A grateful witch offers you a reward, and when you step outside her house one of the bushes stands up and WALKS AWAY… allowing you to access a treasure chest.  

# Maybe I could have just made it levitate or vanish with some magical sparkles or something, but nope! I felt like animating WALKING TENTACLES today.  

# It’s kind of an interesting challenge. Drawing it was easy, but how does it “step?” How do the roots bend to support weight? How do I keep track of its movement across the ground?  

#Wrapping Up The Game

# I lied. The game is almost done now. But I have this huge backlog of “update tweets” I haven’t posted yet. It’s all the pictures. Typing words is fast, but getting screenshots takes time.  

Tweet backlog

# Naming things is surprisingly tricky sometimes. For this game, I kind of wanna go with “The Princesses of Yipe” because it focuses on the game’s premise of finding princesses without revealing too much, but… this isn’t an official “Yipe” game.  

Naming is hard

# Yes, that is a thing.
https://www.yipesoftware.com/yipeiii_screens.html  

Official yipe website

# I have a lot of nostalgia for The Quest of Yipe 3 on the old Macintosh. My weird game makes some odd references to it, and I like revealing the inspirations behind these things, but I did not make the original Yipe games, and I don’t want people thinking that I did.  

Great artists don’t steal

# Also, the old “Yipe” games are still being sold… as shareware! It’s so quirky and charming. I respect that.  

Shareware

# But I think I can have it both ways. I can just pick a different name to avoid confusion with the official games, and I’ve already mentioned the Yipe games in these behind-the-scenes progress tweets, so the inspiration is clear.  

Knockoff name

# Happy (similar but legally distinct) holidays!  

Father christmas

# Someday I might talk about my weird history with that old Macintosh game. It’s a bit more than just nostalgia. It’s the first game I ever modded, and ties into my obsession with including level editors and adding fun kinky twists to games.  

Resedit

# Sounds effects are done, endings are debugged. I think I’m just about ready to wrap this whole thing up.  

Thats a wrap

# There’s quite a lot of old unused maps and places that were scrapped, not to mention the debug rooms. Anyone who downloads the level editor might enjoy exploring these, so let’s go in and adjust all their old teleports to still work without trapping the player.  

# Debug roomUnused map 1Unused map 2Unused map 3

# When it comes to game design, I like to reward curiosity. I’ll include them with the game’s level editor.  

The cutting room floor

#Wrapping Up Flash

# Making this game into a self-contained file would take hours, but nobody can play Flash in browsers anymore anyway. It’s much faster if I import just the music to make it play back right, and leave everything else as external files.  

Flash is dead

# Doing it that way makes it a 54 Megabyte download. Which is tiny compared to most 10+ Gigabyte games these days, but kind of embarassing compared to the 6 MB that most of my games take up, after I make them self-contained.  

# Size of music import onlySize of self contained

# Also, there are people who have trouble finding the EXE in this file soup, but I have an idea. I’ll dump all the files into a folder and make a “relative” shortcut to the EXE.  

# Find the exeExt hidden by default

# A regular windows shortcut normally has to have the full path, but there’s a loophole. Make a shortcut to explorer.exe and pass it a relative path to a file you want to open.  

Relative shortcut

# Shame about the missing icon though. I’ll just pick one of the default ones. This weird old pixel tree is charming, but I think I’ll pick the “play button”  

# Icon treeIcon play

#Eek! A Bug!!

# Rescuing Lilly from the dragon was cycling the party forward instead of backward. That’s fixed so now it’s possible so see every dragon kidnap scene for each girl by revisiting the dragon after each rescue. The dragon always abducts the last girl at the end of your party.  

Bugfix 2022 01 02

# I just fixed a game-breaking bug where a certain scene would permanently freeze the player. If you re-download the game, everything should work now.  

#Wrapping Up History

# It took a week, but I finished converting the game into a single file, both as a Windows EXE and as a Flash SWF. This should also make it easier for people to play it on Mac and Linux, and easier to archive for FlashPoint @fp_archive  

# FlashpointSelf containedSwf file

# I also uploaded the source files for anyone who’s curious about how it works.
http://www.humbird0.com/content/games/yipe_fakeQueen/  

# SrcSrc files

#DOWNLOADS

# Windows EXE http://www.humbird0.com/content/games/yipe_fakeQueen/princess_rescue_win.zip
Flash SWF http://www.humbird0.com/content/games/yipe_fakeQueen/princess_rescue.swf
Source Code http://www.humbird0.com/content/games/yipe_fakeQueen/princess_rescue_source_code.zip  

Download legit 250x150

#Eeek! More bugs!!

# Okay… more like 10 of them. Apparently some of my code broke when I imported everything into a single file.

# You can still play a non-buggy version here in its older form.
http://www.humbird0.com/content/games/yipe_fakeQueen/princess_rescue_win_2022-01-02.zip  

Code bug

# Apparently the jump distance would change if the game lagged, so I updated the jump to run in-sync with the game. The issue was that jumping was time-based but the rest of the game was framerate based. If the game lagged the jump would end early and fall short.  

Jumping fixes