-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdxlibp.h
More file actions
1738 lines (1665 loc) · 67.1 KB
/
dxlibp.h
File metadata and controls
1738 lines (1665 loc) · 67.1 KB
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
/**
* @file dxlibp.h
* @mainpage
* DXライブラリPortable @n
* Ver0.5.7@n
* 製作者:憂煉@n
* このライブラリを使う際にこのライブラリの著作権表記は要りませんが、このライブラリが依存しているライブラリの著作権表記は行う必要があります。@n
* また、このライブラリのソースコードの一部または全部を転載、引用、公開などする場合はこのライブラリの著作権表記が必要です。@n
* 詳しくはreadme.txtを読んでください。@n
* 説明に(本家互換)とある関数はDXライブラリと挙動がほぼ同じですので、本家の関数リファレンスも参考にしてください。
*/
#ifndef DXLIBP_H__
#define DXLIBP_H__
#include <pspuser.h>
/*DXPのコンパイルオプション*/
#define DXP_BUILDOPTION_FILEHANDLE_MAX 32 //FileRead系関数で同時に開けるファイルハンドルの数
#define DXP_BUILDOPTION_FILENAMELENGTH_MAX 260 //FileRead系関数で使えるファイル名の長さ
#define DXP_BUILDOPTION_TEXTURE_MAXNUM 512 //DXPが内部で持つテクスチャの最大枚数
#define DXP_BUILDOPTION_GHANDLE_MAXNUM 2048 //グラフィックスハンドルの最大数
#define DXP_BUILDOPTION_MODEL_MAXNUM 16 //3Dモデルの最大数
#define DXP_BUILDOPTION_FONTHANDLE_MAX 8
#define DXP_BUILDOPTION_NO3D //3D機能の無効化。これをコメントアウトした場合、実装途中の3D関数が使用可能になりますが、libpspgumへの依存が発生します。
/*---定数とマクロ---*/
#define RUNCHECK {printfDx("%s,%s,%s,%d\n",__TIME__,__FILE__,__func__,__LINE__);ScreenCopy();/*AppLogAdd("%s,%s,%s,%d\n",__TIME__,__FILE__,__func__,__LINE__);*/}
#define FILETRACE {AppLogAdd("%s,%s,%s,%d\n",__TIME__,__FILE__,__func__,__LINE__);}
#ifndef TRUE
#define TRUE (1)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef LONGLONG
#define LONGLONG u64
#endif
/*Windowsの定義をすこし流用*/
#define BYTE u8
#define WORD u16
#define DWORD u32
/* 文字コード定義 */
#define DXP_CP_SJIS (0x0d)
#define DXP_CP_UTF8 (0xff)
/* PSPのボタン定義 */
#define DXP_INPUT_UP (0x00000010)
#define DXP_INPUT_RIGHT (0x00000020)
#define DXP_INPUT_DOWN (0x00000040)
#define DXP_INPUT_LEFT (0x00000080)
#define DXP_INPUT_TRIANGLE (0x00001000)
#define DXP_INPUT_CIRCLE (0x00002000)
#define DXP_INPUT_CROSS (0x00004000)
#define DXP_INPUT_SQUARE (0x00008000)
#define DXP_INPUT_LTRIGGER (0x00000100)
#define DXP_INPUT_RTRIGGER (0x00000200)
#define DXP_INPUT_START (0x00000008)
#define DXP_INPUT_SELECT (0x00000001)
/* ゲームパッド定義 */
#define DX_INPUT_PAD1 (1) /* PSPの入力はPAD1入力として取得することができます。詳しくは本家ライブラリのマニュアルを参照してください。 */
#define DX_INPUT_PAD2 (0)
#define DX_INPUT_PAD3 (0)
#define DX_INPUT_PAD4 (0)
#define DX_INPUT_PAD5 (0)
#define DX_INPUT_PAD6 (0)
#define DX_INPUT_PAD7 (0)
#define DX_INPUT_PAD8 (0)
#define DX_INPUT_KEY (0)
#define DX_INPUT_KEY_PAD1 (1)
/* ゲームパッドのボタン定義 */
#define PAD_INPUT_DOWN (0x00000001)
#define PAD_INPUT_LEFT (0x00000002)
#define PAD_INPUT_RIGHT (0x00000004)
#define PAD_INPUT_UP (0x00000008)
#define PAD_INPUT_A (0x00000010)
#define PAD_INPUT_B (0x00000020)
#define PAD_INPUT_C (0x00000040)
#define PAD_INPUT_X (0x00000080)
#define PAD_INPUT_Y (0x00000100)
#define PAD_INPUT_Z (0x00000200)
#define PAD_INPUT_L (0x00000400)
#define PAD_INPUT_R (0x00000800)
#define PAD_INPUT_START (0x00001000)
#define PAD_INPUT_M (0x00002000)
#define PAD_INPUT_D (0x00004000)
#define PAD_INPUT_F (0x00008000)
#define PAD_INPUT_G (0x00010000)
#define PAD_INPUT_H (0x00020000)
#define PAD_INPUT_I (0x00040000)
#define PAD_INPUT_J (0x00080000)
#define PAD_INPUT_K (0x00100000)
#define PAD_INPUT_LL (0x00200000)
#define PAD_INPUT_N (0x00400000)
#define PAD_INPUT_O (0x00800000)
#define PAD_INPUT_P (0x01000000)
#define PAD_INPUT_RR (0x02000000)
#define PAD_INPUT_S (0x04000000)
#define PAD_INPUT_T (0x08000000)
#define PAD_INPUT_U (0x10000000)
#define PAD_INPUT_V (0x20000000)
#define PAD_INPUT_W (0x40000000)
#define PAD_INPUT_XX (0x80000000)
/*
* キー定義
* PSPのボタン入力をキーボード入力として扱うことができます。詳しくは本家ライブラリのマニュアルを参照してください。
*/
#define KEY_INPUT_BACK (0x0E)
#define KEY_INPUT_TAB (0x0F)
#define KEY_INPUT_RETURN (0x1C)
#define KEY_INPUT_LSHIFT (0x2A)
#define KEY_INPUT_RSHIFT (0x36)
#define KEY_INPUT_LCONTROL (0x1D)
#define KEY_INPUT_RCONTROL (0x9D)
#define KEY_INPUT_ESCAPE (0x01)
#define KEY_INPUT_SPACE (0x39)
#define KEY_INPUT_PGUP (0xC9)
#define KEY_INPUT_PGDN (0xD1)
#define KEY_INPUT_END (0xCF)
#define KEY_INPUT_HOME (0xC7)
#define KEY_INPUT_LEFT (0xCB)
#define KEY_INPUT_UP (0xC8)
#define KEY_INPUT_RIGHT (0xCD)
#define KEY_INPUT_DOWN (0xD0)
#define KEY_INPUT_INSERT (0xD2)
#define KEY_INPUT_DELETE (0xD3)
#define KEY_INPUT_MINUS (0x0C)
#define KEY_INPUT_YEN (0x7D)
#define KEY_INPUT_PREVTRACK (0x90)
#define KEY_INPUT_PERIOD (0x34)
#define KEY_INPUT_SLASH (0x35)
#define KEY_INPUT_LALT (0x38)
#define KEY_INPUT_RALT (0xB8)
#define KEY_INPUT_SCROLL (0x46)
#define KEY_INPUT_SEMICOLON (0x27)
#define KEY_INPUT_COLON (0x92)
#define KEY_INPUT_LBRACKET (0x1A)
#define KEY_INPUT_RBRACKET (0x1B)
#define KEY_INPUT_AT (0x91)
#define KEY_INPUT_BACKSLASH (0x2B)
#define KEY_INPUT_COMMA (0x33)
#define KEY_INPUT_CAPSLOCK (0x3A)
#define KEY_INPUT_SYSRQ (0xB7)
#define KEY_INPUT_PAUSE (0xC5)
#define KEY_INPUT_NUMPAD0 (0x52)
#define KEY_INPUT_NUMPAD1 (0x4F)
#define KEY_INPUT_NUMPAD2 (0x50)
#define KEY_INPUT_NUMPAD3 (0x51)
#define KEY_INPUT_NUMPAD4 (0x4B)
#define KEY_INPUT_NUMPAD5 (0x4C)
#define KEY_INPUT_NUMPAD6 (0x4D)
#define KEY_INPUT_NUMPAD7 (0x47)
#define KEY_INPUT_NUMPAD8 (0x48)
#define KEY_INPUT_NUMPAD9 (0x49)
#define KEY_INPUT_MULTIPLY (0x37)
#define KEY_INPUT_ADD (0x4E)
#define KEY_INPUT_SUBTRACT (0x4A)
#define KEY_INPUT_DECIMAL (0x53)
#define KEY_INPUT_DIVIDE (0xB5)
#define KEY_INPUT_NUMPADENTER (0x9C)
#define KEY_INPUT_F1 (0x3B)
#define KEY_INPUT_F2 (0x3C)
#define KEY_INPUT_F3 (0x3D)
#define KEY_INPUT_F4 (0x3E)
#define KEY_INPUT_F5 (0x3F)
#define KEY_INPUT_F6 (0x40)
#define KEY_INPUT_F7 (0x41)
#define KEY_INPUT_F8 (0x42)
#define KEY_INPUT_F9 (0x43)
#define KEY_INPUT_F10 (0x44)
#define KEY_INPUT_F11 (0x57)
#define KEY_INPUT_F12 (0x58)
#define KEY_INPUT_A (0x1E)
#define KEY_INPUT_B (0x30)
#define KEY_INPUT_C (0x2E)
#define KEY_INPUT_D (0x20)
#define KEY_INPUT_E (0x12)
#define KEY_INPUT_F (0x21)
#define KEY_INPUT_G (0x22)
#define KEY_INPUT_H (0x23)
#define KEY_INPUT_I (0x17)
#define KEY_INPUT_J (0x24)
#define KEY_INPUT_K (0x25)
#define KEY_INPUT_L (0x26)
#define KEY_INPUT_M (0x32)
#define KEY_INPUT_N (0x31)
#define KEY_INPUT_O (0x18)
#define KEY_INPUT_P (0x19)
#define KEY_INPUT_Q (0x10)
#define KEY_INPUT_R (0x13)
#define KEY_INPUT_S (0x1F)
#define KEY_INPUT_T (0x14)
#define KEY_INPUT_U (0x16)
#define KEY_INPUT_V (0x2F)
#define KEY_INPUT_W (0x11)
#define KEY_INPUT_X (0x2D)
#define KEY_INPUT_Y (0x15)
#define KEY_INPUT_Z (0x2C)
#define KEY_INPUT_0 (0x0B)
#define KEY_INPUT_1 (0x02)
#define KEY_INPUT_2 (0x03)
#define KEY_INPUT_3 (0x04)
#define KEY_INPUT_4 (0x05)
#define KEY_INPUT_5 (0x06)
#define KEY_INPUT_6 (0x07)
#define KEY_INPUT_7 (0x08)
#define KEY_INPUT_8 (0x09)
#define KEY_INPUT_9 (0x0A)
/*オンスクリーンキーボードのモード指定*/
#define DXP_OSK_ALL (0x00000000) //全て
#define DXP_OSK_DIGIT (0x00000001) //半角数字
#define DXP_OSK_SYMBOL (0x00000002) //半角記号
#define DXP_OSK_SMALL (0x00000004) //半角小文字
#define DXP_OSK_LARGE (0x00000008) //半角大文字
#define DXP_OSK_DIGIT2 (0x00000100) //全角数字
#define DXP_OSK_SYMBOL2 (0x00000200) //全角記号
#define DXP_OSK_SMALL2 (0x00000400) //全角小文字
#define DXP_OSK_LARGE2 (0x00000800) //全角大文字
#define DXP_OSK_HIRAGANA (0x00001000) //ひらがな
#define DXP_OSK_KATAKANA_H (0x00002000) //半角カタカナ
#define DXP_OSK_KATAKANA (0x00004000) //全角カタカナ
#define DXP_OSK_KANJI (0x00008000) //漢字
#define DXP_OSK_URL (0x00080000) //URL入力支援
/* 乱数生成方法の定義。SetRandMode関数に渡します。 */
#define DXP_RANDMODE_MT (0) //メルセンヌ・ツイスター方式の乱数生成器を使います。おそらく、本家との互換性があります。
#define DXP_RANDMODE_HW (1) //PSPのハードウェアの乱数生成器を使います。高速です。
/* ちょっとした色の定数 */
#define DXP_COLOR_NONE 0x00000000
#define DXP_COLOR_BLACK 0xff000000
#define DXP_COLOR_RED 0xff0000ff
#define DXP_COLOR_GREEN 0xff00ff00
#define DXP_COLOR_BLUE 0xffff0000
#define DXP_COLOR_WHITE 0xffffffff
#define DXP_COLOR_LITEGRAY 0xffbfbfbf
#define DXP_COLOR_GRAY 0xff7f7f7f
#define DXP_COLOR_DARKGRAY 0xff3f3f3f
/* フォント周り */
#define DXP_FONT_ALIGN_LEFT 0x0000 //左寄せ
#define DXP_FONT_ALIGN_CENTER 0x0200 //中央
#define DXP_FONT_ALIGN_RIGHT 0x0400 //右寄せ
#define DXP_FONT_WIDTH_FIX 0x0800 //等幅指定用
#define DXP_FONT_ALIGN_DEFAULT (DXP_FONT_ALIGN_LEFT)
#define DXP_FONT_DEFAULT_SIZE 16
#define DX_FONTTYPE_NORMAL 0
#define DX_FONTTYPE_EDGE 1
#define DX_FONTTYPE_ANTIALIASING 2
#define DX_FONTTYPE_ANTIALIASING_EDGE 3
/*描画*/
#define DX_SCREEN_BACK 0xfffffffe
/*グラフィックのフォーマット定義*/
#define DXP_FMT_5650 (0) /* テクスチャ、パレット、描画先*/
#define DXP_FMT_5551 (1) /* テクスチャ、パレット、描画先*/
#define DXP_FMT_4444 (2) /* テクスチャ、パレット、描画先*/
#define DXP_FMT_8888 (3) /* テクスチャ、パレット、描画先*/
#define DXP_FMT_T4 (4) /* テクスチャのみ */
#define DXP_FMT_T8 (5) /* テクスチャのみ */
//#define DXP_FMT_DXT1 (8) /* テクスチャのみ */
//#define DXP_FMT_DXT3 (9) /* テクスチャのみ */
//#define DXP_FMT_DXT5 (10)/* テクスチャのみ */
/*描画モード定義*/
#define DX_DRAWMODE_NEAREST 0
#define DX_DRAWMODE_BILINEAR 1
/* 描画ブレンドモード定義 */
#define DX_BLENDMODE_NOBLEND (0) /* ノーブレンド*/
#define DX_BLENDMODE_ALPHA (1) /* αブレンド*/
#define DX_BLENDMODE_ADD (2) /* 加算ブレンド*/
#define DX_BLENDMODE_SUB (3) /* 減算ブレンド*/
#define DX_BLENDMODE_MUL (4) /* 乗算ブレンド*/
#define DX_BLENDMODE_DESTCOLOR (8) /* カラーは更新されない*/
#define DX_BLENDMODE_INVDESTCOLOR (9) /* 描画先の色の反転値を掛ける*/
#define DX_BLENDMODE_INVSRC (10) /* 描画元の色を反転する*/
/*#define DX_BLENDMODE_MULA (11) */
/* アルファチャンネル考慮付き乗算ブレンドはPSPの制限で実装できませんでした><。*/
/* SetGraphModeの戻り値 */
#define DX_CHANGESCREEN_OK (0) // 画面変更は成功した
#define DX_CHANGESCREEN_RETURN (-1) // 画面の変更は失敗し、元の画面モードに戻された
/* 再生タイプ */
#define DX_PLAYTYPE_NORMAL 0
#define DX_PLAYTYPE_BACK 1
#define DX_PLAYTYPE_LOOP 3
/* 音楽 */
#define DX_SOUNDDATATYPE_MEMNOPRESS (0)
//#define DX_SOUNDDATATYPE_MEMPRESS (1)
#define DX_SOUNDDATATYPE_FILE (3)
/* 構造体定義 */
typedef struct DATEDATA__
{
int Year;
int Mon;
int Day;
int Hour;
int Min;
int Sec;
}DATEDATA;
typedef ScePspFVector3 VECTOR;
typedef struct MATRIX
{
union
{
float m[4][4];
ScePspFMatrix4 pspm;
};
}MATRIX;
typedef struct QUATERNION
{
float x;
float y;
float z;
float w;
}QUATERNION;
typedef struct COLOR_U8
{
union
{
u32 code;
struct
{
u8 r;
u8 g;
u8 b;
u8 a;
};
};
}COLOR_U8;
typedef struct COLOR_F
{
float r,g,b,a;
}COLOR_F;
typedef struct VERTEX3D
{
// テクスチャ座標
float u, v ;
// ディフューズカラー
COLOR_U8 dif ;
// 法線
VECTOR norm ;
// 座標
VECTOR pos ;
} VERTEX3D;
#ifdef __cplusplus
#define DXPDEFARG(ARG) =(ARG) /* C++言語のデフォルト引数を指定するためのマクロ */
extern "C" {
#else
#define DXPDEFARG(ARG)
#endif
/** @defgroup 使用必須関数*/
/*@{*/
/**
* ライブラリの初期化(本家互換)
*
* DXPを使用可能な状態に初期化します。DXPを使用するソフトウェアはまずこの 関数を呼び出す必要があります。この関数を使ってもし-1(エラー)が返ってきた場合は直ちに ソフトを終了しなければなりません。
* @retval 0 成功
* @retval -1 失敗
*/
int DxLib_Init(void);
/**
* ライブラリ使用の終了関数(本家互換)
*
* DXPの使用を終了する関数です。DXPを使用しているソフトはすべてソフトを 終了させる前にこの関数を呼ぶ必要があります。
* @retval 0 成功
* @retval -1 失敗
*/
int DxLib_End(void);
/**
* ライブラリが初期化済みかどうか調べる(本家互換)
*
* DXPが初期化済みかどうかを取得します。
* @retval 1 初期化済み
* @retval 0 未初期化
*/
int DxLib_Isinit(void);
/**
* 毎フレーム必要な処理を行う(本家互換)
*
* ボタン入力状況の更新等を行います。ユーザーがHOMEボタンによる終了を行ったとき等、ゲームを終了すべき時に-1が返されます。
* @retval 0 成功
* @retval -1 失敗
*/
int ProcessMessage(void);
/*@}*/
/*@defgroup 文字コード関連*/
/*@{*/
/**
* ライブラリが使う文字コードを変更する
*
* プログラミングの環境によって文字コードが異なるので、その設定をします。OSKや文字列描画等で使われます。
* 初期設定はSJISです。UTF-8環境の方はDXP_CP_UTF8を指定してください。
* @retval 0 成功
* @retval -1 失敗
*/
int SetCodepoint(int codepoint);
/*@}*/
/** @defgroup 時間関係*/
/*@{*/
/**
* ミリ秒単位の精度を持つカウンタの現在値を得る(本家互換)
*
* RTC(本体内蔵の時計)の値をミリ秒単位であらわした値が返ってきます。
* @return RTCの値をミリ秒単位であらわした値
*/
int GetNowCount(void);
/**
* マイクロ秒単位の精度を持つカウンタの現在値を得る(本家互換)
*
* RTC(本体内蔵の時計)の値を返します。この関数の呼び出しに少なくとも30マイクロ秒ほどかかるようです。
* @return RTCの値
*/
u64 GetNowHiPerformanceCount(void);
/**
* 現在時刻を取得する(本家互換)
*
* DXライブラリ独自のDATEDATA構造体に現在時刻を格納します。
* @param datebuf : DXライブラリ独自のDATEDATA構造体へのポインタ
* @retval 0 成功
* @retval -1 失敗
*/
int GetDateTime(DATEDATA *datebuf);
/**
* 指定時間だけ処理を止める
*
* Win32APIのSleep関数と同じです。
* @param ms ミリ秒単位で処理を止める時間を指定します。
*/
void Sleep(int ms);
/*@}*/
/** @defgroup 乱数取得関数*/
/*@{*/
int SRand(int seed); /**<本家互換関数*/
/**
* 乱数を取得する(本家互換)
*
* 乱数を得ます。この関数は0からmaxで指定した数値のどれかの数値を返します。
* @param max 取得する乱数の最大値。
* @return 0からmaxで指定した数値のどれかの数値。
**/
int GetRand(int max);
/**
* 乱数生成器を変更する関数(DXP独自)
*
* GetRandを実行したときに使われる乱数生成器を指定します。エラーが発生した場合、DXP_RANDMODE_HWが設定されます。デフォルトの設定はDXP_RANDMODE_MTです。
* @par 指定可能な引数:
* - DXP_RANDMODE_MT - メルセンヌ・ツイスター方式の乱数生成器を使います。おそらく、本家との互換性があります。低速です。
* - DXP_RANDMODE_HW - PSPのハードウェアの乱数生成器を使います。高速です。
* @param mode - 乱数生成器を指定します。
* @retval 0 成功
* @retval -1 失敗
**/
int ChangeRandMode(int mode);
/*@}*/
/** @defgroup PSP本体制御関連*/
/*@{*/
/**
* PSPのCPUクロックを変更する
*
* CPUのクロックを変更します。バスクロックは設定された数値の半分に設定されます。
* 1〜333以外の値が指定された場合は単にCPUクロックを返すだけの動作になります。
* @param freq 設定するクロック
* @return 関数が呼ばれた時点でのCPUクロック
*/
int ChangeCpuSpeed(int freq);
/*@}*/
/** @defgroup 算術関連*/
/*@{*/
static inline VECTOR VGet(float x,float y,float z){VECTOR res = {x,y,z};return res;}
/**
* 二つのベクトルを足し算します。
*
* @param v1 足されるベクトル
* @param v2 足すベクトル
* @return ベクトル同士を足した結果
*/
static inline VECTOR VAdd(VECTOR v1,VECTOR v2){__asm__ volatile ("ulv.q C000,%0\n ulv.q C010,%1\n vadd.t C000,C000,C010\n sv.s S000,0 + %0\n sv.s S001,4 + %0\n sv.s S002,8 + %0\n":"+m"(v1):"m"(v2));return v1;}
/**
* 二つのベクトルを引き算します。
*
* @param v1 引かれるベクトル
* @param v2 引くベクトル
* @return ベクトル同士を引き算した結果
*/
static inline VECTOR VSub(VECTOR v1,VECTOR v2){__asm__ volatile ("ulv.q C000,%0\n ulv.q C010,%1\n vsub.t C000,C000,C010\n sv.s S000,0 + %0\n sv.s S001,4 + %0\n sv.s S002,8 + %0\n":"+m"(v1):"m"(v2));return v1;}
/**
* 二つのベクトルの内積を計算します
*
* @param v1 ベクトル
* @param v2 ベクトル
* @return 二つのベクトルの内積
*/
static inline float VDot(VECTOR v1,VECTOR v2){register float res;__asm__ volatile ("ulv.q C000,%1\n ulv.q C010,%2\n vdot.t S020,C000,C010\nmfv %0,S020\n":"=r"(res):"m"(v1),"m"(v2));return res;}
/**
* 二つのベクトルの外積を計算します
*
* @param v1 ベクトル
* @param v2 ベクトル
* @return 二つのベクトルの外積
*/
static inline VECTOR VCross(VECTOR v1,VECTOR v2){__asm__ volatile ("ulv.q C000,%0\nulv.q C010,%1\nvcrsp.t C000,C000,C010\nsv.s S000,0 + %0\nsv.s S001,4 + %0\nsv.s S002,8 + %0\n":"+m"(v1):"m"(v2));return v1;}
/**
* ベクトルをスカラー倍します
*
* @param v ベクトル
* @param scale スケーリングの値
* @return 結果
*/
static inline VECTOR VScale(VECTOR v,float scale){__asm__ volatile ("ulv.q C000,%0\nmtv %1,S010\nvscl.t C000,C000,S010\nsv.s S000,0 + %0\nsv.s S001,4 + %0\nsv.s S002,8 + %0\n":"+m"(v):"r"(scale));return v;}
/**
* ベクトルの大きさを計算します
*
* @param v ベクトル
* @return ベクトルの大きさ
*/
static inline float VSize(VECTOR v){float res;__asm__ volatile ("ulv.q C000,%1\nvdot.t S010,C000,C000\nvsqrt.s S010,S010\nsv.s %0,S010\n":"=r"(res):"m"(v));return res;}
/**
* ベクトルの大きさの二乗を計算します
*
* @param v ベクトル
* @return ベクトルの大きさの二乗
*/
static inline float VSquareSize(VECTOR v){register float res;__asm__ volatile("ulv.q C000,%1\nvdot.t S010,C000,C000\nmfv %0,S010\n":"=r"(res):"m"(v));return res;}
/**
* 正規ベクトル(長さが1となるようなベクトル)を求めます
*
* @param v ベクトル
* @return 正規ベクトル
*/
static inline VECTOR VNorm(VECTOR v){__asm__ volatile("ulv.q C000,%0\nvdot.t S010,C000,C000\nvrsq.s S010,S010\nvscl.t C000,C000,S010\nusv.s S000,0 + %0\nusv.s S001,4 + %0\nusv.s S002, 8 + %0\n":"+m"(v));return v;}
/**
* ベクトルを行列で座標変換にかけます。
*
* @param v ベクトル
* @param m 変換行列
* @return 変換結果
*/
static inline VECTOR VTransform(VECTOR v,MATRIX m){__asm__ volatile("ulv.q C000,%0\nvone.s S003\nulv.q R100,0 + %1\nulv.q R101,16 + %1\nulv.q R102,32 + %1\nulv.q R103,48 + %1\nvtfm4.q C010,M100,C000\nsv.s S010,0 + %0\nsv.s S011,4 + %0\nsv.s S012,8 + %0\n":"+m"(v):"m"(m));return v;}
/**
* ベクトルを行列で座標変換にかけます。ただし、平行移動を行いません
*
* @param v ベクトル
* @param m 変換行列
* @return 変換結果
*/
static inline VECTOR VTransformSR(VECTOR v,MATRIX m){__asm__ volatile("ulv.q C000,%0\nulv.q R100,0 + %1\nulv.q R101,16 + %1\nulv.q R102,32 + %1\nulv.q R103,48 + %1\nvtfm3.t C010,M100,C000\nsv.s S010,0 + %0\nsv.s S011,4 + %0\nsv.s S012,8 + %0\n":"+m"(v):"m"(m));return v;}
/**
* 単位行列を取得します
*
* @return 単位行列
*/
static inline MATRIX MGetIdent(){MATRIX m;__asm__ volatile ("vmidt.q M000\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m));return m;}
/**
* 拡大変換行列を取得します
*
* @param v XYZそれぞれの軸方向に対する拡大率を表すベクトル
* @return 拡大変換行列
*/
static inline MATRIX MGetScale(VECTOR v){MATRIX m;__asm__ volatile ("ulv.q R100,%1\nvmov.q R000,R100[x,0,0,0]\nvmov.q R001,R100[0,y,0,0]\nvmov.q R002,R100[0,0,z,0]\nvmov.q R003,R100[0,0,0,1]\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"m"(v));return m;}
/**
* 平行移動行列を取得します
*
* @param v XYZそれぞれの軸方向に対する移動距離を表すベクトル
* @return 平行移動行列
*/
static inline MATRIX MGetTranslate(VECTOR v){MATRIX m;__asm__ volatile("ulv.q R100,%1\nvmidt.q M000\nvmov.q R003,R100[x,y,z,1]\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"m"(v));return m;}
/**
* X軸回転行列を取得します
*
* @param angle X軸に対しての回転角度
* @return 回転行列
*/
static inline MATRIX MGetRotX(float angle){MATRIX m;__asm__ volatile("mtv %1,S100\nvcst.s S110,VFPU_2_PI\nvmul.s S100,S100,S110\nvmidt.q M000\nvrot.q R001,S100,[0,c,s,0]\nvrot.q R002,S100,[0,-s,c,0]\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"r"(angle));return m;}
/**
* Y軸回転行列を取得します
*
* @param angle Y軸に対しての回転角度
* @return 回転行列
*/
static inline MATRIX MGetRotY(float angle){MATRIX m;__asm__ volatile("mtv %1,S100\nvcst.s S110,VFPU_2_PI\nvmul.s S100,S100,S110\nvmidt.q M000\nvrot.q R000,S100,[c,0,-s,0]\nvrot.q R002,S100,[s,0,c,0]\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"r"(angle));return m;}
/**
* Z軸回転行列を取得します
*
* @param angle Z軸に対しての回転角度
* @return 回転行列
*/
static inline MATRIX MGetRotZ(float angle){MATRIX m;__asm__ volatile("mtv %1,S100\nvcst.s S110,VFPU_2_PI\nvmul.s S100,S100,S110\nvmidt.q M000\nvrot.q R000,S100,[c,s,0,0]\nvrot.q R001,S100,[-s,c,0,0]\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"r"(angle));return m;}
/**
* 任意軸回転行列を取得します
*
* @param v 回転軸の方向を指定するベクトル
* @param angle 指定した軸に対しての回転角度
* @return 回転行列
*/
static inline MATRIX MGetRotAxis(VECTOR v,float angle){MATRIX m;__asm__ volatile("ulv.q R100,%2\nvdot.t S103,R100,R100\nvrsq.s S103,S103\nvscl.t R100,R100,S103\nmtv %1,S130\nvcst.s S103,VFPU_2_PI\nvmul.s S130,S130,S103\nvrot.p R101,S130,[s,c]\nvocp.s S121,S111\nvscl.t R102,R100,S121\nvmov.q R000,R100[x,y,z,0]\nvmov.q R001,R100[x,y,z,0]\nvmov.q R002,R100[x,y,z,0]\nvmov.q R003,R100[0,0,0,1]\nvscl.t R000,R000,S102\nvscl.t R001,R001,S112\nvscl.t R002,R002,S122\nvmul.t R102,R101[y,x,-x],R100[1,z,y]\nvadd.t R000,R000,R102\nvmul.t R102,R101[-x,y,x],R100[z,1,x]\nvadd.t R001,R001,R102\nvmul.t R102,R101[x,-x,y],R100[y,x,1]\nvadd.t R002,R002,R102\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"r"(angle),"m"(v));return m;}
/**
* あるベクトルの方向から別のベクトルの方向に回転する回転行列を取得します
*
* ベクトルのなす角が90度を超えていると正しく値を取得できないので注意してください。
* @param v1 変換元方向のベクトル
* @param v2 変換先方向のベクトル
* @return 回転行列
*/
static inline MATRIX MGetRotVec2(VECTOR v1,VECTOR v2){MATRIX m;__asm__ volatile ("ulv.q R000,%1\nulv.q R001,%2\nvdot.t S002,R000,R000\nvdot.t S012,R001,R001\nvrsq.p R002,R002\nvscl.t R000,R000,S002\nvscl.t R001,R001,S012\nvdot.t S002,R000,R001\nvmul.s S012,S002,S002\nvocp.p R022,R002\nvsqrt.s S012,S032\nvcrsp.t R003,R000,R001\nvdot.t S032,R003,R003\nvrsq.s S032,S032\nvscl.t R003,R003,S032\nvscl.t R000,R003,S022\nvmov.q R100,R003[x,y,z,0]\nvmov.q R101,R003[x,y,z,0]\nvmov.q R102,R003[x,y,z,0]\nvmov.q R103,R003[0,0,0,1]\nvscl.t R100,R100,S000\nvscl.t R101,R101,S010\nvscl.t R102,R102,S020\nvmul.t R000,R002[x,y,-y],R003[1,z,y]\nvadd.t R100,R100,R000\nvmul.t R000,R002[-y,x,y],R003[z,1,x]\nvadd.t R101,R101,R000\nvmul.t R000,R002[y,-y,x],R003[y,x,1]\nvadd.t R102,R102,R000\nusv.q R100,0 + %0\nusv.q R101,16 + %0\nusv.q R102,32 + %0\nusv.q R103,48 + %0\n":"=m"(m):"m"(v1),"m"(v2));return m;}
/**
* 指定の座標系のベクトルを基本座標系上のベクトルに直す変換行列を取得します
*
* @param xAxis 変換元座標系のX軸方向を表すベクトル
* @param yAxis 変換元座標系のY軸方向を表すベクトル
* @param zAxis 変換元座標系のZ軸方向を表すベクトル
* @param pos 変換元座標系の原点の基本座標系での位置
* @return 変換行列
*/
static inline MATRIX MGetAxis1(VECTOR xAxis,VECTOR yAxis,VECTOR zAxis,VECTOR pos){MATRIX m;m.m[0][0] = xAxis.x;m.m[0][1] = xAxis.y;m.m[0][2] = xAxis.z;m.m[0][3] = 0.0f;m.m[1][0] = yAxis.x;m.m[1][1] = yAxis.y;m.m[1][2] = yAxis.z;m.m[1][3] = 0.0f;m.m[2][0] = zAxis.x;m.m[2][1] = zAxis.y;m.m[2][2] = zAxis.z;m.m[2][3] = 0.0f;m.m[3][0] = pos.x;m.m[3][1] = pos.y;m.m[3][2] = pos.z;m.m[3][3] = 1.0f;return m;}
/**
* 基本座標系のベクトルを指定の座標系上のベクトルに直す変換行列を取得します
*
* @param xAxis 変換先座標系のX軸方向を表すベクトル
* @param yAxis 変換先座標系のY軸方向を表すベクトル
* @param zAxis 変換先座標系のZ軸方向を表すベクトル
* @param pos 変換先座標系の原点の基本座標系での位置
* @return 変換行列
*/
static inline MATRIX MGetAxis2(VECTOR xAxis,VECTOR yAxis,VECTOR zAxis,VECTOR pos){MATRIX m;__asm__ volatile ("ulv.q C010,%1\nulv.q C020,%2\nulv.q C030,%3\nulv.q C040,%4\nvdot.t S003,C010,C040[-x,-y,-z]\nvdot.t S013,C020,C040[-x,-y,-z]\nvdot.t S023,C030,C040[-x,-y,-z]\nvmov.q C040,C040[0,0,0,1]\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"m"(xAxis),"m"(yAxis),"m"(zAxis),"m"(pos));return m;}
/**
* 行列同士を足し算します
*
* @param m1 足されるベクトル
* @param m2 足すベクトル
* @return 結果の行列
*/
static inline MATRIX MAdd(MATRIX m1,MATRIX m2){MATRIX m;__asm__ volatile ("ulv.q R000,0 + %1\nulv.q R001,16 + %1\nulv.q R002,32 + %1\nulv.q R003,48 + %1\nulv.q R100,0 + %2\nulv.q R101,16 + %2\nulv.q R102,32 + %2\nulv.q R103,48 + %2\nvadd.q R200,R000,R100\nvadd.q R201,R001,R101\nvadd.q R202,R002,R102\nvadd.q R203,R003,R103\nusv.q R200,0 + %0\nusv.q R201,16 + %0\nusv.q R202,32 + %0\nusv.q R203,48 + %0\n":"=m"(m):"m"(m1),"m"(m2));return m;}
/**
* 行列同士を乗算します
*
* @param m1 掛けられるベクトル
* @param m2 掛けるベクトル
* @return 結果の行列
*/
static inline MATRIX MMult(MATRIX m1,MATRIX m2){MATRIX m;__asm__ volatile ("ulv.q R000,0 + %1\nulv.q R001,16 + %1\nulv.q R002,32 + %1\nulv.q R003,48 + %1\nulv.q R100,0 + %2\nulv.q R101,16 + %2\nulv.q R102,32 + %2\nulv.q R103,48 + %2\nvmmul.q M200,M000,M100\nusv.q R200,0 + %0\nusv.q R201,16 + %0\nusv.q R202,32 + %0\nusv.q R203,48 + %0\n":"=m"(m):"m"(m1),"m"(m2));return m;}
/**
* 行列を拡大します
*
* @param m 変換元行列
* @param scale 拡大率
* @return 結果の行列
*/
static inline MATRIX MScale(MATRIX m,float scale){__asm__ volatile ("ulv.q R000,0 + %0\nulv.q R001,16 + %0\nulv.q R002,32 + %0\nulv.q R003,48 + %0\nmtv %1,S100\nvmscl.q M000,M000,S100\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m):"r"(scale));return m;}
/**
* 転置行列を取得します
*
* @param m 転置したい行列
* @return 転置行列
*/
static inline MATRIX MTranspose(MATRIX m){__asm__ volatile ("ulv.q R000,0 + %0\nulv.q R001,16 + %0\nulv.q R002,32 + %0\nulv.q R003,48 + %0\nusv.q C000,0 + %0\nusv.q C010,16 + %0\nusv.q C020,32 + %0\nusv.q C030,48 + %0\n":"=m"(m));return m;}
/**
* 逆行列を取得します
*
* 行列式が0となるような行列には逆行列が存在しないので、単位行列を返します
* @param m 逆にしたい行列
* @return 逆行列
*/
static inline MATRIX MInverse(MATRIX m){register float d;__asm__ volatile ("ulv.q R200,0 + %1\nulv.q R201,16 + %1\nulv.q R202,32 + %1\nulv.q R203,48 + %1\nvmul.q R100,R201[y,x,x,x],R202[z,z,y,y]\nvmul.q R100,R203[w,w,w,z],R100\nvmul.q R101,R201[z,z,y,y],R202[w,w,w,z]\nvmul.q R101,R203[y,x,x,x],R101\nvadd.q R100,R100,R101\nvmul.q R101,R201[w,w,w,z],R202[y,x,x,x]\nvmul.q R101,R203[z,z,y,y],R101\nvadd.q R100,R100,R101\nvmul.q R101,R203[y,x,x,x],R202[z,z,y,y]\nvmul.q R101,R201[w,w,w,z],R101\nvsub.q R100,R100,R101\nvmul.q R101,R203[z,z,y,y],R202[w,w,w,z]\nvmul.q R101,R201[y,x,x,x],R101\nvsub.q R100,R100,R101\nvmul.q R101,R203[w,w,w,z],R202[y,x,x,x]\nvmul.q R101,R201[z,z,y,y],R101\nvsub.q R100,R100,R101\nvdot.q S101,R100,R200[x,-y,z,-w]\nvabs.s S102,S101\nmfv %0,S102\n":"=r"(d):"m"(m));if(d < 0.00001f){__asm__ volatile("vmidt.q M000\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m));return m;}__asm__ volatile("vrcp.s S101,S101\nvscl.q C000,R100[x,-y,z,-w],S101\nvmul.q R102,R200[y,x,x,x],R203[w,w,w,z]\nvmul.q R103,R203[y,x,x,x],R200[w,w,w,z]\nvsub.q R102,R102,R103\nvmul.q C010,R102,R202[z,z,y,y]\nvmul.q R102,R200[z,z,y,y],R203[y,x,x,x]\nvmul.q R103,R203[z,z,y,y],R200[y,x,x,x]\nvsub.q R102,R102,R103\nvmul.q R102,R102,R202[w,w,w,z]\nvadd.q C010,C010,R102\nvmul.q R102,R200[w,w,w,z],R203[z,z,y,y]\nvmul.q R103,R203[w,w,w,z],R200[z,z,y,y]\nvsub.q R102,R102,R103\nvmul.q R102,R102,R202[y,x,x,x]\nvadd.q C010,C010,R102\nvscl.q C010,C010[-x,y,-z,w],S101\nvmul.q R102,R200[y,x,x,x],R203[w,w,w,z]\nvmul.q R103,R203[y,x,x,x],R200[w,w,w,z]\nvsub.q R102,R102,R103\nvmul.q C020,R102,R201[z,z,y,y]\nvmul.q R102,R200[z,z,y,y],R203[y,x,x,x]\nvmul.q R103,R203[z,z,y,y],R200[y,x,x,x]\nvsub.q R102,R102,R103\nvmul.q R102,R102,R201[w,w,w,z]\nvadd.q C020,C020,R102\nvmul.q R102,R200[w,w,w,z],R203[z,z,y,y]\nvmul.q R103,R203[w,w,w,z],R200[z,z,y,y]\nvsub.q R102,R102,R103\nvmul.q R102,R102,R201[y,x,x,x]\nvadd.q C020,C020,R102\nvscl.q C020,C020[x,-y,z,-w],S101\nvmul.q R102,R200[y,x,x,x],R202[w,w,w,z]\nvmul.q R103,R202[y,x,x,x],R200[w,w,w,z]\nvsub.q R102,R102,R103\nvmul.q C030,R102,R201[z,z,y,y]\nvmul.q R102,R200[z,z,y,y],R202[y,x,x,x]\nvmul.q R103,R202[z,z,y,y],R200[y,x,x,x]\nvsub.q R102,R102,R103\nvmul.q R102,R102,R201[w,w,w,z]\nvadd.q C030,C030,R102\nvmul.q R102,R200[w,w,w,z],R202[z,z,y,y]\nvmul.q R103,R202[w,w,w,z],R200[z,z,y,y]\nvsub.q R102,R102,R103\nvmul.q R102,R102,R201[y,x,x,x]\nvadd.q C030,C030,R102\nvscl.q C030,C030[-x,y,-z,w],S101\nusv.q R000,0 + %0\nusv.q R001,16 + %0\nusv.q R002,32 + %0\nusv.q R003,48 + %0\n":"=m"(m));return m;}
/*@}*/
/** @defgroup 入力関連*/
/*@{*/
/**
* PSPのボタン入力情報を直接受け取る
*
* @code
* if(GetInputState() & DXP_INPUT_CIRCLE)printfDx("○ボタンが押されました");
* @endcode
* @return ボタンの入力状態
*/
int GetInputState(void);
/**
* ジョイパッドが接続されている数を取得する。(本家互換)
*
* DXPではこの関数は必ず1を返します。PSPのボタン入力はGetJoypadInputStateにより、PCのジョイパッド入力として受け取ることができます。詳細は本家のヘルプを参照してください。
*/
int GetJoypadNum(void);
/**
* ジョイパッドの入力状況を得る。(本家互換)
*
* DX_INPUT_PAD1が指定されているとPSPのボタン入力がジョイパッド入力として変換された結果が返されます。そうでなければ0が返されます。
* @param inputtype 入力状態を取得するパッドの識別子
* @return ジョイパッド形式に変換された入力状況
*/
int GetJoypadInputState(int inputtype) ;
/**
* ジョイパッドのアナログ的なレバー入力情報を得る(本家互換)
*
* DX_INPUT_KEY1が指定されていると-1000〜+1000の範囲でアナログ入力が返されます。そうでなければ結果は0となります。
* @param xbuf パッドレバーの左右の入力状態を格納する int 型変数のアドレス
* @param ybuf パッドレバーの上下の入力状態を格納する int 型変数のアドレス
* @param inputtype 入力状態を取得するパッドの識別子。
* @retval 0 成功
* @retval -1 失敗
*/
int GetJoypadAnalogInput(int *xbuf,int *ybuf,int inputtype);
/**
* ジョイパッドのアナログ的なレバー入力情報を得る(右スティック用)(本家互換)
*
* PSPには右スティックが存在しないので、呼び出しても意味がありません。
*/
int GetJoypadAnalogInputRight(int *xbuf,int* ybuf,int inputtype);
/**
* ジョイパッドの入力に対応したキーボードの入力を設定する。(本家互換)
*
* ジョイパッドの入力をキーボードの入力に変換する為の対応させます。
*
*/
int SetJoypadInputToKeyInput(int inputtype,int padinput,int keyinput1,int keyinput2,int keyinput3,int keyinput4);
/**
* ジョイパッドの振動を開始する(本家互換)
*
* PSPには振動機能なんて無いので働きません。常に0が返されます
*/
int StartJoypadVibration(int inputtype,int power,int time);
/**
* ジョイパッドの振動を停止する(本家互換)
*
* PSPには振動機能なんて無いので働きません。常に0が返されます
*/
int StopJoypadVibration(int inputtype);
/**
* PSPのボタン入力に対応したキーボードの入力を設定する。
*
* キーボードのキー1つにPSPのボタン(複数可)を割り当てる。SetJoypadInputToKeyInput関数に似せている。
* @param key - KEY_INPUT_ から始まる定数をひとつだけ。
* @param pspbutton - PSP_INPUT_ から始まる定数をひとつ、又は複数を|演算子で組み合わせたもの
* @retval 0 成功
* @retval -1 失敗
* @par サンプルコード
* ○ボタン入力をXキーとして扱わせる。
* @code
* SetKeyInputToPspInput(KEY_INPUT_X,DXP_INPUT_CIRCLE);
* @endcode
**/
int SetKeyInputToPspInput(int key,int pspbutton);
/**
* すべてのキーの押下状態を取得する(キーの特定はできない)(本家互換)
*
* @retval 1 どれかのキーが押された
* @retval 0 どのキーも押されていない
*/
int CheckHitKeyAll(void); /**<本家互換関数*/
/**
* 特定のキーの入力状態を得る(本家互換)
*
* @param keycode 入力状態を取得するキーコード(KEY_INPUTで始まる定数)
* @retval 1 キーが押された
* @retval 0 キーが押されていない
*/
int CheckHitKey(int keycode); /**<本家互換関数*/
/**
* キーボードのすべてのキーの押下状態を取得する(本家互換)
*
* 本家のヘルプを参照してください。
* @param keystatebuf すべてのキーの押下状態を格納するバッファのポインタ(256要素のchar型配列)
* @retval 0 成功
* @retval -1 失敗
*/
int GetHitKeyStateAll(char* keystatebuf); /**<本家互換関数*/
/**
* PSPのオンスクリーンキーボード(OSK)を利用して文字列入力を受け付ける
*
* OSKを利用して文字列入力を受け付けます。ユーザーが入力を終えてこの関数が終了するまで他の処理は一切できないので注意してください。
* modeには以下の値が使えます。|演算子によって必要なものを組み合わせるか、DXP_OSK_ALLでどんな入力も受け付けられるようにしてください。
* - DXP_OSK_ALL 全て
* - DXP_OSK_DIGIT 半角数字
* - DXP_OSK_SYMBOL 半角記号
* - DXP_OSK_SMALL 半角小文字
* - DXP_OSK_LARGE 半角大文字
* - DXP_OSK_DIGIT2 全角数字
* - DXP_OSK_SYMBOL2 全角記号
* - DXP_OSK_SMALL2 全角小文字
* - DXP_OSK_LARGE2 全角大文字
* - DXP_OSK_HIRAGANA ひらがな
* - DXP_OSK_KATAKANA_H 半角カタカナ
* - DXP_OSK_KATAKANA 全角カタカナ
* - DXP_OSK_KANJI 漢字
* - DXP_OSK_URL URL入力支援
*
* @param buf ユーザーが入力した文字列を格納するためのバッファ
* @param buflen バッファのバイト数
* @param mode どのような文字を受け付けるか指定する
* @param title OSKの右下に表示される文字列
* @param init OSKの入力エリアに最初から入力されている文字列
* @retval 0 成功
* @retval -1 失敗
*/
int GetTextOSK(char *buf,int buflen,int mode,const char *title,const char *init,int lllang);
/*@}*/
/** @defgroup ファイル読み込み関連*/
/*@{*/
int FileRead_open(const char *filename,int async DXPDEFARG(0)); /**<本家互換関数 ただし、現在アーカイブには未対応*/
int FileRead_size(const char *filename); /**<本家互換関数*/
int FileRead_close(int filehandle); /**<本家互換関数*/
int FileRead_tell(int filehandle); /**<本家互換関数*/
int FileRead_seek(int filehandle,int offset,int origin); /**<本家互換関数*/
int FileRead_read(void *buffer,int readsize,int filehandle); /**<本家互換関数*/
int FileRead_idle_chk( int filehandle); /**<本家互換関数*/
int FileRead_eof(int filehandle); /**<本家互換関数*/
int FileRead_gets(char *buffer,int buffersize,int filehandle); /**<本家互換関数*/
int FileRead_getc(int filehandle); /**<本家互換関数*/
//int FileRead_scanf(int filehandle,const char *format, ...); //この関数の対応予定はありません。
/*@}*/
/** @defgroup グラフィックス関連 */
/*@{*/
/**
* 線分を描画します(本家互換)
*
* @param x1 線分の始点のX座標
* @param y1 線分の始点のY座標
* @param x2 線分の終点のX座標
* @param y2 線分の終点のY座標
* @param color 線分の色
* @retval 0 成功
* @retval -1 失敗
*/
int DrawLine(int x1,int y1,int x2,int y2,int color);
/**
* 矩形を描画します(本家互換)
*
* @param x1,y1 矩形の左上の座標
* @param x2,y2 矩形の右下の座標
* @param color 矩形の色
* @param fillflag 塗りつぶしフラグ
* @retval 0 成功
* @retval -1 失敗
*/
int DrawBox(int x1,int y1,int x2,int y2,int color,int fillflag);
/**
* 円を描画します(本家互換)
*
* @param x,y 円の中心座標
* @param r 円の半径
* @param color 円の色
* @param fillflag 塗りつぶしフラグ
* @retval 0 成功
* @retval -1 失敗
*/
int DrawCircle(int x,int y,int r,int color,int fillflag);
/**
* 楕円を描画します(本家互換)
*
* @param x,y 楕円の中心座標
* @param rx 楕円のX方向半径
* @param ry 楕円のY方向半径
* @param color 楕円の色
* @param fillflag 塗りつぶしフラグ
* @retval 0 成功
* @retval -1 失敗
*/
int DrawOval(int x,int y,int rx,int ry,int color,int fillflag);
/**
* 三角形を描画します(本家互換)
*
* @param x1,y1 頂点座標1
* @param x2,y2 頂点座標2
* @param x3,y3 頂点座標3
* @param color 三角形の色
* @param fillflag 塗りつぶしフラグ
* @retval 0 成功
* @retval -1 失敗
*/
int DrawTriangle(int x1,int y1,int x2,int y2,int x3,int y3,int color,int fillflag);
/**
* 点を描画する(本家互換)
*
* @param x,y 点の座標
* @param color 点の色
* @retval 0 成功
* @retval -1 失敗
*
*/
int DrawPixel(int x,int y,int color);
/**
* 指定点の色コードを取得する(本家互換)
*
* @param x,y 点の座標
* @return 点の色コード
*/
int GetPixel(int x,int y);
/**
* 画像を読み込んで画面に表示する(本家互換)
*
* @param x ロードした画像を描画する矩形の左上頂点のX座標
* @param y ロードした画像を描画する矩形の左上頂点のY座標
* @param filename ロードする画像パスの文字列があるポインタ
* @param trans 透過色を入れるか、のフラグ。TRUEで透過色有効になる
* @retval 0 成功
* @retval -1 失敗
*/
int LoadGraphScreen(int x,int y,const char* filename,int trans);
/**
* 画像を読み込みます(ほぼ本家互換)
*
* サイズが512x512までのPNG画像を読み込むことが出来ます
* 戻り値はDrawGraph等の関数で画像を描画する際必要になるので、変数に保存してください
* @param FileName ファイル名
* @return グラフィックスハンドル
* @retval -1 失敗
*/
int LoadGraph(const char *FileName);
/**
* 一枚の画像から複数のグラフィックスハンドルを作ります(ほぼ本家互換)
*
* 画像全体のサイズは512x512までです。PNG画像しか読み込めないのもLoadGraphと同様です。
* @param filename 分割読み込みする画像ファイル文字列のポインタ
* @param allnum 画像の分割総数
* @param xnum 画像の横向きに対する分割数
* @param ynum 画像の縦向きに対する分割数
* @param xsize 分割された画像一つの横幅
* @param ysize 分割された画像一つの縦幅
* @param handlebuf 分割読み込みして得たグラフィックハンドルを保存するint型の配列へのポインタ
*/
int LoadDivGraph(const char *filename,int allnum,int xnum,int ynum,int xsize,int ysize,int *handlebuf);
/**
* 空のグラフィックスハンドルを生成する(本家互換)
*
* 512x512より大きなグラフィックは作れないので注意してください
* @param xsize 作成するグラフィックスハンドルの幅
* @param ysize 作成するグラフィックスハンドルの高さ
* @return グラフィックスハンドル
* @retval -1 失敗
*/
int MakeGraph(int xsize,int ysize);
/**
* 画像の描画を行います。(本家互換)
*
* @param x 描画基点のX座標
* @param y 描画基点のY座標
* @param gh 描画するグラフィックスのハンドル
* @param trans 透過フラグ
* @retval 0 成功
* @retval -1 失敗
*/
int DrawGraph(int x,int y,int gh,int trans);
/**
* 画像の左右反転描画を行います。(本家互換)
*
* @param x 描画基点のX座標
* @param y 描画基点のY座標
* @param gh 描画するグラフィックスのハンドル
* @param trans 透過フラグ
* @retval 0 成功