Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @author Marcos Augusto Bitetti
- *
- * NOTE: HIT SUNT DRACONES
- */
- var baloons = [];
- function addEventBallon(msg, x, y)
- {
- var div = document.createElement("div");
- div.className="balao";
- document.getElementById("charlayer").appendChild(div);
- var balao = $(div);
- baloons.push(balao);
- balao.html('<p>' + msg + '</p>');
- balao.css("top",y).css("left",x);
- balao.animate({"top":String(y-100-Math.random()*80)}, 2000+Math.random()*500, "linear", function(e) {$(this).fadeOut("slow", function(e) {$(this).remove()})} );
- /*
- ({
- height:200, width:400, opacity: .5
- }, 1000, "linear", function(){ alert("all done"); });*/
- }
- function animageBaloons()
- {
- /*var bal;
- for(var i in baloons)
- {
- bal = baloons[i];
- }*/
- if (baloons.length)
- if (baloons[0].css('display')=="none")
- {
- var b = baloons.shift();
- //$("#charlayer")
- b.remove();
- }
- }
- //------ MAQUINA DE ESTADOS ------------
- function FSM()
- {
- this.hp = 100;
- this.mp = 100;
- this.itens=[];
- this.addItem = function (item)
- {
- this.itens.push(item);
- };
- this.getItemByName = function(nome)
- {
- for(var i in this.itens) if (this.itens[i].nome==nome) return this.itens[i];
- return null;
- }
- this.useItemNamed = function(nome)
- {
- var item = this.getItemByName(nome);
- if (item)
- {
- if (item.condicoes(this))
- {
- //print("usei o item " + nome);
- } else {
- //print(EventManager.getString(discurso.atributos.mp.acabouomp));
- }
- }
- }
- this.affectMP = function(v)
- {
- this.mp += v;
- if (this.mp<0) this.mp=0;
- }
- this.affectHP = function(v)
- {
- }
- return this;
- }
- var discurso = {
- atributos:{
- mp:{
- acabouo:[
- "Estou sem MP",
- "Acabou meu poder porra!"
- ]
- }
- },
- status:{
- morto:[
- "Ai, Me fudi!",
- "Caraio morri de novo!",
- "Joga direito pô"
- ]
- },
- alerta:{
- bomda:"<b>CORRE NEGADISIS!!!</b>"
- },
- chars:{
- anjo:{
- magia:"Angel Wings",
- nomp:"Sinto não tenho mais milagres",
- tip:"Arcanjo<br />Cura ferimentos e lhe dá impulso."
- },
- aracne:{
- sentido:"Sinto alguém por perto...",
- tip:"Aracne<br />Forte pra cassete!<br />Encostou morreu!"
- },
- morgerco:{
- tip:"Morgerço<br />Morde doído!"
- },
- // magias
- bomba:{
- tip:"Ponha no chão e corra feito louco!"
- },
- projAstral:{
- tip:"Projeta seu espírito, os inimigos não podem vê-lo mas você pode pegar objetos."
- },
- aliado:{
- tip:"Dois fantasmas ameaçadores irão atacar tudo que tocarem. Use-os sabiamente."
- },
- pena:{
- tip:"Seu objetivo, a famosa <strong>Pena de Vaca Sagrada</strong> é um raro item mágico que pode salvar o mundo."
- }
- },
- "":""
- };
- function frase(ref)
- {
- var msg = ref;
- if ( ref instanceof Array )
- msg = ref[ Math.floor( Math.random() * ref.length )];
- return msg;
- }
- //------ FUNÇÔES ENTRE OS PERSONAGENS ---------
- function removeAnim(anim)
- {
- var i = animationSet.indexOf(anim);
- if (i>-1) animationSet.splice( i,1 );
- //ob.self.remove();
- }
- function anjo_atuacao01(ob)
- {
- if(ob.col==1)
- {
- if(ob.fsm.mp>0)
- {
- ob.fsm.mp = 0
- player.fsm.hp = 100;
- fly=1;
- addEventBallon(discurso.chars.anjo.magia, ob.x, player.y-30);
- addEventBallon("HP 100% XD", player.x+20, player.y-30);
- effects[0].show("slow").css("top",player.y).css("left",player.x);
- } else {
- addEventBallon(frase(discurso.chars.anjo.nomp), ob.x, player.y-30);
- }
- }
- }
- function mana_atuacao01(mana)
- {
- if (player.fsm.mp<100)
- {
- player.fsm.mp += 20;
- if (player.fsm.mp>100)
- player.fsm.mp=100;
- mana.remove();
- addEventBallon("<span style=\"color:#46f\">MP +20%</span>", player.x+20, player.y-30);
- //try { swfsound.startSound( sound5 ); } catch (ex) { }
- playSound(5);
- }
- inColl=0;
- }
- function coracao_atuacao01(coracao)
- {
- if (player.fsm.hp<100)
- {
- player.fsm.hp += 20;
- if (player.fsm.hp>100)
- player.fsm.hp=100;
- coracao.remove();
- addEventBallon("<span style=\"color:#f00\">HP +20%</span>", player.x+20, player.y-30);
- //try { swfsound.startSound( sound5 ); } catch (ex) { }
- playSound(5);
- }
- inColl=0;
- }
- function carta_atuacao(ob)
- {
- //try { swfsound.startSound( sound5 ); } catch (ex) { }
- playSound(5);
- menuItens.reverse();
- if (ob.nome=="carta1")
- {
- menuItens.push( new MenuItem("Projeção Astral (30mp)",function() { animationSet.push(projec_astral); }, 22) );
- addEventBallon("<span style=\"color:#f00\">Obteve Projeção Astral</span>", player.x+20, player.y-30);
- }
- if (ob.nome=="carta2")
- {
- menuItens.push( new MenuItem("Aliado mortal (40mp)",function() { animationSet.push(seguidor_morte); }, 21) );
- addEventBallon("<span style=\"color:#f00\">Obteve Aliado Mortal</span>", player.x+20, player.y-30);
- }
- if (ob.nome=="carta3")
- {
- menuItens.push( new MenuItem("Bomba (60mp)",function() { animationSet.push(bomba_act); }, 20) );
- addEventBallon("<span style=\"color:#f00\">Oteve Bomba</span>", player.x+20, player.y-30);
- }
- if (ob.nome=="carta4")
- {
- menuItens.push( new MenuItem("Corpo Spectral",function() { animationSet.push(projec_astral); }, 22) );
- addEventBallon("<span style=\"color:#f00\">HP +20%</span>", player.x+20, player.y-30);
- }
- menuItens.reverse();
- ob.remove();
- }
- function inimigo_atuacao(ob)
- {
- if (ob.nome=="Aracne")
- {
- player.fsm.hp -= 30;
- } else
- if (ob.nome=="morgerco")
- {
- player.fsm.hp -= 4;
- }
- //try { swfsound.startSound( sound4 ); } catch (ex) { }
- playSound(4);
- applySangue(ob);
- }
- function pena_atuacao(ob)
- {
- vitoria = 1;
- }
- function applySangue(ob)
- {
- // efeito de sangue sanguinário pisicotico ^^
- var x = (-96 + Math.random()*192) + (player.x + ob.x) * 0.5;
- var y = (-132 + Math.random()*192) + (player.y + ob.y) * 0.5;
- var img = $(document.createElement('img'));
- img.attr('src', P+"sangue" + String(Math.floor(Math.random()*3)) + ".png" );
- img.css("opacity","0.8").css("filter","alpha(opacity=80)").css("left",x).css("top",y).css("position","absolute");
- $("#charlayer").append(img);
- }
- /*//-----------------------
- MAGIAS
- *///-----------------------
- // animacoes
- var animationSet=[];
- /**
- * Nota o tempo do efeito é definido em spec_corp e tem o valor de 250
- * troar ese valor dentro da funcao tambem no timmer
- */
- var spec_corp=0;
- var corp_fix;
- var spec_timer;
- var oldCorp;
- function projec_astral(delta)
- {
- if (!spec_corp)
- {
- if (player.fsm.mp>30)
- {
- if (!document.getElementById("fakecorpo"))
- {
- $(player.img).css("opacity","0.5").css("filter","alpha(opacity=50)").css("filer","blur(6px);");
- spec_corp=250;
- player.fsm.mp-=30;
- var img = document.createElement("img");
- img.src = player.states[0];
- img.className = "Char";
- img.id = "fakecorpo";
- $(img).css("top",player.y-TH).css("left",player.x).width(64).height(128);
- $(img).css("-moz-transform","scaleX("+player.orientation+")").css("-o-transform","scaleX("+player.orientation+")").css("-webkit-transform","scaleX("+player.orientation+")").css("transform","scaleX("+player.orientation+")").css("filter","FlipH").css("-ms-filter","\"FlipH\"");
- document.getElementById("charlayer").appendChild(img);
- oldCorp = [player.x,player.y];
- spec_timer = new Relogio();
- //try { swfsound.startSound( sound3 ); } catch (ex) { }
- playSound(3);
- for(var i in menuItens)
- if (menuItens[i].data==22) {menuItens.splice(i,1); break;}
- }
- } else {
- addEventBallon( frase(discurso.atributos.mp.acabouo) , player.x+20, player.y-40);
- animationSet.splice(projec_astral,1);
- }
- } else {
- spec_corp--;
- spec_timer.update(spec_corp/250);
- if (spec_corp<=0)
- {
- $(player.img).css("opacity","1").css("filter","alpha(opacity=100)").css("filer","blur(0px);");
- spec_corp=0;
- animationSet.splice(animationSet.indexOf(projec_astral),1);
- var img = $("#fakecorpo");
- player.position(oldCorp[0],oldCorp[1]);
- img.remove();
- spec_timer.end();
- }
- }
- }
- var seg_morte=0;
- var seg_morte_timer;
- var morte=[0,0];
- function seguidor_morte(delta)
- {
- if (!seg_morte)
- {
- if (player.fsm.mp>40)
- {
- morte[0] = new Char("morte",-2000,0, 1, [P+"V_mask.png"]);
- morte[1] = new Char("morte",-2000,0, 1, [P+"V_mask.png"]);
- morte[0].delta = Math.PI;
- morte[1].delta = 0;
- seg_morte=400;
- seg_morte_timer = new Relogio();
- player.fsm.mp-=40;
- //try { swfsound.startSound( sound3 ); } catch (ex) { }
- playSound(3);
- for(var i in menuItens)
- if (menuItens[i].data==21) {menuItens.splice(i,1); break;}
- } else {
- addEventBallon( frase(discurso.atributos.mp.acabouo) , player.x+20, player.y-40);
- animationSet.splice(seguidor_morte,1);
- }
- } else {
- seg_morte--;
- seg_morte_timer.update(seg_morte/400);
- var mt_x,mt_y;
- for(var i=0; i<2; i++)
- {
- if (morte[i].fsm.hp>0)
- {
- morte[i].delta += 4*0.017453293;
- mt_x = player.x + Math.cos(morte[i].delta)*TW;
- mt_y = player.y - 32 + Math.cos(morte[i].delta)*Math.pow(Math.sin(morte[i].delta*4),2) *TW;
- morte[i].position(mt_x,mt_y);
- var arr = morte[i].collision();
- for (var i2 in arr)
- {
- var ob = arr[i2];
- if(ob.nome=="morgerco" || ob.nome=="Aracne")
- {
- ob.remove();
- morte[i].remove();
- morte[i].fsm.hp=0;
- //try { swfsound.startSound( sound6 ); } catch (ex) { }
- playSound(6);
- applySangue(ob);
- break;
- }
- }
- }
- }
- if(seg_morte<=0)
- {
- animationSet.splice(animationSet.indexOf(seguidor_morte),1);
- seg_morte=0;
- seg_morte_timer.end();
- //morte[0].self.remove();
- //morte[1].self.remove();
- //chars.splice(morte[0],1);
- //chars.splice(morte[1],1);
- morte[0].remove();
- morte[1].remove();
- }
- }
- }
- var bomba_c=0;
- var bomba_timer;
- var bomba;
- var bombImg;
- var bombLay;
- var area1;
- var area2;
- function bomba_act(delta)
- {
- if (!bomba_c)
- {
- if (player.fsm.mp>60)
- {
- bomba = new Char("bomba",-2000,0, 1, [P+"bomb1.gif"]);
- bomba_c=65;
- bomba_timer = new Relogio();
- player.fsm.mp-=60;
- bomba.position(player.x,player.y);
- addEventBallon( frase(discurso.alerta.bomda) , player.x+20, player.y-40);
- //try { swfsound.startSound( sound3 ); } catch (ex) { }
- playSound(3);
- area1 = new Box(bomba.x-256-32, bomba.y-256-32, 511+32,511+32);
- area2 = new Box(area1.lf+TW,area1.tp+TH,388,388);
- if (!bombLay)
- {
- bombLay = $(document.createElement('div'));
- bombLay.attr("class","bombMark").width(512).height(512).css("border-color","rgba(255,255,0,0.6)").css("color","rgba(255,255,0,0.6)").html("" +
- '-60' +
- '<div class="bombMark" style="left:64px; top:64px; width:384px; height:384px; color: rgba(0,255,0,0.6); border-color:rgba(0,255,0,0.6);">-100</div>' +
- "");
- $("#charlayer").append(bombLay);
- }
- bombLay.show().css("top",area1.tp).css("left",area1.lf);
- for(var i in menuItens)
- if (menuItens[i].data==20) {menuItens.splice(i,1); break;}
- } else {
- addEventBallon( frase(discurso.atributos.mp.acabouo) , player.x+20, player.y-40);
- animationSet.splice(bomba_act,1);
- }
- } else {
- bomba_c--;
- bomba_timer.update(bomba_c/65);
- if(bomba_c<=0)
- {
- animationSet.splice(animationSet.indexOf(bomba_act),1);
- bomba_c=0;
- bomba_timer.end();
- bomba.self.remove();
- //chars.splice(bomba,1);
- bomba.remove();
- if (!bombImg) bombImg = $(document.createElement('img'));
- bombImg.show().attr("src",P+"Explode.gif").css("position","absolute").css("top",bomba.y-128).css("left",bomba.x-128).width(368).height(368);
- //try { swfsound.startSound( sound2 ); } catch (ex) { }
- playSound(2);
- // TODO Ao usar OGG com audio descomentar a linha abaixo e comentar a mesma em bomb_effect()
- //$("#charlayer").append(bombImg);
- setTimeout(bomb_effect,200);
- }
- }
- }
- function bomb_effect()
- {
- $("#charlayer").append(bombImg);
- removeTileAt(bomba.x,bomba.y);
- removeTileAt(bomba.x,bomba.y-TH);
- removeTileAt(bomba.x,bomba.y+TH);
- removeTileAt(bomba.x-TW,bomba.y-TH);
- removeTileAt(bomba.x+TW,bomba.y-TH);
- removeTileAt(bomba.x-TW,bomba.y);
- removeTileAt(bomba.x+TW,bomba.y);
- bombLay.hide();
- //alert(area.tp + " " + area.lf + " " + area.bt + " " + area.rt);
- // TODO que merda!!!
- // um erro de programação bem simples motivado pelo sono e falta de café.
- // é um negócio tão idiota que eu só fui ver a burrada num domingo de manhã com a mente mais descansada.
- // for(var i in chars) não funciona!
- // depois de olhar com falma vi que o erro éra que toda hora eu removia um ítem do Array chars !
- // clona array viado
- var tmpChars = [];
- for( var i in chars ) tmpChars.push(chars[i]);
- for(var i in tmpChars)
- {
- var c = tmpChars[i];//alert(c.nome);
- if ( c.box.collision(area1) )
- {
- c.fsm.hp-=60;
- if (c.box.collision(area2)) c.fsm.hp-=100;
- if (c.fsm.hp<=0) c.remove();
- }
- }
- }
- //----------- CLASSES PRINCIPAIS --------------
- var charInd=0;
- /*
- * Char
- * nome
- * x,y
- * tp: 1=tile 64x64 2=tile 64x128 4=tile 128x128
- * body = sequencia de imagens
- */
- function Char(nome, x,y, tp, body)
- {
- this.id = charInd; charInd++;
- this.x = x*TW;
- this.y = y*TH;
- this.g = 0;
- this.nome = nome;
- this.width = (tp<4) ? 64 : 128;
- this.height= (tp==1) ? 64 : 128;
- this.states=body;
- this.state=0;
- this.fsm = new FSM();
- this.orientation = -1;
- this.queda=0;
- this.col=0;
- this.tip="";
- var charLayer = $("#charlayer");
- this.div = document.createElement("div");
- document.getElementById("charlayer").appendChild(this.div);
- this.div.className="Char";
- this.self = $(this.div);
- this.offX = 0;
- this.offY = (tp==1) ? 0 : 64;
- this.box = new Box(this.x,this.y,this.width,this.height);
- this.img = document.createElement("img");
- $(this.img).width( this.width ).height( this.height );
- this.img.src=this.states[this.state];
- this.div.appendChild(this.img);
- this.self.css("top", this.y - this.offY).css("left", this.x );
- this.position = function(x,y)
- {
- this.self.css("top", y - this.offY);
- this.self.css("left", x );
- this.x = x;
- this.y = y;
- this.box.tp=y-this.offY;
- this.box.lf=x;
- this.box.bt=this.box.tp+this.height-1;
- this.box.rt=this.box.lf+this.width-1;
- /*if (!this.debug)
- {
- this.debug = $(document.createElement('div'));
- this.debug.css('border','1px solid #ff0').css('position','absolute');
- $('#charlayer').append(this.debug);
- }
- this.debug.css('top',this.box.tp).css('left',this.box.lf).width(this.width).height(this.height);
- */
- };
- this.showTip = function(e)
- {
- var off = $(e.target).offset();
- try {
- var tp = $(this).data("char").tip;
- if (tp!="")
- dica.show().css("top",off.top-32).css("left",off.left+64).html(tp);
- } catch (err) {}
- }
- this.hideTip = function()
- {
- dica.hide();
- }
- this.collision = function()
- {
- var at;
- var ar=[];
- for(var i in chars)
- {
- at = chars[i];
- if (at!=this)
- {
- if (this.box.collision(at.box))
- {
- at.col++;
- ar.push(at);
- }
- else at.col=0;
- }
- }
- return ar;
- };
- this.remove = function()
- {
- this.self.remove();
- for(var i in chars)
- if (chars[i].id==this.id)
- {
- chars.splice(i,1);
- break;
- }
- //alert(chars.indexOf(this));
- //chars.splice(chars.indexOf(this),1);
- };
- //this.position(this,this.x,this.y);
- //this.position(this.x,this.y);
- this.self.mouseover(this.showTip).mouseout(this.hideTip).data("char",this);
- chars.push(this);
- return this;
- }
- function Item(nome,c,func)
- {
- this.nome = nome;
- this.consumo = c;
- this.callBack = func;
- this.condicoes = function(pl)
- {
- if (pl.mp >= this.consumo)
- {
- pl.affectMP(-this.consumo);
- // callback
- return true;
- }
- return false;
- }
- return this;
- }
- function Box(x,y,w,h)
- {
- this.tp=y;
- this.lf=x;
- this.bt=y+h;
- this.rt=x+w;
- this.collision = function( bx )
- {
- if (this.bt >= bx.tp )
- if (this.tp <= bx.bt)
- if (this.rt >= bx.lf)
- if (this.lf <= bx.rt)
- return true;
- return false;
- };
- return this;
- }
- function MenuItem(label,func,data)
- {
- this.label = label;
- this.selected = false;
- this.func = func;
- this.data = data;
- return this;
- }
- function Relogio()
- {
- this.div = $(document.createElement("p"));
- this.img = $(document.createElement("img"));
- this.bar = $(document.createElement("div"));
- this.div.width(150).css("display","block");
- this.img.attr("src",P+"relogio.png").attr("width","32").attr("height","32").css("float","left").css("border","none");
- this.bar.css("background","rgba(255,255,0,0.7)").css("float","left").css("width","100px").css("height","8px").css("margin-left","4px").css("margin-top","12px");
- this.div.append(this.img).append(this.bar);
- //this.bar = this.div.children().last();
- $("#addons").append(this.div);
- this.update = function(d)
- {
- this.bar.width(Math.floor(100*d));
- };
- this.end = function()
- {
- this.div.remove();
- };
- return this;
- }
- function colision(x,y)
- {
- }
- function position(ch,x,y)
- {
- ch.self.css("top", y - ch.offY);
- ch.self.css("left", x );;
- ch.x = x;
- ch.y = y;
- }
- function move(ch,x,y)
- {
- position(ch,ch.x+x*SPD,ch.y+y*SPD);
- }
- var menuItens =[
- new MenuItem("Ajuda (comandos)",function() {},null),
- new MenuItem("Pausar / Fazer comentário",function() { pausa = 1; $(window).scrollTop($("#game_return").offset().top); },null),
- new MenuItem("Voltar ao jogo",function() {},null)
- ];
- function trataMenu()
- {
- var ind=0;
- var ob=[];
- var cont=0;
- $("#gamemenu ul li").each(function(e,v) {cont++;if(v.className=="selectedItem") { ind=e;} v.className="";ob.push($(v)); });
- if (up || down)
- {
- if(up)
- {
- ind --;
- if(ind<0) ind=cont-1;
- }
- if(down)
- {
- ind++;
- if(ind>=cont) ind=0;
- }
- }
- ob[ind].attr('class','selectedItem');
- if (menu)
- {
- /*if(ind==cont-1)
- {
- showMenu=0;
- $("#gamemenu").hide("slow");
- menu=0;
- }*/
- menuItens[ind].selected=true;
- menuItens[ind].func();
- showMenu=0;
- $("#gamemenu").fadeOut("slow");
- menu=0;
- }
- }
- function mostraMenu()
- {
- var h = "<h4>Selecione uma opção</h4><ul>";
- // desenha o item e zera o valor selected dos item
- for(var i in menuItens)
- {
- menuItens[i].selected = false;
- h += '<li' + String((i==menuItens.length-1) ? ' class="selectedItem">' : '>') + menuItens[i].label + '</li>';
- }
- menuItens[menuItens.length-1].selected=true;
- h += '</ul>';
- var t = $(window).height()*0.5 - $("#gamemenu").height()*0.5;
- if (navigator.userAgent.toLowerCase().indexOf("microsoft")>-1)
- t += $(window).scrollTop();
- $("#gamemenu").fadeIn("slow").html(h).css("top", t);
- //
- }
- // Retorna o tile em determinada posição da tela
- function tileAt(x,y)
- {
- x = Math.round(x/TW);
- y = Math.round(y/TH);
- if(x>=map[0].length || y>=map.length || x<0 || y<0) return 5;
- var t = mapTokens.indexOf( map[y].charAt(x) );
- return (t<0) ? 0 : t;
- }
- // remove tile
- function removeTileAt(x,y, vis)
- {
- if (vis==undefined) vis=true;
- x = Math.round(x/TW);
- y = Math.round(y/TH);
- if(x>=map[0].length || y>=map.length || x<0 || y<0) return;
- map[y]=map[y].substring(0,x)+" "+map[y].substring(x+1);
- $("#T"+String(x)+"_"+String(y)).attr("class","").css("background","none");
- }
- /******
- *
- * Carrega objetos, atores, cartas e elementos dinâmicos
- *
- */
- function loadObject(index,x,y)
- {
- switch (index)
- {
- case "o": //Palyer
- iniX=x;
- iniY=y;
- break;
- case "M":
- inimigos.push( new Char("morgerco",x,y, 1, [P+"animado_ani0475_b.gif"]) );
- break;
- case "A":
- var aracne;
- inimigos.push( aracne = new Char("Aracne",x,y, 4, [P+"aracne.gif"]));
- aracne.tip = discurso.chars.aracne.tip;
- aracne.count=20;
- break;
- case "a": // invertida
- var aracne;
- inimigos.push( aracne = new Char("Aracne",x,y, 4, [P+"aracne.gif"]));
- aracne.tip = discurso.chars.aracne.tip;
- aracne.count=0;
- break;
- case "1":
- var c = new Char("Anjo",x,y, 1, [P+"animado_fanta0045.gif"]);
- c.tip = discurso.chars.anjo.tip;
- break;
- case "2":
- new Char("hp",x,y, 1, [P+"coracao.png"]);
- break;
- case "3":
- new Char("mp",x,y, 1, [P+"mana.png"]);
- break;
- case "4":
- var c = new Char("carta1",x,y, 1, [P+"carta1.png"]);
- c.tip = discurso.chars.projAstral.tip;
- break;
- case "5":
- var c = new Char("carta2",x,y, 1, [P+"carta2.png"]);
- c.tip = discurso.chars.aliado.tip;
- break;
- case "6":
- var c = new Char("carta3",x,y, 1, [P+"carta3.png"]);
- c.tip = discurso.chars.bomba.tip;
- break;
- case "7":
- var c = new Char("carta4",x,y, 1, [P+"carta.png"]);
- break;
- case "P":
- var c = new Char("pena",x,y, 1, [P+"penadevacasagrada.png"]);
- c.tip = discurso.chars.pena.tip;
- break;
- }
- }
- function mountScene()
- {
- var html = "<tbody>";
- var tok = 0;
- for(var lin=0; lin<map.length; lin++)
- {
- html += "<tr>"
- for(var col=0; col<map[lin].length; col++)
- {
- tok = mapTokens.indexOf( map[lin].charAt(col) );
- if (tok==-1)
- {
- loadObject(map[lin].charAt(col), col,lin);
- tok = 0;
- }
- if (tok>0)
- html += '<td class="wwp_cg' + tok + '" id="T'+String(col)+"_"+String(lin)+'"> </td>';
- else
- html += '<td> </td>';
- // casos especiais
- if (tok==4)
- {
- removeTileAt(col*TW, lin*TH, false);
- }
- }
- html += '</tr>';
- }
- html += "</tbody>";
- board.html(html);
- $("#charlayer").width(map[0].length*TW).height(map.length*TH);
- player = new Char("Cibele",iniX,iniY, 2, [P+"cibele01.png",P+"cibele02.gif",P+"cibele04.png",P+"cibele05.png",P+"cibele06.gif",P+"cibele08.png",P+"cibele09.png"]);
- }
- function mountEffects()
- {
- var off = $("#gameboard").offset();
- var layer = document.createElement("div");
- layer.id="effectslayer";
- document.body.appendChild(layer);
- $(layer).css("top",off.top).css("left",off.left);
- var ef = document.createElement("img");
- ef.id="asas";
- ef.src=P+"asa01.gif";
- ef.style.width=64;
- ef.style.height=128;
- //ef.style.display="none";
- layer.appendChild(ef);
- effects.push($(ef));
- effects[0].hide();
- }
- function animPlayer()
- {
- var state=0;
- var x=player.x;
- var y=player.y;
- var mx = x;
- var my = y;
- var tile= [ tileAt(x,y), tileAt(x,y-TH) ];
- if(right || jmp==3)
- {
- if(!jmp)
- {
- mx += SPD;
- state=1;
- cR=0;
- } else if (jmp==3) mx += SPD;
- // flip
- if (!jmp || jmp==3)
- {
- $(player.img).css("-moz-transform","scaleX(-1)").css("-o-transform","scaleX(-1)").css("-webkit-transform","scaleX(-1)").css("transform","scaleX(-1)").css("filter","FlipH").css("-ms-filter","\"FlipH\"");
- effects[0].css("-moz-transform","scaleX(-1)").css("-o-transform","scaleX(-1)").css("-webkit-transform","scaleX(-1)").css("transform","scaleX(-1)").css("filter","FlipH").css("-ms-filter","\"FlipH\"");
- player.orientation = -1;
- }
- }
- if(left || jmp==2)
- {
- if(!jmp)
- {
- mx -= SPD;
- state=1;
- cL=0;
- } else if (jmp==2) mx -= SPD;
- // unflip
- if (!jmp || jmp==2)
- {
- $(player.img).css("-moz-transform","scaleX(1)").css("-o-transform","scaleX(1)").css("-webkit-transform","scaleX(1)").css("transform","scaleX(1)").css("filter","").css("-ms-filter","\"\"");
- effects[0].css("-moz-transform","scaleX(1)").css("-o-transform","scaleX(1)").css("-webkit-transform","scaleX(1)").css("transform","scaleX(1)").css("filter","").css("-ms-filter","\"\"");
- player.orientation = 1;
- }
- }
- if(up)
- {
- state=0;
- if( tile[1]==1 || fly) my -= SPD;
- }
- if(down)
- {
- state=0;
- if(tile[0]==1 || fly) my += SPD;
- }
- if(spc && jmp==0)
- {
- player.g=-18;
- jmp=1 + ((right) ? 2:0) + ((left) ? 1:0); // 2=left 3=right 1=stand
- }
- if (!fly)
- {
- if (tile[0]!=1 && tile[1]!=1)
- {
- my += player.g += 2;//(G-player.g)*.3;
- if (player.g>24)
- {
- player.g=24;
- player.queda++;
- } else player.queda=0;
- //jmp=0;
- } else {
- if (jmp)// && !player.g)
- player.g=jmp=0;
- if (up || down) state=4; else state=5;
- }
- }
- //normalizadas
- var nx= Math.round(mx/TW)*TW;
- var ny= Math.round(my/TH)*TH;
- var bbox = new Box(mx,my-TH,TW,TH*2);
- var box = [false,false];
- if(right==1)
- {
- box[0]= (tileAt(nx+TW,ny)>1) ? new Box(nx+TW,ny,TW,TH) : false;
- if(bbox.rt>box[0].lf)
- {
- mx=box[0].lf-TW;
- jmp=player.g=0;
- }
- }
- else
- {
- box[0]= (tileAt(nx-TW,ny)>1) ? new Box(nx-TW,ny,TW,TH) : false;
- if(bbox.lf<box[0].rt)
- {
- mx=box[0].rt;
- jmp=player.g=0;
- }
- }
- box[1]= (tileAt(nx,ny+TH)>1) ? new Box(nx,ny+TH,TW,TH) : false;
- if(bbox.bt>box[1].tp)
- {
- my=box[1].tp-TH;
- if(/*Math.round(player.g)==24*/ player.queda>3 && spec_corp==0)
- {
- var vqueda=20;
- if (player.queda>4) vqueda=40;
- if (player.queda>8) vqueda=80;
- player.fsm.hp -= vqueda;
- addEventBallon("<strong style=\"color:#f00\">-"+String(vqueda)+" HP</strong>",player.x+20,player.y-40);
- }
- jmp=player.g=0;
- }// else if (player.g>0 && !jmp) jmp=1;
- if(player.g<0) state=2; else if(player.g>0 && tile[0]!=1) state=3;
- if (fly)
- {
- state=6;
- effects[0].css("top",y-TH).css("left",x);
- }
- //debug[0].css("left",nx-TW).css("top",ny);
- //debug[1].css("left",nx).css("top",ny+TH);
- //debug[2].css("left",nx+TW).css("top",ny);
- //debug[0].css("left",box[0].lf).css("top",box[0].tp);
- //debug[1].css("left",box[1].lf).css("top",box[1].tp);
- //debug[2].css("left",bbox.lf).css("top",bbox.tp);
- var tile= [ tileAt(nx,ny), tileAt(nx,ny-TH) ];
- if (tile[0]>1 || tile[1]>1)
- { //colisao
- x = Math.round(x/TW)*TW;
- y = Math.round(y/TH)*TH;
- } else {
- x = mx;
- y = my;
- }
- //position(player,x,y);
- player.position(x,y);
- if(player.state!=state)player.img.src=player.states[player.state=state];
- // -------------------------------------
- // colisao com atores
- // AJUSTA ACOES
- // -------------------------------------
- var arr = player.collision();
- //if (inColl==0)
- for (var i in arr)
- {
- var ob = arr[i];
- if (ob.nome=="Anjo") anjo_atuacao01(ob);
- else
- if (ob.nome=="hp") coracao_atuacao01(ob);
- else
- if (ob.nome=="mp") mana_atuacao01(ob);
- else
- if (ob.nome.substring(0,5)=="carta") carta_atuacao(ob);
- else
- if (ob.nome=="pena") pena_atuacao(ob);
- else
- if (!spec_corp)
- // se corpo astral nao ativo verifica colisao com inimigos
- if (ob.nome=="Aracne" || ob.nome=="morgerco") inimigo_atuacao(ob);
- }
- inColl=0;//arr.length;
- // dados hud
- if (player.fsm.hp>0)
- {
- hp.width( Math.round(158*player.fsm.hp*0.01) );
- mp.width( Math.round(158*player.fsm.mp*0.01) );
- } else {
- hp.width( 0 );
- }
- }
- var morteDiv=0;
- function animMorte()
- {
- if (!morteDiv)
- {
- morteDiv = $(document.createElement('img'));
- morteDiv.attr("src",P+"gameover.png").attr("class","rip");
- //try { swfsound.startSound( sound1 ); } catch (ex) { }
- playSound(1);
- $("#charlayer").append(morteDiv);
- $("#hud").css("display","none");
- $("#asas").remove();
- $("#game_return").hide();
- }
- var x = $("#charlayer").width()*.5 - 256;
- var wh = $(window).height();
- var top = $(window).scrollTop() - board.offset().top + (wh*0.5) -256;
- morteDiv.css("top", top).css("left",x);
- }
- var vitorDiv=0;
- function animVitoria()
- {
- if (!vitorDiv)
- {
- vitorDiv = $(document.createElement('img'));
- vitorDiv.attr("src",P+"vitoria.gif").attr("class","vit");
- //try { swfsound.startSound( sound1 ); } catch (ex) { }
- playSound(1);
- while (chars.length) { chars[0].remove(); chars.shift(); }
- $("#asas").remove();
- $("#charlayer").append(vitorDiv);
- $("#hud").css("display","none");
- $(window).scrollTop( $("#game_return").offset().top - $(window).height()+64 );
- $("#game_return").hide();
- }
- var x = $("#charlayer").width()*.5 - 256;
- var wh = $(window).height();
- var top = $(window).scrollTop() - board.offset().top + (wh*0.5) -256;
- vitorDiv.css("top",top).css("left",x);
- }
- function animInimigo()
- {
- for(var i in inimigos)
- {
- var c = inimigos[i];
- var x;
- if (c.nome=="morgerco")
- {
- x = c.x-6;
- if (x<-TW) x = board.width()-6;
- c.position(x, c.y);
- } else
- if (c.nome=="Aracne")
- {
- c.count += c.orientation;
- x = c.x + 6*c.orientation;
- c.position(x,c.y);
- if (Math.abs(c.count)>20)
- {
- c.orientation *= -1;
- $(c.img).css("-moz-transform","scaleX("+-c.orientation+")").css("-o-transform","scaleX("+-c.orientation+")").css("-webkit-transform","scaleX("+-c.orientation+")").css("transform","scaleX("+-c.orientation+")").css("filter","").css("-ms-filter","\"\"");
- }
- }
- }
- }
- function animation()
- {
- var nTime = new Date().getTime();
- var wh = $(window).height()/2;
- if(menu)
- {
- if (!showMenu)
- {
- mostraMenu();
- menu=0;
- showMenu=1;
- }
- }
- if(!showMenu)
- {
- if (vitoria) animVitoria();
- else
- {
- if (!pausa && !vitoria)
- {
- if(player.fsm.hp>0) animPlayer();
- animInimigo();
- } else {
- }
- }
- } else trataMenu();
- //animageBaloons();
- if (pausa || vitoria || player.fsm.hp<=0)
- {
- if (vitoria) animVitoria(); else if (player.fsm.hp<=0) animMorte();
- }
- for(var i in animationSet)
- {
- var f = animationSet[i];
- f();
- }
- if (!pausa && player.fsm.hp>0 && !vitoria)
- {
- var top = $(window).scrollTop();
- //var yDst = player.self.offset().top - wh + topOff;
- var wh = $(window).height();
- var yDst = player.self.offset().top + TH - wh*0.5;
- top += (yDst-top) *.3;
- $(window).scrollTop( top );
- var offB = board.offset();
- if (offB.top<top)
- {
- gameHUD.css("top",0);
- } else {
- gameHUD.css("top",offB.top-top);
- }
- }
- // usar setTimeout porque o IE é um lixo que dá pau com setInterval
- setTimeout("animation()", 50 + ((showMenu!=0) ? 50 : 0));
- }
- //38 up 40 down 39 right 37 left 32 spc 16 shift 17 ctrl
- function kdown(e)
- {
- if (pausa || player.fsm.hp<=0 || vitoria) return true;
- switch (e.keyCode)
- {
- case 37:
- if (!jmp) left=1;
- break;
- case 39:
- if (!jmp) right=1;
- break;
- case 38:
- up=1;
- break;
- case 40:
- down=1;
- break;
- case 32:
- spc=1;
- break;
- case 13:
- menu=1;
- break;
- default:
- return true;
- }
- return false;
- }
- function kup(e)
- {
- if (pausa || player.fsm.hp<=0 || vitoria) return true;
- switch (e.keyCode)
- {
- case 37:
- left=0;
- break;
- case 39:
- right=0;
- break;
- case 38:
- up=0;
- break;
- case 40:
- down=0;
- break;
- case 32:
- spc=0;
- break;
- case 13:
- menu=0;
- break;
- default:
- return true;
- }
- return false;
- }
- function definicoes()
- {
- ww = $(window).width();
- wh = $(window).height()/2;
- }
- function initAjuda()
- {
- var ajuda = $("#ajuda");
- ajuda.mouseover( function() {$("#ajuda").height(512);} ).mouseout( function() {$("#ajuda").height(28);} );
- }
- var topOff=0;
- function init()
- {
- board=$("#gameboard");
- width=TW*map[0].length;
- height=TH*map.length;
- var charLayer = $("#charlayer");
- var off = board.offset();
- topOff = off.top - TH;
- charLayer.css("top",charLayer.offset().top-off.top);
- //charLayer.css("left",off.left-12);
- gameHUD = $("#hud");
- gameHUD.css("left",off.left).css("top",off.top);
- mp = $("#mp");
- hp = $("#hp");
- mountScene();
- mountEffects();
- offChars = charLayer.offset();
- definicoes();
- dica = $("#dica");
- // Inicializa player
- player.fsm.mp=0;
- /*for(var d=0;d<3;d++)
- {
- var db = document.createElement("div");
- db.className="debug";
- document.getElementById("charlayer").appendChild(db);
- debug.push($(db));
- }*/
- animation();
- $("#game_return").click( function() { if (!vitoria) pausa=0;} );
- var flashvars = {};
- var params = { allowscriptaccess:"always"};
- var attributes = {};
- //swfobject.embedSWF(P+"gamesounds.swf", "gamesounds", "0", "0", "9");
- initAjuda();
- extraInit();
- }
- //var debug=[];
- var vitoria=0;
- var pausa=0;
- var player;
- var chars=[];
- var inimigos=[];
- var effects=[];
- var iniX,iniY;
- var TW=64;
- var TH=64;
- var SPD=8;
- var inColl=0;
- var fly=0;
- var showMenu=0;
- var menu=0;
- var magia=0;
- var offChars;
- var width=0;
- var height=0;
- var hp;
- var mp;
- var cL=0;
- var cR=0;
- var left=0;
- var right=0;
- var down=0;
- var up=0;
- var spc=0;
- var ctrl=0;
- var shift=0;
- var jmp=0;
- var gameHUD=0;
- var oldTime=new Date().getTime();
- var dica;
- var mapTokens=" #=@%";
- var map= [
- "@@ # ",
- "@@ 3# ",
- "@@ 3 # o ",
- "=====#====",
- " P @# ",
- " @# #",
- " @# @#",
- " @# @@#", // Aqui o jogador sofre até ver que
- " =======#", // não consegue pegar a pena de vaca
- " = #",
- " =6 A #",
- " @======#",
- " 24 #",
- " #",
- "2 2 2#", // talves ele cometa o erro de pular
- "===== ====", // e ver que deixou ítens.
- " = ", // TODO: resolver com testes?
- " = M #5",
- " 2 #=",
- "2 3 #=", // HP extra para compensar a queda
- "========#@",
- " @ #@",
- "# @ 3 3 #@", // aqui ele usa a primeira bomba
- "#=@===@===",
- "# ", // média de MP = 10
- "# @M 5",
- "# @",
- "#= @@3@",
- "# =====",
- "# @== 3 ",
- "# ",
- "== 3 6",
- "== @== @",
- "6#= =",
- " # = 3 ==",
- "=# ==#===",
- " # # M ", // aqui ele é obrigado a usar a arma
- " # 3 # 3", // para matar o morcego e poder disparar
- "==========", // a bomba
- "@# M 3",
- "@# 2 M ", // MP pode estar baixo, para passar o
- "@# 3 3==", // morcego ele deve contar com o HP
- "6===== = ",
- "M @3 ", // fartura de MP para deixar o jogador
- "2 # @ 3 2", // sabendo que aqui vai dar merda!
- "===#M===33",
- " 3# 3M==",
- "233# 3 3 @",//
- "3=========",
- "= # ",
- "= # 2 22", // muita HP pra recarregar...
- "==== =====",
- " ",
- " a A ",// indica q a coisa ta fudida.
- "====%=====",
- " 3@ # ",
- " 3@ 2 2 #5",
- " 3@=====# ",
- " 3 M # ",
- " # ",
- " # ",
- " 1 @ # ",
- " @@@@ # ",
- "=========="
- ];
- var board;
- var sound1,sound2,sound3,sound4,sound5,sound6;
- /***
- * Implementação tosca de som
- **/
- function playSound(n)
- {
- try { // som
- switch(n)
- {
- case 1:
- sound1.play();
- break;
- case 2:
- sound2.play();
- break;
- case 3:
- sound3.play();
- break;
- case 4:
- sound4.play();
- break;
- case 5:
- sound5.play();
- break;
- case 6:
- sound6.play();
- break;
- }
- } catch (e) {}
- }
- // inicializa
- $(document).ready(init).keydown(kdown).keyup(kup);
- var P="<%= root_url %>rc/gameplat1/";
- function extraInit()
- {
- // emenda para fazer funcionar os tiles incorporando a javascript
- // não sera usado no ambiente Lua
- $("#gameboard .wwp_cg1").each( function() { $(this).css("background","url("+P+"tile01.png)"); } );
- $("#gameboard .wwp_cg2").each( function() { $(this).css("background","url("+P+"tile02.png)"); } );
- $("#gameboard .wwp_cg3").each( function() { $(this).css("background","url("+P+"tile03.png)"); } );
- $("#gameboard .wwp_cg4").each( function() { $(this).css("background","url("+P+"tile04.png)"); } );
- sound1 = document.getElementById("gsound1");
- sound2 = document.getElementById("gsound2");
- sound3 = document.getElementById("gsound3");
- sound4 = document.getElementById("gsound4");
- sound5 = document.getElementById("gsound5");
- sound6 = document.getElementById("gsound6");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement