找回密码
 立即注册
查看: 1908|回复: 20

[笔记] 如何评价《太吾绘卷》的程序代码?

[复制链接]
发表于 2021-3-18 05:35 | 显示全部楼层 |阅读模式
如何评价《太吾绘卷》的程序代码?
发表于 2021-3-18 05:40 | 显示全部楼层
看完了大家关于我所写的《太吾绘卷》的代码的回复,心里居然异常的温暖!
首先当然是要感谢蛐蛐大神保平安,绿皮逆练代码永无BUG一遍过——哈哈,这,当然是开玩笑的。
我们的新办公室,和全新的小伙伴们
回想起三年前我们团队中的程序因为生活所迫离开团队且没有留下一句代码时,我们团队中剩下的三个人,内心都是绝望的。毕竟一个电脑游戏,没有程序基本就可以宣告死亡了。
在程序刚刚离开的时候,我也试着去寻找过新的程序,但得到的大多是“能保证收益吗”、“宣发打算投入多少”、“行业里有关系吗”、“这项目按我的意思做我才来”之类的回复。我本身不是一个外向的人,在经过几次失败地沟通后,我终于还是决定自己学习代码。这个决定并非出于对程序的失望,也没有抱怨,仅仅只是单纯地觉得,或许,我们真的只是在做一件很边缘的事,而到达终点的路,也注定无法“假手于人”。这是一种很强烈的宿命感,可能有些悲观,但反而令我更加坚定了一些。
回到我自己学习代码的过程来说,实际上还是比较开心的。因为设计方案做的比较完善,所以学习的目标很清晰,能够尽可能高效的找到自己需要学习的内容,想到自己的设想至少有被实现的可能,心里就说不出来的愉快。
另外,一直以来,也有很多受《太吾绘卷》鼓励而准备自己开发游戏的朋友问我,应该怎么去学习代码,可能,拥有一个清晰的设计方案和学习目标,就是一个非常不错的开始!
太吾代码
自学代码一个月以后,我在沉默已久的制作群里发出了一条信息:“我代码学好啦,我们继续制作吧!”。我看不到木桶和暴龙当时的表情,但我还是几乎能感觉到他们满头的问号几乎要从屏幕里冒出来掉到我的电脑桌上,我记得那是很振奋人心,很愉快,又很无奈的一天。
后来,如大家现在所见,《太吾绘卷》成功地运行了起来,很多人亲切的称我的代码是“绿皮代码”,还有人玩笑式的迷信起了“蛐蛐大神”,每次看到这些时,我的内心并不会因此而产生丝毫厌烦的情绪,反而感觉这些是对我最好的赞赏和鼓励。因为程序真的是一项非常复杂的学科,它是一门“语言”,想要用它写出真正优美的诗篇,光靠照本宣科或知其然不知其所以然的方式,是绝对无法运用好它的。作为一个“外国人”,我为能得到专业程序们的哪怕一丁点“认可”感到无比的感动和开心,尽管我的代码完全是逆练的产物。
现在,我也终于招募到了几位资质出众且志同道合的新程序伙伴,期待他们能够在不远的将来,把《太吾绘卷》里千疮百孔的代码一一修补起来,为大家带来一个在程序上,更强健、稳定、高效的好玩的游戏!
感谢大家对我的代码的包容,我们会继续努力的!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-3-18 05:48 | 显示全部楼层
unity业余爱好者说一下,这几天传的代码的事几乎都是无中生有的事...一群用.net和vs做工程的人谈论第三方引擎做的游戏...真是鸡同鸭讲。
现在针对几个常见误会说一下
1.只有一个main (x)
unity的脚本都是依附于各个精灵的,没有main,只有update
2.没有注释(x)
你反编译出来的代码有注释?你真是个鬼才
3.全是字符串变量(x)
用脚趾头想都不可能,动画控制器参数不用布尔不用trigger用字符串?不过unity很多自带的组件中有不少字符串变量,还有各种标签变量,不排除是误传
4、一个g的游戏蛐蛐动画300m()
没问题,但是你回想一下,这个游戏有几个动画?是不是突然意识到会动的东西没几个了……人物其实都只有个半身像,战斗全是小黑人……好像的确只有蛐蛐有动画。unity的图片和动画没有针对性地优化的确非常占空间,尤其2d,每一帧都是一张图,不像flash。
5、几万个if()
这个倒是没问题,最早的那个帖子上就贴了这部分代码。但是吧,这个也只能说代码的可读性很差,而且容易出bug,并不是什么闻所未闻的事。大家还记得12万行if的百度无人驾驶车吗?
发表于 2021-3-18 05:57 | 显示全部楼层
茄子:我有一个绝佳的点子,就差一个程序员了………

算了算了,程序员也不需要了
发表于 2021-3-18 05:57 | 显示全部楼层
一直看到大家发这图那图,都不关心游戏本身好不好玩,真的很生气。
作为一个游戏开发程序员,来给大家讲讲。
1,没有注释的事儿。
给大家讲讲打包和解包用一些比较好理解的例子。
打包就相当于翻译人员对一篇中文书到英文进行精翻,而注释就可以看作作者写书的时候,为了自己理解方便在草稿中留下的笔记,翻译的时候是不会翻译这个部分的,只要文章真正内容部分。
而解包也就是反编译,就相当于你直接用百度翻译把这篇精翻好了的英文再翻译回去。首先,作者的笔记也就是注释,肯定是看不到的了,所以不存在注释没有的问题,因为写过代码的人都知道,不写注释在大项目中是不存在的。
2,只有一个main的问题。
Unity游戏编辑器,和大学之中普通用java,c,cpp写出来的代码是不同的。游戏是一帧一帧的运行,每一帧调用一次update函数把程序逻辑走一遍,然后把新的数据更新到你们看得到的页面上,所以什么只有一个main的问题是不存在的,因为本身unity编辑器运行的逻辑就不一样。
3,if else和string问题。
很多人都提到了可能是playmaker引起的,但是这是一个什么东西呢?
可以这样子理解,有这么一个写故事的程序,专门提供给英语不太好的人使用,怎么去使用他呢?只需要拖动程序里面内置的人物,环境,物品,事件,把他们连在一起,程序就会自动生成一个小故事,看的人,可以看得懂,但是整体的故事因为是程序生成的所以看起来怪怪的,比如一句话:小明拿着本子进了房间找小红。可能程序就会写成小明拿着本子,然后进了房间,然后找了小红。这个然后就是if else如果专业程序员写起来,这个都是可以优化掉的,但是程序生成的,比较傻但是能达到相同的效果。详见机翻软件翻译长篇文章,看得懂的但是很奇怪。然后再经过上面说的解包,整个逻辑就更奇怪了,可能就出现了大量的if else和返回string的问题。


希望大家还是好好关注游戏本身,把游戏买下来,自己去玩一玩,好好体会一下开发者的心。据我所知太吾绘卷的开发者只有三人(好,主程序还是临时学的,这样的团队,能开发出如此水平真的很令人敬佩。还有bug的问题,啊育这么大的公司,这么多的开发者,操作的工业化生产流程,不是照样出bug?他们敢发行说明已经是把bug控制在一个可以接受的范围之内了,所以还是希望大家相信他们好好享受游戏的乐趣。
顺便推荐大家去看看《独行》中国独立游戏开发者的现状,真的不是很乐观的。
PS.如果这个是炒作的话我是真的被炒到了一下,心服口服好吧,不过我不认为他们真的有心去做炒作的事情,游戏发售还没几天,这么好的成绩,累了三年,出gai去bug耍还来不及呢,有空管炒作的事儿?才三个人,你说是美术去管炒作策划去管炒作还是程序去管炒作啊?
发表于 2021-3-18 06:04 | 显示全部楼层
2018.09.30编辑,听说太吾已经遭到盗版,回来删除了关于如何解密核心代码的技术细节。
刚刚出于好奇在Steam上买了一份太吾绘卷(2018.09.28),一方面是因为朋友给我讲了一个main函数几万个if的传奇故事,让我觉得有些jiang信jiang疑,另一方面是因为想解锁一个周末摸鱼的新姿势(掩面而逃)。


假设你的Steam安装在C盘的话,那么太吾绘卷的安装目录应该为 "C:\Program Files (x86)\Steam\steamapps\common\The Scroll Of Taiwu"。
项目的核心逻辑代码位于".\The Scroll Of Taiwu Alpha V1.0_Data\Managed\"目录下的"Assembly-CSharp.dll"文件里,但是这个文件加密过,没法直接反编译。
解密算法和密钥打包在".\Mono\EmbedRuntime\"目录下的"mono.dll"里面,通过"mono_image_open_from_data_with_name"函数调用,似乎是个简单的XOR加密。但我懒得仔细看,所以直接一发dump操作,把解密后的核心代码从内存里提取出来了。


(解密详细步骤已删除)


那么,让我接下来上干货澄清一下现在的这些坊间传言好了。
    一个巨大的main函数(证伪)
正如 @魏小白 在答案中提过的,Unity是没有所谓的入口点的,所有的代码都是依附于各个精灵的,反编译后的代码也显示出了还不错的条理性和面向对象的逻辑:
简单翻了翻之后,确实发现几个比较冗长的函数,但我也确实没能找到几万个if出现在哪里,如果有人找到的话烦请在评论区指正。


2. 函数全部使用string做返回值 / 全是string变量(证伪)
这条是我听的时候感觉听起来最不可信的一条了,你们知道拿string做数值运算有多慢吗……
打开反编译后的代码果然光速证伪。
(P.S. 我后来又去查证了一下原始的出处,发现最早说出类似说法的人,大意好像是说“读取数据表的时候只返回string”,这样的话就合理多了。那些比较夸张的说法大概是社交媒体传播过程中出现的以讹传讹。)


3. 游戏资源里面有很多蛐蛐 / 这个游戏应该叫“蛐蛐绘卷”(证实!)
这条我本来有点怀疑是网友的恶搞之类的,没想到……解包assets文件之后……真的全NM是蛐蛐啊我摔!
而且,听说,在这个游戏里面,你娶了老婆之后,老婆有一定概率变成蛐蛐……
就算你的老婆身体无恙,她也,有可能,给你怀孕生一只蛐蛐出来……
制作人对蛐蛐的热爱让我大为感动,痛哭失声……


4. 代码没有注释 / 代码中使用了大量的if/else (存疑)
有一定逆向基础的朋友应该知道,首先注释你反编译是解不出来的,因为注释根本不会打包进二进制代码里。另外反编译的代码里存在大量if/else的话,一般也是因为反编译工具不擅长处理复杂逻辑,所以一律解成if/else让逆向工程师自己去参悟。
我之所以把这条标成存疑,是因为毕竟源代码我也没看过,万一这两句评价是基于泄露的源代码而不是反编译的话,就有可能是真的了。
退一步想想,对于一个在游戏里放了这么多蛐蛐的魔鬼制作人,他干出什么我都不意外好吧……




最后总结一下,《太吾绘卷》这款游戏的代码,并没有网上谣传的那么不堪。虽然读的时候我确实注意到了一些类似于把“main”拼写成“mian”这样的低级错误,而且很多地方的架构和解耦还做得不太到位,但作为一个非科班出身的游戏开发人员的处女作来说,我觉得算得上是可圈可点的程序作品了,可以看出来花费了不少心血在里面(尤其是在蛐蛐上)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-3-18 06:05 | 显示全部楼层
举个例子


我用excel做了个表格,有人用写字板打开了,然后夸我说


“我艹 你这么牛逼,用逗号,乱码就能分割出这么多数据,还都没啥错误”


我这个时候也是菊花微紧的。


因为我不知道我是做个好人提醒对方去检查下智商,还是同样做个好人独自享受夸奖。
发表于 2021-3-18 06:11 | 显示全部楼层
发现大家有个爱好,就是一旦有了个好游戏后,就一定要疯狂造神,icey是这样,太吾绘卷也是这样,然后过段时间热度过去了,又该执行倒神计划了
————————————————————————
网上现在传的“蛐蛐大神列传”,里面绝大部分内容是假的。
在这次“宇宙第一程序”传播中,我感到了不少年轻人在中年后,也会变成那种在朋友圈传“转基因致癌”“五大传统健身方法”的老一辈
你上去说破这是假的吧
他们就会反驳“我们就是图个乐子,我又不是程序员”“你这么厉害你也去写一个游戏啊”


不去反驳吧,总感觉又有点让谣言到处传播不太对得起自己的专业……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-3-18 06:21 | 显示全部楼层
从一个非科班出生的程序来说已经很厉害了... 游戏项目做到上线就是一个很大的节点

然后具体的吐槽下
- steam上目前还是development build (没记错的话是2018)
- dll做了简单加密,我大概看出来是参考的哪里的博客了...
- 代码做了简单的功能划分(xxxSystem/xxxWindow),但是大多数类都行数爆炸...
- 资源管理那块接近没有(直接Resources大法好),Sprite很多蛐蛐这个也有人吐槽过了

可读性还是可以...变量的命名也好整体逻辑也好总体能忍,(虽然mian/rest这种typo,以及单个15k行 类文件确实有点庞大...


已steam+1,希望这个团队继续迭代加油(逃

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-3-18 06:27 | 显示全部楼层
独立游戏的源代码,开发和迭代的方式和大型游戏完全不一样的,独立游戏的源代码,有一定的诟病是无可厚非的,没有什么大的问题,最最最主要的就是开发效率和成本节省。纠结架构,过度优化,极度严谨的code review,写很多测试,太多的fancy的pattern,数据结构,都是不是特别现实的。
举一个例子,今年大火的空洞骑士和celeste,源代码都可以看得到,可以说是非常混乱,但是这两个游戏都是非常非常优秀的独立游戏,因为这些团队根本没有过高的专业能力和资源去做一些大厂才能做的事情,比如引擎,比如超级优化的代码,coding standard等等,做独立游戏优化的不仅仅是开发代码,更重要的是优化开发过程。
极端一点说,独立游戏只要做得好,做完,没有重大的bug,就是好的游戏就是成功的,分析一件事情的时候一定要结合事情的背景分析。
最后补充一下:每一个团队的背景和开发方式都不一样,有些更严谨的团队可能在迭代的同时还能保持很好的代码质量,这是这些团队的优点和能力,在游戏能做完能做好的前提下肯定是代码越优质越好
然后再补充一点:我不太清楚开发团队知不知道他们的代码被反编译放出来了,也不知道反编译并公开别人的代码是不是非法,但是我非常不赞同这样子做
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-1-31 18:44 , Processed in 0.100356 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表