2013/04/29(月)ECO Sim: Codeの仕様(仮)

ECO Sim: Codeの仕様(仮)

基本情報

Codeは元はバイナリ列のデータでBase64ライク*1な変換規則で文字列に変換したものである。バイナリ列操作や、文字列への変換操作は、util.js内のbitFieldオブジェクトを通じて行う。

以下はデバッグ用のtoBinメソッドの使用例。

javascript:(new bitField("1zP1xgX00")).toBin()
"000000000000111011010000100001000001110011100011000001"
                                                 ~~~~~~
                                                 ここが先頭の1に対応する値

javascript:(new bitField("1zP11hX0Qe00")).toBin()
"000000000000001110110100000000111011010001000001000001110011100011000001"

javascript:(new bitField("1zP1xhX0Qe0J300")).toBin()
"000000000000000011101101000000001110110100000000111011010001100001000001110011100011000001"

イリスカードのCodeについて

javascript:(new bitField("1zP1xgX00")).toBin()
                                      "0 0000 0000000111011010 0001 0000 1 000001110011 100011000001"
                                      [8][7]  [6]              [5]  [4] [3][2]          [1]

javascript:(new bitField("1zP11hX0Qe00")).toBin()
                   "000 0000 0000000111011010 0000000111011010 0010 0000 1 000001110011 100011000001"
                    [8] [7]  [6]              [6]              [5]  [4] [3][2]          [1]

javascript:(new bitField("1zP1xhX0Qe0J300")).toBin()
"00000 0000 0000000111011010 0000000111011010 0000000111011010 0011 0000 1 000001110011 100011000001"
 [8]   [7]  [6]              [6]              [6]              [5]  [4] [3][2]          [1]

イリスカードのCodeを構成するビット列を意味のある単位で分割すると上記の通りになる。各セクションの意味は以下の通り。

  • [1] イリスカードcodeマジックナンバー
  • [2] 現バージョン
  • [3] 有効フラグ
  • [4] 武器イリスカード数
  • (カードがあるならここに必要数カードindex)
  • [5] 服イリスカード数
  • [6] カードindex(必要数繰り返す)
  • [7] 胸アクセイリスカード数
  • (カードがあるならここに必要数カードindex)
  • [8] あまり(0埋め)

ECO Sim中でビット列を組み立てているコードは以下の通り。(codeは、最後に bf.toString() で得られる。)

[storage.js]
var bf = new bitField();
bf.push(target.code.masic_no,12); //イリスカードcodeマジックナンバー
bf.push(current_ver,12); //現バージョン

[iris.js]
if(!enable){
  bf.push(0,1); //無効フラグ
  return;
}else{
  bf.push(1,1); //有効フラグ
}

for(i=0;i<iris.parts_num;i++){
  bf.push(slot[i].length,4); //この部位の装備カード数(bit 3->4 on version 111)
  for(j=0;j<slot[i].length;j++){
    var idx = slot[i][j];
    bf.push(idx,16); //カードindex保存
  }
}

*1 : 変換テーブルがBase64と異なるのは、Base64のこと忘れてて適当に変換テーブルを作ったため

2013/03/23(土)シムシティ 鉱業都市(マルチ)

シムシティ 鉱業都市(マルチ)

ちょっとマルチプレイで他の地域にお邪魔して都市を造りました。今まで平坦な土地でやってましたが、ここの土地はちょっと起伏があります。

都市全景

隣町があると、客や労働者、バス、放火魔とかがやってくるみたいですね。

産業と物流

物流
  1. 最初は鉱業都市目指してたので、鉱山作りました。
  2. 合金作る工場も作って輸出で金策。
  3. 偉業の宇宙センター作るから合金を搬出。
  4. 宇宙センターにコンピューターも必要だったから家電セットも作る。
  5. お金が足りなくなってきたのでTVも作って輸出。

結局、鉱業+家電みたいになりました。鉱山はそのうち地下資源がつきるのでそのときは輸入に切り替えになります。

あと、お金が欲しいだけなら何も考えずにテレビ作って売ればいくらでも儲けられるようです。毎時44kの都市予算赤字もテレビさえ売れば穴埋めできます(;^_^A


交通問題

前半は、路面電車に4万人/日のシムが殺到するとんでもない状況だったのですが、金曜日あたりからなぜか交通量が激減して数分の1になりました。原因不明、アップデートパッチのせい(・・?)

おかげで今は物流がかなりスムーズです。

雇用

労働者詳細

どうやら、工業・商業施設のキャパシティは住宅に比べてかなり大きいようで、住宅の割合をかなり多くしないと労働者が不足します。

シムシティおなじみのRCIメーターはあまり信用しない方が良いのかも・・・。

2013/03/18(月)シムシティ 掘削都市

シムシティ 掘削都市

Spark_2013-03-18_23-01-23.jpg

前の町の開発はいったん止めて、同じ地域のお隣の町へ。

ここは地下に石油が埋まっているので、掘削都市にしてみました。

インフラ

序盤は隣町に電気、水道、下水、ゴミ、警察、消防など大半を委託できるので金銭的にかなり楽でした。さすがに人口10万を超えるようになると自前の施設が必要ですが(>_<)

交通

外部との往来が、高速道路と鉄道に分散してくれたおかげか、人口の割にあまりひどい渋滞にならずにすんでいます。バスもかなりの人数を輸送していますが、大半のバスは隣町から来ていたりします。

フェリー港や空港は、作ってはみたもののほとんど利用されなかったので閉鎖しました。

人口構成

Spark_2013-03-18_23-01-45.jpg

石油関連の施設が多くて人口は伸びないと思っていたのですが、高密度住宅が増えた結果、予想外に人口が伸びました。

今は割とバランスがとれていますが、中盤まで低所得者が少なくて、低所得者の求人は1万人越えなのに、中所得者が数千人失業、低所得者が働きに来なくて工場が動かないという状況になっていました^^;*1中所得者向け公園を作りすぎたために低所得者は地価が高くて住みにくかったようです。

一部公園を破壊するとかして地価を調整したので、今は低所得者もたくさん住んでいます。


教育

最初は小学校や高校もありましたが、今は大学があるだけです。シムの世界では大学が他の学校の上位互換で小学校に行かなくても大学にさえ行けばOKのようですΣ('-'っ)っ

ただ、大学にはスクールバスがなくて公共交通機関や車で人がやってくるため、大学前はだいぶ渋滞することに・・・。

そういえば教育レベルが上がったので原子力発電所を建ててみようかと思ったのですが、意外と大きくて建てる場所がなかったという・・・。火力発電所はなかなか省スペースだったようです。

産業

掘削都市なので、油井や石油精製所があります。関連施設のアンロックはちょっと面倒でした(>_<)

財政

Spark_2013-03-18_23-02-14.jpg

毎時収支はやや赤字ですが、原油やプラスチックの輸出がかなりの利益を生むので金銭面は問題ありません。

*1 : 求人数などを確認できることに途中で気づいたので、それまで失業とかには無頓着だったという^^;

2013/03/16(土)シムシティ(2013)プレイ中

シムシティ(2013)プレイ中

Spark_2013-03-16_01-20-50.jpg

とりあえず、1つのマップでプレイ中。初プレイなので割と適当?

人口は13万人。高密度の建物が建ち始めると人口が急激に増えてインフラ整備が大変でした。無計画に高密度を狙うのは危ないのかも。

電力は10万人手前まで風力だけだったけど、需要が増えすぎたので石油発電所も1つ追加。高台が風車だらけ・・・。

Spark_2013-03-16_01-21-07.jpg

収支は一時期+7000くらいあったのですが、今は支出が多くてぎりぎり黒字。一番お金を食っているのがバスで60台くらい走ってます。たぶんバスがないと交通渋滞で都市機能が死にます^^;


そろそろ、お隣のマップの開発に移ってもいいかな~。

2013/01/02(水)CDexで作成したflacファイルの演奏時間(Duration)がおかしい

PC::Memo

CDexで作成したflacファイルの演奏時間(Duration)がおかしい

CDex*1でExternal Encoderにflac.exeを指定したときに、うまくflacファイルが作れなかったので対策とかをメモ。

現象と原因

  • 現象: 作成したflacファイルのDuration(演奏時間)が3:22:53.943 (536870902 samples)になってしまう。
    • metaflac --list の出力
      METADATA block #0
        type: 0 (STREAMINFO)
        is last: false
        length: 34
        minimum blocksize: 4096 samples
        maximum blocksize: 4096 samples
        minimum framesize: 0 bytes
        maximum framesize: 0 bytes
        sample_rate: 44100 Hz
        channels: 2
        bits-per-sample: 16
        total samples: 536870902
        MD5 signature: 00000000000000000000000000000000
      
  • 発生条件: CDexのオプション>設定>エンコーダを以下のように設定していると発生
    • エンコーダ: External Encoder
    • WAVヘッダーを標準出力へ送る: チェック
    • オンザフライエンコード: チェック
    • エンコーダパス: flac.exe
    • パラメータ配列
      -T "Artist=%a" -T "Title=%t" -T "Album=%b" -T "Date=%y" -T "Tracknumber=%tn" -T "Genre=%g" -V -8 -o "%2" -
      
  • 原因: CDexが送るWAVヘッダー内のサンプル数情報がおかしいため。

対策

対策は、「オンザフライエンコード」をやめるか、「WAVヘッダーを標準出力へ送る」をやめるか。今回は後者で対策。

  • 対策: CDexのオプション>設定>エンコーダを以下のように設定
    • エンコーダ: External Encoder
    • WAVヘッダーを標準出力へ送る: チェックしない
    • オンザフライエンコード: チェック
    • エンコーダパス: flac.exe
    • パラメータ配列(WAVEヘッダーに載っていたフォーマット情報を追加する)
      --force-raw-format --endian=little --channels=2 --sign=signed --sample-rate=44100 --bps=16 -T "Artist=%a" -T "Title=%t" -T "Album=%b" -T "Date=%y" -T "Tracknumber=%tn" -T "Genre=%g" -V -8 -o "%2" -
      
  • 対策後のmetaflac --list の出力
    METADATA block #0
      type: 0 (STREAMINFO)
      is last: false
      length: 34
      minimum blocksize: 4096 samples
      maximum blocksize: 4096 samples
      minimum framesize: 14 bytes
      maximum framesize: 14586 bytes
      sample_rate: 44100 Hz
      channels: 2
      bits-per-sample: 16
      total samples: 9064448
      MD5 signature: b39e15237a351fd155da06ee8d7a4e3c
    

すでに作成してしまったflacファイルの修正

STREAMINFOだけ書き換えられると再エンコード不要で早そうなのですが、方法が見つからなかったので再エンコードすることにしました。再エンコードするとタグ情報が消えるので、metaflacを使って元ファイルからコピーします。

  • flac2flac.bat
    flac -d -F -c %1 | flac -V -8 -o %2 -
    metaflac --export-tags-to - %1 | metaflac --import-tags-from - %2
    
    • 使い方
      flac2flac.bat 元ファイル.flac 再エンコード後.flac
      

*1 : 本当はEACを使うつもりだったのですが、なぜかEACが起動しないPCがあったので、CDexも使ってみることに。