animend_functions.cpp 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339
  1. //------------------------------------------------------------------------------------------------
  2. // 0.0.1
  3. //------------------------------------------------------------------------------------------------
  4. #include "3d_all.h"
  5. #include "Berusky3d_kofola_interface.h"
  6. #include "Berusky3d_light.h"
  7. #include "Object.h"
  8. #include "game_logic.h"
  9. #include "animationk.h"
  10. #include "animend_functions.h"
  11. typedef struct
  12. {
  13. SIM_ANIMATION animation[32];
  14. int last;
  15. } ANIMATION_QUEUE_SET_;
  16. extern AUDIO_DATA ad;
  17. extern int cameraflag;
  18. extern LEVELINFO Level;
  19. extern ANIMATION_QUEUE_SET_ *p_set_anim;
  20. extern int gl_Get_Column_Height(int x, int y, int z, LEVELINFO * p_Level);
  21. void anmend_Play_PadBedny(ITEMDESC * p_itm, LEVELINFO * p_Level)
  22. {
  23. float pos[3];
  24. int rot;
  25. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh,
  26. &pos[0], &pos[1], &pos[2], &rot);
  27. rot = rand() % 3;
  28. // ap_Play_Sound(0,0,0, pos, rot + 49, NULL, &ad);
  29. gl_Do_Prach(pos, p_Level);
  30. }
  31. void anmend_Play_Sound_PadBerusky(float *pos, int material)
  32. {
  33. switch (material) {
  34. case 9:
  35. // ap_Play_Sound(0,0,0, pos, 58, NULL, &ad);
  36. break;
  37. default:
  38. // ap_Play_Sound(0,0,0, pos, 57, NULL, &ad);
  39. break;
  40. }
  41. }
  42. void anmend_Play_PadBerusky(ITEMDESC * p_itm, LEVELINFO * p_Level)
  43. {
  44. float pos[3];
  45. int rot;
  46. int ipos[3];
  47. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh,
  48. &pos[0], &pos[1], &pos[2], &rot);
  49. memcpy((void *) ipos, (void *) p_itm->Pos, 3 * sizeof(int));
  50. ipos[2]--;
  51. gl_Logical2Real(ipos[0], ipos[1], ipos[2], &rot, p_Level);
  52. if (p_Level->Level[rot])
  53. anmend_Play_Sound_PadBerusky(pos,
  54. p_Level->Level[rot]->p_Object->Material);
  55. else {
  56. ipos[2]--;
  57. if (ipos[2] >= 0) {
  58. gl_Logical2Real(ipos[0], ipos[1], ipos[2], &rot, p_Level);
  59. if (p_Level->Level[rot])
  60. anmend_Play_Sound_PadBerusky(pos,
  61. p_Level->Level[rot]->p_Object->Material);
  62. }
  63. else
  64. anmend_Play_Sound_PadBerusky(pos, -1);
  65. }
  66. }
  67. void anmend_PadBedny(int param, int param2, void *p_param)
  68. {
  69. LEVELINFO *p_Level = (LEVELINFO *) param;
  70. ITEMDESC *p_itm = (ITEMDESC *) p_param;
  71. if (p_itm->p_Object->Class != 1) {
  72. anmend_Play_PadBedny(p_itm, p_Level);
  73. }
  74. else
  75. anmend_Play_PadBerusky(p_itm, p_Level);
  76. }
  77. void anmend_Add_Beetle_Animation(int param, int param2, LEVELINFO * p_param)
  78. {
  79. am_Add_Beetle_Animation(param, p_param, param2, 1);
  80. }
  81. void anmend_Add_Beetle_Animation(int param, int param2, void *p_param)
  82. {
  83. anmend_Add_Beetle_Animation(param, param2, (LEVELINFO *) p_param);
  84. }
  85. void anmend_kom_mesh_set_mesh(int param, int param2, LEVELINFO * p_param)
  86. {
  87. kom_mesh_set_mesh(param, param2, (int) p_param);
  88. lani_set(param, 0, 0, &Level.TrashFlag, 0, 0, 0);
  89. }
  90. int anmend_Find_Item(int Mesh, LEVELINFO * p_Level)
  91. {
  92. int i;
  93. /* kprintf(1,"anmend_Find_Item Act_Item = %d, -> %d\n",
  94. p_Level->Actual_Item,
  95. p_Level->Level[p_Level->Actual_Item]);*/
  96. for (i = 0; i < p_Level->Count_Of_Items; i++)
  97. if (p_Level->Item[i].Index_Of_Game_Mesh == Mesh)
  98. return i;
  99. return -1;
  100. }
  101. void anmend_ExplozeBedny(int param, int param2, void *p_param)
  102. {
  103. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  104. ITEMDESC *p_itm = p_Level->Level[param2];
  105. float pos[3], pos1[3];
  106. int ipos[3], vipos[3];
  107. int rot, i;
  108. int s;
  109. FLEK_K *pFlek;
  110. char cFlek[32];
  111. int mat[2];
  112. char bSvetlo = 1;
  113. /* kprintf(1,"anmend_ExplozeBedny Act_Item = %d, -> %d\n",
  114. p_Level->Actual_Item,
  115. p_Level->Level[p_Level->Actual_Item]);*/
  116. gl_i2FStr(rand() % 11, cFlek);
  117. if (p_Level->Actual_Item == -1)
  118. return;
  119. memcpy(ipos, p_Level->Level[p_Level->Actual_Item]->Pos, 3 * sizeof(int));
  120. gl_Change_Destonation(p_Level, ipos);
  121. gl_Logical2Real(ipos[0], ipos[1], ipos[2], &s, p_Level);
  122. if (!p_Level->Level[s]) {
  123. ipos[2] -= 2;
  124. gl_Logical2Real(ipos[0], ipos[1], ipos[2], &s, p_Level);
  125. if (!p_Level->Level[s])
  126. return;
  127. }
  128. kom_mesh_get_float(p_Level->Level[s]->Index_Of_Game_Mesh,
  129. &pos[0], &pos[1], &pos[2], &rot);
  130. memcpy((void *) vipos, (void *) p_Level->Level[s]->Pos, 3 * sizeof(int));
  131. if (p_Level->Square[s].bUnderWater)
  132. bSvetlo = 0;
  133. pFlek = &p_Level->Level[s]->Square.Flek;
  134. switch (p_Level->Level[s]->Rotation) {
  135. case 3:
  136. pFlek->nx[0] = 1;
  137. pFlek->nx[1] = 1;
  138. pFlek->nx[2] = 0;
  139. pFlek->nz[0] = 0;
  140. pFlek->nz[1] = 0;
  141. pFlek->nz[2] = 1;
  142. break;
  143. case 1:
  144. pFlek->nx[0] = -1;
  145. pFlek->nx[1] = 1;
  146. pFlek->nx[2] = 0;
  147. pFlek->nz[0] = 0;
  148. pFlek->nz[1] = 0;
  149. pFlek->nz[2] = -1;
  150. break;
  151. case 2:
  152. pFlek->nx[0] = 1;
  153. pFlek->nx[1] = 0;
  154. pFlek->nx[2] = 0;
  155. pFlek->nz[0] = 0;
  156. pFlek->nz[1] = 1;
  157. pFlek->nz[2] = 1;
  158. break;
  159. case 0:
  160. pFlek->nx[0] = -1;
  161. pFlek->nx[1] = 0;
  162. pFlek->nx[2] = 0;
  163. pFlek->nz[0] = 0;
  164. pFlek->nz[1] = 1;
  165. pFlek->nz[2] = -1;
  166. break;
  167. }
  168. pFlek->Flag = K_CHYBA;
  169. memcpy(pFlek->pos, pos, 3 * sizeof(float));
  170. pFlek->Material = kom_najdi_material(cFlek);
  171. if (pFlek->Material == -1)
  172. kprintf(1, "Nelze najit material %s", cFlek);
  173. p_Level->Level[s]->Square.iUroven = 0;
  174. pFlek->dx = 1;
  175. pFlek->dy = 1;
  176. pFlek->Rotation = 0;
  177. if (pFlek->pFlek) {
  178. kom_flek_zrus(pFlek->pFlek);
  179. pFlek->pFlek = 0;
  180. }
  181. kom_flek_pridej(pFlek->Flag, (BOD *) & pFlek->pos, (BOD *) & pFlek->nx,
  182. (BOD *) & pFlek->nz, pFlek->dx, pFlek->dy, pFlek->Rotation,
  183. p_Level->Level[s]->Square.iUroven, pFlek->Material);
  184. memcpy(ipos, p_itm->Pos, 3 * sizeof(int));
  185. kom_mesh_get_float(param, &pos1[0], &pos1[1], &pos1[2], &rot);
  186. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh,
  187. &pos[0], &pos[1], &pos[2], &rot);
  188. i = p_itm->Index_Of_Game_Mesh;
  189. mat[0] = gl_Get_Mesh_Material(param);
  190. mat[1] = gl_Get_Mesh_Material(p_itm->Index_Of_Game_Mesh);
  191. rot = anmend_Find_Item(param, p_Level);
  192. /* kprintf(1,"anmend_Find_Item RETURN Act_Item = %d, -> %d\n",
  193. p_Level->Actual_Item,
  194. p_Level->Level[p_Level->Actual_Item]);*/
  195. if (rot != -1)
  196. if (p_Level->Item[rot].Square.Flek.pFlek) {
  197. kom_flek_zrus(p_Level->Item[rot].Square.Flek.pFlek);
  198. p_Level->Item[rot].Square.Flek.pFlek = 0;
  199. }
  200. kom_zrus_prvek(param);
  201. if (p_itm->Square.Flek.pFlek)
  202. kom_flek_zrus(p_itm->Square.Flek.pFlek);
  203. kom_zrus_prvek(p_itm->Index_Of_Game_Mesh);
  204. gl_Do_Strepiny(pos1, p_Level, mat[0], 0);
  205. gl_Do_Strepiny(pos, p_Level, mat[1], bSvetlo);
  206. if (!bSvetlo)
  207. am_Do_Vybuch_Bublin(vipos, pos, p_Level);
  208. gl_Destroy_Item(param2, 1, p_Level);
  209. gl_Throw_offAnim(ipos, p_Level);
  210. p_Level->Column[0] = ipos[0];
  211. p_Level->Column[1] = ipos[1];
  212. p_Level->Column[2] =
  213. ipos[2] + (gl_Get_Column_Height(ipos[0], ipos[1], ipos[2] - 1,
  214. p_Level) - 2) * 2;
  215. if (p_Level->Column[2] < 0)
  216. p_Level->Column[2] = 0;
  217. p_Level->bColumn++;
  218. p_Level->bCheckDependencesNeeded = 1;
  219. p_Level->Flip++;
  220. gl_Next_Queue_Set(p_Level);
  221. rot = rand() % 5;
  222. // ap_Play_Sound(0,0,0, pos, rot + 14, NULL, &ad);
  223. }
  224. void anmend_ExplozeBednyZaSikminou(int param, int param2, void *p_param)
  225. {
  226. int lc;
  227. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  228. ANIMATION_QUEUE_SET_ *pSet = (ANIMATION_QUEUE_SET_ *) pStruct->pParam;
  229. /* kprintf(1,"anmend_ExplozeBednyZaSikminou Act_Item = %d, -> %d\n",
  230. pStruct->p_Level->Actual_Item,
  231. pStruct->p_Level->Level[pStruct->p_Level->Actual_Item]);*/
  232. // znic vybusnimu
  233. gl_Destroy_Item(param, 4, pStruct->p_Level);
  234. gl_Throw_offAnim(pStruct->viParam1, pStruct->p_Level);
  235. pStruct->p_Level->Column[0] = pStruct->viParam1[0];
  236. pStruct->p_Level->Column[1] = pStruct->viParam1[1];
  237. pStruct->p_Level->Column[2] =
  238. pStruct->viParam1[2] + (gl_Get_Column_Height(pStruct->viParam1[0],
  239. pStruct->viParam1[1], pStruct->viParam1[2] - 1,
  240. pStruct->p_Level) - 2) * 2;
  241. if (pStruct->p_Level->Column[2] < 0)
  242. lc = 0;
  243. else
  244. lc = pStruct->p_Level->Column[2];
  245. pStruct->p_Level->bColumn++;
  246. // znic bednu
  247. gl_Destroy_Item(param2, 3, pStruct->p_Level);
  248. gl_Throw_offAnim(pStruct->viParam2, pStruct->p_Level);
  249. pStruct->p_Level->Column[2] = lc;
  250. pStruct->p_Level->SecColumn[0] = pStruct->viParam2[0];
  251. pStruct->p_Level->SecColumn[1] = pStruct->viParam2[1];
  252. pStruct->p_Level->SecColumn[2] =
  253. pStruct->viParam2[2] + (gl_Get_Column_Height(pStruct->viParam2[0],
  254. pStruct->viParam2[1], pStruct->viParam2[2] - 1,
  255. pStruct->p_Level) - 2) * 2;
  256. pStruct->p_Level->bSecColumn++;
  257. pStruct->p_Level->bCheckDependencesNeeded = 1;
  258. free((void *) pStruct);
  259. }
  260. int anmend_Find_Lift_PSystem(int mesh, LEVELINFO * p_Level)
  261. {
  262. int i;
  263. for (i = 0; i < 10; i++)
  264. if (p_Level->LiftParticles[i].System != -1 &&
  265. p_Level->LiftParticles[i].hHnizdo[1] == mesh)
  266. return i;
  267. return -1;
  268. }
  269. void anmend_Lift(int param, int param2, void *p_param)
  270. {
  271. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  272. ITEMDESC *p_itm = p_Level->Level[param2];
  273. float pos[3];
  274. int i, s;
  275. if (p_Level->Actual_Item == -1)
  276. return;
  277. am_Add_Beetle_Animation(p_Level->Level[p_Level->Actual_Item]->
  278. Index_Of_Game_Mesh, p_Level,
  279. p_Level->Level[p_Level->Actual_Item]->Rotation, 1);
  280. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh,
  281. &pos[0], &pos[1], &pos[2], &i);
  282. if (param > 0)
  283. gl_Do_Lift_Particles(pos, p_itm->Index_Of_Game_Mesh, p_Level);
  284. // s = ap_Play_Sound(0,0,0, pos, p_itm->p_Object->Specific[0].Index, NULL, &ad);
  285. if (s >= 0) {
  286. /*
  287. for(i=0;i<(abs(param)-1);i++)
  288. adas_Queue_Sound(s, p_itm->p_Object->Specific[1].Index);
  289. adas_Queue_Sound(s, p_itm->p_Object->Specific[2].Index);
  290. */
  291. }
  292. if (param > 0) {
  293. s = anmend_Find_Lift_PSystem(p_itm->Index_Of_Game_Mesh, p_Level);
  294. if (s < 0)
  295. return;
  296. p_Level->LiftParticles[s].dwStop = abs(param) * 250;
  297. }
  298. }
  299. void animend_Lift_End(int param, int param2, void *p_param)
  300. {
  301. kom_rozvaz_mesh(param);
  302. }
  303. void anmend_Play_Sunuti(int param, int param2, void *p_param)
  304. {
  305. float pos[3];
  306. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  307. if (p_Level->Actual_Item == -1)
  308. return;
  309. kom_get_fyz_souradnice(p_Level->Level[p_Level->Actual_Item]->Pos[0],
  310. p_Level->Level[p_Level->Actual_Item]->Pos[1],
  311. p_Level->Level[p_Level->Actual_Item]->Pos[2], (BOD *) pos);
  312. switch (param) {
  313. case 10: //snih
  314. // ap_Play_Sound(0,0,0, pos, 123, NULL, &ad);
  315. break;
  316. case 9: //zelezo
  317. // ap_Play_Sound(0,0,0, pos, 124, NULL, &ad);
  318. break;
  319. case 8: //drevo
  320. // ap_Play_Sound(0,0,0, pos, 127, NULL, &ad);
  321. break;
  322. case 5: //kamen
  323. // ap_Play_Sound(0,0,0, pos, 125, NULL, &ad);
  324. break;
  325. default:
  326. // ap_Play_Sound(0,0,0, pos, 125, NULL, &ad);
  327. break;
  328. }
  329. }
  330. void PlayStepsA(float *pos, char bQueue, int Num, int iWave, char bStoneSound)
  331. {
  332. int s, i;
  333. // s = ap_Play_Sound(0,0,0, pos, iWave, NULL, &ad);
  334. /*
  335. if(bStoneSound && s != -1)
  336. adas_Queue_Sound(s, 164);
  337. if(bQueue && s != -1)
  338. for(i=0;i<Num;i++)
  339. adas_Queue_Sound(s, iWave);
  340. */
  341. }
  342. int GetStep(LEVELINFO * p_Level)
  343. {
  344. switch (p_Level->iFloorMaterial) {
  345. case 12: //pisek
  346. am_Zero_Step(p_Level);
  347. return 161;
  348. break;
  349. case 11: //trava
  350. am_Zero_Step(p_Level);
  351. return 149;
  352. break;
  353. case 10: //snih
  354. p_Level->bSetStep = 1;
  355. return 120 + (rand() % 2);
  356. break;
  357. case 9: //zelezo
  358. am_Zero_Step(p_Level);
  359. return 36;
  360. break;
  361. case 8: //drevo
  362. am_Zero_Step(p_Level);
  363. return 35;
  364. break;
  365. case 5: //kamen
  366. am_Zero_Step(p_Level);
  367. return 119;
  368. default:
  369. return 35;
  370. break;
  371. }
  372. }
  373. void PlaySteps(LEVELINFO * p_Level, OBJECTDESC * pObj, float *pos,
  374. char bQueue, int Num, char bSunuti, char bESunuti)
  375. {
  376. // int s,i;
  377. if (pObj->Class == 12) {
  378. int rnd = rand() % 4;
  379. // ap_Play_Sound(0,0,0, pos, rnd+77, NULL, &ad);
  380. return;
  381. }
  382. switch (pObj->Material) {
  383. case 10: //snih
  384. //am_Set_Step(p_Level);
  385. p_Level->bSetStep = 1;
  386. PlayStepsA(pos, bQueue, Num, 120 + (rand() % 2), p_Level->bStoneSound);
  387. if (bESunuti == 1)
  388. PlayStepsA(pos, bQueue, 0, 126, p_Level->bStoneSound);
  389. else if (bESunuti == 2)
  390. PlayStepsA(pos, bQueue, 0, 122, p_Level->bStoneSound);
  391. else if (bSunuti)
  392. PlayStepsA(pos, bQueue, Num, 123, p_Level->bStoneSound);
  393. break;
  394. case 9: //zelezo
  395. am_Zero_Step(p_Level);
  396. PlayStepsA(pos, bQueue, Num, 36, p_Level->bStoneSound);
  397. if (bESunuti == 1)
  398. PlayStepsA(pos, bQueue, 0, 126, p_Level->bStoneSound);
  399. else if (bESunuti == 2)
  400. PlayStepsA(pos, bQueue, 0, 122, p_Level->bStoneSound);
  401. else if (bSunuti)
  402. PlayStepsA(pos, bQueue, Num, 124, p_Level->bStoneSound);
  403. break;
  404. case 8: //drevo
  405. am_Zero_Step(p_Level);
  406. PlayStepsA(pos, bQueue, Num, 35, p_Level->bStoneSound);
  407. if (bESunuti == 1)
  408. PlayStepsA(pos, bQueue, 0, 126, p_Level->bStoneSound);
  409. else if (bESunuti == 2)
  410. PlayStepsA(pos, bQueue, 0, 122, p_Level->bStoneSound);
  411. else if (bSunuti)
  412. PlayStepsA(pos, bQueue, Num, 127, p_Level->bStoneSound);
  413. break;
  414. case 5: //kamen
  415. am_Zero_Step(p_Level);
  416. PlayStepsA(pos, bQueue, Num, 119, p_Level->bStoneSound);
  417. if (bESunuti == 1)
  418. PlayStepsA(pos, bQueue, 0, 126, p_Level->bStoneSound);
  419. else if (bESunuti == 2)
  420. PlayStepsA(pos, bQueue, 0, 122, p_Level->bStoneSound);
  421. else if (bSunuti)
  422. PlayStepsA(pos, bQueue, Num, 125, p_Level->bStoneSound);
  423. break;
  424. default:
  425. am_Zero_Step(p_Level);
  426. PlayStepsA(pos, bQueue, Num, 35, p_Level->bStoneSound);
  427. if (bESunuti == 1)
  428. PlayStepsA(pos, bQueue, 0, 126, p_Level->bStoneSound);
  429. else if (bESunuti == 2)
  430. PlayStepsA(pos, bQueue, 0, 122, p_Level->bStoneSound);
  431. else if (bSunuti)
  432. PlayStepsA(pos, bQueue, Num, 125, p_Level->bStoneSound);
  433. break;
  434. }
  435. p_Level->bStoneSound = 0;
  436. }
  437. int anmend_Is_On_Water(long item, LEVELINFO * p_Level)
  438. {
  439. int pos[3];
  440. int r;
  441. if (p_Level->Level[item]) {
  442. memcpy((void *) pos, (void *) p_Level->Level[item]->Pos, 3 * sizeof(int));
  443. pos[2]--;
  444. gl_Logical2Real(pos[0], pos[1], pos[2], &r, p_Level);
  445. if (p_Level->Level[r])
  446. if (p_Level->Level[r]->p_Object->Class == 12)
  447. return 1;
  448. }
  449. return 0;
  450. }
  451. void anmend_Steps(int param, int param2, void *p_param)
  452. {
  453. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  454. LEVELINFO *p_Level = pStruct->p_Level;
  455. int p[3], r, s, i, kanim;
  456. float pos[3], fr, fi, vzdal;
  457. char bSunuti, bESunuti;
  458. char bOnWater = 0;
  459. p[0] = param;
  460. p[1] = param2;
  461. p[2] = pStruct->iParam;
  462. bSunuti = pStruct->viParam1[2];
  463. bESunuti = pStruct->viParam2[0];
  464. if (anmend_Is_On_Water(pStruct->viParam1[0], p_Level)) {
  465. kom_mesh_get_float(p_Level->Level[pStruct->viParam1[0]]->
  466. Index_Of_Game_Mesh, &pos[0], &pos[1], &pos[2], &r);
  467. if (p_Level->Level[pStruct->viParam1[0]]->p_Object->Class != 1)
  468. am_Kola_na_VodeB(pos, 0,
  469. p_Level->Level[pStruct->viParam1[0]]->Index_Of_Game_Mesh, 0, p_Level);
  470. else
  471. am_Kola_na_VodeB(pos, 1,
  472. p_Level->Level[pStruct->viParam1[0]]->Index_Of_Game_Mesh, 0, p_Level);
  473. bOnWater = 1;
  474. }
  475. /* if(p_set_anim->last && Level.bPosouvatKameru &&
  476. !(p_Level->bB1ExtraCameraRot && p_Level->bPohled_Berusky))
  477. rani_privaz_kameru(p_set_anim->animation[p_set_anim->last-1].p_run);*/
  478. kam_pol_get((BOD *) pos, &fr, &fi, &vzdal);
  479. if (p_Level->bB1ExtraCameraRot && p_Level->bPohled_Berusky) {
  480. kom_get_fyz_souradnice(p_Level->Level[pStruct->viParam1[0]]->Pos[0],
  481. p_Level->Level[pStruct->viParam1[0]]->Pos[2],
  482. p_Level->Level[pStruct->viParam1[0]]->Pos[1], (BOD *) pos);
  483. switch (p_Level->Level[pStruct->viParam1[0]]->Rotation) {
  484. case 0:
  485. kam_pol_anim((BOD *) pos, 0, fi, vzdal, &p_Level->TrashFlag,
  486. GK_REMOVE, 11, 0);
  487. break;
  488. case 1:
  489. kam_pol_anim((BOD *) pos, -90, fi, vzdal, &p_Level->TrashFlag,
  490. GK_REMOVE, 11, 0);
  491. break;
  492. case 2:
  493. kam_pol_anim((BOD *) pos, 180, fi, vzdal, &p_Level->TrashFlag,
  494. GK_REMOVE, 11, 0);
  495. break;
  496. case 3:
  497. kam_pol_anim((BOD *) pos, 90, fi, vzdal, &p_Level->TrashFlag,
  498. GK_REMOVE, 11, 0);
  499. break;
  500. }
  501. }
  502. switch (pStruct->bRCamera) {
  503. case 1:
  504. fr -= 90;
  505. kam_pol_anim((BOD *) pos, fr, fi, vzdal, &p_Level->TrashFlag, GK_REMOVE,
  506. 11, 0);
  507. break;
  508. case 2:
  509. fr += 90;
  510. kam_pol_anim((BOD *) pos, fr, fi, vzdal, &p_Level->TrashFlag, GK_REMOVE,
  511. 11, 0);
  512. break;
  513. case 3:
  514. //kam_pol_anim((BOD *)pos, fr, fi, vzdal, &p_Level->TrashFlag, 0, 22, 0);
  515. kanim = kam_pol_vyrob_animaci(22, 0, 3, 0, 1);
  516. if (kanim != K_CHYBA) {
  517. kam_pol_vloz_klic_rotace(kanim, 0, fr, fi, 0);
  518. kam_pol_vloz_klic_rotace(kanim, 1, fr + 90, fi, 10);
  519. kam_pol_vloz_klic_rotace(kanim, 2, fr + 180, fi, 21);
  520. kam_start(kanim, &p_Level->TrashFlag, GK_REMOVE, 0, 0);
  521. }
  522. fr += 180;
  523. break;
  524. }
  525. kom_get_fyz_souradnice(p[0], p[2], p[1], (BOD *) pos);
  526. p[2]--;
  527. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  528. if (p_Level->Level[r])
  529. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos, pStruct->bParam,
  530. pStruct->bParam - pStruct->viParam1[1], bSunuti, bESunuti);
  531. else {
  532. p[2]--;
  533. if (p[2] >= 0) {
  534. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  535. if (p_Level->Level[r])
  536. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos, pStruct->bParam,
  537. pStruct->bParam - pStruct->viParam1[1], bSunuti, bESunuti);
  538. else {
  539. p[2]--;
  540. if (p[2] >= 0) {
  541. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  542. if (p_Level->Level[r])
  543. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos,
  544. pStruct->bParam, pStruct->bParam - pStruct->viParam1[1],
  545. bSunuti, bESunuti);
  546. }
  547. }
  548. }
  549. else {
  550. int idx = GetStep(p_Level);
  551. // s = ap_Play_Sound(0,0,0, pos, idx, NULL, &ad);
  552. /*
  553. if(p_Level->bStoneSound && s != -1)
  554. adas_Queue_Sound(s, 164);
  555. if(pStruct->bParam && s != -1)
  556. for(i=0;i<(pStruct->bParam - pStruct->viParam1[1]);i++)
  557. adas_Queue_Sound(s, idx);
  558. */
  559. }
  560. }
  561. p_Level->bStoneSound = 0;
  562. if (bOnWater || p_Level->Square[pStruct->viParam1[0]].bUnderWater)
  563. p_Level->bSetStep = 0;
  564. free((void *) pStruct);
  565. }
  566. void anmend_Steps2(int param, int param2, void *p_param)
  567. {
  568. // ANIMATION_QUEUE_SET_ *p_aset;
  569. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  570. LEVELINFO *p_Level = pStruct->p_Level;
  571. int p[3], r, s;
  572. float pos[3];
  573. /* kprintf(1,"anmend_Steps2 Act_Item = %d, -> %d\n",
  574. p_Level->Actual_Item,
  575. p_Level->Level[p_Level->Actual_Item]);*/
  576. p[0] = param;
  577. p[1] = param2;
  578. p[2] = pStruct->iParam;
  579. /* p_aset = gl_Get_Prev_Queue_Set(p_Level);
  580. if(p_aset->last && Level.bPosouvatKameru)
  581. rani_privaz_kameru(p_aset->animation[p_aset->last-1].p_run); */
  582. /* if(p_set_anim->last && Level.bPosouvatKameru)
  583. rani_privaz_kameru(p_set_anim->animation[p_set_anim->last-1].p_run);*/
  584. kom_get_fyz_souradnice(p[0], p[2], p[1], (BOD *) pos);
  585. p[2]--;
  586. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  587. if (p_Level->Level[r])
  588. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos, pStruct->bParam, 1,
  589. 0, 0);
  590. else {
  591. p[2]--;
  592. if (p[2] >= 0) {
  593. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  594. if (p_Level->Level[r])
  595. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos, pStruct->bParam,
  596. 1, 0, 0);
  597. }
  598. else {
  599. // s = ap_Play_Sound(0,0,0, pos, 35, NULL, &ad);
  600. /*
  601. if(pStruct->bParam && s != -1)
  602. adas_Queue_Sound(s, 35);
  603. */
  604. }
  605. }
  606. free((void *) pStruct);
  607. }
  608. void anmend_StepsSikmina(int param, int param2, void *p_param)
  609. {
  610. // ANIMATION_QUEUE_SET_ *p_aset;
  611. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  612. LEVELINFO *p_Level = pStruct->p_Level;
  613. int p[3], r, s, i;
  614. float pos[3];
  615. /* kprintf(1,"anmend_StepsSikmina Act_Item = %d, -> %d\n",
  616. p_Level->Actual_Item,
  617. p_Level->Level[p_Level->Actual_Item]);*/
  618. p[0] = param;
  619. p[1] = param2;
  620. p[2] = pStruct->iParam;
  621. if (anmend_Is_On_Water(pStruct->viParam1[0], p_Level)) {
  622. kom_mesh_get_float(p_Level->Level[pStruct->viParam1[0]]->
  623. Index_Of_Game_Mesh, &pos[0], &pos[1], &pos[2], &r);
  624. if (p_Level->Level[pStruct->viParam1[0]]->p_Object->Class != 1)
  625. am_Kola_na_VodeB(pos, 0,
  626. p_Level->Level[pStruct->viParam1[0]]->Index_Of_Game_Mesh, 0, p_Level);
  627. else
  628. am_Kola_na_VodeB(pos, 1,
  629. p_Level->Level[pStruct->viParam1[0]]->Index_Of_Game_Mesh, 0, p_Level);
  630. }
  631. kom_get_fyz_souradnice(p[0], p[2], p[1], (BOD *) pos);
  632. p[2]--;
  633. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  634. if (p_Level->Level[r])
  635. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos, pStruct->bParam,
  636. pStruct->bParam, 0, 0);
  637. else {
  638. p[2]--;
  639. if (p[2] >= 0) {
  640. gl_Logical2Real(p[0], p[1], p[2], &r, p_Level);
  641. if (p_Level->Level[r])
  642. PlaySteps(p_Level, p_Level->Level[r]->p_Object, pos, pStruct->bParam,
  643. pStruct->bParam, 0, 0);
  644. }
  645. else {
  646. // s = ap_Play_Sound(0,0,0, pos, 35, NULL, &ad);
  647. /*
  648. if(p_Level->bStoneSound && s != -1)
  649. adas_Queue_Sound(s, 164);
  650. if(pStruct->bParam && s != -1)
  651. for(i=0;i<(pStruct->bParam);i++)
  652. adas_Queue_Sound(s, 35);
  653. */
  654. }
  655. }
  656. if (p_Level->Actual_Item != -1)
  657. kom_flek_setflag(p_Level->Level[p_Level->Actual_Item]->Square.Flek.pFlek,
  658. 1);
  659. p_Level->bStoneSound = 0;
  660. free((void *) pStruct);
  661. }
  662. void anmend_Water(int param, int param2, void *p_param)
  663. {
  664. float fvpos[3];
  665. int i;
  666. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  667. LEVELINFO *p_Level = pStruct->p_Level;
  668. ITEMDESC *p_itm = p_Level->Level[param2];
  669. int rnd = rand() % 3;
  670. int rndp = rand() % 2;
  671. float pos[3] = { (float) p_itm->Pos[0] * 2,
  672. (float) p_itm->Pos[1] * 2,
  673. (float) p_itm->Pos[2] * 2
  674. };
  675. kom_get_fyz_souradnice(pStruct->viParam1[0], pStruct->viParam1[2],
  676. pStruct->viParam1[1], (BOD *) fvpos);
  677. am_Kola_na_Vode(fvpos, pStruct->iParam, pStruct->bParam,
  678. pStruct->viParam2[0], p_Level);
  679. am_Do_Vodni_Cakanec1(fvpos, pStruct->bParam, pStruct->viParam2[0], p_Level);
  680. switch (param) {
  681. case 0:
  682. // ap_Play_Sound(0,0,0, pos, rnd+37, NULL, &ad);
  683. // ap_Play_Sound(0,0,0, pos, rnd+40+rndp, NULL, &ad);
  684. break;
  685. case 1:
  686. // ap_Play_Sound(0,0,0, pos, rnd+37, NULL, &ad);
  687. break;
  688. case 2:
  689. // ap_Play_Sound(0,0,0, pos, rnd+40+rndp, NULL, &ad);
  690. break;
  691. }
  692. if (pStruct->viParam2[1])
  693. for (i = 0; i < 10; i++)
  694. if (p_Level->LiftVParticles[i].hHnizdo[1] == pStruct->viParam2[1]) {
  695. par_zrus(p_Level->LiftVParticles[i].System);
  696. p_Level->LiftVParticles[i].System = -1;
  697. }
  698. if (pStruct->viParam2[2])
  699. free((void *) pStruct);
  700. }
  701. void anmend_Cakanec(int param, int param2, void *p_param)
  702. {
  703. float fvpos[3];
  704. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  705. LEVELINFO *p_Level = pStruct->p_Level;
  706. ITEMDESC *p_itm = p_Level->Level[param2];
  707. int rnd = rand() % 3;
  708. float pos[3] = { (float) p_itm->Pos[0] * 2,
  709. (float) p_itm->Pos[1] * 2,
  710. (float) p_itm->Pos[2] * 2
  711. };
  712. kom_get_fyz_souradnice(pStruct->viParam1[0], pStruct->viParam1[2],
  713. pStruct->viParam1[1], (BOD *) fvpos);
  714. am_Do_Vodni_Cakanec2(fvpos, pStruct->bParam, pStruct->viParam2[0], p_Level);
  715. free((void *) pStruct);
  716. }
  717. void anmend_WaterLift(int param, int param2, void *p_param)
  718. {
  719. int i;
  720. float fvpos[3];
  721. int rnd = rand() % 3;
  722. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  723. LEVELINFO *p_Level = pStruct->p_Level;
  724. kom_get_fyz_souradnice(pStruct->viParam1[0], pStruct->viParam1[2],
  725. pStruct->viParam1[1], (BOD *) fvpos);
  726. i =
  727. am_Kola_na_Vode(fvpos, pStruct->iParam, pStruct->bParam,
  728. pStruct->viParam2[0], p_Level);
  729. am_Do_Vodni_Cakanec1(fvpos, pStruct->bParam, pStruct->viParam2[0], p_Level);
  730. //kom_mesh_get_float(param, &fvpos[0], &fvpos[1], &fvpos[2], &r);
  731. am_Do_Lift_VParticles(fvpos, param, p_Level);
  732. /* if(i != -1)
  733. p_Level->VodniKola[i].hHnizdo[1] = 1;*/
  734. // ap_Play_Sound(0,0,0, fvpos, rnd+74, NULL, &ad);
  735. free((void *) pStruct);
  736. }
  737. void anmend_Item_Fall(int param, int param2, void *p_param)
  738. {
  739. int rot;
  740. float pos[3];
  741. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  742. ITEMDESC *p_itm = p_Level->Level[param2];
  743. /* kprintf(1,"anmend_Item_Fall Act_Item = %d, -> %d\n",
  744. p_Level->Actual_Item,
  745. p_Level->Level[p_Level->Actual_Item]);*/
  746. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh, &pos[0], &pos[1], &pos[2],
  747. &rot);
  748. rot = rand() % 2;
  749. switch (p_itm->p_Object->SubClass) {
  750. case 0:
  751. // ap_Play_Sound(0,0,0, pos, 48, NULL, &ad);
  752. break;
  753. case 1:
  754. // ap_Play_Sound(0,0,0, pos, 44, NULL, &ad);
  755. break;
  756. case 4:
  757. // ap_Play_Sound(0,0,0, pos, 45, NULL, &ad);
  758. break;
  759. case 7:
  760. // ap_Play_Sound(0,0,0, pos, 47, NULL, &ad);
  761. break;
  762. case 8:
  763. // ap_Play_Sound(0,0,0, pos, 46, NULL, &ad);
  764. break;
  765. case 9:
  766. case 10:
  767. case 11:
  768. case 12:
  769. case 13:
  770. case 14:
  771. case 15:
  772. // ap_Play_Sound(0,0,0, pos, 100+rot, NULL, &ad);
  773. break;
  774. }
  775. gl_Pripoj_Flek_k_Predmenu(p_itm, p_Level);
  776. }
  777. void anmend_Item_FallStartAnim(int param, int param2, void *p_param)
  778. {
  779. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  780. /* kprintf(1,"anmend_Item_FallStartAnim Act_Item = %d, -> %d\n",
  781. p_Level->Actual_Item,
  782. p_Level->Level[p_Level->Actual_Item]);*/
  783. p_Level->Level[param2]->a_flag = -1;
  784. am_Add_Animate_Item(param2, p_Level);
  785. p_Level->bCheck_Result = gl_Check_Logic_Dependences(p_Level);
  786. p_Level->bCheck = 1;
  787. if (p_Level->bCheck_Result) {
  788. p_Level->Flip++;
  789. gl_Next_Queue_Set(p_Level);
  790. if (p_Level->Flip == 1)
  791. gl_Go_Animations();
  792. }
  793. }
  794. void anmend_Send_Event(int param, int param2, void *p_param)
  795. {
  796. // kprintf(1,"anmend_Send_Event \n");
  797. kom_amat_event(param);
  798. }
  799. void anmend_Set_Flek_Flag(int param, int param2, void *p_param)
  800. {
  801. // kprintf(1,"anmend_Set_Flek_Flag \n");
  802. kom_flek_setflag(param, param2);
  803. }
  804. void anmend_Set_Flek_Flag_Anim(int param, int param2, void *p_param)
  805. {
  806. LEVELINFO *p_Level = (LEVELINFO *) & Level;
  807. // kprintf(1,"anmend_Set_Flek_Flag \n");
  808. kom_flek_setflag(param, param2);
  809. if (p_Level->Actual_Item == -1)
  810. return;
  811. am_Add_Beetle_Animation(p_Level->Level[p_Level->Actual_Item]->
  812. Index_Of_Game_Mesh, &Level,
  813. p_Level->Level[p_Level->Actual_Item]->Rotation, 0);
  814. }
  815. void anmend_Take_Item(int param, int param2, void *p_param)
  816. {
  817. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  818. float pos[3];
  819. int rot;
  820. /* kprintf(1,"anmend_Take_Item Act_Item = %d, -> %d\n",
  821. pStruct->p_Level->Actual_Item,
  822. pStruct->p_Level->Level[pStruct->p_Level->Actual_Item]);*/
  823. kom_mesh_get_float(param, &pos[0], &pos[1], &pos[2], &rot);
  824. /*
  825. if(param2 == 3 || param2 == 5)
  826. ap_Play_Sound(0,0,0, pos, 53, NULL, &ad);
  827. else
  828. ap_Play_Sound(0,0,0, pos, 52, NULL, &ad);
  829. */
  830. if (pStruct->p_Level->Item[pStruct->iParam].Square.Flek.pFlek) {
  831. kom_flek_zrus(pStruct->p_Level->Item[pStruct->iParam].Square.Flek.pFlek);
  832. pStruct->p_Level->Item[pStruct->iParam].Square.Flek.pFlek = 0;
  833. }
  834. if (pStruct->p_Level->Item[pStruct->iParam].hSvetlo != -1) {
  835. sdl_anim_zrus(pStruct->p_Level->Item[pStruct->iParam].hSvetlo);
  836. sdl_svetlo_zrus(pStruct->p_Level->Item[pStruct->iParam].hSvetlo);
  837. pStruct->p_Level->Item[pStruct->iParam].hSvetlo = -1;
  838. }
  839. am_Remove_Animate_itemB(pStruct->iParam, pStruct->p_Level);
  840. kom_zrus_prvek(param);
  841. free((void *) pStruct);
  842. }
  843. void anmend_Kamen(int param, int param2, void *p_param)
  844. {
  845. float fpos[3];
  846. int pos[3];
  847. int rot;
  848. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  849. ITEMDESC *p_itm = p_Level->Level[param];
  850. int mat = gl_Get_Mesh_Material(p_itm->Index_Of_Game_Mesh);
  851. /* kprintf(1,"anmend_Kamen Act_Item = %d, -> %d\n",
  852. p_Level->Actual_Item,
  853. p_Level->Level[p_Level->Actual_Item]);*/
  854. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh, &fpos[0],
  855. &fpos[1], &fpos[2], &rot);
  856. memcpy((void *) pos, (void *) p_itm->Pos, 3 * sizeof(int));
  857. rot = rand() % 3;
  858. if (p_itm->p_Object->Specific[rot].Index == -1)
  859. rot = 0;
  860. //if(p_itm->p_Object->Specific[rot].Index != -1)
  861. //ap_Play_Sound(0,0,0, fpos, p_itm->p_Object->Specific[rot].Index, NULL, &ad);
  862. gl_Destroy_Item(param, 0, p_Level);
  863. gl_Do_Kameni(fpos, p_Level, mat);
  864. mat = kom_najdi_material("cvytah1");
  865. gl_Do_Krompac(fpos, p_Level, mat);
  866. gl_Throw_off(pos, p_Level);
  867. }
  868. void anmend_ZrusCastice(int param, int param2, void *p_param)
  869. {
  870. SYSTEMZHAVYCHCASTIC *pSystem = (SYSTEMZHAVYCHCASTIC *) param2;
  871. // kprintf(1,"anmend_ZrusCastice Act_Item = %d, -> %d\n");
  872. free(p_param);
  873. if (param != -1)
  874. sdl_svetlo_zrus(param);
  875. if (pSystem)
  876. am_Release_Zhave_castice(pSystem);
  877. }
  878. void anmend_ZrusCastice2(int param, int param2, void *p_param)
  879. {
  880. SYSTEMZHAVYCHCASTIC *pSystem = (SYSTEMZHAVYCHCASTIC *) param2;
  881. SYSTEMKOUROVYCHCASTIC *pSystemK = (SYSTEMKOUROVYCHCASTIC *) param;
  882. free(p_param);
  883. if (pSystem)
  884. am_Release_Zhave_castice(pSystem);
  885. if (pSystemK)
  886. am_Release_Kourove_Castice(pSystemK);
  887. }
  888. void anmend_ZrusCastice3(int param, int param2, void *p_param)
  889. {
  890. free(p_param);
  891. }
  892. void anmend_Are_Animations_Done(int param, int param2, void *p_param)
  893. {
  894. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  895. /* kprintf(1,"anmend_Are_Animations_Done Act_Item = %d, -> %d\n",
  896. p_Level->Actual_Item,
  897. p_Level->Level[p_Level->Actual_Item]);*/
  898. gl_Are_Animations_Done(p_Level);
  899. }
  900. void anmend_Tlacitko(int param, int param2, void *p_param)
  901. {
  902. float pos[3];
  903. int rot;
  904. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  905. ITEMDESC *p_itm = (ITEMDESC *) param;
  906. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh, &pos[0],
  907. &pos[1], &pos[2], &rot);
  908. rot = rand() % 3;
  909. if (p_itm->p_Object->Specific[rot].Index == -1)
  910. rot = 0;
  911. if (p_itm->p_Object->Specific[rot].Index == -1)
  912. return;
  913. // ap_Play_Sound(0,0,0, pos, p_itm->p_Object->Specific[rot].Index, NULL, &ad);
  914. }
  915. void anmend_Teleport(int param, int param2, void *p_param)
  916. {
  917. float pos[3], target[3], r, fi, dist;
  918. int rot;
  919. int newr;
  920. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  921. LEVELINFO *p_Level = pStruct->p_Level;
  922. ITEMDESC *p_itm = (ITEMDESC *) param;
  923. ITEMDESC *p_itmNEW;
  924. ITEMDESC *p_tel = (ITEMDESC *) p_Level->Level[param2];
  925. if (p_Level->Actual_Item == -1)
  926. return;
  927. if (p_itm->p_Object->Class == 1)
  928. am_Remove_Beetle_Animation(p_itm->Index_Of_Game_Mesh, p_Level);
  929. pStruct->viParam1[0] = p_itm->Pos[0];
  930. pStruct->viParam1[1] = p_itm->Pos[1];
  931. pStruct->viParam1[2] = p_itm->Pos[2];
  932. gl_Logical2Real(pStruct->viParam2[0], pStruct->viParam2[1],
  933. pStruct->viParam2[2], &rot, p_Level);
  934. p_Level->Level[rot] = p_itm;
  935. p_itmNEW = p_Level->Level[rot];
  936. newr = rot;
  937. gl_Logical2Real(pStruct->viParam1[0], pStruct->viParam1[1],
  938. pStruct->viParam1[2], &rot, p_Level);
  939. if (rot == p_Level->Actual_Item)
  940. p_Level->Actual_Item = newr;
  941. p_Level->Level[rot] = 0;
  942. p_itmNEW->Pos[0] = pStruct->viParam2[0];
  943. p_itmNEW->Pos[1] = pStruct->viParam2[1];
  944. p_itmNEW->Pos[2] = pStruct->viParam2[2];
  945. p_itm = p_itmNEW;
  946. if (p_itm->Square.pExtFlek && p_itm->Square.pExtFlek->pFlek) {
  947. kom_flek_zrus(p_itm->Square.pExtFlek->pFlek);
  948. p_itm->Square.pExtFlek->pFlek = 0;
  949. p_itm->Square.pExtFlek = NULL;
  950. }
  951. if (p_itm->p_Object->Class == 13) {
  952. kom_flek_zrus(p_itm->Square.Flek.pFlek);
  953. p_itm->Square.Flek.pFlek = 0;
  954. }
  955. kprintf(1, "kom_umisti_prvek");
  956. kom_umisti_prvek(p_itm->Index_Of_Game_Mesh, p_itm->Pos[0], p_itm->Pos[2],
  957. p_itm->Pos[1], p_itm->Rotation);
  958. kprintf(1, "kom_umisti_prvek DONE");
  959. if (p_itm->p_Object->Class == 13)
  960. gl_Pripoj_Flek_k_Predmenu(p_itm, p_Level);
  961. kom_mesh_get_float(p_itm->Index_Of_Game_Mesh,
  962. &pos[0], &pos[1], &pos[2], &rot);
  963. if (p_itm->p_Object->Class == 1 &&
  964. p_Level->Level[p_Level->Actual_Item]->iItem == p_itm->iItem &&
  965. p_Level->bPosouvatKameru) {
  966. kam_pol_get((BOD *) & target, &r, &fi, &dist);
  967. kam_pol_anim((BOD *) pos, r, fi, dist, &cameraflag, GK_REMOVE, 10, 1);
  968. kom_flek_setflag(p_itm->Square.Flek.pFlek, 0);
  969. }
  970. kom_mesh_get_float(p_tel->Index_Of_Game_Mesh,
  971. &pos[0], &pos[1], &pos[2], &rot);
  972. gl_Do_Teleport_Sparks(pos, p_Level);
  973. gl_Throw_off(p_tel->Pos, p_Level);
  974. p_Level->Flip++;
  975. gl_Next_Queue_Set(p_Level);
  976. if (p_Level->Flip == 1)
  977. gl_Go_Animations();
  978. p_Level->status = 5;
  979. free((void *) pStruct);
  980. if (p_itm->p_Object->Class == 1)
  981. am_Add_Beetle_Animation(p_itm->Index_Of_Game_Mesh, p_Level,
  982. p_itm->Rotation, 1);
  983. }
  984. void anmend_TeleportStart(int param, int param2, void *p_param)
  985. {
  986. float pos[3];
  987. int rot;
  988. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  989. LEVELINFO *p_Level = pStruct->p_Level;
  990. ITEMDESC *p_itm = (ITEMDESC *) param;
  991. ITEMDESC *p_tel = (ITEMDESC *) p_Level->Level[param2];
  992. kom_mesh_get_float(p_tel->Index_Of_Game_Mesh,
  993. &pos[0], &pos[1], &pos[2], &rot);
  994. rot = gl_Do_Teleport_Flare(pos, p_Level);
  995. if (rot != -1) {
  996. p_Level->Flare[rot].mesh = p_itm->Index_Of_Game_Mesh;
  997. p_Level->Flare[rot].hSvetlo = gl_Do_Teleport_Light(pos, p_Level, rot);
  998. p_Level->Flare[rot].Teleport = -1;
  999. p_Level->Flare[rot].Item = NULL;
  1000. }
  1001. kom_get_fyz_souradnice(pStruct->viParam2[0],
  1002. pStruct->viParam2[2], pStruct->viParam2[1], (BOD *) pos);
  1003. rot = gl_Do_Teleport_Flare(pos, p_Level);
  1004. if (rot != -1) {
  1005. p_Level->Flare[rot].hEXSvetlo = -1;
  1006. p_Level->Flare[rot].hSvetlo = gl_Do_Teleport_Light(pos, p_Level, -1);
  1007. p_Level->Flare[rot].Teleport = param2;
  1008. if (p_itm->p_Object->Class == 13 || !p_Level->Flip)
  1009. p_Level->Flare[rot].Item = p_itm;
  1010. else
  1011. p_Level->Flare[rot].Item = NULL;
  1012. p_Level->Flare[rot].pPointer = (void *) pStruct;
  1013. }
  1014. rot = rand() % 3;
  1015. if (p_tel->p_Object->Specific[rot].Index == -1)
  1016. rot = 0;
  1017. if (p_tel->p_Object->Specific[rot].Index == -1)
  1018. return;
  1019. // ap_Play_Sound(0,0,0, pos, p_tel->p_Object->Specific[rot].Index, NULL, &ad);
  1020. }
  1021. void anmend_Exit(int param, int param2, void *p_param)
  1022. {
  1023. LEVELINFO *p_Level = (LEVELINFO *) p_param;
  1024. am_Do_Exit(param, param2, p_Level);
  1025. // lani_set(param, 0, K_CHYBA, &p_Level->TrashFlag,0,0,0);
  1026. // kom_zrus_prvek(param);
  1027. }
  1028. void anmend_Lift_Item(int param, int param2, void *p_param)
  1029. {
  1030. kom_svaz_meshe(param, param2);
  1031. }
  1032. void anmend_KamenZaSikmonou(int param, int param2, void *p_param)
  1033. {
  1034. int mat = kom_najdi_material("cvytah1");
  1035. POINTERSTRUCTURE *pStruct = (POINTERSTRUCTURE *) p_param;
  1036. //rani_pripoj_funkci(p_set->animation[p_set->last].p_run, anmend_Kamen, Ldest, 0, (void *)p_Level);
  1037. /*rani_pripoj_funkci(p_set->animation[p_set->last].p_run, anmend_kom_mesh_set_mesh,
  1038. p_Level->Level[p_Level->Actual_Item]->Index_Of_Game_Mesh, 0, (void *)p_Level->Level[p_Level->Actual_Item]->Rotation); */
  1039. anmend_Kamen(pStruct->viParam1[0], pStruct->viParam1[1], pStruct->p_Level);
  1040. anmend_kom_mesh_set_mesh(pStruct->viParam2[0], pStruct->viParam2[1],
  1041. (LEVELINFO *) pStruct->viParam2[2]);
  1042. free((void *) pStruct);
  1043. }
  1044. void anmend_PlayKrumpac(int param, int param2, void *p_param)
  1045. {
  1046. }
  1047. void anmend_kom_mesh_set_meshK(int param, int param2, void *p_param)
  1048. {
  1049. float pos[3];
  1050. int rot;
  1051. kom_mesh_get_float(param, &pos[0], &pos[1], &pos[2], &rot);
  1052. // ap_Play_Sound(0,0,0, pos, 162 + (rand()%2), NULL, &ad);
  1053. kom_mesh_set_mesh(param, param2, (int) p_param);
  1054. lani_set(param, 0, 0, &Level.TrashFlag, 0, 0, 0);
  1055. }