Monthly Archives: July 2014

Project Exist 0.2.3b

All of Project Exist:.

  • The new game build is titled “Coldfixup” for now, please use the in-game updater.

Blog:

  • Added application
  • Moved Previous Builds to Other Links

Wiki1:

  • Fixed Memories of Ultraman 7 formatting
  • Added this

Wiki2:

  • See Wiki1

wtf_iorpy_magic:

  • Version is now 0.1.1
  • begin_game() is slightly more thorough
  • added filify_string(given_message, magic_folder, magic_file), which returns string if given a UTF-8 encoded file.
  • added kill_save(savename), which deletes a save.
  • added freaking_delete_every_external_file_associated_with_this(). What it does is left as an exercise to the reader.
  • added label reset_button. (freaking…() should not be called directly)

Game Engine/UI:

  • Fixed loading an NVL screen within an NVL context within some other context by use of “centered” instead of actual NVL.
  • Slightly changed the way the debug menu works.
  • Several non-working menus removed

Game Story:

  • Absolutely nothing notable.

wtf_iorpy_magic 0.1.0

Today marks the first release of wtf_iorpy_magic. You can also call it WTF input/output Ren’Py magic. Maintaining it is a side-project, and not a priority. It is a very unpythonic and not-so-optimized module for Ren’Py, but does make file management much easier (I really don’t like the persistent system… I just don’t).

It’s a pretty much undocumented in-line, mostly because we figured it’s easy enough to use (as long as you actually read the README). That being said, standalone documentation is available in the zip file. We’re releasing it under the WTFPL. Happy coding.

wtf_iorpy_magic_v0.1.0 (19 KB)

Project Exist 0.2.2b

TL;DR:

  • Build/Link/Name: ProjEx_v0.2.2b_(1014): WTFPL = LMFAO
  • All of Project Exist: The update server has been replaced. ProjEx_v0.2.1b should properly patch to ProjEx_v0.2.2b.
  • Game Engine/UI: Regression: Saves from previous builds will nigh-definitely break at some point due to readback.rpy.
  • Blog: Readers that use feeds and would rather not read everything The Project Exist Team writes should use the following feed: http://blog.projectexist.net/?cat=7&feed=rss2

All of Project Exist:

  • There is now a second wiki. This is where things will be broken, fixed, and drafted. Hopefully, this will help maintain the integrity of the first wiki. Once a draft on the second wiki has been made, or a plugin has been thoroughly tested, then and only then will it be moved to the first wiki.
  • The main parts of Project Exist (that is, the blog, first wiki, and game) will be updated in staggered waves. This means that for all intents and purposes, the blog, first wiki, and game are all considered to be running ProjEx_v0.2.2b, and that all three of these components will be updated at the same time. Small in-game patches will continue normally. Blog posts will continue normally, but features will no longer be added “as they are available”. Change logs will look like this post from now on.
  • The update server has been replaced. ProjEx_v0.2.1b should properly patch to ProjEx_v0.2.2b.
  • Regression: Percussive maintenance applied to server. Effects unclear.

Blog:


Wiki1:

  • Now running MediaWiki 1.23.1, fixing a bug where pages could be blank.
  • Class spoiler (used by Template:Hidden) now works via hovering.
  • Regression: staying logged in feature does not seem to work as well as in MediaWiki 1.22.0.

Wiki2:

  • Actually exists now.

Game Engine/UI:

  • Implemented surprises.
  • Implemented a version of readback.rpy, which was released under the WTFPL (link not safe for work/profanity firewalls, read the first three letters). Readback is independent of rollback; to activate it, scroll up while in-game to display page(s) of previously viewed text.
  • Fixed a bug (which end-users could not experience) whereby questions asked in NVL-mode opened a new window rather than continue from current dialogue.
  • Hacked around a bug (which end-users could not experience) whereby colored text was not preserved in readback.rpy. :(
  • readback.rpy breaks with a KeyError when trying to recall an iterated integral problem due to left bracket [ handling. Temporary workaround was to change brackets to parentheses (). Permanent fix will be to add images for parts of mathematical operations.
  • nvlq(question, *answers) implemented in screens_extra.rpy, which quickly builds a question in nvl_mode and its follow-up. Code will be released in-blog shortly.
  • Answers/choices are no longer explicitly stored, and are instead implicitly stored by answer_add(new_answer).
  • Menu option for Report a Bug added.
  • Regression: Saves from previous builds will nigh-definitely break at some point due to readback.rpy.

Game Story:

  • Absolutely nothing notable.

Kazuki Kamata: Hanayoridango

There’s a Japanese proverb that goes something along the lines of “花より団子” (hanayoridango), which roughly translates to “rice flour dumplings rather than flowers”. Sounds like a load of sexist nonsense, really, at least at first glance. If I went for the flowers and Natalie Bellangerd went for the dango, then pretty much anyone watching would think that they were hit on the head. Or maybe that I was hit on the head and that Natalie Bellangerd was having a bad day. You get the freaking picture. Perhaps the picture wouldn’t have been so clear if, hypothetically speaking, the dango were colored a scorching hot pink… anyway.

As it turns out, the saying has nothing to do with the gender of the preference. Rather, it has to do with the preference’s purpose or function. Looking at dango in a simpler light, it loses its purpose as a sweet treat and becomes regarded as an actual food item. Happy surprise and joy. But flowers? Pfft… still a buncha colored petals that aren’t attached to the ground anymore. At the end of the day, who gives a damn? The proverb thus, tells us that it is wiser to prefer substance over style; stuff that we can actually use, basically.

I’d also like to point out that neither dango nor flowers last a long time. Let’s say the saying instead were “玉葱より鶏” (tamanegiyoriniwatori), or “chicken rather than onion”. Yes, I know the pronunciation is a bigger “mouthful” (that deserved a rimshot)… but the idea here would be that you would only be able to eat the onion once, whereas the chicken could lay eggs, regardless of the fact that an onion is much easier to maintain and probably a lot nicer looking. Again, substance over style.

This is actually more interesting if you think about logic. “Style over substance” actually happens to be a logical fallacy. The idea is that in an actual argument, being pretty shouldn’t get you anywhere. For an example, let’s say I am at whatever faculty meeting and arguing for same-sex rights in the classroom. My argument is “psychological studies have shown that both genders are anatomically capable of acting independently, and therefore office hour meeting availability cannot be influenced by the gender of the attendee(s)” or insert other thought-provoking-nonsensical-I-don’t-care argument here. If the response was “yes, but your slideshow is hard to read because you used Sans Serif instead of Calibri”, then the judges have style over substance in mind, which, y’know, is bad. Attack my argument, morons, even if it is something I pulled out of my ass.

~Kazuki Kamata

We got our logo!

Well, not really. More like “We’ve had our logo!” And it’s temporary. So more like “We will have a new logo!” Except maybe I won’t be rich/bored enough to buy/make a new one. I guess the real title should be “We have our logo for now!” You may have noticed it on the wiki, or on the TeamSpeak 3 server, or in-game, or… Anyway I made it in Photoshop. It took less than two minutes.

Moving the logo on the other hand… well…

Oops.

Oops.

That took a lot longer. Anyone at this page circa 8:32 PM PDT probably got a few giggles out of watching the logo grow and shrink and bounce around. I should really hire someone to do the CSS nonsense, or at least take a crash course.

.site-header h1 a:before {
	content: "";
	display: block;
	position: absolute;/* bad idea, oh well */
 	bottom: 0;
  	left: 0;
	height: 120px;
	margin-top: -30px;
	background-image: url("http://projectexist.net/full_logo.png");
	background-size: cover;
}
.site-header h1 { margin-top: 30px; }

@media screen and (min-width: 600px) {
	.site-header h1 a:before {
		width: 120px; height: 120px;
		position: absolute; top: 0; left: -126px;
	}
	.site-title, .site-description { position: relative; margin-left: 126px; }
}

I owe myself a cola. Oh also, I wrote up a start for a new Dream Guide and Rin’s page is basically done. I think after one more route character, one more sub-route character and two more minor characters I’ll finally be done with character design. Also, to those of you who were wondering why I didn’t have a blog post every day, do me a favor. Buy yourself one-way ticket to Alaska, and stay there. jkloveyou.

~Nolan

P.S. You can find new additional CSS happiness at our index page/portal!

a:link {
    color: #00FF00;
}

a:visited {
    color: #00FF00;
}

a:hover {
    color: #FFFFFF;
}

a:active {
    color: #0000FF;
}
span{

  font-family:Arial, Helvetica, sans-serif;
  width: 60%;
  height: 60%;
  overflow: auto;
  margin: auto;
  position: absolute;
  top: 0; left: 0; bottom: 0; right: 0;
  text-align:center
}
body{
   background-repeat:no-repeat;
   background-position: center center;
   background-attachment:fixed;
   background-image:url('opaque.png');
   font-family:Arial, Helvetica, sans-serif;
   min-width:512px;
   width: 50%;
   min-height:512px;
   height: 50%;
   overflow: auto;
   margin: auto;
   position: absolute;
   top: 0; left: 0; bottom: 0; right: 0;
}

… I owe myself two colas, and I think I am going to be sick.

Happy Super-Belated Fourth of July

I expect that the majority of you either saw friends/family, stayed at home/school, shoved grilled meats down your own/neighbor’s throats, live outside of the United States of America, or some mixture thereof.

In other news, you may have noticed that http://projectexist.net directs to http://wiki.projectexist.net/ instead of http://projectexist/pe_wiki. This is because we moved. Additionally, old direct links to builds (and wiki pages) no longer work! The game’s updater however will still work. Explaining the exact how and why of all that would give everyone a headache, including me.

And to you nutjobs thinking about setting up a HOSTS entry to access the old site will find that said site will be torn down within the month. Well, if you know what that even means then you’re a nutjob anyway, but that is far besides the point.

TL;DR happy holidays, new server, new build, don’t be dumb.

~Nolan

Ultraman 7

Okay, before I get into the nitty-gritty of this particular post, two things. First is that the build put out today doesn’t really fix anything major or minor, but does allow everyone to make sure that the update system actually works. Second is that umm… I kinda sing the song sickly and badly, so 90% of you are going to want to skip over the audio file in the middle of the article. The 10% of you that are also sick have something to laugh at. Haha.

So for those of you that don’t know, Rin is not exactly a nice person, and that’s by design. Part of why that is due to her purpose as a second playable character. When we first decided “aww gee, it would be nice to have more than one playable character”, the next thought was “well it could be a female character”. Then I got around to surveying folks, and the general consensus was that there aren’t enough visual novels in which you can play as a female character, and even then, there’s almost always some poorly-done romance element that makes the story fall to pieces. So okay, now we had an idea for another main character; the villain for the first main character, which I personally think is kinda cool. But a new character means new background, and we figured Rin’s background would make more sense if she were an orphan or something.

That got another one of our writers thinking: what if Kazuki has to deal with Rin’s father? It was a cool thought, but I wasn’t really sure how to throw it into the current game. Then I thought “what if Rin had a brother?” And thoughts fired like a minigun from there. “What if he was fictional? What if he was a Dream Guide? What if he was unlockable?” And so on and so forth. But if he was going to be a Dream Guide, he’d need to be based off of something… At this point, I had yet to design a pop culture (or modern) Dream Guide.

Well in Japan, there was this internet meme song thing – it was popular for a while, called Omoide wa Okkusenman, which translates to Countless Memories. The lyrics for it were posted by PiggKingg on February 6, 2007, and they were set to a re-arrange of the background music from Doctor Wily’s Stage in Mega Man 2. The re-arrange itself was done by Aoi Kiba, and the lyrics revolve around the singer remembering his childhood, and then realizing that the lives of his group are nothing like they used to be. Which is only fair, considering they were pretending to be Japanese television heroes from the 60’s. God only knows why, but my next thought was that I could totally breathe some life into this character. Problem was… the song wasn’t in English. There was a translation floating around on justsomelyrics.com but it has since been removed. It is available on our wiki, but even then, the translation wasn’t a very good match-up with the actual music. Long story short, I edited the translation so it syllable-for-syllable (or close to it) matched the music.


This does mean a few odd things for Rin’s storyline. Theoretically, her brother could end up having two different ages at the same time. I could write off the unlockable content as non-canon I suppose… Time will tell. This is just an idea.

I also would like to take this time to point out that we absolutely do have openings on the staff team if anyone wants to get involved. I’m sticking my tongue out, but I’m not on camera. Anyway, that’s all for today. Hope all your eardrums are still intact. You’ll need them.

~Nolan

Gullible isn’t in the Glossary

Do note that the second half of this article is more tuned to programmers, and likely not suitable for a general audience.

[Side note: new build tomorrow fixing a few typos in the glossary and a few other places.]

If you were to ask me, one of the most annoying things about… life in general really… would be realizing two specific problems at the exact same moment.

The first would be that of “not knowing” something. Which shouldn’t be so bad on its own, since it’s basically impossible to know everything about everything (if that makes any sense). It might grind your gears that you don’t have the information, but hopefully you could get it at some point.

The second would be realizing that obtaining said information wouldn’t be a trial-and-error (or similarly easy) process. This is perhaps the most frustrating in larger games where the lore may only be given to the player once, or recipes make absolutely no sense, and thus have to be found on the Internet. A particularly offensive example would be the Ascended back items in Guild Wars 2. Consider the following:

You need a Vial of Condensed Mists, which drops from monsters in the Fractals of the Mists, which itself is a somewhat randomized high-level dungeon. You need 40 Crystals, which you purchase from vendors using skill points. You need 50 Globs of Ectoplasm, which are items obtained from salvaging rare items. You then need 250 Vials of Powerful Blood, which drop from a wide variety of high-level monsters. Nowhere in-game are you told that these specific items need to be combined to get a book of all things. And even once you have these items, you can’t make the book yourself. You have to go to some djinn who lives in some hourglass-looking thing who makes the book for you. (Did I mention that this is the basic version of the book?)

Now quite clearly, the simple solutions are always those that avoid the problem altogether: having exceedingly simple lore and gameplay to the point of, for all intents and purposes, not having any! A step up would be to manage your own wiki (although now would be a good place to reiterate that our wiki is for development and not gameplay). While we’re talking about other games, RuneScape also has a wiki, but it may as well not exist. What’s better, of course, is embedding a glossary into the game – you shouldn’t have to tab-out of a game to fully enjoy it.


 

Here’s a sub-problem though: not all writers are programmers. This is what the first three paragraphs of this article look like if put into the game engine:

Gross!

Gross!

*sigh*

*sigh*

The glossary looked like this for a very long time, and maintaining it was becoming a headache. It would make sense to allow the glossary to be edited directly via text files… the question was how? As it turns out (thank you for being well documented Ren’Py), there were functions built-in for this.

renpy.file(fn) grants the game read-only access to file fn.

renpy.file(fn).read() then, places the contents of file fn into a String.

renpy.file(fn).read().decode(enc) then, gets the contents of file fn, decodes it in accordance to encoding enc, and then places them into a String. Which explains why the following is in the code:

Automatic and simple, if not weird-lookin'.

Automatic and simple, if not weird-lookin’.

Hope that all made sense. And if not, I did warn you. Rin will be the subject of the next blog post. I think.

~ Nolan

“Oh, good!”

It works, in a way.

It works, in a way.

So as I promised yesterday, I put out a new build today. (No More Safaris.) It fixes a few things you probably didn’t notice (such as a comma splice), and added something you’re going to hate me over: the built-in update system.

See, this game uses Ren’Py for its engine, and as of Ren’Py 6.14 “Steampunk Hamster” (technically a little before it, since Ren’Py itself has beta builds), the Ren’Py SDK is made with Ren’Py itself. And Ren’Py updates itself just fine. The long and short of all this is that Pytom (the guy who makes Ren’Py) made it very easy to integrate his updater into games. What this means is, that this build of the game can check this server for updates and take care of itself. No more re-downloading the whole game to update. Not bad, for being the first build of the month.

Dun good.

Dun good.

That said though, most of the programming is done now. (I’ve been saying this for a while, it was still true when I started saying it I swear! You don’t want to see the source code…) Which is good, because technical stuff would just bore the general populace. I figured I might as well talk about Lilian Crawford for just a bit.

One point of Project Exist is to create a game that breaks standards – not that we’ll go out of our way to do so, mind you, but if something seems fun, our writers will probably find a way to at least give it a shot. Lilian Crawford is a character we are going to use to create a side story. It will mean nothing to either Kazuki Kamata or Rin Faust. It will not have an impact on the main story. There will be no choices to make in the Lilian-William arc. It will simply be a story the player catches pieces of as s/he plays for a bit of extra comic relief. I mean, it’s a psychological horror for crying out loud. In fact, there will be (almost) no way for the player to intervene in the arc. For those that haven’t been playing the game, Lilian is the girl who Wil just so happens to have a crush on.

Lilian gets the joy of being the stereotypical shy somewhat-quiet book-smart mild-mannered girl. She gets to be a foil for… well, pretty much every character that has dialogue, really. The first scene involving Lilian revolves around Wil thinking the poor girl looks panicked during a fire drill, and Kazuki dryly responding with “Firstly, I’m fairly certain that nearly anything would make Lilian panicked. Secondly… when did you start referring to Lilian Crawford as ‘Lily’?” Of course, Wil responds by stuttering a bit. Tough guy ain’t ever so tough when chicks are involved.

Next week should see the completion of Rin and Wil’s respective character profiles on the wiki. Stay cool – Summer is a strange season.

~ Nolan