zamp









Level 1 Re: PROTOCOL - Containment « Reply #1 on: April 13, 2011, 03:03:56 PM »



Features added recently:

Tooltips when not moving the mouse



Status screen (with very low sanity)

The face photo changes expression based on sanity and the less health the player has more blood is added on the photo

Btw my avatar shows all phases.



Dialogs



Material based footstep sounds

No screenshot for this since it's an audio thing I wanted to keep the new feature listings separate from the main post.Features added recently:Tooltips when not moving the mouseStatus screen (with very low sanity)The face photo changes expression based on sanity and the less health the player has more blood is added on the photoBtw my avatar shows all phases.DialogsMaterial based footstep soundsNo screenshot for this since it's an audio thing « Last Edit: July 20, 2011, 08:34:25 PM by zamp » Logged

zamp









Level 1 Re: PROTOCOL - Containment « Reply #2 on: April 15, 2011, 09:32:34 AM » Here's a video showing the new two features, flickering lights and door keypads with dynamic lights





« Last Edit: July 20, 2011, 08:34:39 PM by zamp » Logged

AaronLee









Level 1 Re: PROTOCOL - Containment « Reply #5 on: April 16, 2011, 09:36:19 PM » Neat mechanics, this seems like a well built topdown shooter, which says a lot as the genre tends to be fodder for early GM users Logged

AaronLee









Level 1 Re: PROTOCOL - Containment « Reply #7 on: April 17, 2011, 07:36:31 PM » No worries, was just making a friendly snark at yoyogames.



Anyway, I really like the snake boss bit, original and very challenging by the looks of it. Logged

PowRTocH Guest

Re: PROTOCOL - Containment « Reply #10 on: April 28, 2011, 06:13:09 PM » This game looks pretty excellent! Only gripe is the resolution mixing between the fonts/menus and in-game graphics, that's always jarring in games. I hope you consider changing it. But I'll be following this for sure, very nice graphics and mood. Logged

zamp









Level 1 Re: PROTOCOL - Containment « Reply #11 on: July 19, 2011, 09:57:37 AM »







I lost interest in the singleplayer game and decided to work on the multiplayer game instead.

I rewrote most of the server code (I had worked on multiplayer version of this game before) and implemented my own policy socket server in the server application itself. Now I don't have to run a separate socket policy server

If you're interested a socket policy server is flash's security measure. They say it prevents man in the middle attack but I still think you can use a proxy.



Updates in the engine:

- Occlusion rendering (can't see behind)

- Sprite tinting (it's been in the engine itself for quite a while but wasn't in use. Characters hairs are tinted)



Hmm.. Not that many updates in the engine. There are a lot of internal updates (networking mostly) which I won't discuss in public.



Updates in the server:

- LUA scripting for weapons (also LUA for AI in the future)

- Dynamic world loading (Only areas where people are, are kept in memory)



Hmm.. Not that many server updates either, hehehe. Same as with the client/engine there are a weeks worth of internal updates which I won't discuss.



I'll post a link to the game when it has spawning NPCs in it and everything works. Also I'll try to make more of these updates, writing is not one of my strong suits.

PS. Help is always welcome. Contact me if you have some skill you think could help making this game! Sorry for the long wait but here is an update of game progress.I lost interest in the singleplayer game and decided to work on the multiplayer game instead.I rewrote most of the server code (I had worked on multiplayer version of this game before) and implemented my own policy socket server in the server application itself. Now I don't have to run a separate socket policy serverIf you're interested a socket policy server is flash'smeasure. They say it prevents man in the middle attack but I still think you can use a proxy.Updates in the engine:- Occlusion rendering (can't see behind)- Sprite tinting (it's been in the engine itself for quite a while but wasn't in use. Characters hairs are tinted)Hmm.. Not that many updates in the engine. There are a lot of internal updates (networking mostly) which I won't discuss in public.Updates in the server:- LUA scripting for weapons (also LUA for AI in the future)- Dynamic world loading (Only areas where people are, are kept in memory)Hmm.. Not that many server updates either, hehehe. Same as with the client/engine there are a weeks worth of internal updates which I won't discuss.I'll post a link to the game when it has spawning NPCs in it and everything works. Also I'll try to make more of these updates, writing is not one of my strong suits.PS. Help is always welcome. Contact me if you have some skill you think could help making this game! « Last Edit: July 19, 2011, 01:02:45 PM by zamp » Logged

zamp









Level 1 Re: PROTOCOL - Containment « Reply #12 on: September 04, 2011, 06:42:20 PM »

I'm again working on the singleplayer horror adventure game rather than the mmorpg game.

Why?

The reason is simple. I'm stupid and I don't have enough resources to do a multiplayer game.

Why am I stupid?

The reason is simple. I spent time on the mmo branch even though I had already scrapped it before.

If I ever tell you that I'm starting to work on the mmo again before the single player is done. Please do tell me to piss off and just work on the damn single player game.



Other than that not much progress to report. I've been lazy and unmotivated recently.

I updated the console library (from an old version) to the new

Which is working like a charm.



And I split up my tileset into separate images. One image per type; floors, furniture, walls etc.

The new version of

Although now that I think of it, it might not even work since all tiles have a slight shadow on the lower right side (45 degree angle).

It's not the most realistic shadow but style>realism any day.

Scrap everything I've said before.I'm again working on the singleplayer horror adventure game rather than the mmorpg game.Why?The reason is simple. I'm stupid and I don't have enough resources to do a multiplayer game.Why am I stupid?The reason is simple. I spent time on the mmo branch even though I had already scrapped it before.If I ever tell you that I'm starting to work on the mmo again before the single player is done. Please do tell me to piss off and just work on the damn single player game.Other than that not much progress to report. I've been lazy and unmotivated recently.I updated the console library (from an old version) to the new Doomsday Console II Which is working like a charm.And I split up my tileset into separate images. One image per type; floors, furniture, walls etc.The new version of Tiled Map Editor supports flippable tiles but my engine doesn't. I might add that feature someday. I can flip tiles in photoshop just fine...Although now that I think of it, it might not even work since all tiles have a slight shadow on the lower right side (45 degree angle).It's not the most realistic shadow but style>realism any day. Logged

zamp









Level 1 Re: PROTOCOL - Containment « Reply #13 on: September 05, 2011, 10:25:01 PM » Good news everyone!

I have invented an apparatus that makes strobing light that causes uncontrollable epilepsy attacks!



No seriously, I finished working on ambient lighting. Check out my latest devlog on



Good news everyone!I have invented an apparatus that makes strobing light that causes uncontrollable epilepsy attacks!No seriously, I finished working on ambient lighting. Check out my latest devlog on Logged

zamp









Level 1 Re: PROTOCOL - Containment « Reply #14 on: September 07, 2011, 06:11:50 PM »



After banging the keyboard like a wizard I managed to write my own AStar pathfinder. The one I was using had a ridiculously convoluted way of implementing it. I'm glad to see that monster gone



Then I thought I'll have some fun stress tests and came up with these statistics. Fps is an average.

80 NPCs = 5 fps / 11 MB memory

40 NPCS = 22 fps / 10 MB memory

20 NPCs = 30 fps / 10 MB memory

10 NPCs = 33 fps / 11 MB memory

0 NPCs = 35 fps / 14 MB memory.. odd



Seems like 20 NPCs is the optimal amount and everything below that wont give any more fps boost. I'd say npcs are done and now its time to find out why fps is so low overall...





Totally jammed





Damn that's many Mmmmm stress testing!After banging the keyboard like a wizard I managed to write my own AStar pathfinder. The one I was using had a ridiculously convoluted way of implementing it. I'm glad to see that monster goneThen I thought I'll have some fun stress tests and came up with these statistics. Fps is an average.80 NPCs = 5 fps / 11 MB memory40 NPCS = 22 fps / 10 MB memory20 NPCs = 30 fps / 10 MB memory10 NPCs = 33 fps / 11 MB memory0 NPCs = 35 fps / 14 MB memory.. oddSeems like 20 NPCs is the optimal amount and everything below that wont give any more fps boost. I'd say npcs are done and now its time to find out why fps is so low overall...Totally jammedDamn that's many Logged

zamp









Level 1 Re: PROTOCOL: Containment « Reply #15 on: September 08, 2011, 10:06:58 AM »

My latest DevLog video didnt quite come out as I planned. I recorded for 40 minutes and the video is 15 minutes long and at the end it plays all of the missing 25 minutes of audio in about 20 seconds...

I'll make a new one once I figure out what went wrong with it.



On another note, check the

Cheers! Hello again.My latest DevLog video didnt quite come out as I planned. I recorded for 40 minutes and the video is 15 minutes long and at the end it plays all of the missing 25 minutes of audio in about 20 seconds...I'll make a new one once I figure out what went wrong with it.On another note, check the first post . I added a screenshot of the guards office / outpost and the dialog face graphic of Eric there. Hope you like it!Cheers! Logged

zamp









Level 1 Moar optimization! « Reply #16 on: September 08, 2011, 03:30:14 PM »



In one of my DevLogs I showed some stress testing. I wasn't happy how laggy the game got after adding a bunch of NPCs on the map so I thought I'll optimize some more.



Here's where I started. This was what I was supposed to beat. 20 NPCs roaming around in the map.



Full update takes 30ms.. meaning I could crunch out ~ 33 frames per second.



This clearly needed fixing. So what I did was that I...

Added a delay to entity update so the entities will only do certain secondary things every 400 ms instead of every frame

Added a delay to NPC logic so they wont do secondary targeting tasks every frame but instead every 400 ms

Changed pathfinder so it will return the path it has already calculated if it runs out of iterations.

Added a player variable to the level so if something has to call the player they don't have to go through every object in the game

Added a player variable to the level so if something has to call the player they don't have to go through every object in the game Disabled player hallucination & health effect since it sometimes "hanged up" and caused almost 20ms spikes.

Changed NPC rules from array to bitflags

After doing all of this I got these statistics out; do note a few more options have been added.





Nothing I did seemed to affect anything so I continued hunting for the milliseconds.

I added few more timers and noticed that pathfinding took almost all if not all of the object update time and I adventured further into the sources.

I noticed that each pathfinding task took from 1 to about 15 ms to do so I did what shouldve been an obvious choice from the getgo. I made the pathfinder work so that it can only find one path per frame.

This means that if I have 80 NPCs spawned on the map they'll take ~3.2 seconds for all of them to get paths.

There is one problem though. If a few of the NPCs only travel on a short path they might clog up the system and the last of the NPCs on the list might never get a path at all.

This problem can be remedied with good map design and I'm fairly sure I'll never even have more than 10 NPCs roaming around anyways.



Here's a screenshot of the game after optimization. 60 NPCs and game runs at 16 fps. Booyyah!





You're just going to have to trust me on this one but without the graph and stats the game runs at 22fps. Hooray for optimization!





Here's same stats as last time

80 NPCs = 15fps

60 NPCs = 22fps

40 NPCs = 32fps

20 NPCs = 42fps

10 NPCs = 50fps

0 NPCs = 52fps



Compared to the last stats I got the improvement is huge !



Also if you're interested in the graph class you can grab it here. Note that you will need to supply your own text rendering/alter how the texts are shown.

TimeGraph.as

Code: package utils

{

import flash.display.Bitmap;

import flash.display.BitmapData;

import flash.geom.Point;

/**

* ...

* @author zamp

*/

public class TimeGraph

{

static private var m_timers:Vector.<TimeGraphTimer> = new Vector.<TimeGraphTimer>;

static private var m_graph:BitmapData = null;

static private var m_highestGraph:Number = 100;



static public function time(name:String):uint

{

for each (var t:TimeGraphTimer in m_timers)

if (t.name == name)

return t.count();

// not listed yet

m_timers.push(new TimeGraphTimer(name));

return m_timers[m_timers.length-1].count();

}



static public function get graph():Bitmap

{

if (m_graph == null)

m_graph = new BitmapData(256, 128, false, 0x000000);

return new Bitmap(m_graph);

}



static public function updateGraph():void

{

if (m_graph != null)

{

// draw graph on itself but offset by -1x

var temp:BitmapData = m_graph.clone();

m_graph.fillRect(m_graph.rect, 0x000000);

m_graph.copyPixels(temp, m_graph.rect, new Point( -1, 0));

// draw timer averages on the graph

var n:uint = 0;

for each (var t:TimeGraphTimer in m_timers)

{

m_graph.setPixel(255, Math.floor(m_graph.height - ((t.time / m_highestGraph) * m_graph.height)), t.color);



Text.renderToScreen(t.name + " " + t.time + " ("+t.timeLow+"/"+t.timeHigh+")", 260, n * 14, "left", t.color);

n++;

}

}

}

}



}



TimeGraphTimer.as

Code: package utils

{

import flash.utils.getTimer;

/**

* ...

* @author zamp

*/

public class TimeGraphTimer

{

private var m_name:String;

private var m_color:uint = 0;

private var m_count:uint = 0;

private var m_time:uint = 0;

private var m_timeHigh:int = 0;

private var m_timeLow:int = 0;



private var m_peakHigh:uint = 0;

private var m_peakLow:uint = 0;



public function TimeGraphTimer(name:String)

{

m_name = name;

m_color = Math.random() * 0xFFFFFF;

}



public function count():uint

{

if (m_peakHigh > 0)

m_peakHigh--;

else

m_timeHigh--;



if (m_peakLow > 0)

m_peakLow--;

else

m_timeLow++;



if (m_count > 0)

{

m_time = (getTimer() - m_count);

if (m_time > m_timeHigh)

{

m_peakHigh = 50;

m_timeHigh = m_time;

}

if (m_time < m_timeLow)

{

m_peakLow = 50;

m_timeLow = m_time;

}

m_count = 0;

} else { // not yet counting

m_count = getTimer();

}

return 0;

}



public function get name():String

{

return m_name;

}



public function get color():uint

{

return m_color;

}



public function get time():uint

{

return m_time;

}



public function get timeLow():uint

{

return m_timeLow;

}



public function get timeHigh():uint

{

return m_timeHigh;

}



}



}



Usage example:

Code: // add this in your Main class

addChild(TimeGraph.graph);



// add this in your main loop

TimeGraph.updateGraph();



// call this function twice with the same string to get how long it took

// this string is also the name that shows up besides the graph

TimeGraph.time("foo");

// do something here

var timeItTookInMs:uint = TimeGraph.time("foo");

Edit: I've also changed the main menu to something more suitable for a horror game. Check it out here In one of my DevLogs I showed some stress testing. I wasn't happy how laggy the game got after adding a bunch of NPCs on the map so I thought I'll optimize some more.Here's where I started. This was what I was supposed to beat. 20 NPCs roaming around in the map.Full update takes 30ms.. meaning I could crunch out ~ 33 frames per second.This clearly needed fixing. So what I did was that I...After doing all of this I got these statistics out; do note a few more options have been added.Nothing I did seemed to affect anything so I continued hunting for the milliseconds.I added few more timers and noticed that pathfinding took almost all if not all of the object update time and I adventured further into the sources.I noticed that each pathfinding task took from 1 to about 15 ms to do so I did what shouldve been an obvious choice from the getgo. I made the pathfinder work so that it can only find one path per frame.This means that if I have 80 NPCs spawned on the map they'll take ~3.2 seconds for all of them to get paths.There is one problem though. If a few of the NPCs only travel on a short path they might clog up the system and the last of the NPCs on the list might never get a path at all.This problem can be remedied with good map design and I'm fairly sure I'll never even have more than 10 NPCs roaming around anyways.Here's a screenshot of the game after optimization. 60 NPCs and game runs at 16 fps. Booyyah!without the graph and stats the game runs at 22fps. Hooray for optimization!Here's same stats as last time80 NPCs = 15fps60 NPCs = 22fps40 NPCs = 32fps20 NPCs = 42fps10 NPCs = 50fps0 NPCs = 52fpsCompared to the last stats I got the improvement is hugeAlso if you're interested in the graph class you can grab it here. Note that you will need to supply your own text rendering/alter how the texts are shown.TimeGraph.asTimeGraphTimer.asUsage example: « Last Edit: September 08, 2011, 05:59:44 PM by zamp » Logged

zamp









Level 1 Re: PROTOCOL: Containment « Reply #17 on: September 09, 2011, 01:42:21 PM »



Well anyways.

The game makes poor screenshots since you can illuminate an area just by moving your mouse around, with a screenshot you only get one frame.



Also if you want to you can add me on Google+ and contact me frmo there if you want to help with the project or have questions about it. You can also just PM me here. I'll answer to the best of my abilities. Septuple post!Well anyways. Here's an album of some old screenshots from Protocol.The game makes poor screenshots since you can illuminate an area just by moving your mouse around, with a screenshot you only get one frame.Also if you want to you can add me on Google+ and contact me frmo there if you want to help with the project or have questions about it. You can also just PM me here. I'll answer to the best of my abilities. Logged

zamp









Level 1 Update! « Reply #18 on: September 11, 2011, 06:21:25 AM »



What's new in the engine. You can either keep on reading or watch



.

Or do both!



Scriptable NPCs

Now I can edit batch xml files and add commands to direct npcs to do what I want. Meaning I can pretty much tell an NPC to go in a room, pick up an axe, run outside of the room to a locked door, whack the door with the axe, break the door and rescue the pretty girl in the burning room. Oh didn't mention before that the room was on fire? We'll it is!



Überflashy Screen

No not really.. Unless I want to make a flashing screen. What this allows me to do is fade in segments of the game. For example: whenever you change map, the screen will fade black, show a loading bar and fade back in.



Bugfixes

Fixed the elusive shadowcaster offset bug that had been nagging at me for past 3 months

If you look closely at the videos on youtube you can spot the shadows offset by 1 pixel.



Why am I making this overly elaborate thing that uses resource xml files and dynamic file loading and preloaders and this and that and wtf?!

Because I can Heyhey! Update woohoo!What's new in the engine. You can either keep on reading or watchOr do both!Now I can edit batch xml files and add commands to direct npcs to do what I want. Meaning I can pretty much tell an NPC to go in a room, pick up an axe, run outside of the room to a locked door, whack the door with the axe, break the door and rescue the pretty girl in the burning room. Oh didn't mention before that the room was on fire? We'll it is!No not really.. Unless I want to make a flashing screen. What this allows me to do is fade in segments of the game. For example: whenever you change map, the screen will fade black, show a loading bar and fade back in.Fixed the elusive shadowcaster offset bug that had been nagging at me for past 3 monthsIf you look closely at the videos on youtube you can spot the shadows offset by 1 pixel.Because I can Logged