Guest User

pokemon_dp/src/field/calendar_enc.c

a guest
May 30th, 2020
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.37 KB | None | 0 0
  1. //============================================================================================
  2. /**
  3. * @file calendar_enc.c
  4. * @brief カレンダーがらみのエンカウント
  5. * @author Nozomu Saito
  6. * @date 2006.05.16
  7. */
  8. //============================================================================================
  9. #include "common.h"
  10. #include "system/pm_rtc.h"
  11.  
  12. #include "calendar_enc.h"
  13.  
  14. #define DAY_DATA(day,prob_no) ( (day<<8) | (prob_no&0xff) )
  15. #define GET_DAY(data) ( (data>>8)&0xff )
  16. #define GET_PROB_NO(data) ( data&0xff )
  17.  
  18. enum {
  19. JAN_DAT_MAX = 4,
  20. FEB_DAT_MAX = 4,
  21. MAR_DAT_MAX = 4,
  22. APR_DAT_MAX = 3,
  23. MAY_DAT_MAX = 6,
  24. JUN_DAT_MAX = 2,
  25. JUL_DAT_MAX = 4,
  26. AUG_DAT_MAX = 7,
  27. SEP_DAT_MAX = 4,
  28. OCT_DAT_MAX = 4,
  29. NOV_DAT_MAX = 5,
  30. DEC_DAT_MAX = 7,
  31. };
  32.  
  33. #define MONTH_NUM (12)
  34.  
  35.  
  36. typedef u16 CAL_ENC_DAY_DATA;
  37.  
  38. //1月
  39. static const CAL_ENC_DAY_DATA JanData[JAN_DAT_MAX] = {
  40. DAY_DATA( 1,3), //元旦 New Year's Day(北米・イギ・イタ・ス・フ・ド)
  41. DAY_DATA( 6,2), // 御公視の祝日(イタ)・主顕節(ス)・三王来朝(ド)
  42. DAY_DATA(11,2), //鏡開き
  43. DAY_DATA(12,4) //バレンタインデー Valentine's Day(北米)
  44. };
  45.  
  46. //2月
  47. static const CAL_ENC_DAY_DATA FebData[FEB_DAT_MAX] = {
  48. DAY_DATA( 3,2), //節分
  49. DAY_DATA(11,2), //建国記念日
  50. DAY_DATA(12,2), // リンカーンの誕生日(北米)
  51. DAY_DATA(14,0) //
  52. };
  53.  
  54. //3月
  55. static const CAL_ENC_DAY_DATA MarData[MAR_DAT_MAX] = {
  56. DAY_DATA( 3,2), //ひな祭り
  57. DAY_DATA(17,2), // セントパトリックの日(北米)
  58. DAY_DATA(21,3), //春分の日
  59. DAY_DATA(25,2) // 聖金曜日(ス)
  60. };
  61.  
  62. //4月
  63. static const CAL_ENC_DAY_DATA AprData[APR_DAT_MAX] = {
  64. DAY_DATA( 1,2), //入学式
  65. DAY_DATA(25,2), // イタリア解放記念日(イタ)
  66. DAY_DATA(29,2), //みどりの日
  67. };
  68.  
  69. //5月
  70. static const CAL_ENC_DAY_DATA MayData[MAY_DAT_MAX] = {
  71. DAY_DATA( 1,0), //MY メーデー(五月祭)(北米・イギ・イタ・ス・フ・ド)
  72. DAY_DATA( 3,2), //憲法記念日
  73. DAY_DATA( 4,0), //国民の休日
  74. DAY_DATA( 5,2), //こどもの日
  75. DAY_DATA( 8,2), // 第二次大戦終戦記念日(フ)
  76. DAY_DATA(29,2), // ホイットマンデー(イギ)
  77. };
  78.  
  79. //6月
  80. static const CAL_ENC_DAY_DATA JunData[JUN_DAT_MAX] = {
  81. DAY_DATA( 2,2), // 共和国建国記念日(イタ)
  82. DAY_DATA(21,2), //DUMMY
  83. };
  84.  
  85. //7月
  86. static const CAL_ENC_DAY_DATA JulData[JUL_DAT_MAX] = {
  87. DAY_DATA( 4,2), // 独立記念日(北米)
  88. DAY_DATA( 7,4), //七夕
  89. DAY_DATA(14,2), // 革命記念日(パリ祭)(フ)
  90. DAY_DATA(24,2) //DUMMY
  91. };
  92.  
  93. //8月
  94. static const CAL_ENC_DAY_DATA AugData[AUG_DAT_MAX] = {
  95. DAY_DATA( 6,3), //広島原爆
  96. DAY_DATA( 9,3), //長崎原爆
  97. DAY_DATA(13,1), //お盆
  98. DAY_DATA(14,1), //お盆
  99. DAY_DATA(15,2), //お盆・終戦記念日 聖母被昇天祭(イタ・ス)・聖母昇祭(フ)・マリア昇天祭(ド)
  100. DAY_DATA(16,1), //お盆
  101. DAY_DATA(28,2), // サマーバンクホリデー(イギ)
  102. };
  103.  
  104. //9月
  105. static const CAL_ENC_DAY_DATA SepData[SEP_DAT_MAX] = {
  106. DAY_DATA(11,3), // 911テロ
  107. DAY_DATA(15,2), //十五夜
  108. DAY_DATA(20,2), //
  109. DAY_DATA(23,3) //秋分の日
  110. };
  111.  
  112. //10月
  113. static const CAL_ENC_DAY_DATA OctData[OCT_DAT_MAX] = {
  114. DAY_DATA( 3,2), // ドイツ統一の日(ド)
  115. DAY_DATA(12,2), // イスパニアデー(ス)
  116. DAY_DATA(30,2), //
  117. DAY_DATA(31,0) // ハロウィーン(北米)・宗教改革記念日(ド)
  118. };
  119.  
  120. //11月
  121. static const CAL_ENC_DAY_DATA NovData[NOV_DAT_MAX] = {
  122. DAY_DATA( 1,2), // 諸聖人の日(イタ・スペ・ド)・諸聖人の祝日(フ)
  123. DAY_DATA( 3,1), //文化の日
  124. DAY_DATA(11,2), // 退役軍人の日(北米)・第一次大戦休戦記念日(フ)
  125. DAY_DATA(16,2), // 贖罪の日(ド)
  126. DAY_DATA(23,0) //勤労感謝の日
  127. };
  128.  
  129. //12月
  130. static const CAL_ENC_DAY_DATA DecData[DEC_DAT_MAX] = {
  131. DAY_DATA( 6,2), // 憲法の日(ス)
  132. DAY_DATA( 8,2), // 聖母無原罪の御宿りの日(イタ)・聖母受胎の日(ス)・聖母無垢受胎祭(ド)
  133. DAY_DATA(23,2), //天皇誕生日
  134. DAY_DATA(24,2), //クリスマスイブ クリスマス(北米・イギ・イタ・ス・フ・ド)
  135. DAY_DATA(25,1), //クリスマス クリスマス(北米・イギ・イタ・ス・フ・ド)
  136. DAY_DATA(26,0), // ボクシングデー(イギ)・聖ステーファノの日(イタ)
  137. DAY_DATA(31,1), //大晦日
  138. };
  139.  
  140. typedef struct CAL_ENC_MONTH_DATA_tag{
  141. int Num;
  142. const CAL_ENC_DAY_DATA *DayData;
  143. }CAL_ENC_MONTH_DATA;
  144.  
  145.  
  146. static const CAL_ENC_MONTH_DATA CalEncMonthData[MONTH_NUM] = {
  147. {JAN_DAT_MAX,JanData},{FEB_DAT_MAX,FebData},{MAR_DAT_MAX,MarData},
  148. {APR_DAT_MAX,AprData},{MAY_DAT_MAX,MayData},{JUN_DAT_MAX,JunData},
  149. {JUL_DAT_MAX,JulData},{AUG_DAT_MAX,AugData},{SEP_DAT_MAX,SepData},
  150. {OCT_DAT_MAX,OctData},{NOV_DAT_MAX,NovData},{DEC_DAT_MAX,DecData}
  151. };
  152.  
  153. static const int ProbTbl[] =
  154. {
  155. 0,-5,5,-10,10
  156. };
  157. /**
  158. static void DebugPrint(void);
  159. */
  160. //-----------------------------------------------------------------------------
  161. /**
  162. * 日にちによる確率計算
  163. *
  164. * @param inProb 現在エンカウント確率
  165. *
  166. * @return int エンカウント確率
  167. */
  168. //-----------------------------------------------------------------------------
  169. int CalEnc_GetProb(const int inProb, const BOOL inPenalty)
  170. {
  171. u8 i;
  172. int prob;
  173. RTCDate date;
  174. const CAL_ENC_MONTH_DATA * data;
  175.  
  176. //時間不正変更された場合は、処理しない
  177. if (inPenalty){
  178. return inProb;
  179. }
  180.  
  181. if (inProb == 0){
  182. return 0;
  183. }
  184.  
  185. // DebugPrint();
  186.  
  187. GF_RTC_GetDate(&date);
  188.  
  189. GF_ASSERT(date.month>0);
  190. GF_ASSERT(date.month<=12);
  191.  
  192. data = &(CalEncMonthData[date.month-1]);
  193.  
  194. for(i=0;i<data->Num;i++){
  195. if ( date.day == GET_DAY(data->DayData[i]) ){
  196. prob = inProb + ProbTbl[ GET_PROB_NO(data->DayData[i]) ];
  197. if (prob < 0){
  198. prob = 1;
  199. }
  200. return prob;
  201. }
  202. }
  203. return inProb;
  204. }
  205.  
  206. /**
  207. static void DebugPrint(void)
  208. {
  209. int i,j;
  210. const CAL_ENC_MONTH_DATA * data;
  211. for(j=0;j<MONTH_NUM;j++){
  212. data = &(CalEncMonthData[j]);
  213. OS_Printf("Month:%d DayNum:%d¥n",j+1,data->Num);
  214. for(i=0;i<data->Num;i++){
  215. OS_Printf(" Day:%d Prob:%d¥n",GET_DAY(data->DayData[i]),GET_PROB_NO(data->DayData[i]));
  216. }
  217. }
  218. }
  219. */
Advertisement
Add Comment
Please, Sign In to add comment