Compare commits
	
		
			6 Commits
		
	
	
		
			31f6a76b4b
			...
			4cfa92280b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4cfa92280b | |||
| 2652b6e071 | |||
| 239770edda | |||
| b59c0814e4 | |||
| 2d58f0662c | |||
| 12a319f7c6 | 
| @ -1946,10 +1946,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = | ||||
| 			{ | ||||
| 				"type": "insert", | ||||
| 				"name": "强制横屏" | ||||
| 			}, | ||||
| 			{ | ||||
| 				"type": "insert", | ||||
| 				"name": "chapter0" | ||||
| 			} | ||||
| 		], | ||||
| 		"shops": [ | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| main.floors.chushi= | ||||
| { | ||||
|     "floorId": "chushi", | ||||
|     "title": "抉择", | ||||
|     "title": "开场剧情", | ||||
|     "name": "1", | ||||
|     "width": 13, | ||||
|     "height": 13, | ||||
| @ -12,6 +12,10 @@ main.floors.chushi= | ||||
|     "ratio": 1, | ||||
|     "defaultGround": "T400", | ||||
|     "firstArrive": [ | ||||
|         { | ||||
|             "type": "insert", | ||||
|             "name": "chapter0" | ||||
|         }, | ||||
|         { | ||||
|             "type": "confirm", | ||||
|             "text": "要进行教程内容吗", | ||||
| @ -63,7 +67,7 @@ main.floors.chushi= | ||||
|     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0], | ||||
|     [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0] | ||||
| ], | ||||
|     "areas": "抉择", | ||||
|     "areas": "开场剧情", | ||||
|     "bgmap": [ | ||||
| 
 | ||||
| ], | ||||
|  | ||||
| @ -31,19 +31,68 @@ main.floors.jiaocheng01= | ||||
|             "血瓶介绍:不同大小" | ||||
|         ], | ||||
|         "5,7": [ | ||||
|             "\t[小妖精,fairy]一种颜色的钥匙开一种颜色的门。\n一把钥匙只能开一扇门。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "from": [ | ||||
|                     5, | ||||
|                     7 | ||||
|                 ], | ||||
|                 "to": [ | ||||
|                     2, | ||||
|                     2 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|                 "type": "choices", | ||||
|                 "text": "\t[小妖精,fairy]是否要进行钥匙和宝物方面的教学呢?", | ||||
|                 "choices": [ | ||||
|                     { | ||||
|                         "text": "我太需要了", | ||||
|                         "action": [ | ||||
|                             "\t[小妖精,fairy]一种颜色的钥匙开一种颜色的门。\n一把钥匙只能开一扇门。", | ||||
|                             "\t[小妖精,fairy]除了钥匙以外,地图上常见的宝物还有宝石和血瓶。\n血瓶可以增加角色的生命值。\n血瓶的颜色、样式和所处的区域决定了血瓶增加的生命值数量。\n在第一个区域,四种颜色的基础血瓶分别可以回复角色100,\n250,500和900点生命值。", | ||||
|                             "\t[小妖精,fairy]宝石可以增加角色的四维。\n红宝石增加攻击力。\n蓝宝石增加防御力。\n绿宝石增加法术强度。\n黄宝石增加速度。", | ||||
|                             "\t[小妖精,fairy]不同样式、不同区域的宝石决定了宝石增加的能力幅度。\n在第一个区域,红、蓝、黄色的基础宝石可以增加角色对应能力2点。\n绿色的基础宝石可以增加角色法术强度5点。", | ||||
|                             { | ||||
|                                 "type": "jump", | ||||
|                                 "to": [ | ||||
|                                     2, | ||||
|                                     2 | ||||
|                                 ], | ||||
|                                 "time": 500, | ||||
|                                 "keep": true | ||||
|                             } | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         "text": "我已经了解了", | ||||
|                         "action": [ | ||||
|                             { | ||||
|                                 "type": "setValue", | ||||
|                                 "name": "flag:跳过1", | ||||
|                                 "value": "1" | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "jump", | ||||
|                                 "to": [ | ||||
|                                     6, | ||||
|                                     1 | ||||
|                                 ], | ||||
|                                 "time": 500, | ||||
|                                 "keep": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         2, | ||||
|                                         2 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "remove": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         8, | ||||
|                                         1 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "remove": true | ||||
|                             } | ||||
|                         ] | ||||
|                     } | ||||
|                 ] | ||||
|             } | ||||
|         ], | ||||
|         "2,2": [ | ||||
| @ -86,7 +135,7 @@ main.floors.jiaocheng01= | ||||
|         "6,1": [ | ||||
|             { | ||||
|                 "type": "if", | ||||
|                 "condition": "(flag:教程1===1)", | ||||
|                 "condition": "((Math.max(flag:教程1,flag:跳过1))===1)", | ||||
|                 "true": [ | ||||
|                     "\t[小妖精,fairy]接下来就要开始适应本游戏的战斗系统了——", | ||||
|                     "\t[小妖精,fairy]在此之前,让我先确认一下吧。\n你拥有黄钥匙和蓝钥匙各一把,对吗?", | ||||
| @ -95,6 +144,92 @@ main.floors.jiaocheng01= | ||||
|                     "\t[小妖精,fairy]换句话说,本作的战斗过程只依赖于战斗双方的各项数据。\n这包括双方的面板数值,各种技能,和多样的装备。", | ||||
|                     "\t[小妖精,fairy]本作还有另外一个特点——地图上的资源是有限的,并不会随时间自动刷新。\n这意味着不能在低级图反复刷取资源来碾压高级的怪物,必须仔细规划资源的获取及使用。", | ||||
|                     "\t[小妖精,fairy]在手部乘区、脸部乘区、肝部乘区都被限制住的情况下——\n请开发自己的脑部乘区,迎接后面的挑战吧!", | ||||
|                     { | ||||
|                         "type": "choices", | ||||
|                         "text": "\t[小妖精,fairy]是否需要进行简单的战斗系统讲解呢?", | ||||
|                         "choices": [ | ||||
|                             { | ||||
|                                 "text": "我太需要了", | ||||
|                                 "action": [] | ||||
|                             }, | ||||
|                             { | ||||
|                                 "text": "我已经很会了", | ||||
|                                 "action": [ | ||||
|                                     { | ||||
|                                         "type": "hide", | ||||
|                                         "loc": [ | ||||
|                                             [ | ||||
|                                                 9, | ||||
|                                                 10 | ||||
|                                             ] | ||||
|                                         ], | ||||
|                                         "floorId": "jiaocheng02", | ||||
|                                         "remove": true | ||||
|                                     }, | ||||
|                                     { | ||||
|                                         "type": "hide", | ||||
|                                         "loc": [ | ||||
|                                             [ | ||||
|                                                 11, | ||||
|                                                 8 | ||||
|                                             ] | ||||
|                                         ], | ||||
|                                         "floorId": "jiaocheng02", | ||||
|                                         "remove": true | ||||
|                                     }, | ||||
|                                     { | ||||
|                                         "type": "hide", | ||||
|                                         "loc": [ | ||||
|                                             [ | ||||
|                                                 11, | ||||
|                                                 4 | ||||
|                                             ] | ||||
|                                         ], | ||||
|                                         "floorId": "jiaocheng02", | ||||
|                                         "remove": true | ||||
|                                     }, | ||||
|                                     { | ||||
|                                         "type": "hide", | ||||
|                                         "loc": [ | ||||
|                                             [ | ||||
|                                                 7, | ||||
|                                                 4 | ||||
|                                             ] | ||||
|                                         ], | ||||
|                                         "floorId": "jiaocheng02", | ||||
|                                         "remove": true | ||||
|                                     }, | ||||
|                                     { | ||||
|                                         "type": "hide", | ||||
|                                         "loc": [ | ||||
|                                             [ | ||||
|                                                 5, | ||||
|                                                 2 | ||||
|                                             ] | ||||
|                                         ], | ||||
|                                         "floorId": "jiaocheng02", | ||||
|                                         "remove": true | ||||
|                                     }, | ||||
|                                     { | ||||
|                                         "type": "setBlock", | ||||
|                                         "number": "fairy", | ||||
|                                         "loc": [ | ||||
|                                             [ | ||||
|                                                 4, | ||||
|                                                 9 | ||||
|                                             ] | ||||
|                                         ], | ||||
|                                         "floorId": "jiaocheng02" | ||||
|                                     }, | ||||
|                                     { | ||||
|                                         "type": "setValue", | ||||
|                                         "name": "flag:跳过2", | ||||
|                                         "value": "1" | ||||
|                                     } | ||||
|                                 ] | ||||
|                             } | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         "type": "hide", | ||||
|                         "remove": true | ||||
| @ -114,16 +249,8 @@ main.floors.jiaocheng01= | ||||
|     }, | ||||
|     "beforeBattle": {}, | ||||
|     "afterBattle": {}, | ||||
|     "afterGetItem": { | ||||
|         "6,9": [ | ||||
|             "\t[黄钥匙,yellowKey]可以打开一扇黄门,使用后会消失" | ||||
|         ] | ||||
|     }, | ||||
|     "afterOpenDoor": { | ||||
|         "8,10": [ | ||||
|             "\t[黄门,yellowDoor]消耗一把黄钥匙" | ||||
|         ] | ||||
|     }, | ||||
|     "afterGetItem": {}, | ||||
|     "afterOpenDoor": {}, | ||||
|     "autoEvent": {}, | ||||
|     "cannotMove": {}, | ||||
|     "cannotMoveIn": {}, | ||||
|  | ||||
| @ -75,6 +75,211 @@ main.floors.jiaocheng02= | ||||
|             } | ||||
|         ], | ||||
|         "11,4": [ | ||||
|             "\t[小妖精,fairy]与其他魔塔游戏不同的是,本作不仅引入了“速度”属性,还引入了实时战斗系统。\n这将带来比回合制战斗更丰富,更具有策略性的战斗体验。", | ||||
|             "\t[小妖精,fairy]在本作中,“速度”意味着角色进行一次攻击前摇的快慢程度。没有特殊说明的话,本作不涉及攻击后摇。\n现在角色的速度为16,这意味着在单位时间内,角色可以攻击16次。\n战斗开始时,参战的双方互相向对方表露敌意,并开始分别计算攻击前摇。\n另一方面,速度和攻击前摇挂钩,意味着角色下一次攻击的时刻以上一次攻击落下时的速度为准;在此之后受到任何额外的减速效果,都只会影响到再下一次攻击。", | ||||
|             "\t[小妖精,fairy]在刚才的战斗中,怪物的速度为18,角色的速度为16。\n因此在互相展现敌意后,怪物的攻击先命中角色,随后才是角色对怪物造成伤害。\n此后双方一直匀速造成伤害。", | ||||
|             "\t[小妖精,fairy]战斗结束于8次攻击/16速度=0.5时刻。\n此时角色攻击8次,完成对怪物的击杀;与此同时,怪物的第9次攻击前摇刚好准备完毕。\n在本作的战斗系统中,如果怪物死亡时刻正好作出一次攻击(时刻完全相同)的话,视为这次攻击有效!\n因此,角色在之前的战斗中受到怪物刚好9次伤害。", | ||||
|             "\t[小妖精,fairy]接下来,请获取黄门中的2颗黄宝石,将角色的速度从16提升到20。\n面对相同的敌人,提升速度又会展现什么效果呢?", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     7, | ||||
|                     4 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "7,4": [ | ||||
|             { | ||||
|                 "type": "if", | ||||
|                 "condition": "(status:hp!==380)", | ||||
|                 "true": [ | ||||
|                     "\t[小妖精,fairy]都告诉你要获取黄宝石啦!地图上的生命资源并不是那么充足!再浪费的话后面肯定不够啦!", | ||||
|                     "\t[小妖精,fairy]请读取自动存档,回去拿完宝石再与敌人作战!" | ||||
|                 ], | ||||
|                 "false": [ | ||||
|                     "\t[小妖精,fairy]在提升速度后,角色可以在更短的时间内打出足以击杀怪物的攻击频率。\n相比获取宝石之前,角色的攻击前摇快了25%。", | ||||
|                     "\t[小妖精,fairy]虽然攻击威力没有变化,仍然需要8次攻击才能击杀怪物,但战斗时间却实打实地从0.5降低到了0.4。\n在0.4时刻之前,怪物最多只能打出18*0.4=7次攻击。\n当然,提升攻击力降低战斗伤害的本质也是缩短战斗时间,从而让怪物的攻击频率缩短。", | ||||
|                     "\t[小妖精,fairy]但要注意——不是所有时候提升速度都能降低角色受到的攻击次数。\n如果角色的速度从21提升到24,击杀怪物需要的时间将由8/21=0.381变为0.333。(实际计算中具体时刻将保留14位小数,确保精确)\n怪物的第6次攻击于0.333时刻落下,而第7次攻击将于0.389时刻落下。\n因此,将击杀怪物的时刻从0.381提前到0.333,不影响怪物的第6和第7次攻击,从而不会降低伤害。", | ||||
|                     "\t[小妖精,fairy]因此,能带来战斗伤害减少的速度提升节点也特别重要——我们也称之为“临界”。\n从最初的需要8次攻击击杀,16点速度,0.5时刻击杀怪物开始计算(当然是计算怪物的时间轴)——\n怪物的第8次攻击落于0.444时刻,第9次攻击落于0.5时刻。\n速度达到17时,击杀时刻为8/17=0.471;速度达到19时,击杀时刻为8/19=0.421,刚好在怪物的第9次和第8次攻击之前。", | ||||
|                     { | ||||
|                         "type": "callBook" | ||||
|                     }, | ||||
|                     "\t[小妖精,fairy]同理,以现在的状态开始计算。现在我们需要0.4的攻击时间击杀怪物。\n怪物最后一次的攻击时刻为0.389;我们提升1点速度将会使我们的最后一次攻击时刻提前到0.381,从而少受到一次怪物的攻击——这1点速度就是一个速度临界值。继续提升速度,就需要考虑怪物在0.333时刻的攻击。", | ||||
|                     "\t[小妖精,fairy]我们的速度距离下一个临界点还差1点;达到临界点可以让我们受到的伤害减少50点。\n在怪物手册中记作[1,50]或\"1:50\"。速度临界值和临界表暂时需要到怪物手册中才能查阅。", | ||||
|                     "\t[小妖精,fairy]捡起后面的血瓶和黄钥匙,补充生命值继续后面的内容吧!", | ||||
|                     { | ||||
|                         "type": "jump", | ||||
|                         "to": [ | ||||
|                             5, | ||||
|                             2 | ||||
|                         ], | ||||
|                         "time": 500, | ||||
|                         "keep": true | ||||
|                     } | ||||
|                 ] | ||||
|             } | ||||
|         ], | ||||
|         "5,2": [ | ||||
|             "\t[小妖精,fairy]防御是另一个非常重要的属性。\n与攻击和速度相比,防御是通过降低被怪物攻击的单次伤害来减少战斗损失的。\n对物理攻击的怪物来说,每一点防御都能起到应有的作用。", | ||||
|             "\t[小妖精,fairy]而且角色的防御与敌人的攻击越接近,防御的减伤效果越好。\n一般来说,如果只考虑攻击和防御的话,攻防和高于怪物的时候,防御的减伤效果比攻击更好。", | ||||
|             "\t[小妖精,fairy]在刚才的战斗中,怪物的攻击为28,角色的防御为16。怪物每次攻击对角色造成12点伤害。\n在获取黄门中的2颗蓝宝石后,角色的防御将从16提升到20,怪物的攻击将仅造成8点伤害。", | ||||
|             { | ||||
|                 "type": "callBook" | ||||
|             }, | ||||
|             "\t[小妖精,fairy]当然,1点防御的具体减伤价值,和战斗中角色受到的物理攻击次数有关,且怪物的特殊属性经常会造成影响。\n以刚才的战斗为例,角色总共被怪物攻击34次。\n1点防御将使怪物造成的普通攻击物理伤害减少1点,从而降低战斗伤害34点。\n同理,对于之前战斗过的两个怪物,1点防御对它们的价值分别是9点和7点减伤。", | ||||
|             "\t[小妖精,fairy]但对于初级法师来说——由于初级法师的攻击类型是魔法攻击,物理防御不能起到作用。\n因此尽管怪物出手次数为2,1点防御也无法减少任何伤害。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     4, | ||||
|                     9 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "4,9": [ | ||||
|             { | ||||
|                 "type": "if", | ||||
|                 "condition": "(flag:跳过2!==1)", | ||||
|                 "true": [ | ||||
|                     "\t[小妖精,fairy]接下来要介绍的是最后一个主要战斗属性——法强。\n任何生灵都有属于自己的魔法能量——只是他们大多数不知道如何去使用。\n在本作的初始阶段,角色不了解魔法的运作方式,自身所有的魔法能量都在无意识地保护自己。\n1点魔法强度可以给角色带来1点护盾效果——每次战斗(而不是每回合)抵挡1点战斗伤害。\n这个护盾效果可以抵挡所有种类的伤害,不拘泥于物理,魔法或真实伤害。", | ||||
|                     "\t[小妖精,fairy]对于不懂如何使用魔法的怪物而言,其魔法能量被简单地合并到其生命值中进行计算。\n但对于会使用魔法攻击的怪物而言,其普通攻击或技能将造成魔法伤害。\n在怪物手册中,怪物普通攻击的魔法攻击力将显示在“法强”一栏。", | ||||
|                     { | ||||
|                         "type": "callBook" | ||||
|                     }, | ||||
|                     "\t[小妖精,fairy]怪物造成的魔法伤害无法通过简单地提高攻击/防御/速度抵挡。\n但有些装备可以提供百分比的法抗(魔法伤害抗性)。\n携带多件百分比法抗装备的话,抗性乘法叠加计算。", | ||||
|                     "\t[小妖精,fairy]当然,在携带特定装备后,角色也有着使用魔法攻击的机会。\n不同类型的法杖将允许角色以不同比例将魔法能量向魔法攻击力转化。\n当然,因为角色将一部分魔力用于攻击,剩余支撑护盾的魔力就没那么多了。\n具体的魔法攻击力和护盾强度,将显示在状态栏对应比例的括号外面。\n括号里面的百分比是魔法能量以多大的比例转化为魔法攻击力和护盾。" | ||||
|                 ] | ||||
|             }, | ||||
|             { | ||||
|                 "type": "choices", | ||||
|                 "text": "\t[小妖精,fairy]现在,你已经熟悉了简单的战斗系统。\n接下来的进阶部分,还需要我的引导嘛?", | ||||
|                 "choices": [ | ||||
|                     { | ||||
|                         "text": "我太需要了", | ||||
|                         "action": [ | ||||
|                             { | ||||
|                                 "type": "jump", | ||||
|                                 "to": [ | ||||
|                                     2, | ||||
|                                     12 | ||||
|                                 ], | ||||
|                                 "time": 500, | ||||
|                                 "keep": true | ||||
|                             } | ||||
|                         ] | ||||
|                     }, | ||||
|                     { | ||||
|                         "text": "这还是太简单了", | ||||
|                         "action": [ | ||||
|                             { | ||||
|                                 "type": "jump", | ||||
|                                 "to": [ | ||||
|                                     5, | ||||
|                                     0 | ||||
|                                 ], | ||||
|                                 "time": 500 | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         2, | ||||
|                                         12 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "remove": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         6, | ||||
|                                         11 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "floorId": "jiaocheng03", | ||||
|                                 "remove": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         6, | ||||
|                                         9 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "floorId": "jiaocheng03", | ||||
|                                 "remove": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         6, | ||||
|                                         7 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "floorId": "jiaocheng03", | ||||
|                                 "remove": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         6, | ||||
|                                         4 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "floorId": "jiaocheng03", | ||||
|                                 "remove": true | ||||
|                             }, | ||||
|                             { | ||||
|                                 "type": "hide", | ||||
|                                 "loc": [ | ||||
|                                     [ | ||||
|                                         6, | ||||
|                                         2 | ||||
|                                     ] | ||||
|                                 ], | ||||
|                                 "floorId": "jiaocheng03", | ||||
|                                 "remove": true | ||||
|                             } | ||||
|                         ] | ||||
|                     } | ||||
|                 ] | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "2,12": [ | ||||
|             "\t[小妖精,fairy]这里是一个非常简单的生命价值判断。\n首先,我们的生命和路上的血瓶不足以让我们携带2把蓝钥匙击败把守着绿色血瓶的怪物。\n其次,路上没有任何机会获得宝石,提高能力,来减少战斗伤害。\n因此,我们至少要打开一扇蓝门来保存血量。\n当然,考虑到后面需要使用蓝钥匙来换取战斗属性以击败更强大的敌人,这里只允许打开一扇蓝门。", | ||||
|             "\t[小妖精,fairy]我们一共有2个选择:打开中间的蓝门绕开怪物前进,或者击败一个怪物并打开蓝门获取250生命值的血瓶。", | ||||
|             { | ||||
|                 "type": "callBook" | ||||
|             }, | ||||
|             "\t[小妖精,fairy]首先,观察到所有怪物的金币、经验均为0点。这意味着不需要清理怪物获得资源。\n绕过挡路的怪物取得900血瓶的这扇蓝门,其生命价值为252-0=252点(为什么不是302点?)。\n而把守250生命值血瓶的蓝门,其生命价值为250点。\n显然,打开绕怪门的收益更大。打开我身后的这扇蓝门,继续后面的内容吧。\n如果在正式游戏过程中可以以0伤害清理怪物获得资源时,也适用这样的计算方法。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     5, | ||||
|                     0 | ||||
|                 ], | ||||
|                 "time": 500 | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
| @ -105,19 +310,19 @@ main.floors.jiaocheng02= | ||||
|     "cannotMove": {}, | ||||
|     "cannotMoveIn": {}, | ||||
|     "map": [ | ||||
|     [  0, 33,  0,217, 31,  0, 91,  1, 28,  1, 30,  1,203], | ||||
|     [  0, 31,  0,217, 33,  0, 91,  1, 28,  1, 30,  1,203], | ||||
|     [216,  1,  0,  1,  1,  1,  1,  1, 28,  1, 30,  1,  1], | ||||
|     [216,  1, 31,  1,  0,  0,  0, 81,  0,  1,  0,  1,211], | ||||
|     [211,  1, 21,  1,216,  1,216,  1,  1,  1, 81,  1,  1], | ||||
|     [  0,  1,  1,  1,  0,  1,  0,  0,  0,211,  0,  0,  0], | ||||
|     [  0,  1, 32,  1,  0,  1,  1,  0,  1,  1,  1,  1,211], | ||||
|     [  0, 81,  0,  1,  0,  1, 21, 33,  1, 33,  0, 81,  0], | ||||
|     [ 31,  1,  1,  1,217,  1,  1,  1,  1,  1,  1,  1, 22], | ||||
|     [ 31,  1, 32,  1,  0,  1,  1,  0,  1,  1,  1,  1,211], | ||||
|     [  0, 82,  0,  1,  0,  1, 21, 33,  1, 33,  0, 81,  0], | ||||
|     [  0,  1,  1,  1,217,  1,  1,  1,  1,  1,  1,  1, 22], | ||||
|     [203,  1, 33,  0,  0, 29, 29, 29, 29,  1,  0,  0,  0], | ||||
|     [  0,  1,  1,  1,  0,  1,  1,  1,  1,  1,203,  1, 82], | ||||
|     [ 33,  0,211,  1,  0,  1,  0,203,  0,124,  0,  1,  0], | ||||
|     [  0, 81,  0,  1,217,  1,  0,  1,  1, 81,  1,  1, 21], | ||||
|     [216,  0,  0, 21,  0,  1, 93,  1, 27,  0, 27,  1, 21] | ||||
|     [  0, 82,  0,  1,217,  1,  0,  1,  1, 81,  1,  1, 21], | ||||
|     [216,  0,  0, 22,  0,  1, 93,  1, 27,  0, 27,  1, 21] | ||||
| ], | ||||
|     "areas": "教程", | ||||
|     "bgmap": [ | ||||
|  | ||||
| @ -22,6 +22,10 @@ main.floors.jiaocheng03= | ||||
|             "法杖:魔攻比例10%,魔防比例0%" | ||||
|         ], | ||||
|         "6,0": [ | ||||
|             { | ||||
|                 "type": "setHeroOpacity", | ||||
|                 "opacity": 0 | ||||
|             }, | ||||
|             { | ||||
|                 "type": "changeFloor", | ||||
|                 "floorId": "guangchang", | ||||
| @ -30,6 +34,90 @@ main.floors.jiaocheng03= | ||||
|                     10 | ||||
|                 ] | ||||
|             } | ||||
|         ], | ||||
|         "6,11": [ | ||||
|             "\t[小妖精,fairy]接下来是能力价值判断。\n首先击败我右边的怪物,然后你需要在这三扇黄门中打开正确的一扇。\n打开错误的黄门将使你的生命值不足以抗住战斗伤害,并死亡。\n当然,你随时可以使用读取自动存档功能撤销错误的选择。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     6, | ||||
|                     9 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "6,9": [ | ||||
|             "\t[小妖精,fairy]刚才你应该是选择了红宝石,对吗?\n选择蓝宝石将见不到我,而选择红血瓶你将会因为能力不够而折戟在后面的怪物上。\n在除决战时刻以外的场合,获取能力都应该优于获取生命值,哪怕是看似不起眼的法强/护盾。", | ||||
|             "\t[小妖精,fairy]刚才为什么要增加2点攻击而不是2点防御呢?\n你应该看过了怪物手册才对。\n攻击临界表中有一项\"2:84\",意味着2点攻击可以降低84点战斗伤害。\n而1防减伤仅有36,意味着2点防御仅能降低72点战斗伤害。\n多出来的这部分战斗伤害,暂时是不可承受之重。", | ||||
|             "\t[小妖精,fairy]实际战斗中又应该怎么规划呢?\n观察到,角色的攻击防御之和为50,而怪物的攻击防御之和为56。\n在攻击/防御二选一的时候,一般攻防和高于怪物时加防御效果更好,低于怪物时则选择爆攻击。\n当然,怪物生命极低,角色接近一刀将其秒杀时,加攻击的效果也很好。", | ||||
|             "\t[小妖精,fairy]接下来是含速度的能力价值判断。\n你需要在这三扇红门中打开正确的一扇。\n打开错误的红门将使你的生命值不足以抗住战斗伤害,并死亡。\n当然,你随时可以使用读取自动存档功能撤销错误的选择。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     6, | ||||
|                     7 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "6,7": [ | ||||
|             "\t[小妖精,fairy]刚才你应该是选择了黄宝石,为什么呢?", | ||||
|             "\t[小妖精,fairy]首先排除2点防御力——敌人的单次攻击伤害高达93点,2点防御力的减伤杯水车薪。\n然后是在2点速度和2点攻击力中选择。\n在怪物手册中,速度临界值为1,可以减伤93点;攻击临界值为3,可以减伤93点。\n获取2点攻击力不足以达到怪物的攻击临界值。", | ||||
|             "\t[小妖精,fairy]实际战斗中又应该怎么决策呢?\n提高速度和攻击力都是为了减少被怪物攻击的次数,换句话说,缩短战斗的时间。\n因此,我们追求在更短的时间内打出更高的伤害,也就是更高的DPS。\n观察到,角色对怪物的DPS(速度*单次攻击伤害)为20*30=600。\n提高2点速度将使DPS提升为22*30=660,而提高2点攻击力将使DPS提升为20*32=640。\n简单地说,我们需要增加速度和(攻击-怪物防御)中较小的一项。就是个均值不等式。", | ||||
|             "\t[小妖精,fairy]下一个三选一见。\n怪物的“先攻”特殊属性,意味着怪物已经处于攻击姿态,在角色表现敌意的一霎那就会受到怪物的攻击。\n你需要在这三扇蓝门中打开正确的一扇。\n打开错误的蓝门将使你的生命值不足以抗住战斗伤害,并死亡。\n当然,你随时可以使用读取自动存档功能撤销错误的选择。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     6, | ||||
|                     4 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "6,4": [ | ||||
|             "\t[小妖精,fairy]刚才你应该是选择了1黄宝石1红宝石的组合,但——到底是什么原理?", | ||||
|             "\t[小妖精,fairy]接下来要讲的是本作一个非常隐蔽的现象——混合临界。\n混合临界仅会出现在角色的速度高于怪物速度的时候。\n出现混合临界的条件是,在怪物对角色进行最后一次攻击后,角色进行了两次以上的攻击才击杀了怪物。\n为了方便理解,可以画一个时间轴,从怪物最后一次攻击算起。", | ||||
|             "\t[小妖精,fairy]单纯提高攻击力来降低被攻击次数的话,需要让角色击杀怪物的攻击次数减少2,而不是1。\n在刚才的战斗中,角色的攻击力为32,击杀怪物需要162/(32-1)=6次攻击。\n要达到降低被攻击次数效果的话,将攻击力提升至162/5+1=34点并不足够。\n需要将攻击力提升至162/4+1=42点。", | ||||
|             "\t[小妖精,fairy]同样地,单纯提高速度来降低被攻击次数的话,需要让角色的最后一次攻击提前到怪物攻击之前,而不是倒数第二次攻击。\n在刚才的战斗中,怪物最后一次攻击的时刻为3/14=0.214。\n角色在5/22=0.227,6/22=0.273两个时刻分别攻击了怪物,其中0.273时刻对怪物的攻击造成了击杀。\n要达到降低被攻击次数效果的话,将速度提升至5+/0.214=24点并不足够,因为角色需要6次攻击才能击杀怪物。\n需要将速度提升至6+/0.214=29点。", | ||||
|             "\t[小妖精,fairy]但值得庆幸的是,我们还要第三种办法——同时增强速度和攻击。\n我们少量提升攻击力至34点,使击杀怪物仅需要5次攻击。\n然后再少量提升速度至24点,使我们的第5次攻击落在0.214时刻,即怪物的最后一次攻击前。\n这样,我们仅用了4点能力提升,就达到了单独提升某项能力10点或7点的效果。", | ||||
|             "\t[小妖精,fairy]接下来是法强(护盾)和防御的价值判断。\n希望你能在这三扇黄门中打开正确的一扇。", | ||||
|             { | ||||
|                 "type": "jump", | ||||
|                 "to": [ | ||||
|                     6, | ||||
|                     2 | ||||
|                 ], | ||||
|                 "time": 500, | ||||
|                 "keep": true | ||||
|             }, | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ], | ||||
|         "6,2": [ | ||||
|             "\t[小妖精,fairy]防御和护盾的比较就非常简单了。\n2点防御的价值是2*2=4点减伤,而5点法强的价值是5点减伤。\n如果仅以这一个怪物为准的话,获取5点法强是更优解。\n当然,我不会责备你刚才选择了红血瓶——因为没命的话,就啥也不是了。", | ||||
|             "\t[小妖精,fairy]但最终的守卫怪物是个坚固怪物——它每次攻击至多只会受到1点物理伤害。\n左边的红门里面,守着的是一把提高20速度的匕首。\n右边的红门里面,守着的是一把以10%效率将魔法强度转化为魔法攻击的法杖(当然护盾就没有了)。\n值得一提的是,本作魔法强度在转化成魔法攻击的时候,是向下取整的。", | ||||
|             "\t[小妖精,fairy]除此之外,你还拥有2把蓝钥匙来进一步提升自己的战斗力。\n为了击败面前的最终怪物,进行最后的二选一和七选二吧!\n不要忘了上一张地图内含250生命值的蓝门哦。\n综合利用攻防判断,DPS判断等手段,保留更多的生命值吧!", | ||||
|             { | ||||
|                 "type": "hide", | ||||
|                 "remove": true | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     "changeFloor": { | ||||
| @ -60,7 +148,7 @@ main.floors.jiaocheng03= | ||||
|     [  1,  1,  1,  1,  1,  1,240,  1,  1,  1,  1,  1,  1], | ||||
|     [  0, 33,  0, 21,  0, 29,  0,  1, 27,  1, 28,  1, 31], | ||||
|     [ 83,  1, 83,  1, 83,  1,204,  1, 81,  1, 81,  1, 81], | ||||
|     [ 28,  1, 30,  1, 27,129,  0,204,  0, 33,  0, 23,  0], | ||||
|     [ 28,  1, 30,  1, 27,129,124,204,  0, 33,  0, 23,  0], | ||||
|     [  1,  1,  1,  1,  1,  1, 93,  1,  1,  1,  1,  1,  1] | ||||
| ], | ||||
|     "areas": "牢狱", | ||||
|  | ||||
| @ -1557,90 +1557,116 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = | ||||
|     }, | ||||
|     "control": { | ||||
|         "saveData": function () { | ||||
|       // 存档操作,此函数应该返回“具体要存档的内容”
 | ||||
| 	// 存档操作,此函数应该返回“具体要存档的内容”
 | ||||
| 
 | ||||
|       // 差异化存储values
 | ||||
|       var values = {}; | ||||
|       for (var key in core.values) { | ||||
|         if (!core.same(core.values[key], core.data.values[key])) | ||||
|           values[key] = core.clone(core.values[key]); | ||||
|       } | ||||
| 
 | ||||
|       // 要存档的内容
 | ||||
|       var data = { | ||||
|         floorId: core.status.floorId, | ||||
|         hero: core.clone(core.status.hero), | ||||
|         hard: core.status.hard, | ||||
|         maps: core.clone(core.maps.saveMap()), | ||||
|         route: core.encodeRoute(core.status.route), | ||||
|         values: values, | ||||
|         version: core.firstData.version, | ||||
|         guid: core.getGuid(), | ||||
|         time: new Date().getTime(), | ||||
| 		'material': core.clone(core.material.enemys) | ||||
|       }; | ||||
|       return data; | ||||
|     }, | ||||
| 	// 差异化存储values
 | ||||
| 	var values = {}; | ||||
| 	for (var key in core.values) { | ||||
| 		if (!core.same(core.values[key], core.data.values[key])) | ||||
| 			values[key] = core.clone(core.values[key]); | ||||
| 	} | ||||
| 	let cg = {} | ||||
| 	if (core.getFlag("_cgText")) { | ||||
| 		cg.index = core.ui.cgText.index | ||||
| 		cg.head = core.ui.cgText.head | ||||
| 		cg.name = core.ui.cgText.name | ||||
| 		cg.text = core.ui.cgText.text | ||||
| 		cg.bodyList = core.clone(core.ui.cgText.bodyList) | ||||
| 		cg.nobg = core.ui.cgText.nobg | ||||
| 		cg.image = core.ui.cgText.image | ||||
| 		cg.time = core.ui.cgText.time | ||||
| 		cg.WindowSkin = core.ui.cgText.WindowSkin | ||||
| 		cg.sound = core.ui.cgText.sound | ||||
| 		cg.beforeSound = core.ui.cgText.beforeSound | ||||
| 		cg.wait = core.ui.cgText.wait | ||||
| 		cg.memory = core.ui.cgText.memory | ||||
| 		cg.textList = core.ui.cgText.textList | ||||
| 		cg.page = core.ui.cgText.page | ||||
| 		cg.overpage = core.ui.cgText.overpage | ||||
| 		cg.log = core.ui.cgText.log | ||||
| 		cg.index = core.ui.cgText.index | ||||
| 	} | ||||
| 	// 要存档的内容
 | ||||
| 	var data = { | ||||
| 		floorId: core.status.floorId, | ||||
| 		hero: core.clone(core.status.hero), | ||||
| 		hard: core.status.hard, | ||||
| 		maps: core.clone(core.maps.saveMap()), | ||||
| 		route: core.encodeRoute(core.status.route), | ||||
| 		values: values, | ||||
| 		version: core.firstData.version, | ||||
| 		guid: core.getGuid(), | ||||
| 		time: new Date().getTime(), | ||||
| 		cg: cg | ||||
| 	}; | ||||
| 	return data; | ||||
| }, | ||||
|         "loadData": function (data, callback) { | ||||
|       // 读档操作;从存储中读取了内容后的行为
 | ||||
|       const play = core.status.played; | ||||
|       // 重置游戏和路线
 | ||||
|       core.resetGame( | ||||
|         data.hero, | ||||
|         data.hard, | ||||
|         data.floorId, | ||||
|         core.maps.loadMap(data.maps, null, data.hero.flags), | ||||
|         data.values | ||||
|       ); | ||||
| 	  	//如果作者造塔想随时修改怪物属性平衡数值,请注释下面这行。该行作用为保存怪物当前属性,用以储存临时修改的怪物属性。
 | ||||
| 	core.material.enemys = data.material ?? core.material.enemys; | ||||
|       core.status.route = core.decodeRoute(data.route); | ||||
|       core.control._bindRoutePush(); | ||||
|       // 文字属性,全局属性
 | ||||
|       core.status.textAttribute = core.getFlag( | ||||
|         "textAttribute", | ||||
|         core.status.textAttribute | ||||
|       ); | ||||
|       var toAttribute = core.getFlag( | ||||
|         "globalAttribute", | ||||
|         core.status.globalAttribute | ||||
|       ); | ||||
|       if (!core.same(toAttribute, core.status.globalAttribute)) { | ||||
|         core.status.globalAttribute = toAttribute; | ||||
|         core.resize(); | ||||
|       } | ||||
|       // 重置音量
 | ||||
|       core.events.setVolume(core.getFlag("__volume__", 1), 0); | ||||
|       // 加载勇士图标
 | ||||
|       var icon = core.status.hero.image; | ||||
|       icon = core.getMappedName(icon); | ||||
|       if (core.material.images.images[icon]) { | ||||
|         core.material.images.hero = core.material.images.images[icon]; | ||||
|         core.material.icons.hero.width = | ||||
|           core.material.images.images[icon].width / 4; | ||||
|         core.material.icons.hero.height = | ||||
|           core.material.images.images[icon].height / 4; | ||||
|       } | ||||
|       core.setFlag("__fromLoad__", true); | ||||
| 	// 读档操作;从存储中读取了内容后的行为
 | ||||
| 	const play = core.status.played; | ||||
| 	// 重置游戏和路线
 | ||||
| 	core.resetGame( | ||||
| 		data.hero, | ||||
| 		data.hard, | ||||
| 		data.floorId, | ||||
| 		core.maps.loadMap(data.maps, null, data.hero.flags), | ||||
| 		data.values | ||||
| 	); | ||||
| 	core.status.route = core.decodeRoute(data.route); | ||||
| 	core.control._bindRoutePush(); | ||||
| 	// 文字属性,全局属性
 | ||||
| 	core.status.textAttribute = core.getFlag( | ||||
| 		"textAttribute", | ||||
| 		core.status.textAttribute | ||||
| 	); | ||||
| 	var toAttribute = core.getFlag( | ||||
| 		"globalAttribute", | ||||
| 		core.status.globalAttribute | ||||
| 	); | ||||
| 	if (!core.same(toAttribute, core.status.globalAttribute)) { | ||||
| 		core.status.globalAttribute = toAttribute; | ||||
| 		core.resize(); | ||||
| 	} | ||||
| 	// 重置音量
 | ||||
| 	core.events.setVolume(core.getFlag("__volume__", 1), 0); | ||||
| 	// 加载勇士图标
 | ||||
| 	var icon = core.status.hero.image; | ||||
| 	icon = core.getMappedName(icon); | ||||
| 	if (core.material.images.images[icon]) { | ||||
| 		core.material.images.hero = core.material.images.images[icon]; | ||||
| 		core.material.icons.hero.width = | ||||
| 			core.material.images.images[icon].width / 4; | ||||
| 		core.material.icons.hero.height = | ||||
| 			core.material.images.images[icon].height / 4; | ||||
| 	} | ||||
| 	core.setFlag("__fromLoad__", true); | ||||
| 
 | ||||
|       // TODO:增加自己的一些读档处理
 | ||||
|       core.ui.statusBar.clearItemInfo(); | ||||
|       core.ui.statusBar.update(); | ||||
|       core.plugin.playing.clear(); | ||||
|       // 切换到对应的楼层
 | ||||
|       core.changeFloor(data.floorId, null, data.hero.loc, 0, function () { | ||||
|         // TODO:可以在这里设置读档后播放BGM
 | ||||
|         if (core.hasFlag("__bgm__")) { | ||||
|           // 持续播放
 | ||||
|           core.playBgm(core.getFlag("__bgm__")); | ||||
|         } | ||||
| 	// TODO:增加自己的一些读档处理
 | ||||
| 	core.ui.statusBar.clearItemInfo(); | ||||
| 	core.ui.statusBar.update(); | ||||
| 	if (core.getFlag("_cgText")) { | ||||
| 		core.setFlag("_cgText", false) | ||||
| 		for (let v in data.cg) { | ||||
| 
 | ||||
|         core.removeFlag("__fromLoad__"); | ||||
|         if (!play) core.insertCommonEvent("强制横屏"); | ||||
|         if (callback) callback(); | ||||
|       }); | ||||
|       if (play) core.doAction(); | ||||
|     }, | ||||
| 			core.ui.cgText[v] = data.cg[v] | ||||
| 		} | ||||
| 		core.drawbackground(core.ui.cgText.image, core.ui.cgText.memory) | ||||
| 	} | ||||
| 	core.plugin.playing.clear(); | ||||
| 	// 切换到对应的楼层
 | ||||
| 	core.changeFloor(data.floorId, null, data.hero.loc, 0, function () { | ||||
| 		// TODO:可以在这里设置读档后播放BGM
 | ||||
| 		if (core.hasFlag("__bgm__")) { | ||||
| 			// 持续播放
 | ||||
| 			core.playBgm(core.getFlag("__bgm__")); | ||||
| 		} | ||||
| 
 | ||||
| 		core.removeFlag("__fromLoad__"); | ||||
| 		if (!play) core.insertCommonEvent("强制横屏"); | ||||
| 		if (callback) callback(); | ||||
| 	}); | ||||
| 	if (play) core.doAction(); | ||||
| }, | ||||
|         "getStatusLabel": function (name) { | ||||
| 	// 返回某个状态英文名的对应中文标签,如atk -> 攻击,def -> 防御等。
 | ||||
| 	// 请注意此项仅影响 libs/ 下的内容(如绘制怪物手册、数据统计等)
 | ||||
|  | ||||
							
								
								
									
										1864
									
								
								project/plugins.js
									
									
									
									
									
								
							
							
						
						
									
										1864
									
								
								project/plugins.js
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user