分离了楼层文件之外的数据的注释

This commit is contained in:
YouWei Zhao 2018-01-06 22:25:19 +08:00
parent 62fbd21836
commit 9197a4d727
9 changed files with 533 additions and 101 deletions

View File

@ -1,15 +1,32 @@
(function(){
editor_file = {};
(function(){
var script = document.createElement('script');
script.src = 'comment.js';
if (window.location.href.indexOf('_server')!==-1)
script.src = '../project/comment.js';
else
script.src = 'project/comment.js';
document.body.appendChild(script);
script.onload = function () {
editor_file.comment=comment_c456ea59_6018_45ef_8bcc_211a24c627dc;
delete(comment_c456ea59_6018_45ef_8bcc_211a24c627dc);
}
})();
(function(){
var script = document.createElement('script');
if (window.location.href.indexOf('_server')!==-1)
script.src = '../project/data.comment.js';
else
script.src = 'project/data.comment.js';
document.body.appendChild(script);
script.onload = function () {
editor_file.dataComment=data_comment_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d;
delete(data_comment_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d);
}
})();
editor_file.getFloorFileList = function(editor,callback){
if (!isset(callback)) throw('未设置callback');
@ -38,24 +55,24 @@
return;
}
editor.currentFloorId = floorId;
editor.currentfloorData = floorData;
editor.currentFloorData = floorData;
callback(null)
});
}
//callback(err:String)
editor_file.saveFloorFile = function(editor,callback){
if (!isset(callback)) throw('未设置callback');
if (!isset(editor.currentFloorId) || !isset(editor.currentfloorData)) {
if (!isset(editor.currentFloorId) || !isset(editor.currentFloorData)) {
callback('未选中文件或无数据');
}
var filename = 'project/floors/' + editor.currentFloorId + '.js';
var datastr = ['main.floors.' , editor.currentFloorId , '=\n{'];
for(var ii in editor.currentfloorData)
if (editor.currentfloorData.hasOwnProperty(ii)) {
for(var ii in editor.currentFloorData)
if (editor.currentFloorData.hasOwnProperty(ii)) {
if (ii=='map')
datastr=datastr.concat(['\n"',ii,'": [\n',formatMap(editor.currentfloorData[ii]),'\n],']);
datastr=datastr.concat(['\n"',ii,'": [\n',formatMap(editor.currentFloorData[ii]),'\n],']);
else
datastr=datastr.concat(['\n"',ii,'": ',JSON.stringify(editor.currentfloorData[ii],null,4),',']);
datastr=datastr.concat(['\n"',ii,'": ',JSON.stringify(editor.currentFloorData[ii],null,4),',']);
}
datastr=datastr.concat(['\n}']);
datastr=datastr.join('');
@ -67,10 +84,10 @@
editor_file.saveFloorFileAs = function(editor,saveAsFilename,callback){
//saveAsFilename不含'/'不含'.js'
if (!isset(callback)) throw('未设置callback');
if (!isset(editor.currentfloorData)) {
if (!isset(editor.currentFloorData)) {
callback('无数据');
}
editor.currentfloorData.floorId=saveAsFilename;
editor.currentFloorData.floorId=saveAsFilename;
editor.currentFloorId=saveAsFilename;
editor_file.saveFloorFile(editor,callback);
}
@ -138,23 +155,53 @@
[]时只查询不修改
*/
if (!isset(callback)) throw('未设置callback');
callback([
{'items':{'cls': 'items', 'name': '红宝石'},'itemEffect':'core.status.hero.atk += core.values.redJewel','itemEffectTip':"',攻击+'+core.values.redJewel"},
editor_file.comment.items,
null]);
//只有items.cls是items的才有itemEffect和itemEffectTip,keys和constants和tools只有items
if (isset(actionList) && actionList.length > 0){
actionList.forEach(function (value) {
var tempindex = value[1].indexOf(']')+1;
value[1] = [value[1].slice(0,tempindex),"['"+id+"']",value[1].slice(tempindex)].join('');
});
saveSetting('items',actionList,function (err) {
callback([
{'items':editor.core.items.items[id],'itemEffect':editor.core.items.itemEffect[id],'itemEffectTip':editor.core.items.itemEffectTip[id]},
editor_file.comment.items,
err]);
});
} else {
callback([
{'items':editor.core.items.items[id],'itemEffect':editor.core.items.itemEffect[id],'itemEffectTip':editor.core.items.itemEffectTip[id]},
editor_file.comment.items,
null]);
}
//只有items.cls是items的才有itemEffect和itemEffectTip,keys和constants和tools只有items
}
//callback(obj,commentObj,err:String)
//callback([obj,commentObj,err:String])
editor_file.editEnemy = function(editor,id,actionList,callback){
//obj形式同callback的obj,为null或undefined时只查询不修改
/*actionList:[
["change","['name']","初级巫师的新名字"],
["add","['新的和name同级的属性']",123],
["change","['bomb']",null],
]
[]时只查询不修改
*/
if (!isset(callback)) throw('未设置callback');
callback([
{'name': '初级巫师', 'hp': 100, 'atk': 120, 'def': 0, 'money': 16, 'experience': 0, 'special': 15, 'value': 100, "bomb": false},
editor_file.comment.enemys,
null]);
if (isset(actionList) && actionList.length > 0){
actionList.forEach(function (value) {
value[1] = "['"+id+"']"+value[1];
});
saveSetting('enemys',actionList,function (err) {
callback([
editor.core.enemys.enemys[id],
editor_file.comment.enemys,
err]);
});
} else {
callback([
editor.core.enemys.enemys[id],
editor_file.comment.enemys,
null]);
}
}
//callback(obj,commentObj,err:String)
//callback([obj,commentObj,err:String])
////////////////////////////////////////////////////////////////////
@ -241,7 +288,7 @@
$range((function(){typeof(thiseval)==typeof(0)||})())
if( 注释.indexof('$range(')!= -1){
thiseval = 新值;
var thiseval = 新值;
evalstr = 注释.split('$range')[1].split('$end')[0];
if(eval(evalstr) !== true)alert('不在取值范围内')
}

View File

@ -30,8 +30,8 @@
<table class="col" id='mapColMark'></table>
<table class="row" id='mapRowMark'></table>
<div class="map" id="mapEdit">
<canvas class='gameCanvas' id='bg' width='416' height='416' style='z-index:1'></canvas>
<canvas class='gameCanvas' id='event' width='416' height='416' style='z-index:2'></canvas>
<canvas class='gameCanvas' id='bg' width='416' height='416'></canvas>
<canvas class='gameCanvas' id='event' width='416' height='416'></canvas>
<canvas class='egameCanvas' id='eui' width='416' height='416' style='z-index:100'></canvas>
</div>
<div class="tools">
@ -167,8 +167,8 @@
<p class="statusLabel tools" id="hard"></p>
</div>
<div id="curtain"></div>
<!-- <canvas class='gameCanvas' id='bg' width='416' height='416'></canvas>
<canvas class='gameCanvas' id='event' width='416' height='416'></canvas> -->
<!-- <canvas class='gameCanvas' id='bg' width='416' height='416'></canvas> -->
<!-- <canvas class='gameCanvas' id='event' width='416' height='416'></canvas> -->
<canvas class='gameCanvas' id='fg' width='416' height='416'></canvas>
<canvas class='gameCanvas' id='hero' width='416' height='416'></canvas>
<canvas class='gameCanvas' id='ui' width='416' height='416'></canvas>
@ -206,7 +206,7 @@
<script>
//所有全局量
__all__=['Vue','fs','printf','editor','main','core'];
__all__=['Vue','fs','editor_file','printf','editor','main','core'];
__id__=['printOut','arrRowMark','mapRowMark','data','bg','dataSelection'];
__Vue__=['exportM','editArea','editTip','clear','tip','selectBox'];
//var event = document.getElementById('event');
@ -695,6 +695,8 @@ editor.changeFloor = function(floorId,callback) {
var mapArray = core.maps.getMapArray(core.status.maps, core.status.floorId);
editor.map = mapArray.map(function(v){return v.map(function(v){return editor.ids[[editor.indexs[v][0]]]})});
editor.updateMap();
editor.currentFloorId=core.status.floorId;
editor.currentFloorData = core.floors[core.status.floorId];
if (core.isset(callback))callback();
});
}
@ -709,6 +711,8 @@ var afterMainInit = function(){
var mapArray = core.maps.getMapArray(core.status.maps, core.status.floorId);
editor.map = mapArray.map(function(v){return v.map(function(v){return editor.ids[[editor.indexs[v][0]]]})});
editor.updateMap();
editor.currentFloorId=core.status.floorId;
editor.currentFloorData = core.floors[core.status.floorId];
});

View File

@ -2,7 +2,7 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
{
"items" : {
'items':{
'cls': "只能取keys items constants tools\n$range(thiseval in ['keys','items','constants','tools'])$end",
'cls': "只能取keys(钥匙) items(宝石、血瓶) constants(物品) tools(道具)\n$range(thiseval in ['keys','items','constants','tools'])$end",
'name': '名称',
'text': '道具在道具栏中显示的描述'
},
@ -16,7 +16,7 @@ comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
'def': '防御力',
'money': '金币',
'experience': '经验',
'special': '特殊属性\n1:先攻,2:魔攻,3:坚固,4:2连击,5:3连击,6:n连击,7:破甲,8:反击,9:净化,10:模仿,11:吸血,12:中毒,13:衰弱,14:诅咒,15:领域,16:夹击,17:仇恨,18:阻击,19:自爆,20:无敌\n多个属性例如用[1,4,11]表示先攻2连击吸血\n模仿怪的攻防设为0就好\n',
'special': '特殊属性\n1:先攻,2:魔攻,3:坚固,4:2连击,5:3连击,6:n连击,7:破甲,8:反击,9:净化,10:模仿,11:吸血,12:中毒,13:衰弱,14:诅咒,15:领域,16:夹击,17:仇恨,18:阻击,19:自爆,20:无敌\n多个属性例如用[1,4,11]表示先攻2连击吸血\n模仿怪的攻防设为0就好\n$leaf(true)$end',
'value': '特殊属性的数值\n领域怪需要加value表示领域伤害的数值\n吸血怪需要在后面添加value代表吸血比例',
'zoneSquare': '领域怪zoneSquare代表是否九宫格伤害',
'range': 'range可选代表领域伤害的范围不加默认为1\n$range(thiseval==~~thiseval &&thiseval>0)$end',

165
project/data.comment.js Normal file
View File

@ -0,0 +1,165 @@
data_comment_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
{
"main": {
"useCompress": " 是否使用压缩文件 \n 当你即将发布你的塔时请使用“JS代码压缩工具”将所有js代码进行压缩然后将这里的useCompress改为true。 \n 请注意只有useCompress是false时才会读取floors目录下的文件为true时会直接读取libs目录下的floors.min.js文件。 \n 如果要进行剧本的修改请务必将其改成false。 ",
"floorIds": " 在这里按顺序放所有的楼层;其顺序直接影响到楼层传送器的顺序和上楼器/下楼器的顺序 \n$leaf(true)$end",
"pngs": " 在此存放所有可能的背景图片背景图片最好是416*416像素其他分辨率会被强制缩放成416*416 \n 建议对于较大的图片,在网上使用在线的“图片压缩工具”来进行压缩,以节省流量 \n 有关使用自定义背景图,请参见文档的“自定义素材”说明 \n\n 依次向后添加 \n$leaf(true)$end",
"bgms": " 在此存放所有的bgm和文件名一致。第一项为默认播放项 \n 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好 \n$leaf(true)$end",
"sounds": " 在此存放所有的SE和文件名一致 \n 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好 \n$leaf(true)$end"
},
"firstData": {
"title": " 游戏名,将显示在标题页面以及切换楼层的界面中 ",
"name": " 游戏的唯一英文标识符。由英文、数字、下划线组成不能超过20个字符。 ",
"version": " 当前游戏版本;版本不一致的存档不能通用。 ",
"floorId": " 初始楼层ID ",
"hero": {
"name": " 勇士初始数据 \n 勇士名;可以改成喜欢的 ",
"lv": " 初始等级,该项必须为正整数 ",
"hp": " 初始生命值 ",
"atk": " 初始攻击 ",
"def": " 初始防御 ",
"mdef": " 初始魔防 ",
"money": " 初始金币 ",
"experience": " 初始经验 ",
"items": {
"keys": {
"yellowKey": " 初始道具个数 ",
"blueKey": "",
"redKey": ""
},
"constants": "\n$leaf(true)$end",
"tools": "\n$leaf(true)$end"
},
"flyRange": " 初始可飞的楼层;一般留空数组即可 \n$leaf(true)$end",
"loc": {
"direction": " 勇士初始位置 ",
"x": "",
"y": ""
},
"flags": {
"poison": " 游戏过程中的变量或flags \n 毒 ",
"weak": " 衰 ",
"curse": " 咒 "
}
},
"startText": " 游戏开始前剧情。如果无剧情直接留一个空数组即可。 \n$leaf(true)$end",
"shops": {
"moneyShop1": {
"name": " 定义全局商店(即快捷商店) \n 商店唯一ID \n 商店名称(标题) ",
"icon": " 商店图标blueShop为蓝色商店pinkShop为粉色商店 ",
"textInList": " 在快捷商店栏中显示的名称 ",
"use": " 商店所要使用的。只能是\"money\"或\"experience\"。 ",
"need": " 商店需要的金币/经验数值可以是一个表达式以times作为参数计算。 \n 这里用到的times为该商店的已经的访问次数。首次访问该商店时times的值为0。 \n 上面的例子是50层商店的计算公式。你也可以写任意其他的计算公式只要以times作为参数即可。 \n 例如: \"need\": \"25\" 就是恒定需要25金币的商店 \"need\": \"20+2*times\" 就是第一次访问要20金币以后每次递增2金币的商店。 \n 如果是对于每个选项有不同的计算公式,写 \"need\": \"-1\" 即可。可参见下面的经验商店。 ",
"text": " 显示的文字,需手动加换行符。可以使用${need}表示上面的need值。 ",
"choices": [
{
"text": "",
"effect": " 商店的选项 \n 如果有多个effect以分号分开参见下面的经验商店 "
},
{
"text": "",
"effect": ""
},
{
"text": "",
"effect": ""
},
{
"text": "",
"effect": " effect只能对status和item进行操作不能修改flag值。 \n 必须是X+=Y的形式其中Y可以是一个表达式以status:xxx或item:xxx为参数 \n 其他effect样例 \n \"item:yellowKey+=1\" 黄钥匙+1 \n \"item:pickaxe+=3\" 破墙镐+3 \n \"status:hp+=2*(status:atk+status:def)\" 将生命提升攻防和的数值的两倍 "
}
]
},
"expShop1": {
"name": " 商店唯一ID ",
"icon": "",
"textInList": "",
"use": " 该商店使用的是经验进行计算 ",
"need": " 如果是对于每个选项所需要的数值不同,这里直接写-1然后下面选项里给定具体数值 ",
"text": "",
"choices": [
{
"text": "",
"need": "",
"effect": " 在choices中写need可以针对每个选项都有不同的需求。 \n 这里的need同样可以以times作为参数比如 \"need\": \"100+20*times\" 多个effect直接以分号分开即可。如上面的意思是生命+1000攻击+7防御+7。 "
},
{
"text": "",
"need": "",
"effect": ""
},
{
"text": "",
"need": "",
"effect": ""
}
]
}
},
"levelUp": [
" 经验升级所需要的数值,是一个数组 \n 第一项为初始等级可以简单留空也可以写name \n 每一个里面可以含有三个参数 need, name, effect \n need为所需要的经验数值是一个正整数。请确保need所需的依次递增 \n name为该等级的名称也可以省略代表使用系统默认值本项将显示在状态栏中 \n effect为本次升级所执行的操作可由若干项组成由分号分开 \n 其中每一项写法和上面的商店完全相同同样必须是X+=Y的形式Y是一个表达式同样可以使用status:xxx或item:xxx代表勇士的某项数值/道具个数 \n$leaf(true)$end",
{
"need": "",
"name": "",
"effect": " 先将生命提升攻防和的2倍再将攻击+10防御+10 "
},
{
"need": "",
"effect": " effect也允许写一个function代表本次升级将会执行的操作 \n 依次往下写需要的数值即可 "
}
]
},
"values": {
"HPMAX": " 各种数值;一些数值可以在这里设置 /****** 角色相关 ******/ \n HP上限-1则无上限 ",
"lavaDamage": " 经过血网受到的伤害 ",
"poisonDamage": " 中毒后每步受到的伤害 ",
"weakValue": " 衰弱状态下攻防减少的数值 ",
"redJewel": " /****** 道具相关 ******/ \n 红宝石加攻击的数值 ",
"blueJewel": " 蓝宝石加防御的数值 ",
"greenJewel": " 绿宝石加魔防的数值 ",
"redPotion": " 红血瓶加血数值 ",
"bluePotion": " 蓝血瓶加血数值 ",
"yellowPotion": " 黄血瓶加血数值 ",
"greenPotion": " 绿血瓶加血数值 ",
"sword1": " 铁剑加攻数值 ",
"shield1": " 铁盾加防数值 ",
"sword2": " 银剑加攻数值 ",
"shield2": " 银盾加防数值 ",
"sword3": " 骑士剑加攻数值 ",
"shield3": " 骑士盾加防数值 ",
"sword4": " 圣剑加攻数值 ",
"shield4": " 圣盾加防数值 ",
"sword5": " 神圣剑加攻数值 ",
"shield5": " 神圣盾加防数值 ",
"moneyPocket": " 金钱袋加金币的数值 ",
"breakArmor": " /****** 怪物相关 ******/ \n 破甲的比例战斗前怪物附加角色防御的x%作为伤害) ",
"counterAttack": " 反击的比例战斗时怪物每回合附加角色攻击的x%作为伤害,无视角色防御) ",
"purify": " 净化的比例战斗前怪物附加勇士魔防的x倍作为伤害 ",
"hatred": " 仇恨属性中,每杀死一个怪物获得的仇恨值 ",
"animateSpeed": " /****** 系统相关 ******/ \n 动画时间 "
},
"flags": {
"enableFloor": " 系统FLAG在游戏运行中中请不要修改它。 /****** 状态栏相关 ******/ \n 是否在状态栏显示当前楼层 ",
"enableLv": " 是否在状态栏显示当前等级 ",
"enableMDef": " 是否在状态栏及战斗界面显示魔防(护盾) ",
"enableMoney": " 是否在状态栏、怪物手册及战斗界面显示金币 ",
"enableExperience": " 是否在状态栏、怪物手册及战斗界面显示经验 ",
"enableLevelUp": " 是否允许等级提升进阶如果上面enableExperience为false则此项恒视为false ",
"enableDebuff": " 是否涉及毒衰咒如果此项为false则不会在状态栏中显示毒衰咒的debuff ////// 上述的几个开关将直接影响状态栏的显示效果 ////// ",
"flyNearStair": " /****** 道具相关 ******/ \n 是否需要在楼梯边使用传送器 ",
"pickaxeFourDirections": " 使用破墙镐是否四个方向都破坏如果false则只破坏面前的墙壁 ",
"bombFourDirections": " 使用炸弹是否四个方向都会炸如果false则只炸面前的怪物即和圣锤等价 ",
"bigKeyIsBox": " 如果此项为true则视为钥匙盒红黄蓝钥匙+1若为false则视为大黄门钥匙 ",
"enableNegativeDamage": " /****** 怪物相关 ******/ \n 是否支持负伤害(回血) ",
"zoneSquare": " 领域类型。如果此项为true则为九宫格伤害为false则为十字伤害 ",
"startDirectly": " /****** 系统相关 ******/ \n 点击“开始游戏”后是否立刻开始游戏而不显示难度选择界面 ",
"canOpenBattleAnimate": " 是否允许用户开启战斗过程如果此项为false则下面两项均强制视为false ",
"showBattleAnimateConfirm": " 是否在游戏开始时提供“是否开启战斗动画”的选项 ",
"battleAnimate": " 是否默认显示战斗动画;用户可以手动在菜单栏中开关 ",
"displayEnemyDamage": " 是否地图怪物显伤;用户可以手动在菜单栏中开关 ",
"displayExtraDamage": " 是否地图高级显伤(领域、夹击等);用户可以手动在菜单栏中开关 ",
"enableGentleClick": " 是否允许轻触(获得面前物品) ",
"portalWithoutTrigger": " 经过楼梯、传送门时是否能“穿透”。穿透的意思是,自动寻路得到的的路径中间经过了楼梯,行走时是否触发楼层转换事件 ",
"potionWhileRouting": " 寻路算法是否经过血瓶如果该项为false则寻路算法会自动尽量绕过血瓶 "
}
}

View File

@ -6,21 +6,24 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
// 请注意只有useCompress是false时才会读取floors目录下的文件为true时会直接读取libs目录下的floors.min.js文件。
// 如果要进行剧本的修改请务必将其改成false。
"floorIds" : [ // 在这里按顺序放所有的楼层;其顺序直接影响到楼层传送器的顺序和上楼器/下楼器的顺序
"floorIds" : [
"sample0", "sample1", "sample2"
],
"pngs" : [ // 在此存放所有可能的背景图片背景图片最好是416*416像素其他分辨率会被强制缩放成416*416
],// 在这里按顺序放所有的楼层;其顺序直接影响到楼层传送器的顺序和上楼器/下楼器的顺序
"pngs" : [
"bg.png", "yewai.png", // 在此存放所有可能的背景图片背景图片最好是416*416像素其他分辨率会被强制缩放成416*416
// 建议对于较大的图片,在网上使用在线的“图片压缩工具”来进行压缩,以节省流量
// 有关使用自定义背景图,请参见文档的“自定义素材”说明
"bg.png", "yewai.png", // 依次向后添加
// 依次向后添加
],
"bgms" : [ // 在此存放所有的bgm和文件名一致。第一项为默认播放项
// 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
"bgms" : [
'058-Slow01.mid', 'bgm.mp3', 'qianjin.mid', 'star.mid',
],
"sounds" : [ // 在此存放所有的SE和文件名一致
// 在此存放所有的bgm和文件名一致。第一项为默认播放项
// 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
],
"sounds" : [
'floor.mp3', 'attack.ogg', 'door.ogg', 'item.ogg',
// 在此存放所有的SE和文件名一致
// 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
],
},
"firstData" : {
@ -28,8 +31,9 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"name": "template", // 游戏的唯一英文标识符。由英文、数字、下划线组成不能超过20个字符。
"version": "Ver 1.0.0 (Beta)", // 当前游戏版本;版本不一致的存档不能通用。
"floorId": "sample0", // 初始楼层ID
"hero": { // 勇士初始数据
"name": "阳光", // 勇士名;可以改成喜欢的
"hero": {
"name": "阳光", // 勇士初始数据
// 勇士名;可以改成喜欢的
'lv': 1, // 初始等级,该项必须为正整数
"hp": 1000, // 初始生命值
"atk": 100, // 初始攻击
@ -37,7 +41,7 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"mdef": 100, // 初始魔防
"money": 100, // 初始金币
"experience": 0, // 初始经验
"items": { // 初始道具个数
"items": {
"keys": {
"yellowKey": 0,
"blueKey": 0,
@ -45,23 +49,26 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
},
"constants": {},
"tools": {}
},
},// 初始道具个数
"flyRange": [], // 初始可飞的楼层;一般留空数组即可
"loc": {"direction": "up", "x": 6, "y": 10}, // 勇士初始位置
"flags": { // 游戏过程中的变量或flags
"poison": false, // 毒
"flags": {
"poison": false, // 游戏过程中的变量或flags
// 毒
"weak": false, // 衰
"curse": false, // 咒
}
},
"startText": [ // 游戏开始前剧情。如果无剧情直接留一个空数组即可。
"startText": [
"Hi欢迎来到 HTML5 魔塔样板!\n\n本样板由艾之葵制作可以让你在不会写任何代码\n的情况下也能做出属于自己的H5魔塔",
"这里游戏开始时的剧情。\n定义在data.js的startText处。\n\n你可以在这里写上自己的内容。",
"赶快来试一试吧!"
],
"shops": { // 定义全局商店(即快捷商店)
"moneyShop1": { // 商店唯一ID
"name": "贪婪之神", // 商店名称(标题)
], // 游戏开始前剧情。如果无剧情直接留一个空数组即可。
"shops": {
"moneyShop1": {
"name": "贪婪之神", // 定义全局商店(即快捷商店)
// 商店唯一ID
// 商店名称(标题)
"icon": "blueShop", // 商店图标blueShop为蓝色商店pinkShop为粉色商店
"textInList": "1F金币商店", // 在快捷商店栏中显示的名称
"use": "money", // 商店所要使用的。只能是"money"或"experience"。
@ -71,8 +78,8 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
// 例如: "need": "25" 就是恒定需要25金币的商店 "need": "20+2*times" 就是第一次访问要20金币以后每次递增2金币的商店。
// 如果是对于每个选项有不同的计算公式,写 "need": "-1" 即可。可参见下面的经验商店。
"text": "勇敢的武士啊,给我${need}金币就可以:", // 显示的文字,需手动加换行符。可以使用${need}表示上面的need值。
"choices": [ // 商店的选项
{"text": "生命+800", "effect": "status:hp+=800"},
"choices": [
{"text": "生命+800", "effect": "status:hp+=800"}, // 商店的选项
// 如果有多个effect以分号分开参见下面的经验商店
{"text": "攻击+4", "effect": "status:atk+=4"},
{"text": "防御+4", "effect": "status:def+=4"},
@ -85,25 +92,27 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
// "status:hp+=2*(status:atk+status:def)" 将生命提升攻防和的数值的两倍
]
},
"expShop1": { // 商店唯一ID
"name": "经验之神",
"expShop1": {
"name": "经验之神", // 商店唯一ID
"icon": "pinkShop",
"textInList": "1F经验商店",
"use": "experience", // 该商店使用的是经验进行计算
"need": "-1", // 如果是对于每个选项所需要的数值不同,这里直接写-1然后下面选项里给定具体数值
"text": "勇敢的武士啊,给我若干经验就可以:",
"choices": [
{"text": "等级+1", "need": "100", "effect": "status:lv+=1;status:hp+=1000;status:atk+=7;status:def+=7"},
// 在choices中写need可以针对每个选项都有不同的需求。
// 这里的need同样可以以times作为参数比如 "need": "100+20*times"
{"text": "等级+1", "need": "100", "effect": "status:lv+=1;status:hp+=1000;status:atk+=7;status:def+=7"},
// 多个effect直接以分号分开即可。如上面的意思是生命+1000攻击+7防御+7。
{"text": "攻击+5", "need": "30", "effect": "status:atk+=5"},
{"text": "防御+5", "need": "30", "effect": "status:def+=5"},
]
},
},
"levelUp": [ // 经验升级所需要的数值,是一个数组
{}, // 第一项为初始等级可以简单留空也可以写name
"levelUp": [
{}, // 经验升级所需要的数值,是一个数组
// 第一项为初始等级可以简单留空也可以写name
// 每一个里面可以含有三个参数 need, name, effect
// need为所需要的经验数值是一个正整数。请确保need所需的依次递增
@ -112,26 +121,29 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
// 其中每一项写法和上面的商店完全相同同样必须是X+=Y的形式Y是一个表达式同样可以使用status:xxx或item:xxx代表勇士的某项数值/道具个数
{"need": 20, "name": "第二级", "effect": "status:hp+=2*(status:atk+status:def);status:atk+=10;status:def+=10"}, // 先将生命提升攻防和的2倍再将攻击+10防御+10
// effect也允许写一个function代表本次升级将会执行的操作
{"need": 40, "effect": function () {
{"need": 40, "effect": `function () {
core.drawText("恭喜升级!");
core.status.hero.hp *= 2;
core.status.hero.atk += 100;
core.status.hero.def += 100;
}},
}`}, // effect也允许写一个function代表本次升级将会执行的操作
// 依次往下写需要的数值即可
]
},
// 各种数值;一些数值可以在这里设置
"values" : {
"HPMAX": 999999, // 各种数值;一些数值可以在这里设置
/****** 角色相关 ******/
"HPMAX": 999999, // HP上限-1则无上限
// HP上限-1则无上限
"lavaDamage": 100, // 经过血网受到的伤害
"poisonDamage": 10, // 中毒后每步受到的伤害
"weakValue": 20, // 衰弱状态下攻防减少的数值
/****** 道具相关 ******/
"redJewel": 3, // 红宝石加攻击的数值
"redJewel": 3, /****** 道具相关 ******/
// 红宝石加攻击的数值
"blueJewel": 3, // 蓝宝石加防御的数值
"greenJewel": 5, // 绿宝石加魔防的数值
"redPotion": 100, // 红血瓶加血数值
@ -149,18 +161,22 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"sword5": 160, // 神圣剑加攻数值
"shield5": 160, // 神圣盾加防数值
"moneyPocket": 500, // 金钱袋加金币的数值
/****** 怪物相关 ******/
'breakArmor': 0.9, // 破甲的比例战斗前怪物附加角色防御的x%作为伤害)
'breakArmor': 0.9, /****** 怪物相关 ******/
// 破甲的比例战斗前怪物附加角色防御的x%作为伤害)
'counterAttack': 0.1, // 反击的比例战斗时怪物每回合附加角色攻击的x%作为伤害,无视角色防御)
'purify': 3, // 净化的比例战斗前怪物附加勇士魔防的x倍作为伤害
'hatred': 2, // 仇恨属性中,每杀死一个怪物获得的仇恨值
/****** 系统相关 ******/
'animateSpeed': 500, // 动画时间
'animateSpeed': 500, /****** 系统相关 ******/
// 动画时间
},
// 系统FLAG在游戏运行中中请不要修改它。
"flags" : {
"enableFloor": true, // 系统FLAG在游戏运行中中请不要修改它。
/****** 状态栏相关 ******/
"enableFloor": true, // 是否在状态栏显示当前楼层
// 是否在状态栏显示当前楼层
"enableLv": true, // 是否在状态栏显示当前等级
"enableMDef": true, // 是否在状态栏及战斗界面显示魔防(护盾)
"enableMoney": true, // 是否在状态栏、怪物手册及战斗界面显示金币
@ -168,16 +184,19 @@ data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"enableLevelUp": true, // 是否允许等级提升进阶如果上面enableExperience为false则此项恒视为false
"enableDebuff": true, // 是否涉及毒衰咒如果此项为false则不会在状态栏中显示毒衰咒的debuff
////// 上述的几个开关将直接影响状态栏的显示效果 //////
/****** 道具相关 ******/
"flyNearStair": true, // 是否需要在楼梯边使用传送器
"flyNearStair": true, /****** 道具相关 ******/
// 是否需要在楼梯边使用传送器
"pickaxeFourDirections": true, // 使用破墙镐是否四个方向都破坏如果false则只破坏面前的墙壁
"bombFourDirections": true, // 使用炸弹是否四个方向都会炸如果false则只炸面前的怪物即和圣锤等价
"bigKeyIsBox": false, // 如果此项为true则视为钥匙盒红黄蓝钥匙+1若为false则视为大黄门钥匙
/****** 怪物相关 ******/
"enableNegativeDamage": true, // 是否支持负伤害(回血)
"enableNegativeDamage": true, /****** 怪物相关 ******/
// 是否支持负伤害(回血)
"zoneSquare": false, // 领域类型。如果此项为true则为九宫格伤害为false则为十字伤害
/****** 系统相关 ******/
"startDirectly": false, // 点击“开始游戏”后是否立刻开始游戏而不显示难度选择界面
"startDirectly": false, /****** 系统相关 ******/
// 点击“开始游戏”后是否立刻开始游戏而不显示难度选择界面
"canOpenBattleAnimate": true, // 是否允许用户开启战斗过程如果此项为false则下面两项均强制视为false
"showBattleAnimateConfirm": true, // 是否在游戏开始时提供“是否开启战斗动画”的选项
"battleAnimate": true, // 是否默认显示战斗动画;用户可以手动在菜单栏中开关

View File

@ -257,7 +257,7 @@ main.floors.sample1 = {
"12,11": [ // 自定义事件的老人
"\t[老人,womanMagician]使用 {\"type\":\"function\"} 可以写自定义的JS脚本。\n本塔支持的所有主要API会在doc文档内给出。",
"\t[老人,womanMagician]例如这个例子:即将弹出一个输入窗口,然后会将你的输入结果直接加到你的攻击力上。",
{"type": "function", "function": function() { // 自己写JS脚本并执行
{"type": "function", "function": `function() { // 自己写JS脚本并执行
var value = prompt("请输入你要加攻击力的数值:"); // 弹出一个输入框让用户输入数据
if (value!=null) {
value=parseInt(value);
@ -271,7 +271,7 @@ main.floors.sample1 = {
]);
}
}
}},
}`},
"\t[老人,womanMagician]具体可参见样板中本事件的写法。"
]
},

View File

@ -2,12 +2,12 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
{
"items" : {
// 钥匙
'yellowKey': {'cls': 'keys', 'name': '黄钥匙'},
'blueKey': {'cls': 'keys', 'name': '蓝钥匙'},
'redKey': {'cls': 'keys', 'name': '红钥匙'},
// 宝石、血瓶
'redJewel': {'cls': 'items', 'name': '红宝石'},
'blueJewel': {'cls': 'items', 'name': '蓝宝石'},
'greenJewel': {'cls': 'items', 'name': '绿宝石'},
@ -29,7 +29,7 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
'superPotion': {'cls': 'items', 'name': '圣水'},
'moneyPocket': {'cls': 'items', 'name': '金钱袋'},
// 物品
'book': {'cls': 'constants', 'name': '怪物手册', 'text': '可以查看当前楼层各怪物属性'},
'fly': {'cls': 'constants', 'name': '楼层传送器', 'text': '可以自由往来去过的楼层'},
'coin': {'cls': 'constants', 'name': '幸运金币', 'text': '持有时打败怪物可得双倍金币'},
@ -38,7 +38,7 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
'knife': {'cls': 'constants', 'name': '屠龙匕首', 'text': '该道具尚未被定义'},
'shoes': {'cls': 'constants', 'name': '绿鞋', 'text': '持有时无视负面地形'},
// 道具
'bigKey': {'cls': 'tools', 'name': '大黄门钥匙', 'text': '可以开启当前层所有黄门'},
'greenKey': {'cls': 'tools', 'name': '绿钥匙', 'text': '可以打开一扇绿门'},
'steelKey': {'cls': 'tools', 'name': '铁门钥匙', 'text': '可以打开一扇铁门'},
@ -63,8 +63,9 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"redJewel":"core.status.hero.atk += core.values.redJewel",
"blueJewel":"core.status.hero.def += core.values.blueJewel",
"greenJewel":"core.status.hero.mdef += core.values.greenJewel",
// 黄宝石属性:需自己定义
"yellowJewel":"core.status.hero.hp+=1000;core.status.hero.atk+=6;core.status.hero.def+=6;core.status.hero.mdef+=10;",
// 黄宝石属性:需自己定义
"redPotion":"core.status.hero.hp += core.values.redPotion",
"bluePotion":"core.status.hero.hp += core.values.bluePotion",
"yellowPotion":"core.status.hero.hp += core.values.yellowPotion",
@ -79,8 +80,9 @@ items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"shield3":"core.status.hero.def += core.values.shield3",
"shield4":"core.status.hero.def += core.values.shield4",
"shield5":"core.status.hero.def += core.values.shield5",
// 只有是钥匙盒才会执行这一步
"bigKey":"core.status.hero.items.keys.yellowKey++;core.status.hero.items.keys.blueKey++;core.status.hero.items.keys.redKey++;",
// 只有是钥匙盒才会执行这一步
"superPotion":"core.status.hero.hp *= 2",
"moneyPocket":"core.status.hero.money += core.values.moneyPocket",
},

193
project/maps.comment.js Normal file
View File

@ -0,0 +1,193 @@
maps_comment_90f36752_8815_4be8_b32b_d7fad1d0542e =
{
////////////////////////// 地形部分 //////////////////////////
// 0-20 地形
'1':' 黄墙',
'2':' 白墙',
'3':' 蓝墙',
'4':' 星空',
'5':' 岩浆',
'6':' 岩浆',
'7':' 蓝色商店左',
'8':' 蓝色商店右',
'9':' 粉色商店左',
'10':' 粉色商店左',
'11':' 血网',
'12':' 毒网',
'13':' 衰网',
'14':' 咒网',
'15':' 水',
// 在这里添加更多地形
// 如果空位不足可以从180以后开始继续放只要不和现有的数字冲突即可
// Autotile
'20':' autotile',
// 更多的autotile从151到160等只要不和现有的数字冲突即可
'151':'',
'152':'',
'153':'',
////////////////////////// 物品部分 //////////////////////////
// 21-80 物品
'21':' 黄钥匙',
'22':' 蓝钥匙',
'23':' 红钥匙',
'24':' 绿钥匙',
'25':' 铁门钥匙',
'26':' 大黄门钥匙(钥匙盒)',
'27':' 红宝石',
'28':' 蓝宝石',
'29':' 绿宝石',
'30':' 黄宝石',
'31':' 红血瓶',
'32':' 蓝血瓶',
'33':' 绿血瓶',
'34':' 黄血瓶',
'35':' 铁剑',
'36':' 铁盾',
'37':' 银剑',
'38':' 银盾',
'39':' 骑士剑',
'40':' 骑士盾',
'41':' 圣剑',
'42':' 圣盾',
'43':' 神圣剑',
'44':' 神圣盾',
'45':' 怪物手册',
'46':' 楼层传送器',
'47':' 破墙镐',
'48':' 破冰镐',
'49':' 炸弹',
'50':' 中心对称',
'51':' 上楼器',
'52':' 下楼器',
'53':' 幸运金币',
'54':' 冰冻徽章',
'55':' 十字架',
'56':' 圣水',
'57':' 地震卷轴',
'58':' 解毒药水',
'59':' 解衰药水',
'60':' 解咒药水',
'61':' 万能药水',
'62':' 屠龙匕首',
'63':' 金钱袋',
'64':' 绿鞋',
'65':' 圣锤',
////////////////////////// 门、楼梯、传送点部分 //////////////////////////
// 81-100 门
'81':' 黄门',
'82':' 蓝门',
'83':' 红门',
'84':' 绿门',
'85':' 机关门左',
'86':' 铁门',
'87':' 上楼梯',
'88':' 下楼梯',
'89':' 传送门',
'90':' 星空传送门',
'91':' 上箭头',
'92':' 左箭头',
'93':' 下箭头',
'94':' 右箭头',
////////////////////////// NPC部分 //////////////////////////
// 121-150 NPC
'121':'',
'122':'',
'123':'',
'124':'',
'125':'',
'126':'',
'127':'',
'128':'',
'129':'',
'130':'',
'131':'',
'132':'',
////////////////////////// 其他部分 //////////////////////////
// 161-200 其他(单向箭头、灯、箱子等等)
'161':' 单向上箭头',
'162':' 单向下箭头',
'163':' 单向左箭头',
'164':' 单向右箭头',
'165':' 灯',
'166':' 暗灯',
////////////////////////// 怪物部分 //////////////////////////
// 201-300 怪物
'201':'',
'202':'',
'203':'',
'204':'',
'205':'',
'206':'',
'207':'',
'208':'',
'209':'',
'210':'',
'211':'',
'212':'',
'213':'',
'214':'',
'215':'',
'216':'',
'217':'',
'218':'',
'219':'',
'220':'',
'221':'',
'222':'',
'223':'',
'224':'',
'225':'',
'226':'',
'227':'',
'228':'',
'229':'',
'230':'',
'231':'',
'232':'',
'233':'',
'234':'',
'235':'',
'236':'',
'237':'',
'238':'',
'239':'',
'240':'',
'241':'',
'242':'',
'243':'',
'244':'',
'245':'',
'246':'',
'247':'',
'248':'',
'249':'',
'250':'',
'251':'',
'252':'',
'253':'',
'254':'',
'255':'',
'256':'',
'257':'',
'258':'',
'259':'',
'260':'',
////////////////////////// 待定... //////////////////////////
// 目前ID暂时不要超过400
}

View File

@ -25,7 +25,7 @@
</div>
<p id='startTopLoadTips'>资源即将开始加载</p>
</div>
<img id='startBackground' src='images/bg.png'>
<img id='startBackground' src='project/images/bg.png'>
<!-- 标题界面可以改style的color使标题改变颜色 -->
<p id='startLogo' style="color: black"></p>
<div id='startButtonGroup'>
@ -48,39 +48,39 @@
</div>
<div id='statusBar' class="clearfix">
<div class="status" id="floorCol">
<img src='images/floor.png' id="img-floor">
<img src='project/images/floor.png' id="img-floor">
<p class='statusLabel' id='floor'></p>
</div>
<div class="status" id="lvCol">
<img src='images/lv.png' id="img-lv">
<img src='project/images/lv.png' id="img-lv">
<p class='statusLabel' id='lv'></p>
</div>
<div class="status">
<img src='images/hp.png' id="img-hp">
<img src='project/images/hp.png' id="img-hp">
<p class='statusLabel' id='hp'></p>
</div>
<div class="status">
<img src='images/atk.png' id="img-atk">
<img src='project/images/atk.png' id="img-atk">
<p class='statusLabel' id='atk'></p>
</div>
<div class="status">
<img src='images/def.png' id="img-def">
<img src='project/images/def.png' id="img-def">
<p class='statusLabel' id='def'></p>
</div>
<div class="status" id="mdefCol">
<img src='images/mdef.png' id="img-mdef">
<img src='project/images/mdef.png' id="img-mdef">
<p class='statusLabel' id='mdef'></p>
</div>
<div class="status" id="moneyCol">
<img src='images/money.png' id="img-money">
<img src='project/images/money.png' id="img-money">
<p class='statusLabel' id='money'></p>
</div>
<div class="status" id="expCol">
<img src='images/experience.png' id="img-experience">
<img src='project/images/experience.png' id="img-experience">
<p class='statusLabel' id='experience'></p>
</div>
<div class="status" id="upCol">
<img src='images/up.png' id="img-up">
<img src='project/images/up.png' id="img-up">
<p class='statusLabel' id='up'></p>
</div>
<div class="status">
@ -95,13 +95,13 @@
</div>
</div>
<div id="toolBar" class="clearfix">
<img src="images/book.png" class="tools" id='img-book'>
<img src="images/fly.png" class="tools" id='img-fly'>
<img src="images/toolbox.png" class="tools" id='img-toolbox'>
<img src="images/shop.png" class="tools" id='img-shop'>
<img src="images/save.png" class="tools" id='img-save'>
<img src="images/load.png" class="tools" id='img-load'>
<img src="images/settings.png" class="tools" id='img-settings'>
<img src="project/images/book.png" class="tools" id='img-book'>
<img src="project/images/fly.png" class="tools" id='img-fly'>
<img src="project/images/toolbox.png" class="tools" id='img-toolbox'>
<img src="project/images/shop.png" class="tools" id='img-shop'>
<img src="project/images/save.png" class="tools" id='img-save'>
<img src="project/images/load.png" class="tools" id='img-load'>
<img src="project/images/settings.png" class="tools" id='img-settings'>
<p class="statusLabel tools" id="hard"></p>
</div>
<div id="curtain"></div>
@ -131,15 +131,17 @@ var replay = function(){
}
var afterInit = function(){
main.editor.disableGlobalAnimate=false;
main.editor.drawMapBg();
main.editor.updateMap();
core.setHeroMoveTriggerInterval();
}
var start = function(){
var hard = 'Hard';
core.resetStatus(core.firstData.hero, hard, core.firstData.floorId, core.initStatus.maps);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function() {
/* core.setHeroMoveTriggerInterval(); */
//afterInit();
afterInit();
});
core.events.setInitData(hard);
}