THE 為政者 プログラムリスト

; THE 為政者
; Program by Teikoku 2016
/cls
/setchr,"▼","000000111110111110011100011100001000001000000000"
/let,@FF,"0123456789ABCDEF"
/let,@KK,"-5-4-3-2-1  +1+2+3+4"
/let,@CD,"ゾウゼイ      645 "
/concat,@CD,"ゲンゼイ      465 "
/concat,@CD,"リンジチョウゼイ  744 "
/concat,@CD,"トクセイレイ      276 "
/concat,@CD,"ワイロモクニン     545 "
/concat,@CD,"ワイロテキハツ     475 "
/concat,@CD,"コウキョウコウジ   535 "
/concat,@CD,"センキョジッシ    385 "
/concat,@CD,"チョウヘイ       654 "
/concat,@CD,"ヘイシオンキュウ    457 "
/concat,@CD,"ヘイビゾウキョウ  743 "
/concat,@CD,"グンジヒサクゲン 348 "
/concat,@CD,"エンゼツ       333 "
/let,@SR,"リョウミンノ ボウドウ   "
/concat,@SR,"フシンニンアン カケツセイリツ "
/concat,@SR,"グンブノ クーデター   "

; タイトル画面
*GAMETITLE
/cls
/pchr,3,0,"*** THE イセイシャ  ***"
/pchr,3,2,"PRESS [A] TO START"
/pchr,2,3,"Presented by Teikoku"
/gosub,*KEYWAIT

; ゲーム準備
*GAMEINIT
/let,@F1,3
/let,@F2,3
/let,@F3,3
/let,@SF,1
/let,@NK,1

; 任期初め
*NKHAJIME
/cls
; 政策カード決定
/let,@SC,""
/repeat,3
/rnd,@R,0,12
/substr,@C,@FF,@R,1
/concat,@SC,@C
/loop
;
/btnoff
/pchr,0,0,"ニンキ:"&@NK&"キメ"
/pchr,11,0,"セイジョウフアンLv:"&@SF
/pchr,0,1,"<リョウナイノ フマンド>"
/pchr,0,2,"リョウミン:"&@F1&" カンリョウ:"&@F2&" グンブ:"&@F3
/pchr,0,3,"コンキノセイサクヲ キメテクダサイ"
/pchr,23,3,"▼"
/gosub,*KEYWAIT

; 政策選択画面
*SELSEISAKU0
/cls
/pchr,0,0,"センタクカノウナ セイサク | <フマンド>"
/repeat,3
/substr,@T,@SC,@CNT,1
/instr,@T2,@FF,@T
/substr,@T3,@CD,@T2*16,12
/pchr,2,@CNT+1,@T3
/loop
/pchr,14,1,"|リョウミン "&@F1&"  "
/pchr,14,2,"|カンリョウ "&@F2&"  "
/pchr,14,3,"|グンブ "&@F3&"  "
/let,@Y,0

; 政策選択
*SELSEISAKU
/btnon
/pchr,0,@Y+1,"→"
/gosub,*CDKOUKA
/wait,100
/btngoto,*CSRUP,*CSRDN,//,//,//,*DECIDESK
/goto,-2

; カーソル上移動
*CSRUP
/pchr,0,@Y+1," "
/if,@Y,>,0,+2,//
/let,@Y,3
/calc,@Y,@Y-1
/goto,*SELSEISAKU

; カーソル下移動
*CSRDN
/pchr,0,@Y+1," "
/if,@Y,<,2,+2,//
/let,@Y,-1
/calc,@Y,@Y+1
/goto,*SELSEISAKU

; 政策決定
*DECIDESK
/btnoff
/cls
/pchr,0,0,"セイサクジッコウニヨル フマンドノヘンカ"
/pchr,3,1,"リョウミン: "&@F1&" → "
/pchr,3,2,"カンリョウ: "&@F2&" → "
/pchr,3,3,"グンブ: "&@F3&" → "
/substr,@T,@SC,@Y,1
/instr,@T2,@FF,@T
/substr,@FD,@CD,@T2*16+12,3
/gosub,*FUMANUD
/pchr,14,1,@F1
/pchr,14,2,@F2
/pchr,14,3,@F3
/pchr,23,3,"▼"
/gosub,*KEYWAIT

; 不満度爆発判定
/gosub,*FUMANBK
/if,@OV,==,-1,+2,//
/goto,*GAMEOVER

; 政情不安レベル上昇判定
*SFUPHANTEI
/cls
/if,@SF,>=,7,*SFLVMAX,//
/let,@SJ,1
/if,@SF,<,2,+6,//
/let,@SJ,2
/if,@SF,<,4,+4,//
/let,@SJ,3
/if,@SF,<,6,+2,//
/let,@SJ,4
;
/if,@NK,==,5,//,+2
/if,@SF,==,1,*SFUP,//
/rnd,@R,1,6
/if,@R,<=,@SJ,*SFUP,*SFUPHANTEI2
; 政情不安レベル上昇
*SFUP
/calc,@SF,@SF+1
/pchr,3,1,"リョウナイニ セイジョウフアンガ"
/pchr,3,2,"ヒロガリマシタ... Lv"&@SF&"デス"
/goto,*SFUPHANTEI3
;
*SFUPHANTEI2
/pchr,3,1,"リョウナイハ ヒカクテキ"
/pchr,3,2,"オチツイテイルヨウデス..."
/goto,*SFUPHANTEI3
; 政情不安レベル最大
*SFLVMAX
/pchr,1,1,"リョウナイノ セイジョウフアンハ"
/pchr,1,2,"キョクゲンマデ ヒロガッテイマス..."
*SFUPHANTEI3
/pchr,23,3,"▼"
/gosub,*KEYWAIT

; 不満度上昇先決定
*FUMANSELECT
/cls
/let,@T1,1
/let,@FD,"555"
/pchr,0,0,"セイジョウフアンニヨル フマンドノヘンカ"
/pchr,3,1,"リョウミン: "&@F1&" → "
/pchr,3,2,"カンリョウ: "&@F2&" → "
/pchr,3,3,"グンブ: "&@F3&" → "
; 政情不安レベル7なら不満上昇値2に
/if,@SF,<,7,+2,//
/let,@T1,2
;
/rnd,@R,0,2
/substr,@T2,@FD,@R,1
/calc,@T2,@T2+@T1
/replace,@FD,@FD,@R,@T2
/if,@SF,<,4,*FUMANSEL2,//
; 政情不安レベル4以上ならもう1カ所
/rnd,@R,0,2
/substr,@T2,@FD,@R,1
/calc,@T2,@T2+@T1
/replace,@FD,@FD,@R,@T2
*FUMANSEL2
/gosub,*FUMANUD
/pchr,14,1,@F1
/pchr,14,2,@F2
/pchr,14,3,@F3
/pchr,23,3,"▼"
/gosub,*KEYWAIT

; 不満度爆発判定(再)
/gosub,*FUMANBK
/if,@OV,==,-1,+2,//
/goto,*GAMEOVER

; 20期務めたらゲームクリア
/if,@NK,>=,20,*GAMECLEAR,//
; 次の期へ進む
/calc,@NK,@NK+1
/goto,*NKHAJIME
/end

; ゲームオーバー
*GAMEOVER
/cls
/beep,10
/substr,@T1,@SR,@OV*16,16
/pchr,0,0,@T1&"ニヨリ、"
/pchr,0,1,"アナタハ "&@NK&"キメニ シッキャクシマシタ..."
/pchr,4,3,"GAME OVER..."
/pchr,23,3,"▼"
/gosub,*KEYWAIT
/goto,*GAMETITLE

; ゲームクリア
*GAMECLEAR
/cls
/pchr,0,0,"アナタハ イセイシャトシテ 20キヲ ブジ"
/pchr,0,1,"ツトメアゲ ユウタイシマシタ オメデトウ!"
/pchr,2,3,"CONGRATULATIONS !!"
/pchr,23,3,"▼"
/gosub,*KEYWAIT
/goto,*GAMETITLE

; -- サブルーチン群 --
; キーウェイト
*KEYWAIT
/btnon
/wait,100
/btngoto,//,//,//,//,//,+2
/goto,-2
/btnoff
/return

; カード効果
*CDKOUKA
/substr,@T,@SC,@Y,1
/instr,@T2,@FF,@T
/substr,@T3,@CD,@T2*16+12,3
/repeat,3
/substr,@T4,@T3,@CNT,1
/substr,@T5,@KK,@T4*2,2
/pchr,22,@CNT+1,@T5
/loop
/return

; 不満度修正
*FUMANUD
/substr,@K1,@FD,0,1
/calc,@K1,@K1-5
/substr,@K2,@FD,1,1
/calc,@K2,@K2-5
/substr,@K3,@FD,2,1
/calc,@K3,@K3-5
;
/calc,@F1,@F1+@K1
/calc,@F2,@F2+@K2
/calc,@F3,@F3+@K3
;
/if,@F1,>,0,+2,//
/let,@F1,0
/if,@F2,>,0,+2,//
/let,@F2,0
/if,@F3,>,0,+2,//
/let,@F3,0
/return

; 不満度爆発判定
*FUMANBK
/let,@OV,-1
/if,@F1,<,10,+2,//
/let,@OV,0
/if,@F2,<,10,+2,//
/let,@OV,1
/if,@F3,<,10,+2,//
/let,@OV,2
/return