Tuesday, February 17, 2015

Limb bounding box and rotation points

What I've been up to
I've been playing as usual.  One of my favorite projects that ended too soon is www.potter-bo.com, my harry potter site where you can create a character, play mini games, multiplayer quidditch, earn clothes, broomsticks, and wands, and sell them to other players.  All of these things are still functioning, but it was never flushed out to the extent I would have liked.  I wish I could continue the site, but since its all written in AS3, its hard to convince myself that its the right thing to do.  AS3, the programming language of adobe flash, is not only inefficient but its quickly dying out.  It's time to say good-bye.

The real problem is: there is no real successor to AS3.  Of course, everyone wants to talk about HTML5, but HTML5 is steeped so deep into javascript and it completely lacks object orientation.  Since the code needed to do a basic game is much more complex and lengthy than in AS3, that last point is especially bad.  Until HTML5 and object oriented programming come together, I don't think I am interested in learning.

One of the strangest phenomenon I have noticed: HTML5 is slow.  As slow, if not slower than AS3.  Of course, nothing is slower than adobe flash.  That is one of the cardinal rules of the internet.  So saying that HTML5 could be worse is nothing short of blasphemy.  But one only needs to browse the HTML5 art engines and HTML5 game tutorials to realize that its difficult if not impossible to make a complex game in HTML5 with a steady frame rate.



So for now I will continue with C# and my interest in programming for Windows 8.  So for fun, I am putting together my classic brooms online characters into C# Monogame.  I haven't gotten very far, but I would like to do it right as I might use them for multiple projects in the future.


Star Sky.  Sorta
I am still actively working on Star Sky: Liberty...  An open RPG version of my Windows 8 arcade shooter.  But little progress there.  You can collect credits from destroying ships, venturing further away from the single station to come across more difficult enemies, then spend the credits on items, ships, weapons, and weapon attachments you purchase at the station.  The cadvet?  I still haven't gotten the game to successfully save, nor have I got the co-op mode to work.  So it isn't going to be published anytime soon.

No, in reality I have barely worked on star sky.

I have done some non-game projects though.  Luckily, programming is not my day job as I am not very good at it.  For my day job, I am an eye doctor.  One of the things I've noticed while doing upgrades to my office is that certain things are oddly expensive.  For instance, the Visual Acuity chart that you read off of to measure how good your vision is...  Those cost at least $550, with some up to $1500.  This is the part where I take a cheap surface RT laptop and combine it with a cheap bluetooth keyboard to create my own chart for a fraction of the price.

And I am selling it online:  www.simpleacuity.com

Lss

Tuesday, September 16, 2014

Joyrider: Credits & Ship Upgrades

Take a look at the attached picture. There you will find the ultimate minimalist RPG experience: Items that can be replaced with stronger items that are bought and sold.

Joyrider is getting its first update soon, and that screenshot is from it.

I am adding a 'docked at space station' screen between every 3 levels in the game. This will allow you to relax a moment, regain your shields, and spend the in-game credits you have earned. Exactly what you'll be spending your credits on is not set in stone yet, but I already have multiple ships and weapons in the shop and hope to add more.

These 'station' visits are actually a step towards making this game an RPG. Of course, after removing the linear progression 'levels' from the game, it will need to be renamed and published under a different name. For now though, we can incorporate some RPG elements into an otherwise arcade-y game.

Lss

Sunday, September 14, 2014

Star Sky: Joyrider

I just submitted my first game to the Windows 8 store for approval. I call it joyrider.

Click Here to Get it From Windows Store

In this game, the player is given a small ship and is put up against 12 levels of other ships; sometimes fighting 10-20 enemy ships at a time. The game objectives unfolded as I experimented with asteroid-like space physics and a flexible ship/weapon system that could be used in a future RPG-esqe game. This game is a simple arcade shoot em up though, it certainly is not a 'digital world' game.

Joyrider is written in C# using the MonoGame module. I am finding it to be very enjoyable programming in C#, once I passed some original hurdles. It now comes as naturally to me as Actionscript3.

http://www.monogame.net/

Joyrider is a return to my multiplayer space shooter, Star Sky, but with a very key component missing... The multiplayer. I am using Joyrider to learn C#, but it has turned out really good, so I went ahead and submitted it for publishing to the Windows store.

Lss

Saturday, July 12, 2014

Design Concepts for Future Projects

I often want to make another game. I see it as an inevitability.

It is such a beautiful and natural thing to do, to delve into designing a game. To fantasize about making every detail just as I would like. It is euphoric. I hope it is something everyone gets to enjoy.

I can just take out a pen and paper and start drawing diagrams, tables, imagery, writing scripts for dialog, story, characters, notes for music, etc. I can lose myself for hours or days in such a feat. I just hope with all my heart I can make the ideas into substance someday.

Until then,

Lss

Thursday, February 28, 2013

Illegal Cyber Squatting by GoDaddy.com

I have been working on bringing all my sites back up the last week. Mostly this means getting my game servers up which have been offline for some time since I host these servers at my own home. I came across another problem though... I would like to describe it to you to help you not make the same mistake in the future and to ask you to please not support a website called godaddy.com.

My website, Xanthians Online, was registered to a certain domain name for the last 5-10 years. The domain name was extremely obscure and only made sense to those who were interested in a niche set of fantasy books about 'Xanth' written by Piers Anthony. You probably have not heard of these books. I ran a fansite since I was in 5th grade for fans of the series to come together and discuss the books. It was a great site, my very first website ever.

Last year, I missed the emails warning me to renew my domain for this website, and I lost the domain. Immediately after losing the domain, a company called GoDaddy bought the domain, even though they do not have any explicit reason to. This is referred to as cyber squatting and is it illegal. They buy the website that was accidentally put up for sale and then try to sell it back to the original owners for as much as they think they can get. They price it so that paying them is less expensive than suing them, because what they are doing is illegal.

Out of principle, I started filing a complaint with the organization that handles these cases before they go to court; the WIPO. After filling out strange complicated legal documents (incorrectly filling them out, I am sure) for about an hour, I tried to submit my complaint to the WIPO. It said that it failed due to me failing the 'human verification' at the bottom. The verification was extremely simple and I absolutely typed it in correctly, so there must be something wrong with the WIPO website. Sadly, I could not reload the page without losing an hours work filling in boxes here and there and typing my story. You can see the ridiculous, broken WIPO website here:

http://www.wipo.int/amc/en/domains/filing/udrp/eudrpcomplaint.jsp

I will not try to file the complaint because I know it will lead nowhere. Reading about it online, these organizations are in the pocket of large corporate entities like godaddy.com and the only real way to settle this without giving godaddy money is through the US court system which could cost thousands of dollars. I will be moving my website to xanthonline.net. Please do not support godaddy.com in any way.

Lss

Saturday, September 22, 2012

Apple

It has been a few years since I got a phone and its time to upgrade. I've been watching the new phones get announced the last few months and I have been excitedly waiting for a cool Windows Phone 8 device. WP8 is a gorgeous platform. So far we have seen a few good phones that utilize WP8, but all are heavy and bulky with large screens. /Sigh. I really like my 3.7" Droid screen. I don't want to 'upgrade' to something that is larger and weighs more. The Lumia 920 looks awesome. I love its features, I love its look. I would recommend it to others. Yet I am almost certain when I hold it in my hand next month I will hate its size. That leaves me with the iPhone 5. Oh Apple, how many hours has your terrible iTunes program wasted of my time? How many iPods have broke shortly after purchase, to be returned broken to me after warranty replacement? 4. That is how many. I have had bad experiences with Apple, their excessive marketing annoys me, their culture of greed annoys me, and the way people look up to Steve Jobs (a rather bad person) annoys me.

That being said, I recently bought some Apple stock and will probably buy an iPhone 5 this holiday season (to my possible regret). Why?

Stock
Their stock resembles a bubble, but even when it bursts the company will continue making phones, tablets, TV boxes, and computers. The company will survive. How much longer the bubble has left is hard to say; it might never pop as long as things continue the way they are now.

Phones
With phones, Apple doesn't have to innovate anymore. It is the standard. This quarter, innovations from other phones just seem like gimmicks. Features like NFC, image stabilization and wireless charging are just not important enough to people and won't be until Apple joins in. The Nokia Lumia 920 is awesome, but Apple controls the playing field, and this years rules are that we don't need new features all we need is a nice slim phone.

Apples competitors don't seem to be able to compete directly with the iphone. There is no AAA 3.7"-4.3" phones coming this season except the 4.3" HTC phone, which is much larger and heavier than Apples phone. Apple has obviously invested in making their phones small and light while competitors fail to keep up and/or choose to add bulk with new features. But Apple tells consumers what features (if any) are important, so Apple will continue to dominate the phone market during the next 2-3 years until competitors compress their devices.

Intel vs ARM
Right now Intel is on the path to building smaller, faster chips than ARM by around 2014. ARM is investing in the next thing in microprocessing. Intel is investing in the thing after the next thing. When this happens, if Apple is not an early adapter of these new chips, there will be a huge opportunity for Apple to lose control of the market. Or maybe intel will never make a comeback, but that is unlikely.

Tablets
Meanwhile in the tablet market, iOS as is is no match for Windows RT as a productivity and consumption platform, and I am interested to see where that goes. It is so hard to tell though, because Microsoft has so many hurdles to pass (start screen pushback on W8, lack of RT apps, lack of tablet branding, new interface people don't want to learn) despite having an amazing product. In the end the branding could make this a huge struggle for Microsoft. Everyone thinks apple 'just works'. Even if RT works better, there is always a learning curve when switching to new devices and almost everyone has used iOS and gets it now.

TV
Finally, Apple is likely to release a new iTV product and if they can wrestle good deals with cable networks the way they have dominated deals with the music industry and wireless carriers (Carriers give Apple a $400 subsidy for every phone, compared with just $250-$300 given to other smartphones) then iTV could be really popular. Right now there are some good TV devices out, but none that are truely polished and well known. There is a lot of opportunity. It is prime for Apples strategy of placing their brand on an emerging market and pushing their excellent marketing until their brand is synonymous with that market. I wish Microsoft would re-brand xbox more completely into a media center and add more cable network deals to their xbox service and they could prevent iTV from being Apples next big product, but they probably will not. Xbox is a great media center right now for TVs but it is still seen as a gaming console. The next media centers (iTV) will be seen as a REPLACEMENT to CABLE.

What does this have to do with programming multiplayer RPGs? Not much. I do think that the future of gaming relies heavily on Windows RT tablets and these TV/media center boxes though. As for my game, I have not had time to work on it over the summer.

Lss

Tuesday, February 21, 2012

Commentary on Zelda Series

In this post, I want to draw some attention to an article by Tevis Thompson about the Zelda series or the evolution of RPGs then its worth the read or skim:

http://tevisthompson.com/saving-zelda/

If you can't tell yet, WORG is meant to be an open world action RPG, which is the sort of game I like, which is why I mostly agree with this article.

I do not especially agree that Zelda should be 'harder', because the difficulty of modern games has been dictated by the modern player: We want easy games. I am annoyed by it too sometimes, but it is something we have to come to terms with for big titles like Zelda.

But what I got most out of his article was from this paragraph:

Modern Zeldas are translations of their 2D forbearers; they’ve never been fundamentally reconceived in 3D from the ground up. In choosing what elements made Zelda fundamentally Zelda, Nintendo chose poorly. They took the puzzles instead of the action, the conventions instead of the world, the items instead of the spirit.

You may feel insulted by his article because in your opinion, the fundemental Zelda is puzzles. Telon notes, Zelda I and II were devoid of puzzles. This is where a contention may created between old and new fans of the series, because older Zelda fans like myself see Zelda fundementally as an action open-world RPG with endless secrets and interests... But that just isn't the direction the series went.

Although Zelda is doing well financially still, I agree with the article that it would be doing better and be a higher quality game if it had stuck to its original fundementals. But that is difficult to tell...

Also arguably the technology/design saavy just was not there to make OoT more action centric like we see in action RPG's today... Which in my opinion explains the direction that Zelda has taken as a 'puzzle' and 'fetch quest' game.

Lss

Monday, January 30, 2012

How Not to Create a World

Yesterday I was playing on my favorite surivival minecraft server, and a new player to the server got killed twice in a row by another player. His kill logs popped up first, and then the complaining started.

"Why didn't I see the PKer on dynmap?? He isn't on the map."
"Because he is a donator, he can hide himself from the map"
"That's not fair he is giving $$ to be more powerful"
"If you don't think its fair then you should donate too and he won't be able to find you to kill you"
"He is contibuting to the server, he deserves it"

About 3-4 people on the server put in their 2 cents, telling the new player to deal with it and that donations "are to help the server". I was the only person who told him that I agree, but put a disclaimer to him that this server isn't nearly as bad as many others. Which was true, I know because I spent weeks looking for a minecraft server that fits all my personal specifications, and I found myself right back where I started. A good half of the servers I visited during those weeks have donator incentives that make them god-like (sometimes literally), admin powers, and unlimited items/blocks.

The next day I visited the forum of my minecraft server to see that the same newbie complaining about donators being able to make themselves invisible on the minimap had posted 2 threads asking to be unbanned. One thread was created after the other one was locked; it was locked after he mentioned donator incentives being unfair. Apparently, he had been 'whining' too much. Sorta true, I thought to myself... When I was online the day before he was going on about it quite a bit more than I would... And he must have continued doing that because I was not there when he was banned.

So why does this bother me so much? Maybe it is because I am a little jaded, having spent 5-10 years casually programming websites and multiplayer video games myself from scratch yet making only $25 or so a month despite all this work, which I put back into advertising the game, whereas a minecraft server has more advertising outlets like server listings. I see my minecraft server raking in $50 every few days and it makes me cringe. Maybe I feel bad for the original creator of minecraft, who is seeing none of the money (like many, this server is a cracked server, meaning you can play it with or without a purchased copy of minecraft) while some random guy is 'raking it in'. Maybe it is because I have run servers before for first person shooters, and I run servers for my own multiplayer games now, and I know that a lot of the time these are being hosted off of our home computers and are costing us $0 but making us gods in our own little world. I see people playing on this minecraft server and tip-toeing around the owner and moderators, kissing up to them, etc and think to myself, they don't really deserve this. The work they have put in does not deserve the reward they have been given (not that this is unusual in the U.S.). I wonder if maybe I should open my own server (I know it takes a lot less time than some of the players say it does), but it would be difficult being so bogged down with grad school, so I don't open one yet. I am far beyond getting thrills out of being 'powerful' in a game community anyways, so I would just be doing it for the $$ and enjoyment of playing with some new software. And I keep playing on this server, and I donate myself because I need those perks to enjoy the game to its fullest, but I feel a tinge of guilt knowing that I am contributing to something twisted. That leads me here to rant about it because we all know that if I posted this on my servers community forum that it would be ridiculed and locked.

I am not arguing against a free-to-play structure, but against original games being exploited for money by players hosting multiplayer servers. This is only worsened by the pay-to-win attitude that comes a long with many of these servers, which I am also strongly against.

Lss

Monday, January 16, 2012

Immersion

I want to draw attention to recent article by Raph Koster, known for his work in MMORPG's and MUD's as lead designer and his 'theory of fun'. His work as a game designer has helped mold the first 20 years of online RPG's, and hopefully we will see more of his influence in the future.

The article is about immersion, what it is, and how developers have lost video games immersion in exchange for a wider audience. You can read the first part of the article here and the second part here.

"Games didn’t start out immersive. Nobody was getting sucked into the world of Mancala or the intricate world building of Go. Oh, people could be mesmerized, certainly, or in a state of flow whilst playing. But they were not immersed in the sense of being transported to another world. For that we had books.

... "Things that we once considered essential to games drift in and out of fashion. And I think immersion is one of those.

"Immersion does not make a lot of sense in a mobile, interruptible world. It comes from spending hours at something. An the fact is that as games go mainstream, they are played in small bites far more often than they are played in long solo sessions. The market adapts — this reaches more people, so the budgets divert, the publishers’ attention diverts, the developers’ creative attention diverts."

I thought that the article was incredibly insightful and and chilling. It really does describe the current climate of MMOs and the way that things have changed from making immersible virtual worlds into making quick cash. It probably started in 2002 and 2003, when MEO was cancelled to be replaced by the linear LOTRO and World of Warcraft was released. And of course in 2004 when SWG was changed to be more mainstream.

The people in charge of these game companies used to be gamers, and once contributed to industry with interesting, immersive games. Now they squabble to follow mainstream market trends and copy previous successes to a T.

Heres something interesting that reveals some of Raph's feelings about the direction his industry has gone in:

I mourn. I mourn the gradual loss of deep immersion and the trappings of geekery that I love. I see the ways in which the worlds I once dove into headlong have become incredibly expensive endeavors, movies-with-button-presses far more invested in telling me their story, rather than letting me tell my own.

I truly feel sorry for Raph. Our industry deserves better, and he deserves better. He didn't write that because he wants pity, he wrote it because he is truely passionate about virtual worlds and it is difficult for someone like that to participate in today's gaming climate professionally. I have always been a game designer at heart and now I am very glad that I am going to optometry school instead of attempting to participate more heavily in the game industry. I often wonder why it has been so long since Raph has worked on a AAA mmorpg; he could probably get a decent job as a designer; he has a ton of experience. And I think I understand now that he is unwilling to sell out the way other MUD/game designers have.

I hope that WORG can someday be seen as a glimmer of hope in what has become a mechanical and calculating industry.

Lss

Saturday, January 14, 2012

Gamification

I have been reading an interesting set of powerpoint slides by Richard Bartle, who you may have heard of because he is the person who came up with the 4 types of gamers... Achievers, socializers, explorers, and killers. In his presentation he talks about what he calls 'Gamification'. Anything can be gamified by adding rewards to it, even if it is not intrinsically enjoyable. We see this done to get kids to do their homework, etc, and to draw RPGs out so the game lasts longer. Check out the article here.

It starts to get good a little before halfway through. Here is quote that you might need to read some of the power point before you get completely:

"Gamification is basically bribery... You reward someone for doing something that you want them to do. It can be regular or irregular. Regularity: “pull this handle 20 times and we’ll give you £1”. Examples of this is your everyday employment: Vanilla gamification. Irregularity: “pull this handle and there’s a 5% chance of winNing £1”. This is like gambling, which is advanced gamification. This is starting to look like a variable ratio reinforcement schedule, a psychological topic of study. You might know it as Operant conditioning, which is very interesting if you have stuff to sell.

"Game designers studiously avoid operant conditioning (for extrinsic rewards). It’s not really fun- fun is intrinsic, not extrinsic. It’s an admission of failure. It means the gameplay is too weak on its own. Also it’s only usable on naive players, and once they’ve learned the pattern, they avoid it. Finally, it’s immoral!"

I think that this is interesting at the least.... And very real in todays MMO climate. In other parts of the industry as well: With all the games coming out for phones, etc, operant conditioning is at its peak. I am sure a lot of you have played these games that are on phones these days, and they are not like the games that came out on the early game systems in the 90's, despite the controls being simple and graphics being 2D. Many of these top selling games have been molded into mathmatical perfection. Simplistic, quick, and with all those bells and whistles to peak your excitement at all the right times.

And we see this in MMOs today, big time. If you read the slide I put here on the right, it basically is a prediction by Bartle that casual gamers will eventually catch on to the conditioning they are being put through by these games, and become bored with them. That would mean the $$ that is to be made from using over-gamification would no longer be useful on the masses (just children, I suppose).

Lets take World of Warcraft for example; just because a lot of people play warcraft does not mean it is a good game. Firstly,warcraft'smarketing was astronomical. But aside from that,the vast majority ofwarcraftplayers have never encountered a game with so much gamification- reward systems based on operant psychological conditioning, and therefore they fall prey to it easily. One reason why they might not migrate to another warcraft-like game is because they are starting to see through the mundane meaningless conditioning system that warcraftused on them and they are unwilling to fall prey to another game in that same way.

I think that he is being a little too optimistic. But I am focusing 99% on intrinsic value for my game anyways. I want to create game play that makes activities in the game valuable on their own and according to each player.

Lss

Friday, January 13, 2012

amfPHP Woes

the simple and helpful amfPHP UI. 

I have finally finished going over all 22 of my PHP scripts that act as intermediaries between the game client and server.  Now its time to work on the client!  It has been taking a lot more time than I previously thought but it is still worth it.

It is amazing how messy the code was before compared to after integrating amfPHP.  I am very excited to see the change and can honestly say that my code is starting to look professional.

Major pieces of code and general
game structures are documented.

On the right is an excerpt from the games documentation.  I have been documenting information about the creation of this game so that in the distant future I can continue work on the game at my leisure, and so that another programmer could take over or assist with the project someday. I will do a blog post about my views on documenting sometime.  You might also notice it says "grass1" as a variable being sent into amfPHP.  That is a discrepancy from mapping not being completed.  Right now, every area always has grass.  Eventually I would like there to be several backgrounds to choose from for different parts of a world.

Lss

Sunday, January 8, 2012

Client to Game Database Communication and amfPHP

Client side scripts as done in this
tutorial, which I do not recommend
as it is outdated.

Today I am going to post a bit about how the game client communicates with the game database.  It is going to be pretty technical.

WORG will feature a ton of information from the games database, and the client will be constantly communicating with the server to update each other on what is going on in the game world.  More than ever, I needed a good way for the client and server database to communicate, but until today I lazied it up using the same old newbie URL calling.

I am not very good at adopting 3rd party scripts, but in this case it was incredibly easy.  Easier than doing it the traditional method, in fact.  I should have done this years ago.  I am now using amfPHP, and this is not a real review of it as I am not a real programmer, technically speaking, but wow is it handy.

Before explaining how amazing amfPHP is, let me explain how I used to have my client software communicate with my servers database.  Using traditional URL calls, the client would send any variables needed to a PHP file on my website.  This URL call would be 10-15 lines long, depending on how many variables are being sent because each variable had to be given a name and a value in its own line on the client code.  Variables could be string only, so if I wanted to send an array I would need to first convert it to a string.  Most of the time they are arrays, often they are 3D arrays, and I have never been able to get the serialize() function in AS3 to work for me, so I combine the array manually using .join() and .split().  If you are a professional programmer, you are laughing right about now.

The PHP file takes the variables and looks at one in particular, $request.  $request tells my PHP files what my client wants to do...  There are just so many actions at this point in my games that clients need to do that I did not want each action to be associated with its own PHP file, so I try to group them and then within the PHP use $request to split up each action.  It worked pretty well.  But now we have this intermediary variable that was sent from the client, and it may or may not be named the same name as it is in the client, and it may or may not be named the same name as in the server database.  Usually not.  I would decode the array using split, play with the files, save them to the database, request things from the database, encode those arrays into strings with join, and using variables like &var=value&var2=value2 send them back to the client.  The client would have to once again split up the arrays etc...

Super messy.  And difficult to debug because if I want to test the PHP I have to manually type in variables and values into the URL, and remember all of the variables, and include the $request, and also a $debug=1 because I need to see details that shouldnt normally be shown to the client.  And its easy to forget the variables names when you are debugging!!  Especially because they are arbitrary... They are often not the names used in the client or on the database.

But no longer!  I have known I needed to update this system for a while now...  Ever since I made a script I call MonkeyShark which interfaces mediamonkey and grooveshark's playlist and media libraries.  Grooveshark had this beautiful API to work with, which is essentially a way for 3rd parties (clients) to communicate with the grooveshark database.  You could send requests to it and it would reply using multidimensional (5+) arrays that were very standardized and easy to use.  Why can't I have that??

The interface allows you to test your
PHP scripts with ease.

And now I do!  Not only have I totally cut out a variable from the PHP intermediary, but the client side script, which you can see in the picture to the left here, is about 2 lines long of very clean code that looks much like a simple function call.  Compare that to what I used to use, 10 or so messy lines of traditional URL retrieval.  And look at this great interface, it is so easy to test my PHP.

To sum up how it works, because this post is running a little long...  amfPHP basically allows my client to call to PHP functions as if they were just another function in my client.

I am now converting all my old PHP scripts for Mario, World Builder, and WORG to amfPHP.  I meant to do debugging today, but this is some serious code optimization and is also very important part of my current debugging phase.  Not using amfPHP would have driven WORG out of control with messy code.

Lss

Wednesday, January 4, 2012

Dynamic Warfront & Clans

WORG's very first map.  Black represents
one low level clan, and red represents
another.  Can you guess where the red
clans stronghold is?
Warfront
What you see to your right doesn't look like much, but it is a visual representation of this world beginning to come to life.  Everything in this post is already in the game, although I must admit it is pretty buggy.

I have recently programmed in the preliminary code to control the movement of NPCs, Tree Species, and Clans across the game world.  Each world is broken into a 20x20 grid like the one you see here and each piece of the grid is up for grabs by clans.  Clans choose certain zones as strongholds and focus their forces at these strongholds, engaging other nearby clans in battle.

Clans are Unique
Clans are dynamic groups of NPC's with personalities and traits that dictate their movements in an inter-clan war for territory.  So far there are several traits in the server code that are controlling the clans activities...
  1. Civil Unrest controls how likely the clan is to split up into 2 clan groups, one with (Rebel) at its end.
  2. Arrogance controls how likely the clan is to choose a target stronghold to attack which is currently owned by a clan with higher level and momentum.
  3. Aggression controls how likely a clan is to attack wandering players or go to war with other clans.
  4. Wanderlust controls how nomadic the clan is, if the clan has a high wanderlust they will change their stronghold more often.
  5. Level controls how powerful the clans NPCs tend to be.
  6. Momentum controls how well the clan is fairing in war against other clans.
  7. Professional Preference controls what types of professions NPCs of that clan tend to be.
  8. Name Loyalty controls how likely a clan is to change their name.  Rebel clans have a very low loyalty to their name and will change it quickly.  In the future, I hope to make it possible for players to influence the choice of their favorite clans name, and even become the leader of that clan.
NPCs Travel and Battle
Even when players are not playing WORG, the NPCs are battling against each other for control of strongholds and zones.  NPCs tend to stay close to their stronghold, and if that stronghold moves then the NPC will attempt to move with it, travelling across zones.  If the NPC battles with another NPC or with a player and loses, they will die and that specific NPC will be gone from the world forever.

Here is a newer map with 4 clans.  The
person symbols are strongholds, the
shield is a town, the lightning is a
clan's target for their moving stronghold. 
Players Influence the Outcome of Clan Warfare
By killing clan members you harm that clan.  If you and your friends target a clan long enough, you might even drive it out of existence entirely.  This process could take months, however,  And other players who have invested time in building reputation with the clan you hope to destroy will no doubt work to stop you.

Right now this is all in the game, except for reputation building between players and clans.  This is a huge part of what I have been hard at working doing over the winter break, and I am not going to get another chance to work on the game until February.  In February I will be focusing on bug fixes before working on network play.

A note about these Maps
The maps I show pictures of in this blog post are of day 0.  As time passes, battlefronts will become more rigid because the zones surrounded by enemy influence will fall easier than the ones surrounded by allies.

Until then,

Lss

Sunday, December 18, 2011

Loading Zones

Let me try to elaborate on where I am in the games development right now, as I feel I have not discussed that in a while on this blog.



I have just completed the zoning system for the default world.  There is only 1 world in the game right now, but it would be easy to add more.  The games first world is split up into blocks, and the players view follows the character around, keeping the character centered on the screen unless he is up against the sides of that zone.  When you reach the edge of the zone and push up against the side, the game pauses for 1 second as it swipes over to the next zone.  I tried to make this effect as much like Zelda 3 as possible from SNES.  


There will not be loading screens between zones, thanks to preloading of the 4 surrounding zones.  I have found however that there is sometimes a short period of time when when you first enter a zone that you cannot enter a new zone.  This is because the surrounding zones have not finished preloading yet.  I think this is still vastly superior to a system like that of my last big online game, CND.  The sliding into the new zone also creates a unique effect that few games have used since Zelda.


Here is an overview of my progress so far.  I tried to put it in order of when I did what:

I know this is a boring post so here is a comic.
  1. Map making client
  2. Game client loads in map
  3. Game client loads in player
  4. Player basic movement
  5. Player collision with map/walkable areas
  6. Screen centers on player
  7. NPCs in game
  8. NPCs wander around
  9. Action.as allows for actions such as swinging a sword
  10. Added fireball action
  11. Moved data for actions to webserver
  12. Moved data for NPCs to webserver
  13. NPC Perma-death / replaced by new NPC
  14. Worked heavily on Mario World Builder
    1. Tons of bug fixes
    2. Tile System totally overhauled
    3. Multi-select groups of tiles at a time
  15. Decided to use Mario World Builder for both WORG2 and Mario2
  16. Adjusted World Builder to work with WORG
  17. Adjusted WORG to work with World Builder maps (still no collision with world tiles)
  18. Overhaul of classes and re-organization of code
  19. Major bug fixes
  20. Reprogrammed CharacterVisual.as classes entirely... Now based on spritesheets
  21. Wrote 5~ pages of lore for world and class backgrounds
  22. Decided on a combat system and drew out classes/combat structure
  23. Put classes and other data into webserver database
  24. Re-zoning in game
  25. Re-zoning with zelda-like sweeping effect
So whats coming next?  Here are 4 things I have in mind right now, in order of how I plan to execute them:
  1. Assign classes to NPCs so they use different skills
  2. Empty zones self-populate with trees and NPCs
  3. NPCs at further zones are higher level
  4. Bug Fixes (Esp. collision detection with map / Improvements to World Builder FLA)
Sadly I do not think I will be able to get through all these things this quarter because I only have a couple weeks off to think about this and then I am back to grad school.  However, I do hope to have these 4 things done by Spring and to start working on Multiplayer.  Oh, and I have like 20 topics for blog posts written down somewhere... Haha.

Lss

Data Management

the action table, this is where the magic
happens, literally.
So as I continue developing my combat and class system in my mind, I have been starting to move some of it to my games database.  When I say game database, what I am talking about is my webservers mySQL databases, which are accessed in game via php.


I am excited to share these tables related to this project that I current have in my database.  I created some scripts on cnd-online.net to make it easier for me and other administrators of the site to make modifications to these tables...  The thought being that if the tables are saved on my webhost and easily accessible via the website then it will be much easier to make modifications in the future when I am not feeling like re-compiling the finished game over and over to do simple things like add or modify skills, classes, character visuals, etc.  Likewise, my moderators on the site can make changes if they are needed, such as nerfing a skill that is overpowered, etc.


I can't help but notice that even in the AAA MMORPGs they have to bring the servers down just for some simple updates to how much damage a spell does, etc.  I find that annoying.  In fact, in the ideal Online RPG, skills and classes would be set up to balance themselves automatically.  I have a lot of ideas on how to do that, and I may bring them into this game (especially because the open class system I am using in this game will be difficult to balance), but that will have to be left for another blog post.


the character sheet table contains the information of
the hundreds of playable characters and creatures
So lets go over some of these tables, shall we?  In the top right we have the actions table, where spells and skills are carried out.  It is one of the more complex tables because I really wanted to make spells vary.  For instance, using what is already established here in the game and on this table, you could have a skill fire a spell which floats in front of the player for 1 second, then explodes in all directions.  Or how about one that fires at the enemy, and when it hits the enemy it fires back at you and heals you when it hits you.  How about one that shoots a strong projectile straight ahead but has poor homing capabilities so is less likely to hit the target?  Or one that slowly accelerates forward, and if it doesn't hit the enemy within a few seconds comes back to you?  It is all possible because of the Action.as class and this handy database.


the attributes table, this is where you 'level up'
 To the left here is a table to hold the attributes.  In this game, attribute points are everything (this is especially true since there is no item or inventory system in the game yet, Ha!).  They decide what your profession is, what your skills are, and how powerful you are.  You can choose to raise one of your attribute points each time you level up.


Below this text is the skills table.  It is pretty lonely right now as I still just have two skills in the game, a simple swinging of a sword and a fireball attack.  I just added this skills table in tonight because I wanted my NPC's to be a bit more functional:  Before tonight they would always swing a sword at me in retaliation, and I would only have the Fireball spell.  Now NPC's are assigned a profession and they use the skill associated with that profession.  So since there is just two skills, all the magic users are shooting fireballs and the other professions are swinging a sword.  :-)


the skills table contains just two skills right now, these two.
Finally is the professions table, below.  This  is where information about each class you can play as is stored, including a description to help players choose a class and for the game's future website to catalog the possible classes you can play as.  I say class in its loosest sense.  I believe strongly that in a real virtual world that there are no classes, but instead various choices of paths you can take.  Players should be free to mix and match their choices as they please.  That is what a true sandbox is like.  




the professions table.
If you click on this image you will get a little hint at one of my chosen professions for this game, the Elicitator.  The name means to bring out the best or to motivate others, which is why the Elicitator is a buffer.  I want to bring varied and interesting classes to this game.  This may mean that each class will only start out with one or two spells, but since you can mix and match classes this will not really be a problem.  The silly thing is that in most games, players end up just using one or two spells anyways.  When you are designing an indie game you cannot afford to make content that people are not going to or are unable to experience.  That is why it is important that each skill put into the game is utilized by players and there are no 'useless skills'.


Lss

Friday, December 2, 2011

Roles in Multi-player RPGs

When making a games combat, there are some very key decisions to be made about roles in combat.  Typically, the 'Holy Trinity' is used in MMORPG combat:  The tank takes damage, healer heals warrior, nuker kills the bad guys.


In this article I will be taking a break from talking about the technicalities of making my RPG and discussing its future combat gameplay.

A quote by someone; not me.
So where did the holy trinity come from?  In Dungeons and Dragons I don't remember ever rolling to see whether the warrior was maintaining aggro.  In fact, if you go into a difficult combat in D&D, the last thing you want to do as a warrior is try to get EVERYONE attacking just you.  That's suicide even if you are tougher than anyone else (because you aren't tougher to the extreme that the Holy Trinity requires, and the healer couldn't keep up with that damage).  It's generally a good thing for damage to get spread around a decent bit in D&D.


So where does the 'holy trinity' 3-role system come from?  It evolved in early MMO's such as Everquest.  Everquest was developed with a D&D class system in mind and there was no intention for having the holy trinity within the game.  However, the 3-roles were an inevitability as players got into higher end raiding and the need and availability of specialization increased.  This level of specialization is simply not available in D&D...  Probably due to healing spells not being as powerful, and all classes having larger amounts of health and no mana regeneration.

The holy trinity does not make sense on most levels
It is unrealistic to pretty much any setting, whether you are in a fantasy world or flying around in spaceships.  It may break immersion to some degree.

But even more problematic is making your gameplay unique and interesting under a system that has been used by at least 50 major online RPG's by now.  As an indie developer it is incredibly important that every feature in your game is in itself unique and fun gameplay...  The holy trinity is not. 

Roles help build a connection between players and their game
So should an indie developer scrap the Holy Trinity?  Here is an article that thinks so, and it outlines how to create roles without the Holy Trinity.  In the place of a 3-role system it wants to add several more features to create many new roles for players.  Many of these new features would require an AAA budget to incorporate.  Given the poor economy of 2011, no AAA game designer would touch something that has not already been proven to work several times over... So I am not even sure who this article is addressing.

Let me discuss for a moment why roles are important.  Simply put, they work on a social level.  Players really enjoy feeling 'needed'.  I have actually read about and experienced myself friends talking about how good it felt when their group 'needed' them.  Girls especially seem to become territorial when someone with the same role as their character tries to join the group.  Ie, if your group has a warrior already and another warrior joins, they will be aggressive or passive-aggressive towards the other warrior.  You see this in normal social circles in real life as well.  If you are the jester of your group of friends and another person shows up who also enjoys entertaining everyone, you may feel threatened by them.  The sense of having a role within your group builds a connection whether its in a circle of friends in real life or in-game.


Conclusion
I would like to move away from the holy trinity, but the concept of it is compelling and I think it is something that developers can evolve as oppose to completely remove.  Having ROLES that make players feel NEEDED is good game development.  The holy trinity is just one way of doing this.  It is the job of an indie multiplayer RPG developer to find simple yet effective ways of creating roles that fall outside the mainstream 'holy trinity'.

I will explain how my RPG will do this in a future article.

Lss

Friday, November 4, 2011

Merging Ideas

Over the last few weeks I have been finding time to program again, with a focus on my Mario World game...  Or more specifically, the World Builder for this game, which I will soon be using for my unnamed RPG project, WORG, as well.  Hence why I am back at the blog!  I will have a video overview and some information on the blog coming soon about the new world builder.


This character sprite sheet is automatically chopped up so
the characters are instantly playable using the
'characterVisual' class.
This post will be deticated to the new character importing system.  As you can see in the picture to the right, I have many sheets with characters like these ones to be imported into the game.  I wanted to create an easy way to get a lot of characters into the game quickly, and thats when I created my CharacterVisual class, or 'sheet sprite' system.  What it does is it takes sheets like this one and chops them up automatically into characters so that I do not have to do it manually in flash.


This will make it easier for players to create custom characters and NPCs in the future.  I think I will keep the ability to upload these sheets as administrative-only though, for quality control.


Below is the function that I found online which makes it very easy to extract individual frames from this larger image.
private function cropBitmapData(sourceBitmapData:BitmapData, startPoint:Point, width:Number, height:Number):BitmapData {   var croppedBD:BitmapData = new BitmapData(width, height);   croppedBD.copyPixels(sourceBitmapData, new Rectangle(startPoint.x, startPoint.y, width, height), new Point(0, 0));   return croppedBD.clone();   croppedBD.dispose();}

You can read about it more on this webpage.  This method of importing characters makes importing new characters easy and is vastly superior to my old method of having a 'character' movieclip, and placing each character on a different frame of this movieclip, then in a movieclip within that movieclip having different frames for the different walking animations.  Not only is this new method less resource intensive, it will be much easier to import characters.   I have already imported over 100 characters, and have spent maybe 1/20th of the time doing it as I did in my Chip N Dales MMORPG game!!!


Lss

Friday, August 26, 2011

Perma-NPC's

 Making a game solo on a tiny time budget isn't easy.  It requires you to take a new path in almost every decision you make, because every moment spent building something that's already been done is essentially not good enough.  How could a single programmer compete directly with real developers?  Uniqueness is the only way.

Which makes it even harder for this game, because I want it to feel like a traditional RPG.  I will be adding twists as I go and trying to spend as little time as possible on things that have already been done.  Thats when I came across This Page.  A list of over 7,000 bad-ass fantasy names.


So they have now been loaded into a database for my game, and marked with a timestamp when they are used so not to use them multiple times.  Now when an NPC is generated in the game, it pulls a name from that list and assigns it a visual (and in the future, other stats).  This newly formed NPC is added to another database where other NPC's information sits.  When players play the game, they will interact with these generated NPCs.  When an NPC dies, it will not respawn- Instead, a new NPC will be generated to replace it.


So what does that do for the game?  Well, nothing yet.  But it could have some major implications for where the game heads from here, because now I am committed to this path.  Now I will be looking for ways to invest players into NPC's that might not always be around.  Here are some wild ideas:
  • NPC's have an opinion on you depending on your actions.  It takes hard work to get an NPC to like you, but you benefit in different ways from this.
  • When another NPC/player kills an NPC that likes you you can choose to carry that high opinion on to the NPCs friends/family by avenging the NPC's death
  • Bosses could still exist but would always be unique
  • Certain NPC's that are especially powerful, live in high player population areas and well liked by players would become targets for players to try and kill
The above are definitely not plans; they are just things I came up with as I am typing and will probably make a point to not look at them again.  But these are the possibilities and it is choices like this that makes an RPG stand out.  But for now I will be content with killing all of the NPC's that have dumb names, and leaving the ones with cool names and cool looking sprites to live.  That is simple, but in a strange way I am already feeling like this game is a true world where I have an impact.  What bigger impact is there than world permanence?  Isn't it ironic that NPC impermanence creates world permanence?

Thursday, August 18, 2011

Combat Decisions

Choosing a structure for combat is important because it builds the general feel of the game. For this game, I have opted for something that resembles the popular phone game zenonia. I would say that this is a mix between traditional RPGs and diablo.

I wanted fast-paced combat with a lot of visual cover-ups, because this is an online game and there are several different character avatars and I do not want to create sprites unique to every avatar performing every combat move. So there has to be a lot of explosions and visuals that will cover up the characters underneath. This probably means taking arcade style aim is out (because we want our characters to be difficult to see), which is good anyways because having to aim at enemies doesn't work well with online rpgs because of latency issues. Latency issues means we will need a targetting system like those seen in most RPGs. But the game will still feel like an arcade game because of the fast pacing, auto-targetting and over the top (character covering) visuals. I prefer my games to have an arcade, retro feel. I also like them to not require a mouse because two hands on the keyboard is more conducive to typing, and encourages chat.

Auto-Targetting
Our player tar

a red circle appears under the closest
enemy- the one you have selected.
gets NPCs and objects of interests using a simple check to see what object is cloest to our player. I quickly noticed that this causes problems because our target often ends up being behind the player while intuitively we would hope to be targetting an enemy that is standing in front of the player. So I added a modifier to my function that checks distances between things so that it considers a point 50 pixels in front of the player (depending on the direction the player faces). Also, dead NPCs are given less priority (their 'distance' is multiplied by 5).

Adding Depth

Classic games that are built on twitch (player skill at aiming) arguably do not need as much depth because the player can enjoy their improvement over time in their aim, etc. But since my game will feature targetting instead of manual aiming, it will need to capture depth that RPGs tend to have. Even more so, because unlike many RPGs this game will primarily use an auto-targetting system, so we will not have that added strategy in choosing targets that many RPGs have. In the future I may wish to add this functionality, but right now I am seeing it as an unnecessary complication.

RPG's Are Complicated For a Reason

That reason is that learning is fun. Players want to feel like they have achieved something and that they are doing so more efficiently than the normal player (or at least more efficiently than they did last time they played). Although an RPG is not twitch based, it is important that players still feel that they are improving at the game. Watching their characters improve is simply not enough, because then the game feels like a timesink that anyone could do. Which makes you feel better? Knowing that you spent X amount of time more in a game than a friend, or that you are X amount better at a game than a friend?

This translates to complex combat systems that play off of realistic/intuitive ideas such as: Killing enemy healers and nukers before tanks, conditions such as poison that drain life over time if not cured, positioning your player strategically, switching poses/stances to match the fight, complex skill trees, attributes, resists, etc.

Why Aren't there More Indie RPG Games?Well, I already answered my own question: RPG's are really complex! Anybody can program a hunting game where you have to quickly shoot ducks that pop out behind bushes, etc. And those games are easy to program and can be very rewarding to play. They work off of the players own progression of improvement of their hand/eye coordination to make the game fun. RPG's need a lot of depth to make up for this areas where it lacks.

So when you take on a RPG project you have to realize what you are getting in to. How can one add depth and complexity to an RPG's gameplay while minimizing the complexity of it's code? Well, I am not entirely sure yet myself. But I have 3 strategies that I am thinking of using right now:


  1. Replace traditional life/mana bars with a new system that is easy to program but will add complexity to the game. (my HAMS system) 
  2. Dumb down attributes, classes, skill trees, etc into a system that is both functional and easy to code. (my skillpoints system) 
  3. Lower the games expected audience age. A game like this will never reach the same realistic complexity that someone would expect from current MMORPGs or Dungeons & Dragons, and setting realistic goals is important. 
I will be going into more detail about points 1 and 2 when appropriate, but for now we need to think about programming those first few skills!

Thursday, August 11, 2011

Wandering NPCs

Click the link in the main text to play
There really isn't a game yet, so I suppose it depends on your definition of playable...  But I am going to post it anyways.  Try this example of the game, the first build ever of my new game.


Why So Many NPCs?
In this example, there are many many NPCs wandering around.  I had some fun increasing the amount of NPCs to see what the game can handle before it starts to slow down, and you should get a totally normal framerate with that many NPCs.  In fact, I was able to go up to 400 NPCs before I started seeing the framerate drop.  Once all the other elements of the game are added in (especially multiplayer networking) this won't be the case, but right now it was fun to see so many characters on the screen at once without lag.  Lag is a serious problem when you are coding a game with AS3, especially one that is online multiplayer with real time combat (as opposed to turn based combat).  I will definitely write another article about that in the future.


Class Structure & Pathfinding
So I started working on my client, obviously, and quickly flushed out a movement system for the character.  The character you control is of class 'Player' which is extended from class 'Character'.  Class 'NPC' also extends class 'Character'.  I can already tell that the class 'Character' is going to be one of my biggest, messiest classes that the game revolves around.


Because I want both NPCs and Players to be capable of pathfinding to a given spot on the map, all my movement and pathfinding has to be part of the Character class.  In fact, right now my player class is very very small.  It simply checks to see what keys the user is pressing, and passes that on to the Character class via an (x,y) point variable, p.  p.x=-1 is analogous to pressing the left arrow key, etc.  Theres only about 10 lines of functional code in class Player so far.


I was seriously considering spending a LOT of time on this and making sure the pathfinding algorithm was perfect.  To do that I would need 3rd party code, and I considered it a while.  I think in the future I will need to adopt 3rd party code and a better system.  Right now, the Character class can be told to go to a tile, but if there is an object blocking it's way it will fail to reach its intended target.  If I choose to make a quest system, cinematic system, or multiplayer content then this could be a serious problem.  Characters would constantly get stuck on things, and then I would have to put in some quick fix code to make the character jump to their intended location.  It would be buggy and messy looking.  So its something to keep in mind for the future.


Click for full size image.  This diagram shows real results
from use of my wander radius code
Wander Radius
So I have a basic NPC movement code that moves the NPC to their target location (part of the Character class).  I still needed to add in code to have the NPCs decide where to walk.  Thats when I did my wander radius thing that you can read about in the picture attached to the right.


The NPC wanders randomly around, and if they move too far from their origin point then they will only wander in directions towards that point.  A value I call wanderRadius controls how far away from that point they like to wander.  The code for this is about 50 lines long.


Physics
I am opting to use real physics like I usually do for this game.  So there is acceleration, velocity, and location variables for each object (players, NPCs, and moving spells) in the game.  But I have the friction coefficient up so high right now (0.5 per looping frame) and the acceleration so high (2) that you cannot tell.  I chose to use real physics because I know I might want to have some slippery ice floor or something of that sort in the future in the game.  :-)


Lss