tdog442

Phlogiston for Powder Toy

May 11th, 2013
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. #include "simulation/Elements.h"
  2. //#TPT-Directive ElementClass Element_PLGN PT_PLGN 173
  3. Element_PLGN::Element_PLGN()
  4. {
  5. Identifier = "DEFAULT_PT_PLGN";
  6. Name = "PLGN";
  7. Colour = PIXPACK(0xFFFFFF);
  8. MenuVisible = 1;
  9. MenuSection = SC_GAS;
  10. Enabled = 1;
  11.  
  12. Advection = 2.0f;
  13. AirDrag = 0.00f * CFDS;
  14. AirLoss = 0.99f;
  15. Loss = 0.30f;
  16. Collision = -0.1f;
  17. Gravity = -0.04f;
  18. Diffusion = 2.0f;
  19. HotAir = 0.001f * CFDS;
  20. Falldown = 0;
  21.  
  22. Flammable = 0;
  23. Explosive = 0;
  24. Meltable = 0;
  25. Hardness = 0;
  26.  
  27. Weight = 1;
  28.  
  29. Temperature = R_TEMP+273.15f;
  30. HeatConduct = 100;
  31. Description = "Phlogiston. Extinguishes fire. Highly toxic.";
  32.  
  33. State = ST_GAS;
  34. Properties = TYPE_GAS|PROP_DEADLY|PROP_LIFE_DEC;
  35.  
  36. LowPressure = IPL;
  37. LowPressureTransition = NT;
  38. HighPressure = IPH;
  39. HighPressureTransition = NT;
  40. LowTemperature = ITL;
  41. LowTemperatureTransition = NT;
  42. HighTemperature = ITH;
  43. HighTemperatureTransition = NT;
  44.  
  45. Update = &Element_PLGN::update;
  46. }
  47.  
  48.  
  49. int Element_PLGN::update(UPDATE_FUNC_ARGS)
  50. {
  51. int r,rx,ry;
  52. for(rx=-1; rx<2; rx++)
  53. for(ry=-1; ry<2; ry++)
  54. if (BOUNDS_CHECK && (rx || ry))
  55. {
  56. r = pmap[y+ry][x+rx];
  57. if (!r)
  58. continue;
  59.  
  60. if ((r&0xFF)==PT_YEST)
  61. {
  62. sim->part_change_type(r>>8, x+rx, y+ry, PT_DYST);
  63. }
  64.  
  65. if ((r&0xFF)==PT_LIFE)
  66. {
  67. if (parts[i].tmp2 == 1)
  68. {
  69. if(parts[r>>8].life > 0) parts[i].life = parts[r>>8].life;
  70. if(parts[i].life == 0)
  71. {
  72. sim->kill_part(i);
  73. return(1);
  74. }
  75. }
  76. sim->create_part(r>>8, x+rx, y+ry, PT_PLGN);
  77. sim->kill_part(PT_LIFE);
  78. }
  79.  
  80. if ((r&0xFF)==PT_CO2 && parts[i].ctype==PT_SMKE)
  81. {
  82. sim->part_change_type(r>>8, x, y, PT_SMKE);
  83. sim->kill_part(i);
  84. }
  85.  
  86. if (parts[i].tmp2 == 1 && (r&0xFF)!=PT_PLGN)
  87. {
  88. if(parts[r>>8].life > 0) parts[i].life = parts[r>>8].life;
  89. if(parts[i].life == 0)
  90. {
  91. sim->kill_part(i);
  92. return(1);
  93. }
  94. }
  95.  
  96. if((r&0xFF)==PT_O2 && (parts[i].ctype==PT_FIRE || parts[i].tmp==1))
  97. {
  98. sim->part_change_type(i, x, y, PT_FIRE);
  99. }
  100. }
  101.  
  102. for(rx=-4; rx<5; rx++)
  103. for(ry=-4; ry<5; ry++)
  104. if (BOUNDS_CHECK && (rx || ry))
  105. {
  106. r = pmap[y+ry][x+rx];
  107. if (!r)
  108. continue;
  109.  
  110. if ((r&0xFF)==PT_PLNT)
  111. {
  112. sim->part_change_type(r>>8, x+rx, y+ry, PT_WOOD);
  113. }
  114.  
  115. if((r&0xFF)==PT_BMTL && parts[r>>8].tmp == 1)
  116. {
  117. parts[r>>8].tmp = 0;
  118. sim->part_change_type(r>>8, x+rx, y+ry, PT_IRON);
  119. }
  120.  
  121. if((r&0xFF)==PT_PLGN)
  122. {
  123. if(parts[r>>8].tmp >= 1) parts[i].tmp = parts[r>>8].tmp;
  124. if(parts[r>>8].tmp2 >= 1) parts[i].tmp2 = parts[r>>8].tmp2;
  125. }
  126. if((r&0xFF)==PT_PLSM)
  127. {
  128. if(((r&0xFF)==PT_FUSE || (r&0xFF)==PT_FSEP) && parts[r>>8].life<50)
  129. {
  130. sim->create_part(r>>8, x+rx, y+ry, PT_PLGN);
  131. sim->kill_part(PT_PLSM);
  132. parts[r>>8].life = 50;
  133. }
  134. }
  135. if(((r&0xFF)==PT_FUSE || (r&0xFF)==PT_FSEP) && parts[r>>8].life<50)
  136. {
  137. parts[r>>8].life = 50;
  138. }
  139. }
  140.  
  141. for(rx=-2; rx<3; rx++)
  142. for(ry=-2; ry<3; ry++)
  143. if (BOUNDS_CHECK && (rx || ry))
  144. {
  145. r = pmap[y+ry][x+rx];
  146. if (!r)
  147. continue;
  148.  
  149. if ((r&0xFF)==PT_FIRE && parts[i].tmp<=0)
  150. {
  151. if (parts[i].tmp2 == 1)
  152. {
  153. if(parts[i].life > 0) parts[i].life = parts[r>>8].life;
  154. if(parts[i].life == 0)
  155. {
  156. sim->kill_part(i);
  157. return(1);
  158. }
  159. }
  160. sim->create_part(r>>8, x+rx, y+ry, PT_PLGN);
  161. sim->kill_part(PT_FIRE);
  162. parts[i].ctype == PT_SMKE;
  163. if((r&0xFF)==PT_IGNT && (parts[r>>8].life<3 || parts[r>>8].tmp==1))
  164. {
  165. parts[r>>8].tmp = 0;
  166. parts[r>>8].life = 3;
  167. }
  168. if(((r&0xFF)==PT_COAL || (r&0xFF)==PT_BCOL) && parts[r>>8].life<100)
  169. {
  170. parts[r>>8].life = 110;
  171. }
  172. }
  173. if((r&0xFF)==PT_EMBR)
  174. {
  175. sim->create_part(r>>8, x+rx, y+ry, PT_PLGN);
  176. sim->kill_part(PT_EMBR);
  177. if((r&0xFF)==PT_IGNT && (parts[r>>8].life<3 || parts[r>>8].tmp==1))
  178. {
  179. parts[r>>8].tmp = 0;
  180. parts[r>>8].life = 3;
  181. }
  182. }
  183. if((r&0xFF)==PT_IGNT && (parts[r>>8].life<3 || parts[r>>8].tmp==1))
  184. {
  185. parts[r>>8].tmp = 0;
  186. parts[r>>8].life = 3;
  187. }
  188. }
  189. return(0);
  190. }
  191.  
  192. Element_PLGN::~Element_PLGN() {}
Advertisement
Add Comment
Please, Sign In to add comment