Back on Track

I’ve been fixing things with bbgFramework off and on but for the most part have not had time nor have I had the effort to put forth towards the game in the last week or so. Apparently I do seem to have a following of some sort, so I do apologize for the lack of updates. I will, from now on, try to post more often if at least once a week. If I could get some comments on the posts, then the direct feedback could help in this endeavor.

As I continue to work on the in-game Browser, I continue having problems with it. It seems to be doubling itself and reiterating the session, which makes my use of it for a shopping cart for store websites to buy stuff from is at a stand still. As for normal websites that are used for hacking and exploratory information in the game, they are working just fine. As I’ve mentioned before, the domain is in the database and the rest of the URI loads physical files on the server which creates the fictional site. My idea was to create several fake search engines that would help users be able to find specific sites or certain info they need (perhaps to solve a mission or finish a puzzle, etc). Obviously, this adds to the realism of the game and a much appreciated aspect to help in gameplay. Now, for domains a quick search through the database would be as simple as using the LIKE operator and replacing spaces with percent signs (%), but since the bulk of information lies within the physical files, I would also need to do physical searches which are usually much slower and I tend to avoid anything not native to PHP.

So, herein lies the problem… I would first do a database query on the domains to return any information then do a search through each and every physical file to find anything else. The results would be sorted by how closely they match and attempt to be a organic as possible which with separate storing patterns nulls and voids the entire organic part of the equation. PHP is not very helpful when it comes to filesystems, well to a point, but not one I want to attempt to use it for. I could use file_get_contents() for each and every file but that would be a long and strenuous process especially for every user. I could possibly create single flat files for entire sites to search through instead but still kind of silly.

No, unfortunately, it seems the best way to create my fictitious wide web would to have all information in the database. At the moment, I have URL inputs from the user stripped down to domains and then search rest of their URI to retrieve a the specific template file for viewing. Instead I could have each and every part of the site on different rows which has specific site information and places them into an entity array for the template, the root domain row for the site will have a style sheet to load and a certain template to load. This way all the information for the site will be displayed onto some kind of global predefined template and loaded with its own stylesheet, all the images for the site will pulled via the stylesheet as well. That way all the sites will look different but are technically designed the same way.

This does raise another problem for multilingual usage. I have yet to implement anything more than English but the framework does have the ability. If I did use LANG constants for the site info, the search QUERY in the database would pretty much be dead, but then again… most websites out there aren’t even multilingual or, if they are, usually use the country’s respective TLD instead or perhaps another server or a GET that mentions the site should be run in another language. Although, we are starting to see that locale (especially in PHP6) is actually going to start playing a part in web applications but, for the sake of argument, we will put it all in English into the database.

So basically, I will have two tables… one for the domain’s homepages with a primary id, it’s stylesheet, what template it will use and stats for hacking… and another table for each website page with columns for all info the template will use automatically and the id that refers back to the domain row. Each row will also have a Title text.

Wow this post was kind of rambling but hey maybe its what you wanted to hear. Sorry if you couldn’t understand some of it. Next post, I will probably get into the ideas I have for the game and the big picture going on with the game. There are a few people out there that I have gone into great detail with and they love it so stay tuned. You should see a post this Friday.

Yes, and it’s much more difficult than I had imagined.

Until now, using the modular system in the bbgFramework proved to make it a cinch with one exception that I will explain later. The browser module processes the visual window frame complete with back, forward, etc buttons, status and address bar.

The address bar or URI then process any URL input into something readable for the database. The database table thus far consists of domain names as the PRIMARY index with title, level and type columns to supplement. Processed URLs are stripped of protocol and www. if provided which means subdomains are considered separate indexes. The type column is of 4 different values so far: official, website, store and server:

  • If the entity type is official then it loads the actual website into the Object frame, which is (at the moment) only the ctrlhack forums and wiki pages. This is so the user can go to the forums within the game.
  • For website, the browser will process the entire short-form of the URL and load the fictitious website into the browser. All of the websites are hard-coded files in a directory to grab from. So if the user goes to somesite.com/path/to/something.html or http://www.somesite.com/about, it will load /www/somesite.com/path/to/something.tpl or /www/somesite.com/index.tpl respectively. Although, this process is very fast at loading, as it uses Smarty’s {include} syntax, hopefully, I’ll be able to come up with something more dynamic in the future especially something not using hard-coded files. This may actually happen as I come up with all the fictitious websites as the story and game background develop.
  • Server types will be used later but not by the browser module. They will be a separate entity with completely different options and visual appeal. As for an insight to what I mean… think of the Gibson hack of the supercomputer in Hackers (1995).
  • As for store types, the engine dynamically produces the list of items available with their respective stats. There is a working search feature using a crude method of MYSQL’s LIKE operator. Like some of the fictitious world wide web with normal websites, the stores will mimic a lot of real internet commerce sites like newegg.com and amazon.com and with that they will use a shopping cart for hardware purchases (for your server) which brings me to the exception I mentioned earlier I found for the framework .

Using the magic function: __get() made me realize I cannot use recursive arrays, so my plans to use the Session object for the shopping cart make it all but easy. This has actually been my stopping point for the last few days because I am unable to figure out how to do this in a logical manner otherwise. At the same time, I cannot think of anything to move on to as I have already completed skill manipulation, settings, menubars, etc. I do still need to work on the GUI but I didn’t want to start on the stylizing until I had the basic skeleton to all the major features first.

So I’ll move on at least in theory…

Another interesting note on the fictitious web is that every brand name and company in the game will have servers and websites for you to check out as a user and even hack. Some of them may even be apart of the ongoing story. I want the game to be extremely open and every user have the ability to explore and discover things without penalties. Actually hacking websites they find through their explorations may prove fatal if they are not careful but there will be plenty of tools (programs) for them to use prior to figure out their target beforehand.

So that’s the basic progress of the game and the major feats of the browser thus far. Keep in mind, this may change and the game is always open to suggestions and feature requests.

Other suggestions that have come to mind in the past month or so are…

  1. …having a sort of government built into the game with a Most Wanted list for cyberterrorists and the like. There will also be an equally opposite campaign for the black hats out there so there are also bounties for them to capture based on good-alignment hackers.
  2. …a sort of podcast or “webisode” that is actively encouraging hacks and giving out tips from the view of a hacker group that is very renown in the game. This is sort of based on the “Hack the Planet” show from the Hackers movie.
  3. …an on-going story that develops as the hackers go. An example of what I mean would be, lets say the ABC Company gets hacked regularly by the users, and they are unable to maintain themselves and eventually lose clientele, are bought out by XYZ Company who then revamps their security and installs A.I. bots on with router configurations to block flood traffic. This means that the once weak ABC Company is now upgraded into a formidable target with more than likely better rewards. (ie; credit cards, client information, etc.)

Anyway, that’s what has been on my mind… Now I am going to watch Watchmen again on the HiDef and enjoy myself. Hopefully, afterwords, I’ll figure out a place to start coding again.

Thanks for reading and please let me know what you think, or if you have any suggestions.

The first public version of the Framework has been released today. If you’ve been waiting all of your life for a drop-in solution to browser-based gaming development, then here it is… ha! There is a Wiki formed already but only one article has been created so far which shows you how to create an About module. Everyone is welcome to add to the project.

The source code will be submitted into the SVN as soon as possible for community involvement in the development of the framework. If you wish to join in the development of bbgFramework, then please message me on Sourceforge or post a new topic at the Developers forum.

Be sure to make your comments at the BBGameZone.net forum topic to encourage more feedback and interaction! Thank you for your support and help. Keep in mind, that the framework will deviate from being discussed here as this blog is about the development of ctrlHack, obviously. The game itself however will still be developed using the Framework.

Thank you for your time, your comments and your motorcycle.

Redesigning logic is never a good idea, although coming up with a base framework for gaming kind of makes it a necessity… sorta. The framework is finally coming to its skeleton completion which means several things:

  1. I can start working on the actual game again… In case you forgot, its called ctrlHack.
  2. The Framework will be available on in Sourceforge’s SVN so it can be downloaded and contributed to by other game developers alike. (I’m hoping for a wonderful community effort to make a strong backbone for any PBBG out there)
  3. I’ll have more to talk about here that actually has something to do with the game.
  4. I be able to work on new plugins/addons for the framework as my own game progresses.

As it stands at this moment, it will have all the following features built in:

  • Global Configuration (with a basic Admin set up to change these settings)
  • Pagination
  • Validate (used for validating URLs, Usernames, Passwords, and Emails)
  • Information (used to retrieve DB info on a userID, example usage is Attributes for users)
  • Permissions
  • Database layer
  • Client-side Error Handling (eg; “Username is too short for registration”, etc)
  • Display layer (Smarty for production view, Krumo for debugging view, PERL XML Serializer for REST view although untested and pretty crappy)
  • Templates (each template thus far will include a page wrapper and style sheet with corresponding images)
  • Modules layer (These are easily editable or creatable pages for the site)
  • Authentication extensions for modules (to restrict page viewing to users with certain permissions)
  • Account module (including registration, login, logout, and editing account info)
  • Profile module (edit and view profiles, list of members… basically giving an example of how to use the modules)
  • Home/frontpage module
  • News module (a module to show all announcements and news internally which is used in the Home module in a shorter format, also shows usage of Auth_Author permission to add new articles)

The framework itself is suppose to be extensible but a viable (easy to use) framework to drop into your game and allow you to get to coding right away on the game part instead of reinventing the wheel for authentication and et cetera. With a community of developers helping, I think it could easily become a very welcome peice of code in PBBGs and of course always be free to the public.

Anyway, hopefully this sheds some light on what’s going on and sorry about not making any posts in a month or so. Let me know what you think…

Also, if anyone is wondering, I think I’ll be making the framework use the BSD License as that seems to allow people to use it, modify it and still be able to sell or make money off of their game in the future. I don’t want the license to be a burden, I want to promote open source but still allow commercial use.

It’s been a minute since the last post, and the code posted therein has changed quite a bit. Not too drastic for those pieces but definitely a difference. I’ve come to the conclusion that the Framework should be called BBG Framework. Very original, eh?

So here is the progress thus far:

Controller

index.php as the controller calls the modules, classes and events dynamically. URI rewriting proves useful in this case:
- /index.php?module=account&class=forgot&event=confirm
- /account/forgot/confirm.html

However, this may change in the future being that it is fairly rudimentary, meaning I cannot go beyond three directories (although improbable) without further mod_rewrites. I need to make the rewrite a bit more dynamic:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On

# Change the URI here to whatever you want your homepage to be
RewriteRule ^$ /index.php?module=frontpage [L,QSA]

# Changes /index.php?module=frontpage to /frontpage
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ index.php?module=$1 [L,QSA]

# Changes /index.php?module=users&class=login to /users/login
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)$ index.php?module=$1&class=$2 [L,QSA]

# Changes /index.php?module=users&class=login&event=foo to /users/login/foo.html
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ index.php?module=$1&class=$2&event=$3 [L,QSA]

This is also based off of Joe Stump’s MVC framework.

Modules

Can be easily added to the framework to expand it’s usability.

  • Standard modules included in the BBG Framework will be Account (register, login, logout, forgot, settings), Frontpage, and Profile (members, edit, view).
  • Future (game related) modules included will be Battle (turn based, real time, one time, etc), Attributes (skills, stats), Stores (shopping cart theming system), and Inventory (equipment, item management)

In due time, hopefully I can make modules more dynamic to add into the framework so any community contributed modules can be added very easily.

Built-in Classes

These are extensions of the controller from the module and include normal functions to use in your modules.

  • Display (smarty) - (Completed kinda) Translates the modules and data into something that Smarty can understand. Page wrapper for and whole site includes. Each module has its own dynamically loaded template as well. The display can also be changed to instead use Krumo to debug all info. Future additions will be to add an XML serializer and REST display.
  • Session - (Completed) Basically a $_SESSION wrapper but expands it a bit for better usage.
  • User - (Completed) Handles all the users data (userid, username, email, etc) throughout the framework. The attributes module will run a bit like this as well.
  • Validate - (Completed) Called dynamically via Validate::event(); which can be used to Validate::encrypt($password,$username) (username is used as a dynamic salt) or Validate::email($email) to check to make sure it is a valid address. Also, Validate::randStr($charLength) will return a random upper and lower case alphanumeric string, which is useful for tokens and new passwords.
  • Pagination - (Untested) Used to paginate lists like showing all the members.
  • Mail - (In progress) Handles all the mail that needs to be sent for any forms like registration. There is also an option to turn off the mail() function so instead it will print out the email on screen for testing purposes.
  • Error handling -(In progress) Called dynamically anywhere in the framework via Error::set(‘label’,'Error description goes here’) and Error::get(). Although the get part, should actually be called automatically through the Display layer of the framework.
  • Database Management(Completed) Used very easily like so:

    Database::query("SELECT * FROM users WHERE username = '%s' AND password = '%s',$user,md5($pass));
    $user = Database::getResults('a');

    Any data passed into the query is automatically sanitized. Also, a debug is available to show you all queries just in case.

Future Additions

These include expanding the Framework core to include a better ACL and obviously more security built in. Also, need to port over the original Admin panel to give a User list with quick options to change info on the fly. You’ll be able to monitor activity as well as look at reports and site statistics as well.

Game related admin activities will include Round/Tick/Resource monitoring, Item database management, Attribute management, etc.

If you have any suggestions, I will be more than happy to add them. Of course eventually I’ll have a place for people to make real suggestions that others can vote as well as a forum to actually discuss the framework and contribute to the code.

Anyway, thanks for you time… I know this wasn’t much of an update but I’ve been relearning PHP using OOP with abstract classes and much more to create this Framework. BTW, if you don’t know… its definitely going to be only for PHP5.

As part of the ctrlGames framework, I will actively attempt to place in reusable code for a decent framework to use in future games. As stated in my Design Document, I will release the source for the framework for others to use and expand on, and build plug-ins for it.

I updated the code from yesterday because, as Harkins so graciously pointed out, it makes more since to do the sanitizing and queryString all from one line. Unfortunately, you will also noticed I made put the $data array in there several times to account for several strings. I cannot for the life of me figure out how to get the sprintf function to take several pieces of data dynamically.

Here is what I have for the database usage:

<?php
/**
 * @version		1.0.3
 * @package		ctrlGames Framework
 * @copyright	Copyright (C) 2009 - ctrlGames, Inc. All rights reserved.
 * @license		GNU Affero General Public License, see LICENSE.PHP
 */

// no direct access
defined('_CGFW') or die('Restricted Access');

class Database {
	private $connection;		// Active Connection
	public $result;				// Results retrieved and saved
	public $queryCounter = 0;	// Number of queries made
	public $totalTime = 0;		// Amount of time queries took
	private $debug = true;		// Debug displays the queries

	public function __construct(){
		global $error;
		$this->connection = @mysql_connect(DB_HOST,DB_USER,DB_PASS);
		if(!is_resource($this->connection)) $error->setError('mysql',"Unable to connect to MySQL.");
		if(!@mysql_select_db(DB_NAME,$this->connection)){
			@mysql_close($this->connection);
			$error->setError('mysql',"Unable to select database.");
		}
	}

	/**
	 * Queries the database with the string provided
	 * @return 		void
	 */
	public function query($queryString){
		global $error;
		$startTime = $this->getMicroTime();
		$this->queryCounter++;
		$data = func_get_args();
		unset($data[0]);
		foreach($data as $k => $v){
			$data[$k] = $this->sanitize($v);
		}
		$query = vsprintf($queryString,$data);
		$this->result = @mysql_query($query,$this->connection);
		$this->totalTime += $this->getMicroTime() - $startTime;
		if(mysql_errno($this->connection)) $error->setError('mysql',mysql_error($this->connection)."<br /><blockquote>$query</blockquote>");
		if($this->debug) echo $this->queryCounter." (".round($this->totalTime,6)."ms): $query <br />";
	}

	/**
	 * Results
	 * @params		$how = 'i' for numeric array, 'a' for associative array, null for both
	 * @return 		(array) fetch array for Select query
	 */
	public function getResults($how = null){
		switch($how){
			case 'i': return @mysql_fetch_row($this->result);
			case 'a': return @mysql_fetch_assoc($this->result);
			default: return @mysql_fetch_array($this->result);
		}
	}

	/**
	 * Affected
	 * @return 		(int) affected_rows for last Insert, Update or Delete query
	 */
	public function getAffected(){
		return @mysql_affected_rows($this->connection);
	}

	/**
	 * Rows
	 * @return 		(int) num_rows for last Select query
	 */
	public function getRows(){
		return @mysql_num_rows($this->result);
	}

	/**
	 * Id
	 * @return 		(int) auto-increment ID for last Insert query
	 */
	public function getId(){
		return @mysql_insert_id($this->connection);
	}

	/**
	 * MicroTime
	 * @return 		(float) actual time in milliseconds
	 */
	private function getMicroTime() {
		list($usec,$sec) = explode(" ",microtime());
		return ((float)$usec + (float)$sec);
	}

	/**
	 * Santizes data to keep out the SQL injections
	 * @return 		(string) $data
	 */
	private function sanitize($data){
		$data = trim($data); 		// Remove whitespace
		if(get_magic_quotes_gpc()){ // Stripslashes if magic_quotes_gpc is enabled
			$data = stripslashes($data);
		}
		return mysql_real_escape_string($data);
	}
}
?>

As you can see, I am avoiding the normal insert, delete, update methods that people tend to do in their database objects. I’ve noticed that these particular methods restrict the use of SORT and LIMIT(ing) options. With mine instead, I can do the following:

$db = new Database;
$db->query(“SELECT * FROM users WHILE id = ‘%s’ AND username = ‘%s’ SORT by ‘token’ DESC, ‘permissions’ ASC LIMIT 1″,$userid,$username);

Then do whatever with the $db->getResults(), and obviously use the WHILE condition to its limits.

Then there is the error handling class which seems optimal so far. It counts how many errors there are and sets all the errors in an array with labels for quick retrieval once the code is compiled. The end source can check $error['errors'] key to make sure it’s greater than zero.

<?php
/**
 * @version		1.0.0
 * @package		ctrlGames Framework
 * @copyright	Copyright (C) 2009 - ctrlGames, Inc. All rights reserved.
 * @license		GNU Affero General Public License, see LICENSE.PHP
 */

// no direct access
defined('_CGFW') or die('Restricted Access');

class Error {
	private $numErrors;			// Number of errors made
	private $error = array();	// Set error as an array

	/**
	 * setError with label and errorText
	 * @return		void
	 */
	public function setError($label,$errorText){
		$this->error[$label] = $errorText;
		$this->numErrors++;
	}

	/**
	 * getErrors
	 * @params		styled = false, removes spans
	 * @return		error array
	 */
	public function getErrors($styled = true){
		if($styled){
			foreach($this->error as $label => $msg){
				$msg = "<span class=\"error\">$msg</span>";
				$this->error[$label] = $msg;
			}
		}
		$this->error['errors'] = $this->numErrors;
		return $this->error;
	}
}
?>

Let me know what you think, maybe if I should improve them or anything you find that’s wrong. I enjoy the feedback.

Thanks… see ya tomorrow.

Beginning development of a hacking game began in my head a few years ago and years before that I wanted to created a browser game.  I’ve learned a lot of coding in the last 15 years but with PHP, and web applications in general, it’s a constant learning cycle. Innovation and community sourcing are quite dominant in the open-source scheme of things. Hats off to Luke over at BuildingBrowserGames.com for the beginning help on getting me started. The basis of this document is gonna sort of follow the flow of his style. So, with that in mind, I shall move on to the importance of this document.

The basic premise of the game is actually kind of outlined in the about page, but even more basic would be that you are a hacker and you go to the site to log into your remote server connection. This Virtual Network Computing (VNC:X11) will give a desktop GUI  with a Linux OS (more than likely being Debian based). You’ll use this VNC to hack websites, servers and other hackers (PVP), as well as access your computer hardware setup, skills, forums, terminal console, forums and wiki.

License

GNU Affero General Public License, version 3

In short, you can do whatever you would like with the code even sell additions to it or make money off it. You cannot release the source code under your own name and if you modify the code, then I can also have the modifications.

Scenario

In the beginning of the game, the player will be introduced to an NPC that will tutor the player throughout the life of the game. This NPC will also be one of the main characters to give missions.

As the player, you begin the game with a graphical intro that will appear to remote connect to a “Windows” style desktop, with a hacking script program. A “paper clip” helper will appear (as a joke) saying “It looks like your trying to hack…” with options. It will run the program and run its course asking the player questions through prompts which will ultimately figure out what type of character (class) the player wants to be. A notice of your data being encrypted will appear in the screen with the Firewall bubble showing access from an unknown user and no way to block the port. The script kiddie program is hacking a federal website and sending retrieved files over your connection to an unknown remote connection. The program will note its developer, an NPC that will appear later in the game. A Pidgin type interface will appear with the ‘tutor’ NPC asking questions. Any chat with NPCs will have predetermined answers the player can choose from to continue the story. This introduction will determine the player’s class, starting stats, hostname, and IP assignment. The tutor will give the most relevant information needed to start playing.

The hacking program will finish within a minute in real time and will shut down the GUI interface (mimicking a certain windows type OS). The pidgin interface will remain even after the remote connection is lost. The tutor informs the player of his control over the host and on the black screen, you will see it connecting to your “assigned IP”. The connection shows up with stopped BIOS screen. Next to the battles, this will probably be the best graphics in the game. The tutor will continue talking about how he’s loading the ctrlHack OS which is linux, etc… and he’s loading it on a fresh new server setup made just for the player. This will salute linux distributions alike as the loading of the entire operating will take less than 10 secs. The tutor will make snide remarks about your previous OS usage to hack and how it takes more than hour to load that OS and this OS takes secs, then he gives you the very minimal hardware parts included in your server PC.

Once the main GUI is loaded, the tutor will point out all the options and give the first mission and give you some new contacts to get ahold for more missions and options in gameplay. As you venture through the site, the tutor may pop on your first access and help you if needed which will mainly pertain to battles.

Obviously the story will continue on from there, the player can become evil or good depending on their actions which will affect their future missions and story outcome and even affect what things they can do like shops they use.

GUI Design

This will be in the shape of a Linux Operating System (OS) which will be more than likely be Debian based but definitely our own unique theme and iconset.

  • Taskbar – bottom of window
    This will have 10 slots for attacks and items which will be swappable and movable via jQuery drag-n-drop. If you are not hacking, this bar will autohide but may be brought up at anytime to change your preferences. Also, there will be timestamp at bottom right corner.
  • Menubar – top of window
    This will contain the uncommon tasks of the website (ie; edit account/profile, change settings, help, etc) with drop down menus.
  • Icons – left side of desktop
    These icons will be a left side navigation of sorts for the site. They will be links to the major parts of the game and site (ie; forums, wiki, hacking, terminal, stores, etc)
  • News Feeds – wherever
    One will be your accomplishments (ie; gaining a level, skill, defeating a site, stealing something, etc), which may be in the shape of a console window but original thought of as being an RSS Feed look-alike. The other news will be official announcements from ctrlHack team. This feed however will appear in the guise of being your VNC’s OS fixes, additions, version upgrades, etc. This will add to the role play experience.
  • Theme
    This will changeable by the user but since most desktop real estate is 1680px and over, there will be options to use a background that loads from your computer locally. The user may also use some predefined backgrounds that will obviously have something to do with hacking or just changing the background color. Other theming options may be changeable in the future.

Game Interface

There will be heavy use of jQuery throughout the game but it will be possible to play without javascript enabled, at least I think. AJAX will be used but definitely not required.

  1. User Management
    Register, Login, Logout, Forgot Password (similar to WordPress), Email verification, Permissions, Account changes, GUI settings, Edit Profile
  2. Bandwidth
    This is an odd implementation that will keep the players coming back day to day. ForumWarz uses this system in the form of “Forum Visits” with 4 per day stacking to 12 max. This also keeps users from having to deal with “energy” ticks and even bothering with lower missions just because you only have that much “energy”. In ctrlHack, the user will get a certain amount of bandwidth… each battle (except PVP) will use some bandwidth. This will also keep players in check to not waste an attack. I’m not sure how to keep PVP in check but it may have some kind of internal implementation since it would be a kind of “intranet” usage.
  3. Attributes
    Static attribs system to lessen the load on the database, only queries when attribs change for players. Attributes are only changed with hardware and being different classes. (ie; HP, Attack, Defense, Luck, etc)
  4. Skills
    Points will be given on level gains. You can use these points to update your skills that range from understanding computer languages (ie; php, JavaScript, C++, python, etc)  to attacking understanding (ie; network enumeration, vulnerability analysis, etc) to actual types of attacks (ie; denial of service, SQL injection, etc) to malware development (ie; worms, trojans, viruses, mixtures, etc). Skills affect varying aspects of the game and may even affect your reputation and good/bad attitude.
  5. Communication
    There will be a Private Messaging system for comms between players, an IM/IRC system for comms with NPCs and storyline continuations, IRC (ShoutBox) for teams and of course forums.
  6. Shops
    You buy hardware for your VPN to get your specs better for battles, you buy program licenses for use with your unit (not sure exactly how I am gonna do this being that your a hacker), and you can sell stuff whether its unused programs, hardware or even files you stole or stuff you’ve created like worms and viruses. There will also be an eBay spoof for player to player auctions. There may even be an IRC bot that will allow you to trade credits for upload ratio so you can download programs for use.
  7. Battles
    These will be turn based with attacks from your taskbar. You can incorporate strategy in battles with future programs that can analysis what the target is doing (ie; loading a defensive task that will stay for 2 turns, therefore it would be unwise to even bother attacking).  All logging and attacks will textually appear in the player’s console. Objectives will vary from mission to mission, servers are more complicated than websites as you will have to use more command line interface and it’s not as graphical and you must decode encryption and other various obstacles.

    • (NPC) Websites: defacing sites, knocking down servers, XSS, SQL injections, steal user database, credit card fraud, etc
    • (NPC) Servers: destroying hash tables, rerouting IPs, tracert actions, stealing particular files, making security flaws known, planting viruses or worms, etc
    • (PVP) Players: Damage server setups, reroute IP, steal credits, etc. It is unknown as of right now how the PVP interaction will be in the game.
  8. Achievements
    There will achievements (needs a better name) for anything amazing the player accomplishes and there will also be weekly leader boards for players to compete against other and win trophies or something.
  9. Training
    Players will be allowed to pit their computer setups against comparable hackers for practice with no consequences. The tutor will introduce a ‘dummy’ bot setup that simulates itself to be comparable to the player at any given time. This means the player can practice at any given time to test their setups.
  10. Computer Setup
    This will be a graphical representation of the player’s computer (like a player doll) and allows them to swap out modules, hardware and adjust/fine tune BIOS settings to tweak the computer. There will lots of settings to adjust to make the unit run better and equipment to add with plenty of slots. Everything is changeable from the LAN card all the way to the CMOS chip. Most hardware will adjust stats for battle but some hardware will adjust other game interactions like having a sound card for shop frugality or power supplies to increase wattage therefore allowing more hardware. Along with the physical setup, there will be BIOS/CMOS settings you can tweak to overclock the unit but can run the risk of overheating during battle if not properly cooled. The point of this complex equipment system will give player dynamic stats and extremely unique computer setups which give them something to boast about on the forums.
  11. Items
    These range from hardware to programs. Hardware is described in computer setup above. Programs can be any number of things from Info Grabbing programs (ie; whois, uname, packet sniffers, spoofs, etc) to bots, malware, and macros (ie; algorithm decrypter, ip spoofer, password crackers, encryption breakers, etc).
  12. Teams
    I want to have some kind of team, guild, clan system implemented. No damn idea how it will be used other than have their own private forum, IRC channel and be able to complete achievements as a team. I would like to have some over time battle system for teams to capture IP subnets. These subnets in turn will pull a small percentage of profit from each user apart of that subnet. Capturing subnets will definitely require teamwork and they will probably give them bonuses in battle as well.

Administration

Permissions will be handled via privilege patterns that contain each access right. This means there will be no limit to the types of privileges given and the game can be very nit-picky about who can do what.

  1. adding official announcements
  2. userlist with the ability to change privileges, delete and edit users on the fly.
  3. moderation queues, for news added by less than privileged users (ie; moderators) and a queue for messages that were reported by users as violators… admin may approve of news or delete reported stuff and even ban linked accounts, etc
  4. graphs for showing all kinds of statistics including active players, online players, donators, forum activity, wiki stats, avg levels, player economy
  5. logging for administrators and moderators on what they do, as well as logging for users that may be under some kind of watch because of reports from other users or suspected of cheating
  6. error handling schemes, development will show errors on screen and production will log errors.
  7. statistics logs all stats and records, including most online users, fastest battles, etc.

Obviously, moderators and related users will be able to do front-end changes which mostly consist of wiki and forum moderation: moving topics, muting players (removes communication privilege from user), warning users, locking topics, etc.

Game Engine

The game will be built using a newly formed framework called PBBGframework (ha I’m so creative) and jQuery. The framework itself will be extracted from game when the game’s normal interface, behind-the-scenes coding is pretty much complete so others may use it and even turn it into a real framework. I just want to have a framework I can work with that’s not bloated all to hell, it has an authentication system with permissions, user management, admin panel, statistics system, attributes and skill systems for users, and that’s about it. Everything a game needs and nothing more… maybe have a plugin system so that other options can be added like a Map system or IM system or Forum.

ctrlHack development began around March 20th. The basic premise of the game is too be a fun and visually appealing game based on hacking. Within in the next few days, I will create a design document to give you more information on how it will work and the timeline of sorts for stage development.

At this moment I have quite a few testers from BBGameZone.net and EdenUnderground.com whom wish to play when it goes live but I may end up setting up Alpha/Beta testing codes to limit the amount of registrants, but this may change in the near future. The codes will appear on those websites, and allow a certain number of registrants per code.

ctrlHack.com is being purchased at the moment with viable hosting. The hosting is unlimited in respects to space and bandwidth, the only thing I need to worry about is CPU and Memory usage especially during peak online times for players whilst playing the game.

Eventually, I will add a page here on WordPress for requesting features to the game (which will be pretenant during alpha/beta stages) and allow other WordPress users to vote on those user-submitted requests. Another page will have the roadmap for ctrlHack and possible dates for release. I have found out that my idea is not alone and even though they are few, there are other hacking simulations out there like slavehack.com. As I have seen, they have taken quite a different approach to hacking sim than I will. So, hopefully, this may still be a new facet in the PBBG scene.

Please comment and let me know if you’re listening to waiting to see this game to come out. I hope to get a good following for it. If you already have any ideas, then go ahead and post them in the comments or email me: ctrlhackgame [at] gmail [dot] com and I will get back to you as soon as possible.

Thanks for your time and here’s to gaming!