mieki256's diary



2023/11/01(水) [n年前の日記]

#1 [hsp] hsp3dishの勉強を再開

hsp3dish について、改めて勉強を再開。環境は Windows10 x64 22H2 + HSP 3.7beta7。

hsp3dish を使ってスクリーンセーバが作れそうか実験してみたいと思っているのだけど。その前に、多少は見た目がソレっぽい処理を書いておいて、ソレをスクリーンセーバとして移植できるか試したほうがいいのかなと思えてきた。

処理内容としては、フルスクリーン表示にして、画面の奥から手前にたくさんの星を飛ばす、例のアレ。昔のWindowsには星を飛ばすスクリーンセーバが標準で入っていた気がするけれど、要はアレを再現するプログラム。

余談。今頃になって気づいたけれど、Windows10には、あの星を飛ばすスクリーンセーバが入っていないような気がする…。一体どの時点で無くなったんだろう…? もう入手できないのだろうか?

ソース :

_fullscreen_zoom.hsp
    ; hsp3dish + fullscreen test. move stars.
    ;
    ; Windows10 x64 22H2 + HSP 3.7beta7
    ; 2023/11/01 by mieki256
    ; Licence : CC0 / Public Domain
    
    #include "hsp3dish.as"
    #include "d3m.hsp"
    
    #packopt name "fullscreen_zoom"
    #packopt type 0
    
    #define TEX_FILE    "star.png"
    ; #define TEX_FILE    "star2.png"
    #pack   TEX_FILE
    
    #define KB_ESC      $000080
    #define FRAMERATE   60
    
    fps_display_enable = 1
    
    ; get desktop size
    dispw = ginfo_dispx
    disph = ginfo_dispy
    
    ; initialize window without frame
    ; bgscr WindowID, width, height, mode, x, y
    bgscr 0, dispw, disph, 0, 0, 0
    
    ; load image
    imgid = 3
    celload TEX_FILE, imgid

    ; split image. set orign
    celdiv imgid, 512, 512, 256, 256

    ; Set the buffer to draw from. Windows ID 0
    gsel 0, 1
    
    ; Set screen clear color to be performed when redraw 0 is called.
    ; 0 or 1, color ($000000 - $ffffff)
    ; setcls CLSMODE_SOLID, $4080c0
    setcls CLSMODE_SOLID, $000000
    
    font "Tahoma", 24, 1
    
    randomize
    
    star_size = 0.75
    dist = 150.0        ; screen distabce
    area_z = 5000
    zmax = double(area_z) + dist
    
    ; rnd() only accepts 1 to 32768.
    ; adjust the value to stay within that range.
    area_m = 4.0
    area_w = int((double(dispw) * zmax) / dist / area_m)
    area_h = int((double(disph) * zmax) / dist / area_m)
    
    objmax = 512
    
    ; initialize stars work
    ddim posx, objmax       ; position x
    ddim posy, objmax       ; position y
    ddim posz, objmax       ; position z
    dim px, objmax          ; display position x
    dim py, objmax          ; display position y
    ddim scalev, objmax     ; scale
    dim alpha, obj_max      ; alpha value
    repeat objmax
        gosub *get_newpos_xy
        posx(cnt) = nx
        posy(cnt) = ny
        posz(cnt) = double(rnd(area_z)) + dist
        px(cnt) = 0
        py(cnt) = 0
        scale(cnt) = 0.0
        alpha(cnt) = 0
    loop
    
    time_start = d3timer()
    endfg = 0
    
; ----------------------------------------
*mainloop
    while endfg == 0
        tm = d3timer() - time_start
        fps = d3getfps()                ; get FPS
        
        ; ESC key to exit
        stick key, 0
        if key & KB_ESC : endfg = 1
        
        ; move stars
        spd = 40.0
        repeat objmax
            posz(cnt) -= spd
            if posz(cnt) < (dist / 2.0) {
                posz(cnt) += zmax
                gosub *get_newpos_xy
                posx(cnt) = nx
                posy(cnt) = ny
            }
            
            ; get display x, y position
            px(cnt) = int(posx(cnt) * dist / posz(cnt)) + (dispw / 2)
            py(cnt) = int(posy(cnt) * dist / posz(cnt)) + (disph / 2)
            scalev(cnt) = star_size * dist / posz(cnt)
            
            size = int(512.0 * scalev(cnt))
            x0 = px(cnt) - (size / 2)
            y0 = py(cnt) - (size / 2)
            x1 = px(cnt) + (size / 2)
            y1 = py(cnt) + (size / 2)
            if x1 < 0 or x0 > dispw or y1 < 0 or y0 > disph {
                ; out of display area. position reset
                posz(cnt) += zmax
                gosub *get_newpos_xy
                posx(cnt) = nx
                posy(cnt) = ny
                px(cnt) = int(posx(cnt) * dist / posz(cnt)) + (dispw / 2)
                py(cnt) = int(posy(cnt) * dist / posz(cnt)) + (disph / 2)
                scalev(cnt) = star_size * dist / posz(cnt)
            }
            
            ; get alpha value
            az = double(area_z) * 0.7
            if posz(cnt) < az {
                alpha(cnt) = 255
            } else {
                ; fade in
                z = posz(cnt)
                if z > zmax : z = zmax
                v0 = z - az
                v1 = zmax - az
                alpha(cnt) = int(255.0 - (255.0 * v0 / v1))
            }
        loop
        
        ; ----------------------------------------
        ; draw start
        redraw 0
        
        ; clear screen
        ; color 64, 128, 192
        ; boxf
        
        ; draw stars
        repeat objmax
            rot = 0.0
            idx = 0
            
            ; draw image by celput
            gmode gmode_add, 512, 512, alpha(cnt)
            pos px(cnt), py(cnt)
            rot = 0.0
            idx = 0
            celput imgid, idx, scalev(cnt), scalev(cnt), rot
        loop

        ; draw text
        if fps_display_enable {
            gmode gmode_rgb0
            color 255, 255, 255
            pos 10, 10
            mes strf("[%dx%d] %d/%dFPS", dispw, disph, fps, FRAMERATE)
        }
        
        ; draw end. screen refersh
        redraw 1
        
        await (1000 / FRAMERATE)
        ; await 12
    wend
    
*jobend:
    end
    
*get_newpos_xy
    nx = double(rnd(area_w) - (area_w / 2)) * area_m
    ny = double(rnd(area_h) - (area_h / 2)) * area_m
    return

使用画像は以下。どちらか片方でいい。好きなほうをどうぞ。

_star.png
_star2.png

動作させたら以下のような感じになった。縮小したので見辛いけれど、「ああ。アレね」と思ってもらえるかなと…。

余談。星を飛ばすスクリーンセーバ :

星を飛ばす、例のスクリーンセーバはもう入手できないのだろうか?

ググってみたら、以下のページでそれらしいものを見かけた。Windows95という文字列が見えるから、Windows95の頃には存在していたスクリーンセーバということかな…。

_ssstars : mike : Free Download, Borrow, and Streaming : Internet Archive
_Starfield Screensaver for Windows - Screensavers Planet
_windows 95 "starfield" screensaver : r/Windows10


以下のやり取りでスクリーンセーバ名が分かった。「宇宙飛行」という名前だったらしい。ファイル名は ssstars.scr。冒頭の「ss」は、ScreenSaverの省略形だろう。さておき、この「宇宙飛行」、Windows XP の頃までは入っていた模様。

_WindowsXpの元々入っているスクリーンセーバーについてお願いしま| OKWAVE


以下のページによると、Windows98 - XP時代のスクリーンセーバはビンテージ云々と書いてある。ということは、その後の Windows で ―― Windows Vista の段階でごっそりと削除されてしまったということかな。

_Windows 11 でクラシック スクリーン セーバーを使用する方法 | 最高の家
_Windows XP And 98 Screensavers ( 1) : Free Download, Borrow, and Streaming : Internet Archive

思い返してみれば、Windows Vista の頃は液晶ディスプレイが主流になっていた気もしてきた。CRTの焼き付き防止を期待してスクリーンセーバを動かす必要も無くなっていったのが大体その時期だったのかもしれない。

#2 [anime][neta] 魔女キャラのコラボ回ってどうだろう

妄想メモ。

「ひろがるスカイ!プリキュア」を見ていたら、ハロウィンネタでメインキャラ達が魔女の扮装をする展開が出てきたのだけど。その光景を見ていて、「魔女云々の回を作れるなら、いっそ、おジャ魔女どれみのキャラがゲスト出演するのはどうだろうか」と妄想してしまった。そういうのって難しいのかな。どちらも権利は東映アニメーションが持っているのだろうから、そのあたりは問題無さそうだけど…。

そういえば、そもそも魔女設定のプリキュアが居たような…?

_魔法つかいプリキュア! - Wikipedia

あのプリキュアがゲストで出てきてもいいよな…。ハロウィン回では必ずカメオ出演(?)するとかそんな感じでも十分楽しいかも。「ウォーリーをさがせ」ならぬ…なんだろな。なんかそんな感じで。

東映アニメーションと言えば、かつては東映魔女っ子シリーズを繰り出していたっけ。例えば、プリキュアに「魔女っ子メグちゃん」が出てくるのもアリだったりしないか…。

_東映魔女っ子シリーズ - Wikipedia

もっとも、「魔法使いサリー」は横山光輝先生が原作だし、「キューティーハニー」は永井豪先生が原作だろうから、登場させるのは難しそう。いや、一覧を眺めてみると、東映魔女っ子シリーズの大半は原作者が別に居たのだな。「メグちゃん」も原作は東映じゃなかった…。となるとゲスト出演は難しそう。

プリキュアに、あのあたりの作品のキャラが出てきたらちょっと面白そうと思ったけれど、権利的に難しいのではなあ…。なんだか残念。

只の妄想メモでした。オチは無いです。

「ひろみプロ」って何だろう :

「メグちゃん」の原作は「ひろみプロ」となってるけれど、どういう会社だったのだろう…?

_ミラクル少女リミットちゃん - Wikipedia
本作は、手塚プロアシスタント経験者らで構成された企画集団「ひろみプロ」が企画した「少女版SF変身物作品」を具体化したものである。

ミラクル少女リミットちゃん - Wikipedia より


なるほど。企画集団だったのか…。「パトレイバー」の「ヘッドギア」みたいな感じなのかな。

東映動画のアニメーターさん達が虫プロに移籍したり、手塚先生の元アシスタントさん達が東映に企画を持ち込んだり、そのあたりの流れが興味深い気もする。昔から色んな人材があちこちを行き来してアニメを作ってたんだなと…。

それにしても、「ひろみプロ」についてググっても情報が全く出てこない。Googleの検索精度が悪化してるのだろうか。それとも情報を誰もアップしてないぐらいに謎の集団なのだろうか…。設立の経緯、活動実績、最終的にどうなったのか等々、気になる…。関わっていた作品群の権利はどうなってるんだろう。今となっては権利面の問題でリメイク不可能だったりするんだろうか。まあ、当時見ていた人は、もうお爺さんお婆さんだろうし。今の時代にリメイクしてもアレかな…。

以上、1 日分です。

過去ログ表示

Prev - 2023/11 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project