TPT Script Server

This page is used for previewing and submitting scripts for use with the Script Manager

Available Scripts

(2) TPTMulti by LBPHacker
(3) set wifi v2 by jacob1
(4) Script Paste by jacob1
(5) Random Element by jacob1
(6) Magical Merge Master 3000 by nucular
(7) More Fuel Mod-heavy by jward212
(9) Breakpoints (BRPT) by boxmein
(10) Cockroaches! by boxmein
(11) Random tree by ssccsscc
(12) Element with random properties by ssccsscc
(15) Minimalistic Element Dehider by nucular
(16) FPS Gauge by mniip
(17) TPT Radio by jward212
(18) Print Debugger by FeynmanLogomaker
(19) Powered BHOL by jacob1
(20) Light and lamps by electronic_steve
(21) Extremely Durable TTAN by QuentinADay
(22) New Buttons by QuentinADay
(23) Pure Energy by QuentinADay
(25) RCA's HUD XV Update I by RCAProduction
(27) 123456787654 vols by mjpowder
(28) Singularity Bomb by QuentinADay
(29) ES wifi set by electronic_steve
(30) Lua Elements Pack by FeynmanLogomaker
(31) stkm gun by jward212
(32) space building materials by kjack1111
(34) Rust bomb by Damian97
(35) Simple command block by ssccsscc
(36) Everlasting Fusion by QuentinADay
(37) Screenshot Organiser by mecha-man
(38) Napalm mod by cccp3
(39) Rocket fuel mod v0.15 by cccp3
(41) Useful web links by jward212
(42) TPT Logic Gates Mod by iamdumb
(43) ESTools by electronic_steve
(44) Head Crabs-HL2 by jward212
(45) Procedural Save Generator by boxmein
(46) smooth colours for nametag by jward212
(47) ZAKPACK by zak03
(49) Performance Monitor by FeynmanLogomaker
(51) Texter by byzod
(52) Texter default fonts by byzod
(53) Schicko's Font Pack for Texter by Schicko
(54) Realistic Element Names by Atomic10
(55) TPT's Mod V.3 Update 1 by Amy
(56) Temporaryaccount-Decorator by Temporaryaccount
(57) random save loader by jward212
(58) Tmp gradient display by ssccsscc
(59) particle re-orderer by mniip
(60) Electric Glow by jacob1
(61) More Fuel Mod-lite by jward212
(63) Rythidium by janekbe04
(64) Simple FPS GUI by Sfsjunior
(65) Enhanced Element Dehider by ChargedCreeper
(66) Graph of average temp by ssccsscc
(67) Template save loader by jacob1
(68) Lua Text Generator by jBot-42
(70) Pixel's Freezer by Pixelguru26
(71) Thingy | Fusion For Ever by TheChosenEvilOne
(72) op explosions by zolly_bro
(73) Scar by DorkyBobster
(74) ScreenShotMod by lill74
(77) Useful Things by TheEvilChosenOne
(78) Alchemy Mod by _MrN_
(79) Nuke v2 by Fnaf65
(80) Compressor mod by TheChosenEvilOne
(81) Custom Render Mode Loader by jacob1
(82) Spacewars by JosephMA
(83) MOAR - Alpha 0.1 by TheChosenEvilOne
(86) Element Creator by cxi
(88) Soapworm by LBPHacker
(90) Pressure Bomb by God_Kra
(91) SMFB by wntjq69
(92) Potato by cxi
(93) Subatomic Pack (BDS) by TPT_PL
(94) Acidic Pack (BDS) by TPT_PL
(95) Starbound Building Materials by Sanpypr
(96) Factory problems by TPT_PL
(97) Gamma Ray-diation by Kostia4381
(98) Magic by livingfossil
(99) Cross-window Copy/Cut/Paste by LBPHacker
(100) Langton's Ant with variations by LBPHacker
(101) Remote particle creator/deleter by TPT_PL
(102) Force fields by electronic_steve
(103) Reinforced Concrete by 12Me21
(105) TPT_PL's Lua Mod by TPT_PL
(106) Nuke v4 by Fnaf65
(107) CHEMMOD V1 by KevAK
(108) Chemicals by Ligan
(109) VonDaniel's Template by VonDaniel
(110) The Inaccurate Radioactivity Toy Mod by TuDoR2007
(112) textmonsterPack by textmonster404
(113) Meteor by TheScienceKid
(114) Tgpm by TuDoR2007
(115) Civilizations by TPT_PL
(116) RAD-MOD 1.2.1B by Kev_AK
(117) MicroLua by RamiLego4Game
(118) Extra customizable HUD by djy0212
(119) Ingame brush editor by ssccsscc
(120) Window Maker by Paul_31415
(121) CHEM-MOD V1.2B by Kev_AK
(122) Rainbow PHOT by Mrprocom
(123) stronger stickmanv by yuval
(124) 3D Pressure Visualizer by mniip
(125) Arkadian Liquid by JanKaszanka
(126) Fuel by nukers473
(127) Immersive Radioactivity v2.1 by Potbelly
(128) ElementLaunchingTool by juh9870
(129) CHEM-MOD_v1.2.2b by KevAK
(130) Slingshot by Mrprocom
(131) Perlin Noise Generator by DoubleF
(132) Element Replace by TomW1605
(133) Flooder V2 by TheAwesomeMutant
(134) Link Sign GUI by QuanTech
(135) Element dehider by 4e616d65
(136) Subphoton ROM Builder by mad-cow
(137) Hardened Dust by Liftski
(138) Bio-Vir by TheAwesomeMutant
(140) Orbit Simulator by Mrprocom
(141) johnnyou's Font for Texter by johnnyou (49796346)
(142) auto_wifi by phisically
(143) Layering helper by ssccsscc
(144) Layering Helper Extended by LuaMaster
(145) TPT Remade by TuDoR2007
(146) All-seeing sampler by djy0212
(147) Layering helper remastered by ssccsscc
(148) Eraser by thepowdertoy12
(149) EXPLOSIONS by olix3001
(150) Simple rocket fuel mod by ArseniyPlotnikov2006
(151) Pure Fission by Fnaf65
(154) Graph by ssccsscc
(155) Little's Pack! by LittleProgramming
(156) Lead by LoftisGaming
(157) WIFI Tuner by ssccsscc
(158) Previous Brush by TomW1605
(159) HUD Auto-Hider by Tim
(161) Stack tool by thepowdertoy12
(162) Oil and plastic by ArseniyPlotnikov2006
(163) Colored Ember by DUC
(164) Timer by ssccsscc
(165) Bacteria Mod by TuDoR2007
(166) Noise filter by LBPHacker
(167) Future-proof element dehider by LBPHacker
(168) RadioactiveNuke by DreamingWarlord
(169) Only Hot Element by DreamingWarlord
(170) Philosopher's Stone by Godhydra
(171) Conic section generator by LBPHacker
(172) Interface API by ssccsscc
(173) Metals&Materials by Ferrous26
(174) tpt.all by LBPHacker
(175) The Visual Elements Pack by Goblin01, vvv331
(176) Layering Helper Reforged by PowderNotSolid
(177) SNOWified SING by LBPHacker
(178) FPS Chart by Goblin01
(179) TPT font writer by Goblin01
(180) Simple Ruler by PowderNotSolid
(181) Heat Modifier by DreamingWarlord
(182) TPT Remade II by TuDoR2007
(183) Gravity simulator by ArseniyPlotnikov2k6
(184) Unobtainium by christheboss894
(185) TPTMIDI noteblock in tpt by djy0212
(186) DreamingWarlord's Lua Tool by DreamingWarlord
(187) Elements Tooltip by Goblin01
(189) Explodium script by 0d15ea5ebe57c0debadc0ffee0ddf00d
(190) more powered force elements by 6nop6nop
(191) Yzaak1Scifire Modpack by Yzaak1Scifire
(194) Fluor and more modpack! by galaktor
(195) Hot Powder by lieve_blendi
(196) Star by TUANMINHVIETNAM
(197) Heat Powders by lieve_blendi
(200) Tangeriinium (thx 2 cxi 4 code) by LostEditor
(201) Freezer by lieve_blendi
(202) Powder Power! by TPTSortaGuy
(203) PowderPlus v1.4 by PowderPlus Team
(204) fire by ME
(205) Stacked Goo Animations by Maticzpl
(206) Stickman Control for Android Version by PhauloRiquelme
(207) Spark Removal Button by Xyz
(208) More HEAC's! by Maxhd1234
(209) Immersive Radioactivity v3.0 by Potbelly
(210) Subframe Chipmaker Script by Maticzpl
(211) Realistic Propellants by ArseniyPlotnikov2k6
(212) Mass Equals Gravity by Maticzpl
(213) PhiMod v1 by ArolaunTech
(214) PC Controls for Android by Cracker1000
(217) Single-pixel pipe configurator by LBPHacker
(218) Omega Death Laser Gun by Dogeoum
(219) Notifications by Maticzpl
(221) Powderizer by ArolaunTech
(222) ElemDehider 1.2 by Inventor70
(223) Unobtainum V2 by DoomKittyAttack
(224) Organics Mod v0.2B by PowderPlus Team
(225) Gravity distortion by Avolte55
(226) tmp Wifi by PhauloRiquelme
(227) Alchemagica Mod v1.0 by RebMiami
(228) Fan Elements Mod by RebMiami
(229) Impossibilities by ArolaunTech
(230) Realistic Explosives by ArseniyPlotnikov2k6
(231) libactivation by anamorphic
(232) Alloy Brushes by Maticzpl
(233) Gravity bender by pres
(234) Slow Tick by Pixel
(235) Paste ID by Maticzpl
(236) many things by jadenflp2
(237) Territect by Rebmiami
(238) Better Descriptions v1.0.5 by ashyboi2022
(239) LIGHTNING SPRK by GOLmaster10101
(240) Small Bombs by juh9870
(241) Save Shop by aaccbb
(242) Moving solids v1.3.0 Beta by ArolaunTech
(244) Alchemistry by rdococ
(245) ETRD (Formerly PowderIM) by aaccbb
(246) RadonX by Justadirtblock
(248) Water-X by deuterium_oxide
(250) Indestructible INSL by CheekyRand0m
(252) Console's Mod by Console/Compec
(255) Slow motion by LBPHacker
(256) Powered Repeller by Hythonia
(257) Zeta's Electric Tools. by Zetalasis
(258) Azure serum (AZSR) by ALumpOfPowderToy
(259) COLORFULSAND by xert
(260) Lightning Circle by defaultuser0
(261) Powder Future Tech by JonaHungary
(262) TPTGlowingSolids by DestinyDyson
(263) Volcano Bomb by I_am_the_NugsWorld
(264) Neon Lights by Rebmiami
(265) Radioactive Materials by xyz
(266) Eater mod by VIPERGAMEZ
(267) the biology mod by someone
(268) Atomic Physics by qe
(269) Pure Radiation by ronansb
(270) Fake Elements by That_PowderToy_Guy
(271) Tachyons and MISC by RamenNoods
(272) Exotic Particles by rdococ
(273) FPS Slider by aaccbb
(274) Enphosian's Radioactive mod pack by Enphosian
(276) ROM Builder by QnpfvTPz

+ Submit new script!

Title: Author:
Script:
-- Pre-define the variables that will be used in the update function to set the properties of the projectile after collision
local collType, collCtype, collTemp, collLife, collTmp, collTmp2

-- Graphics function of SHOT. Should be invisible, it's only used to specify power and direction to shoot PROJ
local function shotG(i, colr, colg, colb)
  return 1, ren.PMODE_NONE, 0, 0, 0, 0
end

-- Graphics function of PROJ
local function projG(i, colr, colg, colb)
  return 0, ren.PMODE_FLAT + ren.FIRE_BLEND + ren.PMODE_SPARK, 255, 226, 29, 36, 255, 226, 29, 36
end

-- Update function of PROJ
local function projU(i, x, y, s, nt)
  -- Tmp stores the time in game frames since the projectile was launched
  -- pavg0 and pavg1 store the initial vx and vy values, those (along with tmp) are used to calculate the next vx and vy
  sim.partProperty(i, sim.FIELD_TMP, sim.partProperty(i, sim.FIELD_TMP) + 1)
  sim.partProperty(i, sim.FIELD_VX, sim.partProperty(i, sim.FIELD_PAVG0))
  sim.partProperty(i, sim.FIELD_VY, sim.partProperty(i, sim.FIELD_PAVG1) + 0.167 * sim.partProperty(i, sim.FIELD_TMP))
  -- This part checks for future collisions for the next frame only, if there is a collesion, change vx and vy
  local nextd = math.sqrt(sim.partProperty(i, sim.FIELD_VX)^2 + sim.partProperty(i, sim.FIELD_VY)^2)
  for j = 0, 1, 1 / nextd do
    local nextx = x + sim.partProperty(i, sim.FIELD_VX) * j
    local nexty = y + sim.partProperty(i, sim.FIELD_VY) * j
    for r in sim.neighbors(nextx, nexty, 1, 1) do
      -- If a projectile is colliding with another, don't count it as a collision
      if sim.partProperty(r, sim.FIELD_TYPE) ~= sim.partProperty(i, sim.FIELD_TYPE) then
        sim.partProperty(i, sim.FIELD_VX, nextx - x)
        sim.partProperty(i, sim.FIELD_VY, nexty - y)
        break
      end
    end
  end
  -- On impact, convert the projectile to the particle specified by the user in the UI
  for r in sim.neighbors(x, y, 1, 1) do
    if sim.partProperty(r, sim.FIELD_TYPE) ~= sim.partProperty(i, sim.FIELD_TYPE) then
      sim.partChangeType(i, collType)
      sim.partProperty(i, sim.FIELD_CTYPE, collCtype)
      sim.partProperty(i, sim.FIELD_TEMP, collTemp)
      sim.partProperty(i, sim.FIELD_LIFE, collLife)
      sim.partProperty(i, sim.FIELD_TMP, collTmp)
      sim.partProperty(i, sim.FIELD_TMP2, collTmp2)
      break
    end
  end
end

-- Define SHOT (used to specify power and direction) and PROJ (hidden, the projectile that gets launched)
local shot = elem.allocate("PROCOM", "SHOT")
elem.element(shot, elem.element(elem.DEFAULT_PT_DMND))
elem.property(shot, "Name", "SHOT")
elem.property(shot, "Description", "Slingshot. You can specify what it turns into on impact. Drag to control power and direction. Release to launch.")
elem.property(shot, "Color", 0xFFE21D24)
elem.property(shot, "Properties", elem.PROP_LIFE_KILL + elem.PROP_NOCTYPEDRAW)
elem.property(shot, "Graphics", shotG)

local proj = elem.allocate("PROCOM", "PROJ")
elem.element(proj, elem.element(elem.DEFAULT_PT_PHOT))
elem.property(proj, "Name", "PROJ")
elem.property(proj, "Description", "Projectile. Launch it using SHOT.")
elem.property(proj, "Color", 0xFFE21D24)
elem.property(proj, "MenuVisible", 0)
elem.property(proj, "Temperature", sim.R_TEMP + 273.15)
elem.property(proj, "Update", projU)
elem.property(proj, "Graphics", projG)

local shotIdent = elem.property(shot, "Identifier")
local holding = false
local zooming = false
local selectedl = tpt.selectedl
local selectedr = tpt.selectedr
local selecteda = tpt.selecteda
local elemSelector, inputType, inputCtype, inputTemp, inputLife, inputTmp, inputTmp2
local x1, y1, x2, y2

-- This function is called when the Done button is clicked and it checks if all values the users entered are valid
-- If they are, update coll variables. If not, show an error message.
local function validate(sender)
  local inpType = inputType:text()
  local inpCtype = inputCtype:text()
  local inpTemp = inputTemp:text()
  local inpLife = inputLife:text()
  local inpTmp = inputTmp:text()
  local inpTmp2 = inputTmp2:text()
  local unit = "k"
  -- Validate Type
  if pcall(function() tpt.element(inpType) end) then
    inpType = tpt.element(inpType)
  else
    tpt.throw_error("Invalid Type value.")
    return
  end
  -- Validate Ctype
  if pcall(function() tpt.element(inpCtype) end) then
    inpCtype = tpt.element(inpCtype)
  else
    tpt.throw_error("Invalid Ctype value.")
    return
  end
  -- Validate Temp (see what the unit is first, then remove it from inpTemp)
  if inpTemp:sub(-1):lower() == "c" then
    unit = "c"
    inpTemp = tonumber(inpTemp:sub(1, -2))
  elseif inpTemp:sub(-1):lower() == "f" then
    unit = "f"
    inpTemp = tonumber(inpTemp:sub(1, -2))
  elseif inpTemp:sub(-1):lower() == "k" then
    unit = "k"
    inpTemp = tonumber(inpTemp:sub(1, -2))
  end
  if inpTemp then
    if unit == "c" then
      inpTemp = inpTemp + 273.15
    elseif unit == "f" then
      inpTemp = (inpTemp + 459.67) * 5 / 9
    end
  else
    tpt.throw_error("Invalid Temp value.")
    return
  end
  -- Validate Life
  if not tonumber(inpLife) or tonumber(inpLife) < 0 then
    tpt.throw_error("Invalid Life value.")
    return
  end
  -- Validate Tmp
  if not tonumber(inpTmp) or tonumber(inpTmp) < 0 then
    tpt.throw_error("Invalid Tmp value.")
    return
  end
  -- Validate Tmp2
  if not tonumber(inpTmp2) or tonumber(inpTmp2) < 0 then
    tpt.throw_error("Invalid Tmp2 value.")
    return
  end
  -- If all values are valid, update all coll variables
  collType = inpType
  collCtype = inpCtype
  collTemp = inpTemp
  collLife = tonumber(inpLife)
  collTmp = tonumber(inpTmp)
  collTmp2 = tonumber(inpTmp2)
  interface.closeWindow(elemSelector)
end

-- This part creates a UI window that shows up when SHOT is selected
elemSelector = Window:new(-1, -1, 200, 176)
local labelTitle = Label:new(100, 5, 0, 16, "Particle after collision")
local labelType = Label:new(25, 27, 0, 16, "Type:")
local labelCtype = Label:new(23, 48, 0, 16, "Ctype:")
local labelTemp = Label:new(25, 69, 0, 16, "Temp:")
local labelLife = Label:new(26, 90, 0, 16, "Life:")
local labelTmp = Label:new(27, 111, 0, 16, "Tmp:")
local labelTmp2 = Label:new(24, 132, 0, 16, "Tmp2:")
local buttonDone = Button:new(0, 160, 200, 16, "Done")
inputType = Textbox:new(42, 27, 148, 16, "BOMB")
inputCtype = Textbox:new(42, 48, 148, 16, "NONE")
inputTemp = Textbox:new(42, 69, 148, 16, "22C")
inputLife = Textbox:new(42, 90, 148, 16, "0")
inputTmp = Textbox:new(42, 111, 148, 16, "0")
inputTmp2 = Textbox:new(42, 132, 148, 16, "0")
buttonDone:action(validate)
elemSelector:addComponent(labelTitle)
elemSelector:addComponent(labelType)
elemSelector:addComponent(inputType)
elemSelector:addComponent(labelCtype)
elemSelector:addComponent(inputCtype)
elemSelector:addComponent(labelTemp)
elemSelector:addComponent(inputTemp)
elemSelector:addComponent(labelLife)
elemSelector:addComponent(inputLife)
elemSelector:addComponent(labelTmp)
elemSelector:addComponent(inputTmp)
elemSelector:addComponent(labelTmp2)
elemSelector:addComponent(inputTmp2)
elemSelector:addComponent(buttonDone)
-- When the enter key is pressed while the dialog box is up, run validate()
elemSelector:onKeyPress(function(keyCode) if keyCode == 13 then validate() end end)

-- This function checks if mousex and mousey are within workspace
local function inWorkspace(mousex, mousey)
  if mousex >= 4 and mousey >= 4 and mousex <= 607 and mousey <= 379 then return true end
end

-- This function checks if SHOT is selected (left-click element, right-click element, middle-click element, depends on what button is)
local function selected(button)
  if (button == 1 and tpt.selectedl == shotIdent) or (button == 4 and tpt.selectedr == shotIdent) or (button == 2 and tpt.selecteda == shotIdent) then
    return true
  end
end

-- This function draws the power line and the motion path
local function drawPowerMotion()
  local length = math.sqrt((x2 - x1)^2 + (y2 - y1)^2)
  local vx = (x1 - x2) / 17
  local vy = (y1 - y2) / 17
  local r = 0 + length * 1.5
  local g = 255 - length
  -- Draw power line
  graphics.drawLine(x1 + 2, y1, x2, y2, r, g, 0, 25)
  graphics.drawLine(x1 - 2, y1, x2, y2, r, g, 0, 25)
  graphics.drawLine(x1, y1 + 2, x2, y2, r, g, 0, 25)
  graphics.drawLine(x1, y1 - 2, x2, y2, r, g, 0, 25)
  graphics.drawLine(x1 + 1, y1 + 1, x2, y2, r, g, 0, 180)
  graphics.drawLine(x1 + 1, y1 - 1, x2, y2, r, g, 0, 180)
  graphics.drawLine(x1 - 1, y1 + 1, x2, y2, r, g, 0, 180)
  graphics.drawLine(x1 - 1, y1 - 1, x2, y2, r, g, 0, 180)
  graphics.drawLine(x1 + 1, y1, x2, y2, r, g, 0, 230)
  graphics.drawLine(x1 - 1, y1, x2, y2, r, g, 0, 230)
  graphics.drawLine(x1, y1 + 1, x2, y2, r, g, 0, 230)
  graphics.drawLine(x1, y1 - 1, x2, y2, r, g, 0, 230)
  graphics.drawLine(x1, y1, x2, y2, r, g, 0)
  -- Draw motion path (the location of the projectile every 2 frames for 90 frames)
  for i = 1, 90, 2 do
    local x = x1 + vx * i
    local y = y1 + vy * i + 0.0835 * i^2
    if not inWorkspace(x, y) then break end
    local shade = 255 - i * 2.833
    graphics.drawCircle(x + 1, y + 1, 0, 0, shade, shade, shade, 25)
    graphics.drawCircle(x + 1, y - 1, 0, 0, shade, shade, shade, 25)
    graphics.drawCircle(x - 1, y + 1, 0, 0, shade, shade, shade, 25)
    graphics.drawCircle(x - 1, y - 1, 0, 0, shade, shade, shade, 25)
    graphics.drawCircle(x + 1, y, 0, 0, shade, shade, shade, 100)
    graphics.drawCircle(x - 1, y, 0, 0, shade, shade, shade, 100)
    graphics.drawCircle(x, y + 1, 0, 0, shade, shade, shade, 100)
    graphics.drawCircle(x, y - 1, 0, 0, shade, shade, shade, 100)
    graphics.drawCircle(x, y, 0, 0, shade, shade, shade)
  end
end

-- This function creates the projectile with the right vx and vy and stores them in pavg0 and pavg1
local function launch()
  local vx = (x1 - x2) / 17
  local vy = (y1 - y2) / 17
  local projectile = sim.partCreate(-3, x1, y1, proj)
  sim.partProperty(projectile, sim.FIELD_VX, vx)
  sim.partProperty(projectile, sim.FIELD_VY, vy)
  sim.partProperty(projectile, sim.FIELD_PAVG0, vx)
  sim.partProperty(projectile, sim.FIELD_PAVG1, vy)
end

-- This function updates the values of selectedr, selectedl and selecteda and shows the UI window when SHOT is selected
local function checkSelected()
  if (tpt.selectedr == shotIdent and selectedr ~= shotIdent) or
    (tpt.selectedl == shotIdent and selectedl ~= shotIdent) or
    (tpt.selecteda == shotIdent and selecteda ~= shotIdent) then
      selectedr = tpt.selectedr
      selectedl = tpt.selectedl
      selecteda = tpt.selecteda
      interface.showWindow(elemSelector)
  else
    selectedr = tpt.selectedr
    selectedl = tpt.selectedl
    selecteda = tpt.selecteda
  end
end

-- zooming is later used in prelaunch to fix the bug where projectiles are launched when placing a zoom box if they are selected
local function detectZoom(key, keyCode, modifierKeys, event)
  if key == "z" and event == 1 then
    zooming = true
  elseif key == "z" and event == 2 then
    zooming = false
  end
end

-- This is the main function where everything starts
local function prelaunch(mousex, mousey, button, event)
  if selected(button) and not zooming and ((inWorkspace(mousex, mousey) and not holding) or holding) then
    if event == 1 then
      x1, y1 = sim.adjustCoords(mousex, mousey)
      x2, y2 = x1, y1
      holding = true
      tpt.register_step(drawPowerMotion)
    elseif event == 3 then
      x2, y2 = sim.adjustCoords(mousex, mousey)
    else
      tpt.unregister_step(drawPowerMotion)
      holding = false
      launch()
    end
  end
end

tpt.register_step(checkSelected)
tpt.register_keypress(detectZoom)
tpt.register_mouseclick(prelaunch)

Description:

Changelog: