main.hsp

Last-modified: 2015-03-17 (火) 02:24:48

キー入力・ターン処理・イベント処理などを行うスクリプト。
他のスクリプトはこのスクリプトに#includeする形で結合されている。

一度も初期洞窟から出ないまま這い上がったときゲーム進行不能に陥る問題

20 名無しさん@お腹いっぱい。 sage 2011/03/18(金) 19:47:15.15 ID:hOP/Lnw6
新規ゲーム開始時、一度も自宅(洞窟)から出ないまま死亡->這い上がるとした時、
洞窟から出ようとすると「マップのロードに失敗しました」のダイアログが
表示され嵌る問題の修正

オリジナルソース
main.hspの463行目の末尾に「: gHomeLevel = 0 : gosub *setArea」を追加

逆コンパイルソース(Ver1.22)
245350行目付近に
gdata(24) = 0
gosub *label_1752
の2行を追加

休み半日費やしてやっと原因特定とか…orz

ネフィアボス討伐報酬の金貨の量が205枚固定になっている問題

404 名前:名無しさん@お腹いっぱい。 [sage] 投稿日:2011/04/01(金) 04:19:58.34 ID:tns7sz5b [3/4]
関連とゆーか調べたついでに出てきたこれも多分バグ

ネフィアボスを倒した際に足元に生成される金貨の量が想定外の値になってる

main.hsp 1758行目
flt:item_create -1,idGold,cX(pc),cY(pc),200+iNum(ci)*5

noStack=true:flt:item_create -1,idGold,cX(pc),cY(pc):iNum(ci)=200+iNum(ci)*5
に変更

 

逆根
248157行目のすぐ上に
nostack = 1
を追加
248158行目の末尾のパラメータ(200 + inv(0, ci) * 5)を0に変更
248158行目のすぐ下に
inv(0, ci) = 200 + inv(0, ci) * 5
を追加

 

で、多分いいんでなかろか
設定値が想定通りかは知らね

すくつボスの基本レベルが適切でない問題

すくつボスの基本レベル
initlv = gdata(22) / 4
となっているが低層では周りの敵より弱くなり、深層では逆に上がりすぎてしまう
initlv = limit(gdata(22) / 4, 50, 250)
とでもしておくといいかもしれない

勝利ウィンドウの表示がおかしい問題

288 名前:名無しさん@お腹いっぱい。 [sage] 投稿日:2011/03/28(月) 18:32:34.81 ID:0T617TrP

*勝利*ウィンドウの表示不具合修正。
まず、void.bmpの読み込み直後に以下の処理を挿入。

> pos 0, 0

> gzoom windoww, windowh, 4, 0, 0, 640, 480

そしてwwに680を、whに488を、pagesizeに0をセットする記述を追加し、
以下の記述でdisplay_windowを実行。

> display_window (windoww / 2) - (ww / 2) , (windowh / 2) - (wh / 2), ww, wh

死んでマップから消滅したはずのユニットが残留し続ける問題

地面効果による当たり判定の後に、ユニットが生存しているか否かの判定がないため、
装備品が呪われているユニットが、マップ効果(火柱や酸)でミンチになったと同時に呪いによるテレポートが発動すると、
テレポート先のユニット表示情報が更新されてしまうのが原因。

main.hsp 749行目

ゲスト冒険者の判定がおかしい問題

Re: Elona開発ファイル所有者の情報交換トピック
投稿記事by ゲスト on 土 1 10, 2015 4:17 pm

気になる処理が2つほどあったのですが、これらは意図されたものなのか分かる方いらっしゃいましたら教えてくださると助かります。

1. main.hsp 1061行目 levelExitBy==mExitNormal
    これは正しくはlevelExitBy=mExitNormalと考えてよいのでしょうか?

2. main.hsp 1848行目 cArea(i)!gArea
    これは正しくはif cArea(i)!gAreaと考えてよいのでしょうか?

もし既出でしたらすみません。

概要

1の==は=と同じように解釈されているようだ
2はcArea(i)=(cArea(i)!=gArea)と同じように解釈されるので実質的にcArea(i)=1と同じ
冒険者の現在地にエリア番号1が代入されてしまう
また、一連の処理の中でif cImpression(cnt)<cImpression(i):tc=i:p++の部分もおかしい
cntではペットと冒険者の友好度を比較してしまうのでtcの間違いだろう

修正方法

main.hsp 1844行目

	if (rnd(3))or(develop){
		p=0:tc=0
		repeat 100
		i=rnd(maxAdv)+maxFollower
		if cExist(i)=cAdv:if cBit(cHired,i)=false:cArea(i)!gArea:if cRelation(i)>=cNeutral{
			if rnd(25)<p:break
			if tc=0{
				tc=i:p++
				if cImpression(tc)<defImpHate	:if rnd(12)=0:break
				if cImpression(tc)<defImpEnemy :if rnd(4):break
				continue
				}
			if cImpression(cnt)<cImpression(i):tc=i:p++
			}
		loop

	if (rnd(3))or(develop){
		p=0:tc=0
		repeat 100
		i=rnd(maxAdv)+maxFollower
		if cExist(i)=cAdv:if cBit(cHired,i)=false:if cArea(i)!gArea:if cRelation(i)>=cNeutral{
			if rnd(25)<p:break
			if tc=0{
				tc=i:p++
				if cImpression(tc)<defImpHate	:if rnd(12)=0:break
				if cImpression(tc)<defImpEnemy :if rnd(4):break
				continue
				}
			if cImpression(tc)<cImpression(i):tc=i:p++
			}
		loop

マイチェアがなくても来客用の椅子の近くに椅子があると来客時にPCがそちらに移動してしまう問題

概要

来客用の椅子があり、マイチェアがあればPCはマイチェアに、ペットは来客近くの他の椅子を探して座るような仕様になっている。

今回の修正では
来客用の椅子があればマイチェアがなくともPCとペットは近くの椅子を探して座る、となっていたのを
来客用の椅子があってマイチェアがない場合、来客は座るがPCもペットも座らないとした。

修正方法

main.hsp 1914行目

	i=0
	repeat maxFollower+1
	if cnt=0:c=tc:else:c=cnt-1
	if cExist(c)!cAlive:continue
	if gRider!0:if c=gRider:continue
	inv_getHeader -1:p=0,6
	repeat invRange,invHead
	if iNum(cnt)=0:continue
	if iEffect(cnt)!effChair:continue
	if c=tc: if iParam1(cnt)=2:cell_swap c,-1,iX(cnt),iY(cnt):i=cnt:p=cnt:break:else:continue
	if i=0:break:else:if cnt=i:continue
	p(2)=dist(iX(cnt),iY(cnt),iX(i),iY(i)) : if p(2)<p(1):if (map(iX(cnt),iY(cnt),1)=0)or(c=0)or(c=tc):p=cnt,p(2)
	if c=0:if iParam1(cnt)=1:p=cnt:break
	loop
	if p!0:cell_swap c,-1,iX(p),iY(p)
	cDir(c)=direction(cX(c),cY(c),cX(tc),cY(tc)):if c=0:gRunDir=cDir(c)
	loop
	gosub *chat
	swbreak

	i=0
	pcChair=0
	repeat maxFollower+1
	if cnt=0:c=tc:else:c=cnt-1
	if cExist(c)!cAlive:continue
	if gRider!0:if c=gRider:continue
	inv_getHeader -1:p=0,6
	repeat invRange,invHead
	if iNum(cnt)=0:continue
	if iEffect(cnt)!effChair:continue
	if c=tc: if iParam1(cnt)=2:cell_swap c,-1,iX(cnt),iY(cnt):i=cnt:p=cnt:break:else:continue	;guest
	if i=0:break:else:if cnt=i:continue
	if c=0:if iParam1(cnt)=1{	;pc
		p=cnt
		pcChair=1:break
	}else:if(pcChair){	;pets
		p(2)=dist(iX(cnt),iY(cnt),iX(i),iY(i))
		if p(2)<p(1):if (map(iX(cnt),iY(cnt),1)=0)or(c=0)or(c=tc):p=cnt,p(2)
	}
	loop
	if p!0:cell_swap c,-1,iX(p),iY(p)
	cDir(c)=direction(cX(c),cY(c),cX(tc),cY(tc)):if c=0:gRunDir=cDir(c)
	loop
	gosub *chat
	swbreak