//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();