Please login or register.

Login with username, password and session length
Advanced search  

News:

Latest WME version: WME 1.9.1 (January 1st, 2010) - download

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - metamorphium

Pages: 1 ... 8 9 [10]
136
Technical forum / Sleep doing weird things?
« on: December 29, 2004, 03:02:51 PM »
Hi Mnemonic,

after update to version 1.3.x function sleep sleeps too much. If I put it away, my script works (it immediately jumps from one state to another) but when I put sleep(1) to slow down the motion a bit, it waits way too long. Is it a bug or a feature? :) In pre 1.3.x version it worked perfectly (the same script).

Thanks

Jan

137
General Discussion / Adventure games and Reviewers nowadays
« on: November 28, 2004, 10:04:20 PM »
Hi fellow muters. :)

Do you remember the old times of IF? I remember it like today. I was standing on the rainbow in Zork 1 figuring out what to do. I was very young I had a lot of time and finally I found out (after weeks) that I have to type a command "wave scepter" which would split the color spectrum etc... This was a time of word forging. Operation systems were not THAT clickable and we had to figure out by ourselves how to load himem.sys and emm386.exe (Bill's wraiths) so our game would work properly. We had to think a lot and this was fun.

We played these games long before "point and click" system and it built up our imagination. So when the graphics came in, we were able to imagine a whole lot of details into it (I can't forget playing Elvira 2 on C64, which was very scary) even without explicitly showing us. I believe this is the root of our ability to percept a game as excellent even if it lacks AAA graphics. We were able to imagine lipsync even when character just moves his mouse and there is a text bubble above. Text bubble, which can express emotions.

Unfortunately, as technology grows, it also provides some "comfort" for us what is certainly double-sided. Nowadays installations are done by clicking on next button, game doesn't require anything special to run (except sometimes latest hardware :)) and we are set. With this simplification people also simplify their gaming habits. They are looking in walkthrough when their first idea doesn't work, they despise with ideas which are not obvious, they never resort to make some paper notes etc. But the worst problem is that they NEED to have everything served on a silver plate. I am now speaking slightly in the "generalistic" way, but you will get my reason later. With easy access to pirated copies, many persons are fed up with the latest games without giving a special treatment to each of them.

This causes in turn large companies to produce mindless FPS games (with a few honorable exceptions), countless Dune 2 / Warcraft variations, Soccer games more of the same etc. Adventure gaming has been put behind, but it is NOT dead.

But there is a group of people who is obviously trying to kill it. These are unfortunately reviewers. With Legend, Sierra, LucasArts and others out of Adventure game bussiness, the only persons who can market the games are reviewers for there is no longer high budget in AG industry. But reviewers, being more and more of the above mentioned sort, don't care much about games as it would seem. They care about graphics, about voice overs (if Joe has british or Californian dialect), nitpicking here and there. For common reviewer would be perfect if this adventure game ran on Source engine and brought at least 3 groundbreaking technology advancements.

How can anyone be so stupid to think, that there actually IS that kind of money in Adventure gaming. So the conclusion of this? The only way out are Indie games. But we have to work on rising the "Independent" from the commonly assigned status crappy. Lot of us worked on projects which already accomplished this, but first I believe we need to find grounds for our games. That's  why I got this very weird idea of writing an open letter to gaming sites with some of formerly mentioned statements. The point is to point out for reviewers, that when they judge independent titles (more or less every adventure game nowadays except a few pure adventure exceptions like great TMOS or Silver Earring) they have to choose FAIR criterions.

1, Every developer is responsible for a STORY and ATMOSPHERE. There is no excuse for badly thought of story or plot holes. On the other hand, reviewer has to accept that he sometimes is not able to understand everything, just because he is maybe too used to "Postal" games :)
2, Every developer is responsible for Puzzles and interface design. Again, no excuse there, because there is no reason to put sliders in every adventure game available. :P
3, Voiceovers are mandatory! Better than bad voiceovers are text bubbles. And profi actors are expensive. Without proper contacts, this is very hard to manage for Indie teams. And bad voiceovers really spoil the game. BUT reviewers scorns games without voiceovers and with bad voiceovers even more. :)
4, Graphics is the most expensive part of the game producing. Starting from GFX software going through artist hiring etc. etc. This is achilles heel. We have tons of programmers, musicians, writers. We don't have google of quality gfx artists who would work on indie game for some future vague promise of money income. So we are using what we have. Sometimes it's great sometimes not so, but we don't have budgets of LucasArts to hire team of *ARTISTS*.

So the bottom line is - reviews of the next wave of adventure games should be focused on Story, design, puzzles, dialogues and fluidity NOT on used technology. Think of DarkFall 1 (when it was released it was terrible scorned by *not-naming-who* only to be later recognized as a real hit. The reason for bad review was just the static gfx of Myst like engine even when it was so atmospheric and well rendered by a real artist)

I hope it makes a sense at least a bit and for anyone who would comment this and add something I'd be really happy. I was provoked by reactions of some of adventure reviewers I found on various forums. Also we discussed this with Tol (Hi Tol :)) both of us angry about some of those ascpects.


Ok, that's it. Steam is out. Thank you for wasting your time by reading this. :)

PS. Don't expect to be successful with your adventure game when there is 10000 idiots yelling at forums that HalfLife 2, Moment Of Silence etc. sucks. LOL

138
Technical forum / Text entities
« on: November 06, 2004, 08:19:48 PM »
Hi,

just a quick question. What is a preffered way to create a large text entities eq. books, manuscripts, etc?

I am now thinking advantages of live text against images and vice versa.

If live text how would you handle "typesetting". Well, maybe the images for each page are the best thing but then,
load it and hide / show pages (with some animation) or make changescene with custom changescene animation?

Thanks in advance for tips.



139
Feature requests, suggestions / Music delay
« on: November 06, 2004, 12:17:45 PM »
I would really like to see this feature, which would be very reasonable IMHO - if Game.PlayMusic has next optional parameter delay before loop. This would be in seconds.

It's generally a good idea not to let the music play all the time and especially for smaller tracks it's good to let them stop and only the background sound effects would sound for some time.

I know it's easy to keep track of this in code, but cleaner way would be encapsulation with music method.

Just a thought while coding.

140
Feature requests, suggestions / WME splash screen
« on: November 06, 2004, 12:11:20 PM »
Hi,

what about some Powered by wintermute nice splashscreen? I'd definitely include it. :)

Maybe we can make some unofficial contest.  ::rock

141
Scripts, plugins, utilities, goodies / Dijkstra puzzle
« on: November 06, 2004, 10:52:58 AM »
Hi muters.

I have a puzzle in which I have a grid 8x8 in which there are a few tiles. They can be moved according to the puzzle rules and the point is that if I choose tile start and tile destination, it has to slide around obstacles via the shortest path there (if it's of course possible).

Several of you told me, why not use built in path finding algorithm? Well I didn't found a way so maybe I spent some extra time reinventing the wheel. On the other hand I managed to hack Dijkstra's algorithm (breadth-first search) to work with wintermute and its single dimensional arrays. From my tests in 8x8 grid the worst case was 16 different paths with 10 elements, but usuallly it's much less. 

For sake of speed I am using the array pathes which is devided to segments (in my case I use 64 nodes for each path), but all this is easily tweakable with the constants.
 
I cleaned and commented the code (from the mess Mnemonic saw  ;D ) and here it is for anyone who would need something like this.

Function for calling are initsearch(); and findroute(TileX,TileY);  Source is ActiveTilie.x and ActiveTilie.y;

Enjoy :)

Code: [Select]
global PuzzleArray;                                       // The map with obstacles (0 is free, !=0 is obstacle)
var open = new Array(64);  // Open set for grid (max lenght of longest path)
var pathes = new Array (1300); // All Pathes are stored here
var pathcnt = 0; // Number of pathes
var correct_path = 0; // When path found, this one is the rightful

var ActiveTilie;                // Active Tile

ActiveTilie.number = 0; // Info about selected Tile
ActiveTilie.x = 0;                                       
ActiveTilie.y = 0;

global tilies; // Definition of tilies as appears in scene_init

const GRIDX = 8;                 // Grid Size X
const        GRIDY = 8; // Grid Size Y
const OPENSIZE = 64; // Size of OPEN array


// This is called whenever we need to use search

function initSearch()
{

correct_path = 0;
for (var a=0;a<OPENSIZE;a=a+1)
open[a] = 0;

for (a=0;a<1299;a=a+1)
pathes[a] = -1;

pathcnt = 0;

return;
}


// Function for deleting path, which is a dead end

function deletepath(pathc)
{
var startpath = pathc*OPENSIZE;
var lastpath = (pathcnt-1)*OPENSIZE;

if (pathcnt == 1)
{
  // We have no more paths. There is noway to run...
pathcnt = 0;
return;
}

if (pathc == (pathcnt-1))
{
   // Deleted path is the last one
   pathes[startpath] = -1;
   pathcnt = pathcnt - 1;
   return;
}
   
   
 // Move the last part in place of deleted.
   
while (pathes[lastpath] != -1)
  {
  pathes[startpath] = pathes[lastpath];
  lastpath = lastpath + 1;
  startpath = startpath + 1;
  }

pathes[startpath] = -1;
pathcnt = pathcnt - 1;
return;
}



// Discard last node for path branching

function popnode(pth)
{
var spos = pth*OPENSIZE;

while (pathes[spos] != -1)
{
spos = spos + 1;
}

pathes[spos-1] = -1;
return;
}


// Add note on top of path stack

function addnode(pth, x, y)
{
var spos = pth*OPENSIZE;

while (pathes[spos] != -1)
{
spos = spos + 1;
}

if (spos>((pth*OPENSIZE) + OPENSIZE-1))
{
// Too long path, it would overlap to different path = dead end
deletepath(pth);
return;
}

pathes[spos] = y * GRIDY + x;
pathes[spos+1] = -1;
return;
}


// Add path to path repository

function addpath(oldpath,px,py)
{
  pathcnt = pathcnt + 1;
  var startpath = (oldpath*OPENSIZE);
  var newpath = (pathcnt-1)*OPENSIZE;

  while (pathes[startpath] != -1)
  {
pathes[newpath] = pathes[startpath];
newpath = newpath + 1;
startpath = startpath + 1;
  }

  pathes[newpath-1] = -1;
  addnode(pathcnt-1,px,py);
   
  return;
}


// Returns last node from path

function getLastNode(pths)
{
var spos = pths*OPENSIZE;
while (pathes[spos] != -1)
{
spos = spos + 1;
}

var news = pathes[spos-1];
return news;
}

// Gets tile number from Puzzle Grid

function getTile(x,y)
{
return PuzzleArray[y*GRIDY+x];
}


// We have to check if two tiles (sx,sy) (dx,dy) are adjacent

function isAdjacent(sx,sy,dx,dy)
{
if((dx < 0) || (dx >= GRIDY))
{
return false;
}

if((dy < 0) || (dy >= GRIDY))
{
return false;
}

if(sx == dx)
{
// The squares are adjacent if the source square is above the destination square
if((sy - 1) == dy)
return true;

// Or if the source square is below the destination square
else if((sy + 1) == dy)
return true;
}
else if(sy == dy)
{
// The squares are adjacent if the source square is left of the destination square
if((sx - 1) == dx)
return true;

// Or if the source square is right of the destination square
else if((sx + 1) == dx)
return true;
}

return false; // CELL (dest_x, dest_y) IS NOT adjacent to CELL (src_x, src_y)

}


// We have to check, if tile x,y is Open and not solid

function isOpen(x,y)
{
if( PuzzleArray[y*GRIDY+x] != 0 )
return false;

if(open[y*GRIDY+x] != 0)
return false;

return true;
}


// This is the Dijkstra's guts.

function findroute(TileX, TileY)
{
initSearch();

var actpath = 0; // Actual processed path.
var opener = 0; // Indicates how many branches are from current node. If 0, delete path.
var tmp_node;  // value (global value), x,y

// Create the first path

open[ActiveTilie.y*GRIDY + ActiveTilie.x] = 1;
pathcnt = 1;
addnode(actpath,ActiveTilie.x,ActiveTilie.y);

while (pathcnt > 0)
{

// Get last node from actual path

tmp_node.value = getLastNode(actpath);
tmp_node.x = tmp_node.value % GRIDY;
tmp_node.y = ToInt(tmp_node.value / GRIDY);

opener = 0; // We have no open ends yet.

for (var ox = tmp_node.x  - 1; ox < tmp_node.x + 2; ox = ox + 1)
for (var oy = tmp_node.y  - 1; oy < tmp_node.y  + 2; oy = oy + 1)
{
if (isOpen(ox,oy) && isAdjacent(tmp_node.x,tmp_node.y,ox,oy))
{

opener = opener + 1;

if (ox == TileX && oy == TileY)
{
//Path Found

if (opener > 1) { popnode(actpath); }
addnode(actpath,ox,oy);
correct_path = actpath*OPENSIZE;
return true; // Returning correct path
}
else
{
// Let's look some more

// Set cell as visited
open[oy*GRIDY+ox] = 1;

if (opener == 1)
{
//Go down the road.
addnode(actpath,ox,oy);
}
else
{
// Add new path
addpath(actpath,ox,oy);
} //  else
  }   // else
  }     // If

  }       // For

if (opener == 0) deletepath(actpath);  // Path is a dead end
actpath = actpath + 1; // Let's walk down the next path

if (actpath>=pathcnt) actpath=0; // We have to go to first path

}

return false;

}

142
Technical forum / BUG with ToInt?
« on: November 04, 2004, 06:22:18 PM »
Hi,

just a thought, when I create a new array:

global PuzzleArray = new Array(64);
and later access it via:
PuzzleArray[ y * 8 + x] = value;

it works.

If I however make this:

PuzzleArray[ToInt( y * 8 + x)] = value;

engine crashes to desktop

---------------------------------------------------------
---------- WME crash report: 04-11-2004, 18:13 ----------
---------------------------------------------------------
wme.exe caused a EXCEPTION_ACCESS_VIOLATION in module dcscomp.dll at 001B:100037C1
EAX=00000001  EBX=00000001  ECX=00040004  EDX=014EAB58  ESI=00E092D0
EDI=00000001  EBP=00000001  ESP=0012F460  EIP=100037C1  FLG=00010206
CS=001B   DS=0023  SS=0023  ES=0023   FS=0038  GS=0000
Stack trace:
001B:100037C1 (0x00000000 0x00000000 0x00000000 0x00000000) dcscomp.dll

Not, that it's critical for me. Just I am sometimes trying weird things :)
Anyways, is there any way how to create multidimensional arrays? I am right now using my matrix access functions into single dimensional array, but it would be nice if somewhere in future I could make multidimensional matrices.




Pages: 1 ... 8 9 [10]

Page created in 0.113 seconds with 17 queries.