Páginas

Mostrando las entradas con la etiqueta game. Mostrar todas las entradas
Mostrando las entradas con la etiqueta game. Mostrar todas las entradas

MiniDungeon – A Free Random Dungeon Jump Start for Unity

The other day I was discussing with a friend about automatic dungeon creation in Unity3D and I recommend him an excelent and also a free and easy Unity project I had found some time ago. The project is called "MiniDungeon – A Free Random Dungeon Jump Start for Unity" and it used to be hosted here http://www.stevegargolinski.com/minidungeon-a-free-random-dungeon-jump-start-for-unity/
For my and his suprise, the website was (actually is) down but I told him to not to worry because I have the source home at home.
As I think this code is great, I decided to re post the original blog spot (I have it in my pocket ;) and to upload the original source code to my public bitbucket.

First of all, you can download the minidungeon source code here https://bitbucket.org/hzaldivar/minidungeon.git

Here you have the original blog post written by Steve Gargolinski (@sgargolinski):

Over my holiday break I spent some time messing around with Unity on a basic random dungeon generator with lightweight RPG elements, and I’ve decided to post a version up here as a jump start in case anyone is interested in working on something similar. Hopefully this will help someone out.

I’ll start this post with a web player version and then the full Unity project download, and then go into a bit more detail below. I also want to throw out the caveat up front that this code is not polished and hasn’t been iterated on much or tested extensively.

With that out of the way, click the image below to check out MiniDungeon in the web player. There is a ‘walkthrough’ below.
The Basics / “Walkthrough
MiniDungeon starts off at a main menu, but the only real current option is to play the game. Clicking on Play takes you to the Home Base, which is what I envision as the hub in between adventures – a place to upgrade weapons/armor, train skills, shop for healing potions, maybe get some info from townsfolk, etc.
I also envisioned the Home Base as a quest hub, where you choose which adventure you want to go on and the future dungeon/storyline is configured to make this happen. So you might choose “Go Rescue the Princess” or “Go Slay the Dragon”, and the dungeon generator/storyline will be customized appropriately. In this demo, all you can do from here is click “Go on an Adventure”.

At this point you are launched into a randomly generated dungeon. There are some instructions on hotkeys in the upper-left, and then some info on your character in the upper-right. This randomly generated dungeon floor includes stairs up (green) and stairs down (red). If you move around (with WASD) to the stairs down, you can press spacebar to go to the next level. Note that the dungeon floor counter in the upper left will increment. As you go down each level, there’s a random placeholder story segment to advance the future story.

If you want to see a larger view of the dungeon, hit ‘Z’ to zoom out and then back in. You can also hit ‘Tab’ to skip ahead to the next dungeon level. Zooming out and then repeatedly hitting ‘Tab’ will show you the range of dungeon floors that can be generated.

Every once in a while you will hit a random battle vs a giant toad. Press ‘X’ to defeat him, you’ll notice that sometimes you’ll lose HP from this battle. If you run low on HP you can hit ‘I’ to open up your inventory and use a Healing Potion. Defeating a bunch of toads will level you up and increase your max HP/MP.

That’s about it – nothing staggering, but probably a pretty good jump start if you’re interested in making a random dungeon game. The only real complicated aspect of this project is the random dungeon generation, so I’ll go into a bit more detail on that.

Random Dungeon Generation
The random dungeon generation algorithm included (in the DungeonGenerator class) is something that I worked out off the top of my head. I did some quick research and couldn’t find an algorithm to do what I was looking for, but it’s possible I just didn’t look in the right place. My goal was something similar to the iPhone game Deep Deep Dungeon (link here), and I’m definitely happy with the results. The algorithm is definitely not optimal or optimized, but it works well enough and should get you started.

We start off with sixteen dungeon building blocks. Here’s a page from my notebook that shows what we’re working with along with my naming convention.

The prefabs that represent these can be found in Prefabs/Dungeon Building Blocks. These are what we’re going to piece together in order to create our dungeon.

In the DungeonGenerator object, you are able to specify the size of the dungeon – NumBuildingBlocksAcross and NumBuildingBlocksDown. The default values create an 8×8 dungeon, but it should work for most size specifications. I just tested a 1×8 dungeon floor (not very interesting), and a 100×100 dungeon floor (took a while to generate) – which both work.

Here is the basic algorithm that we use to generate a dungeon floor:
  • We start off by creating a grid of empty building blocks. The grid matches the size specified (discussed above), and the cells are defined in the (x, z) plane. (0,0) is in the bottom-left, (max, 0) in the bottom-right, and (max, max) in the top-right. 
  • At this point we iterate through the entire grid, bottom-left to top-right, and choose a ‘valid’ building block for each cell position. What’s a ‘valid’ building block? I’m glad you asked! 
    • If the surrounding cells are all empty, then we choose a building block type randomly. We leave out the ‘capper’ building blocks from this choice, which are the four blocks used to cap off dead ends (Nx, Sx, Wx, and Ex). 
    • If some of the surrounding cells are not empty, then we choose a building block that matches the existing paths. 
      • Let’s say we have a cell to our west that’s a passage from west to east. We’ll make sure that the block we choose has an exit to the west to match the existing path. 
      • Let’s say we have a cell to our east that’s a passage from north to south. We’ll make sure to NOT choose a block that goes west, since it would create a disconnect with the existing path. 
      • So basically we narrow down the possibilities based on surrounding cells, and then choose randomly from the valid building blocks. 
  • After filling out the grid in this way, there’s the potential that the algorithm has generated ‘islands’. Sections of the maze that are separated from each other with no connecting paths. There might be a way to update the ‘filling out’ section of the algorithm to eliminate these islands, but right now I deal with it through some post processing. 
    • I do a little bit of low-class pathfinding in the CellConnectedToCell() function to identify these islands and turn them into empty cells. There might be a better way to recover and connect the islands instead of deleting them, solid exercise for the reader. 
    • Right now I consider an Island to be any section of the maze that has no way to connect to the center of the grid. 
  • The final step in the pathway generation is to cap off dead ends. As mentioned above, there are four ‘capper’ dungeon building blocks that are dead ends. We go through the grid and identify any hanging passages that don’t connect to anywhere and cap them off with dead ends. 
  • After completing the maze, we choose a random location on the path for the stairs up (start position) and stairs down (exit position). 
And that’s it, we’re done! As mentioned above, there are some shortcomings and lots of potential optimization and improvements – but it works well enough.

Future Work
It’s not hard to come up with a list of future work for this project, since the possibilities are endless. Here are some ideas off the top of my head that should result in a pretty solid dungeon crawler: 
  • Add in some real graphics, animation, sound, models, etc. 
  • Create a real combat system, maybe stat-based and simulated or some sort of combat mini-games? Special abilities, magic spells, bonusus? 
  • Add an inventory and loot system. 
  • Add a shop/economy. 
  • Extend the random dungeon algorithm to be more interesting. The one included works well, but is bare bones. Some potential extensions/improvements are discussed above, and there are plenty more… 
  • Right now the dungeon building blocks are just basic passages, but there’s no reason they can’t be much more interesting. 
  • Create different dungeon floor exit conditions. Maybe some levels need to be completed by defeating a specific monster instead of finding stairs down. 
  • Make some real quests, and parameterize the dungeon to be different based on the type of quest you’re doing. Add some real storyline segments (talking heads, text, lots of possibilities here) that advance the story. Maybe add a branching quest structure? 
  • Develop a hero. 
  • Try using this approach for a different game genre. You could try making a FPS with random maps, for example. 
  • Add support for additional building block ’tilesets’. 
  • … and many, many more. 
What Can I Use This For?
Feel free to use this project for whatever you want, I only ask that you take the time to drop me a message and let me know what you’re using it for.

Good luck!

Oh yeah, one last thing – here’s a link to a thread on the Unity3D forums for MiniDungeon: http://forum.unity3d.com/threads/minidungeon-a-free-randomly-generated-dungeon-jump-start.72525/

Unity3d Radar script

I was looking for a way to make a radar or minimap in Unity3d but not adding other camara, just a square and some dots inside representing my game objects. 

I found someone who needed the same as I (http://answers.unity3d.com/questions/62018/how-to-make-a-radarmap.html). I took the Justin's Zaun radar script from the Unity wiki because it's easy to use and is customizable. You can show up to 4 kinds of objects on the radar but it would be easy to add more blip types.

Here is the result, just what I need


Script and Usage Instructions

Attach this wherever you like, I recommend you attach it where the rest of your GUI is. Once attached take a look at the inspector for the object. You are going to see a bunch of options to setup. I've tried to give a set of defaults that will work with little messing around.

The first item that should be set is the "Radar Center Tag" for anything of interesting to happen. This tag should be the object at the center of the radar, typically this is the local player's object. Place a check in the "Radar Center Active" box to diplay the play on the radar.

The second item that should be set is the "Radar Blip1 Tag." This is the tag given to the objects you want to show on the radar. Typically this would be the remote player's tag or the bad guy's tag.

To turn on the display of the blip place a check in the "Radar Blip1 Active" box.

If you run your game at this point you will see a radar in the bottom center of your screen that is showing you all the remote players/bad guys that are around you.

Now that you have seen a quick example of the radar I'll explain all the options. There looks like a lot but they are split into two sections. At the top are general radar settings that determin how you would like the radar to look. On the bottom there are settings for the blips

I'll explain the blips first. This radar supports up to 4 types of blips. Each blip has an "Radar Blip# Active" option for turning on or off the blip. This allows you to have everything setup and then in game based on events to turn on the display of different types on blips.

The second options is the "Radar Blip# Color" setting. This is the color of the blip. Not hard to explain, it changed the color of the object's blips for a given Tag. The last option for a blip is "Radar Blip# Tag." This is the tag for the object you would like to have on the radar.

Some examples would be using Blip1 for bad guys, Blip2 for items the play is trying to find, Blip3 for forts and Blip4 could be the level's exits. Having the items on the radar in differnt colors will let the player identify the type of object the blip represents.

The top options are the overall settings. First is the location of the radar. There are several options to choose from. If you choose "Custom" you have to fill in the "Radar Location Custom" to define the location. When you are defining the location please note this is the center of the radar.

The third option "Radar Type" is how you would like your radar to look. You have a choice of Textured, Round and Transparent. The default is Round and is the colored bullseye you saw at the start if you played with the first example. If you choose Textured you MUST set "Radar Texture" to some image for the background. If you choose Round you can change the colors used in the bullseye with "Radar BackroundA" and "Radar BackgroundB"

The last two options are about the size and zoom of the radar. The "Radar Size" is a percent of the screen the radar will take up, for example .2 is 20% of the screen. The "Radar Zoom" determines how much of the map should be displayed on the radar. Making this number smaller will zoom out and show you more stuff.

Get the script from https://gist.github.com/vackup/7715805 

Epidemic: using a resource pool system

One of the biggest problem in game development and specially in mobile game development is memory allocating and deallocating. Some OS like iOs let you take the memory you need but doesn't like the idea allocating and deallocating continuously and makes your app or game to crash.

Always a profiler (eg: Unity Profiler) is needed to see how your game do its job under the hood.

A bad practise is Instanciating and Destroy objects because they are expensive task, they do a lot of memory allocating and deallocating, generates garbage (that the garbage collector needs to collect).

So what can we do if we need to Spawn and Despwn objects in our game? The solution is the use of some kind of resources pooling.... This mean, load everything you can / need when you game is starting - instanciate objects - and mark then as Inactive. When you need one object, just look for one Inactive object in your pool, mark it as Active and use it. When you don't need anymore, mark it as Inactive. That's all.

In the case of my game, I just start using resources pools for bombs and explosions because at this moment, they are the only objects that Spawn and Despawn.

I was looking for a free, open source and easy to install / use resources pool and the solution was Prefactory_v1_0, a simple object pool manager for Unity3d. Just visit Prefactory_v1_0 web site to download it and for instructions how to use it.

I just want to thanks Boon Cotter for his excelent Pool Manager and for sharing it!

Remember, here http://bit.ly/1beCGTg you can see a live version of my game. Also, there is a new dead sound! Enjoy it

Epidemic update, bomb and explosions

Detonator Explosion Framework for Unity makes incorporating good explosions easier for all types of developers. At its most basic level, Detonator is a component that can be attached to any GameObject. At runtime it then creates an explosion with configurable color, size, duration, detail, and sub-elements like sparks, smoke, and shockwaves. The Detonator Parametric Explosion Framework has been developed by Ben Throop for the Unity Summer of Code 2009.

You can play with a running example of Detonator here: http://variancetheory.com/detonator/

Thanks to Detonator, I could include astonishing explosions in a really easy way.



Just add a component script to my bomb object (eg: a sphere). My script has a public gameobject variable so I can assing the explision prefab I like most.


And only in my script, I just wrote code for OnCollisionEnter:

 void OnCollisionEnter(Collision collision)   
 {  
       // Instantiate a detonator game object where the bomb is  
       Instantiate (this.detonator, this.transform.position, Quaternion.identity);  
       // Destroy the bomb (because it exploded lol)  
       Destroy(this.gameObject);  
 }  

Remember, you can take a look at the last version of the prototype here http://bit.ly/1beCGTg

Of course, there are a lot of things to improve but I'm just starting

Epidemic, my new "work in progress" game prototype

Inpired by Zombie Infection Simulation v2.3 - The Original and the movie Contagion, I decided to start developing a game prototype using Unity3d

My game should answer some of these questions (in a funny and challenging way):
  1. How long does it takes to the infection to spread?
  2. What are you going to do to save the not infected humans?
  3. How will they react?
Take into account that you'll only have limited resources, so live or die, make your choice

I don't know how this prototype will end but I'm just starting to develop it (also starting to learn Unity :)

Up to date, I only have a bunch of human running, some are infected and some are not infected. I have a few rules already implemented:
  1. When an infected one "touch" a not infected one, it infect him
  2. The infected ones walk slower the the not infected ones.
  3. An infected human dies some second after have been infected.
  4. With a Mouse click you can "fire" bombs that can kill humans (infected and not infected humans)
Also there are some rules to be implemented, for example:
  1. A not infected human can live some time without food
You can take a look at the last version of the prototype here http://bit.ly/1beCGTg

If you any idea or feedback, don't hesitate in contect me.

NOTE: some models were taken from Stealth Unity Tutorial just for prototyping purpose

Se viene la Game Work Jam Rosario de la mano de RGD

Se viene la Game Work Jam Rosario de la mano de RGD. 


Game Work Jam es un programa de emprendedorismo de juegos y videojuegos creado por Gamester, con el objetivo general de desarrollar la industria trabajando colaborativamente en proyectos propuestos por equipos que tienen la necesidad de dirección, ayuda y mentoría externa.
Se convoca a todos los interesados, de las distintas disciplinas, en el desarrollo de juegos con o sin equipo para que asistan a las reuniones – taller y formen parte de esta nueva comunidad proactiva.
En cada jornada nos visitarán distintos mentores referentes de la industria con el objetivo de asistir y capacitar a los equipos durante su desarrollo.

QUE es GWJ Rosario

La Game Work Jam tiene su sede en la Ciudad de Rosario, donde nos reunimos todos los interesados en el desarrollo de videojuegos con los siguientes objetivos:
  • Reunir: disponer un lugar y momento donde los equipos dispersos en sus casas se encuentren para trabajar y sincronizar esfuerzos
  • Mentoría: conectar personas que están comenzando proyectos con profesionales de gran experiencia de la industria
  • Networking: establecer relaciones entre los miembros de la comunidad
  • Capacitación: profesionales invitados entablan dialogo descontracturado y participativo con los presentes sobre una temática especifica
  • Informar: como apertura de cada encuentro se informará sobre novedades de la industria, eventos, concursos, y los presentes tendrán su momento para presentar sus proyectos.

CUANDO

La Game Work Jam Rosario tiene fechas específicas y siempre en el horario corrido de 11am a 4pm en días Sábado.

Los eventos confirmados son:

  1. Sabado 10 de agosto
  2. Sabado 24 de agosto
  3. Sabado 7 de septiembre
  4. Sabado 21 de septiembre
  5. Sabado 19 de octubre
  6. Sabado 26 de octubre
  7. Sabado 2 de noviembre (meeting en EVA)

DONDE

El CEC (Centro de Expresiones Contenporaneas) nos abre las puertas del SUM (Salón de Usos Múltiples) en Paseo de las Artes y el río Paraná.


El Centro de Expresiones Contemporáneas (CEC) es un antiguo galpón portuario de granos, emplazado sobre la ribera del río Paraná en la interjección con Paseo de las Artes, que fue reciclado en 1995 para convertirse, desde entonces, en centro cultural.



INSCRIPCION Gratuita (cupos limitados)

Mas información

Que es RGD

Rosario Game Devs es una comunidad de desarrolladores de videojuegos rosarina, que nació con la necesidad de generar un espacio que nuclee a las empresas y personas que hacen o quieren hacer juegos y viven en la ciudad o alrededores. RGD tiene como objetivo fomentar la industria local del desarrollo de videojuegos generando una comunidad estable de desarrolladores que colaboran estre si y realizando eventos que ayuden a la difusión de la industria.




Mas Info en:

iAd patch for ExEn

ExEn is a high-performance implementation of a subset of the XNA API that runs on Silverlight, iOS and Android. (http://exen.codeplex.com/)

From ExEn codeplex site "ON THE FUTURE OF EXEN: I no longer have time to properly maintain and support ExEn (see this blog post for details). On the one hand: ExEn is still an excellent choice for iOS and Android development, due to its stability and performance. On the other hand: I'm not adding new features or fixing bugs (which occasionally crop up when Apple changes something)."

My game for iOs, A comic of zombies (http://itunes.apple.com/us/app/a-comic-of-zombies/id530916013?mt=8), use ExEn. You can visit its website http://acoz.mylittlebets.com/ if you want to download Pc Version or get the lastest news.

Well, the thing is that today I upload a patch for iAd suppot. This and other patchs can be downloaded from http://exen.codeplex.com/SourceControl/list/patches

Enjoy it!

XNA Bezier Curve

A Bézier curve is a type of curve that is easy to use, and can describe many shapes. Bézier curves are famously used for representing characters in fonts, and shapes in vehicle design. Bézier curves are also used in vector art packages for curve drawing, and in 3D animation tools to represent animation paths.

In games, Bézier curves are sometimes useful to describe paths: the racing line in a racing game, or the line in line-drawing games such as Flight Control, or the looping butterfly that enlivens an RPG.

Bézier curves are popular because their mathematical descriptions are compact, intuitive, and elegant. They are easy to compute, easy to use in higher dimensions (3D and up), and can be stitched together to represent any shape you can imagine.


Thanks to http://blog.icode.com/ I can implement a XNA Bezier Curve, here's what it look like.



BezierCurve.cs

using Microsoft.Xna.Framework;

    public class BezierCurve
    {
        public static Vector2 GetPoint(float t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)
        {
            float cx = 3 * (p1.X - p0.X);
            float cy = 3 * (p1.Y - p0.Y);

            float bx = 3 * (p2.X - p1.X) - cx;
            float by = 3 * (p2.Y - p1.Y) - cy;

            float ax = p3.X - p0.X - cx - bx;
            float ay = p3.Y - p0.Y - cy - by;

            float Cube = t * t * t;
            float Square = t * t;

            float resX = (ax * Cube) + (bx * Square) + (cx * t) + p0.X;
            float resY = (ay * Cube) + (by * Square) + (cy * t) + p0.Y;

            return new Vector2(resX, resY);
        }
    }

Game.cs (main game loop class)
public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Vector2 PlotPoint, p0, p1,p2, p3;

        private Texture2D dummyTexture;

        private float t;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        ///
        /// Permite que el juego realice la inicialización que necesite para empezar a ejecutarse.
        /// Aquí es donde puede solicitar cualquier servicio que se requiera y cargar todo tipo de contenido
        /// no relacionado con los gráficos. Si se llama a base.Initialize, todos los componentes se enumerarán
        /// e inicializarán.
        ///
        protected override void Initialize()
        {
            // TODO: agregue aquí su lógica de inicialización
            p0 = new Vector2(75, 250);
            p1 = new Vector2(100, 150); 
            p2 = new Vector2(500, 100);
            p3 = new Vector2(550, 200);

            base.Initialize();
        }

        ///
        /// LoadContent se llama una vez por juego y permite cargar
        /// todo el contenido.
        ///
        protected override void LoadContent()
        {
            // Crea un SpriteBatch nuevo para dibujar texturas.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content para cargar aquí el contenido del juego
            this.dummyTexture = new Texture2D(GraphicsDevice, 1, 1);
            this.dummyTexture.SetData(new[] { Color.White });
        }

        ///
        /// UnloadContent se llama una vez por juego y permite descargar
        /// todo el contenido.
        ///
        protected override void UnloadContent()
        {
            // TODO: descargue aquí todo el contenido que no pertenezca a ContentManager
        }

        ///
        /// Permite al juego ejecutar lógica para, por ejemplo, actualizar el mundo,
        /// buscar colisiones, recopilar entradas y reproducir audio.
        ///
        /// Proporciona una instantánea de los valores de tiempo.
        protected override void Update(GameTime gameTime)
        {
            // Permite salir del juego
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();
            
            var keyboardState = Keyboard.GetState();

            if (keyboardState.IsKeyDown(Keys.R))
            {
                t = 0.0f;
            }
            
            t += (float)gameTime.ElapsedGameTime.Milliseconds / 1000;

            if (t > 1.0f)
            {
                return;
            }

            // TODO: agregue aquí su lógica de actualización
            //for (float t = 0; t <= 1.0f; t += 0.01f)
            //{
                PlotPoint = BezierCurve.GetPoint(t, p0, p1, p2, p3);

                // now call some function to plot the PlotPoint
            //    YourDrawFunction(PlotPoint);
            //}

            base.Update(gameTime);
        }

        ///
        /// Se llama cuando el juego debe realizar dibujos por sí mismo.
        ///
        /// Proporciona una instantánea de los valores de tiempo.
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: agregue aquí el código de dibujo
            spriteBatch.Begin();

            this.spriteBatch.Draw(
                    this.dummyTexture,
                    PlotPoint,
                    new Rectangle(0, 0, 20, 20),
                    Color.Red);

            this.spriteBatch.Draw(
                    this.dummyTexture,
                    p0,
                    new Rectangle(0, 0, 20, 20),
                    Color.Green);

            this.spriteBatch.Draw(
                    this.dummyTexture,
                    p1,
                    new Rectangle(0, 0, 20, 20),
                    Color.Blue);

            this.spriteBatch.Draw(
                    this.dummyTexture,
                    p2,
                    new Rectangle(0, 0, 20, 20),
                    Color.Yellow);

            this.spriteBatch.Draw(
                    this.dummyTexture,
                    p3,
                    new Rectangle(0, 0, 20, 20),
                    Color.Black);

            spriteBatch.End();

            base.Draw(gameTime);
        }
    }



If you want the project source code, just tweet me https://twitter.com/vackup

A comic of zombies new website launched!

We are very happy to announce that, in addition to our facebook community, we have a new web site for A comic of zombies!

You can visit it from http://acoz.mylittlebets.com and stay in touch with us!



Download original Platformer Starter Kit Source Code for XNA 4

As Microsoft discontinue the XNA development for Windows 8, he removes all links to download XNA 4 starter kits.

I upload original Platformer source code to bitbucket. Here you can download original Platformer Starter Kit Source Code for XNA 4

https://bitbucket.org/hzaldivar/plaformerxna4/

EVA 2012 - Indie Show Room "A Comic Of Zombies v1" (version PC)



El zombiepocalipsis ha llegado!! y eres uno de los ultimos sobrevivientes en el mundo! Entonces trata de permanecer vivo en un lucha sin fin por sobrevivir!!!! Ayuda al Presidente Obama en su camino por recuperar el control y la Casa Blanca.


Gana dinero matando zombies y compra hasta 12 armas y municiones mientras un infierno inevitable te rodea... solo tienes 2 armas por nivel

La pregunta es, cuanto tiempo podras sobrevivir? 

A comic of zombies (un comic de zombies) es un juego diverido y adictivo sin comparacion!

Caracteristicas:
- Arte de tipo comic
- Soporte para Retina Display
- Solo 2 armas por nivel
- Controles de usuarios simples
- 12 armas diferentes
- Varios tipos de zombies distintos
- Sistema de compra

Aca pueden descargarse la version final (v1) para PC del videojuego "A comic of zombies"




El mismo fue realizado en XNA y actualmente esta se encuentra disponible en iOs (version free y paga). El proyecto fue migrado reutilizando el mismo codigo fuente con el proyecto open source ExEn



La idea del juego es sobrevivir e ir pasando nivel tras nivel sin fin donde la dificultad se ira incrementando. Nivel tras nivel podremos comprar armas y municiones.


Para manejar al jugador, se usa el teclado y las teclas:
IZQUIERDA = A
DERECHA = D
ARMA MANUAL = J
ARMA DE FUEGO = K
RECARGAR ARMA = L
CAMBIO DE ARMA = O
ESC = Pausa

Recuerden que para poder ejecutar el juego, necesitan:
Cualquier duda o feedback: https://twitter.com/vackup

Si te gusta este juego, cuentale a tus amigos! y compartelo