Quick Pick

Jul 21, 2017

Update on the Conversation Simulator

Following a comment I got on a forum regarding my recent Conversation Simulator, I devised a new condition, which is actually the exact opposite.

Instead of trying to reach a specific topic in the best way she can think of, Kiyomi will now try to avoid it at all costs. But, following as previously, she will still try her best to pick a smooth transition from the topic you brought up. So she will do her best to come up with the best compromise between a topic that is close to yours, and one that is as far as possible from the target topic.

In termes of gameplay, it makes for a greater challenge, since unlike the previous version, Kiyomi will never ever bring up the target topic on her own. So you have to try and narrow down the "area" she seems to be steering away from to guess what the target topic might be. Once you know what the target topic is in the fixed condition, you can play around by trying out topics you know to be very close to it, and see how smoothly Kiyomi tries to steer the conversation away.

The links were updated, enjoy. :)

Jul 9, 2017

A Conversation Simulator in RenPy

Hiya! Missed me? Well, I'm back, baby!

I've dropped RPG Maker and found a new toy: Renpy! Actually, I'm surprised so few people use it. It turns out Python is A LOT similar to Ruby, so RPG Maker scripters should feel at home. Plus, there's a nice set of tools for debugging and stuff, I'm really enjoying myself so far.

Anyways, to the point.

This is not exactly a project, or more precisely, it's a demonstration of a script I could use in a future project of mine (as well as me tinkering to see how far I can get with RenPy).

This is a conversation simulator. Now, don't get me wrong, it's not like you get to type in what you want to say and the computer answers. But, rather than choosing between a few dialogue options (which is how it's classically done), you get to choose what topic you wish to discuss, among a number of them (20 in this demo). Nothing groundbreaking so far.

It turns interesting when the computer answers. You see, the conversation is two-way, and the person you talk with will also pick a topic in turn. Of course, the computer doesn't pick at random (which would be pointless). Actually, the NPC is anxious to discuss a topic in particular, and the idea is that you score points if you manage to get the conversation to that topic. But since the NPC doesn't want to make a harsh transition, they will always try to come up with a topic which is relatively close to the one you picked, and yet drives the conversation toward the desired topic. And it's the only clue you're gonna get.

In short, it takes conversations in role-playing games to a new level. It's not about choosing between a few predetermined lines, which are always obvious by the way, to get what you want - but rather, it's some sort of mind game where you have to read between the lines, and use everything you know about the NPC to understand what they're trying to tell you.

I hope you'll enjoy the concept in its current form, though I have quite a few ideas to make it even better. For now you just have to exhaust all topics to find the right one, but in a real game situation, you would have a limited number of tries before the NPC gets tired and walks away. Also, you would start off with a limited number of topics, and unlock them one by one, as you get to know people/places and events occur. So the first conversations would be easy to handle, while you could very well end up with dozens of topics, and have to tread carefully when you're in a critical event with just 3 tries. Also, what you can't for now because there's just one NPC to talk to, is that she has a personality. That is, she has her own favorite topics, and the one she'd rather avoid. A different NPC would make different picks in the exact same situation.

I've prepared 2 situations, with the exact same scripted dialogue. The difference is that in one, the girl wishes to discuss a predetermined topic which is always the same, so once you've found it you can try different approaches and see how she tries to draw closer to it. In the second, though, the desired topic is chosen at random, so you can put your guessing abilities to the test!

The point of this demo is not to put up a challenge. You will find it's pretty easy to reach the desred topic, mainly because there are too few topics. You have to imagine how complicated conversations could turn with about 40~50 topics, and a limited number of tries for each.

Anyways, here's the download link. Don't hesitate to let me know if you like the idea and how you'd like to see a full game based on this system. :) Cheers!

Download PC version: http://www.mediafire.com/file/xc41cfcma2h4428/Test-1.0-pc.zip
Download Mac version: http://www.mediafire.com/file/48mzab68mnsrn8q/Test-1.0-mac.zip

Oct 24, 2015


Hi guys,

As you may have noticed, I've been away for, uh, quite a while. No particular reason to this, I'm just quite busy (I'm a divorced father of two young kids if you have to know) and, well, game-making doesn't seem as thrilling to me as it used to. Sooo basically I'm posting today to say goodbye for an indefinite period of time. I'm not closing this blog because I want people to be still able to access my contents even though I'm away - but on the other hand I won't be active here until further notice. I know I'm going to leave some users disappointed because I've received lots of requests for help in the past months that I let pile up, and if I'm addressing one I'm going to address them all, and this is too much for me right now. I also saw lots of nice comments I'm not going to give individal replies to, but be assured I read them and it meant a lot to me.

So, thanks to all of you faithful and casual readers for your support and feedback and positive thoughts. I hope I was able to provide enough contents and help to leave good memories wherever I have posted too. I'll be thinking back of my experience as an amateur scripter with a smile on my face - and who knows, maybe we'll meet again in the future, here or elsewhere.

Take care.

Dec 31, 2013

Daily Life Project (part 1 - time and lighting)

It feels a bit strange that, after all this time, I finally get to repost the script that started this blog, a long while ago, long before I had made myself a name - that is, long before the ACMS. :p The loop is getting looped, and it feels like a nice parting gift with all of my faithful RMXP followers.

The Daily Life project initially is my own attempt as a day/night system. If you would like a day/night system and...
  • you think most of those look ugly or otherwise unrealistic
  • you would like to control the flow of time
  • you would like to make variations on events based on the time of the day or day of the week
  • if you would like a realistic, dynamic lights system
Then it is exactly what you need.


Event-controlled time.

  • time does not advance automatically - unless you command it to with a parallel event. You get to control how time changes with game variables, down to the second.

  • a wide range of variables and switches allows you to set event to appear/occur only at specific times - specific hours and/or days in the week and/or months and/or years...

Natural-looking day and night.
  • progressive transition between dawn, day, dusk and night
Progressive change in daylight on a summer solstice
  • progressive change of daytime duration according to the season (daytime lasts longer in summer)
Progressive change in daylight on a winter solstice
  • fading overlay effects according to time of the day (sunbeams at noon and haze at night)
  • events named "Shadow" automatically fade out as night gets closer
  • day/night can be disabled when inside closed spaces, and luminosity set manually
Closing the curtains forces the luminosity to zero despite the fact it is noon

Realistic, dynamic lights
  • any number of light sources can be set and blend naturally into each others
  • real-time calculation allows light sources to flicker and even move around
  • adjustable radius and strength
  • lights tear through darkness but do not overlay ambient light

Known issues

  • This script is known to make the interpreter lag, depending on the user's machine. It is not the script's fault. RPG Maker's graphic engine has such poor performances, that how the script works will necessarily confront it to its limits sooner or later. It is pointless to ask me for an optimization, since there's absolutely nothing more I can do to address this issue. However, here are a few guidelines to avoid lagging:
  1. More light sources mean more calculations - do not make too many of them
  2. Map scrolling requires recalculation at each frame - avoid making maps that exceed the screen size
  3. Having light sources flicker or move around also requires frequent reclaculation - do not overuse those effects
  4. The darkening overlay which gives the illusion of night is arranged in small blocks. The DARKNESS_PRECISION constant in the Constants - Custom entry controls the size of said blocks - the smaller they are, the better the quality and the worse the lagging. It is set to 2 by default, which I found to be the best quality/performance ratio. Setting it to 1 will make the overlay appear blocky but will cut the load in quarter.
  5. The DARKNESS_FRAME_SKIP constant in the Constants - Custom entry allows to force the calculations to wait for a set amount of frames, thus effectively cutting the load. It is set to 0 by default (no skipping) but you can set it to small numbers (like 4 or 5) so that the overlay does not appear too jumpy, and you gain a little performance boost.


The following link provides a script bundle meant to be used along with the Script Manager. Terms of use and instructions are provided within. Please credit me if you use it in your own project. A nice comment is always appreciated.

The following link provides a demo for said script.

Dec 29, 2013

The Variables Binder or How I Made Something Easy Even Easier

Faithful users of my works know that I like event-controlled system, when appliable. For example, my Balloon Messages System relies not on clumsy commands input in messages or stuff like that, but rather on regular switches and variables, which are easier to handle. Those switches and variables are then read by the scripts which in turn do their job. To achieve this, the scripts have to know which switches/variables were appointed to this or that purpose, because from one project to another, a same switch/variable may very well have a different ID - like, if I use switches #2 and #3 in my demo, they might already be allocated, and you'd like to use other ones instead.

Up to now, you had to manually set up constants for that purpose. You had to choose free switches/variables in your project editor, then you had to open the script where the constants were set and replace each of them with the ID you'd chosen, and then it was all cool and easy. That was, until I decided I was too lazy to do the manual part anymore. I decided it was not that hard for the scripts to find the matching switches/variables after all and they could very well do it on their own. From that decision, a new script was born. Behold... here's the Variables Binder!

So what does it do?

Basically, automate the process of binding switches/variables as set in the project editor with the scripts. Say you install the Balloon Messages System to your project, you run it just after, then return to your project editor and poof! a couple of variables and switches which control this system have installed themselves in free slots, saving you the trouble of naming them manually. From then on, those switches/variables will automatically be recognised by the script you've just installed and you don't need to worry about that anymore. So, in short, it's simple as 1-2-3.

Any recommendations?

The Variables Binder will never ever mess with switches/variables which already have a name so it's absolutely safe to use on a project you have already started a while ago - however, it decides whether a switch/variable is free based on whether its name is empty or not, so make sure all of the switches/variables you're using at this time have a name, otherwise you could get surprises.

You can see that your newly named switches/variables have got a tag before their name. This makes it easier to see which variables group together, but it also works as an identification code. That is, you're free to rename the switch/variable as long as you keep its tag intact.

If you were already using one of my event-controlled scripts prior to the arrival of the Variables Binder, please make sure the variables you've set manually have the exact same name (without the tags) as in the original demo, since when the tag is absent, the Variables Binder will identify them based on their name, and automatically add the matching tag - so you end up with the exact same settings as if starting a fresh new project with the scripts' latest version.

If the switches/variables have not been installed prior to the Variables Binder's first launch, it will claim the first free slots it can find, so you might want to have several of them in a row so that they don't get scattered. Also, make sure you have set the maximum number of items so that there's enough room for the newcomers in the first place!

What if I still want to set the variables manually?

If you're not satisfied with the Binder's automated setup for whatever reason, there's nor problem at all. Just cut/paste the name of the variable you want to move to another slot. Since the setup is dynamic, the script will recognize the newly named variable as if it had set itself up on the next time you run the game.

Where can it be found?

The Variables Binder is part of the latest version of my Common pack. You should re-download it to ensure compatibility with my future scripts.

Aug 25, 2013

Surprise on the Moon!

Hello folks,

Recently I was announcing I'd lost some significant contents that was supposed to help me complete the oh-so-awaited update to the Script Manager. This led me to question some choices I had made at the time, since I was to remake them anyways. And so, I'm pleased to announce that I've AT LAST succeeded at making the Script Manager as versatile and powerful as I wished it to be. Though it's not quite the all-in-one utility I had in mind at first, I think it's all better as it is now.

From now on projects are going to be hybrid, meaning you can run them as regular projects using their featured copy of the scripts they use, or run them using the Script Manager, with no modification whatsoever. For example, when I release a new script, you can try it out downloading it as a plugin and launching your project with the Script Manager - this will read the newer version you've downloaded instead of the older one from your script editor, without replacing it, so your game still runs the same as before. Additionally I've made a tool to export scripts from your projects (read scripts from the script editor and export them as .rb files, so that they can easily be used along with the Script Manager), as well as another one aimed at importing the .rb files used by the Script Manager into your script editor, all of this automated of course.

I will not be going more into detail tonight, I was merely to excited about this new achievement to wait any longer to let you know. I will be replacing all of my Script Manager-dependant demos with hybrid demos you can run as they are in the following days. As of right now only the newer version of the Ballon Messages Demo is available for download. You can try it out, check that it does actually run on its own, and have a look at the scripts inside its script editor, all of them imported automatically from external .rb files. :)

Have fun!

Aug 20, 2013

Even More News From The Moon

Hey guys,

Today I wanted to complete the update I'd promised a loooong time ago on the Script Manager, but I realized I had failed to update my backup copy with the latest version of my works. Fortunately not everything was lost, but I have a lot of catching up to do and I must confess this sad event has killed the little courage I was able to gather. So probably still no update before a while.

Regarding OpenRGSS, a friend of mine helped me through the process of writing the C code I need, but now we're stuck at the compilation step, which really seems to be a pain with Ruby in a general manner. Also, I'm considering dropping SDL as OpenRGSS's backbone and replacing it with SFML at the suggestion of a community mate, but I still need to investigate its features and of course, to install it succesfully before making a decision. This would mean rewriting the low-level engine, but hey, life is an eternal starting over.

So, lately, I feel the urge to create something, but nothing seems to go right. Anything for me to do, anybody?