|
|
|
2024/8/4(Sun) 20:58:31|NO.102007
作ってみたものの使い道なかったわ…なスクリプトを投稿するためのスレッドです。
作品として公開するほどじゃないけど、せっかく作ったからどこかに投稿したい。そんな行き場のないスクリプトの公開場所にご利用ください。
後々誰かの開発の役に立てればよし。他の方の投稿を改良するもよし。いっそ誰の役に立たなくてもよし。そんな気持ちで書き込んでいただければと思います。
ルール無用だとあれそうなので約束事を書いておきますね。
約束事
・けんかしない
・何百行もあるような大きいスクリプトは投稿しない。
・できればコピペで動くといいな。(素材はHSPTVフォルダが便利です。)
・ライセンスはNYSL
補足:コードッターが投稿できなくなってしまっていたので立てました。
|
|
|
2024/8/4(Sun) 21:01:00|NO.102008
ということで1個目を。
フルスクリーンやるべきか?とか思って作ってみたもののフルスクリーンにするようなゲームができていないことを思い出したので使わなくなりました。
その内使うことに…なるといいな。
;
; HSP3 でフルスクリーンモードを使用するサンプル
;
; 縦横比が合わない部分は黒帯で埋めます。
;
#include "hsp3dish.as"
; ------------------------------
; フルスクリーン ウィンドウ
; ------------------------------
; まずフルスクリーンにした際に、画面の大きさを合わせるための情報を取得します。
; screenでフルスクリーンにします。
; 最後に viewcalc で表示スケールを合わせて完了です。
;
; zoomView スケール
; viwOffsetX/Y 移動量
; 描画解像度
; 任意に指定する。
viewWinx = 800
viewWiny = 600
; スケールと移動量を計算
; 描画解像度がディルプレイより横長なら、上下を黒帯にします。
; 描画解像度がディルプレイより縦長なら、左右を黒帯にします。
x = double(ginfo_dispx) / viewWinx
y = double(ginfo_dispy) / viewWiny
zoomView = x
viwOffsetX = 0.0
viwOffsetY = ( double(ginfo_dispy) / zoomView - viewWiny) / 2.0
if y < x {
zoomView = y
viwOffsetX = ( double(ginfo_dispx) / zoomView - viewWinx) / 2.0
viwOffsetY = 0.0
}
; フルスクリーン ウィンドウを作成
screen 0, ginfo_dispx, ginfo_dispy, 256
; 描画スケールを調整
gfilter 1
viewcalc vptype_translate, viwOffsetX, viwOffsetY
viewcalc vptype_2d, zoomView, zoomView
; ------------------------------
; 描画開始
; ------------------------------
; 背景を塗りつぶし
color 255, 200, 200
boxf 0,0, viewWinx, viewWiny
COLOR 255
boxf -100,-100,100,100
; 通常通り描画
color
mes "フルスクリーン表示"
button "終了",*owari
; 余白を塗りつぶし
color
if viwOffsetY = 0.0 {
boxf -viwOffsetX - 1, 0, -1, viewWiny
boxf viewWinx + 1, 0, ginfo_winx, viewWiny
} else {
boxf 0, -viwOffsetY - 1, viewWinx, -1
boxf 0, viewWiny + 1, viewWinx, ginfo_winy
}
redraw 1
stop
*owari
end

| |
|
|
2024/8/5(Mon) 07:12:25|NO.102009
『シェルピンスキーのギャレット』を描写するプログラム
w=0f+ginfo(12)
h=0f+ginfo(13)
wh=w/2
x=0.0
y=0.0
repeat
x*=0.5
y*=0.5
r=rnd(3)
if r=0{
x+wh
}else:if r=1{
x+=wh/2
y-=h/2
}
pset x,y+h
await
loop
|
|
|
2024/8/6(Tue) 17:28:06|NO.102013
プログラ
// useless_script.hsp
// Display a window with the title "Useless HSP Script"
dialog "This is a useless HSP script", "Useless HSP Script"
// Define variables
x = 100
y = 200
z = x + y
// Display variable values in a message box
mes "x = " + x
mes "y = " + y
mes "z = " + z
// Create a loop that does nothing useful
repeat 10
mes "This is loop iteration " + cnt
loop
// Define a function that does nothing useful
#deffunc uselessFunction int a, int b
return a * b
// Call the useless function and display the result
result = uselessFunction(3, 4)
mes "Result of uselessFunction(3, 4) = " + result
// Wait for the user to close the window
stop
</ore>
|
|
|
2024/9/7(Sat) 19:25:39|NO.102175
バイオハザードっぽい走り方の動きのみ2Dで再現
カーソルキーの上下左右で動きます
dim map,20,20
map(0, 0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
map(0, 1)=1,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1
map(0, 2)=1,2,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,2,1
map(0, 3)=1,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,2,1
map(0, 4)=1,2,0,2,1,2,0,0,2,2,2,2,0,0,0,0,0,0,2,1
map(0, 5)=1,2,0,2,2,2,0,2,2,1,1,2,0,0,0,0,0,0,2,1
map(0, 6)=1,2,0,0,0,0,0,2,1,1,1,2,0,0,0,0,0,0,2,1
map(0, 7)=1,2,0,0,0,2,2,2,1,1,1,2,0,0,0,0,0,0,2,1
map(0, 8)=1,2,0,2,2,2,1,1,1,1,1,2,0,0,0,0,2,2,2,1
map(0, 9)=1,2,0,2,1,1,1,1,1,1,1,2,2,2,0,0,2,1,1,1
map(0,10)=1,2,0,2,1,1,1,1,1,1,1,1,1,2,0,0,2,1,1,1
map(0,11)=1,2,0,2,2,2,2,2,2,1,1,2,2,2,0,0,2,2,2,1
map(0,12)=1,2,0,0,0,0,0,0,2,1,1,2,0,0,0,0,0,0,2,1
map(0,13)=1,2,0,0,0,0,0,0,2,2,2,2,0,0,0,0,0,0,2,1
map(0,14)=1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1
map(0,15)=1,2,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0,0,2,1
map(0,16)=1,2,0,0,0,0,2,2,1,1,1,2,0,0,0,0,0,0,2,1
map(0,17)=1,2,0,0,0,2,2,1,1,1,1,2,0,0,0,0,0,0,2,1
map(0,18)=1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,1
map(0,19)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
dim sin_tbl,256
repeat 256 : sin_tbl(cnt)=int(sin(3.14159/128*cnt)*256) : loop
dim cos_tbl,256
repeat 256 : cos_tbl(cnt)=int(cos(3.14159/128*cnt)*256) : loop
color 0,0,0
boxf
x=50*256:y=100*256:size=1
repeat
ar=0
stick sk,15
if sk&1 : r+=4 : if r>=256 : r=0
if sk&4 : r-=4 : if r<0 : r=255
if sk&2 : ar=-4
if sk&8 : ar=4
ay=cos_tbl(r)*ar
y+=ay
sy=y/256
a=sx/20:c=(sx+size)/20
b=sy/20:d=(sy+size)/20
z=map(a,b)+map(c,b)+map(a,d)+map(c,d)
if z>0 {
if ay>0 { sy=d*20-size-1:y=sy*256}
else {sy=(b+1)*20: y=sy*256}
}
ax=sin_tbl(r)*ar
x+=ax
sx=x/256
a=sx/20:c=(sx+size)/20
b=sy/20:d=(sy+size)/20
z=map(a,b)+map(c,b)+map(a,d)+map(c,d)
if z>0 {
if ax>0 { sx=c*20-size-1:x=sx*256}
else {sx=(a+1)*20:x=sx*256}
}
redraw 0
color 0,0,0
boxf
repeat 20
yy=cnt
repeat 20
xx=cnt
if map(xx,yy)=1 :color 255,255,255:boxf xx*20,yy*20,xx*20+18,yy*20+18
if map(xx,yy)=2 :color 10,10,50:boxf xx*20,yy*20,xx*20+18,yy*20+18
loop
loop
color 255,0,0
grect x/256,y/256,double(-r)/40.0,30,15
grect (x-(sin_tbl(r)*13))/256,(y-(cos_tbl(r)*13))/256,double(-r)/40.0,15,15
redraw 1
await 17
loop

| |
|
|
2025/11/9(Sun) 23:59:53|NO.104249
久しぶりに作ってしまった。
公開する場所もないのでここに投下。
数字を億とか兆で表示する方法に変換する関数。
誰かが作っていそうな気がしないでもない。(´・ω・`)
;
; numberString
; p_numStr : 数値の文字列
;
; 数の位を命数法(万、億、兆、…などの漢字)に変換します。
; 数値は半角英数の文字列で指定してください。
; 指数は使用できません。小数点以下は除去されます。
;
; 例
; mes numberString("-123456789.123") ; -1億2345万6789
;
#module
#defcfunc numberString str p_numStr
suuji = "万", "億", "兆", "京", "垓", "杼", "穣", "溝", "澗", "正", "載", "極", "恒河沙", "阿僧祇", "那由他", "不可思議", "無量大数"
; 数字以外除去
numStr = p_numStr
; 前後のスペースを除去
numStr = strtrim(numStr, 0, ' ')
; 小数点以下を除去
if instr(numStr, 0, ".") > 0 {
numStr = strmid(numStr, 0, instr(numStr, 0, "."))
}
; 負に対応
fugou = strmid(numStr, 0, 1)
if (fugou="+") | (fugou="-") {
numStr = strmid(numStr, 1, strlen(numStr))
} else {
fugou = ""
}
; 桁数確認
len = strlen(numStr)
if len <= 4 : return numStr
; 右から4桁ずつ書き出していく
nsNum = ""
repeat
if len <= 0 : break
lwKeta = 4
upKeta = len - 4
part = strmid(numStr, -1, 4)
; suujiの数上限
if cnt-1>=16 {
part = numStr
upKeta = 0
}
if int(part) ! 0 {
part = strtrim(part, 1, '0')
if cnt = 0 {
nsNum = part
} else {
nsNum = part + suuji(cnt-1) + nsNum
}
}
numStr = strmid(numStr, 0, upKeta)
len = upKeta
loop
nsNum = fugou + nsNum
return nsNum
#global
; サンプル
#if 10
mes numberString("0")
s = "1"
repeat 20
mes numberString(s)
s += "0000"
loop
mes numberString("123456789.123")
mes numberString("100450089")
mes numberString("12345")
mes numberString("1234500000000000067890")
mes numberString("1000000000000000000000000000000000000000000000000000000000000")
#endif
𥝱は杼に置き変えてます。
ゲームの得点表示にと思ったものの、杼以上だと実数の誤差が出始めるので実用的じゃない問題。

| |
|
|
2025/11/10(Mon) 17:55:17|NO.104253
いいね!行き場のないスクリプトの墓場、最高のアイデアだわ(笑)
俺も前に「3分で作ったけど誰得?」なHSPの星がランダムにキラキラするやつ、寝かせてたんだよね。
せっかくだから後で投げてみる!
NYSLだし、誰かが「これ便利!」って拾ってくれたらラッキーだし、
何もなくても「作った」って記録が残るのが嬉しい。
また覗きに来るわ〜 https://googlebaseball.io
|
|
|
2025/11/10(Mon) 21:46:13|NO.104255
半透明対応の角丸矩形描画モジュール(オフセット付き+オマケ)です。
gsquare で分割三角形を並べることで角丸を表現できるかもと思って試したものです。
どうせ変に重なって濃い部分ができると思ったのですが、なんか上手くいってしまいました。
// 描画モジュール
#module
; 配列に格納された座標点を順に結んで線を描画 / p1:点の数(配列長/2)
#deffunc lineArray array arr, int p1, int ox, int oy
pos ox+arr(0),oy+arr(1)
repeat limit(p1-1,0,length(arr)/2-1),1
line ox+arr(cnt*2),oy+arr(cnt*2+1)
loop
return
; オフセット付きで塗りつぶし矩形(boxf)を描画 [半透明可]
#deffunc boxfao int ax, int ay, int bx, int by, int ox, int oy
pdx=ax+ox,bx+ox,bx+ox,ax+ox
pdy=ay+oy,ay+oy,by+oy,by+oy
gsquare -1,pdx,pdy
return
; オフセット付きで塗りつぶし三角形を描画 [半透明可]
#deffunc trianglefao int ax, int ay, int bx, int by, int cx, int cy, int ox, int oy
pdx=ax+ox,bx+ox,cx+ox,ax+ox
pdy=ay+oy,by+oy,cy+oy,ay+oy
gsquare -1,pdx,pdy
return
; オフセット付きで塗りつぶし四角形(任意の4点)を描画 [半透明可]
#deffunc quadfao int ax, int ay, int bx, int by, int cx, int cy, int dx, int dy, int ox, int oy
pdx=ax+ox,bx+ox,cx+ox,dx+ox
pdy=ay+oy,by+oy,cy+oy,dy+oy
gsquare -1,pdx,pdy
return
; オフセット付きで円またはドーナツ状円(太さ指定)を描画 [半透明可] / thick:太さ(1=塗りつぶし), div:分割数 ... ちょっと円が「いびつ」になります
#deffunc circlefao int x1, int y1, int x2, int y2, int thick, int div, int ox, int oy
dcx = double(x1 + x2) / 2.0 + ox
dcy = double(y1 + y2) / 2.0 + oy
rx = absf(x2 - x1) / 2.0
ry = absf(y2 - y1) / 2.0
if rx < 1 || ry < 1 : return
div_ = div : if div_ <= 0 : div_ = limit((rx+ry)/4, 12, 128)
if thick == 1 {
repeat div_
ang1 = 2.0 * M_PI * cnt / div_
ang2 = 2.0 * M_PI * (cnt+1) / div_
x3 = dcx + cos(ang1) * rx
y3 = dcy + sin(ang1) * ry
x4 = dcx + cos(ang2) * rx
y4 = dcy + sin(ang2) * ry
trianglefao dcx, dcy, x3, y3, x4, y4
loop
return
}
thick_ = double(thick)
if thick_ < 1 : thick_ = 1.0
rx1 = rx - thick_/2.0
ry1 = ry - thick_/2.0
rx2 = rx + thick_/2.0
ry2 = ry + thick_/2.0
if rx1 < 0 : rx1 = 0
if ry1 < 0 : ry1 = 0
repeat div_
ang1 = 2.0 * M_PI * cnt / div_
ang2 = 2.0 * M_PI * (cnt+1) / div_
ox1 = dcx + cos(ang1) * rx2
oy1 = dcy + sin(ang1) * ry2
ox2 = dcx + cos(ang2) * rx2
oy2 = dcy + sin(ang2) * ry2
ix2 = dcx + cos(ang2) * rx1
iy2 = dcy + sin(ang2) * ry1
ix1 = dcx + cos(ang1) * rx1
iy1 = dcy + sin(ang1) * ry1
quadfao ox1,oy1, ox2,oy2, ix2,iy2, ix1,iy1
loop
return
; オフセット付きで角丸矩形を描画(角の半径と分割数を指定) [半透明可] / r:角丸半径, div:分割数
#deffunc rboxfao int x1, int y1, int x2, int y2, int r, int div, int ox, int oy
div_ = div : if div_ <= 0 : div_ = limit(6+(r-5)*(12-6)/(25-5), 6,12)
boxfao x1+r, y1, x2-r, y2, ox,oy
boxfao x1, y1+r, x1+r, y2-r, ox,oy
boxfao x2-r, y1+r, x2, y2-r, ox,oy
repeat 4
if cnt=0 : cx=x1+r : cy=y1+r : ang0=180.0
if cnt=1 : cx=x2-r : cy=y1+r : ang0=270.0
if cnt=2 : cx=x2-r : cy=y2-r : ang0=0.0
if cnt=3 : cx=x1+r : cy=y2-r : ang0=90.0
repeat div_
ang1 = ang0 + 90.0 * cnt/div_
ang2 = ang0 + 90.0 * (cnt+1)/div_
x3 = cx + cos(ang1/180.0*M_PI)*r
y3 = cy + sin(ang1/180.0*M_PI)*r
x4 = cx + cos(ang2/180.0*M_PI)*r
y4 = cy + sin(ang2/180.0*M_PI)*r
trianglefao cx,cy, x3,y3, x4,y4, ox,oy
loop
loop
return
; 自動的に角丸半径を算出して角丸矩形を描画 [半透明可]
#deffunc rboxfao_auto int x1, int y1, int x2, int y2, int ox, int oy
w = abs(x2 - x1)
h = abs(y2 - y1)
r = (w+h)/40
if r > w/2 : r = w/2
if r > h/2 : r = h/2
if r < 1 : r = 1
rboxfao x1,y1,x2,y2, r,0, ox,oy
return
#global
//============================================================
// サンプル(半透明重なりデモ)
//============================================================
gmode 3,,,80 ; 半透明モード
// 線の配列描画 [オフセット利用]
arr = 0,0, 120,50, 50,100, 0,0
color 0,0,255
lineArray arr, 4, 60,60
// 矩形
color 255,0,0
boxfao 150,60,250,160
// 三角形
color 0,255,0
trianglefao 260,70, 340,170, 200,170
// 四角形(任意の4点)
color 0,128,255
quadfao 310,80, 420,90, 400,180, 300,160
// 円(塗りつぶし)... ちょっと「いびつ」になります
color 255,128,0
circlefao 90,220,190,320, 1
// ドーナツ状円(太さ12)... 同上
color 255,0,128
circlefao 150,240,250,340, 12
// 角丸矩形(半径・分割数指定)
color 0,200,200
rboxfao 240,230,390,330, 25, 12
// 自動角丸矩形 [オフセット利用]
color 150,0,200
rboxfao_auto 240,230,390,330, 100,20
コンテストに投稿している mod_layerbuttonモジュール の中で使っています。
が、基本ゲームを作らない自分ではこれ以上利用しないかも。ということで「使い道のない」レギュレーションは満たしているかと。。。

| |
|