Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Temas - WaaghMan

#1
Industria y mercado / Steam Greenlight
10 de Julio de 2012, 12:16:43 AM
Suena bastante bien: http://steamcommunity.com/greenlight

Básicamente publicas datos del juego (capturas, video...) y la comunidad de usuarios indica si desea que el juego esté disponible en Steam o no.

Mucho me temo que a la hora de la verdad estará jodido que un juego salga sin darle un poco de publicidad, pero bueno, al menos es mejor que no recibir respuesta nunca.
#2
XNA / Little Racers STREET
26 de Enero de 2012, 10:00:06 AM
Nuestro último juego. He tardado en sacar el post porque esperaba a tener el trailer en Youtube :)

http://youtu.be/VnfH6Z46NDc?hd=1

El juego ya ha sido aprobado y lo sacaremos en breve :).
#3
XNA / Nuevo dashboard de Xbox
17 de Noviembre de 2011, 10:01:24 AM
Bueno, ya está la beta accesible a ciertos usuarios (entre los que no me incluyo :( ), y por lo que tengo entendido, los juegos Indie de Xbox sí aparecen como resultado de las búsquedas (eso es bueno), pero el acceso al bazar de juegos (Indie o no), si no es por búsquedas, ha empeorado bastante (eso es malo).

Así que una cosa buena y una cosa mala. Creo que en resumen será malo, porque aunque las búsquedas pueden ayudar bastante si a alguien le da por buscar un juego concreto o términos genéricos, veo raro que a alguien le dé por buscar "Plataformas", "Gatos" o "Sangre". Vamos, que no sé qué vas a querer buscar. Y si el Marketplace normal se esconde más, pues peor para todos.

"Afortunadamente", si esto es así, también lo sufrirán los juegos Arcade, y por tanto espero que Microsoft lo arregle.

Pero bueno, todo esto son análisis sobre los pocos datos que tengo.

PS: Un interfaz bastante bueno para los Indies era el que se usó en la aplicación Destination: Arcade que sacó Microsoft hará un par de años. No sé cómo no siguieron trabajando sobre eso, estaba bastante bien.
#4
XNA / Firing Range
07 de Noviembre de 2011, 02:59:01 PM
Un pequeño juego de practicar la puntería que hemos montado, ha sido aprobado en tiempo record (se nota que ahora hay menos juegos pendientes de aprobación).

Gráficos bastante decentes, puntuaciones online y una tienda donde comprar skins para las armas. Eso es nuestro selling point.




#5
XNA / Avatar Panic
05 de Octubre de 2011, 07:31:24 PM
Viendo que la gente pone aquí (en esta sección) sus juegos de XBLIG en lugar de en la de Proyectos últimamente, vamos a hacer lo propio.

Estamos a puntito de terminar el desarrollo de Avatar Panic, los más avispados al ver la captura ya sabrán en qué juego está inspirado :).



La verdad es que ha terminado siendo un proyecto bastante más largo de lo estimado, son muchas las cosas a controlar desde el punto de vista de gameplay. Aun no está terminado, pero le queda poco: Ajustes de gameplay, la música, el trailer y poco más.

Lo acabamos de poner en Playtest aquí: http://catalog.create.msdn.com/en-US/gamedetails.aspx?catalogEntryId=b6c93fcf-3578-408f-a9a8-733d865ddf55&type=1

Tras este, nos dedicaremos a portar a IndieCity unos cuantos juegos de los que ya tenemos hechos, y según cómo evolucione el asunto veremos. Porque en Indies últimamente la cosa está muy mal  >.<
#6
Proyectos / Avatar Farm
11 de Agosto de 2011, 01:15:08 PM
Buenas, como algunos ya sabréis nuestro proyecto de verano (mientras esperamos a que salga el Raventhorne), Avatar Farm, está en proceso de Review, y lleva unos días atascado sin que nadie le haga la review, a punto de ser aprobado. Nos gustaría que saliera hoy Jueves si es posible, así que apelo a los strateros que tengan cuenta en XNA a que nos ayuden :).

Trailer promocional (aún no publicado): http://www.youtube.com/watch?v=GKflbbrfFkg
#7
Proyectos / Raventhorne
10 de Junio de 2011, 02:57:36 PM
Como algunos sabréis ya, llevamos un tiempo trabajando en un proyecto un poco más grande de lo habitual en Milkstone, llamado Raventhorne, con el objetivo de tener alguna oportunidad en el Dream Build Play.

Hemos ido a todo trapo para terminar los mínimos que nos planteamos para presentar (2 mundos terminados de los 6 que tendría el juego completo). Hay bastantes cosas en las que se nota la falta de tiempo para mejorarlas, pero en general ha quedado un juego bastante entretenido y un sistema de combate resultón :)

Lo único que nos queda para terminarlo son unos cuantos sonidos y hacer el trailer.

Os dejo un video para que veais de qué va el asunto. No es público aún :) (esperaremos a tener el lunes el trailer y publicaremos ese).

http://youtu.be/onnjxjPE_xw?hd=1
#8
Proyectos / Epic 7 (Windows Phone 7)
15 de Abril de 2011, 12:39:46 PM
Nuestro más reciente juego, esta vez para Windows Phone 7 :)

http://www.youtube.com/watch?v=sm9SlDFqtfY

Lo hemos sacado en versión de pago a $1 (sin demo) y versión gratis con anuncios, a ver qué resulta mejor.

Me gustaría haber podido optar a una sola versión y poner anuncios en el modo demo, pero tal como está ahora montado los modo demo no son muy útiles (porque no se indica que un juego tiene demo, y no salen en la lista de aplicaciones gratuitas, etc.)
#9
Proyectos / Infinity Danger
23 de Marzo de 2011, 09:44:06 AM
Nuestro último juego, ya disponible en Indie Games como es habitual

http://www.youtube.com/watch?v=kqIXoIUczEA

No esperamos mucho, al fin y al cabo es un dual stick shooter así que la competencia es dura :)
#10
Proyectos / Zombie Football Carnage
14 de Febrero de 2011, 01:59:12 PM
Nuestra última creación, la primera desde que nos dedicamos a ello a tiempo completo, está ahora en Peer Review!

http://www.youtube.com/watch?v=xMK3llhKph4

Un juego de acción puro y duro, sangre y muchos enemigos. Quizás sea un pelín difícil al principio hasta que se compran cosas en la tienda, pero bueno.
#11
Proyectos / Avatar Bump!
06 de Diciembre de 2010, 06:24:47 PM
Acabamos de poner en Peer Review nuestro último juego, Avatar Bump!

http://catalog.create.msdn.com/en-US/gamedetails.aspx?catalogEntryId=b423856b-109d-4da1-8868-40bb57993d12&type=1

Un party game bastante decentito, por su propia definición cojea en el single player pero qué se le va a hacer, es un juego que teníamos pendiente desde hace bastante. Si cosechase la cuarta parte del éxito que tuvo el Avatar Ninja ya sería la repanocha.
#12
XNA / Geniales herramientas de benchmarking para XNA
29 de Noviembre de 2010, 06:45:23 PM
No tengo ni idea de cuando las publicaron, pero el caso es que en la página de Microsoft hay un set de utilidades muy sencillo de usar que permite hacer benchmarking del rendimiento de la aplicación, mostrándolo visualmente en tiempo real y sin que quede marca en la versión final.

El enlace: http://create.msdn.com/en-US/education/catalog/sample/performance_sample

Yo lo modifiqué un poco para que no hubiese que especificar el nivel de anidamiento a mano (usando una variable estática que se incrementa y decrementa automáticamente), y un par de cosas menores más. Me ha ayudado mucho a mejorar el rendimiento y determinar qué partes son las más costosas.

También tiene unos métodos de extensión para StringBuilder que permiten añadir enteros sin que se reserve un solo byte de memoria, que probablemente aproveche en el futuro.
#13
XNA / Nuevo dashboard de Xbox
01 de Noviembre de 2010, 06:21:33 PM
Ha salido ya la actualización del dashboard de Xbox. Ahora la sección de juegos Indie se encuentra dentro de la categoría de tiendas especializadas, apartada del resto de juegos (aunque nunca estuvo realmente al lado del resto...). Además los top son de 50 juegos en lugar de 20, y es más fácil acceder al listado por título o por género, con un top 50 para cada género también.

No sé si las ventas totales subirán o bajarán (al estar la sección un poco más escondida que antes), pero al menos deberían estar más distribuidas y no centradas únicamente en el top 20.

Ya veremos cuando haya datos...
#14
Proyectos / Avatar Ninja
13 de Mayo de 2010, 10:00:24 AM
Hemos puesto en Peer Review nuestro nuevo juego, Avatar Ninja.

http://catalog.xna.com/es-ES/GameDetails.aspx?catalogEntryId=be31465c-1d77-4b5b-8c2c-3c093cda98c5&type=1

No es que estemos especialmente orgullosos de él, pero es lo que hay. Al menos es bonito.
#15
XNA / Clase para gestionar Entrada/Salida
27 de Febrero de 2010, 12:12:11 AM
Aquí os dejo la clase que estamos usando para gestionar la entrada/salida, para que se haga en un hilo aparte, ya sea para dejar en segundo plano o para esperar a que acabe y luego siga. También gestiona cargado y guardado (en el caso de guardado, cierra y reabre el contenedor para que se guarden los datos).

Probablemente la única cosa que no os compilaría es la referencia a Engine.GlobalStorageDevice, se trata de una variable estática que referencia al StorageDevice escogido al comienzo de la aplicación.

Los métodos más importantes son Exec ( que realiza la operación de entrada/salida y espera a que termine, por ejemplo para cargas importantes ) y Post (que la deja en segundo plano y prosigue la ejecución, por ejemplo para guardar cosas).

Lo siento por la falta de comentarios, no soy muy dado a hacer código legible  :P

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Storage;
using System.Threading;
using System.Collections;
using Barrage.Global;

namespace Barrage.GameUtils.Storage
{
    public class StorageManager
    {
        static string containerName = "";
        public static string ContainerName { set { containerName = value; } }

        public delegate void IOOperation(StorageContainer container, object parameters);
        public enum IOType
        {
            Read,
            Write
        }
        public enum IOPriority
        {
            High,
            Low
        }
        static StorageManager instance = null;
        public static StorageManager Instance { get { if (instance == null) instance = new StorageManager(); return instance; } }

        struct IOOperationData
        {
            public IOOperation Operation;
            public IOType Type;
            public AutoResetEvent taskFinishedEvent;
            public object parameters;
            public IOOperationData(IOOperation operation, object parameters, IOType type)
            {
                this.Operation = operation;
                this.Type = type;
                this.parameters = parameters;
                taskFinishedEvent = null;
            }

            public IOOperationData(IOOperation operation, object parameters, IOType type, AutoResetEvent taskFinishedEvent)
            {
                this.Operation = operation;
                this.Type = type;
                this.parameters = parameters;
                this.taskFinishedEvent = taskFinishedEvent;
            }
        }

        AutoResetEvent taskFinishedEvent;

        StorageManager()
        {
            if (containerName.Length == 0)
                throw new Exception("Container name has not been set up!");
            newItemEvent = new AutoResetEvent(false);
            taskFinishedEvent = new AutoResetEvent(false);
            workerThread = new Thread(new ThreadStart(work));
            workerThread.IsBackground = true;
            workerThread.Start();
        }

        // Execute and wait for an IO Task to be finished. Warning, this could fail if more than one Exec are run at the same time
        public void Exec(IOOperation operation, object parameters, IOType ioType)
        {
            lock (((ICollection)highPriorityTasks).SyncRoot)
            {
                highPriorityTasks.Enqueue(new IOOperationData(operation, parameters, ioType, taskFinishedEvent));
                newItemEvent.Set();
            }
            // Wait for it to be finished
            taskFinishedEvent.WaitOne();
        }

        public void Post(IOOperation operation, object parameters, IOType ioType, IOPriority ioPriority)
        {
            Queue<IOOperationData> list = null;
            switch (ioPriority)
            {
                case IOPriority.High:
                    list = highPriorityTasks;
                    break;
                case IOPriority.Low:
                default:
                    list = lowPriorityTasks;
                    break;
            }
            lock (((ICollection)list).SyncRoot)
            {
                highPriorityTasks.Enqueue(new IOOperationData(operation, parameters, ioType));
                newItemEvent.Set();
            }
        }

        Thread workerThread = null;

        StorageContainer container = null;

        Queue<IOOperationData> lowPriorityTasks = new Queue<IOOperationData>();
        Queue<IOOperationData> highPriorityTasks = new Queue<IOOperationData>();

        AutoResetEvent newItemEvent;

        void work()
        {
#if XBOX
            // Set processor affinity to core 5
            Thread.CurrentThread.SetProcessorAffinity(new[] { 4 });
#endif
            openContainer();
            try
            {
                while (true)
                {
                    if (highPriorityTasks.Count + lowPriorityTasks.Count == 0)
                    {
                        newItemEvent.WaitOne();
                        // Evita que si el evento estaba activado pero ya se había tratado el tema anteriormente,
                        // no intentemos procesar una tarea que ya estaba hecha.
                        if (highPriorityTasks.Count + lowPriorityTasks.Count == 0)
                            continue;
                    }
                    IOOperationData operation;
                    if (highPriorityTasks.Count > 0)
                        lock (((ICollection)highPriorityTasks).SyncRoot)
                        {
                            operation = highPriorityTasks.Dequeue();
                        }
                    else
                        lock (((ICollection)lowPriorityTasks).SyncRoot)
                        {
                            operation = lowPriorityTasks.Dequeue();
                        }
                    performOperation(ref operation);
                }
            }
            catch (ThreadAbortException)
            {
                closeContainer();
            }
            catch (Exception)
            {
                closeContainer();
            }
        }

        void performOperation(ref IOOperationData operationData)
        {
            try
            {
                checkContainer();
               
                operationData.Operation.Invoke(container, operationData.parameters);
                if (operationData.Type == IOType.Write)
                    reopenContainer();
            }
            catch (Exception)
            {

            }
            if (operationData.taskFinishedEvent != null)
                operationData.taskFinishedEvent.Set();
        }

        void checkContainer()
        {
            if ((Engine.GlobalStorageDevice == null) || (!Engine.GlobalStorageDevice.IsConnected))
            {
                if (container != null)
                {
                    container.Dispose();
                    container = null;
                }
            }
            else if (container == null)
                openContainer();
        }

        void openContainer()
        {
            if (container == null)
            {
                if ((Engine.GlobalStorageDevice != null) && (Engine.GlobalStorageDevice.IsConnected))
                    try
                    {
                        container = Engine.GlobalStorageDevice.OpenContainer(containerName);
                    }
                    catch (Exception)
                    {
                        container = null;
                    }
            }
        }

        void closeContainer()
        {
            if (container != null)
            {
                container.Dispose();
                container = null;
            }
        }

        void reopenContainer()
        {
            if ((Engine.GlobalStorageDevice == null) || (!Engine.GlobalStorageDevice.IsConnected))
                return;
            closeContainer();
            openContainer();
        }
    }
}


Espero que os resulte de ayuda o de interés. Cualquier duda o sugerencia será bien recibida.
#16
Proyectos / Motor Heat, nuestro tercer intento en XBLIG
03 de Febrero de 2010, 09:43:30 PM
Siendo el primero Little Racers, de un éxito más que aceptable para el tiempo que nos llevó, y Wool, sin apenas éxito pero que tampoco ha sido un desastre rotundo.

Con éste nos centramos en los gráficos y una jugabilidad simple, procurando dejarlo todo bien pulidito.

Enlace al video: http://www.youtube.com/watch?v=TgVbtrHjpj0





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.