fork(1) download
  1. require utils;
  2.  
  3.  
  4. CMissile* MagicMole;
  5. CMissile* WalkingMole;
  6.  
  7. //CMissile* MagicMoleNM;
  8. CMissile* WalkingMoleNM;
  9.  
  10. int MagicMolePosX;
  11. int MagicMolePosY;
  12.  
  13. int MagicMolePosXNM;
  14. int MagicMolePosYNM;
  15.  
  16. int MagicMoleExplodeTimer;
  17. int CustomRetreatTimer;
  18.  
  19. int mlastX;
  20. int mlastY;
  21. float molerot;
  22. int avgrot;
  23.  
  24.  
  25. CSprite* mdk;
  26. CSprite* mdn;
  27.  
  28. CSprite* mwk;
  29. CSprite* mwn;
  30.  
  31. CSprite* transp;
  32.  
  33. void mole::InitGraphic()
  34. {
  35.  
  36.  
  37. local f = GetAttachment("dig.png"); mdk = LoadSprite(f, 3, 1);
  38. local f = GetAttachment("dign.png"); mdn = LoadSprite(f, 3, 1);
  39.  
  40. local f = GetAttachment("w.png"); mwk = LoadSprite(f, 8, 1);
  41. local f = GetAttachment("wn.png"); mwn = LoadSprite(f, 8, 1);
  42.  
  43.  
  44.  
  45. local f = GetAttachment("trans.png"); transp = LoadSprite(f, 1, 0);
  46.  
  47. /*
  48.   SetSpriteOverride(158 , transp);
  49.   SetSpriteOverride(159 , transp);
  50.   SetSpriteOverride(160 , transp);
  51.   SetSpriteOverride(161 , transp);
  52.   SetSpriteOverride(166 , transp);
  53.   */
  54.  
  55. /*
  56.   random notes
  57.   CWorm(this);
  58.   GG->machColors[GetLocalMachine()]
  59.   GetTeamColor(wm->WormTeam)
  60.   */
  61. }
  62.  
  63. void mole::Init()
  64. {
  65. MagicMole = NullObj;
  66. WalkingMole = NullObj;
  67. MagicMolePosX = 0; //Seems to be the place where mole started jump.
  68. MagicMolePosY = 0;
  69. MagicMoleExplodeTimer = 0;
  70. CustomRetreatTimer = 0;
  71. mlastX = 0;
  72. mlastY = 0;
  73. molerot = 0.0;
  74. avgrot = 0;
  75.  
  76.  
  77.  
  78. }
  79.  
  80. void mole::FirstFrame()
  81. {
  82.  
  83. }
  84.  
  85.  
  86. override void CMissile::CMissile(CObject* parent,CWeaponLaunch* ldata,CShootDesc* sdata)
  87. {
  88. //MagicMoleInertiaTimer = 60; //So that the mole can't go upward infinitely.
  89. super;
  90. }
  91.  
  92. override void CMissile::Message(CObject* sender,EMType Type,int MSize,CMessageData* MData)
  93. {
  94. if(Type == M_FRAME)
  95. {
  96.  
  97. if(MagicMole == NullObj)
  98. {
  99. if(weap->CheckName("Super Mole Bomb") == true)
  100. {
  101. WalkingMole = this;
  102. }
  103. }
  104.  
  105. if(MagicMoleNM == NullObj)
  106. {
  107. if(weap->CheckName("Mole Bomb") == true)
  108. {
  109. WalkingMoleNM = this;
  110. }
  111. }
  112.  
  113.  
  114. if(MagicMoleExplodeTimer > 0 && MagicMole == NullObj)
  115. {
  116. MagicMoleExplodeTimer = MagicMoleExplodeTimer - 1;
  117. if(PosX <= MagicMolePosX + 10 && PosX >= MagicMolePosX - 10)
  118. {
  119. if(PosY <= MagicMolePosY + 10 && PosY >= MagicMolePosY - 10)
  120. {
  121. MagicMole = this;
  122. MagicMoleExplodeTimer = 0;
  123. //GG->WriteToChat( 1, "MM was set", false);
  124. }
  125. }
  126. }
  127. if(MagicMoleNM == NullObj)
  128. {
  129. if(PosX <= MagicMolePosXNM + 10 && PosX >= MagicMolePosXNM - 10)
  130. {
  131. if(PosY <= MagicMolePosYNM + 10 && PosY >= MagicMolePosYNM - 10)
  132. {
  133. MagicMoleNM = this;
  134. }
  135. }
  136. }
  137. if(MagicMole != NullObj)
  138. {
  139.  
  140. if(MagicMole == this)
  141. {
  142. if(SpX > 0){Side = 1;}
  143. if(SpX < 0){Side = -1;}
  144. //ActionType=3;
  145.  
  146. }
  147. }
  148. if(MagicMoleNM != NullObj)
  149. {
  150.  
  151. if(MagicMoleNM == this)
  152. {
  153. if(SpX > 0){Side = 1;}
  154. if(SpX < 0){Side = -1;}
  155.  
  156.  
  157. }
  158. }
  159.  
  160. }
  161. super;
  162. }
  163.  
  164. override void CWorm::Message(CObject* sender,EMType Type,int MSize,CMessageData* MData)
  165. {
  166. local dx = 0;
  167. local dy = 0;
  168.  
  169.  
  170. if(Type == M_PUP)
  171. {
  172. if(MagicMole != NullObj && (GS->LevelSY - MagicMole->PosY) > 10)
  173. {
  174.  
  175.  
  176. //if(MagicMole->MagicMoleInertiaTimer > 0)
  177. //{
  178. if(MagicMole->SpY >= -10){MagicMole->SpY = MagicMole->SpY - 0.5;}
  179. //MagicMole->MagicMoleInertiaTimer = MagicMole->MagicMoleInertiaTimer - 1;
  180. //MD->PosY = MD->PosY - 10;
  181. //GG->WriteToChat( 1, "UP2", false);
  182. //}
  183.  
  184.  
  185.  
  186. return;
  187. }
  188. }
  189.  
  190. if(Type == M_PDOWN)
  191. {
  192. if(MagicMole != NullObj && (GS->LevelSY - MagicMole->PosY) > 10)
  193. {
  194. if(MagicMole->SpY <= 10){MagicMole->SpY = MagicMole->SpY + 0.5;}
  195. return;
  196. }
  197. }
  198.  
  199. if(Type == M_PLEFT)
  200. {
  201. if(MagicMole != NullObj && (GS->LevelSY - MagicMole->PosY) > 10)
  202. {
  203. if(MagicMole->SpX >= -10){MagicMole->SpX = MagicMole->SpX - 0.5;}
  204. return;
  205. }
  206. }
  207.  
  208.  
  209. if(Type == M_PRIGHT)
  210. {
  211. if(MagicMole != NullObj && (GS->LevelSY - MagicMole->PosY) > 1)
  212. {
  213. if(MagicMole->SpX <= 10){MagicMole->SpX = MagicMole->SpX + 0.5;}
  214. return;
  215. }
  216. }
  217.  
  218.  
  219.  
  220. if (Type == M_DRAWQUEUE && MagicMole != NullObj) { //digging/flying kamikaze mole
  221. avgrot = (avgrot + 1) % 5;
  222.  
  223.  
  224.  
  225. if(avgrot == 4){
  226. if(mlastX != 0 && mlastY != 0){
  227.  
  228. if(mlastX != MagicMole->PosX && mlastY != MagicMole->PosY){
  229.  
  230. dx = mlastX - MagicMole->PosX;
  231. dy = mlastY - MagicMole->PosY;
  232.  
  233. //if(ar>0) {molerot = ar*360;} else {molerot = 2*MATH_PI + ar;}
  234. //molerot = (-atan2(-dx,-dy))/MATH_PI*180 + 180;
  235. molerot = -atan2(dx, dy) - MATH_PI + MATH_PI * 360;
  236.  
  237. //SUPER WEIRD VALUES NEEDED. taken from another source at forums.
  238. //AddSpriteEx should take radians but only works with 1128 +-PI values..?
  239. //And its not perfect.. maybe averaging rotation could help glitchiness.
  240. //also PNG is not rendered nice altough files are good.
  241. }
  242. }
  243.  
  244. }
  245.  
  246. if(molerot > 1128.0){
  247. //AddSpriteEx(5,MagicMole->PosX,MagicMole->PosY,mdk->Index,abs(sin((GS->Tick/5))),molerot+1.5,1.0);
  248. }else{
  249.  
  250. //AddSpriteEx(5,MagicMole->PosX,MagicMole->PosY,(mdk->Index)+262144,abs(sin((GS->Tick/5))),molerot-1.5,1.0);
  251.  
  252. }
  253.  
  254. if(GS->Tick % 3 == 0){ //DESYNC ?
  255. PxParticle *p;
  256. p = new PxParticle(130, MagicMole->PosX, MagicMole->PosY);
  257. p->SetBlendMode(0);
  258. p->SetLifeTime(300);
  259. p->SetRandomVelocity(0.05, 0.05);
  260. p->SetAirResistance(0.0);
  261. p->GravityFactor(0.0);
  262. //p->SetAlpha(255);
  263.  
  264. p->SetColor(
  265. 255,
  266. Lerp(sin((GS->Tick/25)), 50, 200),
  267. 50
  268. );
  269.  
  270.  
  271.  
  272.  
  273. p->SetStartSize(0.9, 0.9);
  274. p->SetEndSize(0.5, 0.5);
  275. }
  276.  
  277.  
  278.  
  279.  
  280.  
  281. if(avgrot == 0){
  282. mlastX = MagicMole->PosX;
  283. mlastY = MagicMole->PosY;
  284. }
  285.  
  286.  
  287. }
  288. if (Type == M_DRAWQUEUE && MagicMoleNM != NullObj) {//digging/flying normal mole
  289. avgrot = (avgrot + 1) % 5;
  290.  
  291.  
  292. if(avgrot == 4){
  293. if(mlastX != 0 && mlastY != 0){
  294.  
  295. if(mlastX != MagicMoleNM->PosX && mlastY != MagicMoleNM->PosY){
  296.  
  297.  
  298. dx = mlastX - MagicMoleNM->PosX;
  299. dy = mlastY - MagicMoleNM->PosY;
  300.  
  301.  
  302. //if(ar>0) {molerot = ar*360;} else {molerot = 2*MATH_PI + ar;}
  303. //molerot = (-atan2(-dx,-dy))/MATH_PI*180 + 180;
  304. molerot = -atan2(dx, dy) - MATH_PI + MATH_PI * 360;
  305. }
  306. }
  307.  
  308. }
  309.  
  310. if(molerot > 1128.0){
  311. //AddSpriteEx(5,MagicMoleNM->PosX,MagicMoleNM->PosY,mdn->Index,abs(sin((GS->Tick/5))),molerot+1.5,1.0);
  312. }else{
  313. //AddSpriteEx(5,MagicMoleNM->PosX,MagicMoleNM->PosY,(mdn->Index)+262144,abs(sin((GS->Tick/5))),molerot-1.5,1.0);
  314. }
  315.  
  316. if(avgrot == 0){
  317. mlastX = MagicMoleNM->PosX;
  318. mlastY = MagicMoleNM->PosY;
  319. }
  320.  
  321.  
  322. }
  323.  
  324.  
  325. if (Type == M_DRAWQUEUE && WalkingMole != NullObj) {//walking kamikaze mole
  326. avgrot = (avgrot + 1) % 5;
  327. if(avgrot == 4){
  328. if(mlastX != 0 && mlastY != 0){
  329. if(mlastX != WalkingMole->PosX && mlastY != WalkingMole->PosY){
  330. dx = mlastX - WalkingMole->PosX;
  331. dy = mlastY - WalkingMole->PosY;
  332. molerot = -atan2(dx, dy) - MATH_PI + MATH_PI * 360;
  333. }
  334. }
  335.  
  336. }
  337.  
  338.  
  339.  
  340. if(molerot > 1128.0){
  341. // AddSpriteEx(5,WalkingMole->PosX,WalkingMole->PosY,mwk->Index,abs(sin((GS->Tick/15))),0.0,1.0);
  342. }else{
  343. //AddSpriteEx(5,WalkingMole->PosX,WalkingMole->PosY,(mwk->Index)+262144,abs(sin((GS->Tick/15))),0.0,1.0);
  344. }
  345.  
  346. if(avgrot == 0){
  347. mlastX = WalkingMole->PosX;
  348. mlastY = WalkingMole->PosY;
  349. }
  350.  
  351.  
  352.  
  353. }
  354. if (Type == M_DRAWQUEUE && WalkingMoleNM != NullObj) {//walking nornmal mole
  355. avgrot = (avgrot + 1) % 5;
  356. if(avgrot == 4){
  357. if(mlastX != 0 && mlastY != 0){
  358. if(mlastX != WalkingMoleNM->PosX && mlastY != WalkingMoleNM->PosY){
  359. dx = mlastX - WalkingMoleNM->PosX;
  360. dy = mlastY - WalkingMoleNM->PosY;
  361. molerot = -atan2(dx, dy) - MATH_PI + MATH_PI * 360;
  362. }
  363. }
  364.  
  365. }
  366.  
  367.  
  368.  
  369. if(molerot > 1128.0){
  370. // AddSpriteEx(5,WalkingMoleNM->PosX,WalkingMoleNM->PosY,mwn->Index,abs(sin((GS->Tick/15))),0.0,1.0);
  371. }else{
  372. // AddSpriteEx(5,WalkingMoleNM->PosX,WalkingMoleNM->PosY,(mwn->Index)+262144,abs(sin((GS->Tick/15))),0.0,1.0);
  373. }
  374.  
  375. if(avgrot == 0){
  376. mlastX = WalkingMoleNM->PosX;
  377. mlastY = WalkingMoleNM->PosY;
  378. }
  379.  
  380.  
  381.  
  382. }
  383.  
  384. if(Type == M_TURNBEGIN && MagicMole != NullObj)
  385. {
  386. MagicMole = NullObj;
  387. MagicMolePosX = 0;
  388. MagicMolePosY = 0;
  389. MagicMoleExplodeTimer = 0;
  390. WalkingMole = NullObj;
  391. //GG->WriteToChat( 1, "tbegin", false);
  392. }
  393. if(Type == M_TURNBEGIN && MagicMoleNM != NullObj)
  394. {
  395. MagicMoleNM = NullObj;
  396. MagicMolePosXNM = 0;
  397. MagicMolePosYNM = 0;
  398. WalkingMoleNM = NullObj;
  399. }
  400.  
  401. super;
  402. }
  403.  
  404. void SpawnMineMole(int x, int y, int teamz) //DESYNC ?
  405. {
  406. CMineParams MParams;
  407. CShootDesc SDesc;
  408. zero(&MParams);
  409. zero(&SDesc);
  410. MParams.Prefuse = 0; //time before ability to activate
  411. MParams.Flags = 60; //flags of objects to react on
  412. MParams.Bias = 0; //Y shift of explosion
  413. MParams.Damage = 29; //damage
  414. MParams.BlastPower = 200;
  415. MParams.Fuse = 3000;
  416. MParams.Radius = 100;
  417. SDesc.Team = teamz;
  418. SDesc.X = x;
  419. SDesc.Y = y;
  420. SDesc.SpX = 0; //speed
  421. SDesc.SpY = 0;
  422. local Mine = new CMine(Root->GetObject(25, 0), &MParams, &SDesc, false, 0);
  423.  
  424.  
  425. }
  426.  
  427. override void CMissile::ExplodeAt(fixed x,fixed y)
  428. {
  429.  
  430. if(MagicMole != NullObj)
  431. {
  432. if(MagicMole == this)
  433. {
  434.  
  435. SpawnMineMole(x,y, MagicMole->initdesc.Team); //DESYNC ?
  436.  
  437. MagicMole = NullObj;
  438. MagicMolePosX = 0;
  439. MagicMolePosX = 0;
  440. MagicMoleExplodeTimer = 0;
  441. //GG->WriteToChat( 1, "mm null", false);
  442. }
  443. }
  444. if(MagicMoleNM != NullObj)
  445. {
  446. if(MagicMoleNM == this)
  447. {
  448. MagicMoleNM = NullObj;
  449. MagicMolePosXNM = 0;
  450. MagicMolePosXNM = 0;
  451. }
  452. }
  453. if(weap->CheckName("Super Mole Bomb") == true && MagicMole == NullObj)
  454. {
  455. MagicMolePosX = x;
  456. MagicMolePosY = y;
  457. MagicMoleExplodeTimer = 10;
  458. WalkingMole = NullObj;
  459. super;
  460. }
  461. if(weap->CheckName("Mole Bomb") == true && MagicMoleNM == NullObj)
  462. {
  463. MagicMolePosXNM = x;
  464. MagicMolePosYNM = y;
  465. WalkingMoleNM = NullObj;
  466. super;
  467. }
  468. super;
  469. }
  470.  
  471. override void CTurnGame::Message(CObject* sender,EMType Type,int MSize,CMessageData* MData)
  472. {
  473. if(Type == M_FRAME)
  474. {
  475. if(MagicMole != NullObj || WalkingMole != NullObj)
  476. {
  477. //if(CustomRetreatTimer == 0){CustomRetreatTimer = RetreatTimer;} //freezing Retreat Timer while Moles are active.
  478. RetreatTimer = 30; //seems to prevent antiglitch, a value of 5 breaks mole movement
  479. //GG->WriteToChat( 1, "retreat set", false);
  480. }
  481. }
  482.  
  483. if(Type == M_TURNBEGIN)
  484. {
  485. if(CustomRetreatTimer != 0){CustomRetreatTimer = 0;}
  486. }
  487. super;
  488. }
  489.  
  490.  
  491. /*
  492. override void CWorm::FireFinal(CWeapon* Weap, CShootDesc* Desc)
  493. {
  494. if(Weap->CheckName("Mole Bomb"))
  495. {
  496. SetSpriteOverride(158 , mfn);
  497.   SetSpriteOverride(159 , mn1);
  498.   SetSpriteOverride(160 , mn2);
  499.   SetSpriteOverride(161 , mn3);
  500.   SetSpriteOverride(166 , mwn);
  501.  
  502. }
  503. else if(Weap->CheckName("Super Mole Bomb"))
  504. {
  505.   SetSpriteOverride(158 , mfk);
  506.   SetSpriteOverride(159 , mk1);
  507.   SetSpriteOverride(160 , mk2);
  508.   SetSpriteOverride(161 , mk3);
  509.   SetSpriteOverride(166 , mwk);
  510. }
  511.  
  512. super;
  513.  
  514. }
  515.  
  516.  
  517.  
  518. */
  519.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:1:1: error: 'require' does not name a type
 require utils;
 ^
prog.cpp:4:1: error: 'CMissile' does not name a type
 CMissile* MagicMole;
 ^
prog.cpp:5:1: error: 'CMissile' does not name a type
 CMissile* WalkingMole;
 ^
prog.cpp:8:1: error: 'CMissile' does not name a type
 CMissile* WalkingMoleNM;
 ^
prog.cpp:25:1: error: 'CSprite' does not name a type
 CSprite* mdk;
 ^
prog.cpp:26:1: error: 'CSprite' does not name a type
 CSprite* mdn;
 ^
prog.cpp:28:1: error: 'CSprite' does not name a type
 CSprite* mwk;
 ^
prog.cpp:29:1: error: 'CSprite' does not name a type
 CSprite* mwn;
 ^
prog.cpp:31:1: error: 'CSprite' does not name a type
 CSprite* transp;
 ^
prog.cpp:33:6: error: 'mole' has not been declared
 void mole::InitGraphic() 
      ^
prog.cpp: In function 'void InitGraphic()':
prog.cpp:37:5: error: 'local' was not declared in this scope
     local f  = GetAttachment("dig.png"); mdk = LoadSprite(f, 3, 1);
     ^
prog.cpp:37:42: error: 'mdk' was not declared in this scope
     local f  = GetAttachment("dig.png"); mdk = LoadSprite(f, 3, 1);
                                          ^
prog.cpp:37:59: error: 'f' was not declared in this scope
     local f  = GetAttachment("dig.png"); mdk = LoadSprite(f, 3, 1);
                                                           ^
prog.cpp:37:66: error: 'LoadSprite' was not declared in this scope
     local f  = GetAttachment("dig.png"); mdk = LoadSprite(f, 3, 1);
                                                                  ^
prog.cpp:38:11: error: expected ';' before 'f'
     local f  = GetAttachment("dign.png"); mdn = LoadSprite(f, 3, 1);
           ^
prog.cpp:38:43: error: 'mdn' was not declared in this scope
     local f  = GetAttachment("dign.png"); mdn = LoadSprite(f, 3, 1);
                                           ^
prog.cpp:40:11: error: expected ';' before 'f'
     local f  = GetAttachment("w.png"); mwk = LoadSprite(f, 8, 1);
           ^
prog.cpp:40:40: error: 'mwk' was not declared in this scope
     local f  = GetAttachment("w.png"); mwk = LoadSprite(f, 8, 1);
                                        ^
prog.cpp:41:11: error: expected ';' before 'f'
     local f  = GetAttachment("wn.png"); mwn = LoadSprite(f, 8, 1);
           ^
prog.cpp:41:41: error: 'mwn' was not declared in this scope
     local f  = GetAttachment("wn.png"); mwn = LoadSprite(f, 8, 1);
                                         ^
prog.cpp:45:11: error: expected ';' before 'f'
     local f  = GetAttachment("trans.png"); transp = LoadSprite(f, 1, 0);
           ^
prog.cpp:45:44: error: 'transp' was not declared in this scope
     local f  = GetAttachment("trans.png"); transp = LoadSprite(f, 1, 0);
                                            ^
prog.cpp: At global scope:
prog.cpp:63:6: error: 'mole' has not been declared
 void mole::Init()   
      ^
prog.cpp: In function 'void Init()':
prog.cpp:65:1: error: 'MagicMole' was not declared in this scope
 MagicMole = NullObj;
 ^
prog.cpp:65:13: error: 'NullObj' was not declared in this scope
 MagicMole = NullObj;
             ^
prog.cpp:66:1: error: 'WalkingMole' was not declared in this scope
 WalkingMole = NullObj;
 ^
prog.cpp: At global scope:
prog.cpp:80:6: error: 'mole' has not been declared
 void mole::FirstFrame()
      ^
prog.cpp:86:1: error: 'override' does not name a type
 override void CMissile::CMissile(CObject* parent,CWeaponLaunch* ldata,CShootDesc* sdata)
 ^
prog.cpp:92:1: error: 'override' does not name a type
 override void CMissile::Message(CObject* sender,EMType Type,int MSize,CMessageData* MData)
 ^
prog.cpp:164:1: error: 'override' does not name a type
 override void CWorm::Message(CObject* sender,EMType Type,int MSize,CMessageData* MData)
 ^
prog.cpp: In function 'void SpawnMineMole(int, int, int)':
prog.cpp:406:13: error: 'CMineParams' was not declared in this scope
             CMineParams MParams;
             ^
prog.cpp:407:13: error: 'CShootDesc' was not declared in this scope
             CShootDesc SDesc;
             ^
prog.cpp:408:19: error: 'MParams' was not declared in this scope
             zero(&MParams); 
                   ^
prog.cpp:408:26: error: 'zero' was not declared in this scope
             zero(&MParams); 
                          ^
prog.cpp:409:19: error: 'SDesc' was not declared in this scope
             zero(&SDesc);
                   ^
prog.cpp:422:13: error: 'local' was not declared in this scope
             local Mine = new CMine(Root->GetObject(25, 0), &MParams, &SDesc, false, 0);
             ^
prog.cpp: At global scope:
prog.cpp:427:1: error: 'override' does not name a type
 override void CMissile::ExplodeAt(fixed x,fixed y)
 ^
prog.cpp:471:1: error: 'override' does not name a type
 override void CTurnGame::Message(CObject* sender,EMType Type,int MSize,CMessageData* MData)
 ^
stdout
Standard output is empty