账必须平:聊聊《国家交通:National Transit》的财务报表

一个交通游戏,为什么要有资产负债表?为什么损益表里要计提折旧?又为什么我们会花好几周,去修一张“明明已经配平了”的资产负债表?

大多数游戏把国库做成一个数字。修路,数字变小;收过路费,数字变大。平时这样没问题,直到你想问它点什么。我到底是在赚钱,还是只是花得慢?那条高速是在自己养活自己,还是在悄悄磨损?一个数字回答不了这些问题,一套账可以。

所以《国家交通:National Transit》记账。打开财务报表,你会看到资产负债表、损益表、年度报表、贷款页和趋势图。它们底下压着的,是会计入门第一课的那个等式:

资产 = 负债 + 所有者权益

说白了就是:你手里的东西,要么是借来的,要么是自己的。放到游戏里:

  • 你手里的东西:交通基金里的钱,加上你修的每一条路、每一条铁路、每一座机场、每一条航道现在还值多少。
  • 借来的:贷款还没还完的部分。
  • 自己的:国家当初投进来的“资本投入”,加上路网这些年攒下的“留存收益”。

两边必须相等。不过光相等还不够,关键在于它们是怎么相等的。

倒挤数

很多人自己记过账。月底一对,账上差了三百块,想不起花哪儿了,那就补一笔“杂项 300”,平了。

会计里管这个叫“倒挤”(plug)。它是最古老的招数,也是最危险的一种:账确实平了,可那三百块到底去哪了,再也没人知道。错误没有被修好,只是被藏了起来。

《国家交通》的资产负债表,曾经就藏着这么一笔倒挤。所有者权益是这样算的:

所有者权益 = 总资产 - 总负债

看出问题了吗?这张表永远不可能不平,因为权益的定义就是“让它平的那个数”。经济系统里不管出了什么 bug,都会被这一行悄悄吸收掉,报表还会笑眯眯地告诉你一切正常。

所以我们把它删了。现在,权益要靠自己的记录算出来:

所有者权益 = 资本投入 + 留存收益

钱和资产算一边,贷款算一边,投入和赚到的钱再算一边。三本账各记各的,最后必须对得上。对不上,就说明哪里记错了,而且现在我们看得见。

为了确认这一点,我们还专门写了个测试:故意喂给报表一套做错的账(投入 7,现金 11),看它会不会把差额露出来。测试的注释是这样写的:

A deliberately inconsistent probe must expose, not conceal, the mismatch. (一个故意做错的探针,必须把差额暴露出来,而不是掩盖它。)

它抓出来的 bug

倒挤数一删,真问题马上浮了出来:游戏把还掉的贷款本金,当成了花掉的钱。

想想还房贷。每个月还给银行的钱,一部分是利息,一部分是本金。利息是真花掉了,本金不是:你还掉一万,欠银行的也少了一万,家底一分没变。

游戏之前把两部分都记成了开销。于是每还一次款,国家就在账上“亏”一笔根本不存在的钱,越还越穷。按理说这张表早该配不平了,可它一直是平的,因为倒挤数在后面默默兜底。

现在,贷款在损益表里只有利息算作费用。还掉的本金单独列在净收入下面:钱确实从基金里出去了,但这不是亏损。

两条底线,绝不相加

假设你买了一辆车,打算开很多年。车每年都在贬值,但你一分钱没掏;直到某一年大修,一次掏一大笔。

如果你每年记一笔贬值,到大修那年再记一笔大修费,这辆车的磨损你就算了两遍。

游戏里的每条路、每条铁路、每座机场、每条航道也是这样,所以它们各自报两条底线:扣掉折旧的净利润,和扣掉大修的净现金流。两条线永远不相加,因为它们说的是同一份磨损。代码里写得很直白:这两者“deliberately NOT summable into one number”,刻意不能相加。

一条路如果现金流很漂亮、扣了折旧却在亏,那它迟早会给你寄来一张大账单。两条线之间的那段差距,就是你该留出来的钱。

还是拿那辆车来说,游戏里的路大致是这么记账的:

  • 买车不算当月开销,而是家里多了一样值钱的东西。修路也一样,造价记成资产,不会把当月账目一下砸穿。
  • 车每个月都在贬值,游戏就每个月记一点折旧。公路、机场、航道按 50 年折完,铁路按 80 年。如果你国家的建设成本涨了,折旧也跟着涨,因为同样一条路,现在重修要花更多钱。
  • 大修完的车又能开好多年。所以大修花的钱,算是把车的价值“买回来”一部分,加回到资产上,最多加到今天重修一条要花的钱。代码里的说法是“an overhaul buys the asset back at today’s prices”。
  • 车卖了,账上就不能还挂着它。拆掉一条路,或者把旧路升级换成新路,旧路剩下的价值都会从账上划掉。

国会一次性拨款

有些早期存档遇到的麻烦,其实不是玩家的错。旧版的借款额度高得离谱,年轻的国家可以借到远超自己偿还能力的钱,界面上还摆着个“最大”按钮,几乎是在邀请你点它。我们后来修正了额度,可这些存档已经背上了一辈子也还不清的债。

解决办法是一次性的国会拨款:存档加载时,国家出钱,把这笔历史债务一次了结。

有意思的是这笔钱该怎么记。最省事的是记成收入,可那样一来,你的国家会凭空多出一个“暴富月”,账上突然赚了一大笔,而这个月根本没发生过。打个比方:家里人帮你还清了债,这是家里给你的钱,不是你这个月的工资。

所以它被记作国家实缴资本,进入资产负债表的“资本投入”。代码注释里写着:走损益表会“fake a profitable month that never happened”,伪造一个从未发生过的盈利月份。同一份代码里还写着:这是在修我们自己的定价错误,不是宽恕玩家的决策。

老存档的旧账

还有些老存档来自这些修复之前,加载时账可能对不太上。我们完全可以编一笔收入或费用把缺口填上,但那不过是换了身好看衣服的倒挤数。

游戏的做法是:去年的账记错了,就改去年的账,不算到今年头上。差额记为对期初权益的更正,会计上叫“前期差错更正”,明明白白标注为过去的事,不让它伪装成你今年的经营成果。

像银行一样放贷

申请过房贷的人都知道,银行会先看你的收入,月供不能超过收入的一定比例。《国家交通》的借款额度也是这个思路:所有贷款的月供加起来,不能超过你过去 12 个月平均经营性净现金流的 80%。

什么算“收入”,我们划得很仔细。拨款、通行费、税收算进来,维护和运营成本扣掉;一次性的进账和支出不算;大修也不算,因为那是在给资产续命,不是日常开销。

万一真的付不出下一期月供,还可以申请债务重组:把还款期限拉长,直到月供重新回到那条 80% 的线以内。欠的钱一分不少,只是给你更多时间慢慢还。

这些对一个游戏有什么意义

玩《国家交通》不需要懂任何会计。你可以修路、看城市长大,从头到尾都不打开财务报表。

但如果你打开了,上面的数字说的都是真话。一条看起来赚钱的铁路,是真的赚钱,连自己的磨损都付得起。一笔看起来负担得起的贷款,是真的还得上。资产负债表最后那行“负债 + 权益”也完整列了出来,你可以自己拿它和总资产对一对。

← 返回博客