Master of Alchemy: our first iPad game!

We’re really proud to introduce our first iPad game: Master of Alchemy.
Master of Alchemy is an iPad game developed by DarkWave Games and published by Chillingo – Coming very soon on app store.
We are really proud of our game: it is being presented at E3 Expo 2010.
Master of Alchemy is an original and engaging puzzle game based on the manipulation of solid, liquid and gaseous elements.
Exploiting the features of a series of instruments (stills or alambics, button, hot air balloons, etc.), player can create new elements. To complete each level, he has to generate one or more required substances and bring them to some targets containers. facebook  zoosk  badoo
Substances’ streams are characterized by a realistic behavior, because of the implementation of a physics engine.
So, like an alchemist, player creates new substances, starting from basic elements characterized by different colors and by the three material states.
In detail, player has to manage a small alchemic laboratory that is equipped by an increasing number of instruments (alembics – like crucibles, pipes, coils, blenders, steam engines, condensers, etc.). Thanks to these tools, he can blend, fuse, sublimate, condense or break up elements, according to the targets and limits/obstacles of levels.
In background to the various levels, there is the history of Master of Alchemy: the war between the two factions of the setting (alchemists and mechanologists – the machine-oriented scientists).
At the beginning of MoA, player has to choose which alchemist to perform (among a group of six characters). During the game, his alchemist evolves.
Main Features:
  • realistic physics engine;
  • manipulation of colorful flows of gas, solids and liquids – transformation tools specifically designed to maximize the amazing capabilities of the iPad; an iPhone version will be coming soon
  • steampunk artwork style – Amazing Graphic Details
  • moving physics obstacles – buttons, hot air balloons, gates, big solid blocks, etc.
  • disappearing walls – to create gameplay variations: player will have to move tools inside the level more than once to solve it
  • secondary targets: purity, gems bonus, time bonus, to minimize particles loss/waste unique puzzle designs;
  • a fantastic storyline – a detailed background setting with a related comics;
  • presented at E3 Expo 2010.
Other Features:
  • 60 levels – hours of fun!
  • Almost 20 tools (alambics)
  • Animated tools
  • More than 10 Interactive Obstacles (buttons, hot air balloons, disappearing walls, gates, big solid blocks, etc.)
  • Crystal Implementation
  • 6 different characters to perform
  • In-game characters’ evolutions
  • Positional sound effects
  • An interactive and animated tutorial
  • More than a solution in most of the levels
Videos:
Watch Master of alchemy videos on YouTube

Continue reading

Flade, opensource 2D physic engine

Today Davide shows to me this link to a new opensource project regarding Flash.
It’s a “free library for simulating 2D physics in Flash using Verlet integration. It currently features particles, stick & angular constraints, wheels, and surfaces composed of line segments. Designed primarily for games with a goal of speed and ease of use”
I immediately downloaded the available “alpha” release and made a first test..

[attachments docid=646 fields=caption,description force_saveas=”1″ logged_users=”0″]

I don’t know if the project is still alive and which is the developement status, but it looks very promising.
…And here the code used for the example above:

var psystem = new ParticleSystem();
psystem.setDamping(1.0);
psystem.setGravity(0.0, 0.4);
// cooefficient of restitution
psystem.setKfr(0.1);
// surface friction for particles
psystem.setFriction(0.5);
// surfaces
var sA = new Surface(new Point(0, 0), new Point(1, 200));
sA.setIsOrientH(false);
psystem.addSurface(sA);
var s0 = new Surface(new Point(1, 200), new Point(100, 200));
psystem.addSurface(s0);
var s2 = new Surface(new Point(220, 170), new Point(300, 200));
psystem.addSurface(s2);
var s3 = new Surface(new Point(300, 200), new Point(400, 150));
psystem.addSurface(s3);
var sB = new Surface(new Point(399, 150), new Point(399, 0));
sB.setIsOrientH(false);
psystem.addSurface(sB);
// circle surface
var circA = new CircleSurface(170, 220, 70);
psystem.addSurface(circA);
var leftX  = 10;
var rightX = 50
var widthX = rightX - leftX;
var midX   = leftX + (widthX / 2);
var topY = 160;
// wheels
var wheelA = psystem.addWheel(leftX, topY, 10);
var wheelB = psystem.addWheel(rightX, topY, 10);
wheelA.coeffSlip = 0.0;
wheelB.coeffSlip = 0.0;
// body
var rectA = psystem.addRectangle(new Vector(midX, topY), widthX, 10);
// wheel struts
var conn1 = psystem.addConstraint(wheelA.wp, rectA.p3);
conn1.setRestLength(5);
var conn2 = psystem.addConstraint(wheelB.wp, rectA.p2);
conn2.setRestLength(5);
var conn1a = psystem.addConstraint(wheelA.wp, rectA.p0);
conn1a.setRestLength(5);
var conn2a = psystem.addConstraint(wheelB.wp, rectA.p1);
conn2a.setRestLength(5);
psystem.paintSurfaces();
this.onEnterFrame = function() {
var keySpeed = 2.0;
if(Key.isDown(Key.LEFT)) {
wheelA.rp.vs = -keySpeed;
wheelB.rp.vs = -keySpeed;
} else if(Key.isDown(Key.RIGHT)) {
wheelA.rp.vs = keySpeed;
wheelB.rp.vs = keySpeed;
} else {
wheelA.rp.vs = 0;
wheelB.rp.vs = 0;
}
if (Key.isDown(Key.UP)) {
if (ang.targetTheta < 2.9) ang.targetTheta += .1;
} else {
if (ang.targetTheta > angDefault) ang.targetTheta -= .1;
}
psystem.timeStep();
psystem.paintWheels();
psystem.paintConstraints();
}