Tuesday, April 22, 2014

Classic ROM Advanced - CROMA Journal - 3

There have been some serious brainstorming sessions on this project and I've had to take a break after a few of them. This post is an outline of the project with [completed], [in progress], and [future] statuses:

The plan was to get this out to you all sooner but well things happen.
But the original two month window to alpha is still on track.

Here are some details:

  1. Character is mapped out by defining pixel and auto sized then ported to socket and remote player (complete)
  2. Network Framework via scripting in Windows environment (complete) 
  3. Network Framework in Unity c# (in progress)
  4. Target ONLY the emulator window for each player - making dimension calculation trivial (complete)
  5. Calculate dimensions outside of the standard 1280 x 800 so that each player doesn't have to have the same resolution for the emulator window (in progress)
  6. API: players can add their own games (in progress - coding this functionality as I go)
  7. API: Players select a region of a screenshot (player) and the code generates random pixels from that selection. You then add a name for the variable which adds it into the code. There are set variables to choose from i.e. player 1, player 2, enemy 1, boss 1, etc..
  8. Change the color of Player Two. (in progress)
  9. Choose the color of your character (future - #2 needs to be complete first)


    Games being prototyped:

    Bubble Bobble (nes) - 75% Complete
    Pac-Man (nes)
    - 75% Complete
    Mega Man (nes) - 50% Complete - More dynamic functional aspects


    [[If you would like to alpha test once it's ready, just email me or comment here on the blog.]]

Saturday, March 29, 2014

Classic ROM Advanced - CROMA Journal - 2

Wow.

I had some great encouragement from the Reddit emulation community yesterday.

There were a lot of great inquiries. I have to say thanks!!

Grabbing Mega Man's X and Y coordinates on your screen, so the remote player can render you on screen

Really pumped this weekend to get much closer to an alpha release. I wanted to give you all a little more detail behind the scenes as I'm working (Since there seem to be a lot interested in the process):
  • If you'd like, follow me for updates: @2amdevelopment
  • Croma snaps on top of emulators. It doesn't touch the ROM data.
  • Character, level, and object information is determined through pixel mapping
  • After capturing real time capture of the player in game, each player's layer transmits the data to the other, simulating a multiplayer experience through the croma layer.
Grabbing player location and piping to the remote player:

Below is the output every millisecond of player 2 in Mega Man. There is quite a lot going on there.
The info here is read by Unity which transmits it to Player 1.

Coordinates of player two. This info gets piped to Unity for transport to Player one.

Unity3d Environment (Level select, chat, game streaming, more..):

Below you can see an alpha screenshot where you will be choosing levels and meeting up with pals:


Jumping into one of these paintings bring you to a UI for that specific game. There you can see what other players would like to play, launch the game from there, choose to watch or stream playing that game.

  • I'm debating whether to make this whole layer 2d top down or side scrolling. For now this works with testing.

A few notes that came out of the Reddit discussion:
  • A few people mentioned adding a donation button - So I have.
  • Croma require you to own all roms, and pictures of the games within a specific folder. This application doesn't house any copyright material, it merely references objects that you already have and brings them altogether. This is done purposefully to keep it clean and legal for distribution.
  • The Unity environment pulls the data from that directory to fill in the paintings and let you jump into games that you own.
  • If you do not have all of the roms, then a painting may look like the one above, stating that the rom wasn't found.
  • Croma is and will be open source - Specific licensing to be determined before release.

Great thanks to MeowWhat, shavin_high, crwcomposer, kjbigs282, Newgeta, pnpbios, Elchobacabra, sealcouch, BigBirdIII, ultimatt42 and everyone that upvoted and stopped by!

I plan on getting a video up this week. Stay tuned!

-ll

Monday, March 24, 2014

Classic ROM Advanced - CROMA Journal




Introduction (So you can decide if you want to stick around.. ha)

So Ive never been a blogger. Forgive me if I get this all wrong. But regardless I hope you like the content and maybe over time I'll get the hang of it.

I'm working on a project now (for about 2 months) that is based on an idea I had about 3 months ago. Ive tentatively named it 'croma' which stands for Classic ROM Advanced. As the name may suggest the idea is to take a ROM, and advance it in some way.

But in what way?

Well as a little background - I'm a scripter. I've never liked to be called a programmer, so I stick with that. My career has been in IT Engineering and I love to make things (through scripts, i.e Batch, Bash, Python, PowerShell) work as they were never originally planned to do. So, for instance creating a batch script that acts like SCCM (application deployment), or many others but I won't go into that now as it's already taken up a paragraph here. But this premises is to give an idea as to how/why I had this idea, and why I CRAVE to get it working and into the hands of old school gaming fans.

Anyone who has experienced the endearing grasp of gaming nostalgia, and afterword basked in the fulfillment that she gives you - Understands the need to keep old school alive - And will most likely never give up on the love they have for her. This is what drives me.

CROMA Summary:

At the base layer you have the emulator, whether that be FCEUX to KEGA, or others (building for these two, however it should work with all)..
On this layer, you can play the game as intended in the awesome emulation of the PC.

I've added two layers:
  • Simulation Layer
  • Networking Layer
Generalized Overview


Simulation Layer:

This is a process that runs on top of the emulator (all packaged together - seamless). It allows for simulating virtually anything you'd like as if it's within the game itself. Through a bit of magic and analysis while playing this layer enables:
  1. Simulation of two or more players in a single player game.
  2. Statistic gathering from within the game (i.e achievements, stats and leaderboards, and factoring of in game objects and characters).
  3. New game modes (i.e. tag, arena, pvp, coop,simulated new boss battles).

    ..That's just the start of the possibilities.
This layer fits onto the emulator; objects, characters, stats, and other simulated data are overlaid in a seamless fashion. It is also the bridge between the emulator and the networking layer.

Prototype level select in Unity3d

Networking Layer:

This layer splits in two, one part sits on top of both networking and emulation, the other wraps all of the layers which entails:
  1. All networking between game clients is managed here, game info is passed from the simulation layer.
  2. Entire UI is built on this layer, which lets you choose games, view stats, watch people play games, and interface with other players in a virtual world of your ROM games and like minded gamers.
  3. Game launching, player matching, stats, player location, physics, leaderboard info, etc.. are passed through here and managed between the players within the same game. While stats and other non visual data is piped to the server to allow players to view their statistics.
Prototype - Remote player is a static Mega Man img which follows actual coordinates on the same screen. Working on pulling full animation of character..


Info on the above image:
  • Actual Health bar and game score from each player is overlayed onto the remote players screen. Additional scores can be overlayed for specific game types and stored.
  • Username and stats are all on the Simulation layer
  • Menu button opens a UI for managing returning to the Unity game world, restarting, among other things.
From here on out I'll be updating this place on the progress of the project.


If you're interested, stay tuned - I need all the push I can get!
If you would like to help test the games stability let me know and I'll be sending an alpha download somewhere down the pipe.

ETA on an alpha build is somewhere within 2014. This build will have:
  • Minimalist game world where you can find other players to join
  • Two player Mega Man and one added game mode - Arena - Where two players fight can each other.
  • Minimalist statistics server side (i.e. games played +time played, arena scores, shots fired, jumps jumped, etc..).

Currently I have a working - non aesthetic - prototype.

I'll be chronicling the development within a weeks time of each major change.


- ll