| 3022 | } |
| 3023 | |
| 3024 | void MAI_Snake(int i) |
| 3025 | { |
| 3026 | MonsterStruct *Monst; |
| 3027 | int fx, fy, mx, my, md; |
| 3028 | int pnum; |
| 3029 | int tmp; |
| 3030 | |
| 3031 | if ((DWORD)i >= MAXMONSTERS) { |
| 3032 | app_fatal("MAI_Snake: Invalid monster %d", i); |
| 3033 | } |
| 3034 | char pattern[6] = { 1, 1, 0, -1, -1, 0 }; |
| 3035 | Monst = monster + i; |
| 3036 | pnum = Monst->_menemy; |
| 3037 | if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) |
| 3038 | return; |
| 3039 | fx = Monst->_menemyx; |
| 3040 | fy = Monst->_menemyy; |
| 3041 | mx = Monst->_mx - fx; |
| 3042 | my = Monst->_my - fy; |
| 3043 | md = GetDirection(Monst->_mx, Monst->_my, Monst->_lastx, Monst->_lasty); |
| 3044 | Monst->_mdir = md; |
| 3045 | if (abs(mx) >= 2 || abs(my) >= 2) { |
| 3046 | if (abs(mx) < 3 && abs(my) < 3 && LineClearF1(PosOkMonst, i, Monst->_mx, Monst->_my, fx, fy) && Monst->_mVar1 != MM_CHARGE) { |
| 3047 | if (AddMissile(Monst->_mx, Monst->_my, fx, fy, md, MIS_RHINO, pnum, i, 0, 0) != -1) { |
| 3048 | PlayEffect(i, 0); |
| 3049 | dMonster[Monst->_mx][Monst->_my] = -(i + 1); |
| 3050 | Monst->_mmode = MM_CHARGE; |
| 3051 | } |
| 3052 | } else if (Monst->_mVar1 == MM_DELAY || random_(106, 100) >= 35 - 2 * Monst->_mint) { |
| 3053 | if (md + pattern[Monst->_mgoalvar1] < 0) { |
| 3054 | tmp = md + pattern[Monst->_mgoalvar1] + 8; |
| 3055 | } else { |
| 3056 | tmp = md + pattern[Monst->_mgoalvar1] - 8; |
| 3057 | if (md + pattern[Monst->_mgoalvar1] < 8) |
| 3058 | tmp = md + pattern[Monst->_mgoalvar1]; |
| 3059 | } |
| 3060 | Monst->_mgoalvar1++; |
| 3061 | if (Monst->_mgoalvar1 > 5) |
| 3062 | Monst->_mgoalvar1 = 0; |
| 3063 | if (tmp - Monst->_mgoalvar2 < 0) { |
| 3064 | md = tmp - Monst->_mgoalvar2 + 8; |
| 3065 | } else if (tmp - Monst->_mgoalvar2 >= 8) { |
| 3066 | md = tmp - Monst->_mgoalvar2 - 8; |
| 3067 | } else |
| 3068 | md = tmp - Monst->_mgoalvar2; |
| 3069 | if (md > 0) { |
| 3070 | if (md < 4) { |
| 3071 | if (Monst->_mgoalvar2 + 1 < 0) { |
| 3072 | md = Monst->_mgoalvar2 + 9; |
| 3073 | } else if (Monst->_mgoalvar2 + 1 >= 8) { |
| 3074 | md = Monst->_mgoalvar2 - 7; |
| 3075 | } else |
| 3076 | md = Monst->_mgoalvar2 + 1; |
| 3077 | Monst->_mgoalvar2 = md; |
| 3078 | } else if (md == 4) { |
| 3079 | Monst->_mgoalvar2 = tmp; |
| 3080 | } else { |
| 3081 | if (Monst->_mgoalvar2 - 1 < 0) { |
nothing calls this directly
no test coverage detected