Okay, I need to just stop with this mini project I've been working on lately. It's the principle of the matter, really. I just don't want to have copies of party members all over the game, and since they lead their own lives and aren't glued to the ass of the PC, they need to be transitioned to other areas every once in a while. I'm not going to go into everything I did to get it to work, because it's boring scripting work, but let me just say, I forgot how much scripting it takes to make games like this. I've got so many libraries of functions, it's ridiculous. Thank god this is what I do for a living...
On the music front, I have to say, as time has been going on, I've been appreciating Final Fantasy 13's music more and more as I hear it. A lot of the tracks in particular have a certain... charm to them... It's hard to explain, but when I hear them, it brings me back to RPG's of old, like Dragon Warrior & Secret of Mana. I may even sneak some pieces of it into this game, who knows.
Well, that's it for tonight. We're signing the lease to our first apartment tomorrow, so I need to get some rest so I can be up bright and early for it, especially since I have to come right back home to work from home... sigh...
6/28/10 -Monday: OH RIGHT, I GUESS I SHOULD MENTION...
....That I'm leaving for the Bahamas July 6th, to get married. Yeah, I guess that's just a little important :) Seriously though, it's a long time coming. When I say a long time, I mean I've been with my fiance since 1998 (was 18 then). What can I say, our pre-marriage relationship is like a fine wine, because.... Okay, I'll stop with the bullshit, lol. Anyway, yes, Mr. Challseus is getting married, finally. It takes a very special woman to have put up with me for these 12 years, so she's definitely The One.
Obviously, development will come to a halt for the 2 weeks that I'll be gone. I'll have my laptop with me, but since it's just for website development, it won't help me with game development (not that I should be developing on my honeymoon!). So, the race is on to get as much stuff done as possible before I leave.
Speaking of website development, I really need to get my ass in gear with regards to videos. I put so much time and effort into making like 7 videos from my first 2 games, and for whatever reason, they never worked on this site. I'm sure you've clicked on one of the videos from the cast page, only to get no response. While said videos are obviously not representative of what I'm doing now, it still shows off ome key components of this series, namely, the style of it. And, I go on and on about the Keeper of the Rose, but it would make more sense if you could see the opening cutscenes from those 2 games, which shows you what she is all about. Hell, I even added some voice over narration! This might be something I can spend 30 minutes on a day,while I'm gone for 2 weeks. Like I said, I know the issue is something small, as usual.
Speaking of issues, I pretty much spent the night debugging the issue with abilities being removed from the quickslot, as well as custom tactics disappearing, for removed party members. With issues like this, coming up with a test case is the most important thing. If you can't reproduce the bug with certainty every single time, you're never sure if you fixed it or not. Luckily, I was able to find one, that could be tested in 2 minutes. Once I got the test case, I began debugging the hell out of things, to see what was going on. You can read about it in this threadI created. Since I have a sort of hackish work around, I'm not going to spend too much more time on this. Sometimes, you just have to move on.
And move on I will, tomorrow. Once I finish up whatever needs to be done with the aforementioned issue, whether it be implementing the hack, or finding a ral solution, I'll be back to finishing the design of a level I only half created a while back. Ah level design, the former bane of my existance. Now, it's just something else to add to the bucket. Not hard, not easy, just more stuff. There's always more stuff to do :)
6/27/10 -Sunday: VERY PRODUCTIVE WEEKEND...
While I didn't add any new content this weekend, I polished the hell out of the existing stuff. It was all about fixing bugs and making improvement to existing content. I was lucky, actually, as I was just sort of in the zone over the weekend. Sometimes, when I get designers block, I just get stuck in this rut. When it comes to fixing a bunch of items on a list, I can do that all day.
There are still some lingering bugs, but for the most part, they're all fixed. The most annoying one is where I remove a party member, and when they're added back to the party at another point, their custom default tactics are gone, and the abilities they had on the quickbar are gone as well. Problem is, I can't narrow it down when it happens. I thought it was a bug related to the custom death system, since I did mess with my custom add/remove party member scripts. However, after running a test where I added a party member, removed them, then added them again, I could not reproduce the issue. Tomorrow, that will be the only bug I will fix, because if I had to put them into a priority list, it would be the only P1, whereas the others are like P3's, things I can deal with for the moment.
Overall, these past few days were very good for a couple of reasons: Well for one, fixing bugs is obviously a good thing! The other reason is that it gave me something else to work on, because as I've said many times, if I get stuck doing one thing for too long, I start to shut down, mentally. Can't have that :)
Next on my list if things to do is finish the level design for an existing level. I originally only did enough of what was needed to advance the plot, but now I need to go back and finish things up. It's just a few rooms, really, so if I was really diligent, I could knock it out in one night, sans full props. After that, I will start on the next parts of the plot. This includes the conclusion to the sequence took 2 months longer than I anticipated (like I didn't se that coming!), as well as the introduction of a few more key characters in the game. The latter will most likely involve a nice little intro cutscene, though to be honest, I'm not sure how it will go. Usually, I've had these things planned out mentally for years. For this particular person I need to introduce, they were never really part of the story when I first created it back in 1999. They were sort of added in the past couple of years or so, and even still, they have undergone a lot of changes leading up to what I currently have envisioned. As such, I never put too much thought into how to introduce them, so I'll have to think about it (I'm sure I will come up with something on the fly, as I usually do). I have had their theme music picked up for a while though, so that's one less thing to think about.
Oh, and just to make things interesting, tomorrow is the biggest day of tennis at Wimbledon, with each round of 16 match for both the women and men being played in one day. This is where things get good, and I will definitely want to watch of course Federer, followed by Nadal, Djokovic, Serena, Venus, Wozniacki, Henin, Clistjers.... well everyone! Since fixing that last bug shouldn't take too much brainpower (just a lot of spot testing), that's what I'll do while watching the matches. That's the plan, anyway :)
6/26/10 -Saturday: WAIT, WHAT? LESS EXPERIENCE FOR HARDER ENEMIES???
Today was more of the same. I just hunkered down, and systematically knocked out issue after issue. A lot of these issues have been lingering for a while, so it was nice to finally see them die an honorable death :)
Of the things I took care of today, the most mind boggling one had to do with how the existing system awards experience points. As I discovered yesterday, enemies that were set to level 1 were giving out 84 XP, while harder, level 2 enemies were giving out 42 XP. At first glance, it just didn't make sense to me, so today, I decided to delve deeper to find out what was going on under the hood.
So, unless I'm missing something, there are 3 variables to the equation:
The number, 0.2875
So, for the creature rank and creature level, a lookup is done in the corresponding 2DA's, creatureranks and exptable. Now, the particular column that is looked up is one called fPointVal. The row is determined by the appropriate rank and level. So, in the creatureranks table, there is a row called Normal, which matches the rank I'm giving the enemies in question. Likewise, in the exptable table, there is a row for each level, and the one that is getting used in my situation is 1, obviously because the enemies are level 1. Right, so here is what is returned from each table, along with the calculated XP:
creatureranks -> Normal -> fPointVal = 1
exptable -> 1 -> fPointVal = 285.9
calculated XP = 285.9 * 1 * 0.2875 = 82XP
Okay, so what about a level 2, normal creature rank enemy? Here it is:
creatureranks -> Normal -> fPointsVal = 1
exptable -> 2 -> fPointVal = 166.7
calculated XP = 166.7 * 1 * 0.2875 = 48XP
By looking at the exptable 2DA, the trend continues. The higher the level, the lower the number. Now, perhaps I'm a little tired or something, but this just doesn't make sense to me. And to be honest, I played the core game so long ago, I forgot how the XP was given out. But, in my mind, the weaker the enemy, the less XP you get. The stronger the enemy, the more you get. Nothing exactly revolutionary about that idea, lol. Perhaps this has to do with the way enemies are scaled in the game (remember, I'm not using the existing scaling system)?
I'm hoping I'm missing something really small, so I may have to load up some saves from the OC (I'm compulsive, I have like over 100!), and see how much I'm getting at various points in the game. If it turns out that this is the way it should be working, then I'll be overriding it for sure. I'm already going to be overriding the final XP amount you get by some % (i.e. 50%), so I can just add this to the bucket as well. Though, that looks like it will be mostly 2DA related. In the end though, this is stuff that interests me a lot. I love having complete control over the various systems in the game, which allows me to make things more and more unique every day.
I ended the night by doing a backup of all files, just for my own peace of mind. I am not lying when I say I would be on suicide watch if I lost a chunk of work I've done :)
MASS EFFECT 2
So, while attemtping to download the Medal of Honor beta from xbox live last night, I came across the Mass Effect 2 demo. It was a complete shock to me, to be honest, because I didn't think Bioware did demos. Anyway, I immediately downloaded it, and hell, while I only played for about 30 minutes, it was one hell of a way to start a game! I almost felt like the first 30 minutes were better than all of ME1 put together :) This game has now been bumped up on my list of things to play when done with Final Fantasy XIII. I already know of all the accolades and all, but it was refreshing nonetheless.
ROSE OF ETERNITY - THE COMING - THE LOST TRAILER!
In the weeks leading up to the release of my first game back in July of 2005, I put together a little trailer. At the time, I was extremely proud of it. I never did get around to integrating it correctly in this site (well, at the time, my older site was up), and then, I just forgot about it. Then, some nice fellow decided to upload it to You tube last year, and I just remembered that I wanted to put it up here, so people can see how far I've come, lol.
Disclaimer - I had not enlisted the help of Jason Melancon, my editor, when I made this. Therefore, you will see typos, and other such things.
So, I spent the night going over all my notes I took down from the other night's end to end test, and begin fixing the bugs and implementing the features. While many of the bugs were definitely game breakers, none of them were too difficult to fix. Some of the bugs that weren't game breakers were more annoying to me.
For instance, at the moment, I am using sound effects to handle custom music. Although, Bryan Derksen has recently uploaded the FMOD project they used in the OC, so I may be able to take a look at their core music files, and see what I was doing wrong with mine. Anyway, one issue I was running into with the music was with cutscenes. See, you can actually add a sound effect to a cutscene itself, and have that music play when the cutscene runs. However, I hadn't found a way of making that cutscene music stop, most likely since I'm using sound effects for music, so I actually start the sound effect playing with before I call the cutscene. Well, for a few cutscenes, I forgot to do that, so the cutscene music continued playing well after the cutscene itself, and even played at the same time as some other music (again, via sound effects).
Speaking of music, I really need to get it sorted out, because of the aforementioned issue, also because of one key feature of it (which I absolutely love!): The music continues playing when you do an area transition. That's really big for me, especially when I have certain long sequences over multiple areas. Anyway, I know how to get my custom music in the game, I just need to checkout the formats in that FMOD project, to see why my files were causing the toolset to crash.
The issue with certain enemies giving more XP than they should continues. It's even weirder now. In one area, they give the amount of XP I expect the to, in another, they don't. Now remember, I don't use auto-scaling and such for my levels, I have each enemy set to a static level through the use of the MIN_LEVEL variable. I may have to check each enemy that I have in that level, to make sure I'm not overriding this variable on the particular instances of them.
Finally, I'm going to do what I should have done a long time ago. Do a full backup of everything, including all designer and art resources. You never know when another hard drive crash could occur!
EDIT - Yep, I was overriding the MIN_LEVEL variable on those particular enemies. Nice to have this bug fixed.
6/24/10 -Thursday: END TO END TESTING...
So, sticking with my goals from yesterday, I started the day off by prepping everything for my full run throughs. For the last month or so, I've been hacking up scripts to spot test, and the worst thing that could possibly happen is to start from the beginning, only to find out things were going to be messed up because I forgot to comment out some spot testing code. Well, even after giving the scripts a once over, I missed a whole host of things :(
For one, there is a particular party member that actually starts the game off in one particular area, that is not a part of the area list of the set of areas I'v been working with lately. So, I just had to drop in a test version, and eveything worked fine. Well, I forgot to get rid of the test one, so I ended up with 2 party members (essentially clones) added to the team... doh! Another thing that pretty much brought my testing to an end for the night was a particular cutscene that should have run, except for my spot testing, I was skipping the cutscene, and calling the plot scripts that are supposed to run after the cutscene is over. So yeah, I have some more work to do to do my full run through. However, I was still able to cocmpile a list of notes in textpad on my laptop, split prett evenly between bugs and features. Plus, it was nice to play the game from the beginning, because it had been a while.
Now, one thing I am going to have to implement over the weekend is properly adding the PC and party members to cutscenes. Originally, since the PC is a pre-gen, I was just dropping that character template into the cutscenes, as a quick and dirty solution. I know there is a way to have a placeholder creature reference the PC in game, so I just have to implement that. The same thing goes for party members as well. I've just been dropping in their normal template. I'm pretty sure there is a "Henchman 1", "Henchman 2", etc. option when making the cutscene. At least, I believe there is. So, I'll have to mess around with that as well.
Now that I think about it, that's a little annoying. What if I have 5 party members total? It seems like the game only supports 4, with regards to cutscenes. How do I dynamically represent that 5th party member in the cutscene. If their outfits never changed, it would be a big deal, but this is not the case. Well, I'm sure a solution will come to me at some point.
Now, I'm off to listen to some music and brainstorm some ideas on a particular part of this sequence I need to implement. Speaking of music, I now have about 44 tentative tracks so far. For reference, I've used 10 custom tracks in the game thus far. That doesn't mean I'm 25% done with the game though!
Today, I really just focused on one thing. Running through the entire sequence I've been working on for the past few weeks (months?!). I was looking for a few key things:
Is the overall sequence too long?
Is there too much combat?
Was the combat too tough?
How much XP was going to be achieved?
Well, I'm please to say that I 3/4 of those bullets are fine. The one issue is the XP. First and foremost, too much XP is definitely being given out, even with the bonus XP system I added in. Another issue was that a level 1 creature was giving 84 XP, while a level 2 creature was giving out 48 XP. I must be missing something somewhere, so I'll have to look into it.
But, the overall issue with the XP has to change. I admit, I haven't looked too deeply into how XP is determined, though I'm sure I will be modifying some 2DA's at some point. Or hell, even just cutting the XP received by 50% would work. As I've stated before, I believe in slow progression. The original Baldur's Gate really made me a fan of that, and so that's my design decision I'm sticking with.
Next, I will actually start from the beginning of the game, and run all the way to what I have. Instead of my notebook, I'll have my laptop next to me, jotting down bugs. I may even try to get organized, and start using some real bug tracking software, like Jira, mantis, TTP, etc. :)
FINAL FANTASY XIII
Just wanted to mention another thing that I am liking about this game... As is my style, there doesn't really seem to be a true "hero", though I guess Lighting would come the closest. Also, the party splits up frequently, and you get to see things from everyone else's perspective. During these sequences, a lot of character development is done, through beautiful cutscenes. There's definitely a strong story to back things up, but at the moment, the characters themselves are stealing the spotlight at the moment.
They also keep having flashbacks to certain important events with regards to the story, and show it from each character's perspective, as the game goes on. So for instance, there are certain flashback "days", like Day 13. These are all days leading up to the actual start of the game. Anyway, I've seen this Day 13, from about 4 different perspectives now, and it is really well done. I like this design decision a lot.
Oh, and yes, the game is still linear...
6/22/10 -Tuesday: BUNCH OF LITTLE THINGS...
Unfortunately, real world work is carrying over into the after hours, which takes away from game development. I was able to sneak in some stuff though, nonetheless.
First off, I fixed the bug I was having with CreateObject, where the object would be created in another area, if the function was called in an area that is part of an area list. You see, you need to specify a location as a parameter for the function to work, and I was passing in the location of the object I needed the created object to spawn by. The workaround to the apparent bug is to simply jump the created object to the base object immediately aftering spawning. It's not ideal, but it works, and at this point, I just need to knock stuff out. So, I could cross that one off my list.
Next up was the Last Resort of a particular enemy. While I had toned it down a few days ago, I realized there was something else I could do. Since I'm using the existing AI Package system, one of the values you can specify is the % chance that the enemy will use the ability. So, I bumped it down from 100% to 75%, just to make things a little more random. I don't want every fight with these enemies to play out the same. One flaw I can realize in my system from my NWN games is that the instant the enemy's health dropped below 25%, they would use their ability. No ifs ands or buts about it. While the player could use strategy to work around this, adding in the % makes things a little more unsure and... devious :)
Staying on the topic of Last Resorts, the main boss in the fight was to have their own as well. However, even though I was giving them the ability, they just wouldn't use it. Turns out, I had just picked a general package for them, not the specific AI package that had the ability in it. Once I fixed that, the fight got hella hard again, as they started using other talents they weren't using before.
Even still, I was able to play through the fight multiple times, on every difficult setting. As I expect the PC to be level 2 at this point, I even tested adding different talents at level up, just to make sure that any path the player chooses to take down the talent tree will still allow them to win the fight.
Finally, I just cleaned up some things in the area, like making sure the player can't flee the area during the fight (coward!), as well as removing/adding particular plot objects, depending on the situation.
Tomorrow, I hope, hope, hope that real work doesn't get me bogged down. I would love to be able to come home, and simply watch the Federer match (hoefully a quick one!), and do some game development without distractions. Add in the fact that I'm working from home the next night, so I don't have to be in bed as early. Please, can something go right this week?!
6/21/10 -Monday: COMBAT BALANCE...
Before I get into the update, I just want to say, the night began very ominously... You see, since I DVR all tennis matches, I have to avoid pretty much every site I would go to during the day, so I don't inadvertenly see the outcome of a match I want to watch later that night. Well, I had to open a new browser at work, and I kept my eyes at the top of the page (my home page is MSN, prolly should switch it to Google), and still, I saw a picture of Roger Federer at the bottom of the sports section. My heart stopped. He played his first round match today, not worthy of front page material. So, there could have only been 2 reasons: He lost (sigh), or he came through a tough, tough match. The picture did show him doing a fist pump, so I took heart and hoped for the best. I figured if he lost, they would get a picture of him with his head in his hands, or his shoulders slumped, or something like that.
Long story short, he played one hell of a match, and probably should have lost. It was a very tense 3 hours for me when I got home, and development definitely suffered. Thankfully, his next 2 matches come on days where I don't have to work the following day, so it shouldn't have such a negative impact.
So, I ran some more tests for the boss fight. I know I said I will worry about combat balance later on, but damn, I couldn't even beat the boss fight as is. Even when I gave my party members enough XP to level up to the level they should be at the fight, it was hella hard. I decided to re-evaluate the overall difficulty in this sequence, by lowering the levels of most enemies by 1. You see, I think I mentioned it before, but I've been testing the game on normal, and finding it dificult. In reality, it shouldn't be so hard at that level. On nightmare, yes, on normal, no.
The core problem is that the PC is just too damn weak at the moment. Now, that is definitely a design decision for them to be weak, but not that weak! Now, one of the party members is purposely 1 level higher than the PC, per their overall experience compared to he PC. And, I had been balancing enemies around this party member's level, not the PC. I actually like what I've done this time, with things being balanced around the PC. It sort of shows the player how strong their party member really is, while still maintaining relatively tough encounters. And, per my overall thoughts on combat design, I think the player will get some level of satisfction as they level up, knowing they can take out these previously tough enemies with ease. Remember, none of that auto-scaling stuff. I have enough ideas to keep every combat sitation fresh, I won't be needed to just keep throwing the same enemies at you, albeit at higher levels with stronger talents/spells. The player has to have that level of acccomplishment, in my eyes.
Now, I did some run into some annoying issues as well (what would the night be with those!). Normall, I preset all creatures for encounters, and set them inactive. Then, when the encounter starts, I just activate them, and make them hostile. Been working well so far. Well, in one particular instance, I need to actually dynamically spawn some enemies, via the CreateObject function. Now, this works in other areas just fine, but in this one particular area, it's all FUBAR'd. So, I have these 2 interior areas, that are in the same area list. When I create them in the lower level, they actually spawn in the upper one. And, I just can't figure out why. The location I am creating them at is clearly in the one level, yet they spawn somewhere else. I'm sure I'm mising something small, so I didn't worry about it too much. Plus, I was getting tired.
Tomorrow., the othe half of the tennis draw plays tomorrow, so I should be able to focus a little better. I need to finish up this boss fight, then start gluing everything together. Also, I need to make a decision on the music. What I've been doing is playing the music through iTunes, then starting the game up, to see how it works . So far, so good. The enxt step is to add it to my FMOD project, and fully integrate it into the game. But yeah, I would really like to be done with this tomorrow. We'll see...
6/20/10 -Sunday: WINTER IS COMING!
I read my first fantasy novel when I was 15 (1995), if I remember correctly. It was a book my Mom's friend gave me, called Dragon's Gold, by Piers Anthony. Up until that point, I didn't read much. I think all I had read was Jurassic Parkand The Fugitive. So, I really knew nothing of the fantasy genre, and ended up really liking it. I quickly moved on to Serpents Silver, & Chimera's Copper (they were actually all part of one book). From there, I read the rest of the books in the series, but the names escape me. I was hooked to fantasy novels (no surprise, given my love of RPG's).
I'll never forget the next series I started... I was in Chicago during my annual visit of my Grandmother and Aunt/Uncle. I was in a book store looking for the next thing I wanted to read, and saw this book called Eye of the Worldon the spotlight (or whatever they're called) rack. I believe it was 1996. I saw, what the hell. This book is like, 900 pages, so it should last me a while. Thus started my love of the Wheel of Timeseries. I have so many great memories of these books, especially the first 3. I eventually got caught up in the series, and learned how painful it was to sit and wait for heach new book (it would be the last time). I believe I read the first 7 books, and waited on the 8th, Path of Daggers, then Winters Heart, then... Crossroads of Twilight? Honestly, I sort of fell out of love, so to speak. When Robert Jordanpassed away, I mourned for him, and yet, I haven't picked up the latest book yet. Perhaps that will be the perfect thing for train rides home.
In betweem that time, I tried other novels, like The Sword of Truth, and something else I think was called, The Magic of Recluse. While decent enough books, they obviously weren't decent enough to keep me engaged through every book in the series, as I stopped after only reading a few books.
Then, came 2008. The prior year, leader designer of Ossian Studios, Luke "Alaznder" Scullwas going on and on about this series he was reading, in our private dev forums. It was called, A Song of Ice & Fire. I was going throgh some personal issues throughout 2008, so I thought, what the hell, let me try it out. Well, out of every series I have ever read, nothing has ever captured me the way this one has. I flew through the first 4 books in no time at all, and was foaming at the mouth for more. I eventually found the personal site of the author, George R R Martin, and his blog, interestingly enough named, "Not A Blog". Through it, I learned that HBO was attemtping to secure the rights to develop a series based on the novels.
Now, anyone who read The Sword of Truth, and then watched the TV adaptation, Legened of the Seeker, may be shaking in their boots! Let's just say that the TV show was loosely based on the books. Once I just went in with the idea that I'm just watching a fantasy show, having nothing to do with the books, all was fine. There was no point in nitpickcing each idea of Terry Goodkindthat they raped. As always, I enjoyed it for what it was, and not for what it wasn't.
But, surely, this must be different. HBO is known for their gritty original series, like Oz, The Sopranos, The Wire, and god... one of the best shows ever... Rome... I haven't followed the production too closely, but apparently, things are going ahead quite smoothly, and George R R Martinhas been an integral part of the production, which is a good thing. It's safe to say that this is my most anticipated show of 2011. And now, we have a teaser trail (and boy, do I mean, it's a damn tease!):
In other TV news, another beloved show of mine, The Tudors, aired its series finale tonight. I just happened to discover it one day, and loved season 2 so much that I actually went out and bought season 1 on DVD. This is big, because I never buy DVD's. The last one I received was a bunch of the seasons of The Simpsons, and that was a Christmas gift! So yeah, it's that good. The same team is currently putting together a new show that focuses on the Popes, and a particular Papal family, which will also debut in 2011. What the hell is it with 2011? The Legend of Zelda: Skyward Sword, A Game of Thrones, & now, this new show?! Enough to drive someone mad!
Ahem, guess I should talk about some game development....developments :) Sticking with the implementation of the 2 custom enemies I created yesterday, I moved back to the first one, to flesh out their gear, and more importantly, how they interact with the second one. The idea is that these 2 enemy types work in tandem, supporting each other, as well as some other things I cannot discuss at the moment. Now, I could do the more elegant implementation, by making use of some new custom AI conditions, but for the moment, it was easier to override certain events in custom core scripts for each of them, then add the functinality there. If I got the former route, it's portable enough to be moved easily enough.
There is one more bit of interaction I need to create between them, but I didn't have the time, so I just ran some combat tests, to see how things were looking. As always, it's only really spot testing, nothing too serious. Even still, I found some major balance issues with one of the new Last Resorts, so I had to nerf it. It should alo be known that I've only been testing on normal difficulty. I can only imagine what hard/nightmare is going to be like!
So, my combat design philosophy is holding up, so far. Remember, I want to keep combat interesting by:
Quality over quantity
Different combat sitations
Different ways to defeat different enemies, not just hacking and slashing
Enemy variation. More specifically, adding new enemy types at the right time, so the player feels like they're always experiencing something new
So, in this particular sequence, all of the above occurs. Add in the custom systems, like Unison Abilities between party members , Bonus XP, & Death, and the goal of giving the player a unique experience is coming true.
Tomorrow, I will brainstorm how I will implement this last way these 2 new custom enemies will interact, and put this current encounter to bed. Then, I will be able to start on the final encounter, which will essentially be the Boss Fight. Actually, before that, I may need to run through every combat sequence from start to finish. I need to see if a particular party member will hit level 3, to see if they will have access to a particular Last Resort. This ability will really determine how I design this boss fight. Heh, this should be fun.
Oh yeah, Wimbledon starts this week, and continues for 2 weeks. And of course, since Federer won last year, he gets the opening match on Monday, which means I'll be watching that. Damn sports!
Edit - I love the pictures I used today. They're artwork for "A Song of Ice & Fire", and honestly, that is the style of fantasy I love the most. I'm a traditionlist, what can I say!
6/19/10 -Saturday: MUCH BETTER DAY...
So, today was a much better day than yesterday, that's for sure. I started work on the next encounter that occurs during the sequence I've been creating for the past month or so. This particular one introduces yet another 2 custom creatures, so I had to create them first. The first one was pretty easy to create, as they have the same look of another custom creature. More work has to be done with them, such as adding custom abilities and whatnot, but the core of it is done. Then, I moved on to the other one, since I was eager to to see how the implementation would go.
Now, this particular one actually is a returning enemy from the first 2 games, albeit, in a different... situation, if you will. Knowing I was going to be adding it, I looked for the appropriate models months ago, so I already knew where to begin. I created my version of them, messed around with some minimum level variables, and ran a few test battles. Once I was happy with it, I moved on to porting their Last Resortover. Since I've already created a bunch of Last Resorts, I figured this would be easy. I cannot give too much away about what went wrong, and how I fixed it, because it includes some spoilers, but suffice to say, after an hour, I had successfully integrated it into the game. I didn't do too much balancing, figuring I'll handle it when I polish the entire sequence. Hopefully, this will be a nice little bit of nostalgia for my older fans.
Now that this particular enemy is done, tomorrow, I need to go back to the first one. I haven't decided on what type of Last Resort to give them, or if they will even get one at all. However, I need to implement a special ability that links these 2 enemies together. They definitely come part and parcel, and sort of act as a single unit, if that makes any sense. I'm hoping I can use some existing AI conditions for what I want, but I suspect I'll be writing my own, unfortunately...
Once this encounter is done, there is just one more, then I can call this entire sequence a wrap. Well, not really a wrap, but at least I'll have the core of it done. Then, I just need to go back, polish things up, glue things together, etc.
Finally, I think I have decided on some new boss fight music. I definitely want to keep some of the oldies and goodies from the older games, but of course there will be new stuff, and this particular track is definitely a contender. I may try it out in the boss fight I would love to create tomorrow, and see how well it fits. We'll see.
Well, I'm off to play some Final Fantasy XIII. Oh yeah, before I forget, I do have one more thing to add about it... The music just isn't the same with Nobuo Uematsu. It's serviceable, but just doesn't have that magical touch to it. Oh well, can't have everything...
6/18/10 -Friday: HOLDING TRUE TO A PROMISE...
Wow, two shitty days in a row. I don't want to dwell on it too much, as it will give me an even bigger headache, but I essentially ran into some more issues with the death system. The particular piece of it was how I was storing dead party members. I was using the talmud storage array library, and for whatever reason, I was having issues with it. Now, I could take the easy route, and blame it on the library, but there could have been a way I was using it wrong. Essentially, I put all dead party members in an array cache, so I can reference them at will, and loop through them. Well, sometimes, when I reference the array, the party members aren't in there, even though they are still dead. I just can't wrap my head around what is going on, to be honest.
After spending countless hours trying to figure it out, I just decided to hack it, by just checking a predetermined list of party members, checkcing a variable on them to see if they are dead/ghosts, then adding them to a result array. At the end, I return the array. This is just temporary, so I can move on to other things. I'll be revisiting this at some point, but I have my sanity to think about, hence the hack :)
HOLDING TRUE TO A PROMISE
So, I said it a few weeks ago, and I'm sticking by it. I am playing other games while developing, for a few reasons:
I don't want to get behind the times. When developing The Coming & Cry The Beloved, I missed out on pretty much the entire end of the Gamecube/PS2/XBOX generation, and the beginning of the current generation. Never again.
The effects of only modding after working a full day were quite negative, and I don't want to go through that again.
Umm, playing video games is fun?
With that said, I recently picked up Final Fantasy XIII for my new PS3, and have logged about 5 hours or so over the past few days. Now, I already had a strong opinion about the game (before even playing it!) back in March. In fact, you can read my March 17ththoughts on it. To summarize, I just jotted down my thoughts about people's reactions to the game. There were complainrts of linearity, and for the love of god, the lack of towns. Oh no, lack of towns! What about the children? Won't somebody think about the children?!
Well, like I've said, I have put 5 hours into it. Not surprisingly, the game is playing out exact as I expected, per the reviews. Is it linear? Yes. And I mean, it's hella linear. Even the dungeons have narrow, linear paths, with a divergence here and there to open up to some floating orb thing to collect 50 gil. And no, I haven't seen one town yet :) Do I care about any of the aforementioned things? Not yet...
How the game has captured me though is with the presentation. First and foremost, the graphics are beautiful. Simply stunning. Sure, graphics aren't everything, but if they're there, might as well enjoy them. Sometimes I just rotate the camera around to look at the locale, to take in all the stunning detail. I just keep thinking, "I can't wait until all games look like this".
It's no wonder it took so damn long for this game to come out. Their production values are through the roof. Every single scene/sequence seems like it took 20 people 3 months to create it! The cutscenes are directed perfectly, and the voice acting is superb. Speaking of the cutscenes, sometimes they are done with in game graphics, sometimes they are CG. I honestly can't tell the difference sometimes! That's how good the in game graphics are. In fact, they could have done what they did with Metal Gear Solid 4, and just had all cutscenes be done with the in game graphics.
The combat system has been equally intriguing thus far. It's extrmely complex, and I won't go into the details, as there are reviews of it all over the place (Gamespot, IGN), but suffice to say, it's a lot better than I thought it was going to be. I guess if I was going to describe it, I would just throw out the usual cliches of "It's very dynamic and visceral!" :)
Overral, I am enjoying my experience. I'm a fan of all types of games, so it doesn't matter if the game is linear or not. I can get down with non-linear, open world games like Oblivion, standard issue western style games like Dragon Age, or eastern style games like this. Each has their own pros and cons, but what they focus at, they do quite well. Well, this game is focused on telling an extremely cinematic, compelling, character based story. So far, so good. I think the key for me is enjoying this game for what it is, and not getting hung up on what it is not.
6/17/10 -Thursday: FRUSTRATING NIGHT...
So, the past few days, I've been gushing over how muchc fun it was to implement two new custom systems. Well, I experienced the curse of said systems tonight: bugs. The bonus xp system is quite simple in the logical hierarchcy, however the death system has many variables I thought were taken care of. One such thing was making sure party members were revived at the beginning of a conversation.
There already an existing function, called UT_Talk, that handles things like that. Turns out, the party resurrection only works for the core system, not mine. So, I had to wrap that function with my own, and explicitly call my own ReviveDeadPartyMembers. That much worked just fine. However...
...for some reason that still escapes me, if the PC had died, and was subsequently turned into a ghost, any dialogue/stage that ocurred after the fact was messed up. Wherever I would have the PC placed, well, they just wouldn't be there. That's about as big a bug as you can get, so I had to scrap my other plans for the night, and fix this, or I wouldn't be able to sleep at night.
Now, just as a reminder, the way the system works, if a party member dies, they are removed from the active party, and set as normal followers, so you don't have access to their GUI's. So, I knew it had to be something I was doing with removing them, I just couldn't figure it out for the longest, Then, you have to factor in my test plan. I laready had a starting point right before some combat, followed by some dialogue,so I just chose to use that as my test.... over, and over, and over, and over, and... over... It was very tedious.
Now, as I had previously mentioned, I had pulled out a bunch of crap from the normal UT_FireFollower, and just used the actual functionality to remove a party member. Obviously, something in there is affecting how the PCc is referenced in a stage, because once I went back to that function, all was well. That was good enough for me to call it a night, but tomorrow, I need to pick through each of those calls in that function, to see what I actually need. So, I'll just copy all the functionality over, then strip things out one by one, to see what ends up breaking things. Then, I'll know what I need to keep, as well as get a batter understanding of how it works. But, tomorrow for that.
I had wanted to finish the night off by playing some Final Fantast XIII (more on that in a later post), but game 7 of the Lakers/Boston finals were on, and I felt compellled to wartch it. Damn sports!
6/16/10 -Wednesday: BONUS XP SYSTEM IMPLEMENTATION...
This is turning into the week of custom system design/implementation! One day, I'm just chatting about how I need to make a death system, the next day, it's more or less implemented. Two days ago, I'm just coming up with ideas on how I would implement a custom bonus XP system, 2 days later, the framework is finished :)
So, the framework I created is pretty simple in itself, but I know I will make a lot of use of it. Essentially, when you kill an enemy, at the moment, you will get a % of the earned XP as bonus XP (only the killer, not the entire party). I visually show this to the player (as seen in the above screenshot). I thought about just determining the total XP and showing it once, but I think it's nice for the player to know when they get the bonus XP. Also I won't be telling people all the ways to get it, so the only way they'll know is when they see the floaty text.
Now, there is one particular function in my new script, roe_sys_rewards_h, called GetBonuxXP(). This just takes in the earned XP, and returns a % of it, as the bonus XP. Nothing fancy. However, in this very method, I can start adding checks for various things, to determine if the overall XP. For instance, I can detect if the party member killed an enemy while having Flurry Attackactivated, and increase the % value to return more bonus XP. I could also keep track of how many enemies were killed within a small window of time (i.e. killing 3 enemies within 10 seconds), and increase the % value even more. Hell, there could be an item, or special ability, that increases the bonus XP %! Honestly, I'm only limited by my imagination. So now with the framework done, I'll move on to other things. However, new ways of giving out bonus XP will always come to me, and when they do, I'll just add them.
One thing I am aware of is balance and whatnot. I'm just going to have to see how things pan out, but believe you me, I will be watching it closely. I don't want people to game the system, and end up 10 levels higher than they should. I mean, technically, as long as I keep the bonus XP % low, all will be well. I need to keep that middle ground, where I'm not giving out too much, but not too little, where it's pointless. It's really there to encourage people to play a certain way, and also to reward people who play a certain way. That's the plan anyway, only time will tell!
6/15/10 -Tuesday: MY LOVE AFFFAIR WITH THE LEGEND OF ZELDA...
Most of the fondest memories I have as a kid revolve around playing games on the NES, or the SNES. When I was a kid, video games for me and my friends were our lives. In fact, a lot of the inspriation for my games comes from RPG's released on the SNES. I've even marketed this game as bridging east style rpg's with western style rpg's (I still need to write a blog entry on that, seems people don't think it's possible). All of this, many people already know. What I don't think people know, or even realzie, is how much The Legend of Zelda inspired this game.
I first played The Legend of Zelda in 3rd grade (1988). I borrowed it from someone at school, and had a good weekend of it to myself. Unfortunately, I had to return it, and it pains me to say that I have never actually beaten this game... Ever... Still, the seeds were planted.
I don't remember when I played The Legend of Zelda: The Adventure of Link, or even how I got it, but I played it at some point, and actually beat it. Yeah, the first Zelda game I beat was the one most people like the least :) This was also a good example of how I would learn to embrace change, something many people are not able to do. I looked at the game for what it was, and not for what it wasn't.
Now, with regards to The Legend of Zelda: A Link to the Past, there is no way I can forget that experience. My Dad comes home from work one day, calls me downstairs, and tells me to open up this bag. Inside, was this masterpiece of a game. At the time, the only TV I used to play games on was in the kitchen, so I had to beg and plead with my Mom to get at least 30 minutes to play, since I had already used up my allotted amount of daily video game time (at least, while she was home). Man, I'll never forget booting up the game, watching the opening sequence, and stepping out into Hyrule, while a torrential downpour and lighting strikes filled up the screen. When I entered Hyrule Castle for the first time, and heard that theme music, I was hooked. Then, I had to go to bed. Stupid parents and their stupid rules! :) Since I was in 6th grade that the time, I was allowed to come straight home from school, and not have to go to some babysitter or whatever. So, you know what I was thinking about that whole day at school the next day. That next day after school, I was finally able to experience it the way it should have been experienced, without my Mom staring at her watch, reminding me what time it was. I don't need to go into too much detail, but I loved every minute of that game, and the entire experience is embedded in my brain.
Next up (purposely skipping handheld versions of the game) was what many people consider to be the greatest game of all time: The Legend of Zelda: The Ocarina of Time. For whatever reason, my friend and I never pre-ordered it, so we were forced to drive all around the county to find a store that had a copy. When I say county, I literally mean it. We definitely went to stores in like 4 different towns/cities. Finally, we call up one place, and I recognized the person that answered the phone. He was able to secure 2 copies (of the gold cartridges at that!), no questions asked. Once I got my hands on this game, I learned how things c ould change so much, and yet, still feel the same. It was masterpiece then, and a mastepiece now. Heh, I remember when I worked at KMcDonalds, we would get 30 min lunch breaks. I would literally drive home on said breaks just to be ale to get in like 15 of gameplay.That's how much I was loving the game.
That game would be followed by The Legend of Zelda: Majora's Mask. This game was the weirdest of all, and unfortunately, I was not able to beat this one as well. Can't put my finger on it, but it was up to that point, it was the hardest Zelda game I had every played. But, I loved how they changed things up, especially with the masks and whatnot. But at the core, it was Zelda, which is all I need.
Then... sigh... The Legend of Zelda: The Wind Waker. I didn't finish this game, but not because of the cel-shaded graphics people were hating on. No, it was because of that damn boat. I got to some point where I needed to sail around the world in order to collect something (maps?). I was like, screw this, this game is good, but no more sailing for me!
The last game in the series I was able to beat was The Legend of Zelda: The Twilight Princess. I absolutely loved this game, and blogged extensively about it back in 2007. Yeah yeah, I know, it was so similiar to The Ocarina of Time. Um, okay... To me, Zelda is Zelda. I don't care what is going on, if it's got that Zelda charm (sans a talking ship), I'm sold. I don't need innovation in every game I ever play. But man, what an experience! I logged 60 hours, easily, which for me, was the longest it ever took me to beat a Zelda game. I was literally dreading getting to the end of the game. There are not many times when I play a game, where I am hoping it will keep going on.
And now we have, The Legend of Zelda: Skyward Sword, just announced today. At first, I was a little disappointed, but that may have to do with the on stage demo that went wrong, where the motion controls weren't working correctly. But, as always, I place my faith in Miyamoto and crew, and expect it to be another smash hit.
So yeah, I sort of like Zelda :) Anyway, as I stated before, it has influenced my series a lot. Just look at my design philosophy for certain core abilities, like Illuminate. It has multiple uses, is upgradable, and is very integral to the game as a whole. Then, look at the Dungeon of Summons.You must use your wits, and various core abilities to get through all 4 floors. Finally, there are the things I talk about all the time: shiny moments. Those moments when everything in the world is paused, while you receive some super cool item/weapon/ability. This reinforces my philosophy that less is more. You should do a touchdown dance when receiving new things, not just go, "Oh cool, another dagger+3. I'll just add that to the pile, which I'm just going to sell off anyway".
This is really the core of what I've done, and will continue to do with Rose of Eternity. It's fusing all the best parts of different types of genres of games. In the end, I don't want to make a great RPG, I just want to make a great game, period. I'm not too fond of categories anyway, because then that comes with expectations about what it's supposed to be. Then, you have varying opinions on what a true RPG is. I have a friend who swears up and down that Demon Souls is not an RPG, and shouldn't classified as such. Who the fuck cares what the category is. It's a game, plain and simple. Either you like it, or you don't. Okay, I'm going to stop ranting on my feelings of categories, because it will eventually turn political, and I need to get some rest on the train :)
P.S. I am literally getting text messages from my friend (the one who thinks Demon Souls isn't an RPG) as I finish wrting this. He's telling me the new Zelda sucks (he just watched the Nintendo press conference), and that all Zelda games suck. His favorites games are Dragon Ball Z and Naruto, so I'm trying to just tell myself his opinion doesn't matter :)
6/14/10 -Monday: MORE CUSTOM SYSTEMS???
So, I must be going through scripting/system design withdrawl, becasue it's been the only thing on my mind for the past few days. I knew I would eventually have to come back to it, just didn't realize I would be doing this much so fast.
Now, I'm taking a look at how XP is handed out. The core staples will be present, including XP for defeating enemies, avoiding combat through dialogue, finishing quests, etc. However, I wanted to come up with a system that rewarded people even more. There are 3 core ideas on my mind at the moment:
Giving an extra % of the overall XP to the person who delivered the last blow to an enemy
Giving an extra % to the person who does the most damage to an enemy as they die
Giving an extra % to the person who kills off the enemy with a particular special ability, unison ability, last resort, etc.
In theory, the first one should be pretty straightforward to implement. I may have to yank some stuff out of the include file, sys_rewards_h, and put into my own custom reward script, aptly named, roe_sys_rewards_h, but that shouldn't be a problem. I've found that many core scripts have OC specific functionality in them, so pulling out what I need is actually beneficial to me. A good example is the hiring script for party members. There's so much stuff that automatically happens, like scaling party members to the PC's level, and seting their core script. Don't get me wrong, it's perfect for people who are making add-ons to the game, or who are sticking closely to the general formula of gameplay, but for me, I'm constantly trimming the fat, so to speak. But yeah, long story short, I just need to multiply the incoming XP by a percentage right before it's given out. Really easy stuff. I'm think that perhaps there could be special items that increase this %, or even a skill upgrade system that ups it as well (this would go in the same skill chart as trap making, coercion, etc (i.e. stuff I'll mostly likely be pulling out of the game as well :) ).
Now, what about healers, and other support party members, you ask? Yeah, still thinking this one through... Maybe healers get bonux XP depending on how much health they replenish throughout the battle? No idea about support members at the moment. At any rate, the XP won't be that big of an increase, just something like maybe 5-10%?
For the 2nd one, keeping track of who does the most damage to an enemy doesn't seem too appealing, though it's obviously possible. Not sure how much stock I put into this one, but it came to my mind as I'm writing this, so I put it down :)
The last one is interesing, because it will really encourage people to make use of all custom abilities. Imagine this situation... You're fighting 2 enemies, and you're down to 25% health, while they're relatively high in HP. You immediately initiate Flurry Attack, and are able to kill them both. I think that deserves some bonus XP :)
No matter which solution I pick, the system will be flexible enough to be plug and play. Any record of someone deserving bonux XP will be flagged on the appropriate party member, and when the XP is being given out, I just need to check this flag, and increase it accordingly. Hmm, now that I think about it, this would be something I would show in a different popup. You would get your normal XP popup, but then, you would get another popup that says something like "Bonus XP: 20". This way, I don't have to mess with sys_rewards_h. I can just apply the bonus XP in my own custom script after the normal functionality runs. Yeah, that sounds like a plan.
Heh, it's funny how simply doing brain dumps in this journal literally helps me design something while I'm doing said brain dump. I started out wirh a brief understanding of what I wanted this morning, and now, I have a much clearer understanding of what I want to do just as I finish this journal entry. In fact, barring any other things I need to do, I may just try to implement this tomorrow!
So far, I've been midly impressed with what I've seen. The Microsoft press conference was as I expected. Call of Duty: Black Ops, Halo: Reach, etc. And of course they had to show off project Natal, or as they have redubbed it, Kinect. As expected, while it may look somewhat interesting on the stage floor, I don't see myself getting. They're clearly going after Nintendo's market, only issue I see with it is, they haven't announced a price, which tells me it's going to be expensive. Factor in the fact that you have to have a 360 as well, and... I don't know... I'm not an expert, but I'm not sure if the casual crowd is willing to shell out that much money.
Now, interestingly enough, I was very impressed with the EA press conference. Especially Medal of Honor. I love multiplayer aspects of shooters (never even play the single story sections), and this one will be interesting. They actually had the single player campaign done by one company, and the multiplayer done by the same people who develop Battlefield. Now, I just got into Battlefield a few months ago, and enjoyed it a lot, so I am really looking forward to it. There's a beta that starts next week, that me and some other friends will be taking part in. Finally, the new trailer for The Old Republic was amazing. I look forward to G4's hands on with it tomorrow.
Speaking of G4, they really dropped the ball. So, they're supposed to cover every press conference, so while I streamed as much of the Microsoft conference as I could at work, in the back on my mind, I just thought, "I'll watch it when I get home.". Nope, they taked about some stupid spiderman. Then, when they got to the EA press conference, the hosts kept messing up, not knowing when they were live, etc. Then, during the Ubisoft press conference, there was 5 minutes where the video feed was showing some non-descript guy sitting in a chair. Just weird...
Oh, and Ubisoft has officially gone off the deep end. They actually showed off some Laser Tag game, thing... Like, it wasn't a video game, you actually ran around shooting at targets. I guess the results are sent to the system you play it on, and it coordinates what your missions are, but... It's laser tag... Meh.
Finally, they have literally jumped on the Wii Vitality Sensor band wagon with their own version. Everyone laughed at the Wii back in 2005, and we see how well it did. May stress, vitality sensors are the next thing? *shrug* I don't need no stinking game to tell me I'm stressed. My heart/chest already does a fine job of that :)
6/13/10 -Sunday: DEATH SYSTEM POLISHING...
The plan for today was pretty clear... Make it so that the PC follows the current party leader when dead. Regular party members were having no issues with it, so I knew it was some weird thing with the PC still being treated slightly different than other creatures. Fair enough. After a discussion with TimelordDC in my thread, I decided to move to another solution to get it done. Essentially, the thinking was, in the PC's heartbeat script, I could just detect if they were dead, and if so, then they should just move to the party leader.
I'm already overriding the heartbeat script in my roe_player_core script, so adding in additional functionality was pretty easy. When it runs, I essentially just make a check to see if it's the PC. Then, I check to see if they're dead, via a new function I added to roe_sys_death_h. If so, then I just called the function (don't quote me on the actual name), CommandMoveToObject(). Now, for other party members, they have their own overrided version of roe_player_core, because they obviously have specific things going on with them, mostly when they spawn for the first time. Keep that in mind, I think I need to add one for this PC, to handle specific situations like this. I don't want to end up with an ugly event script that has all sorts of conditions in it.
Anyway, the last thing I needed to do was make sure that the party leader was set properly. For whatever reason, while there is already a function called SetPartyLeader(), it is not implicitly called if the PC is removed from the party. I mean, it makes sense that the next party member in line would be set as the leader when the PC is removed. Anyway, I created my own function in roe_sys_party_h, called PromoteNextPartyLeader(), which essentially takes the first party member after the PC, and promotes them. Then, I just called that whenever the PC is removed from the party. Heh, it reminds of The Empire Strikes Back, where Darth Vader kills one of his admirals by choking him to death, and then promotes the next one in lime (Admiral Viet?).
So, the only other thing I needed to do was to make sure to reset the party leader whenever the PC was added back to the party. Once all of that functionality was written, whenever the PC fell in battle, they followed the newly promoted party leader with no issues, just as I had intended. Always nice when your plans comes to fruition!
One slight wrinkle in the system that I am just thinking about at the moment is that it seems by default, the PC's heartbeat is called like every 2 seconds? I put a ton of debug floating text in there just to confirm that it was being called, and it seemed like I saw new text every 2 seconds. That might be a bit too much to keep called the move function every 2 seconds. I don't have the toolset in front of me, so I cannot totally confirm this, but I believe there is a way to set the iteration for the heartbeat (i.e. how many seconds between each call of it). So, I may look into changing to some other value (6 seconds?) when the PC dies, then switching it back when they're alive.
The only other things I need to do are:
Create some snazzy VFX and animation when the party member is revived.
Assuming I eventually move the system to mirror The Coming & Cry The Beloved, I need to come up with some witty death dialogue. In those games, you were able to chat with dead party members, and some of the dialogue was very interesting. One party member in particular did not like being a ghost, and would yell at you to revive her :)
Get some form of Tonics of Revival into the game. I'm hoping I can create AI tactics that can be set on party members, so they use them automatically. We'll see...
At any rate, I can consider this a very successful weekend. I took a pretty extensive system from my old games, and ported it over (well, most of it) with minimal issues. Now, I know what some of you may be thinking: "Wow, you made it so that instead of laying on the ground, dead party members follow you around in ghost form. Who the hell cares!" Well, it just goes inline with the overral plan for this game, as well as how I approached my earlier ones. Add as much custom functionality as possible, so people feel like they're playing another game. Maybe it's a pyschological thing, but it seems that once people feel like they're playing another game, they stop comparing it to the game it was built on (in this case, Dragon Age). Because, I know I will get comments like, "By Dragon age lore, this creature cannot cast this spell". I will attempt to tell them this isn't DA, and then proceed to ignore them :) I dealt with it a handful of times in my earlier games, mostly comments about how much HP's goblins were given, or other things people had set in their mind. Well, I'll just say it now (and probably many more times down the road). Throw out any ideas of what you think this game is, or will be. I don't look at it as a DA mod, I look at it as a self contained RPG that uses the DA engine.
Well, the most glorious 4 days are among us. Not many things get me as excited as this convention, especially now that they are back to the old format. In particular, I am really anticipating Nintendo's press conference. They usually have an hour, and this year, they've booked 2! There is no doubt in my mind that they will unveil The Legend of Zelda Wii, and I may break down in tears. Listen, I am a zelda fanboy, and have been since 1987. Nintendo may do some other questionable things, like the silly Wii Vitality Sensor, but as long as they bring out the heavy hitters in Mario, Zelda, Metroid, and maybe a little Donkey Kong, all is forgivven.
In general, I just love the atmosphere, and I love seeing the unveiling of new games, even if I know damn well I would never play them. What can I day, I'm a gamer!
Now, how I'm going to watch it is something I coming up with as I type this. I thinking on Monday, during Microsoft's press conference, I'll eat lunch at my desk, and stream it from Gamespot or IGN. I'm also DVR'ing G4's converage, which I have to say, was very extensive last year.
Now, Nintendo's is on Tuesday, and I have no idea how I will do it. I can't take a 2 hour lunch (can I?!), so I may just wait until I get home and watch the recording. Then again, can I possibly wait without surfing the net. Arrg, so many decisions!
EDIT - As I am writing this, I am wondering if the PC would have just automatically followed another party member, as long as they were set as the party leader (I wasn't doing this in my earlier tests). Maybe some of the work I did was uneeded. I'll test that out tonight, just to confirm.
6/12/10 -Saturay: DEATH SYSTEM IMPLEMENTATION...
As you can see by the screenshot, I was able to implement the death system today. Sure, it took me like 5 hours to do everything, but in the end, it was well worth it. I remember wondering if I was even going to do the work. Then I realized, I had to! This is just another thing about this game that makes it unique. Just another thing that makes it feel more and more like Rose of Eternity. But boy oh boy, it was a pretty interesting path to get there:
First, I had to do some initial testing to see if this was even going to be possible. I started with my own functions to remove party members, and then add them as followers. Worked quite well, for the most part (more on that towards the end of this update). Then, I tried calling the same function on the PC, and to my surprise, they were removed from the party. I was even able to change the party leader with the function, SetPartyLeader.Now to me, this is, to put it midly, FUCKING AMAZING! Seriously, I have been wanting the ability to de-couple the PC from the main party for ages. This goes back to my philosophy I was talking about the other day, with regards to cast members. There is no main hero, and I want to be able to tell a story from multiple perspectives. This function helps me get closer to that goal.
At any rate, once that was working, I began looking for ghost type effects, and found 2. One, called MakeCreatureGhost simply adds the actual visual effects. Another, SetCreatureGhost creates some visual effects, but more importantly, makes it so that anyone can walk through it. Nice! So, I just bundled them up into one function, and started applying it. Now remember, at this point, I wasn't actually attaching these functions to any death events. I was just simply testing to see how things looked and whatnot. The gluing would come later.
Next, I had to make sure that all enemies would leave the ghost alone, as well as make sure the ghost wouldn't attack anyone. After a bunch of trial and error, I found that using the combination worked well:
//make them neutral so enemies leave them alone
SetGroupHostility(GROUP_HOSTILE, GROUP_NEUTRAL, FALSE);
Okay, so I was able to remove a party member, make them a follower, make them a ghost, and make sure enemies would leave them alone. Now, it was time to add the glue.
Now, the previous night, I had already taken a look at the script, player_core.nss and more importantly, the event that is handled in there, EVENT_TYPE_DEATH. In a nutshell, what happens is, when a party member is killed, there are 2 possible states: The entire party is dead, or there is at least one person alive. If the entire party is dead, some functionality is run to determine the death hint that shows up on the GUI. Then, the death GUI is shown. This particular section did not concern me. If at least one party member is alive (i.e. not a ghost), then I run my custom death functionality there. This is of course all happening in my custom script, roe_player_core.nss.
Now, at this point, I just had a bunch of code scattered all over the place. At this point, I decided to create my own library file, called roe_sys_death_h.nss. It consists of 4 main functions:
HandleDeath - This is where I put all the functionality to remove the party member from the party, make then a follower, make them a ghost, and make them not take part in combat. In addtion to that, I realized I needed a way to keep track of them all, so I made use of the talmud storage api, and decided to keep all dead party members in a local array. So, the last thing done in this function is add the party member to the array.
ReviveDeadPartyMember - This essentially does the reverse of the above function, ending with the party member successfully part of your party again and them being out of the local dead party member array.
FetchDeadPartyMembers - This just gets all party members from the array.
ReviveDeadPartyMembers - This loops through all dead party members (fetched from the local array), and revives them. Then, the local array cache is purged.
Now, I actually already had a lot of the talmud storage array function for fetching the entire list, removing items from it, and destroying the entire thing, through my work with followers a while back. So, I just generalized that function, and placed it into my utility script, roe_util.nss. So far, so good. This was about 2 1/2 hours in, so I was feeling pretty good.
Next up, I had to figure out how to have them revived once combat was over. I spent at least a good 30 minutes tracking this one down. Finally, I came across the following event in module_core.nss: EVENT_TYPE_DELAYED_GM_CHANGE. In here was a bunch of functionality dealing with resurrecting dead party members, when game modes were changing (i.e. going from combat mode to exploration mode). It was immediately apparent this was the event fired when combat came to an end, or at least when no more enemies were perceived. I started to override this event in my own roe_module_core.nss, and add the functionality to handle reviving all dead party members. The changes were quite minimal, and within minutes, I had party members being revived when combat was over with.
Now, even though this works, there are still some outstanding issues. For one thing, when the PC dies, they don't follow the new party leader around while in their ghostly state. I've opened up a threadon it, so if anyone has any ideas, feel free to leap right in :) Another thing I need to change is the whole "party wipe" functionality. Right now, it's checking to see if the party members are dead, when it need to be checking if they are ghosts. Not a big thing, just something I thought of while writing this.
Even with the issues, I am very happy that I was able to do so much today. The system is in place, and can be tweaked very easily if need be. However, remember, I'm just currently emulating what the DA death system already does, with my own spin on it. I still need to figure out how I will bring over the system in its entirety. But with all the work I put in today, any changes will be very easy.
6/11/10 -Friday: DEATH SYSTEM DESIGN...
So, I've really been avoiding this core topic for a while... Not just in my journal, but in my thoughts in general. The Death Systemin my earlier games was very different than the core death system used in NWN. In fact, I don't even remember how NWN did! Some vague thoughts of some resurrection rod or something is coming to me, but as I never played more than 30 minutes of the game, I don't really remember.
Anyway, the way mine worked was, when a party member died, they turned into a ghost. They would follow you around just like normal party members, and you could even converse with them a bit, but they wouldn't take part in combat, and likewise, enemies would leave them alone. My reasoning behind it was like so: Party members were always integral to the story, so there would definitely not be perma-death. Also, I didn't like having to have people resurrect them, because what if you didn't have that potion? Would you run back to town to buy one? I know some people like that game design, I'm not one of them, so that idea was thrown out pretty quickly. This system essentially allowed the game to continue as normal when party members died, except for the fact that they wouldn't take part in combat.
Now, by default, party members would be auto-resurrected from their ghostly state after 3 minutes. This time limit could actually be lowered by investing your Distinctive Developmentpoints into the Death Revival time property. Anyway, another way to have them revived was through the use of Tonics of Rebirth . If you set a particular AI property on the party member, you could tell them to use them when they died. Oh, and for the PC, things were slightly different. As you could only directly control the PC, when you died, if you didn't have a Tonicc of Rebirth, it was game over.
So in a way, this system is sort of similiar to the existing DA system. If you died, you were taken out of combat, but very shortly, you would be available again. The main difference is that in Rose of Eternity, if you're in a battle that takes longer than 3 minutes, or whatever value you've lowered it to, your party member would be revived, and could take part in the battle once more. In DA, you're screwed until the battle is over, no matter how long it takes. On the flipside, in Rose of Eternity, if they died towards the end of the battle, you wouldn't have them until they were revived. So, perhaps that meant standing around? That's the the big flaw I realized in the system, so many years later. However, out of all the complaints people had with the game, no one ever complained about the death system, so perhaps it wasn't a big deal...
Anyway, I'm a little unsure what to do at the moment. The DA system is so close to mine, why mess with it? Then again, why not? :) Here's what I think I will do. I will modify the existing system so that when a party member dies, instead of staying on the ground, they will rise as a ghost. Then, when the battle is over, they will be revived. So, in this way, I keep the existing system, while putting the Rose of Eternity spin on things. From there, I can decide if I willl have a timer on the revival or not.
Yep, sounds like a plan!
6/10/10 -Thursday: LOTS OF SMALL THINGS..
So, sticking with yesterday's plan, I added a new piece of dialogue, and glued it into the existing sequence, via a generic talk trigger. All of these conversations mixed in with the combat balances things out, in my opinion. Things aren't turning into a hack and slash fest, and their is some constant context for what is going on. Still, there isn't too much, so as to start pissing off the player, like, "Damn, another convo? I just want to kill something, mua hahahahahahahah!"
I also started implementing pieces of ambient dialogue for people to say, depending on the situation. I'm not exactly sure of the implementation itself, however. Essentially, I'm going to have one piece of dialogue for each important character. In that dialogue will be a ton of plot conditional nodes, that will display the correct line, accordingly. Newest plat related stuff at the top, oldest at the bottom, so that I only have to set a flag once. So, let's say there is a flag called START_QUEST. A particular party member will say, "We do not have time to talk right now, we must finish this quest!". Then, after you complete the quest, a new flag is set, called END_QUEST. Now, when you talk to said party member, they say, "The decisions you made in this quest really surprised me. There's more to you than I anticipated." The trick is, with the top to bottom thing, I just have to switch on the last flag I care about, and it will also be read before the other ones. Only wrinkle is if I want to have a generic ambient line, unrelated to any plot going on. How do I traverse the tree to get to it? Perhaps I will need to switch off the other flags. In any case, the end result isn't the problem, as with most things, it's how I get there. Nothing too serious.
Finally, I started something I had wanted to start for a while... Item property restrictions. Anyone who has added restrictions to item properties have seen things like "Resitrction: Sten". Well, I have my own custom party members, so I just followed the way Bioware did it, and got it working for whoever I want. There is essentially 3 parts to it:
Creating an M2DA of the base 2DA, itemprps.XLS. Just for originality, I called it itemprps_ROE.XLS :)
I essentially just c&p the Sten example, and changed things as needed. The key things to change were the ID (I changed to something high, 50000), specifying the id of the text itself (more on that below), as well as the script that is used (more on that below as well).
Create a new entry in the custom module talk table, with a simple string: "Restriction: Party Member Whose Name I Will Not Disclose At The Moment". This is what shows up in the GUI when selecting item properties.
Create a script that runs when the item is picked up (I believe). There are already a bunch of similiar functions, like ip_restrict_sten. So again, I just c&p, and changed the reference in there to my party member.
Pretty straightforward, really. Within minutes, I had items restricted to my custom party members.I with it actually said "Resicted to X" on the item itself, but the only way you know is that the item is grayed out for everyone but the person it's restricted. Oh well, that's good enough, I guess.
Tomorrow, I need to figure out if I'm going to use quests and quest markers for the next few tasks in the current sequence. On the one hand, anyone paying attention will have no problem understanding what they're supposed to do. On the other hand, I know people like to speed read through dialogue, and they may miss important nuggets of information. There's one particular place a character has to go to, so that will deserve a plot marker or something. As for the other ones, still have to think about it. Most likely something to brainstorm on the train ride tomorrow.
6/9/10 -Wednesday: BOUNCING BACK...
Last night started out pretty bad, but ended okay. Luckily, I've been doing this long enough to know there will be days like that, so I just put it in the back of my mind, and kept on going. Tonight was a different story. I was very focused, and knew exactly what I had to do. The biggest difference was, on the train ride home, as I listened to music and closed my eyes, before passing out, I just thought about what I wanted to do. What a revelation. Planning actually works :)
I started the night by writing some new dialogue, and hooking it into the existing sequence. I polished it up some of the camera angles used during the conversation, then moved on. What I really wanted to do was to play the entire sequence from start to end (well, as far as I've gotten anyway), just to see how things were going. Things I was looking for were:
Is the combat relatively balanced, and varied.
Is there too much combat.
So far, the combat is very much varied, which I am proud of. Every encounter is slightly different, and every couple of encounters, I'm progressively adding new custom enemies. As for balance, well I touched on this before, but I really need to tone down one of the particular enemies. It's not even their HP, or armor, or damage output that is the killer. It's one particular talent they have, that combined with another talent I added to their custom AI package, that is really pissing me off, and no doubt will piss off players. I didn't get a chance to remove it tonight, but best believe, it will be gone by tomorrow!
As far as too much combat, well, that really depends on the player. The core combat encounters you must must go through are moderate in quantity, but if the player wants to go off the beaten path, so to speak, it slightly increases. Nothing like The Deep Roads in Dragon Age, thankfully! I've talked about it before, and will post my thoughts in any thread that pops up on the forums about it, but damn, I shudder when thinking about going through that section again, if I ever get the chance to replay the game. In fact, it really opened my eyes to how annoying repetitive combat can be. I'm not exaggerating when I say it took me about 10 hours to get through the entire dwarf section of the game. Sure, I explored everything, but towards the end, I just put the game on easy, to get through the damn thing!
Tomorrow, I'll be adding another small piece of dialogue, as well as doing some scripting so that npc's/party members/followers say the right thing to you, depending on the situation. It's small stuff really, but it needs to be done at some point, so might as well just knock it out. As usual, I'll be working from home tomorrow, so I should get more than usual done. As far as everything else, well, I'll think about that while listening to music when I go to sleep :)
6/8/10 -Tuesday: WEATHERING THE STORM...
Sometimes, when I get home from the gym after work, I just don't want to develop. Simple as that. However, I know what can happen to me if I get away from it for too long, so sometimes I just have to weather the storm. Tonight was such a night. I almost didn't even do anything. When that happens, I have to just start up the toolset, and start doing something. Eventually, I'll hit my stride, and feel just fine.
I started out by refactoring a lot of the scripts I had written over the past few days, mostly just taking duplicated functionality and putting them into functions. I then created some utility functions, such as a function that set the group id (i.e. faction) of an entire group. There was a particular encounter I was trying to create, and some friendly creatures were just standing there. Turns out they were neutral. Now, I could have just changed their group id in their creature properties, but I realized that they wouldn't always be friendly, so I just made a function to handle it.
Speaking of utility functions, the file I use for them, roe_util.nss, is getting bigger by the moment. I do have it separated into logical parts, having functions for teams, inventory related things, movement type things, etc. However, it may be time to split those into their own utility scripts, like roe_inventory.nss, or roe_team.nss.
Next, I began to take a long look at an existing level (the 3rd one I had created) to see if I could make it run a little smoother. Turns out, there were extra structures behind walls that the player couldn't see, that were just adding to the overall size of the level. They were mostly floor and ceiling models. The reason I needed to do this is because I was prepping the area for another encounter, this time, a little bigger. I essentially wanted to make sure the level could handle everything going on in it. Another thing I learned to take into consideration was the fact that when I test things, the toolset is always open. That does take a little memory away. Once I made my changes, shut down the toolset, and tested the area, it ran just fine.
With regards to combat and experience, looks like I'm getting a little lucky. It looks like at the end of this combat sequence, the player will have earned enough experience to gain a level, and perhaps their party member. That also takes into account experience gained from earlier in the game as well. I'm definitely a proponent of slower paced leveling, so it's working out perfectly so far.
With new levels comes new custom abilities, and I'm all over that. I've pretty much known what Last Resorta particular party member will earn when they hit level 3 (keeping with the standard I start in the first 2 games). With regards to the PC, I still need to do some tweaking of an idea of a Last Resortthey will gain at level 3. One thing is for sure, I'll enjoy implementing those :)
So, the night turned out better than expected, as I made steady progress. The key was to just jump in, and see what happenend. While I admit, I would rather go in with a clear plan on what I'm to do, sometimes you gotta do what you gotta do.
6/7/10 -Monday: SLOW NIGHT...
I was pretty busy tonight, watching 2 queued up episodes of The Tudors, which I mistakenly believed to be the last 2 episodes of the series. Oops. After that, I only had about an hour of time, so I messed around with creating some of the new equipment the player will be receiving. I already knew the look of it, I just needed to come up with a color scheme. I had one in mind for a while, but seeing it in game made me think twice about it. I'll have to try some more colors.
So since I don't have any substantial development updates, I'll talk about the cast of characters in this game, and the relationships between them all.
CAST (SPOILERS FROM THE COMING & CRY THE BELOVED)
Before I start, I must share my pain with you. I wrote up a lot of this a ew days ago, and forgot to save it before closing down the editor I using. So yeah, this is mostly from memory. I'm also irritated as I write it :)
Right, so one of the things I've always loved about certain RPG's is when you can play the game from the perspective of someone else. I was able to accomplish something similiar in The Coming, with the Dual Storiessystem. It allows the player to see events from the perspectives of both Aramus& Challseus. Unfortunately, I wasn't able to keep this up in Cry The Beloved, due to time constraints. Had I the time, I would have allowed the player to:
play as Cloponfrom the time she leaves Stramadonfor the first time, until her mentor, Adaramus is killed by Kain, where she is disfigured in the process.
play as Audenas he attempted to defend Aribinefrom the Ministry of Justice, before he was forced to flee to Dematol.
play as Rainaas she goes on a quest to find her lost lost, Alerton.
Sadly, most of this stuff was just added as flashback cutscenes, due to the aforementioned time constraints.
All of this paints a picture for people to understand how I view the entire cast in this game. There is no main hero. Sure, some people are more important than others, such as the Keeper of the Rose, but in general, it's not about one singular person. It's about the intertwining of all the stories of all the people. It's about their relationships, their hardships, etc. It's about this for all the main cast.
As an example, let's take a look at the Castpage. Forgetting about the Keeper of the Rose for the moment, let's focus on Aramus. He travels in a party with Clopon, Challseus, Auden, Raina, and for a brief time, Lenin & Lenina. Clopon, from Stramadon knew Challseus before the events of the game. In fact, she studied under him for a time. Even though Lenin & Lenina are very young, their powers are known throughout the city, and therefore both Challseus & Clopon know them. In fact, they are the ones who end up setting up Challseus at the end of Cry The Beloved, allowing him to be capatured by the elder of Stramadon, Ashan . Then, there's Jarl Thuvik, who is the one who steals the majority of Challseus' powers, leaving him with a fragile mind.
Now with regards to Auden & Raina, they were both brought up as Boundary Wardens, under Auden's Father, Claudian, along with Arikand Alerton. Claudian ends up pretty much dis-owning Auden because of his cowardice, and treating Arik more like a son. I've already mentioned that Alerton and Raina end up becoming lovers as they get older, though he is lost to the Boundary while on a scouting mission with Auden one day. Arik & Claudian also become very militant with their views towards the Defenders of Legacy, much to the dismay of Lord Montolio & Kira Allendry.
Speaking about the Defenders of Legacy,we've got Adelas, who controls Fort Illnitison their colony of Dantiras. Then there's his right hand man, Castias Lyonars, who has recently stopped agreeing with their policies. Then there's the elite group, the Ministry of Justice, ran by Kain, brother to Adelas. Their sister, Aloia, also a member, has direct ties back to Aramus. In fact, Aramus has extreme ties to the Ministry of Justice.
Now, unless you've played the earlier games, none of the above probably even makes sense. But as you can see, there is already a huge web of relationships between people in the game. What this allows me to do is to create a world with recurring cast members that people hopefully learn to love/hate.
It also serves another purpose. I've got this world I've created, with all of these characters. It's an extremely nice base to have, when starting to work on another game. There's already the history, relationships, etc. When coming up with plotlines for this new game, sometimes, it just writes itself :) All of the aforementioned characters have established plot lines and such, so as long as I'm consistent in that, a huge % of the work is already done for me.
Now, I've talked about it before, but since I'm moving from NWN to DA, and I will obviously get new people to play this, I have to strike that balance between nostalgia for old players, without confusing new players. Add in the fact that this game takes place 20 years after the events of the first ones, and what do we have? A lot of people to add to the cast! At the moment, I can say that there are at least 11 new characters in the game so far. This works for new players, because even for old players, they need to be introduced properly. Still, there is the nostalgia effect, because some of the these characters have relationships with members of the original cast, and some were even present in the old games, albeit in an extremely low role, relegated to a cutscene or something.
In the end, look at it like that 6 (or 7?) degrees separation thing for that actor, Kevin Bacon. Or even better, look at it just like life. I mentally tell myself many times a year, "Damn, she/he knows him/her? What a small world!".
6/6/10 -Sunday: MINOR SCRIPTING PROJECTS...
Today, I focused on a bunch of scripting for the particular sequence I'm working on.
The first thing I did was complete the other half of the whole plot/non-destroyable item thing that's been lingering for the past few days. Community member Proleric informed me of yet another function, called SetIsIndestructible(). So, after going through SetPlot() &SetDestroyable(), I come to this final function, that worked perfectly.
Now, since you obviously cannot assign this particular attribute in the editor, I had to come up with a way to detect when the item was acquired, and set it there. I'm on the train right now, and I cannot remember the exact names, but there were 2 different events I could play with, but I went with the one I believe is called EVENT_TYPE_CAMPAIGN_ITEM_ACQUIRED. When catching this event in my custom module core file, I could just check the tag on the acquired item, and set it to destroyable. Now, you all know me. This isn't an elegant solution, in my eyes. What I would really like is a more robust system, so it can work with other items I want to be indestructible as soon as you pick them up.
The simplest way would be to create a new variable in var_item, something like INDESTRUCTIBLE (original name, I know!). Then, in the event, I just check for that variable on all items passed through to it, and set them accordingly. Now, all I have to do is set this one variable on the item when creating it, which is effectively adding another attribute to pick in the editor. Then problem with this is that I don't like adding new variables to the variable 2DA files. I've been making good use of the talmud_stoage API by Craig Graff for a while now. Only issue with that is that all variables have to be set during runtime (i.e. when the game is running), not beforehand. So, I would have to literally have a script that checks for all these indestructible items, and set the variable on them as soon as the module loads up.
So, as with most things in programming, there are various ways to accomplish the task, it really just comes down to style and what you feel most comfortable with. I'll probably end up with a new variable in the var_item 2DA. Per my style, I like to make as much of things as configurable as possible, without resorting to scripting. Not sure when I'll get around to it, but that's the path I'll most likely end up taking.
So, after putting all my item woes to bed, I moved on to more encounter scripting. I ended up creating anorther custom enemy, though the only difference between this one in the tier below it at the moment is that they are a higher level, and wear more durable armor (customly tinted armor at that). They may get a custom ability, whether it be a Unison Abilityor a Last Resort. Still trying to semi-balance things out at the moment. Speaking of balance, and enemy levels, I want to briefly talking about... enemy levels :)
Now, the way the OC handled enemy leveling/scaling is that for each area, there was a level range that all enemies adhered to. So, if you entered RedCliffe castle at level 9, and the level range for the enemies was 6-16, they would scale to whatever level would present a mild challenge to you. This concept has been beaten to death many times, and for the type of game they created, it sort of makes sense... Maybe...
Anyway, wirth my game, there's none of that stuff going on. I'm not even sure if most people know about it, but there is a variable in the var_creature 2DA, called MIN_LEVEL. This particular variable is one of many variables used in the scaling system. I don't have the scripts open, but the scaling system factors in the level range of the area, the type of enemy you're fight (normal, lieutenant, etc.), as well as this MIN_LEVEL variable. So, if you use this variable, but none of the other stuff, it effectively sets the enemy to the specified level. So for me, every enemy just has a value for this variable, and that's it. I like to have as much control as I can over the level of enemies, so this is perfect for me.
Here's another thing about it I like, especially over the scaling system. In the current encounters, the player is fighting some tough as nails enemies. Hell, even I'm having issues with them, so they'll be nerfed at some point! Anyway, the point is, the player needs to be challeneged, I think everyone agrees on that. However, as you level up, gain new items, etc., these particular enemies will continue to stay the same level. So, it will be a great judge of how powerful you have become when you can take out these once tough enemies with ease. I already ranted on it days ago, but that's what combat design is all about. Giving the player a challenge, then giving them a few moments of superiority, then bringing them back to earth with more tough enemies (to be fair, the game doesn't follow this exact flow the entire time, but you get my point).
Besides all of the above, I just scripted a lot of plot related things, more encounters, and in general, just moved the plot along in the current sequence. I'm trying to make the combat as varied as possible, and I just came up with a new way to do that. So, I'm just creating the encounters I know I need to work on, while I let these other ideas perculate in my mind.
Finally, I've come up with a solution to handle the handing out of certain items, as well as some new abilities (not to be confused with the items/abilities I mentioned a few days ago). As with most things, I didn't do any hard core brainstorming. I was just listening to some music, and some ideas flooded into my brain.
Tomorrow, for fun, I think I'll create some of these new items, just to see how they look. Custom tinting is damn near a must for everything at this point. Nothing about this game can look like how things looked in Dragon Age. People shouldn't think they are playing Dragon Age, they need to think they are playing a totall new RPG that happens to to be run on the Dragon Age engine.
6/5/10 -Saturday: NOT MUCH TODAY...
I had a wedding to go to in New Rochelle, New York, which is about an hour and a half drive for me, so that took up a huge chunk of my day. Then, a friend I've known since like... damn... 1988? Anyway, a long time friend stopped by for a few hours an hour after I got back from the wedding, so that left little thing for development.
I was able to fix half of the whole plot/destroyable items issue I had yesterday. Turns out, plot items are placed onto a plot tab on the inventory screen, something I totally forgot about. So that solved that. There was still the issue with another equipable item the player gets. If it's on the plot tab, it's unequipable, so I was still trying to figure out how to keep it from being destroyed. Then, I got tired, and decided to call it a night. I'll hopefully get more time tomorrow...
6/4/10 -Friday: I SPOKE TOO SOON...
I've apparently jinxed myself. The other day, I was tooting my own horn, saying how I never really run into scripting issues. Well, today, I am ran into a small one. Funny thing is, when it comes to making systems, I'm cool. When it's small things, I sometimes slip up.
So, there is this item the player gets, where they shouldn't be able to drop it/destroy it. In fact, there will be many items like that, this is just the first of them. If you want to read all the details, go to this thread I created on the toolset forums. Essentially, the plot attribute, which states that any plot items cannot be removed from their inventory doesn't seem to work. I'm sure I'm missing something small, which is why I put it in the hands of my fellow scripters :)
Another issue I had today was with multiple items appearing on the PC. Its been recurring since I started this project, I just decided to deal with it now. I really can't explain exactly what is happening, but here goes: So, I supply the player with a pre-gen character *dodges rotten fruit and vegetables*. It's sort of a hack, but I essentially create that character as a normal creature in the toolset, export it, then I C&P the file to the core override directory, and rename it default_player.utc. This default creature is basically the bald guy named Jaden that most people see when they try to make a custom module for the first time. So, I essentially override him with who I want you to use. Anyway, it seems that the inventory from both the copied pre-gen that overrides the default one, as well as the normal one in the normal export folder are being added to the player. So,I essentially end up with 2 sets of items. So, I essentially had to export them with the inventory, make the copy for the override directory, then export them again with nothing in the inventory.
Now, I thought I could just get rid of the one in the regular export directory, but it turns out there are references to them throughout the module (used in stages for instance, just for show of course). I haven't tried to remove all the references to see what happens, but honestly, this is so low priority, I'll just leave it for the end of development, or when I have designers block again :)
6/3/10 -Thursday: PATIENCE IS A VIRTUE...
First off, I just want to apologize for the site being unavailable the other day. Turned out, my domain name expired on 6/2. A quick call to the hosting site cleared that up for me.
So, the other day, I mentioned how I was having designer's block about how/when to give the PC their first core custom ability. Well, while listening to a certain track from that artist I've been listening to lately, the idea just hit me. The solution is very natural, and I think it will really fit in with the existing story. There are 2 parts to it, actually, and I more or less implemented the first part today. I know some are thing, "Wow, their first custom ability. Who cares, just give them the damn thing!". Remember, when handing out items and abilities, it's quality over quantity, so I want each time to have it's own shiny moment, if you will. Sort of like in The Legend of Zelda when he gets a new item in a dungeon, or hell, whenever he receives that games' equivalent of the Master Sword. It has to have a special feeling to it.
I also created a new piece of equipment that you'll find in a treasure chest, and was midly irritated that the PC didn't have the STR requirements to wear it. Look, I know all about the stat requirements, materials, etc. in Dragon Age. Forget about all of that, I just see some really cool looking equipment that I want the player to be able to use, early on. I thought that perhaps the stat requirements were in one of those material type 2DA's, but didn't see anything. After a little more due diligence, I decided to make a post at the toolset forums, before going to sleep. When I woke up this morning, I had about 3 responses. The ones that interested me the most are the fact that there is an existing item property thing that removes the requirements to wear. Bingo! Nice and easy, no 2DA work. I'll take it! Thanks to those that responded in that thread.
When actually adding this piece of equipment, I also noticed the icon for it is woefully.... well, it just doesn't represent it too well. Might see how busy Archon is (he's a busy man with school, his own projects, etc.) to see how hard it would be to get some custom icons for custom pieces of equipment. May not be worth it for all, but perhaps for some. Speaking of which, I still need to test out his changes he made for me for the custom clothing. Somehow got lost in the shuffle of everything. Need to move that up the priority list.
Getting back to combat design, I did a lot of scripting to setup certain encounters. In the process, I ended up creating a new function to add to my suite of follower functions. Nothing too fancy, just removes all followers (I previously only had a function to remove a single one). I may add a similiar function to my normal party member wrapper functions as well. One thing I need to implement when spot testing is giving out a certain amount of XP. If I played from the start of the game to the particular spot, I would have gained a lot of XP, perhaps even leveling up. So, I need to start adding an average amount of XP upon module startup when testing, so things are midly consistent. Even still, combat design/balanace is coming out good. Definitely will be toning down the power of one custom enemy, but besides that, all is well.
Tomorrow, I'll continue working on a specific encounter, and maybe, just maybe, create that new custom enemy!
Oh, and just to keep people in the loop, while I started re-writing the site's backend in Java last fall before I had a job, I may do it in Ruby. I don't want to get into scalability debates over Java and Ruby, but for a small site like this, it won't matter much. What matters is how fast I can do the site, as I do not have that much time to begin with. I've been using Ruby at work for months now, and it can definitely do some magic for you under the hood, so I'm going to start doing a little research on it.
Besides some interface changes, things should be pretty transparent to you. Except, maybe the site runs smoother. We'll see, this is just me typing out loud is all :)
EDIT - If you have done so already,checkout this documentary for The Witcher 2. I frequently hear that graphics aren't the most important thing in RPG's, blah blah blah. But, when the graphics AND gameplay are top notch, that's a good thing! I cannot comment on the gameplay of it obviously, but damn, those are some nice graphics. Especially the lighting effects. If this is the future with how RPG's will look, let's go!
EDIT 2- Last month, I secretly wanted to have a total of 1000 visitors. Only down by 31 on the last day of the month, early in the morning, I looked at my fiance, and said, "Oh, I've got this in the bag!". What was the end result, you ask? 999 total visitors for the month...
6/1/10 -Tuesday: ROSE OF ETERNITY - THE GIFT AND THE CURSE... AND MORE...
Many good things have happened in my life when it comes to Rose of Eternity. It's been a long 11 years, but many of these moments are still very fresh in my mind:
when I was going through some hard, emotional times in 1999, writing game ideas in my notebook helped take my mind off the pain. While in retrospect, the bad times only lasted about 6 months, during those times, I thought it would last forever (I was 19 at the time). Some of the core game ideas still prevalent today were born through trying to keep my mind at ease.
it should go without saying, that the release of The Coming & Cry The Beloved, over a 30 month span was a good thing :) I really had no idea what I was getting into, I just knew I wanted to take this idea, and make it come to life.
I became a part of the NWN community, and met hundreds of great people. Some I met on the Bioware module forums, many I met through comments/votes to my games, and some, I just met through email. In particular, the ones I met through email amaze me. I had never been a part of a community before, so I was not used to people being so open about wanting to contribute to projects, done by people they didn't know personally.
Oh, and special shout out to everyone who worked with me on Cry The Beloved. It was a great group of people, spanning all across the globe. Those were very special times to me.
The reception of my games was definitely a good feeling. 43K cumulative downloads, NWVault 2005 Module of the Year Silver Award, NWVault Hall of Fame, and an extremely good voting score overall.
Being featured in PC Gamer not once, but twice! Once as a must play module of 2006, another time, I got a mention in a mod section detailing the things modders could do with the NWN Aurora Engine.
The crowning achievement for my games is probably winning the 2006 Independent Games Festival award for best NWN module. The entire experiencce was surreal. I was granted VIP passes to the 2006 Game Developer's Conference, won an award in front of industry heavyweights such as Richard "Lord British" Garriot, and in general, was introduced to the world of commercial gaming. I'll never forget the experience.
Last, and certainly not least, I became affiliated with Ossian Studios, was eventually asked to join the team, and after a long process, released our first commercial game, Mysteries of Westgate.
With all the great things that happened, what could have possibly gone wrong, you ask? Well:
For 80% of the time I was working on The Coming & Cry The Beloved, I had a full time job down in NYC as a programmer, where I would commute 2 hours each way, every day. A normal day would go like so:
Wake up at 5:30am
Catch 6:47am train
Get to work at 9:00am
Work until 5:00pm (sometimes later)
Catch 5:29pm train
Get home at 7:30pm
Eat dinner, attempt to have some normal life till maybe 9:00pm
Start working on the game, most likely not getting to bed until 12:30, 1:00am
Rinse and repeat
As you can see, I averaged about 5 hours of sleep a night. It is true that I was able to do development on the train 7 months into development once I got a laptop, but that didn't stop me from still getting to bed really late. This would begin to start to take a toll on me, I would later find out. Remember, at the time, I was like 25, and therefore, invincible.
Because of the success of The Coming (which took 15 months to development), I immediately began working on Cry The Beloved the day after I released the former. I wanted to keep a good thing going. The recurring mental question throughout the next 15 months was "How can I top The Coming? Will people like the changes I'm making? What if this sequel bombs? What if I was wasting time" Can't explain how thoughts like that seeped in my mind, but they were there. While I tried to put on a pretty face for my journal updates, inside, I was feeling the pressure, and it was eating me up.
Because of this pressure I was putting on myself, everything in my world became about Rose of Eternity. See, at the time, in early 2006, NWN2 was scheduled to come out. It was eventually pushed back to an October release, or something like that, but I was always racing against the clock. I thought I had to get the game out before NWN came out, before people stopped caring around NWN1.
Because of this extra time constraint I thought I had, I began to ignore other things in life. If I had a weekend for development, by my fiance (well, girlfriend at the time) wanted me to go to some family function, I would come up with any excuse not to go, just to squeeze in another 5-6 hours of development. I stopped playing other video games entirely. I literally missed out on an entire generation of games for the XBOX, PS2, Gamecube, and PC. I just didn't have the time. I was all about Rose of Eternity.
Towards the end of development, I was beginning to get extreme panic feelings, and headaches. Still, I worked as hard as I could. I may have even had a nervous breakdown literally the month I released it. You can probably read about it here.
When both games were released, I turned into a vote whore. Meaning, if someone gave my game anything less than a 10, they damn well had better had a reason for it :) I always maintained a diplomatic prescence on the download pages, but I was very bitter about a lot of votes. Now that I look back at them (as I frequently do, to make sure I'm not making the same mistakes again), they were for the most part very valid. Heh, maybe I just grew up.
Once I was done with development of Cry The Beloved, my body didn't know how to handle it. I had been used to modding for the past 30 months in a row, but body was always used to doing something. Therefore, I always felt like I had to be doing something. I couldn't relax. Luckily (or un-luckily, depending on how you look at it), Alan Miranda came around with the offer to work on Mysteries of Westgate, which kept me busy for another year. After that, again, I just didn't know what to do with myself.
I gained a lot of weight. I had always been the skinny kid in high school, like, 130lbs soaking wet type stuff. Even in 2004, I was probably about 180lbs. Then, I began developing... Oatmeal cream pies became the stuff of legends. This corner store had this delicious chicken tender/french fries combo that I must have had at least 4 times a week for years. Then there were Saturdays, where the tradition was always to get popcorn chicken and potatoe wedges from KFC after getting a haircut, right before starting development for the day. I ballooned to about 230lbs, give or take.
Most importantly, I didn't spend as much time with my fiance as I could/should have. I don't think I have to elaborate on this at all...
So yeah, this entire experience has had it's ups and down, as things usually do. I've achieved a lot, at a great price. Luckily, I was able to turn my life around towards the end of 2007. I had already gotten back into games, playing through masterpieces such as Resident Evil 4 & Twilight Princess. I got an XBOX 360, and along with it, Halo 3, Modern Warfare, and Mass Effect. I was back! I started to remember what it was like to play other games with friends, and to be honest, some of my favorite memories of the end of the 2000's was playing various shooters online with friends.
Also, starting in March of 2007, I began a life changing movement. My fiance and I used to hang out with this one couple, and the guy went to the gym a lot, and offered to train us. I said, what the hell. 3 years later, and I would say that working out at the gym is in my top 5 of favorite things to do. I'm down to 200lbs, mostly muscle, and I'm eating extremely well. No, when I say extremely well, that's a big thing. For the first 27 years of my life, I pretty much didn't eat vegetables :) I also worked at McDonald's for 4 years, and guess what I ate 3 times a day for 4 years? :) Anyway, as I got older, family members with diabetes starting passing away, so it was a wake up call for me.
The biggest thing I learned however is not to let Rose of Eternity take over my life. Look, it's a big part of my life, and I have big plans for it, but I've learned to not beccome consumed with it. I know I may sound like a lunatic every day in my journal updates, but trust me, I was way worse years ago! I don't want people to think I'm not putting my all into this, I'm just saying, I'm not going to let it affect me the way it did years ago. At least, that's the plan. Let's see how I'm doing a few months from now :)
Today wasn't as productive as the last 4-5, but that's not to say that I didn't get a bunch of stuff done. I polished up a particular encounter, focusing on the placement. I wanted the player to literally get bum rushed as they run around this corner, and more importantly, have 2 of the custom enemies pull off their Unison Ability.After moving around the trigger a bunch of times, as well as the placement of said enemies, I felt god enough to move on.
With regards to the level I had to create the other day, I am very happy with how it came out. I of course need to add a bunch of props and such, but the core, I like. Now, some may remember in the beginning of last month, I said that I found a new way to make the set of areas I'm working on (which are already using the same structure set, giving it a cohesive look) more unique. Well, I came back to that idea today, and so far, things are looking good. There's even a story related reason as to why the areas look this way. It will be a lot of work to go back and add this thing, so that, I'll leave to nights when I'm having designer's block.
Speaking of which, I've having a bad case of it right now. I'm at a point where I could the PC their core custom ability. For years, I always knew how it would go, and when, but now that I'm actually implementing it, things are different. There's literally 3 different places it could happen, and I need to lock one of those down soon. Luckily, I have learned that it's best to leave such things alone until I come up with a good solution, instead of just muddling my way through it. In the interim, I can start to setup some of the next encounters, as well as that new custom enemy.
This one will be slightly more difficult, as I'm expecting it will involve a lot more scripting. With the last one, a lot of the abilities were already created, I just had to do a lot config related tasks (working with 2DA's and such). This time around, I'm pretty sure I'll be in the realm of overriding events and such. Meh, whatever. I'm never overly confident about most things, but when it comes to scripting, I always assume it will just work out. That's the one thing I am most comfortable with, and therefore, most confident. Let's hope I'm right about this.
STATE OF THE UNION
So, with roughly 6 months of development time in (including preliminary work during the BETA), I'm ready to look at things from the outside and evaluate the state of everything.
So, without a doubt, level creation was the biggest killer for me starting out. I knew it would be, but damn, there was one hell of a learning curve, especially with lighting. I can say with confidencce that I'm able to knock out interior areas at a vastly superior rate than when I first started. I can't say the same thing for exteriors, only because I've only built 2. Not enough data to come to a conclusion on it. But overall, things are much easier.
With regards to scripting, well, I never really had any issues starting out, and I'm not having any big ones right now. I've ported many of my systems over from my NWN games, and there are still systems to be scripted. I enjoy the scripting the most, and look forward to the creation of new systems.
Cutscene development is going pretty good as well. The cutscene system is similiar to the one used in the Djinni Toolset (for The Witcher), so I already had a pretty good idea of how to use it. The only lingering issues are adding sound effects and whatnot. But, those are things that should definitely be done towards the end of the development, when things are locked down.
Conversations are well... conversations :) I will of course need an editor at some point, and will bring on writers as well, but for now, I'm going solo. I am learning about new ways to make conversations more cinematic, but I'll get into that stuff later, as I actually implement it.
I could go on and on, but the point is, as expected, things are getting easier as time goes on. My output has definitely gone up in every category since I first started using the toolset. The past month or so, I feel like I was able to knock out a lot of content, and this month shouldn't be any different. The release of this game is still many months out, and I would never be so bold as to give a date. Even still, I definitely feel more confident about the game now, then I did even a month ago.
P.S. Federer lost to Soderling in the quarters of the French Open... Sigh...
Website contents copyright (c) 2006 by Leonard Bedner