Hextrategy 経験値による能力の上昇を実装中


2021年 2月 24日
 
 
 未実装だった経験値による能力の上昇を実装している。

 ↓

 経験値を稼ぐ場所は沢山あるので、これまた実装には時間がかかっている、まだ途中だ。
 
 

 経験値取得のプログラムはこんな感じ

#deffunc ep int _ep_f,int _ep_un1,int _epf1,int _ep_un2,int _epf2,int _epfk

	if walaf=1 : return ; 城攻撃モード

	ep_f=_ep_f		; 比較種類(0=無し、1=敵、2=都市)

	ep_un1=_ep_un1	; 対象ユニット
	 epf1=_epf1		; 上昇する能力

	epfk=_epfk		; 上昇係数

	ep_un2=_ep_un2	; 比較ユニット,国
	 epf2=_epf2		; 比較する能力


; 自ユニット

	ep_ug1=ep_un1*udb ; 上昇する能力
	 ep_jf=double(ud(ep_ug1+epf1))*double(epfk) ; の値
	  if ep_jf=0.0 : return

	if epf1=1 : exp_n1=ud(ep_ug1+51) ; STR、保持しているexp値
	if epf1=2 : exp_n1=ud(ep_ug1+52) ; MAG、保持しているexp値
	if epf1=3 : exp_n1=ud(ep_ug1+53) ; INT、保持しているexp値
	if epf1=4 : exp_n1=ud(ep_ug1+54) ; CHR、保持しているexp値

	exp_n2=double(exp_n1)/1000000.0 ; 実数に変換


; 比較能力

	switch ep_f ; 比較種類
	 case 0
	  ep_ef=0.0
	 swbreak
	 case 1 ; 敵能力
	  ep_ug2=ep_un2*udb	; 比較する能力
	   ep_ef=double(ud(ep_ug2+epf2)) ; の値
	 swbreak
	 case 2 ; 都市 100000
	  if epf2=1 : ep_ef=double(md(ep_un2*mdb+1))/double(10000); 人口
	  if epf2=2 : ep_ef=double(md(ep_un2*mdb+2))/double(1000) ; 魔術
	  if epf2=3 : ep_ef=double(md(ep_un2*mdb+3))/double(1000) ; マナ
	  if epf2=4 : ep_ef=double(100000-md(ep_un2*mdb+4))/double(1000) ; 治安
	  if epf2=5 : ep_ef=double(wal(ep_un2))/double(100) ; 城壁値
	  if epf2=6 : ep_ef=double(wp(ep_un2));/double(100) ; wp戦力値
	 swbreak
	 case 3 ; 数
	  ep_ef=double(ep_un2)/double(epf2)
	 swbreak
	swend
	if ep_ef<=0.0 : return


; exp処理

	exp_f=ep_ef/ep_jf	; 取得経験値
	 if exp_f>0.5 : exp_f=0.5 ; 上限

	exp_g=exp_n2+exp_f	; 現総exp

	exp_n=int(exp_g)	; 整数値
	 if exp_n>0 {
	  if epf1=1 : ep_defn1=int(round(double(ud(ep_ug1+1))/3.0)) ; 防御
	  if epf1=2 : ep_mdfn1=int(round(double(ud(ep_ug1+2))/3.0)) ; 魔防

	  ud(ep_ug1+epf1)+=exp_n
	   if ud(ep_ug1+epf1)>99 : ud(ep_ug1+epf1)=99
	  ud(ep_ug1+20+epf1)+=exp_n
	  exp_g-=double(exp_n)

	  if epf1=1 { ; 攻撃、防御
	   ud(ep_ug1+11)+=exp_n
	   ep_defn2=int(round(double(ud(ep_ug1+1))/3.0))
	    ep_defn3=ep_defn2-ep_defn1
	     if ep_defn3>0 : ud(ep_ug1+12)+=ep_defn3
	  }
	  if epf1=2 { ; 魔攻、魔防
	   ud(ep_ug1+14)+=exp_n
	   ep_mdfn2=int(round(double(ud(ep_ug1+2))/3.0))
	    ep_mdfn3=ep_mdfn2-ep_mdfn1
	     if ep_mdfn3>0 : ud(ep_ug1+15)+=ep_mdfn3
	  }
	 }

	exp_n3=int(exp_g*1000000) ; 収納するexp値
	 if epf1=1 : ud(ep_ug1+51)=exp_n3 ; STR、保持するexp値
	 if epf1=2 : ud(ep_ug1+52)=exp_n3 ; MAG、保持するexp値
	 if epf1=3 : ud(ep_ug1+53)=exp_n3 ; INT、保持するexp値
	 if epf1=4 : ud(ep_ug1+54)=exp_n3 ; CHR、保持するexp値

	return

 基本的な式は次の通りで

exp_f=ep_ef/ep_jf ; 取得経験値

 対象の値を自ユニットの能力値で割る、という単純なもの。

 少数点で計算するために、経験値のデータは整数で保存しておいて、一度 /1000000で少数にしてから計算し、1.0を超えたらその分を能力値に加算し、残った少数をまた *1000000して整数にしてデータ保存しておく、という手法になってる。

 最後の epfkは取得量の係数で、単純に 10 → 30だと取得量 3分の1になる。
 
 
 敵能力値の比較の場合は主に戦闘で

#deffunc atk int _atkf,int _atkn,int _atkrg
; 攻撃(フラグ(0=素手、1=武器、2=魅惑)、攻撃値、射程) -------

	atkf=_atkf
	atkn=_atkn
	atkrg=_atkrg

	atkn2=atkn : atkf2=atkf ; 攻撃処理用フラグ

	switch atkf
	 case 0 ; 素手
	  if  us=129  or us=94 : swbreak	; 物理アタックしない
	  rang fs,atkrg : if en=0 : swbreak	; 射程外
	   ep 1,un,1,en,1,10 ; exp

	  if us=152 { ; ピクシーの弓
	   btsn=13 : btsf2=0 : efs 3,16 ,1,1,8,0 : mmplays 35	; 表示
	   atk_syo : bw 20
	   swbreak
	  }

	  bts 1 : atk_syo : bw 20			; 表示、攻撃処理
	 swbreak

	 case 1 ; 武器

; 大砲
	  if id(ig)=90 {
	   f=0
	   repeat 3,1 ; 3体いるか
	    etf cnt : if en=0 : f=1 : break
	   loop
	   if atkrg<(ut-1)+2 : f=1 ; 真ん中に射程が届くか
	   if f=0 { ; 3体の場合
	    et=2 : bts 3 : bw 7 ; 弾道エフェクト
	    gsr=100	; 中央
	     et=2 : etf et : if en>0 : ep 1,un,1,en,1,30 : atk_syo : bts 113
	    gsr=75	; 左右
	     et=1 : etf et : if en>0 : ep 1,un,1,en,1,30 : atk_syo : bts 113
	     et=3 : etf et : if en>0 : ep 1,un,1,en,1,30 : atk_syo : bts 113
	      bw 13	; 爆発ウエイト
	    swbreak
	   }

	   rang fs,atkrg : if en=0 : swbreak ; 射程内に敵がいなかった
	    ep 1,un,1,en,1,30 ; exp
	     bts 3 : bw 7 ; 弾道エフェクト
	      atk_syo : bts 113 ; 1体目
	   
	    et+ : if et<=3 {
		 etf et : if en=0 : bw 13 : swbreak ; 2体目にいない
	      ep 1,un,1,en,1,30 ; exp
	       gsr=75 : atk_syo : bts 113 ; 2体目
	    }
	    bw 13 ; 爆発ウエイト
	   swbreak
	  }

; 弓、銃
	  if id(ig+19)=7 or id(ig+19)=8 or id(ig+19)=9 {;or id(ig+19)=10 { ; 弓、ボウガン、銃、手裏剣
	   atkrg2=atkrg ; 射程
	    if ud(ug+8)=28 : atkrg2+ ; 長射

	   if ud(ug+8)=26 or id(ig+8)=2 { ; 貫通
	    atkf2=0
		repeat 3,1 : et=cnt
		 if atkrg2<(ut-1)+et : break	; 射程外
		  etf et : if en=0 : continue	; 隊列にいない
	       ep 1,un,1,en,1,30			; exp
	        atk_syo : gsr-=25 : atkf2+	; 攻撃処理
		loop
		if atkf2>0 : bts 3 : bw 20
		swbreak
	   }

	   bown=1 ; 弓攻撃回数

	   if id(ig+19)=7 { ; 弓の場合
	    if ud(ug+8)=27 : bown+ ; 連射
	    repeat sbkn
	     if ud(ug+40+cnt)<=0 : continue
	     if id(ud(ug+40+cnt)*idb+8)=50 : bown+ ; 回数+
	    loop
	   }

	   repeat bown ; 弓攻撃
	    if ud(ug+8)!24 : rang fs,atkrg2	; 通常
	    if ud(ug+8)=24 : brang atkrg2	; スナイピング
		 if en=0 : break ; 射程外

		 ep 1,un,1,en,1,bown*10 ; exp
	      bts 3 : atk_syo : bw 6 ; 遠距離武器、表示、攻撃処理
	       gsr-=15
	    if ud(en*udb+26)<=0 : break ; ターゲットが死んだ場合連射終わり
	    if fn_syof=1 : break ; 全滅
	   loop
	   bw 14
	   swbreak
	  }
	  if fn_syof=1 : swbreak ; 全滅


; 近接武器
	  rang fs,atkrg : if en=0 : swbreak
	   ep 1,un,1,en,1,10 ; exp
	   if ut=1 and et=1 : bts 2 : else : if id(ig+8)=1 : bts 3 : else : bts 2 ; 表示
	    atk_syo : bw 20 ; 近接武器、攻撃処理
	 swbreak
	 case 2 ; 魅惑
	  bts 1 : atk_syo ; 攻撃処理
	   temp_atkf=1 : bw 20 : temp_atkf=0
	 swbreak
	swend

	if dm>=0 and ud(eg+26)>0 and ud(ug)=156 {
	 temp 0,ud(ug+9),97 ; キューピッドのチャーム
	  ep 1,un,4,en,4,10 ; exp
	}

	return

ep 1,un,1,en,1,10 ; exp

 のようになっていて、1=STR、2=MAG、3=INT、4=CHR
 
 
 国データ比較の場合は主に国力の増減や災害時に上がる。

*country ;---------- 国力の増減 ------------------------------------------------

	repeat 25,1
	 m=cnt							; 国
	  if map(m)=0 : continue		; 地形無い

	 pn=mpl(m)						; プレイヤーno.
	  mgvg=pn*mgvb					; 政府データ先頭
	  mc=mpc(pn)					; 首都
	 mdg=m*mdb						; 国のデータ先頭
	  un1=mu(mdg) : ug1=un1*udb		; 領主
	 ;un2=0 : if pn>0 : un2=mu(mc*mdb) : ug2=un2*udb ; 首領


; 人口増加 -------------------------------

	 n=50;20						; 基礎増加値、10
	  if map(m)=3 : n+=30;20		; 草原なら人口増加、20
	  ;if map(m)=5 : n+=10			; 森、10
	  n+=md(mdg+2)/1000				; 魔術Lvによる増加、100000で100
	 ; n+=md(mdg+4)/1000-50			; 治安、100%で50


; 建築物、その他、城30、砦20、市場70、公園10

	  if md(mdg+7)=1 : n+=30		; 城

	  if md(mdg+7)=4 {				; 市場
	   n+=50
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+24)				; 補整、魅力
	    if ud(ug+8)=3 : n+=20		; 行政、20
	    if ud(ug+8)=5 : n+=10		; 祭司、10
	    if ud(ug+8)=8 : n+=10		; 治安、10
	    ep 2,un,4,m,1,10
	   }
	  }

	  if md(mdg+7)=5 {				; 人材府
	   n+=10
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+24)*1/5			; 補整、魅力
	    if ud(ug+8)=3 : n+=20*1/5	; 行政、8
	    if ud(ug+8)=5 : n+=10*1/5	; 祭司、4
	    if ud(ug+8)=8 : n+=10*1/5	; 治安、4
	    ep 2,un,4,m,1,50
	   }
	  }

	  if md(mdg+7)=7 {				; 砦
	   n+=10
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+24)*1/5			; 補整、魅力
	    if ud(ug+8)=3 : n+=20*1/5	; 行政、8
	    if ud(ug+8)=5 : n+=10*1/5	; 祭司、4
	    if ud(ug+8)=8 : n+=10*1/5	; 治安、4
	    ep 2,un,4,m,1,50
	   }
	  }

	  if md(mdg+7)=9 {				; 寺院
	   n+=20
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+24)*2/5			; 補整、魅力
	    if ud(ug+8)=3 : n+=20*2/5	; 行政、8
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、4
	    if ud(ug+8)=8 : n+=10*2/5	; 治安、4
	    ep 2,un,4,m,1,40
	   }
	  }


; 領主
	  if un1>0 {
	   n+=ud(ug1+24)				; 領主補整、魅力
	   if ud(ug1+8)=3 : n+=20		; 行政、20
	   if ud(ug1+8)=5 : n+=10		; 祭司、10
	   if ud(ug1+8)=8 : n+=10		; 治安、10
	   ep 2,un1,4,m,1,10
	  }

; 政府
	  un=mgv(mgvg+1) : ug=un*udb	; 首領
	   if un>0 {
	    n+=ud(ug+24)*1/5			; 首領補整、魅力
	    if ud(ug+8)=3 : n+=20*1/5	; 行政、4
	    if ud(ug+8)=5 : n+=10*1/5	; 祭司、2
	    if ud(ug+8)=8 : n+=10*1/5	; 治安、2
	    ep 2,un,4,m,1,50
	   }

	  un=mgv(mgvg+2) : ug=un*udb	; 政務
	   if un>0 {
	    n+=ud(ug+24)*2/5			; 補整、魅力
	    if ud(ug+8)=3 : n+=20*2/5	; 行政、8
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、4
	    if ud(ug+8)=8 : n+=10*2/5	; 治安、4
	    ep 2,un,4,m,1,40
	   }


mdg4n=mdg+4
	  n=int(round(double(n)*(100.0+(double(md(mdg4n))/1000.0-50.0))/100.0)) ; 治安、100%で+50%、0%で-50%
;if pn=1 : n11b=n

	 ;md(mdg+1)+=md(mdg+1)*n/4000	; 人口の増加
mdg1n=mdg+1
	 f1=double(md(mdg1n))*double(n)/4000.0	; 人口の増加数

	 f2=1100000.0-double(md(mdg1n))	; 上限補整率

	 md(mdg+1)+=int(round(f1/1100000.0*f2))	; 人口の増加


; 魔術増加 -------------------------------

	 n=50;20						; 基礎増加値、20
	  if map(m)=2 : n+=40;20		; 水辺なら魔術増加、20
	  if map(m)=5 : n+=10			; 森、10
	  if map(m)=6 : n+=20			; 沼
	  n+=md(mdg+3)/1000				; マナによる増加、100000で100


; 建築物、その他、城30、魔学院70、公園10、鍛冶30

	  if md(mdg+7)=1 : n+=30		; 城

	  if md(mdg+7)=2 {				; 塔
	   n+=50
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+23)				; 補整、知力
	    if ud(ug+8)=4 : n+=20		; 魔術、20
	    if ud(ug+8)=6 : n+=10		; 製作、10
	    if ud(ug+8)=5 : n+=10		; 祭司、10
	    ep 2,un,3,m,2,10
	   }
	  }

	  if md(mdg+7)=6 {				; 鍛冶
	   n+=20
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+23)*2/5			; 補整、知力
	    if ud(ug+8)=4 : n+=20*2/5	; 魔術、8
	    if ud(ug+8)=6 : n+=10*2/5	; 製作、4
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、4
	    ep 2,un,3,m,2,40
	   }
	  }

	  if md(mdg+7)=9 {				; 寺院
	   n+=20
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+23)*2/5			; 補整、知力
	    if ud(ug+8)=4 : n+=20*2/5	; 魔術、8
	    if ud(ug+8)=6 : n+=10*2/5	; 製作、4
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、4
	    ep 2,un,3,m,2,40
	   }
	  }


; 領主
	  if un1>0 {
	   n+=ud(ug1+23)				; 領主補整、知力
	   if ud(ug1+8)=4 : n+=20		; 魔術、20
	   if ud(ug1+8)=6 : n+=10		; 製作、10
	   if ud(ug1+8)=5 : n+=10		; 祭司、10
	   ep 2,un1,3,m,2,10
	  }


; 政府
	  un=mgv(mgvg+1) : ug=un*udb	; 首領
	   if un>0 {
	    n+=ud(ug+23)*1/5			; 首領補整、知力
	    if ud(ug+8)=4 : n+=20*1/5	; 魔術、4
	    if ud(ug+8)=6 : n+=10*1/5	; 製作、2
	    if ud(ug+8)=5 : n+=10*1/5	; 祭司、2
	    ep 2,un,3,m,2,50
	   }

	  un=mgv(mgvg+3) : ug=un*udb	; 魔術
	   if un>0 {
	    n+=ud(ug+23)*2/5			; 補整、知力
	    if ud(ug+8)=4 : n+=20*2/5	; 魔術、8
	    if ud(ug+8)=6 : n+=10*2/5	; 製作、4
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、4
	    ep 2,un,3,m,2,40
	   }




mdg4n=mdg+4
	  n=int(round(double(n*2)*(100.0+(double(md(mdg4n))/1000.0-50.0))/100.0)) ; 治安、100%で+50%、0%で-50%


	 f1=double(n)
mdg2n=mdg+2
	 f2=110000.0-double(md(mdg2n))

	 md(mdg+2)+=int(round(f1/110000.0*f2))	; 魔術の増加



; マナ増加 --------------------------------------

	 n=50;20						; 基礎増加値%、20
	  if map(m)=4 : n+=20;40;20		; 山ならマナ増加、20
	  if map(m)=5 : n+=10;20;10		; 森、10
	  n+=md(mdg+1)/10000			; 人口による増加、100000(1000人)で10


; 建築物、その他、城30、ストーンサークル70、公園10

	  if md(mdg+7)=1 : n+=30

	  if md(mdg+7)=3 {				; ストーンサークル
	   n+=50
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+22)				; 補整、魔力
	    if ud(ug+8)=5 : n+=20		; 祭司、20
	    if ud(ug+8)=4 : n+=10		; 魔術、10
	    if ud(ug+8)=8 : n+=10		; 治安、10
	    ep 2,un,2,m,3,10
	   }
	  }

	  if md(mdg+7)=4 {				; 市場
	   n+=10
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+22)*1/5			; 補整、魔力
	    if ud(ug+8)=5 : n+=20*1/5	; 祭司、20
	    if ud(ug+8)=4 : n+=10*1/5	; 魔術、10
	    if ud(ug+8)=8 : n+=10*1/5	; 治安、10
	    ep 2,un,2,m,3,50
	   }
	  }

	  if md(mdg+7)=9 {				; 寺院
	   n+=20
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+22)*2/5			; 補整、魔力
	    if ud(ug+8)=5 : n+=20*2/5	; 祭司、20
	    if ud(ug+8)=4 : n+=10*2/5	; 魔術、10
	    if ud(ug+8)=8 : n+=10*2/5	; 治安、10
	    ep 2,un,2,m,3,40
	   }
	  }

; 領主
	  if un1>0 {
	   n+=ud(ug1+22)				; 領主補整、魔力
	   if ud(ug1+8)=5 : n+=20		; 祭司、20
	   if ud(ug1+8)=4 : n+=10		; 魔術、10
	   if ud(ug1+8)=8 : n+=10		; 治安、10
	   ep 2,un1,2,m,3,10
	  }

; 政府
	  un=mgv(mgvg+1) : ug=un*udb	; 首領
	   if un>0 {
	    n+=ud(ug+22)*1/5			; 首領補整、魔力
	    if ud(ug+8)=5 : n+=20*1/5	; 祭司、4
	    if ud(ug+8)=4 : n+=10*1/5	; 魔術、2
	    if ud(ug+8)=8 : n+=10*1/5	; 治安、2
	    ep 2,un,2,m,3,50
	   }

	  un=mgv(mgvg+4) : ug=un*udb	; 宗教
	   if un>0 {
	    n+=ud(ug+22)*2/5			; 補整、魔力
	    if ud(ug+8)=5 : n+=20*2/5	; 祭司、8
	    if ud(ug+8)=4 : n+=10*2/5	; 魔術、4
	    if ud(ug+8)=8 : n+=10*2/5	; 治安、4
	    ep 2,un,2,m,3,40
	   }


mdg4n=mdg+4
	  n=int(round(double(n*2)*(100.0+(double(md(mdg4n))/1000.0-50.0))/100.0)) ; 治安、100%で+50%、0%で-50%


	 f1=double(n)

mdg3n=mdg+3
	 f2=110000.0-double(md(mdg3n))


	 md(mdg+3)+=int(round(f1/110000.0*f2))	; マナの増加



; 治安 ----------------------------------

	 n=50;20						; 基礎増加値%

	  if map(m)=5 : n+=10;20		; 森なら治安増加、20
	  if map(m)=6 : n+=-10;20;10	; 沼、10


; 建築物、その他、城30、警察署70、砦+40、市場-20

	  if md(mdg+7)=1 : n+=30		; 城

	  if md(mdg+7)=7 {				; 砦
	   n+=20
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+21)*2/5			; 補整、筋力
	    if ud(ug+8)=8 : n+=20*2/5	; 治安、20
	    if ud(ug+8)=3 : n+=10*2/5	; 行政、10
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、10
	    ep 2,un,1,m,4,40
	   }
	  }

	  if md(mdg+7)=8 {				; 警察署
	   n+=50
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+21)				; 補整、筋力
	    if ud(ug+8)=8 : n+=20		; 治安、20
	    if ud(ug+8)=3 : n+=10		; 行政、10
	    if ud(ug+8)=5 : n+=10		; 祭司、10
	    ep 2,un,1,m,4,10
	   }
	  }

	  if md(mdg+7)=9 {				; 寺院
	   n+=20
	   un=mas(m) : ug=un*udb		; 支配人
	   if un>0 {
	    n+=ud(ug+21)*2/5			; 補整、筋力
	    if ud(ug+8)=8 : n+=20*2/5	; 治安、20
	    if ud(ug+8)=3 : n+=10*2/5	; 行政、10
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、10
	    ep 2,un,1,m,4,40
	   }
	  }


; 領主
	  if un1>0 {
	   n+=ud(ug1+21)				; 領主補整、筋力
	   if ud(ug1+8)=8 : n+=20		; 治安、20
	   if ud(ug1+8)=3 : n+=10		; 行政、10
	   if ud(ug1+8)=5 : n+=10		; 祭司、10
	   ep 2,un1,1,m,4,10
	  }


; 政府
	  un=mgv(mgvg+1) : ug=un*udb	; 首領
	   if un>0 {
	    n+=ud(ug+21)*1/5			; 首領補整、筋力
	    if ud(ug+8)=8 : n+=20*1/5	; 治安、4
	    if ud(ug+8)=3 : n+=10*1/5	; 行政、2
	    if ud(ug+8)=5 : n+=10*1/5	; 祭司、2
	    ep 2,un,1,m,4,50
	   }

	  un=mgv(mgvg+5) : ug=un*udb	; 警察
	   if un>0 {
	    n+=ud(ug+21)*2/5			; 補整、筋力
	    if ud(ug+8)=8 : n+=20*2/5	; 治安、8
	    if ud(ug+8)=3 : n+=20*2/5	; 行政、4
	    if ud(ug+8)=5 : n+=10*2/5	; 祭司、4
	    ep 2,un,1,m,4,40
	   }



	 md(mdg+4)+=50000*n/4000		; 治安の増加
	  if md(mdg+4)>100000 : md(mdg+4)=100000 ; 上限


; 城壁値の増加 ----------

	 n=0

; 建築物
	 if md(mdg+7)=1 { ; 城
	  if un1>0 {					; 城主
	   n+=ud(ug1+21)*2/5			; 補整、筋力
	   if ud(ug1+8)=6 : n+=20*2/5	; 製作、8
	   if ud(ug1+8)=3 : n+=10*2/5	; 行政、4
	   if ud(ug1+8)=8 : n+=10*2/5	; 治安、4
	   ep 2,un1,1,m,5,40
	  }
	 }

	 if md(mdg+7)=7 { ; 砦
	  un=mas(m) : ug=un*udb			; 支配人
	  if un>0 {
	   n+=ud(ug+21)*2/5				; 補整、筋力
	   if ud(ug+8)=6 : n+=20*2/5	; 製作、8
	   if ud(ug+8)=3 : n+=10*2/5	; 行政、4
	   if ud(ug+8)=8 : n+=10*2/5	; 治安、4
	   ep 2,un,1,m,5,40
	  }
	 }

; 司令官
	 un=com(m) : ug=un*udb			; 司令官
	 if un>0 {
	  n+=(ud(ug+21)+ud(ug+22)+ud(ug+23)+ud(ug+24))*2/10 ; 補整、総力
	  if ud(ug+8)=6 : n+=20*2/5		; 製作、8
	  if ud(ug+8)=3 : n+=10*2/5		; 行政、4
	  if ud(ug+8)=8 : n+=10*2/5		; 治安、4
	  ep 2,un,1,m,5,50
	  ep 2,un,2,m,5,50
	  ep 2,un,3,m,5,50
	  ep 2,un,4,m,5,50
	 }

; 政府
	 un=mgv(mgvg+6) : ug=un*udb		; 軍務
	 if un>0 {
	  n+=(ud(ug+21)+ud(ug+22)+ud(ug+23)+ud(ug+24))*1/10 ; 首領補整、総力
	  if ud(ug+8)=6 : n+=20*1/5		; 製作、4
	  if ud(ug+8)=3 : n+=10*1/5		; 行政、2
	  if ud(ug+8)=8 : n+=10*1/5		; 治安、2
	  ep 2,un,1,m,5,100
	  ep 2,un,2,m,5,100
	  ep 2,un,3,m,5,100
	  ep 2,un,4,m,5,100
	 }

	 wal(m)+=n*10/15
	 n=1000 ; 最大値
	  if md(mdg+7)=1 : n=2000 ; 城
	  if md(mdg+7)=7 : n=1500 ; 砦
	 if wal(m)>n : wal(m)=n


	loop

;10000 ; で100人、100000で1000人200000で2000人
;5000、魔術、50
;5000、マナ、50
;50000、治安、50%

	return

ep 2,un,4,m,1,10

 m=国No.、1=人口、2=魔術、3=マナ、4=治安

 un,4なので能力値は CHR、m,1なので m国の人口を対象、となってる。
 
 

 数値はそのターンで増えた値となってる。

 そのためユニットデータを 50個から 60個に増やして、51~54を経験値格納、55~58をターンの始めに元の能力値を控えておくデータにして、ターン中に増えた分との比較が表示されるようになってる。
 
 
 経験値を取得する場所が多いので、まだ少し時間がかかる、今は魔法関連をやってる。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です