查自己玩了多长时间的这个游戏

玩了这么久的游戏,你知道这些游戏的过去吗?玩了这么久的游戏,你知道这些游戏的过去吗?爱疯玩游戏百家号这是一篇回顾FPS游戏发展历程的文章,长度约7000字,阅读时间大约需要15分钟。随着S7落户中国,电竞国际化成为了今年电竞发展的主旋律。从小众游戏到大众项目,电子竞技以其独特的魅力征服了一批又一批玩家。然而,电竞不仅仅是MOBA。一同复苏的还有作为电竞鼻祖的FPS游戏。让我们一起跟随着倒流的时间,回顾FPS电竞历史,探寻电竞发展的起点。  让我们把视线拉回到20世纪末,可能谁也不会想到,电脑与游戏的传入会在很多年后彻底改变生活。而生于20世纪80年代的RocketBoy(孟阳)、Alex(卞正伟)、MZiN(马哲)做梦也不会想到,他们会成为这个时代最闪耀的明星。而这一切都建立在FPS---第一人称射击游戏之上。 追溯FPS的起源  1974年,万恶之源Spasim与Maze War两款游戏诞生了。这两款通过矢量与线条来模拟第一人称射击视角的游戏虽然作为FPS游戏鼻祖,却没有在历史的轨迹上留下太多的痕迹。  FPS的发展真正始于约翰卡马克,这位FPS之父和他的公司IDSoftware开创了FPS新的纪元。  2D脚本3D视角的《德军总部3D》、发行于1993年的《毁灭战士》和发行于1996年,彻底实现了3D第一视角的《Quake》,这些都是IDSoftware的经典之作。《Quake2》引擎日后被Valve借用,开发了半条命和CS。  发行于1998年的三角洲特种部队也为FPS游戏的发展做出了自己的贡献,其只能携带有限枪支的设定被后续的FPS游戏继承了下来。  作为FPS游戏真正的开山之作,从Quake1到Quake3,引擎与游戏本身的不断更迭,使得Quake的PVP系统被完美的开发出来,建立在PVP系统之上的竞技体系得以建立,相关赛事逐步发展起来。而引擎的不断更迭使得CS的诞生成为可能。  Quake3在Quake2的基础上做了进一步的改善:更流畅的游戏体验、更简单的操作、更好的画面与武器平衡性。以今天的眼光回顾,我们会发现,Quake系列的演进史俨然一部FPS游戏发展史的浓缩版。然而,Quake做的比我们想得还要多。  孟阳:第一个FPS电竞明星!  孟阳,ID:RocketBoy,中国FPS第一人,在FPS早期无人能出其右。孟阳的出名靠的是“长城百万挑战赛”,依靠着DOOM3孟阳斩获了自己人生中第一个一百万。用今天的眼光看,孟阳是FPS领域孕育出的第一个电竞明星。而长城百万挑战赛则发生在2004年。  2004年,台湾的一家电脑硬件公司“升技公司”举办了“升技Fatal1ty长城DOOM3百万挑战赛”,项目是《DOOM3》,这也是id Software出品的游戏,和Quake3很像。只是奖金是100万人民币不是美元,不过,这个数额即使放到现在也是非常夸张的奖金了。  虽然孟阳此前一直是Quake项目的顶级选手,然而通过短时间的练习孟阳在DOOM3中延续了自己的辉煌。即便比赛的条件极为苛刻,比如地图是Fatal1ty早就选好的,在正式比赛前,孟阳不可以看他和别的选手的比赛,必须要退到200米以外等。  但比赛最终还是毫无悬念,以25:2结束。至于Fatal1ty得到的两分,是孟阳考虑到Fatal1ty国际友人的身份,觉得没必要搞得过于“血腥暴力18禁”。这件事后来也成为FPS历史中的一段佳话。  在日在美国达拉斯举行的CPL冬季赛上,孟阳分别击败了美国第一选手Nomadic和德国的欧洲第一选手dragon,获得了9000美元和一个很有份量的《DOOM3》世界冠军,这也是中国第一个单人竞技世界冠军。  孟阳与Quake和DOOM的故事到这里即将告一段落。Quake与doom系列的出现改变了玩家对于游戏的认知。建立在PVP模式之上的竞技体系使得电竞赛事得以生根发芽。尽管CO赛制、游戏本身的内容、赛事的专业度与规格等都存在或多或少的问题,但在那个电竞启蒙的年代,这两款游戏的意义毋庸置疑。  前面提到,Quake系列的迭代史可以说是FPS游戏发展的历史。更流畅的游戏体验、更简单的操作、更好的画面与武器平衡性这些改变都在指引着CS的发展,而联网化则导致了CF、CSOL、CS:GO、OW的出现。  最后不得不提的一点是,孟阳也在Overwatch推出后重出江湖,其强悍的技术不禁让我们感叹这位老将似乎躲开了时光的流逝,更重要的是在其身上我们看到了FPS游戏的传承。  如果说Quake与DOOM开启了FPS竞技的篇章,Counter-Strike在FPS的历史中绝对留下了最浓重的一笔。即便在CS:GO推出的当下,CS1.5、CS1.6仍然没有在网吧中绝迹。让我们把思绪再次拉回到那个蛮荒的年代,看看这款伟大游戏走过的历程。  Counter-Strike的诞生:一个偶然的巧合  1998年夏天,Valve凭借一款名叫《半条命》的作品在E3游戏展上一鸣惊人,完美的开发水准几乎让最挑剔的批评家都难以发声,更有40多家媒体认为它是“年度最佳游戏”。  大获成功后的Valve并没有像他们的竞争对手那样对技术优势采取垄断封锁,而是在网络上公开了《半条命》游戏的源代码!这种在当时看来极为奇怪的行为却为CS后续的发展奠定了重要的基础。  之所以说CS的诞生是一个偶然的巧合,是因为CS的开发仅仅是Valve公司里的两个成员Jess Cliffe 和Minh Gooseman为了打发无聊时间的偶然之举。  用半条命1的源代码制作的反恐精英最初并没有悍匪最爱的AK47,也没有威力巨大的沙漠之鹰,更没有全球玩家钟爱的de_dust2。10几种枪支、数不清的游戏BUG和四张早已失传的地图便是最初的反恐精英。虽然称不上完美,但作为框架已足够伟大。  从1999年9月到2000年9月,这一年多的时间里,Valve小组不断地根据玩家的反馈对测试版进行更新修复。终于,在经历了7次重大调整后,Beta7.0诞生了。9月11日,在这个称不上是好日子的时间点上,CS第一次与全世界玩家见面,拉开了新时代的大幕。  Counter-Strike的崛起:激情的个人秀场  虽然CS1.0版本在主体框架上已经比较接近后来的1.6版本,但游戏中依然有着许多不合理但很有趣的地方。比如威力大到击中头发也能毙命的狙击枪,这使得早期FPS领域出现了Ksharp和JonnyR等狙神;  玩家可以像袋鼠一样跳跃着行走,这种技巧据传是由Nip的Heaton发扬光大,而使用这种技巧可以改变游戏判定所需的Hit Box,从而减少自身被击中的概率,并使行走时的脚步声消失;再加上角色可以在腾空状态下精准爆头。这些用现在的眼光来看不合理的游戏设定,在那个没有什么团队战术意识的年代,成倍地放大了一些枪手的个人天赋。  2001年年中1.1版本盛行时,Ksharp与Johnny R都凭借着电光火石般的反应速度以及极具观赏性的致命精准的枪法在网络上走红,被誉为当世狙神。尽管后来几年Ksharp曾率领3D战队赢得多个世界冠军,但他再也没有重现录像上的震撼表演。这并非Ksharp的水平下降,而是因为版本的修改削弱了个人能力对战局的影响。对于Johnny R也是同样。  另一位走红的则是一个身材魁梧的北欧大汉——Heaton,他就不是狙神了,因为他的成名武器是AK47。独特的点扫结合以及泼水式射击在那个年代独树一帜,强悍的风格为他带来了极高的人气,他的成功告诉全世界的玩家,不用狙击也能打天下。  总的来说,从1.0到1.3版本是一个蹦蹦跳跳的快节奏时代,战场上人们遭遇时的第一反应不是蹲,不是开枪,而是跳。先让自己腾空躲避,再去寻找机会击毙敌人。这是CS发展史上的一个特殊时期,虽然激情的个人秀捧红了大量的明星选手,但违背了弹道原理的一切注定了这个版本的终结,终结者则是那个短命的1.4版本。  CS1.5和职业化  虽然1.4的存在时间只有两周,但还是留下了自己难以抹去的身影。Valve在1.4版本上增加了跳跃后的停顿以及取消了跳跃射击的准确性,这两个变动让CS的节奏变慢了。1.5版本则真正把CS带入巅峰。  彼时,欧洲和北美作为当时世界上CS水平最高的两个区域,陆续出现了许多知名的CS战队和和极具天赋的明星。NIP、SK、FNATIC、Neo、element、forest、heaton。。。。这些闪耀在记忆里的名字大多起源于那个年代。随着商业比赛越来越多,一些成绩稳定的强队曝光率开始变高,随着粉丝数量的增加,强队的价值被商家看中并支持,这就是CS选手职业化的初期形态。  职业化带来的结果是不可避免的竞争,部分战队为了能够最大范围地获取商业利益,于是开始“堆积”高水平的枪手来获得成功,其中最出名的当数2003年的瑞典SK。SK的前身是瑞典另一支获得过世界冠军的强队NIP,在吸收了Heaton和Potti两大王牌和一些实力型高手之后,SK从2002年起就一直处于世界顶级战队的行列。  直到SK的经理bds从劲敌eoL战队那里挖来了鬼马精灵Element后,FPS领域迎来了SK的王朝。从2003年年中至2004年年初,SK战队在所有出战的正式比赛中打出了惊人的全胜战绩,夺得了两个CPL冠军、1个WCG冠军、1个欧洲冠军以及数不清的中小赛事冠军头衔。SK王朝是1.5时代最不可思议的一个现象,直到今天都再没有一支队伍能够复制SK当年恐怖的统治力,包括他们自己。  在欧洲的CS职业化发展的如火如荼的时候,Alex等国内选手仍然在黑暗中摸索。  Alex:从足球小将到职业选手  如果谈及中国的CS职业选手,相信Alex卞正伟一定是代表人物之一。  Alex从小喜欢踢足球而且极具天赋,年轻的Alex经历过球队降级解散、踢野球等。直到2001年,Alex陷入无球可踢也没有任何收入的人生漩涡中,19岁的他带着深深的失望和迷茫,漠然的放下了足球梦想,却无意间投入了CS的怀抱,打开了新的天地。  2001年7月,Alex接触到了CS,虽然第一次玩CS时不知因为什么原因玩吐了,但由于周围人都在玩的缘故,Alex坚持了下来,没有再吐过而且越玩越好。随后的时间里,Alex和那个年代的其他选手一样,游走于各个战队,拿着微薄的薪水,经历着一次次比赛的洗礼。直到Alex同前EVIL | UF战队的4个人Mahdi、ipig、Sprite、Luckyboy,成立了后来名震天下的deViLUnited战队并参加了WCG的预选赛,Alex的命运开始出现了转机。  当时挡在deViLUnitedWCG之路上的对手,都是由中国CS历史上头顶传奇光环的传奇队员组成的豪华阵容。比如由CS传奇元老级明星KING带领的ICE战队,Alex后来加入的wNv战队等。每一个对于刚组建一个月的deViLUnited来说都是硬骨头。  最后Alex和他的小伙伴们一路披荆斩棘,第一次让中国CS拿到WCG世界前8的成绩,向全世界证明了自己实力,也平息了国内论坛里的争议和怀疑。数十万的中国CS爱好者通过下载视频、录像观看了比赛,五名队员回国后更是享受到英雄般的待遇。后来中国CS队伍有三次进入WCG世界前8,而其中都有Alex的身影。  值得一提的是2003年年底国家体育总局在人民大会堂宣布电子竞技为第九十九项正式发展的体育项目,并且举办全国电子竞技运动会(CEG)来发展这项运动。  Counter-Strike的衰落:失败的尝试与狗尾续貂  回到CS,为了阻挡盗版的侵袭和更有力的掌握CS用户,Valve推出了Steam平台,以及依托于这个平台的1.6版本。虽然1.6版本的游戏内容很快被用户和赛事认可,但用户没有接受Steam平台以及消失的局域网功能---1.6版本的CS必须通过Steam平台连接Valve的服务器才可以进行游戏。  虽然一项名为GXG的赛事开出了10万美金的冠军奖金企图挽救1.6,但黑客不断攻击Valve的服务器使得赛事无法进行,主办方因此赔了100多万,业内哗然。虽然两周后Steam离线功能发布了,但CS却错失了最好的过渡期,这也造成了后续系列的人气下滑。  日,Counter-Strike: Zero发布,日,Counter-Strike: Source 发布。这两款老酒装新瓶的游戏并没有得到玩家的认可。为了突破市场,Valve先后联系WCG和CPL等国际赛事,强行将CS1.6抹去,而让《CS:Source》和《CS:ZERO》成为正式项目,但这样做的结果遭到了玩家的坚决抵制。商业利益和群众意愿的较量持续了数年,最终以Valve和众多赛事退败告终。  Alex与WNV:传奇终成  2004年5月,北京ESWC的决赛,从败者组打上来的deViLUnited最后输给wNv,Alex很不甘心的哭了,赛后wNv的经理李杰和马超专门来找Alex,开出5000块工资让他组只新的全明星队伍。但是Alex没答应,他不想放弃,打算在WCG时再带队伍试一次。  7月的WCG中国区总决赛上,Alex的队伍在小组赛时就被淘汰了,这让他伤心欲绝,此时wNv的经理李杰和马超又一次找来,心灰意冷之下,打算换个环境试试的Alex同意了wNv的邀请。  2004年12月,wNv.Gaming组成后练了半个月就拿到奥美王中王比赛的冠军,Alex也是从这个时候开始被明确选为队伍指挥的。有了全局性的思考,再加上对自己多年足球训练和电竞战队训练的总结和反思,他对电子竞技战队的训练和管理开始形成了自己的理解和体系。  Alex说他踢球时,最大的优势是敢带球敢突破,但是到了专业球队里,教练有取舍,队员有派系,个人的优势就被慢慢的磨光了,这是不对的。他认为训练时就应该因才而异,让每个队员都能发挥出自己的优势,鼓励他们打出自己的特点,并且协调团队的配合与默契,这样才能让团队的能量充分爆发出来。  正是在这种思路下,在2005年春节Sakula加入后,wNv.Gaming开启了自己的辉煌时代,先是轻松拿到ESWC去法国的资格,然后8连胜进入世界8强,最后以14:16的小分数败给了Mouz。后来在WEG上拿到了冠军。  2005年的WCG也很闹腾,世界总决赛采用了CSS这个游戏,这个看似和CS一样的游戏,却和CS1.6有着本质区别,以至于wNv.CN虽然拿到了中国区冠军的名额,却因为完全没练过CSS而放弃了资格,2006年的WCG就又换回CS1.6了,可随着CS的式微,这个改变已经无足轻重了。  经过多年的拼搏,Alex终于成为了世界级的指挥官,在国内外FPS领域享有盛誉。  CS依然是不变的唯一,不过随着时间的流逝,此时的它再也活跃不起来。网游大潮的到来谁也无法阻挡,网吧里依旧传出的熟悉的枪声,只不过是从网游中发出的。  2007年,一场源自于美国房地产市场的崩溃引发了全球的金融危机。彼时仍然依赖于赞助的电子竞技的发展也同样受阻。但游戏的更迭并没有停止,一款改变FPS游戏进程的游戏出现了,那就是穿越火线。  尽管时至今日,老派的硬核玩家们对CF仍颇有微词,但无论是赛事、还是职业体系,抑或是选手与玩家们的梦想与激情,CF的确成为了中国电竞的发展史上不可或缺的一部分,并改变了FPS进而改变了电子竞技。  下围棋的“霸气队长”---马哲  提起穿越火线就不得不提起马哲,这位被玩家誉为“霸气队长”的职业选手,2013年获得穿越火线终身荣誉会员,与白鲨、70KG并列“国服老一代三大狙神”。马哲亲身经历了CF的发展历程,并在FPS电竞的历史上成为了一个丰碑式的人物。  出生于1990年的马哲,从小便展示出了过人的思维能力。年仅7岁的他便参加齐齐哈尔市青少年围棋大赛并夺得了那届的冠军。“当时去的都是14、15岁的小孩,我那个时候是7岁。我爸在我后面站着,我边吃零食边下,后来就得了个冠军。”谈及这段历史时,马哲笑着说道。  15岁那年,初中毕业的马哲正式接触到了CF。同很多CF职业选手一样,他们早期都有在网吧中酣战CS的经历并拥有不俗的游戏水平。“我那个时候觉得CF比CS更容易杀人,玩起来也更爽。后来高中毕业后,应该是09年6月15号,小胖Best联系到了我,找我去辽宁的纵横电竞。我父母正好觉得毕业了应该放松放松,就让我去了,后来在当年的WCG东北死亡赛区上获得第3名。”  一战成名的马哲开始了自己的戎马生涯。  2009年马哲获得IEST全国总决赛冠;2010年获得TGA邀请赛冠军;2011年,获得TGC冠军杯全国总冠军。  2012年CFPL第一赛季,马哲率领日照陆虎在决赛中输给白鲨的东珈精鹰。但在CFPL第二赛季上,马哲率领重组的雪域电竞,与Nice、4Me、Best、18在常规赛中获得冠军,且马哲以14.70的单场平均击杀获得常规赛“击杀王”,即ACE称号。雪域电竞最终在季后赛中一路过关斩将,并在决赛中以3:2打败当时的AG迅游时空在线,获得CFPLS2冠军。同年WCG,马哲率队终结70KG的WCG四连冠梦想,并战胜越南队获得2012年WCG世界总冠军。  2013年CFPL第三赛季,马哲所在的IG因为发明赌点战术和阵容的强大,被寄予卫冕冠军的厚望,但在半决赛中输给当时的AG.QQ会员时空战线,饮恨而归。但是在2013年CFSS1上打败AG报了一箭之仇,半决赛加时战胜倾城,决赛加时战胜摩登,通过不懈的努力获得第一个CFS的世界冠军。同年的CFPL第四赛季上,IG在半决赛中输给AG,再次饮恨而归。  2014年,IG穿越火线分部被EP收购,Nice也退出曾经的“雪域五虎”,在CFSS2上,马哲四人一路磕磕绊绊,在决赛中又再次败给AG。  日,EP电子竞技俱乐部旗下的穿越火线项目将会独立运营并设立子公司,并取名为EP火线电子竞技俱乐部,马哲将担任总经理。也许是职业选手的经历让马哲感到了疲惫,接下来的三年里,马哲转到了幕后。  马哲注定是一个为赛场而生的人,三年后,不甘沉寂的马哲选择了复出。同孟阳一样,马哲用结果告诉世界,时光在他身上不曾流逝,他还在巅峰。  日,马哲携手代跃强(ID:18),徐德朋(ID:4mE),汪浩(ID:念旧)从EP电子竞技俱乐部转会VG电子竞技俱乐部。  日,在CFPLS8总决赛上,马哲所在的VG击败AG成为CFPL的新科冠军,这也是马哲的拿下生涯中第二个CFPL冠军。7月,在首届CFGI国际邀请赛总决赛上,VG再一次击败了AG获得冠军。日,在CFPLS9总决赛上,马哲随队3:0击败汉宫Clan电子竞技俱乐部卫冕CFPL冠军。  就如同履历辉煌的马哲,CF在国内FPS游戏上接过了前辈CS的大旗,并创造了诸多的成就,改变了FPS的业态。  穿越火线:合格的继任者  2007年,韩国Smilegate公司开发了与CS类似的FPS游戏--穿越火线。2008年4月在国内一经运营便大获成功。仅仅用了3个月的时间便突破了50万在线。虽然穿越火线的成功在现在被更多的解释为先入为主和腾讯的运营,但不可否认,在当时一款与CS相同质量但是互联网化的射击游戏确实俘获了玩家的心。  2009年3月,在游戏运营大获成功的同时,穿越火线开始进军电竞领域。百城联赛的设立标志着CF赛事体系建立的开始。时至今日,百城联赛依然是国内覆盖面最广、频次最高的电竞联赛。同年4月,CF发布了新版本“生化来袭”,同时在线突破了100万。  2010年底及2011年初,CF发布了PVE模式“挑战模式”,不断丰富的内容带来的是增长迅猛的用户,彼时CF的同时在线突破了两百万。  2011年4月《穿越火线》全民星赛开赛,全国各个城市的网吧中同时进行着大大小小的CF比赛,电竞赛事被CF运用到了极致。  2011年8月“生化决战:终结者”版本正式上线,生化模式新玩法造就同时在线人数突破300万。  2012年2月,国内首个电竞职业联赛CFPL开赛,比LPL早了一年多。同时在线人数于同年12月突破400万  2013年4月“战场模式”上线,开创FPS游戏革新玩法!2013年6月穿越火线CFS国际联赛正式举行,中国队获得世界冠军!  2013年8月《穿越火线》正式宣布谢霆锋代言,对泛娱乐的趋势率先进行了探索。  2014年7月“诸神竞技场”上线,同年9月,穿越火线职业发展联赛(简称:CFDL)正式开赛。同年年底CF2.0版本正式发布,游戏内容、玩法、品质等方面得到全面升级。  2015年5月“枪王排位”开赛,开启枪王之旅!2015年6月“人机试炼”模式上线,同年8月品牌刷新,推出全新品牌主张“年轻不服输”。  未完待续  2016年5月,守望先锋发布,凭借着新颖的玩法将FPS游戏带进了新纪元。2016年1月,CS:GOMajor系列赛事出现,2016年10月,完美宣布代理CS:GO在国内的运营。  时至今日,随着游戏行业与电子竞技行业的火爆发展,FPS游戏品类也在逐渐壮大。无论是加入了叙事手法的使命召唤,还是玩法新颖的守望先锋,无论是带着全新引擎归来的CS:GO,还是仍然占据用户数榜首的CF,抑或是近两年崛起的移动电竞以及FPS移动端的开拓者CF手游,在电子竞技的世界中,这些游戏不断地带给我们快乐与感动,击杀与快感。  43年过去了,FPS游戏以其独特的反馈机制,畅汗淋漓的击杀体验不断地俘获着一代又一代玩家的心。在电子竞技的世界中,FPS游戏也一直在塑造着自己的明星,带给玩家感动与激情。孟阳、卞正伟、马哲,这些闪耀在舞台的电子竞技明星也许终会老去,但FPS的戏剧却不会终结。  3月10号,CFPL第10赛季开赛,相比于前9赛季,在移动电竞持续崛起、穿越火线手游表现优异、电竞国际化的环境下,本赛季最大的变化一个是本赛季将同时兼备PC端与移动端的比赛,另一个则是引入外国战队参加常规性联赛。  一直敢于尝试的穿越火线在移动电竞的浪潮下也保持了探索者一贯的本性。作为第一款敢于将PC端与移动端两大领域打通的竞技游戏,我们有理由期待CF带给我们更精彩的内容。本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。爱疯玩游戏百家号最近更新:简介:希望把各种游戏信息分享给大家,爱疯玩游戏作者最新文章相关文章你对自己玩的游戏研究到了什么程度? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="4,573分享邀请回答*define
; 上面是脚本开头的标签。这行是一行注释,下面是声明要用全局变量的命令
; 给变量槽赋予有意义的名字
; 先来几个普通变量
numalias 50, tmp
numalias 51, arg0
; 再来个全局变量
numalias 500, glob
; 随便定义个过程
*set_glob_if_greater
if %arg0 & %glob mov %glob, %arg0
mov %arg0, %tmp
gosub *set_glob_if_greater
mov %tmp, 0
mov %glob, 0
; 显示一行文字
一开始tmp变量的值是%tmp\
看清楚了么?
mov %tmp, 42
现在tmp变量的值变成了%tmp\
也没啥神奇
gosub *test_sub
顺带给全局变量glob也设上了值%glob,收工咯
吉里吉里2的底层脚本长这样(引用自我的老帖 ):class A {
var value = "A";
function printField() {
System.inform(value);
function printFunc() {
function print2() {
System.inform("A.print2");
var value = "B";
function print2() {
System.inform("B.print2");
var a = new A();
var b = new B();
(a.printField incontextof b)(); // 使用incontextof运算符显式改变上下文
(a.printFunc incontextof b)();
// 这两行调用的上下文被替换为与b的相绑定
a.printField();
// 正常的方法调用
a.printFunc();
// 这两行调用的上下文都与a的绑定
// 运行结果: 依次显示B, B.print2, A, A.print2
其上层的KAG3脚本长这样(懒得编了,下面引用自):*choice|決断
人の流れを読むんだ…。[l][r]
俺がはじめに訪れるべき方向はどっちなのか…。[l][r]
[link target="*east"]東だ![endlink][r]
[link target="*west"]いや、西へ行こう。[endlink][r]
東に来た。やはり混んでいる。[l][r]
[eval exp="f.flag = 1"]
[jump target=*which]
西に来た。やはり混雑は無い。[l][r]
[eval exp="f.flag = 0"]
[jump target=*which]
[if exp="f.flag == 1"]
お世辞にも勝ち組とはいえないようだ。
[if exp="f.flag == 0"]
いい判断をしたようだ。
KAG3有着NScripter脚本针对视觉小说类游戏的便利性,而底下的吉里吉里2的脚本则有强大的灵活性,吉里吉里2与KAG3两者结合起来的整体简直完美。我试着用NScripter和吉里吉里2/KAG3写了些学习用的小游戏自娱自乐,还买了几本书专门学习如何用这俩引擎制作游戏:然而只是使用现成的游戏引擎还是让我心里痒痒的。我就进一步钻到吉里吉里2的源码里去学习去了。一开始雄心壮志想把整个引擎都学通了,包括里面的图像处理、排版引擎、视频处理、音频处理、脚本引擎、扩展机制,以及最上层协调各个组件的游戏引擎总控。源码读了几轮,先是粗略的快速瞄一遍,然后逐步细化,然后…发现全部都彻底理解的话要同时学的知识实在是太多了,而最吸引我的、感觉最好玩的还是其中的脚本引擎部分。吉里吉里2的底层脚本语言名为TJS2,是一门动态的、类Java/JavaScript语法的、基于类的面向对象编程语言,用C++实现。当时的我手上能用的编程语言就C(入门级)、Java(还算熟练)、JavaScript(凑合用)、C++(非常入门级),这TJS2正好跟其中两个的语法都很相似,所以感觉很亲切。而且我正好对Java语言到底是如何实现的深感兴趣,这TJS2跟Java长得那么像,自然是非常吸引我去深入了解它的实现。当时我一点编译原理都不会。这吉里吉里2的TJS2部分看了很多遍就是无法形象的理解每一步里面到底再干什么。为此我开始自学编译原理,在书本与吉里吉里2的代码之间来回切换着看,同时也试着自己写写小的编译器和解释器,过了好几周终于开始觉得能看懂那么点名堂了——TJS2的实现是:手写的词法分析器用Bison生成的LALR(1)语法分析器,内嵌语义动作边做语法分析边生成部分AST——每个语句生成一棵AST(包括里面的表达式)边做语法分析边生成字节码——每个语句parse完就从AST生成出对应的字节码,并释放AST的空间基于寄存器的字节码作为中间代码直观的switch分派式解释器基于引用计数的自动内存管理(是的,循环引用会导致内存泄漏)基于discriminated union的值表示方式类似COM的IDispatch的接口设计基于哈希表的对象实现类似JavaScript的核心库设计,包括Object、Function、String、Math、Date、RegExp之类…不得不说,吉里吉里2作为一个简易游戏引擎,其组成部分还是相当完整的。这TJS2虽然实现得很啰嗦,有些基础设计也不太好,但总归很完整,够当时的我学习好久了膜拜好久了。在初步对吉里吉里2有点理解之后,每当碰到用它实现的游戏我都毫不犹豫的先把它的脚本都拆出来,好好学习一番之后再玩——或者游戏实在好玩的话为免被剧透有时候也先玩了再学习(ry所以玩基于吉里吉里2的日文游戏我从来都不需要挂AppLocale或者NTLEA之类,只要把脚本拆出来转换成Unicode(UTF-16LE)之后再玩就不会乱码了。然后有些游戏有时候会报bug,让吉里吉里2引擎进入调试模式;此时我还真的就调试一把,试着把脚本里的bug找出来,修了继续玩,不用等官方发补丁。从吉里吉里2出发,后来我又看了许许多多的语言实现,包括但不限于 吉里吉里3、CPython、CRuby、Lua、老SpiderMonkey、老JavaScriptCore、老KJS、IronPython、JRuby、Rubinius、SSCLI等等。再到后来终于开始回归Java这个起点,开始看OpenJDK里的HotSpot VM的实现。过程中我逐步学习到了如何实现一门编程语言的方方面面,特别着重于如何让编程语言跑得更快——这样就走上了参与实现JIT编译的路。一晃眼从当初学习吉里吉里2开始已快10年,而我也已经从事JVM研发工作也有5年多了。(哎哟糟糕,已经写得太长了…下面写短点)=====================================================从galgame到逆向工程跟上文并行的还有另外一条线索。在略微入门吉里吉里2的实现后,我对其它不开源的游戏(引擎)的好奇心就更加按耐不住了。但它们没源码没文档,怎么深入进去学习?——逆向工程。我正好在大二的暑期课程里选修了侯捷老师上的课,以MFC框架为例子来介绍应用程序框架的设计。其中引起我注意的是他介绍CArchive这个类的设计与实现。这是个非常好的例子,让我学习到了数据归档文件的一般架构,对其中的索引部分、数据部分大概是什么样子的有了个数。碰巧,就在我刚上完这选修课之后,有朋友拿着一个游戏的数据文件来问我能不能帮忙看看。他们说那个文件看似全部都是明文的剧情脚本,但开头和中间有些莫名其妙的“乱码”。他们想翻译那游戏,但困于中间的乱码,弄起来总是别扭。我拿到数据文件一看,啊哈!这不就是个典型的归档文件么:开头是索引元数据,后面是带标记的明文数据。然后马上就写了个拆包/封包的工具给朋友用。得来全不费功夫,我连那游戏引擎自身是如何读取这个文件的都没看,但却是从这里开始沾上了逆向工程的边。后来在朋友之间传开了消息,说我可以帮忙拆galgame的数据归档啥的。但实际上当时我所掌握的技能,能应对的东西还很少。于是不断遇到新的游戏,不断学习新的办法来处理。先是遇到了有明文索引,而数据内容可选压缩的归档文件,LZ系的压缩、解压算法都好好学习了一遍,特别是LZSS的某个变种;然后又碰到了有明文索引,而数据内容不但压缩了而且还简易异或加密过的;接着又碰到了(貌似)更彻底的加密,例如Blowfish;后来还遇到了连索引也给隐藏了起来的神奇的格式;…这就像打怪练级一样,每次遇到新的无法解决的问题,都可以在尝试解决的过程中学到新的知识。那兴奋感是无与伦比的。而且过程中我不断的需要做汇编级调试,积累下了不少经验,也锻炼了解决问题时的耐心。这不,我现在的研发工作就经常需要做汇编级调试,要是没以前玩游戏做逆向工程的经历,真是难得耐下性子来调试枯燥的程序。那段经历让我学习到了归档文件的各种可能,各种通用无损压缩算法,各种对称加密算法,一些图片文件的格式(以及某些常见的自定义图片格式的思路),一些音频/视频文件的识别方式,还有最让我感兴趣的:其它galgame引擎的核心执行引擎是如何实现的!说来这也是千奇百怪,有一行一行解释执行明文命令的;有把高级的脚本文件明文放在归档里的,例如吉里吉里2;有把脚本变成token流存在归档里的,例如FFD System;有把脚本编译成字节码解释执行的;还有的自带JIT编译器!例如AliceSoft的System 4.x系。还有用C++之类的native语言写脚本的…orz回想起来,那时一点点做汇编级调试,找出解释器的主循环,一点点的把字节码的格式和语义探明,那也是乐趣无穷啊。回过头再拿拆解出来的字节码设计跟当时我心中的“标准模型”的吉里吉里2来对比,又能感受到那些游戏引擎们各自不同的设计取舍,渐渐的就把galgame引擎的执行引擎的常见套路都摸清楚了。有源代码的,读代码;[注2]没源代码的,拆了来读。摸清套路后,再去拆解新的引擎就顿然变得无趣了,感觉只是机械的在寻找和确认一些已知的套路,已经不怎么能学到新东西了。然后我就终于不再对拆解galgame有任何兴趣,转向专注于学习实现优化的JIT编译器去了。放俩传送门重温下当时的感受:掌握了拆解数据归档文件和分析脚本格式的技能之后,玩galgame玩得想找攻略的时候,总是可以试试把脚本拆出来确认下游戏逻辑到底是怎样的。这不是作弊嗯不是作弊(逃例如说当看到某游戏的某音乐会门口的选项在脚本里确实就是个假选项的时候,我只能服了写脚本的人的险恶用心…ToT有一次有个朋友想用吉里吉里2做个中文的galgame在漫展上卖,不知道跟
大大是什么关系反正米粒大大就有帮他们鼓捣游戏引擎的周边工作,例如说封包上的数据保护。然后我跟米粒大大玩了一次有趣的攻防战,对方的目标是尽可能不让我能轻松的dump出剧情脚本和图片资源,而我的目标是尽可能找出批量dump出数据的办法,来告诉对方破解的难度。在我的印象中我都成功的把数据dump了出来…米粒大大还记得那时候的事不?=====================================================从galgame学习了日文直接放传送门好了 =====================================================显然,上面两条线索里我做的事情都是极其消耗时间和精力的。大部分事情都发生在我大三的时候。这意味着…这是个非常黑暗的故事。我大三整个学年的成绩都毁了。毁得彻彻底底,一个学分也没进账,因为期末考试我也没去参加。大三结束,毫无疑问是我人生至今最低谷的时候。一方面学习到了许多课外知识,而另一方面人生已经走到了悬崖边,就快撑不住了。我跟身边的人的人际关系也陷入了危机,对生活中的许多事都不闻不问,能躲就躲。为了了解自己喜欢的游戏,为了能创作游戏或者游戏引擎,付出这样的代价,是否值得呢?至今我也无法回答自己的这个问题。至少,让现在的我能有一点安慰的是,当时低谷中积累到的经验,现在还算是能在工作中用上,并不是完全虚度了光阴。=====================================================* 注1:看这个用NScripter脚本实现了一个LISP解释器“NScLisper”的游戏:,源码在此:。简直黑魔法,它居然还实现了mark-sweep GC,真是好好展示了NScripter脚本的能力。NScLisper的主体在0.txt。* 注2:像吉里吉里2系的、RenPy系的当然好办;但也有些有趣的原本不开源的游戏突然变成开源的了,例如Leaf/Aquaplus的TH2X、TtT、Aruru、Kusari啥的真是意外的收获 &_&74778 条评论分享收藏感谢收起pan.baidu.com/s/1c1uDlT2 提取码:cr5p------------------------------------------------------------------------------------------------------------------------------ 完美存档下载地址: 提取码:0fr2把game.sav文件放在手机内存根目录,打开游戏就能看到存档了。IOS版本地址和交流群如下(但此版本为收费版本,具体情况请加群联系具体作者。):appStore名称:伏魔记(初回版)
下载地址:
786269 条评论分享收藏感谢收起

我要回帖

更多关于 我要玩网页游戏 的文章

 

随机推荐