This JavaScript library converts from .sc2 (SC2K city file) or .scn (SC2K scenario file) file to JSON.
- Firefox, Google Chrome
- MS Edge, Safari works probabry.
$ sc2ktojson [options] <inputFile>
Options
-h, --help output usage information
-V, --version output the version number
-o, --output <outputFile> Output JSON file
<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<script src="../../lib/sc2ktojson.js"></script>
<script>
'use strict';
let xhr = new win.XMLHttpRequest();
const sc2fileURL = './sc2ktojsonTest.sc2';
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
let cityData = sc2ktojson.analyze(xhr.response);
}
}
xhr.open('GET', sc2fileURL);
xhr.responseType = 'arraybuffer';
xhr.send();
</script>
</head>
</html>
<!DOCTYPE html>
<html>
<head>
<script type="module">
import sc2ktojson from './sc2ktojson.js';
fetch('./sc2ktojsonTest.sc2')
.then(
(result) => {
return result.arrayBuffer();
}
).then(
(buffer) => {
const cityData = sc2ktojson.analyze(buffer);
}
);
</script>
</head>
</html>
importScripts('../../lib/sc2ktojson.js');
self.addEventListener(
'message',
function(event){
let cityData = event.data;
self.postMessage(self.sc2ktojson.analyze(cityData));
self.close();
},
false
);
const sc2ktojson = require('../../sc2ktojson');
let file = fs.readFileSync(`PATH_TO_SCNFILE/test.scn`);
// Convert from buffer to Uint8Array
let uint8arr = new Uint8Array(file);
let cityData = sc2ktojson.analyze(uint8arr.buffer);
{
scenario : {
tmpl : [0-255, 0-255, ...], // optional, arbitrary items
text : {
opening : [0-255, 0-255, ...], // scenario opening text. arbitrary items
selection : [0-255, 0-255, ...], // scenario selection text. arbitrary items
},
scen : {
disaster : integer,
disasterCoordinate : {
x : integer,
y : integer,
},
limit : integer,
condPop : integer,
condRPop : integer,
condCPop : integer,
condIPop : integer,
condFund : integer,
condVal : integer,
condEdu : integer,
condPol : integer,
condCri : integer,
condTra : integer,
condBld1ID : integer,
condBld2ID : integer,
condBld1Tiles : integer,
condBld2Tiles : integer,
},
pict : {
width : integer,
height : integer,
picture : [
[0-255, 0-255, ...], // same as width
], // same as height
}
}, // optional, .scn file only
tile : {
altm : [
[
{
isWater : 0-1,
height : 0-31,
binaryText: string,
}, ...
], // 128 items
], // 128 items
xter : [
[0-255, 0-255, ...], // 128 items
], // 128 items
xbld : [
[0-255, 0-255, ...], // 128 items
], // 128 items
xzon : [
[
{
zone: 0-15,
binaryText: string,
},
], // 128 items
], // 128 items,
xund : [
[0-255, 0-255, ...], // 128 items
], // 128 items
xtxt : [
[0-255, 0-255, ...], // 128 items
], // 128 items
xbit : [
[
{
isSalty : boolean,
isWaterCovered : boolean,
isWaterProvided : boolean,
isPiped : boolean,
isPowered : boolean,
binaryText: string,
}, ...
], // 128 items
], // 128 items
surface : [
[
"xbld" | "xzon" | "xter", ... // 128 items
], // 128 items
],
},
statistic : {
xtrf : 2x2AreaFormat, // Traffic map data
xplt : 2x2AreaFormat, // Pollution map data
xval : 2x2AreaFormat, // Value map data
xcrm : 2x2AreaFormat, // Crime map data
xplc : 4x4AreaFormat, // Police coverage map data
xfir : 4x4AreaFormat, // Fire coverage map data
xpop : 4x4AreaFormat, // Population density map data
xrog : 4x4AreaFormat, // Rate of growth map data
xgrp : {
citySize : GraphFormat,
residents : GraphFormat,
commerce : GraphFormat,
industry : GraphFormat,
traffic : GraphFormat,
pollution : GraphFormat,
value : GraphFormat,
crime : GraphFormat,
power : GraphFormat,
water : GraphFormat,
health : GraphFormat,
education : GraphFormat,
unemployment : GraphFormat,
GNP : GraphFormat,
nationalPop : GraphFormat,
fedRate : GraphFormat,
},
}
city : {
cnam : [0-255, 0-255, ...], // 32 items
misc : [
[0-255, 0-255, ...], // 4 items
[],
], // 1200 items
xlab : [
{
length : integer,
label: [0-255, 0-255, ...] // 24 items
}
],
xmic : [
{
tileNum : 0-255,
microsim : [0-255, 0-255, ...] // 6 items
}, ... // 150 items
],
xthg : [0-255, 0-255, ...], // 480 items
},
fileSize : integer
}
[
[0-255, 0-255, ...], // 64 items
], // 64 items
[
[0-255, 0-255, ...], // 32 items
], // 32 items
{
year : [integer, integer, ...] // 12 items
decade : [integer, integer, ...] // 20 items
century : [integer, integer, ...] // 20 items
}
- Clone the repo from github
git clone https://github.com/tom-konda/sc2ktojson.git
- Change current directory
cd sc2ktojson
- Run
npm install
- Run
npm run build
Licensed under the MIT
- SIMCITY 2000 FILE FORMAT (MS-DOS VERSION) for help to understand .sc2 file format. (in English)
- シムシティ2000 調査研究室 「その6 シナリオデータの構造」 for help to understand .scn file format. (in Japanese)