|
【文章储存】【魔塔论-6】造塔论延伸,关于玩家,细节,细节,还是细节BY冥灵212121 |
执行总编 二十级 |
第6篇 接着上一篇的魔塔论。 这一篇可能没什么技术含量,很多东西是简便易行的,但是少有人能全部考虑到。
|
执行总编 二十级 |
我们说做一部魔塔,是为了什么?科学研究,自我娱乐、休闲,还是服务大众?魔塔是种游戏,因此必然有其对应的玩家,一个魔塔在制作时需要考虑玩家感受。 @罕见古怪的生物 说,要做出难度,需要考虑玩家的感受,给他们造成一种错觉使之产生思维定势。的确从玩家的角度考虑制作是很重要的,不妨换位思考下,作者就是玩家,一个有大多数玩家共有想法的“万能”玩家,那么设计地图的时候可以封杀大众化路线以提升难度。 但今天我讲的重点不在这里。除了对难度的把握以外,还有对制作本身的把握。一个游戏,让玩家玩着通畅是很重要的,制作是否精细、流畅能很大程度地影响玩家对游戏的感受。 举个例子,一个魔塔有怪物手册,但是怪物手册边上堵着个蓝门,从科学的角度要不要开蓝门?显然是不要。但是如果从玩家感受的角度,玩家在探一遍路的过程中需要时刻关注怪物数据以熟记之,没有这个怪物手册,会对玩家的心理产生巨大的压力。这二者相互矛盾,对游戏整体是不利的。
|
执行总编 二十级 |
要注重细节,很多时候某个塔玩不过不是因为本身的难度很高而是因为这个塔细节处理得不到位使玩家产生了“畏难情绪”。 下面就来讲讲这些细节(以魔塔样板里的细节为主),这些是我做塔的时候总结出来的细节,特别是玩计算的魔塔,如果对细节的处理失当,极有可能得不到应有的研究。
|
执行总编 二十级 |
1.胡波 这个不必多说,尽量避免,包括暗墙、暗道、表面上可行实际上不可行的飞点破点、陷阱类机关等。当然如果是隐藏结局类的设置,为保持探索性,可以不指出来。
|
执行总编 二十级 |
2.移动速度 这一点是很多人忽略的问题,某些要精确研究的魔塔,需要大量的移动,而样板那仅仅4.3的移动速度是不够的;但正是因为需要大量的移动,为避免操作失误或移动不流畅,速度不能过快。我的建议是速度处在4.7-5.0的范围内为宜, @fjddy 喜欢在游戏之前加一个设定移动速度的选择,以照顾所有的玩家。
|
执行总编 二十级 |
另外,不得不说的一点是“迟缓”,我不知道样板的制作者怎么想的,除了与时间挂钩的魔塔,“迟缓”没有实际的作用,反而会让玩家心生厌烦感。 但有一种迟缓建议有兴趣的人尝试:如果增加一个和伤害相关的变量,叫“速度”,且迟缓后这个“速度”下降。 修改方案:脚本编辑器的■speedup,改那个4.3
|
执行总编 二十级 |
3.存档 包括存档个数和快速读取最近存档。 样板限定的存档个数为8,实际上很多需要反复测试的魔塔,8个存档是不够的,这时候可以考虑把存档拉出来,不过拉出来还是麻烦了些。这时候很多人都会修改存档个数。
|
执行总编 二十级 |
然而这并不能解决所有的问题,如果最近的存档编号在8以上,那就无法立刻读到那个存档,这也使得许多玩家丧失耐心。 所以做好这点,让玩家不会因为小问题而“轻生”! 修改方案:把■protect savefile 的30行改存档页数,个数=页数*4;▲Scene_Title的第49行,0..?的?改成存档个数;▲■protect savefile 第206、332行,0..?的?改成存档个数。
|
执行总编 二十级 |
4.Z键bug 杀怪开门再简单不过,设个变量就完事,但这样就产生了新的问题——可以不杀怪就获取那个变量。 操作方法是按住Z然后触碰怪物,怪物没有变化,门开了! 这样容易被喜欢投机取巧的玩家钻空子,相当伤脑筋!除此之外,获得物品、开门也有类似的影响。
|
执行总编 二十级 |
不过好在解决方案还是有的,有两种。一是把有实际效果的开关、变量、加减血等移到其他事件页;二是判定,当按下快捷键时触发事件,自动启动结局,返回标题画面。你可以把两种结合起来。 有了二之后是不是就不需要一了呢?不一定。当使用炸弹或者圣锤的时候,怪物相同页的事件是无法执行的,这样就有必要把要触发的开关、变量等移至独立开关A=ON时执行的那页。
|
执行总编 二十级 |
5.难度、版本显示 在左边状态栏上有所呈现即可,能让作者看着放心,玩家玩着舒心。
|
执行总编 二十级 |
6.事件名称——dead 这个问题被一些人忽略,但很重要。我们说魔塔里可见的设置都是平等的,相同的墙不要有普通墙和暗墙的区别。同样相同的地板不要有正常地板和不能飞的地板的区别。 比如杀怪开机关门,杀完怪后远处某个地方放着的一个机关门开了。但这个机关门不是开完就算数,它是中心对称飞行器的一个落点,很重要的一个落点。这样就会少一条正常过关的路。 还有就是不可通行的事件,名称却是“dead”,也会造成一定影响。
|
执行总编 二十级 |
这个问题比较麻烦,如果无实际用途可以不用,有需要的话可以看看公共事件- 每层的并行处理内容 和 事件结束的处理,里面有个41号变量记录了所有执行过的事件。 与这个问题相关的是样板自带的阻击bug,阻击背后有事件(执行过的事件),阻击怪就动不了了。 联合制塔时碰到了这样的问题,不过自己找到了一个解决办法:
|
执行总编 二十级 |
▲●Game_Player 204行开始,“#夹击怪”以后、“#退敌怪”以前的一大段东西,把这段替换为: did=0 if $game_party.item_number($game_variables[120])<1#没有阻止退敌的物品时 for i in 0...$game_variables[119].size xx=($game_map.events[$game_variables[119][i]].x- $game_player.x).abs yy=($game_map.events[$game_variables[119][i]].y- $game_player.y).abs kx=$game_map.events[$game_variables[119][i]].x ky=$game_map.events[$game_variables[119][i]].y px=$game_player.x py=$game_player.y ee=$game_map.events[$game_variables[119][i]].event.name [6,3].to_i if (xx==1 and yy<1) or (xx<1 and yy==1) aa=$data_enemies[ee].name.split('/')[1].to_i $game_actors[$game_variables[1]+1].hp-=aa $game_player.animation_id=3#显示动画3 if $game_actors[$game_variables[1]+1].hp<=0 $game_variables[19]=1 $game_temp.common_event_id = 12#生命小于0,调用1号结局 else dx=(2*kx-px).to_i dy=(2*ky-py).to_i if $game_map.have_an_event?(dx,dy) == true did=$game_map.check_event(dx,dy) if $game_map.events[did].event.name == "dead" $game_map.events[did].event.x-=dx $game_map.events[did].event.y-=dy $game_map.events[did].erase if $movedevents.include?($game_map.map_id)==false $movedevents[$game_map.map_id]=[] end $movedevents[$game_map.map_id][did]=$game_map.he_at(did) else did=0 end end if py-ky>0 $game_map.events[$game_variables[119][i]].move_up end if ky-py>0 $game_map.events[$game_variables[119][i]].move_down end if px-kx>0 $game_map.events[$game_variables[119][i]].move_left end if kx-px>0 $game_map.events[$game_variables[119][i]].move_right end all=$game_map.events[$game_variables[119][i]].event.id if $movedevents.include?($game_map.map_id)==false $movedevents[$game_map.map_id]=[] end $movedevents[$game_map.map_id][all]=$game_map.he_at(all) if did !=0 $game_map.events[did].event.x+=kx $game_map.events[did].event.y+=ky $movedevents[$game_map.map_id][did]=[kx , ky] end end end end end#退敌怪
|
执行总编 二十级 |
用到的就是“dead”的判定,可见这还是有作用的。 至于更复杂的,比如把阻击怪推到一个可能会发生剧情的位置,那么需要更复杂的设置,在此不展开。
|
执行总编 二十级 |
7.BGM @cc928yreally 的BGM是有名的,因为听这个BGM后会觉得没动力拆塔。说明从玩家的角度,BGM很重要,支持振奋人心的高燃值的音乐或者有魔塔气氛的阴沉的音乐。 有人说,淡淡的音乐作为背景不也挺好的?在这里,淡淡的音乐可以用作调剂,不过总不能让玩家一直提不起精神吧…… 饭店放嘈杂的音乐可以加快顾客用餐速度,像这个就是音乐对行动的影响。
|
执行总编 二十级 |
8.画面 细的东西不说,在什么地方就要像什么,在魔塔里就要像在魔塔里,在路上就要像在路上,在湖边就要像在湖边…… 然后是画面的感觉,不过分浮夸(对比度过低),也不过分鲜艳(饱和度过高)。对比度包括素材本身对比度和地板与事件的对比度。 善用各种图片处理工具,可以让画面变得更整洁美观。
|
执行总编 二十级 |
9.零碎的效果(动画、SE等) 还是以适度为好,不堆砌,也不缺乏,让玩家从零碎的效果中保持清醒的头脑,明确自己在干什么。 我能想到的就是这么多,这篇就到这里吧~!
|
执行总编 二十级 |
哦对,想起来个事儿,这不是脚本问题。 50层复刻的双倍攻击十字架在怪物伤害显示上有体现,那么,请看这段: 这是十字架,注意十字架的id是10,计算怪物伤害时需要用到十字架的id。
|
执行总编 二十级 |
大约46行的时候加一段这个: @hate=0#仇恨伤害 $game_variables[198]=1.to_i #这是要添加的内容
@mhp=$game_actors[$game_variables[1]+1].hp#基础勇生命
|
执行总编 二十级 |
#再往下看,当出现下面这行字时: @md=($game_actors[$game_variables[1]+1].dex*@orbdef).to_i#修正勇防 #添加脚本,然后根据敌人的id号改,下面这段是添加的部分: if @enemyid==59 if $game_party.item_number(10)>=1 $game_variables[198]=2.to_i end end if @enemyid==48 if $game_party.item_number(10)>=1 $game_variables[198]=2.to_i end end if @enemyid==47 if $game_party.item_number(10)>=1 $game_variables[198]=2.to_i end end if @enemyid==62 if $game_party.item_number(46)>=1 $game_variables[198]=2.to_i end end #添加的部分结束,10是圣十字架,所以有“if $game_party.item_number(10) >=1”,而46是屠龙匕。 if $game_switches[Playerdate_magicdef] @mmd=($game_actors[$game_variables[1]+1].int*@orbmdef).to_i#修正勇魔防 else @mmd=0#未开启魔防下魔防=0 @purge=0 end
|
执行总编 二十级 |
#这段和原来的对比下,把原来的删去改成这段东西: if (@ma*$game_variables[198]-@ed).to_i>0 #勇士的攻击>怪物的防御
@eatimes=(@ehp/((@ma*$game_variables[198]-@ed) *@orbatktimes).to_i).to_i#怪物的攻击次数 @eatimes-=1 if @eatimes==@ehp*1.0/((@ma*$game_variables[198]-@ed)*@orbatktimes).to_i #整数的情况下怪物的攻击次数要-1
|
执行总编 二十级 |
|
执行总编 二十级 |
顺便提下,善用rm的音乐节拍变化功能,对mid改节拍,修改的不是节拍而是音调。 比较有用的是125%,音调从1升至3,这能提升气氛的紧张感;还有150%,从1升至5;80%,从1降至b6;75%,从1降至5;50%,降一个八度。
|