diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4
index 7e8828f4..2aff6d8d 100644
--- a/_server/MotaAction.g4
+++ b/_server/MotaAction.g4
@@ -2797,7 +2797,7 @@ return code;
*/;
choices_s
- : '选项' ':' EvalString_Multi? BGNL? '标题' EvalString? '图像' IdString? '默认选中项' Int '超时毫秒数' Int '宽度' IntString? BGNL? Newline choicesContext+ BEND Newline
+ : '选项' ':' EvalString_Multi? BGNL? '标题' EvalString? '图像' IdString? '超时毫秒数' Int '宽度' IntString? BGNL? Newline choicesContext+ BEND Newline
/* choices_s
@@ -2816,10 +2816,9 @@ if (EvalString_0==''){
}
EvalString_Multi_0 = title+EvalString_Multi_0;
EvalString_Multi_0 = EvalString_Multi_0 ?(', "text": "'+EvalString_Multi_0+'"'):'';
-Int_0 = Int_0 ? (', "selected": '+Int_0) : '';
-Int_1 = Int_1 ? (', "timeout": '+Int_1) : '';
+Int_0 = Int_0 ? (', "timeout": '+Int_0) : '';
IntString_0 = IntString_0 ? (', "width": ' + IntString_0) : '';
-var code = ['{"type": "choices"',EvalString_Multi_0,Int_0,Int_1,IntString_0,
+var code = ['{"type": "choices"',EvalString_Multi_0,Int_0,IntString_0,
block.isCollapsed()?', "_collapsed": true':'',
block.isEnabled()?'':', "_disabled": true',
', "choices": [\n',
@@ -4115,8 +4114,8 @@ MoveMode_List
/*MoveMode_List ['', 'easeIn', 'easeOut', 'easeInOut']*/;
NameMap_List
- : '确定'|'取消'|'操作失败'|'光标移动'|'打开界面'|'读档'|'存档'|'获得道具'|'回血'|'炸弹'|'飞行器'|'开关门'|'上下楼'|'跳跃'|'破墙镐'|'阻激夹域'|'穿脱装备'
- /*NameMap_List ['确定','取消','操作失败','光标移动','打开界面','读档','存档','获得道具','回血','炸弹','飞行器','开关门','上下楼','跳跃','破墙镐','阻激夹域','穿脱装备']*/;
+ : '确定'|'取消'|'操作失败'|'光标移动'|'打开界面'|'读档'|'存档'|'获得道具'|'回血'|'宝石'|'炸弹'|'飞行器'|'开关门'|'上下楼'|'跳跃'|'破墙镐'|'破冰镐'|'阻激夹域'|'穿脱装备'|'商店'
+ /*NameMap_List ['确定','取消','操作失败','光标移动','打开界面','读档','存档','获得道具','回血','宝石','炸弹','飞行器','开关门','上下楼','跳跃','破墙镐','破冰稿','阻激夹域','穿脱装备','商店']*/;
//转blockly后不保留需要加"
EvalString
diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js
index 6ba25fe5..7f642a9f 100644
--- a/_server/MotaActionParser.js
+++ b/_server/MotaActionParser.js
@@ -863,7 +863,7 @@ ActionParser.prototype.parseAction = function() {
if (!this.isset(data.text)) data.text = '';
var info = this.getTitleAndPosition(data.text);
this.next = MotaActionFunctions.xmlText('choices_s', [
- info[3],info[0],info[1],data.selected||0,data.timeout||0,data.width,text_choices,this.next], /* isShadow */false, /*comment*/ null, /*collapsed*/ data._collapsed, /*disabled*/ data._disabled);
+ info[3],info[0],info[1],data.timeout||0,data.width,text_choices,this.next], /* isShadow */false, /*comment*/ null, /*collapsed*/ data._collapsed, /*disabled*/ data._disabled);
break;
case "for": // 循环遍历
this.next = MotaActionFunctions.xmlText('for_s',[
diff --git a/editor-mobile.html b/editor-mobile.html
index 77188c74..0356e7c5 100644
--- a/editor-mobile.html
+++ b/editor-mobile.html
@@ -383,7 +383,7 @@
-
+
diff --git a/editor.html b/editor.html
index 351dec2d..0c0354c8 100644
--- a/editor.html
+++ b/editor.html
@@ -306,18 +306,18 @@
diff --git a/libs/events.js b/libs/events.js
index 4bb40132..ccac7a3b 100644
--- a/libs/events.js
+++ b/libs/events.js
@@ -2033,7 +2033,6 @@ events.prototype._action_choices = function (data, x, y, prefix) {
try { return core.calValue(x.condition, prefix); } catch (e) { return true; }
})
if (data.choices.length == 0) return this.doAction();
- var selected = data.selected || 0;
if (core.isReplaying()) {
var action = core.status.replay.toReplay.shift();
if (action.indexOf('choices:') == 0 && !(action == 'choices:none' && !data.timeout)) {
@@ -2049,7 +2048,7 @@ events.prototype._action_choices = function (data, x, y, prefix) {
if (main.replayChecking) {
// 录像验证系统中选择第一项
if (action != 'choices:none') core.status.replay.toReplay.unshift(action); // 首先归还刚才读出的下一步操作
- core.events.__action_choices_replaying(data, selected)
+ core.events.__action_choices_replaying(data, 0)
} else {
// 正常游戏中弹窗选择
core.myprompt('录像回放出错!当前需要执行选择项但录像中未记录。\n如需修复请输入您要选的项(从0起),点击取消将不会修复。', 0, function (value) {
@@ -2077,7 +2076,6 @@ events.prototype._action_choices = function (data, x, y, prefix) {
data.choices[i] = {"text": data.choices[i]};
data.choices[i].text = core.replaceText(data.choices[i].text, prefix);
}
- core.status.event.selection = selected;
core.ui.drawChoices(core.replaceText(data.text, prefix), data.choices, data.width);
}
diff --git a/project/data.js b/project/data.js
index 3f1bc8a6..d99ae5d6 100644
--- a/project/data.js
+++ b/project/data.js
@@ -25,24 +25,27 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"bgm.mp3"
],
"sounds": [
- "floor.mp3",
"attack.mp3",
- "door.mp3",
- "item.mp3",
- "equip.mp3",
- "zone.mp3",
- "jump.mp3",
- "pickaxe.mp3",
"bomb.mp3",
- "centerFly.mp3",
- "error.mp3",
"cancel.mp3",
- "cursor.mp3",
+ "centerFly.mp3",
"confirm.mp3",
- "open_ui.mp3",
+ "cursor.mp3",
+ "door.mp3",
+ "equip.mp3",
+ "error.mp3",
+ "floor.mp3",
+ "gem.mp3",
+ "icePickaxe.mp3",
+ "item.mp3",
+ "jump.mp3",
"load.mp3",
+ "open_ui.mp3",
+ "pickaxe.mp3",
"recovery.mp3",
- "save.mp3"
+ "save.mp3",
+ "shop.mp3",
+ "zone.mp3"
],
"fonts": [],
"nameMap": {
@@ -61,11 +64,14 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"上下楼": "floor.mp3",
"跳跃": "jump.mp3",
"破墙镐": "pickaxe.mp3",
+ "破冰镐": "icePickaxe.mp3",
+ "宝石": "gem.mp3",
"阻激夹域": "zone.mp3",
"穿脱装备": "equip.mp3",
"背景音乐": "bgm.mp3",
"攻击": "attack.mp3",
"背景图": "bg.jpg",
+ "商店": "shop.mp3",
"领域": "zone"
},
"levelChoose": [
@@ -73,6 +79,12 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"title": "简单",
"name": "Easy",
"hard": 1,
+ "color": [
+ 64,
+ 255,
+ 85,
+ 1
+ ],
"action": [
{
"type": "comment",
@@ -85,9 +97,21 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"name": "Normal",
"hard": 2,
"color": [
- 0,
255,
- 0,
+ 221,
+ 32,
+ 1
+ ],
+ "action": []
+ },
+ {
+ "title": "困难",
+ "name": "Hard",
+ "hard": 3,
+ "color": [
+ 255,
+ 68,
+ 64,
1
],
"action": []
@@ -101,7 +125,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"styles": {
"startBackground": "project/images/bg.jpg",
"startVerticalBackground": "project/images/bg.jpg",
- "startLogoStyle": "color: white",
+ "startLogoStyle": "color: black",
"startButtonsStyle": "background-color: #32369F; opacity: 0.85; color: #FFFFFF; border: #FFFFFF 2px solid; caret-color: #FFD700;",
"statusLeftBackground": "url(project/materials/ground.png) repeat",
"statusTopBackground": "url(project/materials/ground.png) repeat",
@@ -131,7 +155,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"firstData": {
"title": "魔塔样板",
"name": "template",
- "version": "Ver 2.8",
+ "version": "Ver 2.8.1",
"floorId": "sample0",
"hero": {
"image": "hero.png",
diff --git a/project/enemys.js b/project/enemys.js
index 189a2750..bac13fde 100644
--- a/project/enemys.js
+++ b/project/enemys.js
@@ -1,30 +1,30 @@
var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
{
- "greenSlime": {"name":"绿头怪","hp":100,"atk":120,"def":0,"money":1,"exp":1,"point":0,"special":[1,5,7,8]},
+ "greenSlime": {"name":"绿头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[16,18],"value":10},
"blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":[1,9]},
- "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":1},
+ "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":[1]},
"bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redBat": {"name":"红蝙蝠","hp":100,"atk":120,"def":0,"money":5,"exp":0,"point":0,"special":4},
- "vampire": {"name":"冥灵魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "redBat": {"name":"红蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
+ "vampire": {"name":"冥灵魔王","hp":888,"atk":888,"def":888,"money":888,"exp":888,"point":0,"special":[6],"n":8},
"skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "rock": {"name":"石头人","hp":100,"atk":120,"def":0,"money":4,"exp":0,"point":0,"special":3},
- "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":2},
+ "rock": {"name":"石头人","hp":50,"atk":50,"def":0,"money":3,"exp":0,"point":0,"special":3},
+ "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":[9]},
"redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"exp":0,"point":0,"special":15,"value":100,"range":2},
"redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true},
- "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":0,"point":0,"special":[5,23]},
+ "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":0,"point":0,"special":4},
"soldier": {"name":"冥战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redKnight": {"name":"红骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "redKnight": {"name":"红骑士","hp":500,"atk":200,"def":50,"money":0,"exp":0,"point":0,"special":[7]},
"darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8},
"goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "poisonSkeleton": {"name":"紫骷髅","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "poisonSkeleton": {"name":"紫骷髅","hp":50,"atk":60,"def":70,"money":80,"exp":0,"point":0,"special":13},
"poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13},
"skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20},
"skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
@@ -33,20 +33,19 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14},
"whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redSwordsman": {"name":"剑王","hp":100,"atk":120,"def":0,"money":7,"exp":0,"point":0,"special":6,"n":8},
- "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":12},
+ "redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
+ "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12]},
"octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "steelGuard": {"name":"铁守卫","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20},
- "evilBat": {"name":"邪恶蝙蝠","hp":1000,"atk":1,"def":0,"money":0,"exp":0,"point":0,"special":[2,3]},
- "frozenSkeleton": {"name":"冻死骨","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "steelGuard": {"name":"铁守卫","hp":50,"atk":50,"def":50,"money":0,"exp":0,"point":0,"special":[18],"value":20},
+ "evilBat": {"name":"邪恶蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[10,21],"atkValue":2,"defValue":3},
+ "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[9],"atkValue":2,"defValue":3},
"yellowGateKeeper": {"name":"初级卫兵","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":0},
"blueGateKeeper": {"name":"中级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"redGateKeeper": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
@@ -59,25 +58,23 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "evilPrincess": {"name":"痛苦魔女","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "evilPrincess": {"name":"痛苦魔女","hp":1000,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[10]},
"blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "blueRock": {"name":"鬼邪石","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "skeletonLite": {"name":"骷髅精英","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "bowman": {"name":"弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "liteBowman": {"name":"精锐弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "crimsonZombie": {"name":"红兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "bowman": {"name":"初级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "mutantSlimeman": {"name":"变异战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "devilKnight": {"name":"恶灵骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "devilKnight": {"name":"恶灵骑士","hp":150,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":[1,5,7,8]},
"grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"greenGateKeeper": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "ghostSoldier": {"name":"冥队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "ghostSoldier": {"name":"冥队长","hp":200,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":8},
"frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"blackKing": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true},
"yellowKing": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"greenKing": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"redKing": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "blueKing": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":16}
+ "blueKing": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":16},
+ "keiskeiFairy": {"name":"铃兰花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "tulipFairy": {"name":"郁金香花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
+ "purpleBowman": {"name":"高级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}
}
\ No newline at end of file
diff --git a/project/floors/sample0.js b/project/floors/sample0.js
index d79d814a..ec642e75 100644
--- a/project/floors/sample0.js
+++ b/project/floors/sample0.js
@@ -11,18 +11,18 @@ main.floors.sample0=
"bgm": "bgm.mp3",
"ratio": 1,
"map": [
- [ 0, 0,220, 0, 0, 20, 87, 3, 65, 64, 44, 43, 42],
- [ 0,246, 0,246, 0, 20, 0, 3, 58, 59, 60, 61, 41],
- [219, 0, 0, 0,219, 20, 0, 3, 57, 26, 62, 63, 40],
- [ 20, 20,125, 20, 20, 20, 0, 3, 53, 54, 55, 56, 39],
- [216,247,263,235,248, 6, 0, 3, 49, 50, 51, 52, 38],
- [ 6, 6,125, 6, 6, 6, 0, 1, 45, 46, 47, 48, 37],
- [224,254,212,262,204, 5, 0, 1, 31, 32, 34, 33, 36],
- [201,261,217,264,207, 5, 0, 1, 27, 28, 29, 30, 35],
- [ 5, 5,125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 25],
- [ 0, 0,237, 0, 0, 0, 45, 1, 1, 1,121, 1, 1],
+ [ 0, 0,220, 0, 0, 20, 87, 3, 58, 59, 60, 61, 64],
+ [ 0,246, 0,246, 0, 20, 0, 3, 57, 62, 63, 43, 44],
+ [219, 0, 0, 0,219, 20, 0, 3, 53, 54, 55, 56, 69],
+ [ 20, 20,125, 20, 20, 20, 0, 3, 49, 50, 51, 52, 68],
+ [251,247,256,234,248, 6, 0, 3, 35, 36, 46, 47, 48],
+ [ 6, 6,125, 6, 6, 6, 0, 3, 0, 0, 0, 0, 0],
+ [208,227,212,216,278, 5, 0, 1, 1, 1,319, 1, 1],
+ [201,205,217,215,224, 5, 0, 1, 27, 28, 29, 30, 31],
+ [ 5, 5,125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 26],
+ [ 0, 0,263, 0, 0, 0, 45, 1, 1, 1,121, 1, 1],
[ 4, 4,133, 4, 4, 4, 0, 0, 0, 0, 0, 85,124],
- [ 87, 11, 12, 13, 14, 4, 4, 2, 2, 2,122, 2, 2],
+ [ 87, 11, 12, 13, 14, 4, 4, 2, 2,122, 2, 2, 2],
[ 88, 89, 90, 91, 92, 93, 94, 2, 81, 82, 83, 84, 86]
],
"firstArrive": [
@@ -37,23 +37,6 @@ main.floors.sample0=
"本层主要对道具、门、怪物等进行介绍,有关事件的各种信息在下一层会有更为详细的说明。"
],
"events": {
- "10,9": [
- "\t[老人,man]\b[down,null]这些是本样板支持的所有的道具。\n\n道具分为四类:items, constants, tools,equips。\nitems 为即捡即用类道具,例如宝石、血瓶等。\nconstants 为永久道具,例如怪物手册、楼层传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中心对称飞行器等。\nequips 为装备,例如剑盾等。",
- "\t[老人,man]\b[up]有关道具效果,定义在project文件夹的items.js中。\n目前大多数道具已有默认行为,如有自定义的需求请修改道具的图块属性。",
- "\t[老人,man]\b[up]拾取道具结束后可触发 afterGetItem 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。",
- {
- "type": "hide",
- "time": 500
- }
- ],
- "10,11": [
- "\t[老人,trader]\b[this]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。",
- "\t[老人,trader]\b[this]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。",
- {
- "type": "hide",
- "time": 500
- }
- ],
"2,10": [
"\t[少女,npc0]\b[this]这些是路障、楼梯、传送门。",
"\t[少女,npc1]\b[this]血网的伤害数值、中毒后每步伤害数值、衰弱时攻防下降的数值,都在全塔属性(快捷键B)的全局数值(values)内定义。\n\n路障同样会尽量被自动寻路绕过。",
@@ -72,7 +55,7 @@ main.floors.sample0=
],
"2,3": [
"\t[老人,wizard]\b[this]领域、夹击。\n请注意领域怪需要设置value为伤害数值,可参见样板中初级巫师的写法。",
- "\t[老人,wizard]\b[this]夹击和领域同时发生时先计算领域,再夹击。\n自动寻路同样会尽量绕过你设置的这些点。",
+ "\t[老人,wizard]\b[this]当领域、阻击、激光和夹击同时发生时,先计算领域、阻击、激光(同时计算),再计算夹击。\n自动寻路同样会尽量绕过这些区域。",
{
"type": "hide",
"time": 500
@@ -92,13 +75,30 @@ main.floors.sample0=
]
},
"2,8": [
- "\t[老人,wizard]\b[this]这些都是各种各样的怪物,所有怪物的数据都在project文件夹的enemys.js中设置。",
- "\t[老人,wizard]\b[this]这批怪物分别为:普通、先攻、魔攻、坚固、2连击、3连击、4连击、破甲、反击、净化。",
+ "\t[老人,wizard]\b[this]这些都是各种各样的怪物,所有怪物的数据都在 project 文件夹的 enemys.js 中设置。\n(注意是 enemys,而非 enemies)",
+ "\t[老人,wizard]\b[this]这批怪物分别为:\n\\i[greenSlime]普通、\\i[bat]先攻、\\i[bluePriest]魔攻、\\i[rock]坚固、\\i[swordsman]2连击、\\i[vampire]多连击、\\i[redKnight]破甲、\\i[ghostSoldier]反击、\\i[slimeman]净化。",
"\t[老人,wizard]\b[this]打败怪物后可触发 afterBattle 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。",
{
"type": "hide",
"time": 500
}
+ ],
+ "9,11": [
+ "\t[老人,trader]\b[this]这些是门,需要对应的钥匙打开。\n机关门必须使用特殊的开法。",
+ "\t[老人,trader]\b[this]开门后可触发 afterOpenDoor 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。",
+ {
+ "type": "hide",
+ "time": 500
+ }
+ ],
+ "10,9": [
+ "\t[老人,man]\b[down,null]这些是部分本样板支持的道具。\n\n道具分为 items、constants、tools、equips 四类。\nitems 为即捡即用类道具,例如宝石、血瓶等。\nconstants 为永久道具,例如怪物手册、楼层传送器、幸运金币等。\ntools 为消耗类道具,例如破墙镐、炸弹、中心对称飞行器等。\nequips 为装备,例如剑盾等。",
+ "\t[老人,man]\b[up]有关道具效果,定义在project文件夹的items.js中。\n目前大多数道具已有默认行为,如有自定义的需求请修改道具的图块属性。",
+ "\t[老人,man]\b[up]拾取道具结束后可触发 afterGetItem 事件。\n\n有关事件的各种信息在下一层会有更为详细的说明。",
+ {
+ "type": "hide",
+ "time": 500
+ }
]
},
"changeFloor": {
@@ -170,50 +170,70 @@ main.floors.sample0=
"afterBattle": {
"2,6": [
"\t[ghostSoldier]\b[this]不可能,你怎么可能打败我!\n(一个打败怪物触发的事件)"
+ ],
+ "0,9": [
+ "这是一个高度为 48 个像素而非 32 个像素的敌人。\n高敌人的素材存放在 materials 文件夹中 enemy48.png 的部分。"
]
},
"afterGetItem": {
- "11,8": [
- "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门仍然会自动使用钥匙(根据全塔属性的系统开关勾选与否,铁门可能不需要钥匙)开门。"
+ "9,1": [
+ "样板给出的道具素材中有很多道具都是未定义甚至未注册的,需要自行实现功能。\n(比如屠龙匕首就是一个没有功能的道具)\n如果你想为未定的道具添加自定义功能,请参照样板中其他道具的写法;如果有更多疑问,请查阅帮助文档。"
],
- "8,6": [
- "由于吸血、夹击和净化等的存在,玩家可能希望自动寻路能尽量绕开血瓶和绿宝石,\n他们可以自行在游戏设置中开关这一功能。"
+ "12,2": [
+ "跳跃本身没有音效,使用跳跃鞋时播放的音效是通过跳跃鞋的道具效果实现的。\n如果想为跳跃设置音效,请在 events.js 的 jumpHero 函数执行前插入一行代码,用 core.playSound 的方式来播放音效即可。\n如果想了解更多关于这方面的内容,请参与帮助文档中的“脚本——复写函数”章节。\n\n类似的是,敌人的“支援”技能也是通过在支援技能中播放音效实现的。"
],
- "8,7": [
- "如需修改消耗品的效果,请前往全塔属性(快捷键B),找到并修改values(全局数值)内对应的具体数值即可。\n如果有高级的需求(如每个区域宝石数值变化),请修改楼层属性(快捷键V)最下方的“宝石血瓶效果”。\n如果有更高级的需求,请阅读帮助文档。"
+ "8,3": [
+ "炸弹是只能炸面前的怪物还是四个方向的怪物,由其图块属性(快捷键C)中的“使用效果”决定。\n不能被炸的怪物请直接在该怪物的图块属性中勾选“不可炸”,可参见样板里黑衣魔王和黑暗大法师的写法。"
],
- "9,5": [
+ "10,3": [
+ "“上楼”和“下楼”的目标层由全塔属性(快捷键B)的“楼层列表”顺序所决定。"
+ ],
+ "12,3": [
+ "如果想制作类似于生命魔杖等可以被批量使用的道具,请参照生命魔杖图块属性(快捷键B)中\n useItemEvent 的写法。\n其基本原理就是使用【接受用户输入】让玩家在弹窗中输入想要使用的物品数量,再判断玩家的输入是否合法,如果输入合法就扣减相应数量的物品并结算物品效果。\n要注意的是,在使用物品时会先消耗一个物品,所以记得在编辑 useItemEvent 时先用 core.addItem 恢复一个物品。"
+ ],
+ "8,4": [
+ "剑盾的道具类别设为equips才可以装备,\n如果设为items则会直接增加属性。",
+ "在全塔属性(快捷键B)的系统开关中设置是否启用装备栏按钮。\n如果启用则装备栏按钮会替代楼传按钮。\n无论是否启用,玩家都可以双击道具栏按钮呼出装备栏。"
+ ],
+ "9,4": [
+ "装备的种类由全塔属性(快捷键B)中的“装备孔”决定。\n每件装备的“类型”就是在“装备孔”中的索引,例如默认情况下 0 代表武器。\n同时,只有第一个装备孔中的装备,其“普攻动画”属性才会生效。"
+ ],
+ "10,4": [
"每层楼的“可楼传”勾选框决定了该楼层能否被飞到。\n\n勇士在不能被飞到的楼层也无法使用楼层传送器。",
"飞行的楼层顺序由全塔属性(快捷键B)中的“楼层列表”所决定。\n\n是否必须在楼梯边使用楼传器由全塔属性中的系统开关所决定。"
],
- "10,5": [
+ "11,4": [
"破墙镐是破面前的墙壁还是四个方向的墙壁,由其图块属性(快捷键C)的“使用效果”决定。\n哪些图块(怪物和道具除外)可以被破震,由该图块的图块属性中的“可破震”决定。"
],
- "8,4": [
- "炸弹是只能炸面前的怪物还是四个方向的怪物,由其图块属性(快捷键C)中的“使用效果”决定。\n不能被炸的怪物请直接在该怪物的图块属性中勾选“不可炸”,可参见样板里黑衣魔王和黑暗大法师的写法。"
+ "12,4": [
+ "在 2.8.1 版更新后,能够被破冰镐摧毁的冰块被移动到了 animates 下。\n如果想制作一个可以以特定触发器的方式移除特定图块的道具,可以参照破冰镐物品图块属性中\n useItemEffect 和 canUseItemEffect 的写法。"
],
- "10,4": [
- "“上楼”和“下楼”的目标层由全塔属性(快捷键B)的“楼层列表”顺序所决定。"
+ "11,8": [
+ "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门时仍然会自动使用钥匙开门。",
+ {
+ "type": "comment",
+ "text": "由于状态栏放不下,铁门钥匙(根据全塔属性的系统开关勾选与否,可能还有绿钥匙)会被放入道具栏中。\n碰到绿门和铁门仍然会自动使用钥匙(根据全塔属性的系统开关勾选与否,铁门可能不需要钥匙)开门。"
+ }
],
- "9,2": [
+ "12,8": [
"该道具默认是大黄门钥匙,如需改为钥匙盒直接修改其图块属性(快捷键C)的“道具类别”为items即可。"
],
- "10,2": [
- "屠龙匕首目前未被定义,可能需要自行实现功能。\n有关如何实现一个道具功能参见帮助文档。"
+ "8,7": [
+ "如需修改消耗品的效果,请前往全塔属性(快捷键B),找到并修改values(全局数值)内对应的具体数值即可。\n如果有高级的需求(如每个区域宝石数值变化),请修改楼层属性(快捷键V)最下方的“宝石血瓶效果”。\n如果有更高级的需求,请查阅帮助文档。"
+ ],
+ "11,7": [
+ "与大黄门钥匙类似的是,如果将黄宝石的图块属性设为 items ,那么黄宝石将在被拾取触发 itemEffect 效果。\n\n注意:触碰或使用事件(useItemEvent)对 items、tools、constants 都有效。\n这意味着,如果黄宝石的图块属性为 items ,那么在拾取黄宝石时,黄宝石不会进入背包,并且其“即捡即用”和“触碰或使用事件”都会被触发。"
],
"12,7": [
- "剑盾的道具类别设为equips才可以装备,\n如果设为items则会直接增加属性。"
- ],
- "12,6": [
- "在全塔属性(快捷键B)的系统开关中设置是否启用装备栏按钮。\n如果启用则装备栏按钮会替代楼传按钮。\n无论是否启用,玩家都可以双击道具栏按钮呼出装备栏。"
- ],
- "12,5": [
- "装备的种类由全塔属性(快捷键B)中的“装备孔”决定,每件装备的“类型”就是在“装备孔”中的索引,\n例如默认情况下0代表武器。同时,只有第一个装备孔中的装备,其“普攻动画”属性才会生效。"
+ "由于吸血、夹击、净化等属性值的存在,玩家可能希望自动寻路时能尽量绕开血瓶和绿宝石。\n他们可以自行在游戏设置中开关这一功能。"
]
},
"afterOpenDoor": {
"11,12": [
- "你开了一个绿门,触发了一个afterOpenDoor事件"
+ "你打开了一扇绿门,触发了一个 afterOpenDoor 事件。"
+ ],
+ "10,6": [
+ "这是一扇高度为 48 个像素而非 32 个像素的门。\n高门和高NPC的素材存放在 materials 文件夹中 npc48.png 的部分。"
]
},
"cannotMove": {},
@@ -237,5 +257,7 @@ main.floors.sample0=
],
"width": 13,
"height": 13,
- "autoEvent": {}
+ "autoEvent": {},
+ "beforeBattle": {},
+ "cannotMoveIn": {}
}
\ No newline at end of file
diff --git a/project/floors/sample1.js b/project/floors/sample1.js
index 46324ac2..be0af792 100644
--- a/project/floors/sample1.js
+++ b/project/floors/sample1.js
@@ -30,17 +30,6 @@ main.floors.sample1=
],
"firstArrive": [],
"events": {
- "4,10": [
- "\t[样板提示]本层楼将会对各类事件进行介绍。",
- "左边是一个仿51层的陷阱做法,上方是商店、快捷商店的使用方法,右上是一个典型的杀怪开门的例子,右下是各类可能的NPC事件。",
- "本样板目前支持的事件列表大致有:\ntext: 显示一段文字(比如你现在正在看到的)\ntip: 左上角显示提示\nshow: 使一个事件有效(可见、可被交互)\nhide: 使一个事件失效(不可见、不可被交互)\ntrigger: 触发另一个地点的事件\nanimate: 显示动画\nbattle: 强制和某怪物战斗\nopenDoor: 无需钥匙开门(例如机关门、暗墙)",
- "openShop: 打开一个全局商店\ndisableShop: 禁用一个全局商店\nchangeFloor: 传送勇士到某层某位置\nchangePos: 传送勇士到当层某位置;转向\nshowImage: 显示图片\nsetCurtain: 更改画面色调\nsetWeather: 更改天气\nmove: 移动事件效果\nmoveHero: 移动勇士效果\nplayBgm: 播放某个背景音乐\npauseBgm: 暂停背景音乐\nresumeBgm: 恢复背景音乐的播放\nplaySound: 播放某个音频",
- "if: 条件判断\nchoices: 提供选项\nsetValue: 设置勇士属性道具,或某个变量/flag\nupdate: 更新状态栏和地图显伤\nwin: 获得胜利(游戏通关)\nlose: 游戏失败\nsleep: 等待多少毫秒\nexit: 立刻结束当前事件\nfunction: 自定义JS脚本\n\n更多支持的事件还在编写中,欢迎您宝贵的意见。",
- "有关各事件的样例,可参见本层一些NPC的写法。\n所有事件样例本层都有介绍。\n\n一个自定义事件处理完后,需要调用{\"type\": \"hide\"}该事件才不会再次出现。",
- {
- "type": "hide"
- }
- ],
"1,7": [
{
"type": "setBlock",
@@ -180,6 +169,10 @@ main.floors.sample1=
11
]
},
+ {
+ "type": "comment",
+ "text": "{type: openDoor} 不止可以开“门”,也可以用来开墙等等"
+ },
{
"type": "sleep",
"time": 300
@@ -189,9 +182,8 @@ main.floors.sample1=
"type": "move",
"time": 750,
"steps": [
- "right",
- "right",
- "down"
+ "right:2",
+ "down:1"
]
},
"上面是个move事件,可以对NPC等进行移动。\n详见样板中小偷事件的写法。",
@@ -623,5 +615,6 @@ main.floors.sample1=
}
},
"width": 13,
- "height": 13
+ "height": 13,
+ "beforeBattle": {}
}
\ No newline at end of file
diff --git a/project/floors/sample2.js b/project/floors/sample2.js
index 03bbcb1b..821f594a 100644
--- a/project/floors/sample2.js
+++ b/project/floors/sample2.js
@@ -70,5 +70,6 @@ main.floors.sample2=
"fgmap": [
],
- "autoEvent": {}
+ "autoEvent": {},
+ "beforeBattle": {}
}
\ No newline at end of file
diff --git a/project/functions.js b/project/functions.js
index e862728b..020ae2ce 100644
--- a/project/functions.js
+++ b/project/functions.js
@@ -458,6 +458,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// isGentleClick:是否是轻按触发的
if (itemId.endsWith('Potion') && core.material.items[itemId].cls == 'items')
core.playSound('回血');
+ else if (itemId.endsWith('Gem') && core.material.items[itemId].cls == 'items')
+ core.playSound('宝石')
else
core.playSound('获得道具');
@@ -494,30 +496,30 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 名字和描述可以直接写字符串,也可以写个function将怪物传进去
return [
[1, "先攻", "怪物首先攻击", "#ffcc33"],
- [2, "魔攻", "怪物无视勇士的防御", "#bbb0ff"],
- [3, "坚固", "怪物防御不小于勇士攻击-1", "#c0b088"],
+ [2, "魔攻", "怪物无视角色的防御", "#bbb0ff"],
+ [3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"],
[4, "2连击", "怪物每回合攻击2次", "#ffee77"],
[5, "3连击", "怪物每回合攻击3次", "#ffee77"],
[6, function (enemy) { return (enemy.n || '') + "连击"; }, function (enemy) { return "怪物每回合攻击" + (enemy.n || 4) + "次"; }, "#ffee77"],
- [7, "破甲", function (enemy) { return "战斗前,怪物附加角色防御的" + Math.floor(100 * (enemy.defValue || core.values.breakArmor || 0)) + "%作为伤害"; }, "#b30000"],
+ [7, "破甲", function (enemy) { return "战斗前,怪物附加角色防御的" + Math.floor(100 * (enemy.defValue || core.values.breakArmor || 0)) + "%作为伤害"; }, "#88c0ff"],
[8, "反击", function (enemy) { return "战斗时,怪物每回合附加角色攻击的" + Math.floor(100 * (enemy.atkValue || core.values.counterAttack || 0)) + "%作为伤害,无视角色防御"; }, "#ffaa44"],
- [9, "净化", function (enemy) { return "战斗前,怪物附加勇士护盾的" + (enemy.n || core.values.purify) + "倍作为伤害"; }, "#80eed6"],
- [10, "模仿", "怪物的攻防和勇士攻防相等", "#b0c0dd"],
- [11, "吸血", function (enemy) { return "战斗前,怪物首先吸取角色的" + Math.floor(100 * enemy.value || 0) + "%生命(约" + Math.floor((enemy.value || 0) * core.getStatus('hp')) + "点)作为伤害" + (enemy.add ? ",并把伤害数值加到自身生命上" : ""); }, "#ff00d2"],
- [12, "中毒", "战斗后,勇士陷入中毒状态,每一步损失生命" + core.values.poisonDamage + "点", "#99ee88"],
- [13, "衰弱", "战斗后,勇士陷入衰弱状态,攻防暂时下降" + (core.values.weakValue >= 1 ? core.values.weakValue + "点" : parseInt(core.values.weakValue * 100) + "%"), "#f0bbcc"],
- [14, "诅咒", "战斗后,勇士陷入诅咒状态,战斗无法获得金币和经验", "#bbeef0"],
+ [9, "净化", function (enemy) { return "战斗前,怪物附加角色护盾的" + (enemy.n || core.values.purify) + "倍作为伤害"; }, "#80eed6"],
+ [10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"],
+ [11, "吸血", function (enemy) { return "战斗前,怪物首先吸取角色的" + Math.floor(100 * enemy.value || 0) + "%生命(约" + Math.floor((enemy.value || 0) * core.getStatus('hp')) + "点)作为伤害" + (enemy.add ? ",并把伤害数值加到自身生命上" : ""); }, "#dd4448"],
+ [12, "中毒", "战斗后,角色陷入中毒状态,每一步损失生命" + core.values.poisonDamage + "点", "#99ee88"],
+ [13, "衰弱", "战斗后,角色陷入衰弱状态,攻防暂时下降" + (core.values.weakValue >= 1 ? core.values.weakValue + "点" : parseInt(core.values.weakValue * 100) + "%"), "#f0bbcc"],
+ [14, "诅咒", "战斗后,角色陷入诅咒状态,战斗无法获得金币和经验", "#bbeef0"],
[15, "领域", function (enemy) { return "经过怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "范围内" + (enemy.range || 1) + "格时自动减生命" + (enemy.value || 0) + "点"; }, "#c677dd"],
- [16, "夹击", "经过两只相同的怪物中间,勇士生命值变成一半", "#bb99ee"],
+ [16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"],
[17, "仇恨", "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" + (core.values.hatred || 0) + "点仇恨值)", "#b0b666"],
[18, "阻击", function (enemy) { return "经过怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时自动减生命" + (enemy.value || 0) + "点,同时怪物后退一格"; }, "#8888e6"],
- [19, "自爆", "战斗后勇士的生命值变成1", "#ff6666"],
- [20, "无敌", "勇士无法打败怪物,除非拥有十字架", "#aaaaaa"],
- [21, "退化", function (enemy) { return "战斗后勇士永久下降" + (enemy.atkValue || 0) + "点攻击和" + (enemy.defValue || 0) + "点防御"; }],
- [22, "固伤", function (enemy) { return "战斗前,怪物对勇士造成" + (enemy.damage || 0) + "点固定伤害,未开启负伤时无视勇士护盾。"; }, "#ff9977"],
+ [19, "自爆", "战斗后角色的生命值变成1", "#ff6666"],
+ [20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"],
+ [21, "退化", function (enemy) { return "战斗后角色永久下降" + (enemy.atkValue || 0) + "点攻击和" + (enemy.defValue || 0) + "点防御"; }],
+ [22, "固伤", function (enemy) { return "战斗前,怪物对角色造成" + (enemy.damage || 0) + "点固定伤害,未开启负伤时无视角色护盾。"; }, "#ff9977"],
[23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"],
[24, "激光", function (enemy) { return "经过怪物同行或同列时自动减生命" + (enemy.value || 0) + "点"; }, "#dda0dd"],
- [25, "光环", function (enemy) { return (enemy.range != null ? ((enemy.zoneSquare ? "该怪物九宫格" : "该怪物十字") + enemy.range + "格范围内") : "同楼层所有" ) + "怪物生命提升" + (enemy.value || 0) + "%,攻击提升" + (enemy.atkValue || 0) + "%,防御提升" + (enemy.defValue || 0) + "%," + (enemy.add ? "可叠加" : "不可叠加"); }, "#e6e099", 1],
+ [25, "光环", function (enemy) { return (enemy.range != null ? ((enemy.zoneSquare ? "该怪物九宫格" : "该怪物十字") + enemy.range + "格范围内") : "同楼层所有") + "怪物生命提升" + (enemy.value || 0) + "%,攻击提升" + (enemy.atkValue || 0) + "%,防御提升" + (enemy.defValue || 0) + "%," + (enemy.add ? "可叠加" : "不可叠加"); }, "#e6e099", 1],
[26, "支援", "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。", "#77c0b6", 1],
[27, "捕捉", function (enemy) { return "当走到怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时会强制进行战斗。"; }, "#c0ddbb"]
];
diff --git a/project/icons.js b/project/icons.js
index 0d331c09..fbff0263 100644
--- a/project/icons.js
+++ b/project/icons.js
@@ -34,42 +34,41 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"grass2": 2,
"ground2": 3,
"ground3": 4,
- "ice": 5,
- "downFloor": 6,
- "upFloor": 7,
- "blueShopLeft": 8,
- "pinkShopLeft": 9,
- "blueShopRight": 10,
- "pinkShopRight": 11,
- "arrowUp": 12,
- "arrowDown": 13,
- "arrowLeft": 14,
- "arrowRight": 15,
- "light": 16,
- "darkLight": 17,
- "ski": 18,
- "flower": 19,
- "box": 20,
- "boxed": 21,
- "sWallT": 22,
- "sWallL": 23,
- "sWallR": 24,
- "sWallB": 25,
- "sWallTL": 26,
- "sWallBR": 27,
- "sWallTR": 28,
- "sWallBL": 29,
- "sWallTB": 30,
- "sWallLR": 31,
- "sWallBLR": 32,
- "sWallTLR": 33,
- "sWallTBR": 34,
- "sWallTBL": 35
+ "downFloor": 5,
+ "upFloor": 6,
+ "blueShopLeft": 7,
+ "pinkShopLeft": 8,
+ "blueShopRight": 9,
+ "pinkShopRight": 10,
+ "arrowUp": 11,
+ "arrowDown": 12,
+ "arrowLeft": 13,
+ "arrowRight": 14,
+ "light": 15,
+ "darkLight": 16,
+ "ski": 17,
+ "flower": 18,
+ "box": 19,
+ "boxed": 20,
+ "sWallT": 21,
+ "sWallL": 22,
+ "sWallR": 23,
+ "sWallB": 24,
+ "sWallTL": 25,
+ "sWallBR": 26,
+ "sWallTR": 27,
+ "sWallBL": 28,
+ "sWallTB": 29,
+ "sWallLR": 30,
+ "sWallBLR": 31,
+ "sWallTLR": 32,
+ "sWallTBR": 33,
+ "sWallTBL": 34
},
"animates": {
"star": 0,
"lava": 1,
- "blueWater": 2,
+ "blueLava": 2,
"water": 3,
"yellowDoor": 4,
"blueDoor": 5,
@@ -94,11 +93,8 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"leftPortal": 24,
"rightPortal": 25,
"upPortal": 26,
- "steelDoor2": 27,
- "steelDoor3": 28,
- "iceDoor": 29,
- "iceDoor2": 30,
- "magentaWall": 31
+ "ice": 27,
+ "magentaWall": 28
},
"npcs": {
"man": 0,
@@ -115,8 +111,6 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"princess": 11,
"greenMan": 28,
"blueTrader": 29,
- "redMSNpc": 30,
- "blackTrader": 31,
"octopusLeftTop": 12,
"octopusTop": 13,
"octopusRightTop": 14,
@@ -138,7 +132,13 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"npc0": 0,
"npc1": 1,
"npc2": 2,
- "npc3": 3
+ "npc3": 3,
+ "tallYellowDoor": 4,
+ "tallBlueDoor": 5,
+ "tallRedDoor": 6,
+ "tallGreenDoor": 7,
+ "tallSpecialDoor": 8,
+ "tallSteelDoor": 9
},
"enemys": {
"greenSlime": 0,
@@ -178,7 +178,6 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"octopus": 57,
"princessEnemy": 59,
"skeletonWarrior": 9,
- "frozenSkeleton": 69,
"silverSlimelord": 60,
"goldSlimelord": 61,
"whiteSlimeman": 54,
@@ -198,25 +197,23 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"evilPrincess": 50,
"blademaster": 48,
"evilFairy": 51,
- "blueRock": 63,
- "skeletonLite": 64,
- "greenKnight": 65,
- "bowman": 66,
- "liteBowman": 67,
- "crimsonZombie": 68,
- "watcherSlime": 70,
- "mutantSlimeman": 71,
- "frostBat": 72,
- "devilKnight": 73,
- "grayPriest": 74,
- "greenGateKeeper": 75,
+ "greenKnight": 63,
+ "bowman": 64,
+ "watcherSlime": 66,
+ "frostBat": 67,
+ "devilKnight": 68,
+ "grayPriest": 69,
+ "greenGateKeeper": 70,
"ghostSoldier": 11,
"evilHero": 40,
"blackKing": 28,
"yellowKing": 29,
"greenKing": 30,
"redKing": 44,
- "blueKing": 45
+ "blueKing": 45,
+ "keiskeiFairy": 71,
+ "tulipFairy": 72,
+ "purpleBowman": 65
},
"enemy48": {
"angel": 0,
@@ -270,12 +267,12 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"curseWine": 27,
"superWine": 28,
"dagger": 42,
- "silverCoin": 46,
"amulet": 47,
"hammer": 48,
"jumpShoes": 49,
"skill1": 30,
- "wand": 10
+ "wand": 10,
+ "pack": 46
},
"autotile": {
"autotile": 0,
diff --git a/project/images/bg.jpg b/project/images/bg.jpg
index c35ade1d..3fbf4d1c 100644
Binary files a/project/images/bg.jpg and b/project/images/bg.jpg differ
diff --git a/project/images/bg2.jpg b/project/images/bg2.jpg
deleted file mode 100644
index 3fbf4d1c..00000000
Binary files a/project/images/bg2.jpg and /dev/null differ
diff --git a/project/images/brave.png b/project/images/brave.png
index c5e901d2..9855ef69 100644
Binary files a/project/images/brave.png and b/project/images/brave.png differ
diff --git a/project/items.js b/project/items.js
index 2a6459e4..289c494a 100644
--- a/project/items.js
+++ b/project/items.js
@@ -297,16 +297,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"name": "圣水",
"itemEffect": "core.status.hero.hp *= 2",
"itemEffectTip": ",生命值翻倍",
- "useItemEffect": "core.status.hero.hp *= 2; core.playSound('回血');",
+ "useItemEffect": "core.status.hero.hp *= 2;\ncore.playSound('回血');",
"canUseItemEffect": "true",
"text": "生命值翻倍"
},
- "silverCoin": {
- "cls": "items",
- "name": "银币",
- "itemEffect": "core.status.hero.money += 500",
- "itemEffectTip": ",金币+500"
- },
"book": {
"cls": "constants",
"name": "怪物手册",
@@ -381,8 +375,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"cls": "tools",
"name": "破冰镐",
"text": "可以破坏勇士面前的一堵冰墙",
- "useItemEffect": "(function () {\n\tcore.removeBlock(core.nextX(), core.nextY());\n\tcore.playSound('打开界面');\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n})();",
- "canUseItemEffect": "(function () {\n\treturn core.getBlockId(core.nextX(), core.nextY()) == 'ice' || core.getBlockId(core.nextX(), core.nextY()) == 'iceDoor';\n})();"
+ "useItemEffect": "(function () {\n\tcore.openDoor(core.nextX(), core.nextY(), false);\n\tcore.playSound('破冰镐');\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n})();",
+ "canUseItemEffect": "(function () {\n\treturn core.getBlockId(core.nextX(), core.nextY()) == 'ice';\n})();"
},
"bomb": {
"cls": "tools",
@@ -416,35 +410,35 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"cls": "tools",
"name": "地震卷轴",
"text": "可以破坏当前层的所有墙",
- "useItemEffect": "(function () {\n\tvar indexes = [];\n\tfor (var index in core.status.thisMap.blocks) {\n\t\tvar block = core.status.thisMap.blocks[index];\n\t\tif (!block.disable && block.event.canBreak) {\n\t\t\tindexes.push(index);\n\t\t}\n\t}\n\tcore.removeBlockByIndexes(indexes);\n\tcore.drawMap();\n\tcore.playSound('打开界面');\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n})();",
+ "useItemEffect": "(function () {\n\tvar indexes = [];\n\tfor (var index in core.status.thisMap.blocks) {\n\t\tvar block = core.status.thisMap.blocks[index];\n\t\tif (!block.disable && block.event.canBreak) {\n\t\t\tindexes.push(index);\n\t\t}\n\t}\n\tcore.removeBlockByIndexes(indexes);\n\tcore.drawMap();\n\tcore.playSound('炸弹');\n\tcore.drawTip(core.material.items[itemId].name + '使用成功');\n})();",
"canUseItemEffect": "(function () {\n\treturn core.status.thisMap.blocks.filter(function (block) {\n\t\treturn !block.disable && block.event.canBreak;\n\t}).length > 0;\n})();"
},
"poisonWine": {
"cls": "tools",
"name": "解毒药水",
"text": "可以解除中毒状态",
- "useItemEffect": "core.triggerDebuff('remove', 'poison');",
+ "useItemEffect": "core.triggerDebuff('remove', 'poison');\ncore.playSound('回血');",
"canUseItemEffect": "core.hasFlag('poison');"
},
"weakWine": {
"cls": "tools",
"name": "解衰药水",
"text": "可以解除衰弱状态",
- "useItemEffect": "core.triggerDebuff('remove', 'weak');",
+ "useItemEffect": "core.triggerDebuff('remove', 'weak');\ncore.playSound('回血');",
"canUseItemEffect": "core.hasFlag('weak');"
},
"curseWine": {
"cls": "tools",
"name": "解咒药水",
"text": "可以解除诅咒状态",
- "useItemEffect": "core.triggerDebuff('remove', 'curse');",
+ "useItemEffect": "core.triggerDebuff('remove', 'curse');\ncore.playSound('回血');",
"canUseItemEffect": "core.hasFlag('curse');"
},
"superWine": {
"cls": "tools",
"name": "万能药水",
"text": "可以解除所有不良状态",
- "useItemEffect": "core.triggerDebuff('remove', ['poison', 'weak', 'curse']);",
+ "useItemEffect": "core.triggerDebuff('remove', ['poison', 'weak', 'curse']);\ncore.playSound('回血');",
"canUseItemEffect": "(function() {\n\treturn core.hasFlag('poison') || core.hasFlag('weak') || core.hasFlag('curse');\n})();"
},
"hammer": {
@@ -473,6 +467,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"type": "input",
"text": "请输入生命魔杖使用次数:(0-${item:lifeWand})"
},
+ {
+ "type": "comment",
+ "text": "【接受用户输入】弹窗输入的结果将会保存在“flag:input”中\n如果需要更多帮助,请查阅帮助文档"
+ },
{
"type": "if",
"condition": "flag:input<=item:lifeWand",
@@ -524,5 +522,11 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"wand": {
"cls": "items",
"name": "新物品"
+ },
+ "pack": {
+ "cls": "items",
+ "name": "钱袋",
+ "itemEffect": "core.status.hero.money += 500",
+ "itemEffectTip": ",金币+500"
}
}
\ No newline at end of file
diff --git a/project/maps.js b/project/maps.js
index 902b6598..c8211a5e 100644
--- a/project/maps.js
+++ b/project/maps.js
@@ -5,7 +5,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"3": {"cls":"animates","id":"blueWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}},
"4": {"cls":"animates","id":"star","name":"星空"},
"5": {"cls":"animates","id":"lava","name":"岩浆"},
- "6": {"cls":"terrains","id":"ice"},
+ "6": {"cls":"animates","id":"ice","doorInfo":{"time":160,"openSound":"icepickaxe.mp3","closeSound":"door.mp3","keys":{"specialKey":1}},"animate":1},
"7": {"cls":"terrains","id":"blueShopLeft"},
"8": {"cls":"terrains","id":"blueShopRight"},
"9": {"cls":"terrains","id":"pinkShopLeft"},
@@ -14,7 +14,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"12": {"cls":"animates","id":"poisonNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'poison');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性毒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"毒网"},
"13": {"cls":"animates","id":"weakNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'weak');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性衰网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"衰网"},
"14": {"cls":"animates","id":"curseNet","canPass":true,"trigger":"null","script":"(function () {\n\tif (!core.hasItem('amulet')) {\n\t\tcore.triggerDebuff('get', 'curse');\n\t\tcore.updateStatusBar();\n\t}\n\n\t// 如果要做一次性咒网,可直接注释掉下面这句话:\n\t// core.removeBlock(core.getHeroLoc('x'), core.getHeroLoc('y'));\n})()","name":"咒网"},
- "15": {"cls":"animates","id":"blueWater"},
+ "15": {"cls":"animates","id":"blueLava"},
"16": {"cls":"animates","id":"water"},
"20": {"cls":"autotile","id":"autotile"},
"21": {"cls":"items","id":"yellowKey"},
@@ -59,7 +59,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"60": {"cls":"items","id":"curseWine"},
"61": {"cls":"items","id":"superWine"},
"62": {"cls":"items","id":"dagger"},
- "63": {"cls":"items","id":"silverCoin"},
+ "63": {"cls":"items","id":"pack"},
"64": {"cls":"items","id":"amulet"},
"65": {"cls":"items","id":"hammer"},
"68": {"cls":"items","id":"lifeWand"},
@@ -86,10 +86,6 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"102": {"cls":"animates","id":"crystalBottom"},
"103": {"cls":"animates","id":"fire"},
"104": {"cls":"animates","id":"switch"},
- "105": {"cls":"animates","id":"steelDoor2","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"},
- "106": {"cls":"animates","id":"steelDoor3","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"},
- "107": {"cls":"animates","id":"iceDoor","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"},
- "108": {"cls":"animates","id":"iceDoor2","doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}},"animate":1,"trigger":"openDoor"},
"109": {"cls":"animates","id":"magentaWall","canBreak":true,"animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{}}},
"121": {"cls":"npcs","id":"man"},
"122": {"cls":"npcs","id":"trader"},
@@ -109,8 +105,6 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"136": {"cls":"npc48","id":"npc3","faceIds":{"down":"npc0","left":"npc1","right":"npc2","up":"npc3"},"animate":1},
"137": {"cls":"npcs","id":"greenMan"},
"138": {"cls":"npcs","id":"blueTrader"},
- "139": {"cls":"npcs","id":"redMSNpc"},
- "140": {"cls":"npcs","id":"blackTrader"},
"151": {"cls":"autotile","id":"autotile1"},
"152": {"cls":"autotile","id":"autotile2"},
"153": {"cls":"autotile","id":"autotile3"},
@@ -207,15 +201,10 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"265": {"cls":"enemys","id":"silverSlimelord"},
"266": {"cls":"enemys","id":"goldSlimelord"},
"267": {"cls":"enemys","id":"grayRock"},
- "268": {"cls":"enemys","id":"blueRock"},
- "269": {"cls":"enemys","id":"skeletonLite"},
"270": {"cls":"enemys","id":"greenKnight"},
"271": {"cls":"enemys","id":"bowman"},
- "272": {"cls":"enemys","id":"liteBowman"},
- "273": {"cls":"enemys","id":"crimsonZombie"},
- "274": {"cls":"enemys","id":"frozenSkeleton"},
+ "272": {"cls":"enemys","id":"purpleBowman"},
"275": {"cls":"enemys","id":"watcherSlime"},
- "276": {"cls":"enemys","id":"mutantSlimeman"},
"277": {"cls":"enemys","id":"frostBat"},
"278": {"cls":"enemys","id":"devilKnight"},
"279": {"cls":"enemys","id":"grayPriest"},
@@ -238,5 +227,13 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"315": {"cls":"terrains","id":"sWallBLR","name":"薄墙-下左右","cannotOut":["down","left","right"],"cannotIn":["down","left","right"]},
"316": {"cls":"terrains","id":"sWallTLR","name":"薄墙-上左右","cannotOut":["up","left","right"],"cannotIn":["up","left","right"]},
"317": {"cls":"terrains","id":"sWallTBR","name":"薄墙-上下右","cannotOut":["up","down","right"],"cannotIn":["up","down","right"]},
- "318": {"cls":"terrains","id":"sWallTBL","name":"薄墙-上下左","cannotOut":["up","down","left"],"cannotIn":["up","down","left"]}
+ "318": {"cls":"terrains","id":"sWallTBL","name":"薄墙-上下左","cannotOut":["up","down","left"],"cannotIn":["up","down","left"]},
+ "319": {"cls":"npc48","id":"tallYellowDoor","trigger":"openDoor","name":"高黄门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"yellowKey":1}}},
+ "320": {"cls":"npc48","id":"tallBlueDoor","trigger":"openDoor","name":"高蓝门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"blueKey":1}}},
+ "321": {"cls":"npc48","id":"tallRedDoor","trigger":"openDoor","name":"高红门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"redKey":1}}},
+ "322": {"cls":"npc48","id":"tallGreenDoor","trigger":"openDoor","name":"高绿门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"greenKey":1}}},
+ "323": {"cls":"npc48","id":"tallSpecialDoor","trigger":"openDoor","name":"高机关门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"specialKey":1}}},
+ "324": {"cls":"npc48","id":"tallSteelDoor","trigger":"openDoor","name":"高铁门","animate":1,"doorInfo":{"time":160,"openSound":"door.mp3","closeSound":"door.mp3","keys":{"steelKey":1}}},
+ "325": {"cls":"enemys","id":"keiskeiFairy"},
+ "326": {"cls":"enemys","id":"tulipFairy"}
}
\ No newline at end of file
diff --git a/project/materials/animates.png b/project/materials/animates.png
index 266475fc..89d87898 100644
Binary files a/project/materials/animates.png and b/project/materials/animates.png differ
diff --git a/project/materials/enemys.png b/project/materials/enemys.png
index 0e4b678a..2b3641ca 100644
Binary files a/project/materials/enemys.png and b/project/materials/enemys.png differ
diff --git a/project/materials/icons.png b/project/materials/icons.png
index 4e00f6c3..9e17e786 100644
Binary files a/project/materials/icons.png and b/project/materials/icons.png differ
diff --git a/project/materials/items.png b/project/materials/items.png
index 7d643b83..04dc29b2 100644
Binary files a/project/materials/items.png and b/project/materials/items.png differ
diff --git a/project/materials/keyboard.png b/project/materials/keyboard.png
index b72ee111..5928c832 100644
Binary files a/project/materials/keyboard.png and b/project/materials/keyboard.png differ
diff --git a/project/materials/npc48.png b/project/materials/npc48.png
index 5b5b0fec..d857f2da 100644
Binary files a/project/materials/npc48.png and b/project/materials/npc48.png differ
diff --git a/project/materials/npcs.png b/project/materials/npcs.png
index d7cf7761..e37d3498 100644
Binary files a/project/materials/npcs.png and b/project/materials/npcs.png differ
diff --git a/project/materials/terrains.png b/project/materials/terrains.png
index ad676a71..b98485c6 100644
Binary files a/project/materials/terrains.png and b/project/materials/terrains.png differ
diff --git a/project/plugins.js b/project/plugins.js
index 10be4bb0..254d451d 100644
--- a/project/plugins.js
+++ b/project/plugins.js
@@ -169,7 +169,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
"text": choice.text,
"icon": choice.icon,
"color": ableToBuy && !previewMode ? choice.color : [153, 153, 153, 1],
- "action": ableToBuy && !previewMode ? [{ "type": "playSound", "name": "确定" }].concat(choice.action) : [
+ "action": ableToBuy && !previewMode ? [{ "type": "playSound", "name": "商店" }].concat(choice.action) : [
{ "type": "playSound", "name": "操作失败" },
{ "type": "tip", "text": previewMode ? "预览模式下不可购买" : "购买条件不足" }
]
diff --git a/project/sounds/attack.mp3 b/project/sounds/attack.mp3
index 259b759e..16098f7d 100644
Binary files a/project/sounds/attack.mp3 and b/project/sounds/attack.mp3 differ
diff --git a/project/sounds/bomb.mp3 b/project/sounds/bomb.mp3
index bf65b83a..8a980672 100644
Binary files a/project/sounds/bomb.mp3 and b/project/sounds/bomb.mp3 differ
diff --git a/project/sounds/cancel.mp3 b/project/sounds/cancel.mp3
index b0eb456b..3842eee6 100644
Binary files a/project/sounds/cancel.mp3 and b/project/sounds/cancel.mp3 differ
diff --git a/project/sounds/error.mp3 b/project/sounds/error.mp3
index 329cca45..7d572668 100644
Binary files a/project/sounds/error.mp3 and b/project/sounds/error.mp3 differ
diff --git a/project/sounds/gem.mp3 b/project/sounds/gem.mp3
new file mode 100644
index 00000000..c29b9df6
Binary files /dev/null and b/project/sounds/gem.mp3 differ
diff --git a/project/sounds/icePickaxe.mp3 b/project/sounds/icePickaxe.mp3
new file mode 100644
index 00000000..29ed9b0d
Binary files /dev/null and b/project/sounds/icePickaxe.mp3 differ
diff --git a/project/sounds/open_ui.mp3 b/project/sounds/open_ui.mp3
index 0282a089..31da851d 100644
Binary files a/project/sounds/open_ui.mp3 and b/project/sounds/open_ui.mp3 differ
diff --git a/project/sounds/pickaxe.mp3 b/project/sounds/pickaxe.mp3
index be59c534..f6dc2584 100644
Binary files a/project/sounds/pickaxe.mp3 and b/project/sounds/pickaxe.mp3 differ
diff --git a/project/sounds/recovery.mp3 b/project/sounds/recovery.mp3
index 09075e04..76b67f3e 100644
Binary files a/project/sounds/recovery.mp3 and b/project/sounds/recovery.mp3 differ
diff --git a/project/sounds/zone.mp3 b/project/sounds/zone.mp3
index eccf53c8..414b2874 100644
Binary files a/project/sounds/zone.mp3 and b/project/sounds/zone.mp3 differ
diff --git a/project/tilesets/magictower.png b/project/tilesets/magictower.png
index 81ed1067..dfca8775 100644
Binary files a/project/tilesets/magictower.png and b/project/tilesets/magictower.png differ