From cf02a59deeb23cb9781dc5fc48a343675a17052b Mon Sep 17 00:00:00 2001 From: oc Date: Thu, 28 Dec 2017 01:51:13 +0800 Subject: [PATCH] Update Status Bar --- images/lv.png | Bin 0 -> 1471 bytes images/up.png | Bin 0 -> 863 bytes index.html | 14 ++++-- libs/core.js | 102 +++++++++++++++++++++++++++++++++-------- libs/data.js | 27 +++++++++-- libs/enemys.js | 11 ++--- libs/events.js | 17 ++----- libs/floors/sample1.js | 4 +- libs/floors/sample2.js | 2 +- libs/ui.js | 54 ++++++++++++---------- main.js | 9 ++++ styles.css | 5 +- 更新说明.txt | 2 + 13 files changed, 171 insertions(+), 76 deletions(-) create mode 100644 images/lv.png create mode 100644 images/up.png diff --git a/images/lv.png b/images/lv.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9cf96c28b3eb21f89270cb037245920f3ea5fc GIT binary patch literal 1471 zcmV;w1wi_VP)@ZYZ>YVu&FRwj2lvgw`KzWCwd~BdymfMM_rMo!yza_jC{32QMTm zl@0X3pL@CI|DW@p!_1j6BEtVOGIR&Vn6CV(Z}M7bnRFIUz=Q6PTL1(h*pL$s|ATJ< zX%|(b+dvN#wD?0WoQJfHzcS2T(iO}t#ns{1=XCYfbG-S(U6VioSnk<@9>|LW>I>Mv z{{{&H$Yx32c>@z>z;_D~#HM8Td>xVm;~e4CAyf}EL z0dWwx6cIIG2|F5}H>*AaJrO{qlw7>=gE}@k;0%yBA;H;w%H*skS&Z!1W{{}Dt#I>uW+5rQB4QX2o)+qoW3;-c* zH*uO1RHNEY$3U_;hjSJ&g1C^V6|?U18(F_^0)VBHWg73zW0OdE7%{5(R1C;`#Pp_m z^{eZ0LkNO1(25d9_iQ4+^%1}@xa)6x@NR{)-9Q8khL76Is1^`<#A+T}Qzv=)U)9=l ztv-isw@8}}g4>G(Iia{~NB>rlxKU@r z?osl0ei3rR9o$B)vmd&rMBJ>S9ObG;wLsL5ffQH*uB(aiBBvKj#K`tx2Jd+k+D!%P zI{VVj5(_j@j&fDwwP`;F6c%q{|1^iQ_in$C8y&|CZA0R!0y=v=)0}c{DQ^3p1KlQa zV_S!J6n1i|IkJsT@u-T~a~U3_%|;k7^9f3%Qshs9YC!3Q|kY4@F&!3iW@ zKx`WT;srg^TyXRE=`2A27(f>=K}aJBemZgB?W2HO%|M}$;qb=C{|HGN)C8jN9~}!$ zaP5mA4ghJ-5)|&Du=7V0zmU<23U9zbb^u;E@GIa2pt+iXfm%I1U3lxr-on@x$c`gs z0L1xjDCqtvK(H%kfdC{znwPu@Ly!rH=4y1VISu62Vj$Uh=-sDZJ=}Qe8++>qi+48& z@?#LL2j_as6$4mY^L-$|m=Fy=KXvVQ`+q(25|FNC5=Ow>_nx15ao?%hsbkNy z{!+XvA~Ui9GFv{OegH<0=qiZCgc;K11}o>w9QkYc;EN~b&H&Yqn+ZllKJJ$+0E$2f z`0SOJzVvEo+s4}qcYh5@o85PiB98z3#h;rnQuKgr_N#p;7UJNy0WhjH1z87g#Z z{Uvii14w}M*qQkwKiD+(+d_UbQl9~gziWfUA0f#i7y+@E+$gqL+Bc0+Gfq9?} z$p1PA#0wW6+r8m|fzj6zw~qg>Uf78vPKvv&u!mhyQk zW@Y7UjivuAEj|aWyAo5W6O!&3w3w_}C zmhK4s@cIm}+3!CD%6{$Yz*?VyhQGiC;37}~RzBfdZ+))fxfi^)(a#)6y!*9=0I|oK Z;=eRJ0L-IjR=ofK002ovPDHLkV1jrryaxaP literal 0 HcmV?d00001 diff --git a/images/up.png b/images/up.png new file mode 100644 index 0000000000000000000000000000000000000000..705189d0a45e311cf44ee7126709945e01e7f677 GIT binary patch literal 863 zcmV-l1EBngP)a=DVxMi`s1i zxTJ@-H0_NCqFr5u#ibxj1(*iTH8`CPc(?8Hwnv+8{P_8XPya;#8Qu^I#(Z_H`pHWG z84j2tx~ev9_Xf9b{dV9~S%(z>Vl}+Eu_5lSYm2zDwKH%|0U>4rPy+}w1E%j2FCR_) z`eNejq3@^qm)n3m`OY0Nf2cW9=qd(hYF5aTCft|_Xjtdn>Xy(byCJaEc2@TVezfC=zc=y$T%ZY1?WjL1#-yQJBe8Jt3 z0#}i!Rsui*824|u5a+6J*~Iz{9({lA=4m#0vOhUuwSj`sp31T6>e`6QT?!DQ3s4A0 zk-G$rvMLd3K;+H>So%HGxg;p1#(*;2b-hU>663Ek-KPfTN3AsA8hSE2H1hb~eGn0C zFo3{u=Agf~BG4gQ$TlEc&4#J-Neut|;LgJ-Jj*$$f`wP_F=zD(7W&3;VG+Q!UwlM+ zD`*k;9T)OQ5`QZ{sNU;%s$RG&=8U9~3Af-qr z#NHW@BDpRb5oR|4$@AR3ozF1MfRtv|t>k-#0vfXqK)e16&U20uIf%mLUQv*F{ubl^ ptW4{204QG)T>g3~{2$ip`WxoBbTmco!D|2j002ovPDHLkV1hfWi;4gM literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 31303e06..44c759a0 100644 --- a/index.html +++ b/index.html @@ -47,10 +47,14 @@

-
+

+
+ +

+

@@ -67,7 +71,7 @@

-
+

@@ -75,12 +79,16 @@

+
+ +

+
-
+
diff --git a/libs/core.js b/libs/core.js index fdbba744..58e84441 100644 --- a/libs/core.js +++ b/libs/core.js @@ -114,6 +114,13 @@ core.prototype.init = function (dom, statusBar, canvas, images, sounds, floorIds core[key] = coreData[key]; } core.flags = core.clone(core.data.flags); + if (!core.flags.enableExperience) + core.flags.enableLevelUp = false; + if (!core.flags.canOpenBattleAnimate) { + core.flags.showBattleAnimateConfirm = false; + core.flags.battleAnimate = false; + core.setLocalStorage('battleAnimate', false); + } core.values = core.clone(core.data.values); core.firstData = core.data.getFirstData(); core.initStatus.shops = core.firstData.shops; @@ -1536,7 +1543,9 @@ core.prototype.afterBattle = function(id, x, y, callback) { core.canvas.event.clearRect(32 * x, 32 * y, 32, 32); } core.updateFg(); - var hint = "打败 " + core.material.enemys[id].name + ",金币+" + money; + var hint = "打败 " + core.material.enemys[id].name; + if (core.flags.enableMoney) + hint += ",金币+" + money; if (core.flags.enableExperience) hint += ",经验+" + core.material.enemys[id].experience; core.drawTip(hint); @@ -1583,15 +1592,19 @@ core.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback) core.clearContinueAutomaticRoute(); core.dom.floorNameLabel.innerHTML = core.status.maps[floorId].title; if (core.isset(stair)) { - // find heroLoc - heroLoc = core.status.hero.loc; + if (!core.isset(heroLoc)) heroLoc={}; var blocks = core.status.maps[floorId].blocks; for (var i in blocks) { if (core.isset(blocks[i].event) && !(core.isset(blocks[i].enable) && !blocks[i].enable) && blocks[i].event.id === stair) { heroLoc.x = blocks[i].x; heroLoc.y = blocks[i].y; + break; } } + if (!core.isset(heroLoc.x)) { + heroLoc.x=core.status.hero.loc.x; + heroLoc.y=core.status.hero.loc.y; + } } if (core.status.maps[floorId].canFlyTo && core.status.hero.flyRange.indexOf(floorId)<0) { if (core.floorIds.indexOf(floorId)>core.floorIds.indexOf(core.status.floorId)) @@ -1606,6 +1619,7 @@ core.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback) // 根据文字判断是否斜体 var floorName = core.status.maps[floorId].name; + if (!core.isset(floorName) || floorName=="") floorName=" " core.statusBar.floor.innerHTML = floorName; if (/^[+-]?\d+$/.test(floorName)) core.statusBar.floor.style.fontStyle = 'italic'; @@ -3182,6 +3196,11 @@ core.prototype.getStatus = function (statusName) { return core.status.hero[statusName]; } +core.prototype.getLvName = function () { + if (core.status.hero.lv>core.firstData.levelUp.length) return core.status.hero.lv; + return core.firstData.levelUp[core.status.hero.lv-1].name || core.status.hero.lv; +} + core.prototype.setFlag = function(flag, value) { if (!core.isset(core.status.hero)) return; core.status.hero.flags[flag]=value; @@ -3302,9 +3321,9 @@ core.prototype.hide = function (obj, speed, callback) { ////// 状态栏相关 ////// core.prototype.clearStatusBar = function() { - var statusList = ['floor', 'hp', 'atk', 'def', 'mdef', 'money', 'experience', 'yellowKey', 'blueKey', 'redKey', 'poison', 'weak', 'curse', 'hard']; + var statusList = ['floor', 'lv', 'hp', 'atk', 'def', 'mdef', 'money', 'experience', 'up', 'yellowKey', 'blueKey', 'redKey', 'poison', 'weak', 'curse', 'hard']; statusList.forEach(function (e) { - core.statusBar[e].innerHTML = ""; + core.statusBar[e].innerHTML = " "; }); core.statusBar.image.book.style.opacity = 0.3; core.statusBar.image.fly.style.opacity = 0.3; @@ -3320,6 +3339,12 @@ core.prototype.updateStatusBar = function () { core.setStatus('hp', Math.min(core.values.HPMAX, core.getStatus('hp'))); } + var lvName = core.getLvName(); + core.statusBar.lv.innerHTML = lvName; + if (/^[+-]?\d+$/.test(lvName)) + core.statusBar.lv.style.fontStyle = 'italic'; + else core.statusBar.lv.style.fontStyle = 'normal'; + var statusList = ['hp', 'atk', 'def', 'mdef', 'money', 'experience']; statusList.forEach(function (item) { core.statusBar[item].innerHTML = core.getStatus(item); @@ -3376,18 +3401,22 @@ core.prototype.resize = function(clientWidth, clientHeight) { statusWidth, statusHeight, statusMaxWidth,statusLabelsLH, toolBarWidth, toolBarHeight, toolBarTop, toolBarBorder, toolsWidth, toolsHeight,toolsMargin,toolsPMaxwidth, - fontSize, margin; + fontSize, toolbarFontSize, margin; - var count = 9; + var count = 11; + if (!core.flags.enableFloor) count--; + if (!core.flags.enableLv) count--; if (!core.flags.enableMDef) count--; + if (!core.flags.enableMoney) count--; if (!core.flags.enableExperience) count--; + if (!core.flags.enableLevelUp) count--; if (!core.flags.enableDebuff) count--; - var statusLineHeight = BASE_LINEHEIGHT * 9/count; + var statusLineHeight = BASE_LINEHEIGHT * 9 / count; + var statusLineFontSize = DEFAULT_FONT_SIZE; + if (count>9) statusLineFontSize = statusLineFontSize * 9 / count; - var shopDisplay, mdefDisplay, expDisplay; - mdefDisplay = core.flags.enableMDef ? 'block' : 'none'; - expDisplay = core.flags.enableExperience ? 'block' : 'none'; + var shopDisplay; statusBarBorder = '3px #fff solid'; toolBarBorder = '3px #fff solid'; @@ -3407,13 +3436,13 @@ core.prototype.resize = function(clientWidth, clientHeight) { var scale = core.domStyle.scale var tempWidth = DEFAULT_CANVAS_WIDTH * scale; - fontSize = DEFAULT_FONT_SIZE * scale; if(!isHorizontal){ //竖屏 core.domStyle.screenMode = 'vertical'; //显示快捷商店图标 shopDisplay = 'block'; //判断应该显示几行 - var col = core.flags.enableMDef || core.flags.enableExperience || core.flags.enableDebuff ? 3 : 2; + // var col = core.flags.enableMDef || core.flags.enableExperience || core.flags.enableDebuff ? 3 : 2; + var col = parseInt((count-1)/3)+1; var tempTopBarH = scale * (BASE_LINEHEIGHT * col + SPACE * 2) + 6; var tempBotBarH = scale * (BASE_LINEHEIGHT + SPACE * 4) + 6; @@ -3440,6 +3469,8 @@ core.prototype.resize = function(clientWidth, clientHeight) { margin = scale * SPACE * 2; toolsMargin = scale * SPACE * 4; + fontSize = DEFAULT_FONT_SIZE * scale; + toolbarFontSize = DEFAULT_FONT_SIZE * scale; }else { //横屏 core.domStyle.screenMode = 'horizontal'; shopDisplay = 'none'; @@ -3457,6 +3488,8 @@ core.prototype.resize = function(clientWidth, clientHeight) { toolBarTop = scale*statusLineHeight * count + SPACE * 2; toolBarBorder = '3px #fff solid'; toolsHeight = scale * BASE_LINEHEIGHT; + fontSize = statusLineFontSize * scale; + toolbarFontSize = DEFAULT_FONT_SIZE * scale; borderRight = ''; statusMaxWidth = scale * DEFAULT_BAR_WIDTH; toolsPMaxwidth = scale * DEFAULT_BAR_WIDTH; @@ -3486,7 +3519,8 @@ core.prototype.resize = function(clientWidth, clientHeight) { toolsHeight = BASE_LINEHEIGHT; borderRight = ''; - fontSize = DEFAULT_FONT_SIZE; + fontSize = statusLineFontSize; + toolbarFontSize = DEFAULT_FONT_SIZE; statusMaxWidth = DEFAULT_BAR_WIDTH; toolsPMaxwidth = DEFAULT_BAR_WIDTH * .9; margin = SPACE * 2; @@ -3511,8 +3545,6 @@ core.prototype.resize = function(clientWidth, clientHeight) { height: canvasWidth + unit, top: canvasTop + unit, right: 0, - // left: canvasLeft + unit, - border: '3px #fff solid', } }, @@ -3576,7 +3608,7 @@ core.prototype.resize = function(clientWidth, clientHeight) { borderBottom: toolBarBorder, borderLeft: toolBarBorder, borderRight: borderRight, - fontSize: fontSize + unit + fontSize: toolbarFontSize + unit } }, { @@ -3595,15 +3627,45 @@ core.prototype.resize = function(clientWidth, clientHeight) { } }, { - id: 'expCol', + id: 'floorCol', rules: { - display: expDisplay + display: core.flags.enableFloor ? 'block': 'none' + } + }, + { + id: 'lvCol', + rules: { + display: core.flags.enableLv ? 'block': 'none' } }, { id: 'mdefCol', rules: { - display: mdefDisplay + display: core.flags.enableMDef ? 'block': 'none' + } + }, + { + id: 'moneyCol', + rules: { + display: core.flags.enableMoney ? 'block': 'none' + } + }, + { + id: 'expCol', + rules: { + display: core.flags.enableExperience ? 'block': 'none' + } + }, + { + id: 'upCol', + rules: { + display: core.flags.enableLevelUp ? 'block': 'none' + } + }, + { + 'id': 'debuffCol', + rules: { + display: core.flags.enableDebuff ? 'block': 'none' } }, { diff --git a/libs/data.js b/libs/data.js index fecc718c..ce9176a9 100644 --- a/libs/data.js +++ b/libs/data.js @@ -10,12 +10,13 @@ data.prototype.init = function() { "floorId": "sample0", // 初始楼层ID "hero": { // 勇士初始数据 "name": "阳光", // 勇士名;可以改成喜欢的 + 'lv': 1, // 初始等级,该项必须为正整数 "hp": 1000, // 初始生命值 "atk": 100, // 初始攻击 "def": 100, // 初始防御 "mdef": 100, // 初始魔防 "money": 100, // 初始金币 - "experience": 1000, // 初始经验 + "experience": 0, // 初始经验 "items": { // 初始道具个数 "keys": { "yellowKey": 0, @@ -57,10 +58,11 @@ data.prototype.init = function() { {"text": "防御+4", "effect": "status:def+=4"}, {"text": "魔防+10", "effect": "status:mdef+=10"} // effect只能对status和item进行操作,不能修改flag值。 - // 中间只能用+=符号(也就是只能增加某个属性或道具) + // 必须是X+=Y的形式,其中Y可以是一个表达式,以status:xxx或item:xxx为参数 // 其他effect样例: // "item:yellowKey+=1" 黄钥匙+1 // "item:pickaxe+=3" 破墙镐+3 + // "status:hp+=2*(status:atk+status:def)" 将生命提升攻防和的数值的两倍 ] }, "expShop1": { // 商店唯一ID @@ -80,6 +82,17 @@ data.prototype.init = function() { ] }, }, + "levelUp": [ // 经验升级所需要的数值,是一个数组 + {}, // 第一项为初始等级,可以简单留空,也可以写name + {"need": 20, "name": "第二级", "effect": "status:hp+=2*(status:atk+status:def);status:atk+=10;status:def+=10"}, // 先将生命提升攻防和的2倍;再将攻击+10,防御+10 + // 每一个里面可以含有三个参数 name, need, effect + // need为所需要的经验数值,是一个正整数。请确保need所需的依次递增 + // name为该等级的名称,也可以省略代表使用系统默认值;本项将显示在状态栏中 + // effect为本次升级所执行的操作,可由若干项组成,由分号分开; + // 其中每一项写法和上面的商店完全相同,同样必须是X+=Y的形式,Y是一个表达式,同样可以使用status:xxx或item:xxx代表勇士的某项数值/道具个数 + {"need": 40, "effect": "status:hp+=2*(status:atk+status:def);status:atk+=10;status:def+=10"}, + // 依次往下写需要的数值即可 + ] } // 各种数值;一些数值可以在这里设置 this.values = { @@ -118,9 +131,15 @@ data.prototype.init = function() { // 系统FLAG,在游戏运行中中请不要修改它。 this.flags = { /****** 角色状态相关 ******/ - "enableMDef": true, // 是否涉及勇士的魔防值;如果此项为false,则状态栏不会显示勇士的魔防值 - "enableExperience": true, // 是否涉及经验值;如果此项为false,则状态栏和怪物手册均将不会显示经验值 + "enableNegativeDamage": true, // 是否支持负伤害(回血) + "enableFloor": true, // 是否在状态栏显示当前楼层 + "enableLv": false, // 是否在状态栏显示当前等级 + "enableMDef": true, // 是否在状态栏及战斗界面显示魔防(护盾) + "enableMoney": true, // 是否在状态栏、怪物手册及战斗界面显示金币 + "enableExperience": true, // 是否在状态栏、怪物手册及战斗界面显示经验 + "enableLevelUp": false, // 是否允许等级提升(进阶);如果上面enableExperience为false,则此项恒视为false "enableDebuff": true, // 是否涉及毒衰咒;如果此项为false则不会在状态栏中显示毒衰咒的debuff + ////// 上述的几个开关将直接影响状态栏的显示效果 ////// /****** 道具相关 ******/ "flyNearStair": true, // 是否需要在楼梯边使用传送器 "pickaxeFourDirections": true, // 使用破墙镐是否四个方向都破坏;如果false则只破坏面前的墙壁 diff --git a/libs/enemys.js b/libs/enemys.js index 3b28b06e..05eba39b 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -131,7 +131,7 @@ enemys.prototype.getCritical = function (monsterId) { if (this.hasSpecial(monster.special, 3) || this.hasSpecial(monster.special, 10)) return "???"; var last = this.calDamage(core.status.hero.atk, core.status.hero.def, core.status.hero.mdef, monster.hp, monster.atk, monster.def, monster.special); - if (last == 0) return 0; + if (last <= 0) return 0; for (var i = core.status.hero.atk + 1; i <= monster.hp + monster.def; i++) { var damage = this.calDamage(i, core.status.hero.def, core.status.hero.mdef, @@ -147,9 +147,8 @@ enemys.prototype.getCritical = function (monsterId) { enemys.prototype.getCriticalDamage = function (monsterId) { var c = this.getCritical(monsterId); if (c == '???') return '???'; - if (c == 0) return 0; + if (c <= 0) return 0; var monster = core.material.enemys[monsterId]; - // if (c<=0) return 0; var last = this.calDamage(core.status.hero.atk, core.status.hero.def, core.status.hero.mdef, monster.hp, monster.atk, monster.def, monster.special); if (last == 999999999) return '???'; @@ -202,11 +201,7 @@ enemys.prototype.calDamage = function (hero_atk, hero_def, hero_mdef, mon_hp, mo var ans = damage + turn * per_damage + (turn + 1) * counterDamage; ans -= hero_mdef; - // 魔防回血 - // return ans; - - // 魔防不回血 - return ans <= 0 ? 0 : ans; + return core.flags.enableNegativeDamage?ans:Math.max(0, ans); } // 获得当前楼层的怪物列表 diff --git a/libs/events.js b/libs/events.js index 59ac6553..6ff86ca0 100644 --- a/libs/events.js +++ b/libs/events.js @@ -20,12 +20,11 @@ events.prototype.init = function () { callback(); }, 'changeFloor': function (data, core, callback) { - var heroLoc = null; - if (core.isset(data.event.data.loc)) { + var heroLoc = {}; + if (core.isset(data.event.data.loc)) heroLoc = {'x': data.event.data.loc[0], 'y': data.event.data.loc[1]}; - if (core.isset(data.event.data.direction)) - heroLoc.direction = data.event.data.direction; - } + if (core.isset(data.event.data.direction)) + heroLoc.direction = data.event.data.direction; core.changeFloor(data.event.data.floorId, data.event.data.stair, heroLoc, data.event.data.time, callback); }, @@ -66,14 +65,6 @@ events.prototype.startGame = function (hard) { core.hideStartAnimate(function() { core.drawText(core.clone(core.firstData.startText), function() { - - // 强制关闭战斗过程? - if (!core.flags.canOpenBattleAnimate) { - core.flags.showBattleAnimateConfirm=false; - core.flags.battleAnimate=false; - core.setLocalStorage('battleAnimate', false); - } - if (core.flags.showBattleAnimateConfirm) { // 是否提供“开启战斗动画”的选择项 core.status.event.selection = core.flags.battleAnimate ? 0 : 1; core.ui.drawConfirmBox("你想开启战斗动画吗?\n之后可以在菜单栏中开启或关闭。\n(强烈建议新手开启此项)", function () { diff --git a/libs/floors/sample1.js b/libs/floors/sample1.js index bc23f241..b28c41d1 100644 --- a/libs/floors/sample1.js +++ b/libs/floors/sample1.js @@ -4,7 +4,7 @@ main.floors.sample1 = { "floorId": "sample1", // 楼层唯一标识符,需要和名字完全一致 "title": "样板 1 层", // 楼层中文名 - "name": "样板1层", // 显示在状态栏中的层数 + "name": "1", // 显示在状态栏中的层数 "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "grass", // 默认地面的图块ID(terrains中) @@ -273,7 +273,7 @@ main.floors.sample1 = { }, "changeFloor": { // 楼层转换事件;该事件不能和上面的events有冲突(同位置点),否则会被覆盖 "4,12": {"floorId": "sample0", "loc": [6,0]}, // 由于楼下有多个上楼梯,所以需指定位置而不是简单地写"stair": "upFloor" - "5,5": {"floorId": "sample2", "stair": "downFloor"} + "5,5": {"floorId": "sample2", "stair": "downFloor", "direction": "up"} }, "afterBattle": { // 战斗后可能触发的事件列表 "9,6": [ // 初级卫兵1 diff --git a/libs/floors/sample2.js b/libs/floors/sample2.js index 4c569e37..32d227ff 100644 --- a/libs/floors/sample2.js +++ b/libs/floors/sample2.js @@ -4,7 +4,7 @@ main.floors.sample2 = { "floorId": "sample2", // 楼层唯一标识符,需要和名字完全一致 "title": "主塔 40 层", // 楼层中文名 - "name": "-40", // 显示在状态栏中的层数 + "name": "40", // 显示在状态栏中的层数 "canFlyTo": false, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "snowGround", // 默认地面的图块ID(terrains中) diff --git a/libs/ui.js b/libs/ui.js index 2911de16..62ef59e8 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -430,7 +430,10 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { var left=10, right=416-2*left; - var lines = core.flags.enableExperience?5:4; + // var lines = core.flags.enableExperience?5:4; + var lines = 3; + if (core.flags.enableMDef || core.flags.enableMoney || core.flags.enableExperience) lines=4; + if (core.flags.enableMoney && core.flags.enableExperience) lines=5; var lineHeight = 60; var height = lineHeight * lines + 50; @@ -515,7 +518,7 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { if (core.flags.enableMDef) { textTop += lineHeight; core.canvas.ui.textAlign='left'; - core.fillText('ui', "魔防", left_start, textTop, '#DDDDDD', '16px Verdana'); + core.fillText('ui', "护盾", left_start, textTop, '#DDDDDD', '16px Verdana'); core.drawLine('ui', left_start, textTop + 8, left_end, textTop + 8, '#FFFFFF', 2); core.canvas.data.textAlign='right'; core.fillText('data', hero_mdef, left_end, textTop+26, '#DDDDDD', 'bold 16px Verdana'); @@ -543,12 +546,14 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { core.canvas.ui.textAlign='left'; core.fillText('ui', mon_def, right_start, textTop+26, '#DDDDDD', 'bold 16px Verdana'); - textTop += lineHeight; - core.canvas.ui.textAlign='right'; - core.fillText('ui', "金币", right_end, textTop, '#DDDDDD', '16px Verdana'); - core.drawLine('ui', right_start, textTop + 8, right_end, textTop + 8, '#FFFFFF', 2); - core.canvas.ui.textAlign='left'; - core.fillText('ui', mon_money, right_start, textTop+26, '#DDDDDD', 'bold 16px Verdana'); + if (core.flags.enableMoney) { + textTop += lineHeight; + core.canvas.ui.textAlign = 'right'; + core.fillText('ui', "金币", right_end, textTop, '#DDDDDD', '16px Verdana'); + core.drawLine('ui', right_start, textTop + 8, right_end, textTop + 8, '#FFFFFF', 2); + core.canvas.ui.textAlign = 'left'; + core.fillText('ui', mon_money, right_start, textTop + 26, '#DDDDDD', 'bold 16px Verdana'); + } if (core.flags.enableExperience) { textTop += lineHeight; @@ -564,12 +569,6 @@ ui.prototype.drawBattleAnimate = function(monsterId, callback) { core.canvas.ui.textAlign='right'; core.fillText("ui", "S", right_start-8, 208+15, "#FFFFFF", "italic bold 40px Verdana"); -/* - core.drawLine('data', left + right - margin - boxWidth + 6, top+margin+boxWidth-6, - left+right-margin-6, top+margin+6, '#FF0000', 4); - core.drawLine('data', left + margin + 6, top+margin+heroHeight+(boxWidth-32)-6, - left+margin+boxWidth-6, top+margin+6, '#FF0000', 4); -*/ var battleInterval = setInterval(function() { core.playSound("attack", "ogg"); @@ -797,25 +796,34 @@ ui.prototype.drawEnemyBook = function (page) { core.fillText('ui', enemy.atk, 285, 62 * i + 32, '#DDDDDD', 'bold 13px Verdana'); core.fillText('ui', '防御', 335, 62 * i + 32, '#DDDDDD', '13px Verdana'); core.fillText('ui', enemy.def, 365, 62 * i + 32, '#DDDDDD', 'bold 13px Verdana'); - core.fillText('ui', '金币', 165, 62 * i + 50, '#DDDDDD', '13px Verdana'); - core.fillText('ui', enemy.money, 195, 62 * i + 50, '#DDDDDD', 'bold 13px Verdana'); - var damage_offset = 326; + var expOffset = 165; + if (core.flags.enableMoney) { + core.fillText('ui', '金币', 165, 62 * i + 50, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.money, 195, 62 * i + 50, '#DDDDDD', 'bold 13px Verdana'); + expOffset = 255; + } + if (core.flags.enableExperience) { core.canvas.ui.textAlign = "left"; - core.fillText('ui', '经验', 255, 62 * i + 50, '#DDDDDD', '13px Verdana'); - core.fillText('ui', enemy.experience, 285, 62 * i + 50, '#DDDDDD', 'bold 13px Verdana'); - damage_offset = 361; + core.fillText('ui', '经验', expOffset, 62 * i + 50, '#DDDDDD', '13px Verdana'); + core.fillText('ui', enemy.experience, expOffset + 30, 62 * i + 50, '#DDDDDD', 'bold 13px Verdana'); } + var damageOffet = 281; + if (core.flags.enableMoney && core.flags.enableExperience) + damageOffet = 361; + else if (core.flags.enableMoney || core.flags.enableExperience) + damageOffet = 326; + + core.canvas.ui.textAlign = "center"; var damage = enemy.damage; var color = '#FFFF00'; if (damage >= core.status.hero.hp) color = '#FF0000'; - if (damage == 0) color = '#00FF00'; + if (damage <= 0) color = '#00FF00'; if (damage >= 999999999) damage = '无法战斗'; - var length = core.canvas.ui.measureText(damage).width; - core.fillText('ui', damage, damage_offset, 62 * i + 50, color, 'bold 13px Verdana'); + core.fillText('ui', damage, damageOffet, 62 * i + 50, color, 'bold 13px Verdana'); core.canvas.ui.textAlign = "left"; diff --git a/main.js b/main.js index 8edd46bf..91194798 100644 --- a/main.js +++ b/main.js @@ -31,8 +31,13 @@ function main() { 'hardLevel': document.getElementById('hardLevel'), 'data': document.getElementById('data'), 'statusLabels': document.getElementsByClassName('statusLabel'), + 'floorCol': document.getElementById('floorCol'), + 'lvCol': document.getElementById('lvCol'), 'mdefCol': document.getElementById('mdefCol'), + 'moneyCol': document.getElementById('moneyCol'), 'expCol': document.getElementById('expCol'), + 'upCol': document.getElementById('upCol'), + 'debuffCol': document.getElementById('debuffCol'), 'hard': document.getElementById('hard'), }; this.loadList = [ @@ -49,12 +54,14 @@ function main() { this.statusBar = { 'image': { 'floor': document.getElementById('img-floor'), + 'lv': document.getElementById('img-lv'), 'hp': document.getElementById("img-hp"), 'atk': document.getElementById("img-atk"), 'def': document.getElementById("img-def"), 'mdef': document.getElementById("img-mdef"), 'money': document.getElementById("img-money"), 'experience': document.getElementById("img-experience"), + 'up': document.getElementById("img-up"), 'book': document.getElementById("img-book"), 'fly': document.getElementById("img-fly"), 'toolbox': document.getElementById("img-toolbox"), @@ -64,12 +71,14 @@ function main() { 'settings': document.getElementById("img-settings") }, 'floor': document.getElementById('floor'), + 'lv': document.getElementById('lv'), 'hp': document.getElementById('hp'), 'atk': document.getElementById('atk'), 'def': document.getElementById("def"), 'mdef': document.getElementById('mdef'), 'money': document.getElementById("money"), 'experience': document.getElementById("experience"), + 'up': document.getElementById('up'), 'yellowKey': document.getElementById("yellowKey"), 'blueKey': document.getElementById("blueKey"), 'redKey': document.getElementById("redKey"), diff --git a/styles.css b/styles.css index 2c5ebf9d..6523b3b8 100644 --- a/styles.css +++ b/styles.css @@ -180,8 +180,9 @@ } .status img{ vertical-align: middle; - width: 1.6em; - height: 1.6em; + width: auto; + height: 100%; + max-height: 1.6em; } #statusBar span{ color: white; diff --git a/更新说明.txt b/更新说明.txt index cd4e1ea0..af8b3f58 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -1,8 +1,10 @@ 全键盘操作 √ Ctrl快速跳过对话 √ +增加负伤 √ 支持不同层使用不同的地面素材 √ 支持多个Autotile同时存在 √ 直接内嵌了诸多默认的terrains素材 √ 自动定位到上次存/读档位置 √ 设置储存 √ 修改setFg的实现方法 √ +大范围领域伤害 \ No newline at end of file