• Content count

  • Joined

  • Last visited

Community Reputation

163 Neutral

About Wixner

  • Rank
  1. (MM)O(RPG) database design

    I never said that the database was implemented, it's just "pseduo-design-overview" Perhaps I thought it was too obvious, but here's the basic idea: [list][*]"ID" is an INTEGER referring to a primary key in another database[*]"Flags" are just a collection of approperiate datatypes (like TEXT for string-based information such as names, and REAL and INTEGER for character attributes)[/list] And yes, these are the very basics of just any RPG ever, but is there anythin I'm overseeing? Am I to wide or to narrow in my thinking?
  2. For the last couple of months I've designed and implemented my own little MMO-network library called [i]wixnet[/i] and I am ready to test it in my (MM)O(RPG) game prototype and I need some input on the underlying database design. To spare you the details of the design of my network design, I've decided to use the following types of databases: [b]The Account Database[/b] This is a database dedicated to User Accounts. Only one database per region - UK, US, EU. Contains the following information: [list][*]Username [b] // self-explainatory[/b][*]Password [b] // self-explainatory[/b][*]Account ID [b] // used to connect this account to characters on the game servers[/b][*]Connections [b] // how many simultaneously connections are allowed on this account. Perhaps the game allows for multiple sessions (on different game servers though)[/b][*]Subscription Expiration [b] // unless the game is free to play[/b][*]First Name [b] // self-explainatory[/b][*]Last Name [b] // self-explainatory[/b][*]E-Mail Address [b] // self-explainatory[/b][*]Country [b] // used to locate the game servers closest to the users[/b][*]Gender [b] // self-explainatory[/b][*]Date of Birth [b] // self-explainatory. Could be used to give the player some nice in-game birthday presents[/b][/list][b] The Character Database[/b] This is a database used to store characters, or avatars, or toons, or whatever you call them. One database per game server. Contains the following information: [list][*]Account ID [b]// connects this character to the player account[/b][*]Character ID [b] // used by the game server to identify this character[/b][*]"General information" [b] // name, title, guild-membership, gold[/b][*]"Appearance flags" [b] // ID for: character model, hair style, tattoos, facial hair, like: "Character: 6" (where 6 is the ID for the "Undead Centaur")[/b][*]"Equipment flags" [b] // ID for: each item in every available inventory- and equipment-slot, like: "Left Ring: 15" (where 15 is the ID for "Brewgor's Ring of Low Latency") or "Inventory[12]: 55" (where 55 is the ID for "Major Potion of Bandwith Reducer" and is located in the inventory slot number 12)[/b][*]"Attribute flags" [b] // strength, dexterity, mana, power, luck[/b][/list] These are the databases that I think seems right, and I'm working on the Item Database and the Game Database at the moment and I will post those as soon as I'm confident that they're good as well. What is your opinion? Does this seem like a good implementation to you? any ideas? suggestions? [b] [/b]
  3. A big thank you to both of you. It seems that I have access to the entire (unified) system memort pool except for the resources allocated by the O/S and the .Net framework.
  4. According to this this Wikipeda Entry, the Xbox is equipped with 512MB GDDR3 system memory and 10MB eDRAM for the frame buffer. Is the entire memory pool (except the eDRAM) available for me or am I limited to a fixed amount of system memory?
  5. Quote:Original post by bzroom I want to refer you to this: http://www.gamedev.net/community/forums/viewreply.asp?ID=3549796 Look at the CollisionAndResolutionWithStaticEnvironment function. I'll take a look at that. Thank you! Quote:Original post by gameXcore Can I just ask, why not just use a physics engine? Since your using XNA I could highly recommend farseer as exactly what your after. I'm working on a 2D monster truck game where I define my ground as a set of vertices which specify a "land mass". I then triangulate these vertices and can use this triangle data not only for rendering the landmass, but also I can then feed each of these individual triangles into farseer for the collision. Take a look on my website for some screens of what I've been doing, and I'll be happy to give you any more pointers hsould you need them. You got a point that it is no use reinventing the wheel,but this is a way for me to refresh all math and logics.
  6. I'm quite ashamed of this piece of code in its current state. It's a mix of a couple of sources I've found in the internet and some physic books The most horrid part of it, it's the conversion to and from the XNA vector class. (this is to make sure I haven't failed in my own math implementation) [source lang = C#] private void PerformCollisionResponse() { Microsoft.Xna.Framework.Vector2 CollisionVector = CollisionInfo.N * CollisionInfo.Depth; Physiq.Component.Point P0 = CollisionInfo.E.P0; Physiq.Component.Point P1 = CollisionInfo.E.P1; float T; if (System.Math.Abs(P0.Position.X - P1.Position.X) > System.Math.Abs(P0.Position.Y - P1.Position.Y)) T = (CollisionInfo.P.Position.X - CollisionVector.X - P0.Position.X) / (P1.Position.X - P0.Position.X); else T = (CollisionInfo.P.Position.Y - CollisionVector.Y - P0.Position.Y) / (P1.Position.Y - P0.Position.Y); float Lambda = 1.0f/( T*T + ( 1 - T )*( 1 - T ) ); Microsoft.Xna.Framework.Vector2 V0 = new Microsoft.Xna.Framework.Vector2(P0.Position.X, P0.Position.Y); Microsoft.Xna.Framework.Vector2 V1 = new Microsoft.Xna.Framework.Vector2(P1.Position.X, P1.Position.Y); V0 -= CollisionVector * (1 - T) * 0.5f * Lambda; V1 -= CollisionVector * (T) * 0.5f * Lambda; P0.Position.X = V0.X; P0.Position.Y = V0.Y; P1.Position.X = V1.X; P1.Position.Y = V1.Y; Microsoft.Xna.Framework.Vector2 V2 = new Microsoft.Xna.Framework.Vector2(CollisionInfo.P.Position.X, CollisionInfo.P.Position.Y); V2 += CollisionVector * 0.5f; CollisionInfo.P.Position.X = V2.X; CollisionInfo.P.Position.Y = V2.Y; }
  7. I managed to fix my previous error (the calculations for my verlet update had errors) but now I managed to run into something else. By rigid bodies aren't so rigid as I was hoping. The executable here http://wixner.no-ip.com/game.rar is supposed to demonstrate a "stacking demo" with boxes, but as you can see, the calculations are fairly unstable and the boxes aren't rigid but "soft-ish" Any idea what might cause the behavior? I've checked the edge update function and the collision response function with no success.
  8. Sorry for the bump but I think it's better to keep all my math- and physics related question in one thread. I've got a very rough SAT collision detection implemented by now, but it seems that the implementation detects the wrong edge being part of the collision. I've tried to compare my implementation with a few other sources but can not find anything that seems obviously wrong. Is there anyone who can spot anything that is out of order? [source lang = C#] public bool PerformCollisionDetection( Physiq.RigidBody RB0, Physiq.RigidBody RB1 ) { // if RB0 CANT COLLIDE WITH RB1, CONTINUE float ProjectionSegmentOverlap = 10000.0f; // System.Collections.Generic.List< Physiq.Component.Edge > Edges = new System.Collections.Generic.List< Physiq.Component.Edge >( RB0.Edges.Count + RB1.Edges.Count ); // Edges.AddRange( RB0.Edges ); // Edges.AddRange( RB1.Edges ); // foreach( Physiq.Component.Edge E in Edges ) { // Microsoft.Xna.Framework.Vector2 Normal = new Microsoft.Xna.Framework.Vector2( -(E.P0.Y - E.P1.Y), E.P0.X - E.P1.X ); // Normal.Normalize(); // Floats used to store the projection segment of Point(x) in RigidBody B0 float B0_Px_MIN, B0_Px_MAX; // Floats used to store the projection segment of Point(x) in RigidBody B1 float B1_Px_MIN, B1_Px_MAX; // Initial projection of the first Point in RigidBody B0 B0_Px_MIN = B0_Px_MAX = Normal.X * RB0.Points[0].X + Normal.Y * RB0.Points[0].Y; // Initial projection of the first Point in RigidBody B0 B1_Px_MIN = B1_Px_MAX = Normal.X * RB1.Points[0].X + Normal.Y * RB1.Points[0].Y;; // Project the points of RigidBody B0 for( int i = 0; i < RB0.Points.Count; ++i ) { // Project Point(i) float Projection = Normal.X * RB0.Points[i].X + Normal.Y * RB0.Points[i].Y; // Update the projection segment if( Projection > B0_Px_MAX ) B0_Px_MAX = Projection; if( Projection < B0_Px_MIN ) B0_Px_MIN = Projection; } // Project the points of RigidBody B1 for( int i = 0; i < RB1.Points.Count; ++i ) { // Project Point(i) float Projection = Normal.X * RB1.Points[i].X + Normal.Y * RB1.Points[i].Y; // Update the projection segment if( Projection > B1_Px_MAX ) B1_Px_MAX = Projection; if( Projection < B1_Px_MIN ) B1_Px_MIN = Projection; } // Float used to store the distance between the two projected segments float ProjectionSegmentDistance = 0.0f; // Update the distance if (B0_Px_MIN < B1_Px_MIN) ProjectionSegmentDistance = B1_Px_MIN - B0_Px_MAX; else ProjectionSegmentDistance = B0_Px_MIN - B1_Px_MAX; // No overlapping projections if( ProjectionSegmentDistance > 0.0f ) return false; else if( System.Math.Abs( ProjectionSegmentDistance ) < ProjectionSegmentOverlap ) { ProjectionSegmentOverlap = System.Math.Abs( ProjectionSegmentDistance ); E.IsColliding = true; CollisionInfo.E = E; // edge CollisionInfo.N = Normal; // normal } else E.IsColliding = false; // Amount of penetration of the bodies CollisionInfo.Depth = ProjectionSegmentOverlap; } return true; }
  9. Quote:Original post by Captain P I'm using the same approach and it's working fine so far. You may want to specify custom 'push' vectors for your collision lines though - not every shallow slope should make the player slide down (unless that's what you want of course). You may also want to build in some form of image reuse, such as the ability to place sprites on top of your background images. I've been working on an editor that allows free-form sprite placement, perhaps it can give you some inspiration. First of all that editor looks really sweet. I had something like that in mind too but I really want to get familiar with the physics and the mathematics first. I was planning to store some data in my edges and the push-vector is most likely something I need to implement. I was also planning to take the edge normal into consideration when performing the SAT (I don't need to perform projections of the edges with the normal facing away from the object bound to collide, but I guess this is a premature optimization) Edit: After some consideration, I'm not sure about that edge-normal collision theory.
  10. Hello members of the gamedev Community and long time no see. I've been abscent from the game developer scene for almost a year now, but decided to make a final attempt to get something serious done, and as you might have guessed there's some platforming involved. I have already decided the basic design of my game; an adventure/explorer game much like the Metroid serie and the later Castlevania serie on the Nintendo DS, with handdrawn (that is non-tiled) backgrounds with collisiondata specified by 2d vectors and the individual vector normal as the vector collision direction. There is one thing I need to verify first though and that is if vector/box (vectors for environment and box for player/sprites/interactive objects) collision is enough for a platformer or if I should rethink the collision theory? [Edited by - Wixner on November 28, 2009 6:19:26 AM]
  11. No not really, but FSMs in that scale can be a bit tedious; I am expecting atleast 10-20 actions and around the same in interactions so a FSM with atleast 40 states gets pretty nasty, but I will take a better look at FSMs anyway so thanks for the tip.
  12. Hi. I am trying to create a simple yet flexible action system for my platform game (currently being developed in XNA) but it seems I need to think outside the box. So what do I mean with Action System The Action System, AS for short, is a system that is capable of tracking the current actions the player is performing and preventing unavailable and illegal action and action combinations to be performed. Illegal Action Combinations, IAC, is a series of actions that is "physically" impossible to perform, like Crouching while Jumping or Jumping while Falling while Unavailable Action, UA, are actions that need a specific talent or item to perfom, like the Spiderball in Metroid or some sticky boots to be able to walk upside down. I got a few actions up and running with the classic switch-case/if methods, but those are really a mess with restricions like mine and I need a way to get a better overview and control over the system. I had some kind of Actor-system underway, but fell on its "bloatity". Can someone shed some light over here or give me some tips and hints?
  13. As so many others, I seem to fail at writing custom writers/loaders for the Content Pipeline. I've wrapped my head around this for two days now, examining fully working samples, but can not find any differences in my project and those projects. My workspace is, as recommended, separated into three different projects; Tribute - The Game Project; contains the game code TributeLibrary - The Library Project; contains all common data structes TributePipeline - The Content Pipeline Project; Contains the custom readers and writers I have configured all the references needed (Tribute has a reference to the TributeLibrary, Tribute::Content has a reference to the TributePipeline and finally, TributePipeline has a reference to the TributeLibrary) This is the data structure I'm trying to read/write: [source lang = "c#"] // namespace TributeLibrary { // public class FrameIO { // private FrameIO() { } // public FrameIO( Rectangle Rectangle, int DurationInMilliseconds ) { // this.Rectangle = Rectangle; // this.DurationInMilliseconds = DurationInMilliseconds; } // public Rectangle Rectangle { get; set; } // public int DurationInMilliseconds { get; set; } } } // end TributeLibrary And this is the reader: [source lang = "c#"] // namespace TributePipeline { // public class FrameIOReader : ContentTypeReader < FrameIO > { // protected override FrameIO Read( ContentReader ContentReader, FrameIO FrameIO ) { // Rectangle Rectangle = new Rectangle( ContentReader.ReadInt32(), ContentReader.ReadInt32(), ContentReader.ReadInt32(), ContentReader.ReadInt32() ); // int DurationInMillseconds = ContentReader.ReadInt32(); // return new FrameIO( Rectangle, DurationInMillseconds ); } } } // end TributePipeline Moving on to the writer: [source lang = "c#"] // namespace TributePipeline { // [ContentTypeWriter] public class FrameIOWriter : ContentTypeWriter < FrameIO > { // protected override void Write( ContentWriter ContentWriter, FrameIO FrameIO ) { // ContentWriter.Write( FrameIO.Rectangle.Left ); // ContentWriter.Write( FrameIO.Rectangle.Top ); // ContentWriter.Write( FrameIO.Rectangle.Right ); // ContentWriter.Write( FrameIO.Rectangle.Bottom ); // ContentWriter.Write( FrameIO.DurationInMilliseconds ); } // public override string GetRuntimeReader( TargetPlatform TargetPlatform ) { // return typeof( FrameIOReader ).AssemblyQualifiedName; } } } // end TributePipeline And finally, the XML file [source lang = "c#"] <?xml version="1.0" encoding="utf-8"?> <XnaContent> <Asset Type="TributeLibrary.FrameIO"> <Rectangle>0 0 0 0</Rectangle> <DurationInMilliseconds>100</DurationInMilliseconds> </Asset> </XnaContent> The compiler error I receive is: Unsupported type. Cannot find a ContentTypeWriter implementation for TributeLibrary.FrameIO I think the problem lies in the writer (Duh) because if I, on purpose, creates an invalid xml file for the FrameIO (Like three elements within the <Rectangle>-tag), the compiler warns me about invalid entries. Could someone help me with this, and put my tormented soul into the Coding.Nirvana? Status Update I got some great help over at the official xna forums and I had totally no idea that .NET applications were unable (not the entire truth) to start from a network device, where i stored my project. [Edited by - Wixner on February 20, 2009 1:05:48 AM]
  14. Exploration Games

    Quote:Original post by Delphinus // .. // I also provided focus on the storyline and background to the game - essentially, the rewards for achieving are discovering more about the game world. Through carvings, writing, and the general terrain, I'm attempting to create a game where the aim is to find out the history of the region - like an archeologist. Moreover, the main character's backstory is tied into the region's. At maximum abilities, the main character can head to the huge temple in the centre of the game world for the conclusion to the game. Interesting. I've also planned to reward the player with new "findings" about the world like you mention. A simple reward for climbing a certain mountain can be the revealing of a church or any other religious building/symbol. Even though the player seems to be alone in the world, I want to have a dynamic world that can change depending on when and how the player visits a certain zone. The second time the player visits the religious building/symbol, it might have been desecrated or perhaps.. traces of ghosts or something like that. Time and space will be of great significance in my to-be game
  15. Exploration Games

    Quote:Original post by Delphinus Try Knytt. It's based completely on exploration with a very limited set of abilities. Yes, I have tried that little wonderful piece of game and that is essentially what I want to create, except for the sake of a complete ripoff. Another question I've been searching for answers to is wether to implement death in the game. In my opinion, death is the ultimate way to punish a player that happens performs the wrong action at a certain time. If there are no (or a very few) enemies in the world, what could possible kill the player? He or she can jump/fall to death and be killed by traps but nothing else. If the only way to die is by instant-death, there's no real need for a healtbar and with no need for a healthbar, we are in no need of an OSD, which is good.