//var username="paraLogiki";
//var password="test"
var charID=0;
var debug=1;
var combat=0;
var XMAX=800;
var YMAX=600;
var statUP=True;
var version="0.0.10";
var newZone=1;
var newXLoc=1;
var newYLoc=1;
var STATE_MOVE=1;
var STATE_COMBAT=2;
var curState=STATE_MOVE;
levels = new Array();
levels[0] = [ 0, // Warrior
100,
1000,
1500,
2500,
4000, // 5
6000,
8500,
11500,
15000,
19000 ]; // 10
#include "zones.as"
mob = new Array();
mob[1] = [ [ 2, 9, 1],
[ 2, 5, 2],
[ 7, 1, 1] ];
mob[2] = [ [ 2, 2, 1],
[ 8, 3, 1],
[ 2, 8, 2],
[ 9, 8, 2] ];
mob[3] = [ [ 6,10, 1] ];
mob[4] = [ [ 1, 4, 1],
[ 2, 9, 1],
[ 2, 8, 2],
[ 3, 8, 2],
[ 3, 9, 2] ];
mob[5] = [ [ 3, 3, 1002] ];
function tChar() {
this.level=1;
this.name="MyName";
this.jobLevel=[1,0,0,0];
this.curClass=0;
this.curExp=0;
this.attrib=[18,18,18,18];
this.baseHP=100;this.curHP=100;this.modHP=10;
this.curLoc=[5,5,1];
this.toString=function () {
var tmp;
tmp = "Name: " + this.name + "\n";
tmp += "Level: " + this.level + "\n";
tmp += "Warrior: " + this.jobLevel[0] + " Thief: " + this.jobLevel[1] + " Cleric: " + this.jobLevel[2] + " Wizard: " + this.jobLevel[3] + "\n";
tmp += "Currently: ";
switch (this.curClass) {
case 0: tmp+="Warrior\n";break;
case 1: tmp+="Thief\n";break;
case 2: tmp+="Cleric\n";break;
case 3: tmp+="Wizard\n";break;
}
tmp += "EXP: " + this.curExp + "\n";
tmp += "Str: " + this.attrib[0] + " Dex: " + this.attrib[1] + " Con: " + this.attrib[2] + " Int: " + this.attrib[3] + "\n";
tmp += "HP: " + this.curHP + "/" + (this.baseHP+this.modHP) + " (" + this.baseHP + "+" + this.modHP + ")\n";
tmp += "Current Location: Zone(" + this.curLoc[2] + ") (" + this.curLoc[0] + "," + this.curLoc[1] + ")\n";
tmp += "Current Version: " + _root.version + "\n";
tmp += "CharID: " + _root.charID + "\n";
return (tmp);
}
}
function levelUp() {
char1.level++;
switch(char1.curClass) {
case 0: char1.jobLevel[0]++;
tmp=getRNG(12);
break;
case 1: char1.jobLevel[1]++;
tmp=getRNG(8);
break;
case 2: char1.jobLevel[2]++;
tmp=getRNG(10);
break;
case 3: char1.jobLevel[3]++;
tmp=getRNG(6);
break;
}
addText("You gained "+tmp+" hitpoints.","00FFFF");
char1.curHP=char1.curHP+tmp;
char1.baseHP=char1.baseHP+tmp;
_root.m1.tName_txt.text=char1;
}
function saveGame() {
saveVars=new LoadVars();
saveVars.charID=charID;
saveVars.name=char1.name;
saveVars.level=char1.level;
saveVars.jobLevel=char1.jobLevel;
saveVars.curClass=char1.curClass;
saveVars.curExp=char1.curExp;
saveVars.attrib=char1.attrib;
saveVars.baseHP=char1.baseHP;
saveVars.curHP=char1.curHP;
saveVars.modHP=char1.modHP;
saveVars.curLoc=char1.curLoc;
saveVars.send("http://www.domain.ext/npl/saverpg.php","info","POST");
if (debug) addText("Character "+saveVars.name+" saved to database (debug)","FFFF00");
delete saveVars;
}
function getMonster(mobID) {
switch(mobID) {
case 1: tmpClip="mDragon";break;
case 2: tmpClip="mMonster1";break;
case 1001: tmpClip="mTown";break;
case 1002: tmpClip="mShop";break;
case 1003: tmpClip="mZoneL";break;
case 1004: tmpClip="mZoneR";break;
case 1005: tmpClip="mZoneD";break;
}
return (tmpClip);
}
function addExp(exp) {
char1.curExp+=exp;
addText("You receive "+exp+" experience points.");
if(char1.curExp>=levels[char1.curClass][char1.jobLevel[char1.curClass]]) {
addText("You have gained a level!","00FFFF");
levelUp();
}
}
function setState(stateID) {
switch(stateID) {
case 1: curState=STATE_MOVE;break;
case 2: curState=STATE_COMBAT;break;
}
}
function drawField(zoneID) {
newZ=zone[zoneID];
f1.removeMovieClip();
attachMovie("mPlayfield","f1",4);
dropX=0;
dropY=0;
for(var x=1;x<=10;x++) {
for (var y=1;y<=10;y++) {
tmpID="field"+(((x-1)*10)+y);
tmpDepth=(((x-1)*10)+y)+100;
intObj = {_x:dropX,_y:dropY}
switch(newZ[x][y]) {
case 1: f1.attachMovie("gGrass",tmpID,tmpDepth,intObj);break;
case 2: f1.attachMovie("gDirt",tmpID,tmpDepth,intObj);break;
case 3: f1.attachMovie("gWater",tmpID,tmpDepth,intObj);
tmpID=tmpID+"_cover";
tmpDepth=tmpDepth+400;
f1.attachMovie("gWater_cover",tmpID,tmpDepth,intObj);break;
case 4: f1.attachMovie("gBridge",tmpID,tmpDepth,intObj);break;
case 70: f1.attachMovie("gMountains",tmpID,tmpDepth,intObj);break;
}
dropX+=40;
}
dropY+=40;
dropX=0;
}
f1._x=200;
f1._y=100;
for(var x=0;x<(mob[zoneID].length);x++) {
tmpID="mobf"+x;
tmpDepth=x+400;
intObj= {_x:((mob[zoneID][x][0]-1)*40),_y:((mob[zoneID][x][1]-1)*40)};
tmpClip=getMonster(mob[zoneID][x][2]);
f1.attachMovie(tmpClip,tmpID,tmpDepth,intObj);
}
}
function drawPlayer(x,y,dir) {
f1.p1.removeMovieClip();
intObj= {_x:((x-1)*40),_y:((y-1)*40)};
char1.curLoc[0]=x;
char1.curLoc[1]=y;
f1.attachMovie("mPlayer","p1",201,intObj);
switch(dir) {
case 1: // UP
case 3: // DOWN
if (char1.curLoc[1]%2) {
f1.p1.gotoAndStop((dir+5));
} else {
f1.p1.gotoAndStop(dir+1);
}
break;
case 2: // RIGHT
case 4: // LEFT
if (char1.curLoc[0]%2) {
f1.p1.gotoAndStop((dir+5));
} else {
f1.p1.gotoAndStop(dir+1);
}
break;
}
m1.tName_txt.text=char1;
}
function getRNG(x) {
while (true) {
tmp=Math.random();
if (tmp>0) break;
}
tmp=Math.round(tmp*x);
return (tmp);
}
function checkTerrain(chX,chY,zoneID) {
var passTerrain=1;
if (zone[zoneID][chY][chX] > 69) {
passTerrain=0;
}
if (zone[zoneID][chY][chX] == 0) {
passTerrain=0;
}
if (zone[zoneID][chY][chX] < 0){
switch(chX) {
case 0: newXLoc=10;
break;
case 11: newXLoc=1;
break;
default: newXLoc=chX;
break;
}
switch(chY) {
case 0: newYLoc=10;
break;
case 11: newYLoc=1;
break;
default: newYLoc=chY;
break;
}
newZone=(zone[zoneID][chY][chX]) * -1;
passTerrain=3;
}
for(var x=0;x<(mob[zoneID].length);x++) {
if (mob[zoneID][x][0] == chX && mob[zoneID][x][1] == chY) {
if (mob[zoneID][x][2] < 1000) {
passTerrain=2;combat=mob[zoneID][x][2];break;
} else {
//newXLoc=mob[zoneID][x][3];
//newYLoc=mob[zoneID][x][4];
//newZone=mob[zoneID][x][5];
passTerrain=2;combat=mob[zoneID][x][2];break;
}
}
}
return passTerrain;
}
function removeMob(mobX,mobY,z) {
oldMob=mob[z];
var newMob = Array();
y=0;
for(var x=0;x<(oldMob.length);x++) {
if (!(oldMob[x][0] == mobX && oldMob[x][1] == mobY)) {
newMob[y]=oldMob[x];
y++;
}
}
mob[z]=newMob;
}
function addText(text,color) {
m2.tNew_txt.htmlText+=""+text+"
";
m2.mScroll.setScrollPosition(m2.tNew_txt.maxscroll);
m1.tName_txt.text=char1
}
function drawCombat(mobID,x,y,dir) {
char1.curLoc[0]=x;char1.curLoc[1]=y;
f1.removeMovieClip();
attachMovie("mPlayfield","f1",4);
f1._x=200;
f1._y=100;
f1.attachMovie("mPlayer","p1",201);
f1.p1.gotoAndStop(10);
f1.p1._x=300;
f1.p1._y=150;
f1.p1._width=f1.p1._width*2;
f1.p1._height=f1.p1._height*2;
f1.attachMovie(getMonster(mobID),"mob1",400);
if (mobID<1000) {
f1.mob1._x=0;
f1.mob1._y=100;
f1.mob1._width=f1.mob1._width*4;
f1.mob1._height=f1.mob1._height*4;
} else {
f1.mob1._x=0;
f1.mob1._y=150;
f1.mob1._width=f1.mob1._width*2;
f1.mob1._height=f1.mob1._height*2;
}
}
playerListener = new Object();
playerListener.onKeyUp = function() {
zoneID=char1.curLoc[2];
curX=char1.curLoc[0];
curY=char1.curLoc[1];
switch(Key.getCode()) {
case 39:// RIGHT
newX=curX+1;
newY=curY;
dir=2;
break;
case 37:// LEFT
newX=curX-1;
newY=curY;
dir=4;
break;
case 38:// UP
newX=curX;
newY=curY-1;
dir=1;
break;
case 40:// DOWN
newX=curX;
newY=curY+1;
dir=3;
break;
case 65://Attack
if (curState==STATE_MOVE || f1.mob1.isNPC) {
addText("You cannot attack, you aren't in combat!","FF0000");
} else {
attackRoll=getRNG(20);
if (debug) addText("Player Attack Roll: "+attackRoll + " (debug)","FFFF00");
if (attackRoll>18) {
dmgRoll=getRNG(20)*2;
if (debug) addText("Damage dealt (20*2): " + dmgRoll + " (debug)","DD0000");
addText("You hit for "+dmgRoll+" damage, like a true Ninja (double damage)","DD0000");
f1.mob1.curHP=f1.mob1.curHP-dmgRoll;
if (debug) addText(f1.mob1.name+" has "+f1.mob1.curHP+" HP left.","FFFF00");
} else if (attackRoll<2) {
addText("You critically miss, are you a Ninja?","FF0000");
} else if (attackRoll<10) {
addText("You miss...","00DDDD");
} else {
dmgRoll=getRNG(20);
if (debug) addText("Damage dealt (20): " + dmgRoll + " (debug)","DD0000");
addText("You hit for "+dmgRoll+" damage.","DD0000");
f1.mob1.curHP=f1.mob1.curHP-dmgRoll;
if (debug) addText("Mob1 has "+f1.mob1.curHP+" HP left. (debug)","FFFF00");
}
attackRoll=getRNG(20);
if (f1.mob1.curHP<1) {
setState(STATE_MOVE);
removeMob(curX,curY,zoneID);
addExp(f1.mob1.exp);
addText("Go Ninja, Go Ninja, GO!","00FF00");
drawField(char1.curLoc[2]);
drawPlayer(char1.curLoc[0],char1.curLoc[1],3);
} else {
if (debug) addText("Mob Attack Roll: "+attackRoll + " (debug)","FFFF00");
if (attackRoll>18) {
dmgRoll=getRNG(10)*2;
if (debug) addText("Damage dealt (10): " + dmgRoll + " (debug)","DD0000");
addText(f1.mob1.name+" hits you HARD for "+dmgRoll+" damage! (double damage)","FF0000");
char1.curHP=char1.curHP-dmgRoll;
} else if (attackRoll<2) {
addText("You dodge "+String.toLowerCase(f1.mob1.name)+" like a true Ninja (critically missed).","FF0000");
} else if (attackRoll<10) {
addText(f1.mob1.name+" attacks, but misses.","00DDDD");
} else {
dmgRoll=getRNG(10);
if (debug) addText("Damage dealt (10): " + dmgRoll + " (debug)","DD0000");
addText(f1.mob1.name+" hits you for "+dmgRoll+" damage.","DD0000");
char1.curHP=char1.curHP-dmgRoll;
}
if (char1.curHP<1) {
addText("You have been killed! Luckily your ninja skills have saved you.","FF0000");
char1.curHP=char1.curHP+50;
addText("You are healed for 50 hitpoints.","FFFFFF");
}
}
}
m1.tName_txt.text=char1;
break;
case 82://Retreat
addText("Ninja Vanish....","00FFFF");
curState=STATE_MOVE;
drawField(zoneID);
drawPlayer(curX,curY,3);
break;
case 72://Hail
if (curState==STATE_COMBAT) {
addText("You say 'Greetings'","00FFFF");
if (f1.mob1.isNPC) {
addText(f1.mob1.name+" says '"+f1.mob1.greeting+"'","00FFFF");
} else {
addText(f1.mob1.name+" growls at you.","FF0000");
}
}
break;
case 89://Yes to a question
if (curState==STATE_COMBAT) {
if (f1.mob1.isNPC) {
f1.mob1.proc();
}
}
break;
}
if (curState==STATE_MOVE) {
switch(checkTerrain(newX,newY,zoneID)) {
case 1: // Passable
drawPlayer(newX,newY,dir);
break;
case 0: // Non-passable Terrain
addText("You cannot go that direction!","FF0000");
newX=curX;
newY=curY;
drawPlayer(newX,newY,dir);
break;
case 2: // Mob detected, start combat.
setState(STATE_COMBAT);
if (debug) addText("Combat (debug)","FF0000");
drawCombat(combat,newX,newY,dir);
break;
case 3: // Zone detected, handle zone
newX=newXLoc;
newY=newYLoc;
char1.curLoc[2]=newZone;
drawField(newZone);
if (debug) addText("Zoned to ("+newZone+") ("+newXLoc+","+newYLoc+") (debug)","00FF00");
drawPlayer(newX,newY,dir);
break;
}
}
/* if (curState==STATE_COMBAT) {
drawCombat(combat,newX,newY,dir);
} */
}
Key.addListener(playerListener);
//Init game
charLoadVars=new LoadVars();
charLoadVars.load("http://www.domain.ext/npl/loadrpg.php?username="+username+"&password="+password);
charLoadVars.onLoad = function(success) {
if (success) {
charID=charLoadVars.id;
charLoadVars.jobLevel=charLoadVars.jobLevel.split(",");
charLoadVars.attrib=charLoadVars.attrib.split(",");
charLoadVars.curLoc=charLoadVars.curLoc.split(",");
char1 = new tChar();
char1.name=charLoadVars.name;
char1.level=Number(charLoadVars.level);
char1.jobLevel[0]=Number(charLoadVars.jobLevel[0]);
char1.jobLevel[1]=Number(charLoadVars.jobLevel[1]);
char1.jobLevel[2]=Number(charLoadVars.jobLevel[2]);
char1.jobLevel[3]=Number(charLoadVars.jobLevel[3]);
char1.curClass=Number(charLoadVars.curClass);
char1.curExp=Number(charLoadVars.curExp);
char1.attrib[0]=Number(charLoadVars.attrib[0]);
char1.attrib[1]=Number(charLoadVars.attrib[1]);
char1.attrib[2]=Number(charLoadVars.attrib[2]);
char1.attrib[3]=Number(charLoadVars.attrib[3]);
char1.baseHP=Number(charLoadVars.baseHP);
char1.curHP=Number(charLoadVars.curHP);
char1.modHP=Number(charLoadVars.modHP);
char1.curLoc[0]=Number(charLoadVars.curLoc[0]);
char1.curLoc[1]=Number(charLoadVars.curLoc[1]);
char1.curLoc[2]=Number(charLoadVars.curLoc[2]);
drawField(char1.curLoc[2]);
drawPlayer(char1.curLoc[0],char1.curLoc[1],2);
if (debug) addText("Loaded character "+char1.name+" from database (debug)","FFFF00");
delete charLoadVars;
} else { trace("Failed to load"); }
}
//char1 = new tChar();
attachMovie("bLevel","b1",2);
b1._y=YMAX-20;
b1.onPress = function() {
char1.levelUp();
}
attachMovie("bStats","b2",3);
attachMovie("mStats","m1",1);
m1._x=XMAX-m1._width;
m1.tName_txt.text=char1;
b2.onPress = function() {
if(statUP) {
m1.removeMovieClip();
statUP=False;
} else {
attachMovie("mStats","m1",1);
m1._x=XMAX-m1._width;
m1.tName_txt.text=char1;
statUP=True;
}
}
b2._y=YMAX-20;
b2._x=30;
attachMovie("bSave","b3",5);
b3._y=YMAX-20;
b3._x=60;
b3.onPress=function() {
saveGame();
}
attachMovie("mInfo","m2",10);
m2.tNew_txt.backgroundColor=0x333333;
m2.tNew_txt.htmlText= "Welcome to Ninja Playland!
";
m2.mScroll.setScrollPosition(m2.tNew_txt.maxscroll);
/* drawField(char1.curLoc[2]);
drawPlayer(char1.curLoc[0],char1.curLoc[1],2); */
//saveGame();