2015-01-31

January Wrap Up. Screen Shot Sat, Mission System, etc.

January

I think this was a good start to the year. I've added a bunch of things to the system and designed a lot of stuff for Crooked that should keep me busy through the rest of the year. Looking back on my posts to this blog, in January I did this:
  • put together basic documentation for Fate
  • transferred NDGA to the system (although I don't think I'll release the updated version because it is incomplete)
  • added basic horizontal lines with variable width
  • added a fancy text style and text alignment
  • added watching variables for changes and toast messages
  • added the stat display for viewing variables
  • added input and toggles to variables
  • added print() transformations using Humanizer
  • put together Body Gen and released it for peoples to try
  • added descriptive text within links
  • added an sms text style
  • and finally I added the mission system and added icons to the main game screen for prettyness.
 There are probably more things in between all of that stuff, but I can't remember any of it.


Mission System



2015-01-28

txting

I'm knee deep in coding the mission system when all of the sudden I stop and build this instead...



I just really wanted to have a nice way to represent text messages in game. The code for this is simple enough:
text("in")
Hey, what time are you going to finish the Mission system?
text("out")
dunno
text("in")
what do you mean dunno?
text("out")
I mean I'll finish it when I finish it!
The big things missing with this are emoji, which are currently impossible with the default Text component in Unity, and Images. Images are an interesting problem due to the way they would need to be loaded in code, but I don't plan on using them, so they are on the back burner.

2015-01-24

A Saturday Screenshot

How did the week go so fast? I should be working on a time machine, or better yet a cloning machine so I could make a few more of me to do things. Anyway here is a screencap of an addition I made to links to allow descriptive text within them.

  

That is done with code like this:
 [[Body Builder|desc("- this will prove your raw power -> Strength")]]
I'm also considering using passages as the descriptive text and or the link text, but I'm in no rush to implement that yet.

Anyway, the screencap also shows the talents that I've thought up for the game so far. I've spent the last week lurking around rpg.net looking for game design ideas and stuff. For the most part I left with more knowledge, but haven't made changes to my original ideas. 

I figure Crooked will have talents that are trained through various actions in game. Every in game day, talents that are trained will increase while all others decrease. I think it will be a fair way to allow the player to do interesting things in tight spots. I'm thinking there could be tiers to these talents. For example once you are good at a particular talent, it can decrease without use, but stay above a threshold. The most important thing is that there aren't any artificial barriers that become annoying rather than fun. I'm interested in any thoughts on these 'talents' or any alternative design ideas as far as skills/talents/classes etc.

2015-01-21

Just a quick post about Body Gen

I've updated it to v003. The update details and links are over on the Body Gen page. I've found and fixed a few bugs as the result of people messing with it, so I feel good about that.

I think the bodies it gives are detailed enough where I don't need to work on it anymore for my purposes. Still there are definitely things that could be done, but I've spent far too much time 'researching' boobs. Actually, that wasn't so bad.

I even found this little gem http://en.inkei.net/ just don't ask me what it is for.

2015-01-17

Screen Shot Saturday

It's Saturday again... time for crappy screenshots!


Added stat bars and did a little work towards crisper text. I'd still say everything looks bad, but it's better than nothing. When Unity redo font rendering it will be a good day.

2015-01-16

Body Gen v 001, Fate Test

Making characters is the thing I spend the most time on. It's always tricky so I keep thinking of ways to get better end results. One tool that I can't go without is Fake Name Generator. I've used it a lot because it spits out a random person that I can shape into what I need. The only downside is that they don't generate physical body information. I'm pretty sure if they did got into bodies, they wouldn't include the ~details~ that I require anyway. It dawned on me that I can create a generator for that stuff myself.



I started with a tool built in Unity, then realized I could easily do the same thing using Fate.



This has the added benefit that I can post Body Gen here in hopes of getting some feedback on Fate. But this is like version 001 of Body Gen so don't expect much. Here are download links:
WINDOWS
MAC
LINUX
These are built using Unity so they are a little sizey, but what can ya do. Please keep in mind I have no idea if these will work at all :). Also if your computer explodes it's your fault. (Legal mumbo jumbo here) Okay I think they'll work, but the whole purpose is to find problems that I can fix. This is such an early public test, that I consider it a success if the thing starts up on your computer at all.

Body Gen is very simple right now, but will include more logic and details later. One place that is lacking for example is that the system generates trans-gender characters, but assumes they are all pre-op except for breasts. There are also various skews in place based on race that could/should be modified. For example blacks are more likely to have much larger cocks, but that doesn't necessarily mean that other races aren't capable of similar sizes. In other words, there are a lot of incomplete and or bullshit subjective things that could be changed. Apologies to all the people everywhere.

Assuming the game loads, a major point of the system is that games are moddable by default. This means if you want to customize Body Gen it shouldn't be a problem, given you know how the source code is formatted. It should be familiar to those who have used Twee/Twine. The document page is included in each zip. I use sublime text 3 with a plugin with syntax highlights and code completion for .fate files. Here is a copy of the plugin.

I'm probably thinking too far ahead, but if you are interested in sharing changes to Body Gen, you can send stuff to my email so I can include it in future versions. p4p - a - t - bunkville.com
I'll eventually setup some better way of sharing things, but I'll cross that bridge when I get to it. Thanks.

2015-01-14

50th post, 2015 goals, New project... again

50th post get. I guess having a blog is nice. Here is something new with the system, toggles and toggle groups. These work something like input boxes, immediately setting keys once they are toggled on or off.

The code:
input("text", $lastName, "Last Name")
input("text", $firstName, "First Name")
toggle($gender, "Gender - <i>select one</i>", "Male", enum.male, "Female", enum.female, "Non-Binary", enum.nonBinary)
toggle($family, "Family - <i>select one</i>", "Single", enum.single, "Married", enum.married, "Separated", enum.separated, "Divorced", enum.divorced, "Widowed", enum.widowed)
input("integer", $childrenCount, "Children Count")
toggle($race, "Race - <i>select one</i>", "American Indian/Alaskan Native", enum.native, "Asian/Pacific Islander", enum.asian, "Black", enum.black, "Hispanic/Latino", enum.latino, "White", enum.white)
The Result:

So last year I did two things. I started new projects and worked on them up until I found something wrong with my game system. At that point I would tear down the system to change how it worked, then find myself starting a new project again. I think this was a good thing in the long term because the system works better because of it. Problem is I didn't finish any actual games.

This year things are better. I believe the system is stable enough to use without needing to make big destructive changes. And now I'm left with a bunch of projects at various levels of playability. I've considered asking around various forums for opinions on which of them sounds the best, but really any of them would be good. The thing is, I've been super interested in RPGs recently. I want to make a game where you create a character and do RPG kind of stuff.

The past few weeks I've been adding features to the system to support text based RPGs. At the same time I've been designing a new project currently called Crooked. 

2015-01-12

Nerdy joy using Humanizer to mutate variables in print()

I've added a super cool resource to the project, Humanizer. So far I've integrated a good slice of it's functionality directly into the print() function. Here are some code samples along with the output created.
:: Humanizer Tests
WORD TRANSFORMATION

set($txtKey = "text sample of some words")
$txtKey = 'print($txtKey)'
$txtKey -> uppercase = 'print($txtKey, "uppercase")'
$txtKey -> lowercase = 'print($txtKey, "lowercase")'
$txtKey -> titlecase = 'print($txtKey, "titlecase")'
$txtKey -> sentencecase = 'print($txtKey, "sentencecase")'
$txtKey -> underscore -> pascal = 'print($txtKey, "underscore", "pascal")'
$txtKey -> underscore -> camelcase = 'print($txtKey, "underscore", "camelcase")'
$txtKey -> underscore = 'print($txtKey, "underscore")'
$txtKey -> underscore -> hyphenate = 'print($txtKey, "underscore", "hyphenate")'

line(1)

SINGULAR/PLURAL & QUANTITIES

set($goatKey = "goat")
$goatKey = 'print($goatKey)'
$goatKey -> plural = 'print($goatKey, "plural")'
$goatKey -> toquantitynone, 0 = 'print($goatKey, "toquantitynone", 0)'
$goatKey -> toquantitynone, 1 = 'print($goatKey, "toquantitynone", 1)'
$goatKey -> toquantitynone, 11 = 'print($goatKey, "toquantitynone", 11)'
$goatKey -> toquantitynumeric, 0 = 'print($goatKey, "toquantitynumeric", 0)'
$goatKey -> toquantitynumeric, 1 = 'print($goatKey, "toquantitynumeric", 1)'
$goatKey -> toquantitynumeric, 11 = 'print($goatKey, "toquantitynumeric", 11)'
$goatKey -> toquantitywords, 0 = 'print($goatKey, "toquantitywords", 0)'
$goatKey -> toquantitywords, 1 = 'print($goatKey, "toquantitywords", 1)'
$goatKey -> toquantitywords, 11 = 'print($goatKey, "toquantitywords", 11)'

set($womenKey = "women")
$womenKey = 'print($womenKey)'
$womenKey -> singular = 'print($womenKey, "singular")'
$womenKey -> toquantitynone, 0 = 'print($womenKey, "toquantitynone", 0)'
$womenKey -> toquantitynone, 1 = 'print($womenKey, "toquantitynone", 1)'
$womenKey -> toquantitynone, 11 = 'print($womenKey, "toquantitynone", 11)'
$womenKey -> toquantitynumeric, 0 = 'print($womenKey, "toquantitynumeric", 0)'
$womenKey -> toquantitynumeric, 1 = 'print($womenKey, "toquantitynumeric", 1)'
$womenKey -> toquantitynumeric, 11 = 'print($womenKey, "toquantitynumeric", 11)'
$womenKey -> toquantitywords, 0 = 'print($womenKey, "toquantitywords", 0)'
$womenKey -> toquantitywords, 1 = 'print($womenKey, "toquantitywords", 1)'
$womenKey -> toquantitywords, 11 = 'print($womenKey, "toquantitywords", 11)'

set($disappearanceKey = "the disappearance of 'Razor'")
$disappearanceKey = 'print($disappearanceKey)'
$disappearanceKey -> truncate, 7 = 'print($disappearanceKey, "truncate", 7)'
$disappearanceKey -> truncatecharacter, 7 = 'print($disappearanceKey, "truncatecharacter", 7)'
$disappearanceKey -> truncateword, 2 = 'print($disappearanceKey, "truncateword", 2)'
$disappearanceKey -> truncateleft, 7 = 'print($disappearanceKey, "truncateleft", 7)'
$disappearanceKey -> truncatecharacterleft, 7 = 'print($disappearanceKey, "truncatecharacterleft", 7)'
$disappearanceKey -> truncatewordleft, 2 = 'print($disappearanceKey, "truncatewordleft", 2)'

line(1)

NUMBERS

set($numberKey = 0)
$numberKey = 'print($numberKey)'
$numberKey -> numbertowords = 'print($numberKey, "numbertowords")'
$numberKey -> numbertowordsordinal = 'print($numberKey, "numbertowordsordinal")'
$numberKey -> numbertoroman = 'print($numberKey, "numbertoroman")'

set($number1Key = 1)
$number1Key = 'print($number1Key)'
$number1Key -> numbertowords = 'print($number1Key, "numbertowords")'
$number1Key -> numbertowordsordinal = 'print($number1Key, "numbertowordsordinal")'
$number1Key -> numbertoroman = 'print($number1Key, "numbertoroman")'

set($number55Key = 55)
$number55Key = 'print($number55Key)'
$number55Key -> numbertowords = 'print($number55Key, "numbertowords")'
$number55Key -> numbertowordsordinal = 'print($number55Key, "numbertowordsordinal")'
$number55Key -> numbertoroman = 'print($number55Key, "numbertoroman")'

set($number1111Key = 1111)
$number1111Key = 'print($number1111Key)'
$number1111Key -> numbertowords = 'print($number1111Key, "numbertowords")'
$number1111Key -> numbertowordsordinal = 'print($number1111Key, "numbertowordsordinal")'
$number1111Key -> numbertoroman = 'print($number1111Key, "numbertoroman")'


The really nice thing is that these commands can be chained until the input variable is printed in the correct format. For example in order to make the $txtKey variable into camelcase, I had to underscore it first. There were a few issues with some of the localization stuff, but I think this is only a problem on my particular system. Even so I might wrap all the calls to Humanizer into a try catch block and print out the default variable values if things fail. Still, I can see all kinds of potential uses for these functions. I'm not entirely happy with the verbose arguments in the print call, but that is easy enough to change later. I will probably expose all of this stuff in a transformation function so that modifications are saved into the variables permanently if desired.

2015-01-11

Input

Got simple input done today. This code ...
input("text", $text, "text")
input("integer", $integer, "integer")
input("decimal", $decimal, "decimal")
input("alphanumeric", $alphaNumeric, "alphaNumeric")
input("email", $email, "Email")
... turns into this ...


Each input field gets pushed into a key for whatever is needed. I still need to add a way to put character limits on the amount of text that can be typed. I'd also like to put an optional range for acceptable number input. That isn't too critical since those limitations can be done by messing with the value stored in the key that the input makes. There is still more to do with input, like toggles, toggle groups, drop down menus. I'm more interested in adding one more large sub system... Missions!

2015-01-10

Screenshot Sat

I've been busy this week. I thought it was about time I did some optimization. The system was taking around 10 seconds to import NDGA source code. I was able to crunch things down so that it only takes a few ms now. With that done, there was one nagging issue on my mind...
Your sex appeal has increased by 10
The source is filled with those kinds of lines. It's good to tell the player how the stat is doing, but writing that out is tedious & potentially error prone. The solution is to use watch(). Basically you can call this:
control("watch", $donaldSexAppeal, 0)
and the system will put a watch for any changes to the variable above the sent in number. This is super useful and I plan on using it a lot.

Another thing that I put in every passage was the main Sex Appeal stat line. It looks like this now
Sex appeal: print($donaldSexAppeal)
line(1)
I can think of two solutions to this. First is sticky passages. Basically any passage could be stickied, forcing it to appear at the top all the time. This is a good enough solution, but the other idea is to add an entire menu for stats. I decided to take the tough route and build the stat menu.



You can see how watch() works, pushing sex appeal changes to a toast message. Saves work the same way, presenting a little toast. And stats are toggle-able from the stat item at the top right. Eventually I will use the players name in that area in place of stats. I have to work on the sizing and stuff, but for what it does it's pretty nice. Stats aren't baked into the system either, you basically call what you want in the menu like this
stat("heading", 1, "Donald")
stat("number", 2, "Sex Appeal", $donaldSexAppeal)
The stat system isn't 100% implemented yet (text variables, percentage bars, etc), but I'm super happy about it so far.

2015-01-04

Fancy text

Added text align functions. Now text like this...

:: Begin Yard Work
Sex appeal: print($donaldSexAppeal)
line(1)
When you step outside, you close your eyes and take a deep breath of warm summer air. You stand still for a moment and experience a rush of memories of your family that cause the familiar sting of nostalgia and wistfulness.
text("fancyCenter")
<i>You hear kids playing hide and seek in the yard while you are cooking steaks on the grill. Your wife's beautiful sun dress flaps in the wind while she drinks a sweet tea and chats with the next-door neighbors. Your son yells out 'Gotcha!' as he finds the neighbor's daughter hidden behind one of the shrubs.</i>
text("left")
Returning from the past, you open your eyes to view the beautiful sky, and as you look down, you see the work ahead of you.
...will render like this:

The next thing I want to do is add in a text messaging kind of style with txts written like this
text("in")
wazzup bro
text("out")
nm
text("in")
what did u call me?
text("out")
...
The big thing I'm waiting for is Unity to update their text rendering with the UI system. I don't really want to put the effort into making a workaround for embedded links. I has many features on my todo list. Not to mention games...


Screenshot Saturday?

I added the ability to print lines!





Not super impressive, but it brings me one step closer to matching what I was doing with Twine. Also the code changes I made will make it easier to change text alignment and add other stuff within a passage body like images, toggles, input fields etc.

2015-01-01

Screw 2014

Well, I missed that deadline I set for getting Ever Forward playable by new year. I underestimated the levels to which I would be chillaxin over the holidays. Ahh well.

Anywho I did work on getting some basic docs setup for Fate. Up until now I've just tried to remember everything about how to use it, and looked up anything I forgot in the code. There aren't a whole lot of things to remember, but having a reference helps. If you're curious I posted a copy of the reference HERE.

For now I decided to dig up NDGA and convert it to Fate. For the most part the game works. The things that don't work are important (images, special formatting, embedded links), so I've put them on my todo list. Still, I'm pretty happy to just have the thing work. I can pretty much just write without frustration. Less frustration means more time to just write. Sure there are a few issues here and there but bug fixin is the name of the game.

Speaking of that I guess I could post a build of it here to get feedback, but I'd rather wait until I test it out more on my own. The game is the same as the last version I released way back when, except with a few loose ends that I left hanging. If you'd like to try it out and offer feedback on the system send me an email at moc.ellivknuB@p4p (reversed). Yup, domain name get... sorry whoever owned it before! (not really sorry) (also there is no website ... yet)