X operations(XOPS)に非常に近いFPSゲームを制作・リメイクし、成果物をオープンソースとして公開することを目的としたプロジェクトです。
| Revision | 186 (tree) |
|---|---|
| Time | 2017-10-14 01:34:19 |
| Author | |
追加小物の設定値をchar型 8bitに換算するよう改良(定数宣言で変更可)、ファイル読み込みを一部関数化。
| @@ -481,19 +481,31 @@ | ||
| 481 | 481 | } |
| 482 | 482 | strcat(fname2, ".msg"); |
| 483 | 483 | |
| 484 | + LoadMSGFiledata(fname2); | |
| 485 | + | |
| 486 | + return 0; | |
| 487 | +} | |
| 488 | + | |
| 489 | +//! @brief メッセージデータファイルを読みこむ | |
| 490 | +//! @param fname ファイル名 | |
| 491 | +//! @return 成功:0 失敗:1 | |
| 492 | +int PointDataInterface::LoadMSGFiledata(char *fname) | |
| 493 | +{ | |
| 494 | + FILE *fp; | |
| 495 | + | |
| 484 | 496 | #ifdef ENABLE_PATH_DELIMITER_SLASH |
| 485 | 497 | //パス区切り文字を変換 |
| 486 | - strcpy(fname2, ChangePathDelimiter(fname2)); | |
| 498 | + fname = ChangePathDelimiter(fname); | |
| 487 | 499 | #endif |
| 488 | 500 | |
| 489 | - //ファイルを読み込み | |
| 490 | - fp = fopen( fname2, "r" ); | |
| 491 | - if( fp != NULL ){ | |
| 492 | 501 | #ifdef ENABLE_DEBUGLOG |
| 493 | - //ログに出力 | |
| 494 | - OutputLog.WriteLog(LOG_LOAD, "MSG", fname2); | |
| 502 | + //ログに出力 | |
| 503 | + OutputLog.WriteLog(LOG_LOAD, "MSG", fname); | |
| 495 | 504 | #endif |
| 496 | 505 | |
| 506 | + //ファイルを読み込み | |
| 507 | + fp = fopen( fname, "r" ); | |
| 508 | + if( fp != NULL ){ | |
| 497 | 509 | //メッセージデータを取得 |
| 498 | 510 | for(int i=0; i<MAX_POINTMESSAGES; i++){ |
| 499 | 511 | if( fgets(text[i], MAX_POINTMESSAGEBYTE, fp) == NULL ){ break; } |
| @@ -504,22 +516,21 @@ | ||
| 504 | 516 | } |
| 505 | 517 | } |
| 506 | 518 | |
| 519 | + //ファイルポインタを開放 | |
| 520 | + fclose( fp ); | |
| 521 | + | |
| 507 | 522 | #ifdef ENABLE_DEBUGLOG |
| 508 | 523 | //ログに出力 |
| 509 | 524 | OutputLog.WriteLog(LOG_COMPLETE, "", ""); |
| 510 | 525 | #endif |
| 526 | + return 0; | |
| 527 | + } | |
| 511 | 528 | |
| 512 | - //ファイルポインタを開放 | |
| 513 | - fclose( fp ); | |
| 514 | - } | |
| 515 | - else{ | |
| 516 | 529 | #ifdef ENABLE_DEBUGLOG |
| 517 | - //ログに出力 | |
| 518 | - OutputLog.WriteLog(LOG_CHECK, "MSG", "ファイルなし"); | |
| 530 | + //ログに出力 | |
| 531 | + OutputLog.WriteLog(LOG_ERROR, "", ""); | |
| 519 | 532 | #endif |
| 520 | - } | |
| 521 | - | |
| 522 | - return 0; | |
| 533 | + return 1; | |
| 523 | 534 | } |
| 524 | 535 | |
| 525 | 536 | //! @brief ポイントデータを取得 |
| @@ -683,8 +694,6 @@ | ||
| 683 | 694 | //! @return 成功:0 失敗:1 |
| 684 | 695 | int MIFInterface::LoadFiledata(char *fname) |
| 685 | 696 | { |
| 686 | - char str[64]; | |
| 687 | - | |
| 688 | 697 | #ifdef ENABLE_DEBUGLOG |
| 689 | 698 | //ログに出力 |
| 690 | 699 | OutputLog.WriteLog(LOG_LOAD, "MIF", fname); |
| @@ -707,21 +716,128 @@ | ||
| 707 | 716 | } |
| 708 | 717 | } |
| 709 | 718 | |
| 710 | - FILE *fp; | |
| 711 | - | |
| 712 | 719 | #ifdef ENABLE_PATH_DELIMITER_SLASH |
| 713 | 720 | //パス区切り文字を変換 |
| 714 | 721 | fname = ChangePathDelimiter(fname); |
| 715 | 722 | #endif |
| 716 | 723 | |
| 724 | + if( mif == false ){ | |
| 725 | + if( LoadDefaultTextFiledata(fname) != 0 ){ | |
| 726 | + //briefing data open failed | |
| 727 | + return 1; | |
| 728 | + } | |
| 729 | + } | |
| 730 | + else{ | |
| 731 | + if( LoadMissionInfoFiledata(fname) != 0 ){ | |
| 732 | + //briefing data open failed | |
| 733 | + return 1; | |
| 734 | + } | |
| 735 | + } | |
| 736 | + | |
| 737 | +#ifdef ENABLE_DEBUGLOG | |
| 738 | + //ログに出力 | |
| 739 | + OutputLog.WriteLog(LOG_COMPLETE, "", ""); | |
| 740 | +#endif | |
| 741 | + | |
| 742 | + | |
| 743 | + //追加小物情報を初期値へ | |
| 744 | + strcpy(addsmallobject_modelpath, ""); | |
| 745 | + strcpy(addsmallobject_texturepath, ""); | |
| 746 | + addsmallobject_decide = 0; | |
| 747 | + addsmallobject_hp = 0; | |
| 748 | + strcpy(addsmallobject_soundpath, ""); | |
| 749 | + addsmallobject_jump = 0; | |
| 750 | + | |
| 751 | + //何かしらの追加小物情報ファイルが指定されていれば | |
| 752 | + if( (strcmp(addsmallobject_path, "") != 0)&&(strcmp(addsmallobject_path, "!") != 0) ){ | |
| 753 | + LoadAddSmallObjectFiledata(addsmallobject_path); | |
| 754 | + } | |
| 755 | +#ifdef ENABLE_DEBUGLOG | |
| 756 | + else{ | |
| 757 | + //ログに出力 | |
| 758 | + OutputLog.WriteLog(LOG_CHECK, "(追加小物)", "ファイルなし"); | |
| 759 | + } | |
| 760 | +#endif | |
| 761 | + | |
| 762 | + return 0; | |
| 763 | +} | |
| 764 | + | |
| 765 | +//! @brief ミッションファイル(.txt)を読みこむ | |
| 766 | +//! @param fname ファイル名 | |
| 767 | +//! @return 成功:0 失敗:1 | |
| 768 | +int MIFInterface::LoadDefaultTextFiledata(char *fname) | |
| 769 | +{ | |
| 770 | + FILE *fp; | |
| 771 | + char str[64]; | |
| 772 | + | |
| 717 | 773 | //ファイルを開く |
| 718 | 774 | fp = fopen( fname, "r" ); |
| 719 | - if( fp == NULL ){ | |
| 720 | - //briefing data open failed | |
| 721 | - return 1; | |
| 775 | + if( fp != NULL ){ | |
| 776 | + //画像Aを取得 | |
| 777 | + fgets(str, 64, fp); | |
| 778 | + DeleteLinefeed(str); | |
| 779 | + if( strcmp(str, "!") == 0 ){ | |
| 780 | + strcpy(picturefileA_path, "!"); | |
| 781 | + } | |
| 782 | + else{ | |
| 783 | + //「data\\briefing\\ 〜 .bmp」を生成 | |
| 784 | + strcpy(picturefileA_path, "data\\briefing\\"); | |
| 785 | + strcat(picturefileA_path, str); | |
| 786 | + strcat(picturefileA_path, ".bmp"); | |
| 787 | + } | |
| 788 | + | |
| 789 | + //画像Bを取得 | |
| 790 | + fgets(str, 64, fp); | |
| 791 | + DeleteLinefeed(str); | |
| 792 | + if( strcmp(str, "!") == 0 ){ | |
| 793 | + strcpy(picturefileB_path, "!"); | |
| 794 | + } | |
| 795 | + else{ | |
| 796 | + //「data\\briefing\\ 〜 .bmp」を生成 | |
| 797 | + strcpy(picturefileB_path, "data\\briefing\\"); | |
| 798 | + strcat(picturefileB_path, str); | |
| 799 | + strcat(picturefileB_path, ".bmp"); | |
| 800 | + } | |
| 801 | + | |
| 802 | + //背景空の番号 | |
| 803 | + fgets(str, 16, fp); | |
| 804 | + DeleteLinefeed(str); | |
| 805 | + skynumber = atoi(str); | |
| 806 | + | |
| 807 | + //ブリーフィングテキストを取得 | |
| 808 | + strcpy(briefingtext, ""); | |
| 809 | + for(int i=0; i<17; i++ ){ | |
| 810 | + if( fgets(str, 50, fp) == NULL ){ break; } | |
| 811 | + strcat(briefingtext, str); | |
| 812 | + datas += 1; | |
| 813 | + } | |
| 814 | + | |
| 815 | + //取得できない値の初期化 | |
| 816 | + strcpy(mission_name, ""); | |
| 817 | + strcpy(mission_fullname, ""); | |
| 818 | + strcpy(blockfile_path, ""); | |
| 819 | + strcpy(pointfile_path, ""); | |
| 820 | + strcpy(addsmallobject_path, ""); | |
| 821 | + collision = false; | |
| 822 | + screen = false; | |
| 823 | + | |
| 824 | + return 0; | |
| 722 | 825 | } |
| 723 | 826 | |
| 724 | - if( mif == true ){ | |
| 827 | + return 1; | |
| 828 | +} | |
| 829 | + | |
| 830 | +//! @brief ミッションファイル(.mif)を読みこむ | |
| 831 | +//! @param fname ファイル名 | |
| 832 | +//! @return 成功:0 失敗:1 | |
| 833 | +int MIFInterface::LoadMissionInfoFiledata(char *fname) | |
| 834 | +{ | |
| 835 | + FILE *fp; | |
| 836 | + char str[64]; | |
| 837 | + | |
| 838 | + //ファイルを開く | |
| 839 | + fp = fopen( fname, "r" ); | |
| 840 | + if( fp != NULL ){ | |
| 725 | 841 | //ミッション識別名 |
| 726 | 842 | fgets(mission_name, 24, fp); |
| 727 | 843 | DeleteLinefeed(mission_name); |
| @@ -774,134 +890,92 @@ | ||
| 774 | 890 | //画像Bを取得 |
| 775 | 891 | fgets(picturefileB_path, _MAX_PATH, fp); |
| 776 | 892 | DeleteLinefeed(picturefileB_path); |
| 777 | - } | |
| 778 | - else{ | |
| 779 | - //画像Aを取得 | |
| 780 | - fgets(str, 64, fp); | |
| 781 | - DeleteLinefeed(str); | |
| 782 | - if( strcmp(str, "!") == 0 ){ | |
| 783 | - strcpy(picturefileA_path, "!"); | |
| 784 | - } | |
| 785 | - else{ | |
| 786 | - //「data\\briefing\\ 〜 .bmp」を生成 | |
| 787 | - strcpy(picturefileA_path, "data\\briefing\\"); | |
| 788 | - strcat(picturefileA_path, str); | |
| 789 | - strcat(picturefileA_path, ".bmp"); | |
| 790 | - } | |
| 791 | 893 | |
| 792 | - //画像Bを取得 | |
| 793 | - fgets(str, 64, fp); | |
| 794 | - DeleteLinefeed(str); | |
| 795 | - if( strcmp(str, "!") == 0 ){ | |
| 796 | - strcpy(picturefileB_path, "!"); | |
| 894 | + //ブリーフィングテキストを取得 | |
| 895 | + strcpy(briefingtext, ""); | |
| 896 | + for(int i=0; i<17; i++ ){ | |
| 897 | + if( fgets(str, 50, fp) == NULL ){ break; } | |
| 898 | + strcat(briefingtext, str); | |
| 899 | + datas += 1; | |
| 797 | 900 | } |
| 798 | - else{ | |
| 799 | - //「data\\briefing\\ 〜 .bmp」を生成 | |
| 800 | - strcpy(picturefileB_path, "data\\briefing\\"); | |
| 801 | - strcat(picturefileB_path, str); | |
| 802 | - strcat(picturefileB_path, ".bmp"); | |
| 803 | - } | |
| 901 | + return 0; | |
| 902 | + } | |
| 804 | 903 | |
| 805 | - //背景空の番号 | |
| 806 | - fgets(str, 16, fp); | |
| 807 | - DeleteLinefeed(str); | |
| 808 | - skynumber = atoi(str); | |
| 904 | + return 1; | |
| 905 | +} | |
| 809 | 906 | |
| 810 | - //取得できない値の初期化 | |
| 811 | - strcpy(mission_name, ""); | |
| 812 | - strcpy(mission_fullname, ""); | |
| 813 | - strcpy(blockfile_path, ""); | |
| 814 | - strcpy(pointfile_path, ""); | |
| 815 | - strcpy(addsmallobject_path, ""); | |
| 816 | - collision = false; | |
| 817 | - screen = false; | |
| 818 | - } | |
| 907 | +//! @brief 追加小物情報ファイルを読みこむ | |
| 908 | +//! @param fname ファイル名 | |
| 909 | +//! @return 成功:0 失敗:1 | |
| 910 | +int MIFInterface::LoadAddSmallObjectFiledata(char *fname) | |
| 911 | +{ | |
| 912 | + FILE *fp; | |
| 913 | + char str[64]; | |
| 819 | 914 | |
| 820 | - //ブリーフィングテキストを取得 | |
| 821 | - strcpy(briefingtext, ""); | |
| 822 | - for(int i=0; i<17; i++ ){ | |
| 823 | - if( fgets(str, 50, fp) == NULL ){ break; } | |
| 824 | - strcat(briefingtext, str); | |
| 825 | - datas += 1; | |
| 826 | - } | |
| 915 | +#ifdef ENABLE_PATH_DELIMITER_SLASH | |
| 916 | + //パス区切り文字を変換 | |
| 917 | + fname = ChangePathDelimiter(fname); | |
| 918 | +#endif | |
| 827 | 919 | |
| 828 | - //ファイルハンドルを開放 | |
| 829 | - fclose( fp ); | |
| 830 | - | |
| 831 | 920 | #ifdef ENABLE_DEBUGLOG |
| 832 | 921 | //ログに出力 |
| 833 | - OutputLog.WriteLog(LOG_COMPLETE, "", ""); | |
| 922 | + OutputLog.WriteLog(LOG_LOAD, "(追加小物)", fname); | |
| 834 | 923 | #endif |
| 835 | 924 | |
| 925 | + //ファイルを開く | |
| 926 | + fp = fopen( fname, "r" ); | |
| 927 | + if( fp != NULL ){ | |
| 928 | + //モデルデータパス | |
| 929 | + fgets(addsmallobject_modelpath, _MAX_PATH, fp); | |
| 930 | + DeleteLinefeed(addsmallobject_modelpath); | |
| 836 | 931 | |
| 837 | - //追加小物情報を初期値へ | |
| 838 | - strcpy(addsmallobject_modelpath, ""); | |
| 839 | - strcpy(addsmallobject_texturepath, ""); | |
| 840 | - addsmallobject_decide = 0; | |
| 841 | - addsmallobject_hp = 0; | |
| 842 | - strcpy(addsmallobject_soundpath, ""); | |
| 843 | - addsmallobject_jump = 0; | |
| 932 | + //テクスチャパス | |
| 933 | + fgets(addsmallobject_texturepath, _MAX_PATH, fp); | |
| 934 | + DeleteLinefeed(addsmallobject_texturepath); | |
| 844 | 935 | |
| 845 | - //何かしらの追加小物情報ファイルが指定されていれば | |
| 846 | - if( (strcmp(addsmallobject_path, "") != 0)&&(strcmp(addsmallobject_path, "!") != 0) ){ | |
| 847 | - | |
| 848 | -#ifdef ENABLE_DEBUGLOG | |
| 849 | - //ログに出力 | |
| 850 | - OutputLog.WriteLog(LOG_LOAD, "(追加小物)", addsmallobject_path); | |
| 936 | + //当たり判定の大きさ | |
| 937 | + fgets(str, 16, fp); | |
| 938 | + DeleteLinefeed(str); | |
| 939 | + addsmallobject_decide = atoi(str); | |
| 940 | +#ifdef ENABLE_ADDOBJ_PARAM8BIT | |
| 941 | + addsmallobject_decide = addsmallobject_decide & 0x0000007F; | |
| 851 | 942 | #endif |
| 852 | 943 | |
| 853 | -#ifdef ENABLE_PATH_DELIMITER_SLASH | |
| 854 | - //パス区切り文字を変換 | |
| 855 | - strcpy(addsmallobject_path, ChangePathDelimiter(addsmallobject_path)); | |
| 944 | + //耐久力 | |
| 945 | + fgets(str, 16, fp); | |
| 946 | + DeleteLinefeed(str); | |
| 947 | + addsmallobject_hp = atoi(str); | |
| 948 | +#ifdef ENABLE_ADDOBJ_PARAM8BIT | |
| 949 | + addsmallobject_hp = addsmallobject_hp & 0x0000007F; | |
| 856 | 950 | #endif |
| 857 | 951 | |
| 858 | - //ファイルを開く | |
| 859 | - fp = fopen( addsmallobject_path, "r" ); | |
| 860 | - if( fp != NULL ){ | |
| 861 | - //モデルデータパス | |
| 862 | - fgets(addsmallobject_modelpath, _MAX_PATH, fp); | |
| 863 | - DeleteLinefeed(addsmallobject_modelpath); | |
| 952 | + //サウンドデータパス | |
| 953 | + fgets(addsmallobject_soundpath, _MAX_PATH, fp); | |
| 954 | + DeleteLinefeed(addsmallobject_soundpath); | |
| 864 | 955 | |
| 865 | - //テクスチャパス | |
| 866 | - fgets(addsmallobject_texturepath, _MAX_PATH, fp); | |
| 867 | - DeleteLinefeed(addsmallobject_texturepath); | |
| 956 | + //飛び具合 | |
| 957 | + fgets(str, 16, fp); | |
| 958 | + DeleteLinefeed(str); | |
| 959 | + addsmallobject_jump = atoi(str); | |
| 960 | +#ifdef ENABLE_ADDOBJ_PARAM8BIT | |
| 961 | + addsmallobject_jump = addsmallobject_jump & 0x000000FF; | |
| 962 | +#endif | |
| 868 | 963 | |
| 869 | - //当たり判定の大きさ | |
| 870 | - fgets(str, 16, fp); | |
| 871 | - DeleteLinefeed(str); | |
| 872 | - addsmallobject_decide = atoi(str); | |
| 964 | + //ファイルハンドルを開放 | |
| 965 | + fclose( fp ); | |
| 873 | 966 | |
| 874 | - //耐久力 | |
| 875 | - fgets(str, 16, fp); | |
| 876 | - DeleteLinefeed(str); | |
| 877 | - addsmallobject_hp = atoi(str); | |
| 878 | - | |
| 879 | - //サウンドデータパス | |
| 880 | - fgets(addsmallobject_soundpath, _MAX_PATH, fp); | |
| 881 | - DeleteLinefeed(addsmallobject_soundpath); | |
| 882 | - | |
| 883 | - //飛び具合 | |
| 884 | - fgets(str, 16, fp); | |
| 885 | - DeleteLinefeed(str); | |
| 886 | - addsmallobject_jump = atoi(str); | |
| 887 | - | |
| 888 | - //ファイルハンドルを開放 | |
| 889 | - fclose( fp ); | |
| 890 | - } | |
| 891 | - | |
| 892 | 967 | #ifdef ENABLE_DEBUGLOG |
| 893 | 968 | //ログに出力 |
| 894 | 969 | OutputLog.WriteLog(LOG_COMPLETE, "", ""); |
| 895 | 970 | #endif |
| 971 | + return 0; | |
| 896 | 972 | } |
| 973 | + | |
| 897 | 974 | #ifdef ENABLE_DEBUGLOG |
| 898 | - else{ | |
| 899 | - //ログに出力 | |
| 900 | - OutputLog.WriteLog(LOG_CHECK, "(追加小物)", "ファイルなし"); | |
| 901 | - } | |
| 975 | + //ログに出力 | |
| 976 | + OutputLog.WriteLog(LOG_ERROR, "", ""); | |
| 902 | 977 | #endif |
| 903 | - | |
| 904 | - return 0; | |
| 978 | + return 1; | |
| 905 | 979 | } |
| 906 | 980 | |
| 907 | 981 | //! @brief 読み込んだデータファイルの形式を取得 |
| @@ -127,6 +127,8 @@ | ||
| 127 | 127 | pointdata *data; //!< ブロックデータを表す構造体 |
| 128 | 128 | char *text[MAX_POINTMESSAGES]; //!< イベントメッセージ |
| 129 | 129 | |
| 130 | + int LoadMSGFiledata(char *fname); | |
| 131 | + | |
| 130 | 132 | public: |
| 131 | 133 | PointDataInterface(); |
| 132 | 134 | ~PointDataInterface(); |
| @@ -162,6 +164,10 @@ | ||
| 162 | 164 | char addsmallobject_soundpath[_MAX_PATH]; //!< 追加小物のサウンドデータパス |
| 163 | 165 | int addsmallobject_jump; //!< 追加小物の飛び具合 |
| 164 | 166 | |
| 167 | + int LoadDefaultTextFiledata(char *fname); | |
| 168 | + int LoadMissionInfoFiledata(char *fname); | |
| 169 | + int LoadAddSmallObjectFiledata(char *fname); | |
| 170 | + | |
| 165 | 171 | public: |
| 166 | 172 | MIFInterface(); |
| 167 | 173 | ~MIFInterface(); |
| @@ -66,8 +66,9 @@ | ||
| 66 | 66 | |
| 67 | 67 | #define ENABLE_BUG_HUMANWEAPON //!< 範囲外の人・武器種類番号を用いたバグを再現する(コメント化で無効) |
| 68 | 68 | #define ENABLE_BUG_TEAMID //!< チーム番号を負数に設定した際のバグを再現する(コメント化で無効) |
| 69 | -#define ENABLE_DEBUGCONSOLE //!< @brief デバック用コンソールの有効化(コメント化で機能無効) | |
| 70 | -#define ENABLE_DEBUGLOG //!< @brief デバック用ログ出力の有効化(コメント化で機能無効) | |
| 69 | +#define ENABLE_ADDOBJ_PARAM8BIT //!< 追加小物の設定値をchar型 8bitにする(コメント化で無効) | |
| 70 | +#define ENABLE_DEBUGCONSOLE //!< デバック用コンソールの有効化(コメント化で機能無効) | |
| 71 | +#define ENABLE_DEBUGLOG //!< デバック用ログ出力の有効化(コメント化で機能無効) | |
| 71 | 72 | //#define ENABLE_PATH_DELIMITER_SLASH //!< パス区切り文字を、'\'から‘/’へ変換する。 |
| 72 | 73 | |
| 73 | 74 | //windows.hを使用しないならば |