-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathsprite.hs
1914 lines (1755 loc) · 90.7 KB
/
sprite.hs
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;
; HSP help manager用 HELPソースファイル
; (先頭が「;」の行はコメントとして処理されます)
;
%type
拡張命令
%ver
3.7
%note
hsp3dish.asをインクルードすること。
%date
2025/02/04
%author
onitama
%dll
HSP3Dish
%url
https://hsp.tv/
%port
Win
%group
拡張入出力制御命令
%index
es_ini
システムの初期化
%group
拡張画面制御命令
%prm
p1,p2
p1(512)=スプライトの最大数
p2(1024)=キャラクタ定義の最大数
p3(64)=周の精度(64〜4096)
p4(16)=マップ定義の最大数
%inst
標準スプライトのシステム初期化を行ないます。
パラメータを省略すると、スプライトは512個まで、 キャラクタ定義数は1024個、周の精度は64、マップ定義数は16個までを最大としてスプライトを初期化します。
es_ini命令は何度でも実行することができるので、スプライトをすべてクリアしたい時などにも使用可能です。
^
p3はes_adir命令などで使用する角度を、一周何度にするかを指定します。 指
定できる数値は、64と256の倍数、そして360の倍数です。それ以外の数値を指
定した場合は、指定した値未満で条件に合う一番近い数値が設定されます。
^
空きメモリが不足しているなど、何らかの理由でメモリ確保に失敗した時は、
statに0以外の値が返ります。
%index
es_screen
スプライト描画解像度設定
%group
拡張画面制御命令
%prm
p1,p2
p1(0)=X方向の描画解像度
p2(0)=Y方向の描画解像度
%inst
スプライトの描画解像度を再設定します。
p1,p2パラメーターで指定されたサイズを画面が描画解像度として設定されます。
p1,p2パラメーターに0またはマイナス値を指定した場合は、現在の描画先画面のサイズが使用されます。
通常は、es_ini命令で初期化された時点で画面の解像度は自動的に設定されますので、解像度を再設定する必要はありません。
es_screen命令は、解像度の異なる別なバッファに描画する際に設定を変更するために使用してください。
^
es_screen命令でスプライトの描画解像度が再設定されると、自動的にスプライト有効エリアも再設定されます。
%href
es_ini
es_area
%index
es_area
スプライト有効エリア設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1(0)=有効エリアの左上X座標
p2(0)=有効エリアの左上Y座標
p3(0)=有効エリアの右下X座標
p4(0)=有効エリアの右下Y座標
%inst
スプライトの有効エリア(ボーダー)を設定します。
表示されるスプライトの画面上の座標が(p1,p2)-(p3,p4)の範囲内にないものは、 自動的に削除されます。(スプライトのフラグでESSPFLAG_NOWIPEが指定されている場合は削除されません)
^
es_ini命令、es_screen命令でスプライトの表示範囲が初期化されると、自動的にスプライト有効エリアも再設定されます。
%href
es_ini
es_screen
es_bound
%index
es_size
キャラクタサイズ指定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1=キャラクタのXサイズ
p2=キャラクタのYサイズ
p3(100)=ヒットチェック領域(%)
p4($3ff)=p4=特殊効果(EP値)の指定
%inst
スプライトのキャラクタパターンを定義する際の、サイズを指定します。
(p1,p2)がキャラクタのX,Yサイズになります。
^
p3は当たり判定を行なう際のヒットチェック領域が、 何%になるかを指定します。100を指定すると、(p1,p2)で指定したサイズいっぱいにヒットチェックを行ないます。(より詳細な当たり判定の領域を設定するためのes_sizeex命令も用意されています。)
0を指定すると、そのキャラクタは当たり判定を持たなくなります。
p4は、特殊効果(EP値)のデフォルト設定になります。通常は省略して構いません。
特殊効果(EP値)パラメーターは、半透明や加算合成などの設定を指定します。詳細は、標準スプライトプログラミングガイドを参照してください。
^
キャラクタのX,Yサイズには特に制限はありませんが、 オフスクリーンバッファからはみ出すようなキャラクタパターンの指定は無効になります。
es_size命令の設定は、以降のキャラクタ定義でずっと有効になります。
%href
es_sizeex
es_pat
%index
es_pat
キャラクタ画像定義
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5
p1(-1)=キャラクタNo.
p2=キャラクタパターンの左上X座標
p3=キャラクタパターンの左上Y座標
p4(0)=表示フレーム数(0)
p5=ウインドウバッファID
%inst
スプライトのキャラクタパターンを定義します。
^
p1で指定したキャラクタNo.に、 (p2,p3)の座標からes_sizeで設定した大きさのキャラクタが登録されます。
ここで対象となる画像は、picload命令またはcelload命令であらかじめウインドウバッファに読み込んでおく必要があります。
p5で、ウインドウバッファIDが指定されていればそのウインドウバッファから、p5が省略されている場合は、現在の操作先にあたるウインドウバッファから、画像の中の一部を切り出してきてキャラクタパターンとして登録します。
^
p1パラメーターを省略するかマイナス値にした場合は、自動的に空いているキャラクタNo.が割り当てられます。この命令を実行後に、システム変数statに割り当てられたキャラクタNo.が代入されるので、それによってどのNo.が使われたかを知ることができます。
^
es_pat命令1回で、指定したキャラクタNo.にキャラクタパターンが登録されます。たくさんのキャラクタパターンが必要な場合は、そのぶん登録をしておく必要があります。
まとめてキャラクタパターンを登録するために、es_patanim命令も用意されています。
^
p4のパラメータは、キャラクタアニメーションをするための設定です。
0ならば、アニメーションなし。1以上ならば、指定したフレーム数だけそのキャラクタを表示した後、 次のキャラクタ(キャラクタNo.+1)を表示するように設定されます。
%href
es_link
es_patanim
%index
es_link
アニメーション設定
%group
拡張画面制御命令
%prm
p1,p2
p1=キャラクタNo.
p2=ループアニメーションするキャラクタNo.
%inst
キャラクタのループアニメーションを設定するための命令です。
p1で指定したキャラクタNo.が、指定されたフレームだけ表示した後に、 p2で指定したキャラクタNo.に戻るように設定を行ないます。
何らかの理由で実行に失敗した時は、システム変数statに0以外の値が返ります。
%href
es_pat
es_patanim
%sample
es_size 32,32
es_pat 1,0,0,8
es_pat 2,32,0,8
es_pat 3,64,0,8
es_pat 4,96,0,8
es_link 4,1
%index
es_kill
スプライト削除
%group
拡張画面制御命令
%prm
p1
p1(0)=スプライトNo.
%inst
p1で指定したスプライトNo.を削除します。
まとめて削除する場合は、es_clear命令を使用してください。
%href
es_clear
%index
es_clear
複数スプライト削除
%group
拡張画面制御命令
%prm
p1,p2
p1(0)=スプライトNo.
p2(-1)=削除される個数
%inst
p1で指定したスプライトNo. 以降のスプライトが削除され未登録になります。
p2で削除されるスプライトの数を指定することができます。
p1とp2の指定を省略した場合は、すべてのスプライトが削除されます。
%href
es_kill
%index
es_exnew
新規スプライト取得
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1=新規No.が代入される変数名
p2=検索を開始するスプライトNo.
p3=検索を終了するスプライトNo.
p4=増分
%inst
この命令は、スプライトNo.の中で使われていないNo.を検索します。
p2〜p3で指定したNo.の間で空きのあるNo.を、p1で指定した変数に代入します。
空きがない場合は、-1が代入されます。
^
p4には検索するスプライトNo.の増分を指定します。 省略するとp2、p3から自
動的に設定するため、通常は明示する必要はありません。
^
※es_new命令と同様の処理を行いたい場合は、p3に-1を指定してください。
%href
es_new
%index
es_new
新規スプライト取得
%group
拡張画面制御命令
%prm
p1,p2,p3
p1=新規No.が代入される変数名
p2(0)=検索を開始するスプライトNo.
p3=検索を行うスプライトの数
%inst
この命令は、スプライトNo.の中で使われていないNo.を検索します。
p2で指定したNo.以降で空きのあるNo.を、p1で指定した変数に代入します。空きがない場合は、-1が代入されます。
p3で検索の個数を指定します。p3の指定を省略した場合は、準備されているスプライトの個数が指定されます。
^
この命令は、以前のバージョンとの互換性のために残された命令です。
より詳細な検索を行う場合は、es_exnew命令を使用するようにしてください。
%href
es_exnew
%index
es_get
スプライト情報取得
%group
拡張画面制御命令
%prm
p1,p2,p3
p1=情報が代入される変数名
p2(0)=スプライトNo.
p3(0)=info number
%inst
p1で指定した変数名に、p2のスプライトNo.の情報を代入します。
情報の種類は、p3のinfo numberで指定します。以下の値を設定することができます。
^p
値 マクロ 内容
----------------------------------------------------------
0 ESI_FLAG flag値(機能の状態設定)
1 ESI_POSX X座標
2 ESI_POSY Y座標
3 ESI_SPDX X移動値
4 ESI_SPDY Y移動値
5 ESI_PRGCOUNT プログレスカウント値((未使用)
6 ESI_ANIMECOUNT アニメーションカウンター
7 ESI_CHRNO キャラクタNo.
8 ESI_TYPE type値(ユーザー設定による属性)
9 ESI_ACCELX X加速度(落下用)
10 ESI_ACCELY Y加速度(落下用)
11 ESI_BOUNCEPOW 反発力(落下用)
12 ESI_BOUNCEFLAG 反発設定(落下用)
13 ESI_OPTION オプション値(ユーザー設定による)
14 ESI_PRIORITY 表示優先度
15 ESI_ALPHA 特殊効果(EP値)
16 ESI_FADEPRM フェード用パラメーター
17 ESI_ZOOMX X表示倍率
18 ESI_ZOOMY Y表示倍率
19 ESI_ROTZ 回転角度
20 ESI_SPLINK リンクするスプライトNo.(-1=なし)
21 ESI_TIMER タイマー値
22 ESI_TIMERBASE タイマー値(マスター)
23 ESI_PROTZ 回転角度(加算値)
24 ESI_PZOOMX X表示倍率(加算値)
25 ESI_PZOOMY Y表示倍率(加算値)
26 ESI_MAPHIT マップ当たり判定フラグ(ESSPMAPHIT_*)
27 ESI_STICKSP 吸着先スプライトNo.(-1=なし)
28 ESI_STICKX 吸着先とのX距離
29 ESI_STICKY 吸着先とのY距離
30 ESI_MOVERES 移動時のマップ当たり判定結果
31 ESI_XREVCHR X方向反転キャラクターオフセット値
32 ESI_YREVCHR Y方向反転キャラクターオフセット値
33 ESI_MULCOLOR 乗算色設定(-1=なし)
34 ESI_LIFE ライフ値(ユーザー設定用)
35 ESI_LIFEMAX ライフ最大値(ユーザー設定用)
36 ESI_POWER パワー値(ユーザー設定用)
^p
すべての情報は32bitの整数で保存されています。スプライトの座標や、加速度、倍率などは固定小数値となっているため実際の値が、65536倍されているので注意してください。
スプライト情報を直接書き換える際には、es_setpを使用できます。
何らかの理由で実行に失敗した時は、システム変数statに0以外の値が返ります。
%href
es_setp
%index
es_setp
スプライトパラメータ設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1(0)=スプライトNo.
p2(0)=info number
p3(0)=変更する値
p4(0)=変更オプション
%inst
スプライトが持つ情報を直接変更します。
p1で指定されたスプライトNo.が持つp2のパラメーターを直接p3の値に書き換えます。
情報の種類は、p3のinfo numberで指定します。以下の値を設定することができます。
^p
値 マクロ 内容
----------------------------------------------------------
0 ESI_FLAG flag値(機能の状態設定)
1 ESI_POSX X座標
2 ESI_POSY Y座標
3 ESI_SPDX X移動値
4 ESI_SPDY Y移動値
5 ESI_PRGCOUNT プログレスカウント値((未使用)
6 ESI_ANIMECOUNT アニメーションカウンター
7 ESI_CHRNO キャラクタNo.
8 ESI_TYPE type値(ユーザー設定による属性)
9 ESI_ACCELX X加速度(落下用)
10 ESI_ACCELY Y加速度(落下用)
11 ESI_BOUNCEPOW 反発力(落下用)
12 ESI_BOUNCEFLAG 反発設定(落下用)
13 ESI_OPTION オプション値(ユーザー設定による)
14 ESI_PRIORITY 表示優先度
15 ESI_ALPHA 特殊効果(EP値)
16 ESI_FADEPRM フェード用パラメーター
17 ESI_ZOOMX X表示倍率
18 ESI_ZOOMY Y表示倍率
19 ESI_ROTZ 回転角度
20 ESI_SPLINK リンクするスプライトNo.(-1=なし)
21 ESI_TIMER タイマー値
22 ESI_TIMERBASE タイマー値(マスター)
23 ESI_PROTZ 回転角度(加算値)
24 ESI_PZOOMX X表示倍率(加算値)
25 ESI_PZOOMY Y表示倍率(加算値)
26 ESI_MAPHIT マップ当たり判定フラグ(ESSPMAPHIT_*)
27 ESI_STICKSP 吸着先スプライトNo.(-1=なし)
28 ESI_STICKX 吸着先とのX距離
29 ESI_STICKY 吸着先とのY距離
30 ESI_MOVERES 移動時のマップ当たり判定結果
31 ESI_XREVCHR X方向反転キャラクターオフセット値
32 ESI_YREVCHR Y方向反転キャラクターオフセット値
33 ESI_MULCOLOR 乗算色設定(-1=なし)
34 ESI_LIFE ライフ値(ユーザー設定用)
35 ESI_LIFEMAX ライフ最大値(ユーザー設定用)
36 ESI_POWER パワー値(ユーザー設定用)
^p
すべての情報は32bitの整数で保存されています。ほとんどのパラメーターは設定するための命令が別途用意されているので、es_setp命令を使用する必要はありません。
また、スプライトの座標や、加速度、倍率などは固定小数値となっているため実際の値と異なります。その場合は、es_pos命令などをお使いください。
p4パラメーターで変更オプションを指定できます。オプション値は、以下のように動作します。ビット単位のセット・リセット時に使用することができます。
^p
値 内容
----------------------------------
0 指定した値を設定
1 指定した値のビットを追加
2 指定した値のビットを削除
^p
スプライト情報を直接取得する際には、es_getを使用できます。
何らかの理由で実行に失敗した時は、システム変数statに0以外の値が返ります。
%href
es_get
es_pos
es_flag
%index
es_find
スプライト検索
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5
p1=スプライトNo.が代入される変数名
p2(0)=検索対象となるtype値
p3(0)=検索を開始するスプライトNo.
p4(-1)=検索を終了するスプライトNo.
p5(0)=増分
%inst
登録されているスプライトの中で指定したtype値を持つスプライトNo. を検索
します。
p2のtype値には、複数のtypeを同時に指定することができます。
たとえば、type1とtype4を対象にする場合は、1+4で5を指定します。
^
p2の指定を省略するか、 0を指定した場合にはすべてのtype値を持つスプライ
トが検索の対象になります。
^
検索は、p3で指定されたスプライトNo.からp4で指定されたNo.まで順番に探していきます。
これを省略すると、No.0からすべてのスプライトを検索します。
該当するスプライトが見つかった時点で、p1に結果を代入して終わります。
検索の結果、該当するスプライトがなかった場合には、-1が代入されます。
^
p5は検索するスプライトNo.の増分を指定するもので、 省略するとp3、p4から自動的に設定されますので通常は指定しなくても構いません。
%index
es_check
衝突判定取得
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5,p6
p1=結果が代入される変数名
p2(0)=チェックの対象となるスプライトNo.
p3(0)=検索対象となるtype値
p4(0)=判定フラグ(0=回転を考慮しない、1=回転を考慮する)(未実装)
p5(0)=検索を開始するスプライトNo.
p6(-1)=検索を終了するスプライトNo.
%inst
スプライト同士の衝突(当たり)判定を行ないます。
^
p2で指定されたスプライトNo.と衝突している(重なっている) スプライトを検
索して、p1で指定した変数に結果を代入します。
^
p3で衝突判定の対象となるtype値を指定することができます。
p3が省略されるか、 0の場合は、すべてのスプライトとの衝突を判定します。
p3のtype値には、複数のtypeを同時に指定することができます。
たとえば、type1とtype4を対象にする場合は、1+4で5を指定します。
^
衝突判定には、キャラクタパターンを登録した時に指定されるヒットチェック領域(%)が使用されます。
実際に画像が重なっていても、ヒットチェック領域の範囲が重ならない限りは衝突とみなされません。
p4パラメーターは、将来の拡張用に用意されており現在は未実装となっています。スプライトの表示倍率は衝突の範囲に反映されますが、回転した場合でも矩形の衝突範囲は変わりませんので注意してください。
p5,p6パラメーターにより、衝突の検索を行うスプライトNo.の範囲を指定することができます。p5で開始するスプライトNo.を指定して、p6で終了するスプライトNo.を指定します(p6で指定されたNo.も検索の対象に含まれます)。p6にマイナス値を指定した場合は、終端のNo.が設定されます。パラメーターを省略した場合は、すべてのスプライトが検出の対象になります。
^
結果はp1で指定した変数に代入されます。もし、衝突しているスプライトがなかった場合には-1が、 衝突しているスプライトがあれば、そのスプライトNo.が代入されます。衝突しているスプライトが複数あった場合には、スプライトNo.の小さいものが優先されます。
%href
es_type
es_size
es_sizeex
es_nearobj
%index
es_offset
オフセット座標設定
%group
拡張画面制御命令
%prm
p1,p2
p1(0)=オフセットX値
p2(0)=オフセットY値
%inst
すべてのスプライトの表示を、オフセット値で指定した数だけずらして表示します。
この命令で設定したオフセット値は、 es_draw命令で描画を行なった時に反映されます。
個別のキャラクターごとに表示座標をずらす場合は、es_sizeex命令で登録を行ってください。
%href
es_draw
es_sizeex
%index
es_set
スプライト設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5,p6
p1(-1)=スプライトNo.
p2(0)=スプライトX座標
p3(0)=スプライトY座標
p4(0)=キャラクタNo.
p5(0)=オプション値
p6(0)=優先順位
%inst
スプライトを登録します。
p1でスプライトNo.を指定して、(p2,p3)が画面上でのスプライトのX,Y座標になります。
この座標を左上として、p4で指定したキャラクタNo.が表示されます。
スプライト座標は、-32767〜32767までの範囲が設定可能です。
^
p1を省略するか、マイナス値にした場合は、自動的に空いているスプライトNo.を割り当てます。
^
p5はユーザーが自由に使用できるoption値を設定します。
(option値はユーザーが自由に使用できる32bitの整数値となります、es_get命令でESI_OPTIONを読みだすことで値を取得することができます)^
p6でスプライトの優先順位を指定します。この値は、es_draw命令で優先順位のソートを有効にした際に参照されます。通常は、スプライトNo.の小さいものが手前に描画されます。
特に必要ない場合は、p5,p6パラメーターは省略しても問題ありません。
^
実行後にシステム変数statにスプライトNo.の値が返ります。何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_pat
es_draw
%index
es_flag
flag値設定
%group
拡張画面制御命令
%prm
p1,p2,p3
p1(0)=スプライトNo.
p2(0)=flag値
p3(0)=変更オプション
%inst
p1で指定したスプライトのflag値を変更します。
flag値は、スプライトが有効になっている場合は、 $100(256)が自動的に設定されています。通常は特にいじる必要はありません。
flag値が示す値は以下の通りです。[]内は定義されているマクロ名です。
^p
flag値=
0 : スプライト未登録
bit 0-7 : 1〜127 カウントダウンタイマー(HSPDX互換)
bit 8 : $100 スプライト表示ON [ESSPFLAG_STATIC]
bit 9 : $200 スプライト移動ON [ESSPFLAG_MOVE]
bit10 : $400 自由落下移動ON [ESSPFLAG_GRAVITY] (HSPDX互換用)
bit11 : $800 親とリンクして移動 [ESSPFLAG_SPLINK]
bit12 : $1000 ボーダー消去無効ON [ESSPFLAG_NOWIPE]
bit13 : $2000 ボーダーXで反転SWITCH [ESSPFLAG_XBOUNCE]
bit14 : $4000 ボーダーYで反転SWITCH [ESSPFLAG_YBOUNCE]
bit15 : $8000 カウントダウンタイマー時点滅SWITCH [ESSPFLAG_BLINK]
bit16 : $10000 非表示SWITCH [ESSPFLAG_NODISP]
bit17 : $20000 カウントダウンタイマー時フェードインSWITCH [ESSPFLAG_FADEIN]
bit18 : $40000 カウントダウンタイマー時フェードアウトSWITCH [ESSPFLAG_FADEOUT]
bit19 : $80000 カウントダウンタイマー終了時消滅SWITCH [ESSPFLAG_TIMERWIPE]
bit20 : $100000 カウントダウンタイマー時消滅SWITCH2 [ESSPFLAG_BLINK2]
bit21 : $200000 カウントダウンタイマー時末尾フェードSWITCH [ESSPFLAG_EFADE]
bit22 : $400000 カウントダウンタイマー時末尾フェードSWITCH2 [ESSPFLAG_EFADE2]
bit23 : $800000 回転・ズーム値の加算を有効にする [ESSPFLAG_MOVEROT]
bit24 : $1000000 装飾スプライトとして最前面に表示する [ESSPFLAG_DECORATE]
^p
p4パラメーターで変更オプションを指定できます。オプション値は、以下のように動作します。ビット単位のセット・リセット時に使用することができます。
^p
値 内容
----------------------------------
0 指定した値を設定
1 指定した値のビットを追加
2 指定した値のビットを削除
^p
スプライト情報を直接取得する際には、es_getを使用できます。
実行後にシステム変数statにそれまで設定されていたflag値が返ります。
何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_get
es_setp
%index
es_chr
chr値設定
%group
拡張画面制御命令
%prm
p1,p2
p1=スプライトNo.
p2=キャラクタNo.
%inst
p1で指定したスプライトのキャラクタNo.を変更します。
スプライトNo.は、あらかじめes_set命令で初期化されている必要があります。
キャラクタNo.は、あらかじめes_pat命令で設定されている必要があります。
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_set
es_pat
%index
es_type
type値設定
%group
拡張画面制御命令
%prm
p1,p2
p1=スプライトNo.
p2=type値
%inst
p1で指定したスプライトのtype値を変更します。
スプライトのtype値は、ユーザーが自由に設定することができ、ゲームなどで物体の識別をする時に有効に使うことができます。
設定できる値は、1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768…といった整数値になります。
これは2進数の各ビットを示している値です。これを32bit分、計32種類まで使用できます。
es_set命令でスプライトを設定した直後は、type値は1になっています。
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_set
%index
es_pos
スプライト座標設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1(0)=スプライトNo.
p2(0)=スプライトX座標
p3(0)=スプライトY座標
p4(0)=設定オプション
%inst
スプライト座標などの情報を変更します。
p1でスプライトNo.を指定して、(p2,p3)でX,Y座標を設定します。
p4の設定オプションにより、スプライトのX,Y座標以外を設定することができます。
^p
p4 マクロ名 内容
--------------------------------------------------
0 ESSPSET_POS スプライトX,Y座標
1 ESSPSET_ADDPOS スプライトX,Y移動成分
2 ESSPSET_FALL スプライトX,Y落下速度
3 ESSPSET_BOUNCE スプライトバウンド係数
4 ESSPSET_ZOOM スプライトX,Y表示倍率
8 ESSPSET_ADDPOS2 スプライトX,Y移動成分(相対指定)
9 ESSPSET_POS2 スプライトX,Y座標(相対指定)
0x1000 ESSPSET_DIRECT 直接32bit値を設定する
0x2000 ESSPSET_MASKBIT 固定小数部分を保持する
^p
es_pos命令が設定する座標値は、内部では16bit固定小数になっています。通常は、自動的に変換されますが、設定オプションにESSPSET_DIRECTを付加することで、変換は無効になります。
また、ESSPSET_MASKBITを付加することで、16bit固定小数の変換時にそれまでの小数部分を保持するようになります。
^
es_pos命令は、設定済みのスプライトの座標だけを変更する命令です。新規にスプライトを設定する場合は、es_set命令を使用してください。
^
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_set
es_getpos
%index
es_setrot
スプライト回転角度・表示倍率設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5
p1=スプライトNo.
p2(0)=角度値
p3(-1)=X方向の表示倍率(%)
p4(-1)=Y方向の表示倍率(%)
%inst
p1で指定したスプライトの回転角度、及び表示倍率を変更します。
p2で指定した角度にスプライトが回転されます。p2の値は0以上の整数で大きい値ほど右回りに回転していきます。角度が一周する値は、es_ini命令で指定されます。
^
(p3,p4)パラメーターによりX,Y方向の表示倍率を変更します。
p3またはp4の値を省略するかマイナス値の場合は、それまでの倍率を変更せずに保持します。
表示倍率は100%を1倍として換算します。250を指定した場合は、2.5倍となります。
es_set命令でスプライトを設定した直後は、角度は0に倍率は100%になっています。
^
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_set
%index
es_apos
スプライト移動設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1(0)=スプライトNo.
p2(0)=1フレームにX方向に移動するドット数
p3(0)=1フレームにY方向に移動するドット数
p4(100)=移動スピード(%)
%inst
スプライトを自動的に移動させるための設定をします。
p1でスプライトNo.、p2,p3でX,Y方向の増分を指定します。
^
p4で移動スピードを%で指定します。p4を省略するか、100を指定した場合は、
100%のスピードとなり、1フレームに(p2,p3)で指定した増分だけ移動し続けます。
もし、移動スピードを50(%)にして、増分が(+4,-2)に指定された場合は、実際には、(+2,-1)の増分になります。
増分の単位は、1ドット以下になった場合でも正確に移動を行ないます。 たとえば、1フレームに(1,0)の移動を10%で行なった場合でも、10フレーム後に1ドット移動するように計算されます。
^
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_adir
es_aim
%index
es_setgosub
スプライト表示コールバック設定
%group
拡張画面制御命令
%prm
p1,p2
p1(0)=スプライトNo.
p2=設定するサブルーチンのラベル
%inst
p1で指定したスプライトの表示コールバックを設定します。
p2でサブルーチンのラベルを指定します。以降は、そのスプライトが表示されるごとにgosub命令と同様にサブルーチンが呼び出されます。
^
実際にサブルーチンが呼び出された際には、システム変数iparamにスプライトNo.が、
wparamにtype値が、lparamにキャラクタNo.が代入されます。
^
呼び出しを行う際のサブルーチンは、コールバックルーチンとして機能します。
時間待ちなど一部の命令を実行できないので注意してください。詳しくは、コールバックルーチンについて参照してください。
%href
gosub
%index
es_adir
スプライト移動方向設定
%group
拡張画面制御命令
%prm
p1,p2,p3
p1(0)=スプライトNo.
p2(0)=移動する方向(0〜)
p3(100)=移動スピード(%)
%inst
スプライトを自動的に移動させるための設定をします。
^
p1でスプライトNo.、p2で方向を指定します。 方向は、es_iniで指定した数値
までで指定します。0が真下となり、反時計回りに増加していきます。
^
p3で移動スピードを%で指定します。 p3を省略するか、100(%)を指定した場合
には、指定した方向に1フレームにつき1ドットの距離を移動します。
^
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_apos
es_aim
%index
es_aim
スプライト参照座標設定
%group
拡張画面制御命令
%prm
p1,p2,p3,p4
p1(0)=スプライトNo.
p2(0)=移動先のX座標
p3(0)=移動先のY座標
p4(100)=移動スピード(%)
%inst
es_aim命令は、 es_adir命令と同じく指定した方向にスプライトを移動させる
ためのものです。 es_aim命令では、方向の替わりに移動する目標となるX,Y座
標を指定します。スプライトは、現在の座標から、目標となる座標への方向を
計算し移動を開始します。
^
この命令は、たとえば敵から発射されるミサイルがプレイヤーを狙って移動す
るようにしたい時などに役立ちます。
^
p4で移動スピードを%で指定します。 p3を省略するか、100(%)を指定した場合
には、指定した方向に1フレームにつき1ドットの距離を移動します。
^
この命令を実行するとシステム変数statに移動方向が返ります。
これを利用して自機を狙う3方向弾などを作成することができます。
%href
es_apos
es_adir
%index
es_draw
スプライト描画
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5
p1(0)=描画開始スプライトNo.
p2(-1)=描画するスプライトの個数
p3(0)=処理保留フラグ
p4(-1)=優先順位の開始値
p5(-1)=優先順位の終了値
%inst
登録されているスプライトを画面に描画します。
通常は、 p1,p2のパラメータを省略して使用すれば、すべてのスプライトを描画することが可能です。必ずredraw 0〜redraw 1の間に描画するようにしてください。
^
登録されているスプライトの一部だけを描画したい場合は、p1に開始スプライトNo.、p2に描画する個数を指定してください。
p1,p2の指定を省略した場合は、すべてのスプライトが描画対象になります。
^
p3パラメーターにより、内部処理を保留することができます。
^p
値 マクロ名 内容
------------------------------------------------------------------------
0 ESDRAW_NORMAL すべての処理を実行する
1 ESDRAW_NOMOVE 移動処理を保留する
2 ESDRAW_NOANIM アニメーションを保留する
4 ESDRAW_NOCALLBACK コールバックルーチンを保留する
8 ESDRAW_NODISP 表示を保留する
16 ESDRAW_NOSORT ソートを保留する
^p
通常は、命令を実行すると、スプライト移動→アニメーション処理→表示処理→コールバック処理が実行されますが、それぞれの処理ごとに保留させることができます。
ESDRAW_NO*マクロは加算することで同時に指定することが可能です。
これにより一時的に移動やアニメーションを停止させることができます。通常は、p3パラメーターを省略しておいて問題ありません。
^
p4,p5パラメーターを指定すると、es_set命令やes_setpri命令で指定した優先順位が参照され、値の順にソートしてスプライトを描画します。その際に、p3〜p4の範囲だけを描画させることが可能です。
p4,p5パラメーターを指定した場合は、スプライトの優先順位に従ってソートされ、優先順位の値が大きいものが手前に表示されます。(ただし、処理保留フラグにESDRAW_NOSORTが指定されている場合は、ソートを無効にします)
p4,p5パラメーターがマイナスか省略された場合は、優先順位の値は無視され、スプライトNo.が小さいほど手前の表示となります
^
この命令を実行するとシステム変数statに描画対象として認識されたスプライトの個数が返ります。
%sample
*gmain
stick ky,$1f ; キーの情報を取得
if ky&$80 : goto *owari ; [ESC]中断チェック
redraw 0 ; 画面クリア
es_draw ; スプライト描画
redraw 1 ; 画面の更新
await 1000/60 ; Systemアイドル
goto *gmain
%href
es_set
es_setpri
es_setgosub
es_spropt
%index
es_gravity
落下加速度設定
%group
拡張画面制御命令
%prm
p1,p2,p3
p1(0)=スプライトNo.(-1〜)
p2(0)=X方向の加速度(-32767〜32767)
p3(0)=Y方向の加速度(-32767〜32767)
%inst
自由落下移動を行う際の加速度を設定します。
^
p2、p3は1フレームごとに加算される移動量で、256で1ドットとなります。
p1に-1を指定すると、デフォルト値を設定することができます。 デフォルト値は、es_set命令を実行した時に自動的に設定される値で、初期値はX方向の加速度、Y方向の加速度ともに0となっています。
^
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_set
es_pos
%index
es_bound
弾みやすさ設定
%group
拡張画面制御命令
%prm
p1,p2,p3
p1(0)=スプライトNo.(-1〜)
p2(128)=弾みやすさ(0〜256)
p3(3)=フラグ(1=X方向 2=Y方向 3=両方 デフォルト=3)
%inst
落下加速度が設定されているときに、スプライト表示エリア(es_area命令で設定される画面上の表示ボーダー)で跳ね返る際の弾みやすさを設定します。この値が大きいほど跳ね返り時に勢いが失われなくなります。
^
p3は画面の上下端、あるいは左右端に当たった際に跳ね返りを行うか行わないかを設定できます。ただし、このフラグは自由落下が発生する方向にのみ適用されます。
^
p1に-1を指定すると、デフォルト値を設定することができます。 この値は、es_set命令を実行した時に設定される値で、初期値は128となっています。
^
実行後にシステム変数statに値が返ります。正常に命令が完了した場合は0以上の値が返ります、何らかの理由でエラーになった場合はマイナス値が返ります。
%href
es_area
es_set
%index
es_effect
スプライト特殊効果設定
%group
拡張画面制御命令
%prm
p1,p2,p3
p1(0)=スプライトNo.
p2($3ff)=エフェクトパメーター(EP値)
p3(-1)=ライト色RGB値(0〜$ffffff)(未実装)
%inst
スプライトを描画する際のエフェクト(特殊効果)を設定します。
p2で指定する値は、EP値と呼ばれ以下の意味を持っています。
^p
EP値 内容
-----------------------------------------------------------
0〜255 αチャンネル値(0=透明、255=不透明)
+$300 αチャンネルによる合成を有効にする(gmode3相当)
+$500 元の画像に対して加算合成を行う(gmode5相当)
+$600 元の画像に対して減算合成を行う(gmode6相当)
^p
この値は、αチャンネル値とgmode命令による合成パラメーターを合わせたものになっています。
デフォルト値は、$3ff(αチャンネル=255、gmode3相当)が設定されています。
p3パラメーターにより、スプライト描画時に特定の色を乗算することができます。パラメーターを省略するか、-1を指定した場合は、通常の白色($ffffff)となります。
%href
es_fade
%index
es_fade
スプライト点滅・フェード設定
%group
拡張画面制御命令
%prm
p1,p2,p3
p1(0)=スプライトNo.
p2(1)=フェードモード
p3(30)=タイマー初期値
%inst
p1で指定したスプライトにタイマーを設定して、一定時間だけ点滅やフェードなどを実行します。
p2でフェードモードを設定します。省略した場合は、1(ESSPF_TIMEWIPE)が選択されます。
^p
フェードモード マクロ 内容
------------------------------------------------------------------------------------
1 ESSPF_TIMEWIPE タイマー時間が経過したら消滅
2 ESSPF_BLINK 点滅させる、タイマー時間が経過したら終了
3 ESSPF_BLINKWIPE 点滅させる、タイマー時間が経過したら消滅
4 ESSPF_BLINK2 ゆっくり点滅させる、タイマー時間が経過したら終了
5 ESSPF_BLINKWIPE2 ゆっくり点滅させる、タイマー時間が経過したら消滅
6 ESSPF_FADEOUT タイマー時間でフェードアウトを行う
7 ESSPF_FADEOUTWIPE タイマー時間でフェードアウトを行う、その後消滅
8 ESSPF_FADEIN タイマー時間でフェードインを行う
9 ESSPF_FADEINWIPE タイマー時間でフェードインを行う、その後消滅
10 ESSPF_EFADE タイマー時間の最後にフェードアウトを行う
11 ESSPF_EFADEWIPE タイマー時間の最後にフェードアウトを行う、その後消滅
12 ESSPF_EFADE2 タイマー時間の最後にゆっくりフェードアウトを行う
13 ESSPF_EFADEWIPE2 タイマー時間の最後にゆっくりフェードアウトを行う、その後消滅
^p
p3でタイマー時間(フレーム数)を指定します。このフレーム数が経過すると、点滅やフェード動作を終了します。
ESSPF_FADEOUT/ESSPF_FADEINは、指定したタイマー時間全体でフェードを行うのに対して、ESSPF_EFADE及びESSPF_EFADEWIPE2は、タイマー時間に関係なく一定の速度でフェードを行います。
p3に-1を設定すると、カウントは無限になります。
フェードインやフェードアウトは、設定した時点のスプライトに設定されているαチャンネル値(透明度)が考慮されるので注意してくた゜さい。
フェードアウトの場合は、設定されているαチャンネル値から完全な透明に変化します。フェードインの場合は、完全な透明から設定されているαチャンネル値までの変化を行います。
フェードアウト後に消滅しないモードを選択している場合は、表示されない有効なスプライトが残ることになるので注意してください。
%href
es_effect
%index
es_setpri
スプライト優先順位設定
%group
拡張画面制御命令
%prm
p1,p2
p1(0)=スプライトNo.
p2(0)=優先順位(0〜)
%inst
スプライトの優先順位を変更します。
p1で指定したスプライトに、p2で指定した値を設定します。
実際に優先順位に従って描画を行う場合には、es_draw命令で表示するスプライトの優先順位設定パラメーターを指定する必要があります。
スプライト優先順位は設定された値が大きいほど手前に描画されます。
%href
es_set
es_draw
%index
es_put
キャラクタ画面表示
%group
拡張画面制御命令
%prm
p1,p2,p3,p4,p5,p6,p7
p1=表示する左上X座標
p2=表示する左上Y座標
p3(0)=表示するキャラクタNo.
p4(-1)=EP値
p5(65536)=表示X倍率
p6(65536)=表示Y倍率
p7(0)=表示角度
%inst
スプライト用のキャラクタパターンとして登録されているデータを、指定した座標に表示します。
この命令は、スプライトとは関係なく直接画面にキャラクタを描画する命令です。
(p1,p2)で設定された座標に、p3のキャラクタNo.をp4のEP値で描画します。
(p5,p6)でX,Y方向の拡大率(65536=100%となります)、p7で角度値を与えることができます。
%href
es_spropt
es_draw
%index