{"title":"p1","subtitle":"","coverImg":"","contentType":"text/plain","content":"/* js/rules.js · Matrix · 纯规则层(classic script,无 import/export、无 DOM/canvas/外部库,只改 state)\n window.RULES = { MAP, zoneAt, seasonOf, init(seed), update(state,dt,input) } */\nwindow.RULES=(function(W){'use strict';\nvar MAP={w:64,h:40,safeMaxX:42};\nfunction zoneAt(x){return xb?b:v);}\nfunction ds(e,x,y){return Math.sqrt((e.x-x)*(e.x-x)+(e.y-y)*(e.y-y));}\nvar R=Math.random,nid=0,acd=0;\nfunction log(s,t){s.log.push({t:Math.round(s.t*10)/10,text:t});if(s.log.length>40)s.log.shift();}\nfunction near(s,x,y,r,k){var b=null,bd=r;for(var i=0;i>>0;return function(){a=(a+0x6D2B79F5)>>>0;var x=a;x=Math.imul(x^(x>>>15),x|1);\n x^=x+Math.imul(x^(x>>>7),x|61);return((x^(x>>>14))>>>0)/4294967296;};}\nfunction init(seed){R=rng(seed==null?Date.now():seed);nid=0;acd=0;\n var s={t:0,day:1,hour:6,season:0,zone:'safe',world:{w:MAP.w,h:MAP.h},\n player:{x:12,y:14,hp:100,maxHp:100,hunger:100,maxHunger:100,sanity:100,maxSanity:100,\n facing:'down',tool:'none',shelter:false,inv:{wood:8,stone:3,food:3,seed:10}},\n entities:[],raid:{active:false,phase:'none',tLeft:0,wave:0,doneDay:0},\n log:[],over:null,mind:'ok',spawnT:0,shadowT:0};\n A('npcs',FB.npcs).forEach(function(n,i){s.entities.push({id:'npc_'+(n.id||i),kind:'npc',ref:n.id||('n'+i),\n x:n.x!=null?n.x:8+i*3,y:n.y!=null?n.y:13,day:-1});});\n for(var i=0;i<16;i++)s.entities.push({id:'r'+(++nid),kind:'resource',ref:'wood',x:3+Math.floor(R()*36),y:3+Math.floor(R()*34)});\n for(var j=0;j<12;j++)s.entities.push({id:'r'+(++nid),kind:'resource',ref:'stone',x:45+Math.floor(R()*16),y:3+Math.floor(R()*34)});\n log(s,'第 1 天清晨。农场与小镇是安全的,往东走才是矿区。');return s;}\nfunction fail(s,w){s.over={reason:w};\n log(s,w==='hunger'?'饥饿耗尽,你倒下了。':w==='health'?'伤太重,你倒下了。':'精神崩解,你认不出这世界了。');return s;}\n","encryption":"0","createTime":1793515365461,"tags":[],"attachments":[]}