├── pre-compiled ├── JavaBrawl-1.0.jar └── README.md ├── src └── main │ ├── java │ ├── Utils │ │ ├── EventsManager.java │ │ ├── Logger.java │ │ └── createMessage.java │ ├── Main.java │ ├── Sessions │ │ ├── PlayerSession.java │ │ └── ClientSession.java │ ├── Messaging │ │ ├── Client │ │ │ ├── ClientHelloMessage.java │ │ │ ├── Battle │ │ │ │ └── GoHomeFromOfflinePractiseMessage.java │ │ │ └── Login │ │ │ │ └── LoginMessage.java │ │ ├── Server │ │ │ ├── ServerHelloMessage.java │ │ │ ├── Home │ │ │ │ ├── LobbyInfoMessage.java │ │ │ │ └── OwnHomeDataMessage.java │ │ │ └── Login │ │ │ │ └── LoginOkMessage.java │ │ └── createMessageByTypeForServer.java │ ├── Network │ │ └── Server.java │ ├── DataStream │ │ └── ByteStream.java │ └── CsvReader │ │ └── CsvReader.java │ └── resources │ └── Assets │ ├── cards.csv │ ├── skins.csv │ └── characters.csv ├── README.md ├── pom.xml └── LICENSE /pre-compiled/JavaBrawl-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PeterHackz/Java-Brawl/HEAD/pre-compiled/JavaBrawl-1.0.jar -------------------------------------------------------------------------------- /pre-compiled/README.md: -------------------------------------------------------------------------------- 1 | # notice 2 | compiled with java 11 3 | 4 | # how2run 5 | ``` 6 | java -jar JavaBrawl-1.0.jar 7 | ``` 8 | -------------------------------------------------------------------------------- /src/main/java/Utils/EventsManager.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Utils; 2 | 3 | public class EventsManager { 4 | public static int[][] events = { 5 | { 6 | 7, // event id 7 | // modifiers started here 8 | 4, 9 | 3 10 | }, 11 | { 12 | 17, 13 | 0 14 | }, 15 | { 16 | 57, 17 | 2, 18 | 1 19 | } 20 | }; 21 | } -------------------------------------------------------------------------------- /src/main/java/Main.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb; 2 | 3 | import com.java.brawl.sb.Utils.Logger; 4 | import com.java.brawl.sb.Network.Server; 5 | import com.java.brawl.sb.CsvReader.CsvReader; 6 | 7 | public class Main { 8 | public static void main(String[] args) { 9 | Server server = new Server(); 10 | CsvReader CsvNode = new CsvReader(); 11 | CsvNode.init("Assets/"); 12 | server.config(9339, CsvNode); 13 | server.Listen(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/Sessions/PlayerSession.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Sessions; 2 | 3 | import com.java.brawl.sb.CsvReader.CsvReader; 4 | 5 | public class PlayerSession { 6 | 7 | public int high_id, low_id, map_id, sp_id, brawler_id, skin_id; 8 | 9 | public String token, name; 10 | public CsvReader csv; 11 | 12 | public PlayerSession(CsvReader CsvNode) { 13 | this.name = ""; 14 | this.token = ""; 15 | this.low_id = 0; 16 | this.high_id = 0; 17 | this.brawler_id = 0; 18 | this.csv = CsvNode; 19 | this.sp_id = this.csv.getSpecialAbilityIDByBrawlerID(this.brawler_id); 20 | this.skin_id = this.csv.getSkinIDByBrawlerID(this.brawler_id); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/Utils/Logger.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Utils; 2 | 3 | public class Logger { 4 | public void color(String c, String output) { 5 | String a = ""; 6 | String reset = "\033[0;37m"; 7 | if (c == "red") { 8 | a = "\033[0;31m"; 9 | } else if (c == "blue") { 10 | a = "\033[0;34m"; 11 | } else if (c == "purple") { 12 | a = "\033[0;35m"; 13 | } else if (c == "yellow") { 14 | a = "\033[0;33m"; 15 | } else if (c == "cyan") { 16 | a = "\033[0;36m"; 17 | } else if (c == "green") { 18 | a = "\033[0;32m"; 19 | } else if (c == "white") { 20 | a = "\033[0;37m"; 21 | } 22 | System.out.println( 23 | a + output + reset 24 | ); 25 | } 26 | public void debug(String a1) { 27 | color("red", a1); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Client/ClientHelloMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Client; 2 | 3 | import java.io.DataOutputStream; 4 | 5 | import com.java.brawl.sb.Sessions.PlayerSession; 6 | 7 | import com.java.brawl.sb.DataStream.ByteStream; 8 | import com.java.brawl.sb.Messaging.Server.ServerHelloMessage; 9 | 10 | public class ClientHelloMessage extends ByteStream { 11 | 12 | private PlayerSession player; 13 | private DataOutputStream writer; 14 | 15 | public ClientHelloMessage(PlayerSession plr, byte[] payload, DataOutputStream Writer) { 16 | 17 | super(payload); 18 | this.writer = Writer; 19 | this.player = plr; 20 | 21 | } 22 | 23 | public ClientHelloMessage decode() { 24 | return this; 25 | } 26 | 27 | public void process() { 28 | 29 | new ServerHelloMessage(this.player, this.writer).encode(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Client/Battle/GoHomeFromOfflinePractiseMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Client.Battle; 2 | 3 | import java.io.DataOutputStream; 4 | 5 | import com.java.brawl.sb.Sessions.PlayerSession; 6 | 7 | import com.java.brawl.sb.DataStream.ByteStream; 8 | import com.java.brawl.sb.Messaging.Server.Home.OwnHomeDataMessage; 9 | 10 | public class GoHomeFromOfflinePractiseMessage extends ByteStream { 11 | 12 | private PlayerSession player; 13 | private DataOutputStream writer; 14 | 15 | public GoHomeFromOfflinePractiseMessage(PlayerSession plr, byte[] payload, DataOutputStream Writer) { 16 | 17 | super(payload); 18 | this.writer = Writer; 19 | this.player = plr; 20 | 21 | } 22 | 23 | public GoHomeFromOfflinePractiseMessage decode() { 24 | return this; 25 | } 26 | 27 | public void process() { 28 | 29 | new OwnHomeDataMessage(this.player, this.writer).encode(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Server/ServerHelloMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Server; 2 | import java.io.DataOutputStream; 3 | 4 | import com.java.brawl.sb.Sessions.PlayerSession; 5 | import com.java.brawl.sb.DataStream.ByteStream; 6 | import com.java.brawl.sb.Utils.createMessage; 7 | 8 | public class ServerHelloMessage extends ByteStream { 9 | 10 | private PlayerSession player; 11 | private DataOutputStream writer; 12 | 13 | private int type = 20100, 14 | version = 0; 15 | 16 | public ServerHelloMessage(PlayerSession plr, DataOutputStream Writer) { 17 | 18 | super(28); 19 | this.writer = Writer; 20 | this.player = plr; 21 | 22 | } 23 | 24 | public void encode() { 25 | 26 | this.writeInt(24); 27 | for (var index = 0; index < 24; index++) { 28 | this.writeByte(0xFF); 29 | } 30 | 31 | new createMessage(type, version, this.getBytes()).send(this.writer); 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Server/Home/LobbyInfoMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Server.Home; 2 | 3 | import java.io.DataOutputStream; 4 | 5 | import java.lang.Thread; 6 | 7 | import com.java.brawl.sb.Sessions.PlayerSession; 8 | import com.java.brawl.sb.DataStream.ByteStream; 9 | import com.java.brawl.sb.Utils.createMessage; 10 | 11 | public class LobbyInfoMessage extends ByteStream { 12 | 13 | private PlayerSession player; 14 | private DataOutputStream writer; 15 | 16 | private int type = 23457, 17 | version = 0; 18 | 19 | public LobbyInfoMessage(PlayerSession plr, DataOutputStream Writer) { 20 | 21 | super(100); 22 | this.writer = Writer; 23 | this.player = plr; 24 | 25 | } 26 | 27 | public void encode() { 28 | 29 | this.writeVInt(Thread.activeCount() - 1); 30 | this.writeString("Java-Brawl"); 31 | this.writeVInt(0); 32 | 33 | new createMessage(type, version, this.getBytes()).send(this.writer); 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Server/Login/LoginOkMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Server.Login; 2 | import java.io.DataOutputStream; 3 | 4 | import com.java.brawl.sb.Sessions.PlayerSession; 5 | import com.java.brawl.sb.DataStream.ByteStream; 6 | import com.java.brawl.sb.Utils.createMessage; 7 | 8 | public class LoginOkMessage extends ByteStream { 9 | 10 | private PlayerSession player; 11 | private DataOutputStream writer; 12 | 13 | private int type = 20104, 14 | version = 1; 15 | 16 | public LoginOkMessage(PlayerSession plr, DataOutputStream Writer) { 17 | 18 | super(50); 19 | this.writer = Writer; 20 | this.player = plr; 21 | 22 | } 23 | 24 | public void encode() { 25 | 26 | this.writeInt(this.player.high_id); 27 | this.writeInt(this.player.low_id); 28 | 29 | this.writeInt(this.player.high_id); 30 | this.writeInt(this.player.low_id); 31 | 32 | this.writeString(this.player.token); 33 | 34 | new createMessage(type, version, this.getBytes()).send(this.writer); 35 | 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/Network/Server.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Network; 2 | 3 | import java.net.Socket; 4 | import java.io.IOException; 5 | import java.net.ServerSocket; 6 | import com.java.brawl.sb.Utils.Logger; 7 | import com.java.brawl.sb.CsvReader.CsvReader; 8 | import com.java.brawl.sb.Sessions.ClientSession; 9 | 10 | public class Server { 11 | 12 | public int serverPort; 13 | public CsvReader CsvNode; 14 | public void config(int port, CsvReader CsvNode) { 15 | serverPort = port; 16 | this.CsvNode = CsvNode; 17 | } 18 | 19 | public void Listen() { 20 | Logger console = new Logger(); 21 | try { 22 | 23 | ServerSocket server = new ServerSocket(serverPort); 24 | 25 | console.color( 26 | "white", "[socket] server listening on port: " + serverPort 27 | ); 28 | while (server.isBound()) { 29 | Socket client = server.accept(); 30 | new Thread(() -> { 31 | console.color( 32 | "cyan", "[socket] new connection: " + client.getRemoteSocketAddress() 33 | ); 34 | new ClientSession(client, this.CsvNode).createSession(); 35 | }).start(); 36 | 37 | } 38 | } catch (IOException e) { 39 | console.color( 40 | "red", "[error] failed in creating the socket server: " + e.getMessage() 41 | ); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Client/Login/LoginMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Client.Login; 2 | 3 | import java.io.DataOutputStream; 4 | 5 | import com.java.brawl.sb.Sessions.PlayerSession; 6 | import com.java.brawl.sb.DataStream.ByteStream; 7 | import com.java.brawl.sb.Messaging.Server.Login.LoginOkMessage; 8 | import com.java.brawl.sb.Messaging.Server.Home.OwnHomeDataMessage; 9 | 10 | public class LoginMessage extends ByteStream { 11 | 12 | private PlayerSession player; 13 | private DataOutputStream writer; 14 | 15 | public LoginMessage(PlayerSession plr, byte[] payload, DataOutputStream Writer) { 16 | 17 | super(payload); 18 | this.writer = Writer; 19 | this.player = plr; 20 | 21 | } 22 | 23 | public LoginMessage decode() { 24 | 25 | this.player.high_id = this.readInt(); 26 | this.player.low_id = this.readInt(); 27 | this.player.token = this.readString(); 28 | 29 | // change this part if you're going to make a database. 30 | this.player.high_id = 0; 31 | this.player.low_id = 1; 32 | this.player.token = "token"; 33 | 34 | return this; 35 | } 36 | 37 | public void process() { 38 | 39 | new LoginOkMessage(this.player, this.writer).encode(); 40 | 41 | new OwnHomeDataMessage(this.player, this.writer).encode(); 42 | 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/Messaging/createMessageByTypeForServer.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging; 2 | 3 | import java.io.DataOutputStream; 4 | 5 | import com.java.brawl.sb.Sessions.PlayerSession; 6 | 7 | import com.java.brawl.sb.Messaging.Client.ClientHelloMessage; 8 | import com.java.brawl.sb.Messaging.Client.Login.LoginMessage; 9 | import com.java.brawl.sb.Messaging.Client.Battle.GoHomeFromOfflinePractiseMessage; 10 | 11 | import com.java.brawl.sb.Messaging.Server.Home.LobbyInfoMessage; 12 | 13 | public class createMessageByTypeForServer { 14 | 15 | public PlayerSession player; 16 | public Boolean state; 17 | 18 | public createMessageByTypeForServer(PlayerSession a1) { 19 | this.player = a1; 20 | this.state = false; 21 | } 22 | 23 | public void process(int type, byte[] payload, DataOutputStream writer) { 24 | 25 | switch (type) { 26 | case 10100: 27 | new ClientHelloMessage(this.player, payload, writer) 28 | .decode() 29 | .process(); 30 | break; 31 | case 10101: 32 | new LoginMessage(this.player, payload, writer) 33 | .decode() 34 | .process(); 35 | this.state = true; 36 | break; 37 | case 14109: 38 | new GoHomeFromOfflinePractiseMessage(this.player, payload, writer) 39 | .decode() 40 | .process(); 41 | break; 42 | default: 43 | break; 44 | } 45 | 46 | if (this.state) { 47 | new LobbyInfoMessage(this.player, writer).encode(); 48 | } 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/Utils/createMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Utils; 2 | 3 | import java.nio.ByteBuffer; 4 | import java.io.IOException; 5 | import java.io.DataOutputStream; 6 | import com.java.brawl.sb.Utils.Logger; 7 | 8 | public class createMessage { 9 | 10 | private Logger console = new Logger(); 11 | 12 | private int type, version; 13 | 14 | private byte[] payload, header; 15 | 16 | public createMessage(int a1, int a2, byte[] a3) { 17 | this.type = a1; 18 | this.version = a2; 19 | this.payload = a3; 20 | this.header = new byte[7]; 21 | } 22 | 23 | public DataOutputStream write; 24 | 25 | public byte[] concat(byte[] a1, byte[] a2) { 26 | 27 | ByteBuffer buffer = ByteBuffer.wrap(new byte[a1.length + a2.length]); 28 | 29 | buffer.put(a1); 30 | buffer.put(a2); 31 | 32 | return buffer.array(); 33 | } 34 | 35 | public void setHeader() { 36 | this.header[0] = (byte)(type >> 8 & 0xFF); 37 | this.header[1] = (byte)(type & 0xFF); 38 | 39 | int len = this.payload.length; 40 | 41 | this.header[2] = (byte)(len >> 16 & 0xFF); 42 | this.header[3] = (byte)(len >> 8 & 0xFF); 43 | 44 | this.header[4] = (byte)(len & 0xFF); 45 | 46 | this.header[5] = (byte)(version >> 8 & 0xFF); 47 | this.header[6] = (byte)(version & 0xFF); 48 | } 49 | 50 | public void send(DataOutputStream Writer) { 51 | 52 | this.setHeader(); 53 | 54 | byte[] packet = this.concat(this.header, this.payload); 55 | 56 | try { 57 | Writer.write(packet); 58 | console.color( 59 | "yellow", 60 | "[socket] message of type: " + type + " was sent." 61 | ); 62 | } catch (IOException e) {} 63 | } 64 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Java-Brawl 2 | first open-source brawl stars private server written in java! (and first open-source v23 private server!) 3 | ## some stuff you should read 4 | thank you [Icaro](https://github.com/IsaaSooBarr) for OwnHomeDataMessage structure 5 | 6 | I did the code entirely from scratch by myself 7 | 8 | if you don't know java or don't know how to run it, please don't contact me asking how. 9 | 10 | if you want to learn from this project, feel free, just please don't ask me silly questions like 'how to run' (fun fact: I made it while learning Java) 11 | 12 | this is made as a good server base in java, you can implement other packets and a database by yourself 13 | 14 | have fun ^^ 15 | 16 | # setup the client 17 | this server don't use crypto, so you should disable it in the client. 18 | patch your own client. 19 | 20 | # how2run the server 21 | on android: 22 | 23 | install Jvdroid, open pom.xml and run it. 24 | 25 | on pc or others (basically anything that have java and maven installed in cmd): 26 | 27 | - run in the same directory that have pom.xml 28 | ``` 29 | mvn package 30 | ``` 31 | - it will create a jar file, usually in target folder, use cd to reach it then run this command 32 | ``` 33 | java -jar JavaBrawl-1.0.jar 34 | ``` 35 | 36 | another option if you don't want to modify the source and don't have maven installed is using the [pre-compiled](https://github.com/SB-9838/Java-Brawl/tree/main/pre-compiled) jar file 37 | 38 | # star 39 | give a 🌟 for this repo because why not! 40 | 41 | # issues 42 | any NON-silly questions or issues? 43 | 44 | contact me on discord: 45 | 46 | S.B#0056 47 | 48 | or join my [discord server](https://discord.gg/b2ejYcJjqA) 49 | 50 | any opened issue in this repository will be deleted. 51 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 4.0.0 5 | 6 | com.java.brawl.sb 7 | JavaBrawl 8 | 1.0 9 | 10 | 11 | UTF-8 12 | 11 13 | 11 14 | 15 | 16 | 17 | 18 | 19 | org.apache.maven.plugins 20 | maven-dependency-plugin 21 | 2.4 22 | 23 | 24 | copy-dependencies 25 | package 26 | 27 | copy-dependencies 28 | 29 | 30 | ${project.build.directory}/lib 31 | 32 | 33 | 34 | 35 | 36 | org.apache.maven.plugins 37 | maven-jar-plugin 38 | 2.4 39 | 40 | 41 | 42 | true 43 | lib/ 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | src/main/resources 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /src/main/java/Sessions/ClientSession.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Sessions; 2 | 3 | import java.io.*; 4 | import java.net.Socket; 5 | import java.io.DataInputStream; 6 | import java.io.DataOutputStream; 7 | import java.io.IOException; 8 | import com.java.brawl.sb.Utils.Logger; 9 | import com.java.brawl.sb.CsvReader.CsvReader; 10 | import com.java.brawl.sb.Sessions.PlayerSession; 11 | import com.java.brawl.sb.Messaging.createMessageByTypeForServer; 12 | 13 | public class ClientSession { 14 | 15 | public Logger console = new Logger(); 16 | public PlayerSession player; 17 | public createMessageByTypeForServer createMessageByType; 18 | public DataInputStream reader; 19 | public DataOutputStream writer; 20 | public Socket client; 21 | 22 | public ClientSession(Socket socket, CsvReader CsvNode) { 23 | this.client = socket; 24 | this.player = new PlayerSession(CsvNode); 25 | this.createMessageByType = new createMessageByTypeForServer(this.player); 26 | try { 27 | 28 | this.reader = new DataInputStream(this.client.getInputStream()); 29 | this.writer = new DataOutputStream(this.client.getOutputStream()); 30 | 31 | } catch (IOException e) { 32 | console.color( 33 | "red", "[error] failed to created client session for: " + client.getRemoteSocketAddress() 34 | ); 35 | } 36 | } 37 | public void createSession() { 38 | 39 | 40 | String peername = client.getRemoteSocketAddress().toString(); 41 | 42 | 43 | byte[] header, payload; 44 | int type, length; 45 | while (true) { 46 | header = new byte[7]; 47 | try { 48 | this.reader.read(header); 49 | } catch (IOException e) { 50 | break; 51 | } 52 | type = (((header[0] & 0xFF) << 8) | (header[1] & 0xFF)); 53 | length = (((header[2] & 0xFF) << 16) | ((header[3] & 0xFF) << 8) | (header[4] & 0xFF)); 54 | payload = new byte[length]; 55 | try { 56 | this.reader.read(payload); 57 | } catch (IOException e) { 58 | break; 59 | } 60 | if (type == 0) { 61 | break; 62 | } 63 | console.color( 64 | "blue", "[socket] received message with type: " + type 65 | ); 66 | this.createMessageByType.process(type, payload, this.writer); 67 | } 68 | try { 69 | this.reader.close(); 70 | this.writer.close(); 71 | this.client.close(); 72 | } catch (IOException e) { 73 | } 74 | console.color( 75 | "cyan", "[socket] " + peername + " disconnected" 76 | ); 77 | } 78 | } -------------------------------------------------------------------------------- /src/main/java/DataStream/ByteStream.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.DataStream; 2 | 3 | import java.util.Arrays; 4 | 5 | public class ByteStream { 6 | 7 | public byte[] payload; 8 | public int offset = 0; 9 | 10 | public ByteStream(int size) { 11 | this.payload = new byte[size]; 12 | } 13 | 14 | public ByteStream(byte[] bytes) { 15 | this.payload = bytes; 16 | } 17 | 18 | public void write(int a1) { 19 | byte v1 = (byte) a1; 20 | this.payload[offset] = v1; 21 | offset += 1; 22 | } 23 | public int read() { 24 | int result = (this.payload[offset] & 0xFF); 25 | offset += 1; 26 | return result; 27 | } 28 | public void writeUInt(int a1) { 29 | this.write(a1 & 0xFF); 30 | } 31 | public void writeByte(int a1) { 32 | this.write(a1); 33 | } 34 | public void writeBoolean(Boolean a1) { 35 | this.write(a1 ? 1 : 0); 36 | } 37 | public void writeInt(int a1) { 38 | this.write((a1 >> 24) & 0xFF); 39 | this.write((a1 >> 16) & 0xFF); 40 | this.write((a1 >> 8) & 0xFF); 41 | this.write(a1 & 0xFF); 42 | } 43 | public void writeString(String a1) { 44 | this.writeInt(a1.length()); 45 | int strOffset = 0; 46 | for (int index = 0; index < a1.getBytes().length; index++) { 47 | this.write(a1.getBytes()[strOffset]); 48 | strOffset += 1; 49 | } 50 | } 51 | public void writeString() { 52 | this.writeInt(-1); 53 | } 54 | 55 | public void writeVInt(int a1) { 56 | int v1, v2, v3; 57 | v1 = (((a1 >> 25) & 0x40) | (a1 & 0x3F)); 58 | v2 = ((a1 ^ (a1 >> 31)) >> 6); 59 | a1 >>= 6; 60 | if (v2 == 0) { 61 | this.writeByte(v1); 62 | } else { 63 | this.writeByte(v1 | 0x80); 64 | v2 >>= 7; 65 | v3 = 0; 66 | if (v2 > 0) { 67 | v3 = 0x80; 68 | } 69 | this.writeByte((a1 & 0x7F) | v3); 70 | a1 >>= 7; 71 | while (v2 != 0) { 72 | v2 >>= 7; 73 | v3 = 0; 74 | if (v2 > 0) { 75 | v3 = 0x80; 76 | } 77 | this.writeByte((a1 & 0x7F) | v3); 78 | a1 >>= 7; 79 | } 80 | } 81 | } 82 | 83 | public void writeDataReference(int a1) { 84 | this.writeVInt(a1); 85 | } 86 | 87 | public void writeDataReference(int a1, int a2) { 88 | this.writeVInt(a1); 89 | this.writeVInt(a2); 90 | } 91 | public int readInt() { 92 | return (this.read() << 24 | this.read() << 16 | this.read() << 8 | this.read()); 93 | } 94 | public byte readByte() { 95 | return (byte) this.read(); 96 | } 97 | public byte[] readBytes(int size) { 98 | byte[] result = new byte[size]; 99 | for (var index = 0; index < size; index++) { 100 | result[index] = this.readByte(); 101 | } 102 | return result; 103 | } 104 | public Boolean readBoolean() { 105 | Boolean result = false; 106 | if (this.read() >= 1) { 107 | result = true; 108 | } 109 | return result; 110 | } 111 | public String readString() { 112 | String result = ""; 113 | int len = this.readInt(); 114 | if (len <= 0) { 115 | return ""; 116 | } 117 | result = new String(this.readBytes(len)); 118 | return result; 119 | } 120 | // this method is discovered by nameless#1347 121 | public int readVInt() { 122 | int b = this.readByte(); 123 | int sign = b >> 6, ret = b & 0x3F, off = 3; 124 | while ((b & 0x80) != 0) { 125 | b = this.readByte(); 126 | ret |= b & 0x7F; 127 | off += 7; 128 | } 129 | if (sign == 0 || sign == 2) { 130 | return ret; 131 | } else { 132 | return ret | (-1 << off); 133 | } 134 | } 135 | public byte[] getBytes() { 136 | return Arrays.copyOfRange(this.payload, 0, this.offset); 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /src/main/java/CsvReader/CsvReader.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.CsvReader; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.io.FileReader; 6 | import java.io.IOException; 7 | import java.io.BufferedReader; 8 | import java.io.InputStreamReader; 9 | 10 | public class CsvReader { 11 | 12 | HashMap>> CsvData; 13 | 14 | public CsvReader() { 15 | this.CsvData = new HashMap<>(); 16 | } 17 | 18 | public void loadCSV(String name, String path) { 19 | HashMap> map = new HashMap<>(); 20 | String line = ""; 21 | HashMap header = new HashMap<>(); 22 | int index = 0; 23 | try { 24 | BufferedReader br = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream(path))); 25 | while ((line = br.readLine()) != null) { 26 | if (index == 0) { 27 | String[] data = line.replace("\"", "").split(","); 28 | for (int i = 0; i < data.length; i++) { 29 | header.put(i, data[i]); 30 | } 31 | } else if (index > 1) { 32 | String[] data = line.replace("\"", "").split(","); 33 | HashMap content = new HashMap<>(); 34 | for (int i = 0; i < data.length; i++) { 35 | if (data[i].length() == 0) { 36 | data[i] = "None"; 37 | } 38 | content.put(header.get(i), data[i]); 39 | } 40 | map.put(index - 2, content); 41 | } 42 | index += 1; 43 | } 44 | this.CsvData.put(name, map); 45 | } catch (IOException e) { 46 | System.out.println("error while loading csv: " + name + "\n" + e.getMessage()); 47 | System.exit(0); 48 | } 49 | System.out.println("[assets] loaded " + name); 50 | } 51 | 52 | public int getBrawlersCount() { 53 | int result = 0; 54 | for (int i = 0; i < this.CsvData.get("characters").size(); i++) { 55 | if (this.CsvData.get("characters").get(i).get("Type").equals("Hero")) { 56 | if (!this.CsvData.get("characters").get(i).get("Disabled").toLowerCase().equals("true") && !this.CsvData.get("characters").get(i).get("LockedForChronos").toLowerCase().equals("true")) { 57 | result += 1; 58 | } 59 | } 60 | } 61 | return result; 62 | } 63 | 64 | public Integer[] getBrawlersIDs() { 65 | ArrayList list = new ArrayList(); 66 | for (int i = 0; i < this.CsvData.get("characters").size(); i++) { 67 | if (this.CsvData.get("characters").get(i).get("Type").equals("Hero")) { 68 | if (!this.CsvData.get("characters").get(i).get("Disabled").toLowerCase().equals("true") && !this.CsvData.get("characters").get(i).get("LockedForChronos").toLowerCase().equals("true")) { 69 | list.add(i); 70 | } 71 | } 72 | } 73 | Integer[] result = new Integer[list.size()]; 74 | list.toArray(result); 75 | return result; 76 | } 77 | 78 | public int getBrawlerIDByName(String name) { 79 | int result = 0; 80 | for (int i = 0; i < this.CsvData.get("characters").size(); i++) { 81 | if (this.CsvData.get("characters").get(i).get("Name").equals(name)) { 82 | break; 83 | } 84 | result += 1; 85 | } 86 | return result; 87 | } 88 | 89 | public HashMap getBrawlerInfoByID(int id) { 90 | return this.CsvData.get("characters").get(id); 91 | } 92 | 93 | public int getSpecialAbilityIDByBrawlerID(int id) { 94 | String name = this.CsvData.get("characters").get(id).get("Name"); 95 | for (int i = 0; i < this.CsvData.get("cards").size(); i++) { 96 | if (this.CsvData.get("cards").get(i).get("Target").equals(name) && this.CsvData.get("cards").get(i).get("MetaType").equals("4")) { 97 | return i; 98 | } 99 | } 100 | return 0; 101 | } 102 | 103 | public int getSkinIDByBrawlerID(int id) { 104 | String name = this.CsvData.get("characters").get(id).get("DefaultSkin"); 105 | for (int i = 0; i < this.CsvData.get("skins").size(); i++) { 106 | if (this.CsvData.get("skins").get(i).get("Name").equals(name)) { 107 | return i; 108 | } 109 | } 110 | return 0; 111 | } 112 | 113 | public Integer[] getBrawlersSpecialAbilitiesIDs() { 114 | ArrayList list = new ArrayList(); 115 | for (int i = 0; i < this.CsvData.get("cards").size(); i++) { 116 | if (this.CsvData.get("cards").get(i).get("MetaType").equals("4")) { 117 | if (!this.CsvData.get("cards").get(i).get("LockedForChronos").toLowerCase().equals("true")) { 118 | HashMap info = this.getBrawlerInfoByID(this.getBrawlerIDByName(this.CsvData.get("cards").get(i).get("Target"))); 119 | if (!info.get("LockedForChronos").toLowerCase().equals("true") && !info.get("Disabled").toLowerCase().equals("true")) { 120 | list.add(i); 121 | } 122 | } 123 | } 124 | } 125 | Integer[] result = new Integer[list.size()]; 126 | list.toArray(result); 127 | return result; 128 | } 129 | 130 | public int getBrawlersSpecialAbilitiesCount() { 131 | int result = 0; 132 | for (int i = 0; i < this.CsvData.get("cards").size(); i++) { 133 | if (this.CsvData.get("cards").get(i).get("MetaType").equals("4")) { 134 | if (!this.CsvData.get("cards").get(i).get("LockedForChronos").toLowerCase().equals("true")) { 135 | HashMap info = this.getBrawlerInfoByID(this.getBrawlerIDByName(this.CsvData.get("cards").get(i).get("Target"))); 136 | if (!info.get("LockedForChronos").toLowerCase().equals("true") && !info.get("Disabled").toLowerCase().equals("true")) { 137 | result += 1; 138 | } 139 | } 140 | } 141 | } 142 | return result; 143 | } 144 | 145 | public Integer[] getBrawlersUnlockIDs() { 146 | ArrayList list = new ArrayList(); 147 | for (int i = 0; i < this.CsvData.get("cards").size(); i++) { 148 | if (this.CsvData.get("cards").get(i).get("MetaType").equals("0")) { 149 | if (!this.CsvData.get("cards").get(i).get("LockedForChronos").toLowerCase().equals("true")) { 150 | HashMap info = this.getBrawlerInfoByID(this.getBrawlerIDByName(this.CsvData.get("cards").get(i).get("Target"))); 151 | if (!info.get("LockedForChronos").toLowerCase().equals("true") && !info.get("Disabled").toLowerCase().equals("true")) { 152 | list.add(i); 153 | } 154 | } 155 | } 156 | } 157 | Integer[] result = new Integer[list.size()]; 158 | list.toArray(result); 159 | return result; 160 | } 161 | 162 | public Integer[] getSkinsIDs() { 163 | ArrayList list = new ArrayList(); 164 | for (int i = 0; i < this.CsvData.get("skins").size(); i++) { 165 | if (!this.CsvData.get("skins").get(i).get("Name").equals("None")) { 166 | list.add(i); 167 | } 168 | } 169 | Integer[] result = new Integer[list.size()]; 170 | result = list.toArray(result); 171 | return result; 172 | } 173 | 174 | public int getSkinsCount() { 175 | int result = 0; 176 | for (int i = 0; i < this.CsvData.get("skins").size(); i++) { 177 | if (!this.CsvData.get("skins").get(i).get("Name").equals("None")) { 178 | result += 1; 179 | } 180 | } 181 | return result; 182 | } 183 | 184 | public void init(String path) { 185 | this.loadCSV("characters", path + "characters.csv"); 186 | this.loadCSV("cards", path + "cards.csv"); 187 | this.loadCSV("skins", path + "skins.csv"); 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /src/main/java/Messaging/Server/Home/OwnHomeDataMessage.java: -------------------------------------------------------------------------------- 1 | package com.java.brawl.sb.Messaging.Server.Home; 2 | 3 | import java.io.DataOutputStream; 4 | 5 | import com.java.brawl.sb.Sessions.PlayerSession; 6 | import com.java.brawl.sb.DataStream.ByteStream; 7 | import com.java.brawl.sb.Utils.createMessage; 8 | import com.java.brawl.sb.Utils.EventsManager; 9 | 10 | public class OwnHomeDataMessage extends ByteStream { 11 | 12 | private PlayerSession player; 13 | private DataOutputStream writer; 14 | 15 | private int type = 24101, 16 | version = 0; 17 | 18 | public OwnHomeDataMessage(PlayerSession plr, DataOutputStream Writer) { 19 | 20 | super(5000); 21 | this.writer = Writer; 22 | this.player = plr; 23 | 24 | } 25 | 26 | public void encode() { 27 | 28 | this.writeVInt(0); 29 | this.writeVInt(0); 30 | 31 | this.writeVInt(15000); // Trophies 32 | this.writeVInt(15000); // Highest Trophies 33 | 34 | this.writeVInt(0); 35 | this.writeVInt(95); // unlocked trophy road rewards 36 | this.writeVInt(99999); // exp 37 | 38 | this.writeDataReference(28, 0); // Profile Icon id 39 | this.writeDataReference(43, 0); // Player name color id 40 | 41 | this.writeVInt(0); 42 | 43 | this.writeVInt(1); // Selected skins array 44 | this.writeDataReference(29, this.player.skin_id); 45 | 46 | this.writeVInt(this.player.csv.getSkinsCount()); // Unlocked skins array 47 | for (int ID : this.player.csv.getSkinsIDs()) { 48 | this.writeDataReference(29, ID); 49 | } 50 | 51 | this.writeVInt(0); 52 | this.writeVInt(0); 53 | this.writeVInt(0); 54 | 55 | this.writeBoolean(false); 56 | this.writeVInt(1); 57 | this.writeBoolean(true); 58 | 59 | this.writeVInt(0); // token doubler count 60 | this.writeVInt(3600); // season end timer 61 | 62 | this.writeVInt(0); 63 | this.writeVInt(0); 64 | this.writeVInt(0); 65 | this.writeVInt(0); 66 | this.writeByte(8); 67 | 68 | this.writeBoolean(false); 69 | this.writeBoolean(false); 70 | this.writeBoolean(false); 71 | 72 | this.writeVInt(0); // change name cost 73 | this.writeVInt(0); // time left to change name 74 | 75 | this.writeVInt(0); // shop array 76 | this.writeVInt(0); 77 | this.writeVInt(200); // Battle Tokens 78 | this.writeVInt(0); 79 | 80 | this.writeVInt(0); 81 | 82 | this.writeVInt(99999); // Tickets count 83 | 84 | this.writeVInt(0); 85 | 86 | this.writeDataReference(16, this.player.brawler_id); // Selected Brawler 87 | 88 | this.writeString("LB"); // region 89 | this.writeString("S.B"); // supported cc 90 | 91 | this.writeVInt(0); 92 | this.writeVInt(0); 93 | this.writeVInt(0); 94 | this.writeVInt(0); 95 | 96 | this.writeVInt(2019049); 97 | this.writeVInt(100); // Tokens for a brawl box 98 | // SHOP BRAWL BOX 99 | this.writeVInt(10); 100 | // SHOP BIGBOX 101 | this.writeVInt(30); 102 | this.writeVInt(3); 103 | // SHOP MEGABOX 104 | this.writeVInt(80); 105 | this.writeVInt(10); 106 | // SHOP TOKENDOUBLER 107 | this.writeVInt(50); 108 | this.writeVInt(1000); 109 | 110 | this.writeVInt(500); 111 | 112 | this.writeVInt(50); 113 | this.writeVInt(999900); 114 | 115 | this.writeVInt(1); 116 | this.writeVInt(1); 117 | 118 | int[][] events = EventsManager.events; 119 | 120 | // event slots ids 121 | this.writeVInt(events.length + 1); 122 | for (int x = 0; x < events.length + 1 ; x++) { 123 | this.writeVInt(x); 124 | } 125 | // end 126 | 127 | // EventSlots 128 | this.writeVInt(events.length); // count 129 | for (int index = 0; index < events.length; index++) { 130 | this.writeVInt(index + 1); 131 | this.writeVInt(index + 1); // index 132 | this.writeVInt(0); // new event timer 133 | this.writeVInt(99999); // timer 134 | this.writeVInt(0); // New event reward ammount 135 | this.writeDataReference(15, events[index][0]); // map ID 136 | this.writeVInt(3); // status 137 | this.writeString(); 138 | this.writeVInt(0); 139 | this.writeVInt(0); // pp game played 140 | this.writeVInt(0); // pp games left 141 | this.writeVInt(events[index].length - 1); // Modifiers count 142 | for (int m = 1; m < events[index].length; m++) { 143 | this.writeVInt(events[index][m]); // Modifier ID 144 | } 145 | this.writeVInt(16); // special event difficulty level 146 | } 147 | // end 148 | this.writeVInt(0); // next event slots array 149 | // shop 150 | this.writeVInt(8); 151 | int[] i_1 = {20, 35, 75, 140, 290, 480, 800, 1250}; 152 | for (int i : i_1) { 153 | this.writeVInt(i); 154 | } 155 | this.writeVInt(8); 156 | int[] i_2 = {1, 2, 3, 4, 5, 10, 15, 20}; 157 | for (int i : i_2) { 158 | this.writeVInt(i); 159 | } 160 | this.writeVInt(3); 161 | int[] i_3 = {10, 30, 80}; 162 | for (int i : i_3) { 163 | this.writeVInt(i); 164 | } 165 | this.writeVInt(3); 166 | int[] i_4 = {6, 20, 60}; 167 | for (int i : i_4) { 168 | this.writeVInt(i); 169 | } 170 | this.writeVInt(4); 171 | int[] i_5 = {20, 50, 140, 280}; 172 | for (int i : i_5) { 173 | this.writeVInt(i); 174 | } 175 | this.writeVInt(4); 176 | int[] i_6 = {150, 400, 1200, 2600}; 177 | for (int i : i_6) { 178 | this.writeVInt(i); 179 | } 180 | // end 181 | this.writeVInt(0); 182 | this.writeVInt(200); 183 | this.writeVInt(20); 184 | 185 | this.writeVInt(8640); 186 | this.writeVInt(10); 187 | this.writeVInt(5); 188 | 189 | this.writeVInt(6); 190 | 191 | this.writeVInt(50); 192 | this.writeVInt(604800); 193 | 194 | this.writeBoolean(true); 195 | 196 | this.writeVInt(0); // array 197 | 198 | this.writeVInt(1); // menu theme 199 | this.writeInt(1); 200 | this.writeInt(41000000); // theme id 201 | 202 | this.writeInt(this.player.high_id); 203 | this.writeInt(this.player.low_id); 204 | 205 | this.writeVInt(0); // array 206 | this.writeBoolean(true); 207 | this.writeVInt(0); 208 | this.writeVInt(0); 209 | // player data 210 | this.writeVInt(this.player.high_id); 211 | this.writeVInt(this.player.low_id); 212 | 213 | this.writeVInt(this.player.high_id); 214 | this.writeVInt(this.player.low_id); 215 | 216 | this.writeVInt(this.player.high_id); 217 | this.writeVInt(this.player.low_id); 218 | 219 | this.writeString("S.B"); // Player name 220 | this.writeVInt(1); // name state 221 | this.writeInt(0); 222 | this.writeVInt(8); 223 | 224 | // Unlocked Brawlers & Resources Array 225 | 226 | int brawlers_count = this.player.csv.getBrawlersCount(); 227 | Integer[] brawlers_ids = this.player.csv.getBrawlersIDs(); 228 | 229 | this.writeVInt(brawlers_count + 4); 230 | 231 | for (int ID : this.player.csv.getBrawlersUnlockIDs()) { 232 | this.writeDataReference(23, ID); 233 | this.writeVInt(1); 234 | } 235 | 236 | this.writeDataReference(5, 1); 237 | this.writeVInt(0); // brawl boxes 238 | 239 | this.writeDataReference(5, 8); 240 | this.writeVInt(99999); // gold 241 | 242 | this.writeDataReference(5, 9); 243 | this.writeVInt(0); // big boxes 244 | 245 | this.writeDataReference(5, 10); 246 | this.writeVInt(99999); // star points 247 | 248 | // Brawlers Trophies array 249 | this.writeVInt(brawlers_count); 250 | for (int ID : brawlers_ids) { 251 | this.writeDataReference(16, ID); 252 | this.writeVInt(99999); 253 | } 254 | 255 | // Brawlers Rank Trophies array 256 | this.writeVInt(brawlers_count); 257 | for (int ID : brawlers_ids) { 258 | this.writeDataReference(16, ID); 259 | this.writeVInt(99999); 260 | } 261 | 262 | this.writeVInt(0); 263 | 264 | // Brawlers PowerPoints array 265 | this.writeVInt(brawlers_count); 266 | for (int ID : brawlers_ids) { 267 | this.writeDataReference(16, ID); 268 | this.writeVInt(0); 269 | } 270 | 271 | // Brawlers levels array 272 | this.writeVInt(brawlers_count); 273 | for (int ID : brawlers_ids) { 274 | this.writeDataReference(16, ID); 275 | this.writeVInt(8); 276 | } 277 | 278 | // unlocked/selected special abilities array 279 | this.writeVInt(this.player.csv.getBrawlersSpecialAbilitiesCount()); 280 | for (int ID : this.player.csv.getBrawlersSpecialAbilitiesIDs()) { 281 | this.writeDataReference(23, ID); 282 | if (ID == this.player.sp_id) { 283 | this.writeVInt(2); 284 | } else { 285 | this.writeVInt(1); 286 | } 287 | } 288 | 289 | this.writeVInt(0); 290 | 291 | this.writeVInt(99999); // gems 292 | this.writeVInt(0); 293 | this.writeVInt(1); 294 | for (int i = 0; i < 8; i++) { 295 | this.writeVInt(0); 296 | } 297 | this.writeVInt(2); // Tutorial state 298 | this.writeVInt(0); 299 | 300 | new createMessage(type, version, this.getBytes()).send(this.writer); 301 | 302 | } 303 | 304 | } 305 | -------------------------------------------------------------------------------- /src/main/resources/Assets/cards.csv: -------------------------------------------------------------------------------- 1 | Name,IconSWF,IconExportName,Target,LockedForChronos,MetaType,RequiresCard,Type,Skill,Value,Value2,Value3,Rarity,TID,PowerNumberTID,PowerNumber2TID,PowerIcon1ExportName,PowerIcon2ExportName,SortOrder,DontUpgradeStat 2 | String,String,String,String,boolean,int,String,String,String,int,int,int,String,String,String,String,String,String,int,boolean 3 | ShotgunGirl_unlock,sc/ui.sc,,ShotgunGirl,,0,,unlock,,,,,common,,,,,,0, 4 | ShotgunGirl_hp,sc/ui.sc,health_icon,ShotgunGirl,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 5 | ShotgunGirl_abi,sc/ui.sc,attack_icon,ShotgunGirl,,2,,skill,ShotgunGirlWeapon,,,,common,TID_LONG_RANGE_SHOTGUN,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 6 | ShotgunGirl_ulti,sc/ui.sc,ulti_icon,ShotgunGirl,,3,,skill,ShotgunGirlUlti,,,,common,TID_MEGA_BLASH_ULTI,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 7 | Gunslinger_unlock,sc/ui.sc,,Gunslinger,,0,,unlock,,,,,common,,,,,,2, 8 | Gunslinger_hp,sc/ui.sc,health_icon,Gunslinger,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 9 | Gunslinger_abi,sc/ui.sc,attack_icon,Gunslinger,,2,,skill,GunslingerWeapon,,,,common,TID_RAPID_FIRE,TID_STAT_DAMAGE_PER_SHOT,,genicon_damage,,, 10 | Gunslinger_ulti,sc/ui.sc,ulti_icon,Gunslinger,,3,,skill,GunslingerUlti,,,,common,TID_RAPID_FIRE_ULTI,TID_STAT_DAMAGE_PER_SHOT,,genicon_damage,,, 11 | BullDude_unlock,sc/ui.sc,,BullDude,,0,,unlock,,,,,common,,,,,,3, 12 | BullDude_hp,sc/ui.sc,health_icon,BullDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 13 | BullDude_abi,sc/ui.sc,attack_icon,BullDude,,2,,skill,BullDudeWeapon,,,,common,TID_SHOTGUN_BLAST,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 14 | BullDude_ulti,sc/ui.sc,ulti_icon,BullDude,,3,,skill,BullDudeUlti,,,,common,TID_CHARGE,TID_STAT_DAMAGE,,genicon_damage,,, 15 | RocketGirl_unlock,sc/ui.sc,,RocketGirl,,0,,unlock,,,,,common,,,,,,5, 16 | RocketGirl_hp,sc/ui.sc,health_icon,RocketGirl,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 17 | RocketGirl_abi,sc/ui.sc,attack_icon,RocketGirl,,2,,skill,RocketGirlWeapon,,,,common,TID_FIREWORKS_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 18 | RocketGirl_ulti,sc/ui.sc,ulti_icon,RocketGirl,,3,,skill,RocketGirlUlti,,,,common,TID_FIREWORKS_ULTI,TID_STAT_MISSILE_DAMAGE,,genicon_damage,,, 19 | TrickshotDude_unlock,sc/ui.sc,,TrickshotDude,,0,,unlock,,,,,super_rare,,,,,,15, 20 | TrickshotDude_hp,sc/ui.sc,health_icon,TrickshotDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 21 | TrickshotDude_abi,sc/ui.sc,attack_icon,TrickshotDude,,2,,skill,TrickshotDudeWeapon,,,,common,TID_TRICKSHOT_DUDE_WEAPON,TID_STAT_DAMAGE_PER_SHOT,,genicon_damage,,, 22 | TrickshotDude_ulti,sc/ui.sc,ulti_icon,TrickshotDude,,3,,skill,TrickshotDudeUlti,,,,common,TID_TRICKSHOT_DUDE_ULTI,TID_STAT_DAMAGE_PER_SHOT,,genicon_damage,,, 23 | Cactus_unlock,sc/ui.sc,,Cactus,,0,,unlock,,,,,legendary,,,,,,26, 24 | Cactus_hp,sc/ui.sc,health_icon,Cactus,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 25 | Cactus_abi,sc/ui.sc,attack_icon,Cactus,,2,,skill,CactusWeapon,,,,common,TID_CACTUS_WEAPON,TID_STAT_DAMAGE_PER_SPIKE,,genicon_damage,,, 26 | Cactus_ulti,sc/ui.sc,ulti_icon,Cactus,,3,,skill,CactusUlti,,,,common,TID_CACTUS_ULTI,TID_STAT_DAMAGE_PER_SECOND,,genicon_damage,,, 27 | Barkeep_unlock,sc/ui.sc,,Barkeep,,0,,unlock,,,,,rare,,,,,,12, 28 | Barkeep_hp,sc/ui.sc,health_icon,Barkeep,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 29 | Barkeep_abi,sc/ui.sc,attack_icon,Barkeep,,2,,skill,BarkeepWeapon,,,,common,TID_BARKEEP_WEAPON,TID_STAT_DAMAGE_PER_SECOND,,genicon_damage,,, 30 | Barkeep_ulti,sc/ui.sc,ulti_icon,Barkeep,,3,,skill,BarkeepUlti,,,,common,TID_BARKEEP_ULTI,TID_STAT_DAMAGE_PER_SECOND_EACH,,genicon_damage,,, 31 | Mechanic_unlock,sc/ui.sc,,Mechanic,,0,,unlock,,,,,common,,,,,,4, 32 | Mechanic_hp,sc/ui.sc,health_icon,Mechanic,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 33 | Mechanic_abi,sc/ui.sc,attack_icon,Mechanic,,2,,skill,MechanicWeapon,,,,common,TID_MECHANIC_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 34 | Mechanic_ulti,sc/ui.sc,ulti_icon,Mechanic,,3,,skill,MechanicUlti,,,,common,TID_MECHANIC_ULTI,TID_TURRET_DAMAGE,TID_TURRET_HEALTH,genicon_damage,genicon_health,, 35 | Shaman_unlock,sc/ui.sc,,Shaman,,0,,unlock,,,,,common,,,,,,1, 36 | Shaman_hp,sc/ui.sc,health_icon,Shaman,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 37 | Shaman_abi,sc/ui.sc,attack_icon,Shaman,,2,,skill,ShamanWeapon,,,,common,TID_SHAMAN_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 38 | Shaman_ulti,sc/ui.sc,ulti_icon,Shaman,,3,,skill,ShamanUlti,,,,common,TID_SHAMAN_ULTI,TID_BEAR_DAMAGE,TID_BEAR_HEALTH,genicon_damage,genicon_health,, 39 | TntDude_unlock,sc/ui.sc,,TntDude,,0,,unlock,,,,,common,,,,,,6, 40 | TntDude_hp,sc/ui.sc,health_icon,TntDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 41 | TntDude_abi,sc/ui.sc,attack_icon,TntDude,,2,,skill,TntDudeWeapon,,,,common,TID_MORTAR,TID_STAT_PER_DYNAMITE,,genicon_damage,,, 42 | TntDude_ulti,sc/ui.sc,ulti_icon,TntDude,,3,,skill,TntDudeUlti,,,,common,TID_MORTAR_ULTI,TID_STAT_DAMAGE,,genicon_damage,,, 43 | Luchador_unlock,sc/ui.sc,,Luchador,,0,,unlock,,,,,rare,,,,,,11, 44 | Luchador_hp,sc/ui.sc,health_icon,Luchador,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 45 | Luchador_abi,sc/ui.sc,attack_icon,Luchador,,2,,skill,LuchadorWeapon,,,,common,TID_LUCHADOR_WEAPON,TID_STAT_DAMAGE_PER_STRIKE,,genicon_damage,,, 46 | Luchador_ulti,sc/ui.sc,ulti_icon,Luchador,,3,,skill,LuchadorUlti,,,,common,TID_LUCHADOR_ULTI,TID_STAT_DAMAGE,,genicon_damage,,, 47 | Undertaker_unlock,sc/ui.sc,,Undertaker,,0,,unlock,,,,,mega_epic,,,,,,23, 48 | Undertaker_hp,sc/ui.sc,health_icon,Undertaker,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 49 | Undertaker_abi,sc/ui.sc,attack_icon,Undertaker,,2,,skill,UndertakerWeapon,,,,common,TID_UNDERTAKER_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 50 | Undertaker_ulti,sc/ui.sc,ulti_icon,Undertaker,,3,,skill,UndertakerUlti,,,,common,TID_UNDERTAKER_ULTI,TID_STAT_DAMAGE,,genicon_damage,,, 51 | Crow_unlock,sc/ui.sc,,Crow,,0,,unlock,,,,,legendary,,,,,,27, 52 | Crow_hp,sc/ui.sc,health_icon,Crow,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 53 | Crow_abi,sc/ui.sc,attack_icon,Crow,,2,,skill,CrowWeapon,,,,common,TID_CROW_WEAPON,TID_STAT_DAMAGE_PER_DAGGER,,genicon_damage,,, 54 | Crow_ulti,sc/ui.sc,ulti_icon,Crow,,3,,skill,CrowUlti,,,,common,TID_CROW_ULTI,TID_STAT_DAMAGE_PER_DAGGER,,genicon_damage,,, 55 | DeadMariachi_unlock,sc/ui.sc,,DeadMariachi,,0,,unlock,,,,,rare,,,,,,13, 56 | DeadMariachi_hp,sc/ui.sc,health_icon,DeadMariachi,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 57 | DeadMariachi_abi,sc/ui.sc,attack_icon,DeadMariachi,,2,,skill,DeadMariachiWeapon,,,,common,TID_DEAD_MARIACHI_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 58 | DeadMariachi_ulti,sc/ui.sc,ulti_icon,DeadMariachi,,3,,skill,DeadMariachiUlti,,,,common,TID_DEAD_MARIACHI_ULTI,TID_STAT_HEAL,,genicon_health,,, 59 | BowDude_unlock,sc/ui.sc,,BowDude,,0,,unlock,,,,,common,,,,,,7, 60 | BowDude_hp,sc/ui.sc,health_icon,BowDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 61 | BowDude_abi,sc/ui.sc,attack_icon,BowDude,,2,,skill,BowDudeWeapon,,,,common,TID_BOW_DUDE_WEAPON,TID_STAT_DAMAGE_PER_ARROW,,genicon_damage,,, 62 | BowDude_ulti,sc/ui.sc,ulti_icon,BowDude,,3,,skill,BowDudeUlti,,,,common,TID_BOW_DUDE_ULTI,TID_STAT_DAMAGE_PER_MINE,,genicon_damage,,, 63 | Sniper_unlock,sc/ui.sc,,Sniper,,0,,unlock,,,,,epic,,,,,,19, 64 | Sniper_hp,sc/ui.sc,health_icon,Sniper,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 65 | Sniper_abi,sc/ui.sc,attack_icon,Sniper,,2,,skill,SniperWeapon,,,,common,TID_SNIPER_WEAPON,TID_STAT_MAX_DAMAGE,,genicon_damage,,, 66 | Sniper_ulti,sc/ui.sc,ulti_icon,Sniper,,3,,skill,SniperUlti,,,,common,TID_SNIPER_ULTI,TID_STAT_DAMAGE_PER_BOMB,,genicon_damage,,, 67 | MinigunDude_unlock,sc/ui.sc,,MinigunDude,,0,,unlock,,,,,epic,,,,,,20, 68 | MinigunDude_hp,sc/ui.sc,health_icon,MinigunDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 69 | MinigunDude_abi,sc/ui.sc,attack_icon,MinigunDude,,2,,skill,MinigunDudeWeapon,,,,common,TID_MINIGUN_DUDE_WEAPON,TID_STAT_DAMAGE_PER_SHOT,,genicon_damage,,, 70 | MinigunDude_ulti,sc/ui.sc,ulti_icon,MinigunDude,,3,,skill,MinigunDudeUlti,,,,common,TID_MINIGUN_DUDE_ULTI,TID_STAT_HEALING_PER_SEC,TID_TURRET_HEALTH,genicon_heal,genicon_health,, 71 | BlackHole_unlock,sc/ui.sc,,BlackHole,,0,,unlock,,,,,mega_epic,,,,,,24, 72 | BlackHole_hp,sc/ui.sc,health_icon,BlackHole,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 73 | BlackHole_abi,sc/ui.sc,attack_icon,BlackHole,,2,,skill,BlackHoleWeapon,,,,common,TID_BLACK_HOLE_WEAPON,TID_STAT_DAMAGE_PER_CARD,,genicon_damage,,, 74 | BlackHole_ulti,sc/ui.sc,ulti_icon,BlackHole,,3,,skill,BlackHoleUlti,,,,common,TID_BLACK_HOLE_ULTI,TID_STAT_DAMAGE,,genicon_damage,,, 75 | BarrelBot_unlock,sc/ui.sc,,BarrelBot,,0,,unlock,,,,,super_rare,,,,,,16, 76 | BarrelBot_hp,sc/ui.sc,health_icon,BarrelBot,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 77 | BarrelBot_abi,sc/ui.sc,attack_icon,BarrelBot,,2,,skill,BarrelBotWeapon,,,,common,TID_BARREL_BOT_WEAPON,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 78 | BarrelBot_ulti,sc/ui.sc,ulti_icon,BarrelBot,,3,,skill,BarrelBotUlti,,,,common,TID_BARREL_BOT_ULTI,TID_STAT_DAMAGE,,genicon_damage,,, 79 | ShotgunGirl_unique,sc/ui.sc,icon_eiuD,ShotgunGirl,,4,,freeze,,60,350,,common,TID_SPEC_ABI_FREEZE,,,genicon_health,,, 80 | Gunslinger_unique,sc/ui.sc,icon_eiuD,Gunslinger,,4,,speed,,75,,,common,TID_SPEC_ABI_SPEED,,,genicon_health,,, 81 | BullDude_unique,sc/ui.sc,icon_eiuD,BullDude,,4,,berserker,,40,,,common,TID_SPEC_ABI_BERSERKER,,,genicon_health,,, 82 | RocketGirl_unique,sc/ui.sc,icon_eiuD,RocketGirl,,4,,main_attack_burn,,600,,,common,TID_SPEC_BURN,,,genicon_health,,, 83 | TrickshotDude_unique,sc/ui.sc,icon_eiuD,TrickshotDude,,4,,bounced_bullets_stronger,,100,,,common,TID_SPEC_BOUNCED_BULLETS_STRONGER,,,genicon_health,,, 84 | Cactus_unique,sc/ui.sc,icon_eiuD,Cactus,,4,,cactus_heal,,800,,,common,TID_SPEC_ABI_CACTUS_HEAL,,,genicon_health,,, 85 | Barkeep_unique,sc/ui.sc,icon_eiuD,Barkeep,,4,,heal_self_main_attack,,400,,,common,TID_SPEC_ABI_HEAL_SELF_MAIN_ATTACK,,,genicon_health,,, 86 | Mechanic_unique,sc/ui.sc,icon_eiuD,Mechanic,,4,,repair_turret,,800,,,common,TID_SPEC_ABI_REPAIR_TURRET,,,genicon_health,,, 87 | Shaman_unique,sc/ui.sc,icon_eiuD,Shaman,,4,,pet_lifesteal,,500,500,,common,TID_SPEC_ABI_PET_LIFESTEAL,,,genicon_health,,, 88 | TntDude_unique,sc/ui.sc,icon_eiuD,TntDude,,4,,pushback_self,,972,,,common,TID_SPEC_ABI_PUSHBACK_SELF,,,genicon_health,,, 89 | Luchador_unique,sc/ui.sc,icon_eiuD,Luchador,,4,,fire_dot_ulti,,1200,,,common,TID_SPEC_ABI_FIRE_DOT_ULTI,,,genicon_health,,, 90 | Undertaker_unique,sc/ui.sc,icon_eiuD,Undertaker,,4,,steal_souls,,1800,,,common,TID_SPEC_ABI_STEAL_SOULS,,,genicon_health,,, 91 | Crow_unique,sc/ui.sc,icon_eiuD,Crow,,4,,cripple,,20,,,common,TID_SPEC_CRIPPLE,,,genicon_health,,, 92 | DeadMariachi_unique,sc/ui.sc,icon_eiuD,DeadMariachi,,4,,heal_main_attack,,800,,,common,TID_SPEC_HEAL_MAIN_ATTACK,,,genicon_health,,, 93 | BowDude_unique,sc/ui.sc,icon_eiuD,BowDude,,4,,spot,,5,,,common,TID_SPEC_ABI_SPOT,,,genicon_health,,, 94 | Sniper_unique,sc/ui.sc,icon_eiuD,Sniper,,4,,ambush,,800,,,common,TID_SPEC_ABI_AMBUSH,,,genicon_health,,, 95 | MinigunDude_unique,sc/ui.sc,icon_eiuD,MinigunDude,,4,,heal_others_main_attack,,40,,,common,TID_SPEC_ABI_HEAL_OTHERS_MAIN_ATTACK,,,genicon_health,,, 96 | BlackHole_unique,sc/ui.sc,icon_eiuD,BlackHole,,4,,black_hole_monster,,1,,,common,TID_SPEC_ABI_BLACK_HOLE_MONSTER,,,genicon_health,,, 97 | BarrelBot_unique,sc/ui.sc,icon_eiuD,BarrelBot,,4,,barrel_defense,,70,30,,common,TID_SPEC_ABI_BARREL_DEFENSE,,,genicon_health,,, 98 | ArtilleryDude_unlock,sc/ui.sc,,ArtilleryDude,,0,,unlock,,,,,super_rare,,,,,,17, 99 | ArtilleryDude_hp,sc/ui.sc,health_icon,ArtilleryDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 100 | ArtilleryDude_abi,sc/ui.sc,attack_icon,ArtilleryDude,,2,,skill,ArtilleryDudeWeapon,,,,common,TID_ARTILLERY_DUDE_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 101 | ArtilleryDude_ulti,sc/ui.sc,ulti_icon,ArtilleryDude,,3,,skill,ArtilleryDudeUlti,,,,common,TID_ARTILLERY_DUDE_ULTI,TID_CANNON_DAMAGE,TID_CANNON_HEALTH,genicon_damage,genicon_health,, 102 | ArtilleryDude_unique,sc/ui.sc,icon_eiuD,ArtilleryDude,,4,,self_destruct,,1680,,,common,TID_SPEC_ABI_SELF_DESTRUCT,,,genicon_health,,, 103 | HammerDude_unlock,sc/ui.sc,,HammerDude,,0,,unlock,,,,,epic,,,,,,21, 104 | HammerDude_hp,sc/ui.sc,health_icon,HammerDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 105 | HammerDude_abi,sc/ui.sc,attack_icon,HammerDude,,2,,skill,HammerDudeWeapon,,,,common,TID_HAMMER_DUDE_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 106 | HammerDude_ulti,sc/ui.sc,ulti_icon,HammerDude,,3,,skill,HammerDudeUlti,,,,common,TID_HAMMER_DUDE_ULTI,TID_STAT_DAMAGE,,genicon_damage,genicon_health,, 107 | HammerDude_unique,sc/ui.sc,icon_eiuD,HammerDude,,4,,steal_souls2,,50,12,,common,TID_SPEC_ABI_STEAL_SOULS2,,,genicon_health,,, 108 | HookDude_unlock,sc/ui.sc,,HookDude,,0,,unlock,,,,,mega_epic,,,,,,25, 109 | HookDude_hp,sc/ui.sc,health_icon,HookDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 110 | HookDude_abi,sc/ui.sc,attack_icon,HookDude,,2,,skill,HookWeapon,,,,common,TID_HOOK_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 111 | HookDude_ulti,sc/ui.sc,ulti_icon,HookDude,,3,,skill,HookUlti,,,,common,TID_HOOK_ULTI,TID_HOOK_ULTI,,genicon_damage,,, 112 | HookDude_unique,sc/ui.sc,icon_eiuD,HookDude,,4,,aoe_regenerate,,400,,,common,TID_SPEC_ABI_HOOK,,,genicon_health,,, 113 | ClusterBombDude_unlock,sc/ui.sc,,ClusterBombDude,,0,,unlock,,,,,common,,,,,,8, 114 | ClusterBombDude_hp,sc/ui.sc,health_icon,ClusterBombDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 115 | ClusterBombDude_abi,sc/ui.sc,attack_icon,ClusterBombDude,,2,,skill,ClusterBombDudeWeapon,,,,common,TID_CLUSTER_BOMB_DUDE_WEAPON,TID_STAT_DAMAGE_PER_PROXIMITY_MINE,,genicon_damage,,, 116 | ClusterBombDude_ulti,sc/ui.sc,ulti_icon,ClusterBombDude,,3,,skill,ClusterBombDudeUlti,,,,common,TID_CLUSTER_BOMB_DUDE_ULTI,TID_STAT_DAMAGE,TID_HEAD_HEALTH,genicon_damage,,, 117 | ClusterBombDude_unique,sc/ui.sc,icon_eiuD,ClusterBombDude,,4,,repair_self,,40,,,common,TID_SPEC_ABI_REPAIR_SELF,,,genicon_health,,, 118 | Ninja_unlock,sc/ui.sc,,Ninja,,0,,unlock,,,,,legendary,,,,,,28, 119 | Ninja_hp,sc/ui.sc,health_icon,Ninja,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 120 | Ninja_abi,sc/ui.sc,attack_icon,Ninja,,2,,skill,NinjaWeapon,,,,common,TID_NINJA_WEAPON,TID_STAT_DAMAGE_PER_SHURIKEN,,genicon_damage,,, 121 | Ninja_ulti,sc/ui.sc,ulti_icon,Ninja,,3,,skill,NinjaUlti,,,,common,TID_NINJA_ULTI,TID_STAT_INVISIBLE,,genicon_damage,,, 122 | Ninja_unique,sc/ui.sc,icon_eiuD,Ninja,,4,,speed_invisible,,200,,,common,TID_SPEC_ABI_SPEED_INVISIBLE,,,genicon_health,,, 123 | Rosa_unlock,sc/ui.sc,,Rosa,,0,,unlock,,,,,rare,,,,,,14, 124 | Rosa_hp,sc/ui.sc,health_icon,Rosa,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 125 | Rosa_abi,sc/ui.sc,attack_icon,Rosa,,2,,skill,RosaWeapon,,,,common,TID_ROSA_WEAPON,TID_STAT_DAMAGE_PER_STRIKE,,genicon_damage,,, 126 | Rosa_ulti,sc/ui.sc,ulti_icon,Rosa,,3,,skill,RosaUlti,,,,common,TID_ROSA_ULTI,TID_STAT_SHIELD,,genicon_damage,,, 127 | Rosa_unique,sc/ui.sc,icon_eiuD,Rosa,,4,,heal_forest,,200,,,common,TID_SPEC_ABI_HEAL_FOREST,,,genicon_health,,, 128 | Whirlwind_unlock,sc/ui.sc,,Whirlwind,,0,,unlock,,,,,super_rare,,,,,,18, 129 | Whirlwind_hp,sc/ui.sc,health_icon,Whirlwind,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 130 | Whirlwind_abi,sc/ui.sc,attack_icon,Whirlwind,,2,,skill,WhirlwindWeapon,,,,common,TID_WHIRLWIND_WEAPON,TID_STAT_DAMAGE_EACH_WAY,,genicon_damage,,, 131 | Whirlwind_ulti,sc/ui.sc,ulti_icon,Whirlwind,,3,,skill,WhirlwindUlti,,,,common,TID_WHIRLWIND_ULTI,TID_STAT_DAMAGE_PER_SWING,,genicon_damage,,, 132 | Whirlwind_unique,sc/ui.sc,icon_eiuD,Whirlwind,,4,,projectile_speed,,360,,,common,TID_SPEC_ABI_PROJECTILE_SPEED,,,genicon_health,,, 133 | Baseball_unlock,sc/ui.sc,,Baseball,,0,,unlock,,,,,epic,,,,,,22, 134 | Baseball_hp,sc/ui.sc,health_icon,Baseball,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 135 | Baseball_abi,sc/ui.sc,attack_icon,Baseball,,2,,skill,BaseballWeapon,,,,common,TID_BASEBALL_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 136 | Baseball_ulti,sc/ui.sc,ulti_icon,Baseball,,3,,skill,BaseballUlti,,,,common,TID_BASEBALL_ULTI,TID_STAT_DAMAGE_EACH_WAY,,genicon_damage,,, 137 | Baseball_unique,sc/ui.sc,icon_eiuD,Baseball,,4,,speed_full_ammo,,100,,,common,TID_SPEC_ABI_SPED_FULL_AMMO,,,genicon_health,,, 138 | ShotgunGirl_unique_2,sc/ui.sc,icon_eiuD,ShotgunGirl,,4,,medikit,,40,1800,20000,common,TID_SPEC_ABI_MEDIKIT,,,genicon_health,,, 139 | Shaman_unique_2,sc/ui.sc,icon_eiuD,Shaman,,4,,pet_attack_speed,,60,,,common,TID_SPEC_ABI_PET_ATTACK_SPEED,,,genicon_health,,, 140 | BullDude_unique_2,sc/ui.sc,icon_eiuD,BullDude,,4,,low_health_shield,,40,30,,common,TID_SPEC_ABI_LOW_HEALTH_SHIELD,,,genicon_health,,, 141 | Gunslinger_unique_2,sc/ui.sc,icon_eiuD,Gunslinger,,4,,attack_range,,3,,,common,TID_SPEC_ABI_ATTACK_RANGE,,,genicon_health,,, 142 | MinigunDude_unique_2,sc/ui.sc,icon_eiuD,MinigunDude,,4,,aoe_dot,,500,,,common,TID_SPEC_ABI_TURRET_AOE,,,genicon_health,,, 143 | Luchador_unique_2,sc/ui.sc,icon_eiuD,Luchador,,4,,speed_after_ulti,,200,80,,common,TID_SPEC_ABI_SPEED_AFTER_ULTI,,,genicon_health,,, 144 | Ninja_unique_2,sc/ui.sc,icon_eiuD,Ninja,,4,,heal_invisible,,1000,,,common,TID_SPEC_ABI_HOT_INVISIBLE,,,genicon_health,,, 145 | ArtilleryDude_unique_2,sc/ui.sc,icon_eiuD,ArtilleryDude,,4,,ulti_burn,,400,,,common,TID_SPEC_ULTI_BURN,,,genicon_health,,, 146 | Crow_unique_2,sc/ui.sc,icon_eiuD,Crow,,4,,prey_on_the_weak,,50,120,,common,TID_SPEC_ABI_PREY_ON_THE_WEAK,,,genicon_health,,, 147 | DeadMariachi_unique_2,sc/ui.sc,icon_eiuD,DeadMariachi,,4,,damage_super,,800,,,common,TID_SPEC_DAMAGE_SUPER,,,genicon_health,,, 148 | Whirlwind_unique_2,sc/ui.sc,icon_eiuD,Whirlwind,,4,,ulti_defense,,60,40,,common,TID_SPEC_ABI_WHIRLWIND_SHIELD,,,genicon_health,,, 149 | Baseball_unique_2,sc/ui.sc,icon_eiuD,Baseball,,4,,shield_homerun,,30,,,common,TID_SPEC_ABI_SHIELD_HOMERUN,,,genicon_health,,, 150 | Rosa_unique_2,sc/ui.sc,icon_eiuD,Rosa,,4,,damage_buff_super,,220,,,common,TID_SPEC_ABI_DAMAGE_BUFF_SUPER,,,genicon_health,,, 151 | BowDude_unique_2,sc/ui.sc,icon_eiuD,BowDude,,4,,stun_trap,,40,,,common,TID_SPEC_ABI_STUN_TRAP,,,genicon_health,,, 152 | Mechanic_unique_2,sc/ui.sc,icon_eiuD,Mechanic,,4,,turret_electricity,,1,,,common,TID_SPEC_ABI_TURRET_ELECTRICITY,,,genicon_health,,, 153 | RocketGirl_unique_2,sc/ui.sc,icon_eiuD,RocketGirl,,4,,extra_bullet,,1,,,common,TID_SPEC_EXTRA_BULLET,,,genicon_health,,, 154 | Cactus_unique_2,sc/ui.sc,icon_eiuD,Cactus,,4,,curve_ball,,50,100,,common,TID_SPEC_ABI_CURVEBALL,,,genicon_health,,, 155 | Sniper_unique_2,sc/ui.sc,icon_eiuD,Sniper,,4,,reload_on_hit,,30,,,common,TID_SPEC_ABI_RELOAD_ON_HIT,,,genicon_health,,, 156 | HammerDude_unique_2,sc/ui.sc,icon_eiuD,HammerDude,,4,,gain_health,,1100,,,common,TID_SPEC_ABI_GAIN_HEALTH,,,genicon_health,,, 157 | Undertaker_unique_2,sc/ui.sc,icon_eiuD,Undertaker,,4,,longer_dash,,6,,3500,common,TID_SPEC_ABI_LONGER_DASH,,,genicon_health,,, 158 | TntDude_unique_2,sc/ui.sc,icon_eiuD,TntDude,,4,,gain_damage_super,,1000,,,common,TID_SPEC_ABI_SUPER_DAMAGE,,,genicon_health,,, 159 | TrickshotDude_unique_2,sc/ui.sc,icon_eiuD,TrickshotDude,,4,,speed_low_health,,250,40,,common,TID_SPEC_ABI_SPEED_LOW_HEALTH,,,genicon_health,,, 160 | BarrelBot_unique_2,sc/ui.sc,icon_eiuD,BarrelBot,,4,,super_reload,,100,,,common,TID_SPEC_ABI_SUPER_RELOAD,,,genicon_health,,, 161 | Barkeep_unique_2,sc/ui.sc,icon_eiuD,Barkeep,,4,,damage_main_attack,,140,,,common,TID_SPEC_ABI_DAMAGE_MAIN_ATTACK,,,genicon_health,,, 162 | HookDude_unique_2,sc/ui.sc,icon_eiuD,HookDude,,4,,damage_ulti,,300,,,common,TID_SPEC_ABI_DAMAGE_ULTI,,,genicon_health,,, 163 | BlackHole_unique_2,sc/ui.sc,icon_eiuD,BlackHole,,4,,black_hole_healer,,1,,,common,TID_SPEC_ABI_BLACK_HOLE_HEALER,,,genicon_health,,, 164 | ClusterBombDude_unique_2,sc/ui.sc,icon_eiuD,ClusterBombDude,,4,,recharge,,220,,,common,TID_SPEC_ABI_RECHARGE,,,genicon_health,,, 165 | ShotgunGirl_unique_3,sc/ui.sc,icon_eiuD,ShotgunGirl,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 166 | BullDude_unique_3,sc/ui.sc,icon_eiuD,BullDude,true,4,,immune_to_cc,,1,,,common,TID_SPEC_ABI_IMMUNE_TO_CC,,,genicon_health,,, 167 | DeadMariachi_unique_3,sc/ui.sc,icon_eiuD,DeadMariachi,true,4,,cure_debuffs,,1,,,common,TID_SPEC_ABI_CURE_DEBUFFS,,,genicon_health,,, 168 | Baseball_unique_3,sc/ui.sc,icon_eiuD,Baseball,true,4,,freeze,,60,350,,common,TID_SPEC_ABI_SUPER_SLOW,,,genicon_health,,, 169 | Whirlwind_unique_3,sc/ui.sc,icon_eiuD,Whirlwind,true,4,,super_destroy_walls,,600,,,common,TID_SPEC_ABI_SUPER_DESTROY_WALLS,,,genicon_health,,, 170 | Undertaker_unique_3,sc/ui.sc,icon_eiuD,Undertaker,true,4,,barrel_defense,,15,30,,common,TID_SPEC_ABI_DASH_SHIELD,,,genicon_health,,, 171 | Arcade_unique,sc/ui.sc,icon_eiuD,Arcade,,4,,larger_area_ulti,,1,,,common,TID_SPEC_ABI_LARGER_AREA_ULTI,,,genicon_health,,, 172 | Luchador_unique_3,sc/ui.sc,icon_eiuD,Luchador,true,4,,grow_from_damage,,500,2880,,common,TID_SPEC_ABI_GROW_FROM_DAMAGE,,,genicon_health,,, 173 | Gunslinger_unique_3,sc/ui.sc,icon_eiuD,Gunslinger,true,4,,armor,,2000,,,common,TID_SPEC_ABI_ARMOR,,,genicon_health,,, 174 | Mechanic_unique_3,sc/ui.sc,icon_eiuD,Mechanic,true,4,,walking_turret,,600,,,common,TID_SPEC_ABI_WALKING_TURRET,,,genicon_health,,, 175 | RocketGirl_unique_3,sc/ui.sc,icon_eiuD,RocketGirl,true,4,,shield_ulti,,30,,,common,TID_SPEC_SHIELD_ULTI,,,genicon_health,,, 176 | TntDude_unique_3,sc/ui.sc,icon_eiuD,TntDude,true,4,,pet,,1,,,common,TID_SPEC_ABI_PET,,,genicon_health,,, 177 | Sniper_unique_3,sc/ui.sc,icon_eiuD,Sniper,true,4,,spot_from_air,,15,,,common,TID_SPEC_SPOT_FROM_AIR,,,genicon_health,,, 178 | Ninja_unique_3,sc/ui.sc,icon_eiuD,Ninja,true,4,,damage_ulti,,140,,,common,TID_SPEC_ABI_DAMAGE_ULTI,,,genicon_health,,, 179 | Cactus_unique_3,sc/ui.sc,icon_eiuD,Cactus,true,4,,spikes_low_health,,40,672,20,common,TID_SPEC_ABI_SPIKES_LOW_HEALTH,,,genicon_health,,, 180 | Arcade_unlock,sc/ui.sc,,Arcade,,0,,unlock,,,,,common,,,,,,9, 181 | Arcade_hp,sc/ui.sc,health_icon,Arcade,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 182 | Arcade_abi,sc/ui.sc,attack_icon,Arcade,,2,,skill,ArcadeWeapon,,,,common,TID_ARCADE_WEAPON,TID_STAT_DAMAGE_PER_BEAM,,genicon_damage,,, 183 | Arcade_ulti,sc/ui.sc,ulti_icon,Arcade,,3,,skill,ArcadeUlti,,,,common,TID_ARCADE_ULTI,TID_STAT_DAMAGE_BOOST,TID_DAMAGE_BOOSTER_HEALTH,genicon_heal,genicon_health,,true 184 | Arcade_unique_2,sc/ui.sc,icon_eiuD,Arcade,,4,,resurrect,,1,,,common,TID_SPEC_ABI_RESURRECT,,,genicon_health,,, 185 | Sandstorm_unlock,sc/ui.sc,,Sandstorm,,0,,unlock,,,,,legendary,,,,,,29, 186 | Sandstorm_hp,sc/ui.sc,health_icon,Sandstorm,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 187 | Sandstorm_abi,sc/ui.sc,attack_icon,Sandstorm,,2,,skill,SandstormWeapon,,,,common,TID_SANDSTORM_WEAPON,TID_STAT_DAMAGE,,genicon_damage,,, 188 | Sandstorm_ulti,sc/ui.sc,ulti_icon,Sandstorm,,3,,skill,SandstormUlti,,,,common,TID_SANDSTORM_ULTI,TID_STAT_SANDSTORM,,genicon_damage,,, 189 | Sandstorm_unique,sc/ui.sc,icon_eiuD,Sandstorm,,4,,aoe_dot,,40,,,common,TID_SPEC_ABI_SANDSTORM_DOT,,,genicon_health,,, 190 | Sandstorm_unique_2,sc/ui.sc,icon_eiuD,Sandstorm,,4,,aoe_dot,,-250,,,common,TID_SPEC_ABI_SANDSTORM_HOT,,,genicon_health,,, 191 | BeeSniper_unlock,sc/ui.sc,,BeeSniper,,0,,unlock,,,,,common,,,,,,0, 192 | BeeSniper_hp,sc/ui.sc,health_icon,BeeSniper,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 193 | BeeSniper_abi,sc/ui.sc,attack_icon,BeeSniper,,2,,skill,ShotgunGirlWeapon,,,,common,TID_LONG_RANGE_SHOTGUN,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 194 | BeeSniper_ulti,sc/ui.sc,ulti_icon,BeeSniper,,3,,skill,ShotgunGirlUlti,,,,common,TID_MEGA_BLASH_ULTI,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 195 | BeeSniper_unique,sc/ui.sc,icon_eiuD,BeeSniper,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 196 | BeeSniper_unique_2,sc/ui.sc,icon_eiuD,BeeSniper,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 197 | Mummy_unlock,sc/ui.sc,,Mummy,,0,,unlock,,,,,common,,,,,,10, 198 | Mummy_hp,sc/ui.sc,health_icon,Mummy,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 199 | Mummy_abi,sc/ui.sc,attack_icon,Mummy,,2,,skill,MummyWeapon,,,,common,TID_MUMMY_WEAPON,TID_STAT_DAMAGE_PER_HALF_SECOND,,genicon_damage,,, 200 | Mummy_ulti,sc/ui.sc,ulti_icon,Mummy,,3,,skill,MummyUlti,,,,common,TID_MUMMY_ULTI,TID_STAT_DAMAGE_PER_SECOND,,genicon_damage,,, 201 | Mummy_unique,sc/ui.sc,icon_eiuD,Mummy,,4,,increase_dmg_consecutive_dot,,20,,,common,TID_SPEC_ABI_TICK_DMG_GROW,,,genicon_damage,,, 202 | Mummy_unique_2,sc/ui.sc,icon_eiuD,Mummy,true,4,,ulti_heals_self,,200,,,common,TID_SPEC_ABI_HEAL_SUPER_DMG,,,genicon_health,,, 203 | SpawnerDude_unlock,sc/ui.sc,,SpawnerDude,,0,,unlock,,,,,common,,,,,,0, 204 | SpawnerDude_hp,sc/ui.sc,health_icon,SpawnerDude,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 205 | SpawnerDude_abi,sc/ui.sc,attack_icon,SpawnerDude,,2,,skill,ShotgunGirlWeapon,,,,common,TID_LONG_RANGE_SHOTGUN,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 206 | SpawnerDude_ulti,sc/ui.sc,ulti_icon,SpawnerDude,,3,,skill,ShotgunGirlUlti,,,,common,TID_MEGA_BLASH_ULTI,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 207 | SpawnerDude_unique,sc/ui.sc,icon_eiuD,SpawnerDude,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 208 | SpawnerDude_unique_2,sc/ui.sc,icon_eiuD,SpawnerDude,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 209 | Speedy_unlock,sc/ui.sc,,Speedy,,0,,unlock,,,,,common,,,,,,0, 210 | Speedy_hp,sc/ui.sc,health_icon,Speedy,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 211 | Speedy_abi,sc/ui.sc,attack_icon,Speedy,,2,,skill,ShotgunGirlWeapon,,,,common,TID_LONG_RANGE_SHOTGUN,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 212 | Speedy_ulti,sc/ui.sc,ulti_icon,Speedy,,3,,skill,ShotgunGirlUlti,,,,common,TID_MEGA_BLASH_ULTI,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 213 | Speedy_unique,sc/ui.sc,icon_eiuD,Speedy,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 214 | Speedy_unique_2,sc/ui.sc,icon_eiuD,Speedy,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 215 | Homer_unlock,sc/ui.sc,,Homer,,0,,unlock,,,,,common,,,,,,0, 216 | Homer_hp,sc/ui.sc,health_icon,Homer,,1,,hp,,,,,common,TID_ARMOR,TID_ARMOR_STAT,,genicon_health,,, 217 | Homer_abi,sc/ui.sc,attack_icon,Homer,,2,,skill,ShotgunGirlWeapon,,,,common,TID_LONG_RANGE_SHOTGUN,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 218 | Homer_ulti,sc/ui.sc,ulti_icon,Homer,,3,,skill,ShotgunGirlUlti,,,,common,TID_MEGA_BLASH_ULTI,TID_STAT_DAMAGE_PER_SHELL,,genicon_damage,,, 219 | Homer_unique,sc/ui.sc,icon_eiuD,Homer,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 220 | Homer_unique_2,sc/ui.sc,icon_eiuD,Homer,true,4,,super_range,,7,40,,common,TID_SPEC_SUPER_RANGE,,,genicon_health,,, 221 | -------------------------------------------------------------------------------- /src/main/resources/Assets/skins.csv: -------------------------------------------------------------------------------- 1 | "Name","Conf","Campaign","ObtainType","PetSkin","PetSkin2","CostLegendaryTrophies","CostGems","TID","ShopTID","InfoTID","MaterialsFile","BlueTexture","RedTexture","BlueSpecular","RedSpecular" 2 | "string","string","int","int","string","string","int","int","string","string","string","string","string","string","string","string" 3 | "BanditGirlDefault","BanditGirlDefault",,,,,,,,,,,"shelly_v2_01.pvr","shelly_v2_01.pvr","shelly_v2_01.pvr","shelly_v2_01.pvr" 4 | "GunSlingerDefault","GunSlingerDefault",,,,,,,,,,,"colt_tex.pvr","colt_tex.pvr","colt_tex.pvr","colt_tex.pvr" 5 | "GunSlingerRockstar","GunSlingerRockstar",,,,,,30,"TID_GUNSLINGER_ROCKSTAR_SKIN","TID_GUNSLINGER_ROCKSTAR_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"colt_rockstar_tex.pvr","colt_rockstar_tex.pvr","colt_rockstar_tex.pvr","colt_rockstar_tex.pvr" 6 | "BullGuyDefault","BullGuyDefault",,,,,,,,,,,"bull_tex_01.pvr","bull_tex_01.pvr","bull_tex_01.pvr","bull_tex_01.pvr" 7 | "RocketGirlDefault","RocketGirlDefault",,,,,,,,,,,"brock_blue_tex.pvr","brock_tex.pvr","brock_blue_tex.pvr","brock_tex.pvr" 8 | "RocketGirlBeach","RocketGirlBeach",,,,,,80,"TID_ROCKET_BEACH_SKIN","TID_ROCKET_BEACH_SKIN_SHOP","TID_SKIN_INFO_FX_SOUND",,"brock_beach_blue_tex.pvr","brock_beach_tex.pvr","brock_beach_blue_tex.pvr","brock_beach_tex.pvr" 9 | "TntGuyDefault","TntGuyDefault",,,,,,,,,,,"dynamike_blue_tex.pvr","dynamike_tex.pvr","dynamike_blue_tex.pvr","dynamike_tex.pvr" 10 | "LuchadorDefault","LuchadorDefault",,,,,,,,,,,"primo_tex.pvr","primo_tex.pvr","primo_tex.pvr","primo_tex.pvr" 11 | "TurretDefault","TurretDefault",,,,,,,,,,,"dogturret.pvr","dogturret.pvr","dogturret.pvr","dogturret.pvr" 12 | "TrickshotDefault","TrickshotDefault",,,,,,,,,,,"rico_tex.pvr","rico_tex.pvr","rico_tex.pvr","rico_tex.pvr" 13 | "CactusDefault","CactusDefault",,,,,,,,,,,"spike_tex.pvr","spike_tex.pvr","spike_tex.pvr","spike_tex.pvr" 14 | "CactusPink","CactusPink",,,,,,80,"TID_CACTUS_PINK_SKIN","TID_CACTUS_PINK_SKIN_SHOP","TID_SKIN_INFO_FX",,"spike_blossom_tex.pvr","spike_blossom_tex.pvr","spike_blossom_tex.pvr","spike_blossom_tex.pvr" 15 | "BarkeepDefault","BarkeepDefault",,,,,,,,,,,"barley_tex.pvr","barley_tex.pvr","barley_tex.pvr","barley_tex.pvr" 16 | "MechanicDefault","MechanicDefault",,,"TurretDefault",,,,,,,,"jessie_tex.pvr","jessie_tex.pvr","jessie_tex.pvr","jessie_tex.pvr" 17 | "ShamanDefault","ShamanDefault",,,"ShamanBearDefault",,,,,,,,"nita_tex.pvr","nita_tex.pvr","nita_tex.pvr","nita_tex.pvr" 18 | "ShamanPanda","ShamanPanda",,,"ShamanBearPanda",,,30,"TID_SHAMAN_PANDA_SKIN","TID_SHAMAN_PANDA_SKIN_SHOP","TID_SKIN_INFO_NORMAL_PET",,"nita_panda_tex.pvr","nita_panda_tex.pvr","nita_panda_tex.pvr","nita_panda_tex.pvr" 19 | "ShamanBearDefault","ShamanBearDefault",,,,,,,,,,,"nita_bear_tex.pvr","nita_bear_tex.pvr","nita_bear_tex.pvr","nita_bear_tex.pvr" 20 | "ShamanBearPanda","ShamanBearPanda",,,,,,,,,,,"nita_bear_panda_tex.pvr","nita_bear_panda_tex.pvr","nita_bear_panda_tex.pvr","nita_bear_panda_tex.pvr" 21 | "UndertakerDefault","UndertakerDefault",,,,,,,,,,,"mortis_v2_tex.pvr","mortis_v2_tex.pvr","mortis_v2_tex.pvr","mortis_v2_tex.pvr" 22 | "CrowDefault","CrowDefault",,,,,,,,,,,"crow_d_01.pvr","crow_d_01.pvr","crow_d_01.pvr","crow_d_01.pvr" 23 | "CrowWhite","CrowWhite",,,,,,80,"TID_CROW_WHITE_SKIN","TID_CROW_WHITE_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"crowwhite_d_01.pvr","crowwhite_d_01.pvr","crowwhite_d_01.pvr","crowwhite_d_01.pvr" 24 | "DeadMariachiDefault","DeadMariachiDefault",,,,,,,,,,,"poco_tex.pvr","poco_tex.pvr","poco_tex.pvr","poco_tex.pvr" 25 | "BowDudeDefault","BowDudeDefault",,,,,,,,,,,"bo_tex.pvr","bo_tex.pvr","bo_tex.pvr","bo_tex.pvr" 26 | "SniperDefault","SniperDefault",,,,,,,,,,,"piper_tex.pvr","piper_tex.pvr","piper_tex.pvr","piper_tex.pvr" 27 | "MinigunDudeDefault","MinigunDudeDefault",,,"HealstationDefault",,,,,,,,"pam_tex.pvr","pam_tex.pvr","pam_tex.pvr","pam_tex.pvr" 28 | "BullGuyHair","BullGuyHair",,,,,,80,"TID_BULL_HAIR_SKIN","TID_BULL_HAIR_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"bull_viking_tex.pvr","bull_viking_tex.pvr","bull_viking_tex.pvr","bull_viking_tex.pvr" 29 | "TrickshotGold","TrickshotGold",,,,,,150,"TID_TRICKSHOT_GOLD_SKIN","TID_TRICKSHOT_GOLD_SKIN_SHOP","TID_SKIN_INFO_FX",,"rico_gold_tex.pvr","rico_gold_tex.pvr","rico_gold_tex.pvr","rico_gold_tex.pvr" 30 | "BarkeepGold","BarkeepGold",,,,,,30,"TID_BARKEEP_GOLD_SKIN","TID_BARKEEP_GOLD_SKIN_SHOP","TID_SKIN_INFO_FX",,"barley_banker_tex.pvr","barley_banker_tex.pvr","barley_banker_tex.pvr","barley_banker_tex.pvr" 31 | "LuchadorRudo","LuchadorRudo",,,,,,80,"TID_LUCHADOR_RUDO_SKIN","TID_LUCHADOR_RUDO_SKIN_SHOP","TID_SKIN_INFO_ANIM",,"primo_elrudo_tex.pvr","primo_elrudo_tex.pvr","primo_elrudo_tex.pvr","primo_elrudo_tex.pvr" 32 | "BanditGirlBandita","BanditGirlBandita",,,,,,30,"TID_SHOTGUN_BANDITA_SKIN","TID_SHOTGUN_BANDITA_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"shelly_bandita_tex.pvr","shelly_bandita_tex.pvr","shelly_bandita_tex.pvr","shelly_bandita_tex.pvr" 33 | "LuchadorRey","LuchadorRey",,,,,,150,"TID_LUCHADOR_KING_SKIN","TID_LUCHADOR_KING_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX",,"primo_elrey_tex.pvr","primo_elrey_tex.pvr","primo_elrey_tex.pvr","primo_elrey_tex.pvr" 34 | "BallDefault","BallDefault",,,,,,,,,,,,,, 35 | "BlackholeDefault","BlackholeDefault",,,,,,,,,,,"tara_tex.pvr","tara_tex.pvr","tara_tex.pvr","tara_tex.pvr" 36 | "HealstationDefault","HealstationDefault",,,,,,,,,,,"healstion_tex.pvr","healstion_red_tex.pvr","healstion_red_tex.pvr","healstion_red_tex.pvr" 37 | "BarrelbotDefault","BarrelbotDefault",,,,,,,,,,,"barrelbot_tex.pvr","barrelbot_tex_red.pvr","barrelbot_tex_red.pvr","barrelbot_tex_red.pvr" 38 | "BlackholePetDefault","BlackholePetDefault",,,,,,,,,,,"ninja_ability_tex.pvr","ninja_ability_tex.pvr","ninja_ability_tex.pvr","ninja_ability_tex.pvr" 39 | "TntPetDefault","TntPetDefault",,,,,,,,,,,"nita_bear_tex.pvr","nita_bear_tex.pvr","nita_bear_tex.pvr","nita_bear_tex.pvr" 40 | "RangedBotDefault","RangedBotDefault",,,,,,,,,,,"rangedbot_tex.pvr","rangedbot_tex.pvr","rangedbot_tex.pvr","rangedbot_tex.pvr" 41 | "MeleeFastBotDefault","MeleeFastBotDefault",,,,,,,,,,,"fastmeleebot_tex.pvr","fastmeleebot_tex.pvr","fastmeleebot_tex.pvr","fastmeleebot_tex.pvr" 42 | "MeleeBotDefault","MeleeBotDefault",,,,,,,,,,,"meleebot_tex.pvr","meleebot_tex.pvr","meleebot_tex.pvr","meleebot_tex.pvr" 43 | "BossBotDefault","BossBotDefault",,,,,,,,,,,"bossbot_tex.pvr","bossbot_tex.pvr","bossbot_tex.pvr","bossbot_tex.pvr" 44 | "ArtilleryGalDefault","ArtilleryGalDefault",,,"ArtilleryTurretDefault",,,,,,,,"mari_tex.pvr","mari_tex.pvr","mari_tex.pvr","mari_tex.pvr" 45 | "FrankDefault","FrankDefault",,,,,,,,,,,"frank_tex.pvr","frank_tex.pvr","frank_tex.pvr","frank_tex.pvr" 46 | "ArtilleryTurretDefault","ArtilleryTurretDefault",,,,,,,,,,,"mari_tex.pvr","mari_tex.pvr","mari_tex.pvr","mari_tex.pvr" 47 | "MechanicKnight","MechanicKnight",,,"TurretDragon",,,150,"TID_MECHANIC_KNIGHT_SKIN","TID_MECHANIC_KNIGHT_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX_TURRET",,"jessie_knight_tex.pvr","jessie_knight_tex.pvr","jessie_knight_tex.pvr","jessie_knight_tex.pvr" 48 | "FrankCaveman","FrankCaveman",,,,,,80,"TID_FRANK_CAVEMAN_SKIN","TID_FRANK_CAVEMAN_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"frank_caveman_01.pvr","frank_caveman_01.pvr","frank_caveman_01.pvr","frank_caveman_01.pvr" 49 | "TurretDragon","TurretDragon",,,,,,,,,,,"turret_dragon_tex.pvr","turret_dragon_tex.pvr","turret_dragon_tex.pvr","turret_dragon_tex.pvr" 50 | "MechanicSummer","MechanicSummer",,,"TurretSummertime",,,80,"TID_MECHANIC_SUMMER_SKIN","TID_MECHANIC_SUMMER_SKIN_SHOP","TID_SKIN_INFO_FX_TURRET",,"jessie_summertime_tex.pvr","jessie_summertime_tex.pvr","jessie_summertime_tex.pvr","jessie_summertime_tex.pvr" 51 | "TurretSummertime","TurretSummertime",,,,,,,,,,,"turret_summertime_tex.pvr","turret_summertime_tex.pvr","turret_summertime_tex.pvr","turret_summertime_tex.pvr" 52 | "CrowPheonix","CrowPheonix",,,,,,300,"TID_CROW_PHEONIX_SKIN","TID_CROW_PHEONIX_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX",,"crow_pheonix_tex.pvr","crow_pheonix_tex.pvr","crow_pheonix_tex.pvr","crow_pheonix_tex.pvr" 53 | "UndertakerGreaser","UndertakerGreaser",,,,,,150,"TID_UNDERTAKER_GREASER_SKIN","TID_UNDERTAKER_GREASER_SKIN_SHOP","TID_SKIN_INFO_ANIM",,"mortis_greaser_tex_02.pvr","mortis_greaser_tex_02.pvr","mortis_greaser_tex_02.pvr","mortis_greaser_tex_02.pvr" 54 | "BigBotDefault","BigBotDefault",,,,,,,,,,,"meleebot_tex.pvr","meleebot_tex.pvr","meleebot_tex.pvr","meleebot_tex.pvr" 55 | "BanditGirlPrereg","BanditGirlPrereg",,1,,,,,"TID_SHOTGUN_STAR_SKIN","TID_SHOTGUN_STAR_SKIN","TID_SKIN_INFO_FX",,"shelly_prereg_01.pvr","shelly_prereg_01.pvr","shelly_prereg_01.pvr","shelly_prereg_01.pvr" 56 | "LootBox","LootBox",,,,,,,,,,,,,, 57 | "TntBox","TntBox",,,,,,,,,,,,,, 58 | "Safe","Safe",,,,,,,,,,,,,, 59 | "TntGuySanta","TntGuySanta",1,4,,,,80,"TID_DYNAMIKE_SANTA_SKIN","TID_DYNAMIKE_SANTA_SKIN_SHOP","TID_SKIN_INFO_FX",,"dynamike_santa_blue_tex.pvr","dynamike_santa_tex.pvr","dynamike_santa_blue_tex.pvr","dynamike_santa_tex.pvr" 60 | "TntGuyChef","TntGuyChef",,,,,,150,"TID_DYNAMIKE_CHEF_SKIN","TID_DYNAMIKE_CHEF_SKIN_SHOP","TID_SKIN_INFO_FX",,"dynamike_chef_blue_tex.pvr","dynamike_chef_tex.pvr","dynamike_chef_blue_tex.pvr","dynamike_chef_tex.pvr" 61 | "RocketGirlBoombox","RocketGirlBoombox",,,,,,80,"TID_BROCK_BOOMBOX_SKIN","TID_BROCK_BOOMBOX_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"brock_boombox_blue_tex.pvr","brock_boombox_tex.pvr","brock_boombox_blue_tex.pvr","brock_boombox_tex.pvr" 62 | "BarkeepWizard","BarkeepWizard",,2,,,,,"TID_BARLEY_WIZARD_SKIN","TID_BARLEY_WIZARD_SKIN","TID_SKIN_INFO_ANIM_SOUND_FX",,"barley_wizard_tex.pvr","barley_wizard_tex.pvr","barley_wizard_tex.pvr","barley_wizard_tex.pvr" 63 | "ShamanReindeer","ShamanReindeer",1,4,"ShamanBearReindeer",,,150,"TID_NITA_REINDEER_SKIN","TID_NITA_REINDEER_SKIN_SHOP","TID_SKIN_INFO_NORMAL_PET",,"nita_reindeer_tex.pvr","nita_reindeer_tex.pvr","nita_reindeer_tex.pvr","nita_reindeer_tex.pvr" 64 | "ArtilleryGalElf","ArtilleryGalElf",1,4,"ArtilleryTurretElf",,,80,"TID_PENNY_ELF_SKIN","TID_PENNY_ELF_SKIN_SHOP","TID_SKIN_INFO_FX_TURRET",,"penny_elf_tex.pvr","penny_elf_tex.pvr","penny_elf_tex.pvr","penny_elf_tex.pvr" 65 | "NinjaDefault","NinjaDefault",,,,,,,,,,,"leon_tex.pvr","leon_tex.pvr","leon_tex.pvr","leon_tex.pvr" 66 | "UndertakerHat","UndertakerHat",,5,,,,,"TID_UNDERTAKER_HAT_SKIN","TID_UNDERTAKER_HAT_SKIN","TID_SKIN_INFO_NORMAL",,"mortis_v2_tex.pvr","mortis_v2_tex.pvr","mortis_v2_tex.pvr","mortis_v2_tex.pvr" 67 | "BullGuyFootbull","BullGuyFootbull",,,,,,80,"TID_SKIN_FOOTBULL","TID_SKIN_FOOTBULL_SHOP","TID_SKIN_INFO_NORMAL",,"bull_footbull_tex.png","bull_footbull_tex.png","bull_footbull_tex.png","bull_footbull_tex.png" 68 | "ShamanBearReindeer","ShamanBearReindeer",,,,,,,,,,,"nita_bear_reindeer_tex.pvr","nita_bear_reindeer_tex.pvr","nita_bear_reindeer_tex.pvr","nita_bear_reindeer_tex.pvr" 69 | "ArtilleryTurretElf","ArtilleryTurretElf",,,,,,,,,,,"penny_elf_tex.pvr","penny_elf_tex.pvr","penny_elf_tex.pvr","penny_elf_tex.pvr" 70 | "HookDefault","HookDefault",,,,,,,,,,,"gene_tex.pvr","gene_tex.pvr","gene_tex.pvr","gene_tex.pvr" 71 | "TrickshotPopcorn","TrickshotPopcorn",,,,,,150,"TID_SKIN_POPCORN_RICO","TID_SKIN_POPCORN_RICO_SHOP","TID_SKIN_INFO_FX",,"rico_popcorn_tex.pvr","rico_popcorn_tex.pvr","rico_popcorn_tex.pvr","rico_popcorn_tex.pvr" 72 | "GunSlingerHanbok","GunSlingerHanbok",2,4,,,,150,"TID_SKIN_LUNAR_COLT","TID_SKIN_LUNAR_COLT_SHOP","TID_SKIN_INFO_FX",,"colt_hanbok_tex.pvr","colt_hanbok_tex.pvr","colt_hanbok_tex.pvr","colt_hanbok_tex.pvr" 73 | "BarrelbotCny","BarrelbotCny",2,4,,,,80,"TID_SKIN_DUMPLING_DARRYL","TID_SKIN_DUMPLING_DARRYL_SHOP","TID_SKIN_INFO_FX",,"darryl_cny_tex.pvr","darryl_cny_tex.pvr","darryl_cny_tex.pvr","darryl_cny_tex.pvr" 74 | "PocoValentine","PocoValentine",,,,,,150,"TID_SKIN_VALENTINE_POCO","TID_SKIN_VALENTINE_POCO_SHOP","TID_SKIN_INFO_FX",,"poco_valentine_tex.pvr","poco_valentine_tex.pvr","poco_valentine_tex.pvr","poco_valentine_tex.pvr" 75 | "RocketGirlCny","RocketGirlCny",2,4,,,,150,"TID_SKIN_LUNAR_BROCK","TID_SKIN_LUNAR_BROCK_SHOP","TID_SKIN_INFO_FX",,"brock_cny_tex.pvr","brock_cny_tex.pvr","brock_cny_tex.pvr","brock_cny_tex.pvr" 76 | "WhirlwindDefault","WhirlwindDefault",,,,,,,,,,,"carl_tex.pvr","carl_tex.pvr","carl_tex.pvr","carl_tex.pvr" 77 | "RoboWarsBox","RoboWarsBox",,,,,,,,,,,,,, 78 | "UndertakerNightwitch","UndertakerNightwitch",,,,,,150,"TID_UNDERTAKER_NIGHTWITCH_SKIN","TID_UNDERTAKER_NIGHTWITCH_SKIN_SHOP","TID_SKIN_INFO_FX",,"mortis_nightwitch_tex.pvr","mortis_nightwitch_tex.pvr","mortis_nightwitch_tex.pvr","mortis_nightwitch_tex.pvr" 79 | "RoboWarsBaseDefault","RoboWarsBaseDefault",,,,,,,,,,,"siege_base.pvr","siege_base_red.pvr",, 80 | "RosaDefault","RosaDefault",,,,,,,,,,,,,, 81 | "MineCart","MineCart",,,,,,,,,,,,,, 82 | "ShamanShiba","ShamanShiba",,,"ShamanBearShiba",,,150,"TID_SHAMAN_SHIBA_SKIN","TID_SHAMAN_SHIBA_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX_SOUND_PET",,"nita_shiba_tex.pvr","nita_shiba_tex.pvr","nita_shiba_tex.pvr","nita_shiba_tex.pvr" 83 | "ShamanBearShiba","ShamanBearShiba",,,,,,,,,,,"nita_bear_shiba_tex.pvr","nita_bear_shiba_tex.pvr","nita_bear_shiba_tex.pvr","nita_bear_shiba_tex.pvr" 84 | "BaseballDefault","BaseballDefault",,,,,,,,,,,"bibi_tex.pvr","bibi_tex.pvr","bibi_tex.pvr","bibi_tex.pvr" 85 | "MineCartB","MineCartB",,,,,,,,,,,,,, 86 | "MineCartC","MineCartC",,,,,,,,,,,,,, 87 | "MineCartD","MineCartD",,,,,,,,,,,,,, 88 | "MineCartE","MineCartE",,,,,,,,,,,,,, 89 | "ClusterBombDefault","ClusterBombDefault",,,,,,,,,,,"tick_tex.pvr","tick_tex.pvr","tick_tex.pvr","tick_tex.pvr" 90 | "ClusterBombPetDefault","ClusterBombPetDefault",,,,,,,,,,,"tick_tex.pvr","tick_tex.pvr","tick_tex.pvr","tick_tex.pvr" 91 | "ArtilleryGalBunny","ArtilleryGalBunny",,,"ArtilleryTurretBunny",,,80,"TID_PENNY_BUNNY_SKIN","TID_PENNY_BUNNY_SKIN_SHOP","TID_SKIN_INFO_FX_TURRET",,"penny_bunny_tex.pvr","penny_bunny_tex.pvr","penny_bunny_tex.pvr","penny_bunny_tex.pvr" 92 | "ArtilleryTurretBunny","ArtilleryTurretBunny",,,,,,,,,,,"penny_bunny_tex.pvr","penny_bunny_tex.pvr","penny_bunny_tex.pvr","penny_bunny_tex.pvr" 93 | "BarkeepMs","BarkeepMs",,,,,,150,"TID_BARLEY_MS_SKIN","TID_BARLEY_MS_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX",,"barley_ms_tex.pvr","barley_ms_tex.pvr","barley_ms_tex.pvr","barley_ms_tex.pvr" 94 | "RocketGirlHotrod","RocketGirlHotrod",,,,,,150,"TID_BROCK_HOTROD_SKIN","TID_BROCK_HOTROD_SKIN_SHOP","TID_SKIN_INFO_FX",,"brock_hotrod_tex.pvr","brock_hotrod_tex.pvr","brock_hotrod_tex.pvr","brock_hotrod_tex.pvr" 95 | "BarkeepMaple","BarkeepLumberjack",,,,,,80,"TID_BARLEY_MAPLE_SKIN","TID_BARLEY_MAPLE_SKIN_SHOP","TID_SKIN_INFO_FX",,"barley_lumberjack_tex.pvr","barley_lumberjack_tex.pvr","barley_lumberjack_tex.pvr","barley_lumberjack_tex.pvr" 96 | "WhirlwindRR","WhirlwindHotrod",,,,,,80,"TID_CARL_RR_SKIN","TID_CARL_RR_SKIN_SHOP","TID_SKIN_INFO_FX",,"carl_hotrod_tex.pvr","carl_hotrod_tex.pvr","carl_hotrod_tex.pvr","carl_hotrod_tex.pvr" 97 | "BoMecha","BoMecha",,,,,,300,"TID_BO_MECHA_SKIN","TID_BO_MECHA_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"bo_mecha_tex.png+hue(masks/bo/bo_mecha_ammo_msk.png,205.115997)","bo_mecha_tex.png","bo_mecha_tex.png+hue(masks/bo/bo_mecha_ammo_msk.png,205.115997)","bo_mecha_tex.png" 98 | "CrowMecha","CrowMecha",,,,,,300,"TID_CROW_MECHA_SKIN","TID_CROW_MECHA_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"crow_mecha_tex.png","crow_mecha_tex.png","crow_mecha_tex.png","crow_mecha_tex.png" 99 | "Cactusmecha","Cactusmecha",,,,,,150,"TID_SPIKE_ROBO_SKIN","TID_SPIKE_ROBO_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX",,"spike_mecha_tex.pvr","spike_mecha_tex.pvr","spike_mecha_tex.pvr","spike_mecha_tex.pvr" 100 | "TntDudeMecha","TntDudeMecha",,,,,,300,"TID_MIKE_ROBO_SKIN","TID_MIKE_ROBO_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"dynamike_mecha_tex.pvr+hue(masks/dynamike/dynamike_mecha_ammo_msk.png,198.000000)+value(masks/dynamike/dynamike_mecha_ammo_msk.png,1.279000)","dynamike_mecha_tex.pvr","dynamike_mecha_tex.pvr+hue(masks/dynamike/dynamike_mecha_ammo_msk.png,198.000000)","dynamike_mecha_tex.pvr" 101 | "BowDudeMechaWhite","BoMecha",,,,,10000,,"TID_BO_MECHA_LIGHT_SKIN","TID_BO_MECHA_LIGHT_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"bo_mecha_tex.png+saturation(masks/bo/bo_mecha_colour02_msk.png,0.000000)+saturation(masks/bo/bo_mecha_colour01_msk.png,2.674000)+value(masks/bo/bo_mecha_colour01_msk.png,2.442000)+hue(masks/bo/bo_mecha_colour01_msk.png,12.558000)+saturation(masks/bo/bo_mecha_seams_msk.png,0.000000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,20.930000)+value(masks/bo/bo_mecha_colour02_msk.png,0.800000)+hue(masks/bo/bo_mecha_ammo_msk.png,205.115997)","bo_mecha_tex.png+saturation(masks/bo/bo_mecha_colour02_msk.png,0.000000)+saturation(masks/bo/bo_mecha_colour01_msk.png,2.674000)+value(masks/bo/bo_mecha_colour01_msk.png,2.442000)+hue(masks/bo/bo_mecha_colour01_msk.png,12.558000)+saturation(masks/bo/bo_mecha_seams_msk.png,0.000000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,20.930000)+value(masks/bo/bo_mecha_colour02_msk.png,0.800000)","bo_mecha_tex.png+saturation(masks/bo/bo_mecha_colour02_msk.png,0.000000)+saturation(masks/bo/bo_mecha_colour01_msk.png,5.349000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,20.930000)+hue(masks/bo/bo_mecha_ammo_msk.png,205.115997)","bo_mecha_tex.png+saturation(masks/bo/bo_mecha_colour02_msk.png,0.000000)+saturation(masks/bo/bo_mecha_colour01_msk.png,5.349000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,20.930000)+hue(masks/bo/bo_mecha_colour02_msk.png,0.000000)" 102 | "BowDudeMechaGold","BoMecha",,,,,50000,,"TID_BO_MECHA_GOLD_SKIN","TID_BO_MECHA_GOLD_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"bo_mecha_tex.png+value(masks/bo/bo_mecha_colour01_msk.png,1.047000)+saturation(masks/bo/bo_mecha_colour01_msk.png,8.721000)+hue(masks/bo/bo_mecha_colour01_msk.png,12.558000)+hue(masks/bo/bo_mecha_colour02_msk.png,16.000000)+value(masks/bo/bo_mecha_colour02_msk.png,3.605000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,213.488007)+hue(masks/bo/bo_mecha_ammo_msk.png,205.115997)","bo_mecha_tex.png+value(masks/bo/bo_mecha_colour01_msk.png,1.047000)+saturation(masks/bo/bo_mecha_colour01_msk.png,8.721000)+hue(masks/bo/bo_mecha_colour01_msk.png,12.558000)+hue(masks/bo/bo_mecha_colour02_msk.png,16.000000)+value(masks/bo/bo_mecha_colour02_msk.png,3.605000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,213.488007)","bo_mecha_tex.png+hue(masks/bo/bo_mecha_colour01_msk.png,12.558000)+hue(masks/bo/bo_mecha_colour01_msk.png,1.047000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,221.860001)+hue(masks/bo/bo_mecha_colour02_msk.png,8.372000)+hue(masks/bo/bo_mecha_ammo_msk.png,205.115997)","bo_mecha_tex.png+hue(masks/bo/bo_mecha_colour01_msk.png,12.558000)+hue(masks/bo/bo_mecha_colour01_msk.png,1.047000)+hue(masks/bo/bo_mecha_eyesvisor_msk.png,221.860001)+hue(masks/bo/bo_mecha_colour02_msk.png,8.372000)" 103 | "CrowMechaGold","CrowMecha",,,,,50000,,"TID_CROW_MECHA_GOLD_SKIN","TID_CROW_MECHA_GOLD_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"crow_mechagold_tex.png","crow_mechagold_tex.png","crow_mechagold_tex.png","crow_mechagold_tex.png" 104 | "CrowMechaNight","CrowMecha",,,,,10000,,"TID_CROW_MECHA_NIGHT_SKIN","TID_CROW_MECHA_NIGHT_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX_VOICE",,"crow_mecha_tex.png+saturation(masks/crow/crow_mecha_colour01_msk.png,0.000000)+value(masks/crow/crow_mecha_colour01_msk.png,0.200000)+value(masks/crow/crow_mecha_colour02_msk.png,0.500000)+saturation(masks/crow/crow_mecha_colour02_msk.png,2.093000)+hue(masks/crow/crow_mecha_colour03_msk.png,209.302002)+value(masks/crow/crow_mecha_colour03_msk.png,1.400000)","crow_mecha_tex.png+saturation(masks/crow/crow_mecha_colour01_msk.png,0.000000)+value(masks/crow/crow_mecha_colour01_msk.png,0.200000)+value(masks/crow/crow_mecha_colour02_msk.png,0.500000)+saturation(masks/crow/crow_mecha_colour02_msk.png,2.093000)+hue(masks/crow/crow_mecha_colour03_msk.png,209.302002)+value(masks/crow/crow_mecha_colour03_msk.png,1.400000)","crow_mecha_tex.png+saturation(masks/crow/crow_mecha_colour01_msk.png,1.047000)+value(masks/crow/crow_mecha_colour01_msk.png,0.233000)+value(masks/crow/crow_mecha_colour02_msk.png,0.814000)+hue(masks/crow/crow_mecha_colour03_msk.png,209.302002)","crow_mecha_tex.png+saturation(masks/crow/crow_mecha_colour01_msk.png,1.047000)+value(masks/crow/crow_mecha_colour01_msk.png,0.233000)+value(masks/crow/crow_mecha_colour02_msk.png,0.814000)+hue(masks/crow/crow_mecha_colour03_msk.png,209.302002)" 105 | "BullDudeFootbullBlue","BullGuyFootbull",,,,,2500,,"TID_BULL_LINEBACKER_SKIN","TID_BULL_LINEBACKER_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"bull_footbull_tex.png+hue(masks/bull/bull_footbull_colour01_msk.png,217.673996)+value(masks/bull/bull_footbull_colour01_msk.png,1.744000)+saturation(masks/bull/bull_footbull_colour01_msk.png,2.558000)+value(masks/bull/bull_footbull_helmet_msk.png,0.465000)+value(masks/bull/bull_footbull_metal_msk.png,0.233000)","bull_footbull_tex.png+hue(masks/bull/bull_footbull_colour01_msk.png,217.673996)+value(masks/bull/bull_footbull_colour01_msk.png,1.744000)+saturation(masks/bull/bull_footbull_colour01_msk.png,2.558000)+value(masks/bull/bull_footbull_helmet_msk.png,0.465000)+value(masks/bull/bull_footbull_metal_msk.png,0.233000)","bull_footbull_tex.png+hue(masks/bull/bull_footbull_colour01_msk.png,217.673996)","bull_footbull_tex.png+hue(masks/bull/bull_footbull_colour01_msk.png,217.673996)" 106 | "GunslingerOutlaw","GunSlingerRockstar",,,,,500,,"TID_COLT_OUTLAW_SKIN","TID_COLT_OUTLAW_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"colt_outlaw_tex.pvr","colt_outlaw_tex.pvr","colt_outlaw_tex.pvr","colt_outlaw_tex.pvr" 107 | "WhirlwindHogrider","WhirlwindHogrider",,,,,,80,"TID_CARL_HOG_RIDER_SKIN","TID_CARL_HOG_RIDER_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"carl_hogrider_tex.pvr","carl_hogrider_tex.pvr","carl_hogrider_tex.pvr","carl_hogrider_tex.pvr" 108 | "BallBeach","BallBeach",,,,,,,,,,,,,, 109 | "ArcadeDefault","ArcadeDefault",,,"DamageBoosterDefault",,,,,,,,"8bit_tex.pvr","8bit_tex.pvr+hue(masks/8bit/8bit_msk.png,138.000000)+saturation(masks/8bit/8bit_msk.png,3.000000)+hue(masks/8bit/8bit_light_msk.png,146.000000)","8bit_tex.pvr","8bit_tex.pvr+hue(masks/8bit/8bit_msk.png,138.000000)+saturation(masks/8bit/8bit_msk.png,3.000000)+hue(masks/8bit/8bit_light_msk.png,146.000000)" 110 | "DamageBoosterDefault","DamageBoosterDefault",,,,,,,,,,,"8bit_tex.pvr","8bit_tex.pvr+hue(masks/8bit/8bit_msk.png,138.000000)+saturation(masks/8bit/8bit_msk.png,3.000000)+hue(masks/8bit/8bit_light_msk.png,146.000000)","8bit_tex.pvr","8bit_tex.pvr+hue(masks/8bit/8bit_msk.png,138.000000)+saturation(masks/8bit/8bit_msk.png,3.000000)+hue(masks/8bit/8bit_light_msk.png,146.000000)" 111 | "SniperPink","SniperPink",,,,,500,,"TID_PIPER_PINK_SKIN","TID_PIPER_PINK_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"piper_pink_tex.pvr","piper_pink_tex.pvr","piper_pink_tex.pvr","piper_pink_tex.pvr" 112 | "ArcadeClassic","ArcadeClassic",,,"DamageBoosterDefault",,,30,"TID_8BIT_CLASSIC_SKIN","TID_8BIT_CLASSIC_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"8bit_classic_tex.pvr","8bit_classic_tex.pvr+hue(masks/8bit/8bit_msk.png,138.000000)+saturation(masks/8bit/8bit_msk.png,3.000000)+hue(masks/8bit/8bit_light_msk.png,146.000000)","8bit_classic_tex.pvr","8bit_classic_tex.pvr+hue(masks/8bit/8bit_msk.png,138.000000)+saturation(masks/8bit/8bit_msk.png,3.000000)+hue(masks/8bit/8bit_light_msk.png,146.000000)" 113 | "NinjaShark","NinjaShark",,,,,,80,"TID_LEON_SHARK_SKIN","TID_LEON_SHARK_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"shark_leon_tex.pvr","shark_leon_tex.pvr","shark_leon_tex.pvr","shark_leon_tex.pvr" 114 | "BlackHoleBlue","BlackHoleBlue",,,,,500,,"TID_TARA_BLUE_SKIN","TID_TARA_BLUE_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"tara_blue_tex.pvr","tara_blue_tex.pvr","tara_blue_tex.pvr","tara_blue_tex.pvr" 115 | "LootBoxMoonFestival","LootBoxMoonFestival",,,,,,,,,,,,,, 116 | "SandstormDefault","SandstormDefault",,,,,,,,,,,"sandy_tex.pvr","sandy_tex.pvr","sandy_tex.pvr","sandy_tex.pvr" 117 | "BeeSniperDefault","BeeSniperDefault",,,,,,,,,,,"spike_tex.pvr","spike_tex.pvr","spike_tex.pvr","spike_tex.pvr" 118 | "BossRaceBossDefault","BossRaceBossDefault",,,,,,,,,,,"bossbot_tex.pvr","bossbot_tex.pvr","bossbot_tex.pvr","bossbot_tex.pvr" 119 | "BarkeepWizardRed","BarkeepWizardRed",,,,,2500,,"TID_BARLEY_RED_WIZARD_SKIN","TID_BARLEY_RED_WIZARD_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"barley_wizard_tex.pvr+hue(masks/barley/coat_msk.png,133.953003)+value(masks/barley/coat_msk.png,0.698000)","barley_wizard_tex.pvr+hue(masks/barley/coat_msk.png,133.953003)+value(masks/barley/coat_msk.png,0.698000)","barley_wizard_tex.pvr+hue(masks/barley/coat_msk.png,133.953003)+value(masks/barley/coat_msk.png,0.698000)","barley_wizard_tex.pvr+hue(masks/barley/coat_msk.png,133.953003)+value(masks/barley/coat_msk.png,0.698000)" 120 | "HookPirate","HookPirate",,,,,,80,"TID_GENE_PIRATE_SKIN","TID_GENE_PIRATE_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"gene_pirate_tex.pvr","gene_pirate_tex.pvr","gene_pirate_tex.pvr","gene_pirate_tex.pvr" 121 | "Sandstormsleepy","Sandstormsleepy",,,,,,30,"TID_SANDY_SLEEPY_SKIN","TID_SANDY_SLEEPY_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"sleepy_sandy_tex.pvr","sleepy_sandy_tex.pvr","sleepy_sandy_tex.pvr","sleepy_sandy_tex.pvr" 122 | "MummyDefault","MummyDefault",,,,,,,,,,,"emz_tex.pvr","emz_tex.pvr","emz_tex.pvr","emz_tex.pvr" 123 | "Sniperrose","Sniperrose",3,,,,,80,"TID_PIPER_CALAVERA_SKIN","TID_PIPER_CALAVERA_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"piper_rose_tex.pvr","piper_rose_tex.pvr","piper_rose_tex.pvr","piper_rose_tex.pvr" 124 | "SpawnerDudeDefault","SpawnerDudeDefault",,,"ArtilleryTurretDefault","ShamanBearDefault",,,,,,,"mari_tex.pvr","mari_tex.pvr","mari_tex.pvr","mari_tex.pvr" 125 | "ShotgunGirlWitch","ShotgunGirlWitch",3,,,,,150,"TID_SHELLY_WITCH_SKIN","TID_SHELLY_WITCH_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX",,"shelly_witch_tex.pvr","shelly_witch_tex.pvr","shelly_witch_tex.pvr","shelly_witch_tex.pvr" 126 | "MechanicKnightDark","MechanicKnightDark",,,"TurretDragonDark",,10000,,"TID_JESSIE_DARK_KNIGHT_SKIN","TID_JESSIE_DARK_KNIGHT_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX_TURRET",,"jessie_knight_tex.pvr+hue(masks/jessie/jessie_knight_plume_msk.png,117.209000)+value(masks/jessie/jessie_knight_plume_msk.png,0.600000)+saturation(masks/jessie/jessie_knight_gold_msk.png,0.200000)+value(masks/jessie/jessie_knight_gold_msk.png,0.581000)+value(masks/jessie/jessie_knight_metal_msk.png,0.000000)+hue(masks/jessie/jessie_knight_fabric_msk.png,125.581001)+value(masks/jessie/jessie_knight_fabric_msk.png,0.600000)","jessie_knight_tex.pvr+hue(masks/jessie/jessie_knight_plume_msk.png,117.209000)+value(masks/jessie/jessie_knight_plume_msk.png,0.600000)+saturation(masks/jessie/jessie_knight_gold_msk.png,0.200000)+value(masks/jessie/jessie_knight_gold_msk.png,0.581000)+value(masks/jessie/jessie_knight_metal_msk.png,0.000000)+hue(masks/jessie/jessie_knight_fabric_msk.png,125.581001)+value(masks/jessie/jessie_knight_fabric_msk.png,0.600000)","jessie_knight_tex.pvr+hue(masks/jessie/jessie_knight_plume_msk.png,140.000000)+hue(masks/jessie/jessie_knight_plume_msk.png,0.400000)+saturation(masks/jessie/jessie_knight_gold_msk.png,0.200000)+value(masks/jessie/jessie_knight_gold_msk.png,0.200000)+value(masks/jessie/jessie_knight_metal_msk.png,0.698000)+value(masks/jessie/jessie_knight_fabric_msk.png,0.930000)+hue(masks/jessie/jessie_knight_fabric_msk.png,117.209000)","jessie_knight_tex.pvr+hue(masks/jessie/jessie_knight_plume_msk.png,140.000000)+hue(masks/jessie/jessie_knight_plume_msk.png,0.400000)+saturation(masks/jessie/jessie_knight_gold_msk.png,0.200000)+value(masks/jessie/jessie_knight_gold_msk.png,0.200000)+value(masks/jessie/jessie_knight_metal_msk.png,0.698000)+value(masks/jessie/jessie_knight_fabric_msk.png,0.930000)+hue(masks/jessie/jessie_knight_fabric_msk.png,117.209000)" 127 | "TurretDragonDark","TurretDragonDark",,,,,,,,,,,"turret_dragon_tex.pvr+hue(masks/jessie/jessie_turrret_dragon_main_msk.png,322.325989)+saturation(masks/jessie/jessie_turrret_dragon_main_msk.png,0.349000)+value(masks/jessie/jessie_turrret_dragon_main_msk.png,0.200000)+hue(masks/jessie/jessie_turrret_dragon_belly_msk.png,330.697998)+saturation(masks/jessie/jessie_turrret_dragon_belly_msk.png,1.395000)+value(masks/jessie/jessie_turrret_dragon_belly_msk.png,0.930000)","turret_dragon_tex.pvr+hue(masks/jessie/jessie_turrret_dragon_main_msk.png,322.325989)+saturation(masks/jessie/jessie_turrret_dragon_main_msk.png,0.349000)+value(masks/jessie/jessie_turrret_dragon_main_msk.png,0.200000)+hue(masks/jessie/jessie_turrret_dragon_belly_msk.png,330.697998)+saturation(masks/jessie/jessie_turrret_dragon_belly_msk.png,1.395000)+value(masks/jessie/jessie_turrret_dragon_belly_msk.png,0.930000)","turret_dragon_tex.pvr+hue(masks/jessie/jessie_turrret_dragon_main_msk.png,351.627991)+saturation(masks/jessie/jessie_turrret_dragon_main_msk.png,1.047000)+value(masks/jessie/jessie_turrret_dragon_main_msk.png,0.814000)","turret_dragon_tex.pvr+hue(masks/jessie/jessie_turrret_dragon_main_msk.png,351.627991)+saturation(masks/jessie/jessie_turrret_dragon_main_msk.png,1.047000)+value(masks/jessie/jessie_turrret_dragon_main_msk.png,0.814000)" 128 | "HammerDudeDJ","HammerDudeDJ",,,,,,80,"TID_FRANK_DJ_SKIN","TID_FRANK_DJ_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"frank_dj_tex.pvr","frank_dj_tex.pvr","frank_dj_tex.pvr+value(masks/frank/frank_dj_coat_msk.png,0.200000)","frank_dj_tex.pvr+value(masks/frank/frank_dj_coat_msk.png,0.200000)" 129 | "NinjaWolf","NinjaWolf",3,,,,,150,"TID_LEON_WEREWOLF_SKIN","TID_LEON_WEREWOLF_SKIN_SHOP","TID_SKIN_INFO_ANIM_SOUND_FX",,"leon_wolf_tex.pvr","leon_wolf_tex.pvr","leon_wolf_tex.pvr","leon_wolf_tex.pvr" 130 | "SpeedyDefault","SpeedyDefault",,,,,,,"TID_CROW_WHITE_SKIN","TID_CROW_WHITE_SKIN_SHOP","TID_SKIN_INFO_NORMAL",,"crowwhite_d_01.pvr","crowwhite_d_01.pvr","crowwhite_d_01.pvr","crowwhite_d_01.pvr" 131 | "LuchadorBrown","LuchadorBrown",4,3,,,,150,"TID_EL_PRIMO_BROWN_SKIN","TID_EL_PRIMO_BROWN_SKIN_SHOP","TID_SKIN_INFO_ANIM_FX",,"primo_brown_tex.pvr","primo_brown_tex.pvr","primo_brown_tex.pvr","primo_brown_tex.pvr" 132 | "HomerDefault","HomerDefault",,,,,,,,,,,"spike_tex.pvr","spike_tex.pvr","spike_tex.pvr","spike_tex.pvr" 133 | "TrickshotDudeTotal","TrickshotDudeTotal",,3,,,,,,,,,"rico_tex.pvr","rico_tex.pvr","rico_tex.pvr","rico_tex.pvr" 134 | "NinjaSally","NinjaSally",4,3,,,,80,"TID_LEON_SALLY_SKIN","TID_LEON_SALLY_SKIN_SHOP","TID_SKIN_INFO_FX",,"leon_sally_tex.pvr","leon_sally_tex.pvr","leon_sally_tex.pvr","leon_sally_tex.pvr" 135 | "WhirlwindLeonard","WhirlwindLeonard",4,3,,,,80,"TID_CARL_LEONARD_SKIN","TID_CARL_LEONARD_SKIN_SHOP","TID_SKIN_INFO_FX",,"carl_leonard_tex.pvr","carl_leonard_tex.pvr","carl_leonard_tex.pvr","carl_leonard_tex.pvr" 136 | -------------------------------------------------------------------------------- /src/main/resources/Assets/characters.csv: -------------------------------------------------------------------------------- 1 | Name,LockedForChronos,Disabled,ItemName,WeaponSkill,UltimateSkill,Pet,Speed,Hitpoints,MeleeAutoAttackSplashDamage,AutoAttackSpeedMs,AutoAttackDamage,AutoAttackBulletsPerShot,AutoAttackMode,AutoAttackProjectileSpread,AutoAttackProjectile,AutoAttackRange,RegeneratePerSecond,UltiChargeMul,UltiChargeUltiMul,Type,DamagerPercentFromAliens,DefaultSkin,FileName,BlueExportName,RedExportName,ShadowExportName,AreaEffect,DeathAreaEffect,TakeDamageEffect,DeathEffect,MoveEffect,ReloadEffect,OutOfAmmoEffect,DryFireEffect,SpawnEffect,MeleeHitEffect,AutoAttackStartEffect,BoneEffect1,BoneEffect2,BoneEffect3,BoneEffect4,BoneEffectUse,LoopedEffect,LoopedEffect2,KillCelebrationSoundVO,InLeadCelebrationSoundVO,StartSoundVO,UseUltiSoundVO,TakeDamageSoundVO,DeathSoundVO,AttackSoundVO,AttackStartEffectOffset,TwoWeaponAttackEffectOffset,ShadowScaleX,ShadowScaleY,ShadowX,ShadowY,ShadowSkew,Scale,HeroScreenScale,FitToBoxScale,EndScreenScale,GatchaScreenScale,HomeScreenScale,HeroScreenXOffset,HeroScreenZOffset,CollisionRadius,HealthBar,HealthBarOffsetY,FlyingHeight,ProjectileStartZ,StopMovementAfterMS,WaitMS,TID,HeroBundleTID,ForceAttackAnimationToEnd,IconSWF,IconExportName,RecoilAmount,Homeworld,FootstepClip,DifferentFootstepOffset,FootstepIntervalMS,AttackingWeaponScale,UseThrowingLeftWeaponBoneScaling,UseThrowingRightWeaponBoneScaling,CommonSetUpgradeBonus,RareSetUpgradeBonus,SuperRareSetUpgradeBonus,CanWalkOverWater,UseColorMod,RedAdd,GreenAdd,BlueAdd,RedMul,GreenMul,BlueMul,ChargeUltiAutomatically,VideoLink,ShouldEncodePetStatus,SecondaryPet,ExtraMinions,PetAutoSpawnDelay 2 | string,boolean,boolean,string,string,string,string,int,int,boolean,int,int,int,string,int,string,int,int,int,int,String,int,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,string,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,int,string,int,int,int,int,int,string,string,boolean,string,string,int,string,string,int,int,int,boolean,boolean,int,int,int,boolean,boolean,int,int,int,int,int,int,int,string,boolean,boolean,int,int 3 | ShotgunGirl,,,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 4 | Gunslinger,,,colt,GunslingerWeapon,GunslingerUlti,,720,2800,,,,,,,,12,,115,90,Hero,,GunSlingerDefault,,,,,,,takedamage_gen,death_gunslinger,Gen_move_fx,reload_gunslinger,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Hotshot_Kill,Hotshot_Lead,Hotshot_Start,Hotshot_Ulti,Hotshot_Takedamge_Vo,Hotshot_Die,,35,50,80,80,,,35,116,210,284,90,185,270,,,120,Medium,-52,,400,,,TID_GUNSLINGER,TID_HERO_BUNDLE_1,,sc/ui.sc,hero_icon_colt,300,human,footstep,25,300,160,,,2,3,1,,,,,,,,,,ColtTutorial,,,, 5 | BullDude,,,bull,BullDudeWeapon,BullDudeUlti,,770,4900,,,,,,,,12,,95,120,Hero,,BullGuyDefault,,,,,,,takedamage_gen,death_bull_dude,Gen_move_fx,reload_bull_dude,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Bull_kill,Bull_lead,Bull_start,Bull_ulti,Bull_takedamage_vo,Bull_die,,40,,80,80,,,35,116,175,236,80,150,220,,,145,Medium,-64,,450,,,TID_BULL_DUDE,TID_HERO_BUNDLE_2,,sc/ui.sc,hero_icon_bull,600,human,footstep,40,300,130,,,1,2,3,,,,,,,,,,BullTutorial,,,, 6 | RocketGirl,,,brock,RocketGirlWeapon,RocketGirlUlti,,720,2800,,,,,,,,12,,100,80,Hero,,RocketGirlDefault,,,,,,,takedamage_gen,death_rocket_girl,Gen_move_fx,reload_rocket_girl,No_ammo_shotgungirl,Brock_dryfire,,,,,,,,,,,Brock_kill_vo,Brock_lead_vo,Brock_start_vo,Brock_ulti_vo,Brock_hurt_vo,Brock_die_vo,,35,,80,80,,,35,116,200,270,90,180,260,,,120,Medium,-52,,500,,,TID_ROCKET_GIRL,TID_HERO_BUNDLE_3,,sc/ui.sc,hero_icon_brock,300,human,footstep,25,500,100,,,2,3,1,,,,,,,,,,BrockTutorial,,,, 7 | TrickshotDude,,,ricochet,TrickshotDudeWeapon,TrickshotDudeUlti,,720,2600,,,,,,,,12,,105,105,Hero,,TrickshotDefault,,,,,,,takedamage_gen,death_trickshot_dude,Gen_move_fx,reload_trickshot_dude,No_ammo_shotgungirl,dry_fire_mechanic,,,,,,,,,,,Rick_kill,Rick_lead,Rick_start,Rick_ulti,Rick_hurt,Rick_die,,60,,80,80,,,35,116,200,280,90,175,260,,,120,Medium,-49,,450,,,TID_TRICKSHOT_DUDE,TID_HERO_BUNDLE_4,,sc/ui.sc,hero_icon_rick,300,human,footstep,25,300,160,,,2,3,1,,,,,,,,,,RicoTutorial,,,, 8 | Cactus,,,spike,CactusWeapon,CactusUlti,,720,2400,,,,,,,,12,,120,120,Hero,,CactusDefault,,,,,,,takedamage_gen,death_cactus,Gen_move_fx,reload_cactus,No_ammo_shotgungirl,crow_dryfire,,,,,,,,,,,,,,,,,,35,,80,80,,,35,116,240,324,80,210,290,,,120,Medium,-32,,450,,,TID_CACTUS,TID_HERO_BUNDLE_5,,sc/ui.sc,hero_icon_spike,0,human,footstep,40,300,100,true,true,2,1,3,,,,,,,,,,SpikeTutorial,,,, 9 | Barkeep,,,barley,BarkeepWeapon,BarkeepUlti,,720,2400,,,,,,,,12,,100,70,Hero,,BarkeepDefault,,,,,,,takedamage_gen,death_barkeep,Gen_move_fx,reload_barkeep,No_ammo_shotgungirl,dry_fire_barkeep,,,,,,,,,,,Barley_Kill,Barley_Lead,Barley_Start,Barley_Ulti,Barley_Hurt,Barley_Die,Barley_throw,,,80,80,,,35,116,190,290,80,180,250,,,120,Medium,-45,,350,,,TID_BARKEEP,TID_HERO_BUNDLE_6,,sc/ui.sc,hero_icon_barley,0,human,footstep,25,300,100,true,true,2,3,1,,,,,,,,,,BarleyTutorial,,,, 10 | Mechanic,,,jessie,MechanicWeapon,MechanicUlti,,720,3200,,,,,,,,12,,83,92,Hero,,MechanicDefault,,,,,,,takedamage_gen,death_mechanic,Gen_move_fx,reload_mechanic,No_ammo_shotgungirl,dry_fire_mechanic,,,,,,,,,,,Jess_kill,Jess_lead,Jess_start,Jess_ulti,Jess_takedamage,Jess_die,,35,,80,80,,,35,116,190,300,80,150,270,-800,100,120,Medium,-47,,350,,,TID_MECHANIC,TID_HERO_BUNDLE_7,,sc/ui.sc,hero_icon_jess,500,human,footstep,20,200,160,,,3,2,1,,,,,,,,,,JessieTutorial,,,, 11 | Shaman,,,nita,ShamanWeapon,ShamanUlti,,720,4000,,,,,,,,12,,78,90,Hero,,ShamanDefault,,,,,,,takedamage_gen,death_shaman,Gen_move_fx,,No_ammo_shotgungirl,dry_fire_barkeep,,,,,,,,,,,Nita_kill,Nita_lead,Nita_start,Nita_ulti,Nita_hurt,Nita_death,,35,,80,80,,,35,116,190,250,80,150,270,-600,1000,120,Medium,-46,,100,,,TID_SHAMAN,TID_HERO_BUNDLE_8,,sc/ui.sc,hero_icon_nita,1000,human,footstep,25,250,160,,,3,1,2,,,,,,,,,,NitaTutorial,,,, 12 | TntDude,,,dynamike,TntDudeWeapon,TntDudeUlti,TntPet,720,2800,,,,,,,,12,,120,91,Hero,,TntGuyDefault,,,,,,,takedamage_gen,death_tnt_dude,Gen_move_fx,reload_tnt_dude,No_ammo_shotgungirl,dry_fire_barkeep,,,,,,,,,,,Tnt_guy_kill_vo,Tnt_guy_lead_vo,Tnt_guy_start_vo,Tnt_guy_ulti_vo,Tnt_guy_hurt_vo,Tnt_guy_die_vo,,35,,80,80,,,35,116,190,300,80,150,270,,,120,Medium,-50,,350,,,TID_TNT_DUDE,TID_HERO_BUNDLE_9,,sc/ui.sc,hero_icon_mike,0,human,footstep,25,200,100,true,true,2,1,3,,,,,,,,,,MikeTutorial,,,, 13 | Luchador,,,elprimo,LuchadorWeapon,LuchadorUlti,,770,5800,,,,,,,,12,,120,120,Hero,,LuchadorDefault,,,,,,,takedamage_gen,death_luchador,Gen_move_fx,,No_ammo_shotgungirl,dry_fire_barkeep,,Gen_hit_melee,,,,,,,,,El_primo_kill,El_primo_lead,El_primo_start,El_primo_ulti,El_primo_hurt,El_primo_die,El_primo_atk,50,50,80,80,,,35,116,170,245,80,150,235,,,145,Medium,-56,,400,,,TID_LUCHADOR,TID_HERO_BUNDLE_10,,sc/ui.sc,hero_icon_primo,0,human,footstep,40,250,130,,,1,3,2,,,,,,,,,,PrimpTutorial,,,, 14 | Undertaker,,,mortis,UndertakerWeapon,UndertakerUlti,,820,3800,,,,,,,,12,,92,120,Hero,,UndertakerDefault,,,,,,,takedamage_gen,death_undertaker,Gen_move_fx,reload_undertaker,No_ammo_shotgungirl,dry_fire_barkeep,,Dummy_effect,,,,,,,,,Mortis_kill,Mortis_lead,Mortis_start,Mortis_ulti_vo,Mortis_hurt,Mortis_die,Mortis_atk_vo,50,,80,80,,,35,130,200,285,95,170,260,,,120,Medium,-59,,350,,,TID_UNDERTAKER,TID_HERO_BUNDLE_11,,sc/ui.sc,hero_icon_mortis,0,human,footstep,25,350,165,,,1,2,3,,,,,,,,,,MortisTutorial,,,, 15 | Crow,,,crow,CrowWeapon,CrowUlti,,820,2400,,,,,,,,12,,84,75,Hero,,CrowDefault,,,,,,,takedamage_gen,death_crow,Gen_move_fx,reload_crow,No_ammo_shotgungirl,crow_dryfire,,,,,,,,,,,Crow_Kill,Crow_Lead,Crow_Start,Crow_Ulti,Crow_Takedamage,Crow_Die,,45,,80,80,,,35,116,230,350,90,210,290,,,120,Medium,-41,,400,,,TID_CROW,TID_HERO_BUNDLE_12,,sc/ui.sc,hero_icon_crow,0,human,footstep,20,200,100,true,true,2,1,3,,,,,,,,,,CrowTutorial,,,, 16 | DeadMariachi,,,poco,DeadMariachiWeapon,DeadMariachiUlti,,720,3800,,,,,,,,12,,130,150,Hero,,DeadMariachiDefault,,,,,,,takedamage_gen,death_dead_mariachi,Gen_move_fx,reload_dead_mariachi,No_ammo_shotgungirl,dry_fire_barkeep,,,,,,,,,,,Poco_kill,Poco_lead,Poco_start,Poco_ulti_vo,Poco_hurt,Poco_die,,20,,80,80,,,35,116,200,300,85,180,260,,,120,Medium,-56,,0,,,TID_DEAD_MARIACHI,TID_HERO_BUNDLE_13,,sc/ui.sc,hero_icon_poco,0,human,footstep,25,250,100,,,1,3,2,,,,,,,,,,PocoTutorial,,,, 17 | BowDude,,,bo,BowDudeWeapon,BowDudeUlti,,720,3600,,,,,,,,12,,80,95,Hero,,BowDudeDefault,,,,,,,takedamage_gen,death_bow_dude,Gen_move_fx,reload_bow_dude,No_ammo_shotgungirl,dry_fire_bowdude,,,,,,,,,,,Bo_kill,Bo_lead,Bo_start,Bo_ulti_vo,Bo_hurt,Bo_die,Bo_atk_vo,45,,80,80,,,35,106,170,245,75,165,220,-150,,120,Medium,-56,,400,,,TID_BOW_DUDE,TID_HERO_BUNDLE_14,,sc/ui.sc,hero_icon_bo,0,human,footstep,30,300,100,true,,1,2,3,,,,,,,,,,BoTutorial,,,, 18 | Sniper,,,piper,SniperWeapon,SniperUlti,,720,2400,,,,,,,,12,,97,90,Hero,,SniperDefault,,,,,,,takedamage_gen,death_sniper,Gen_move_fx,reload_sniper,No_ammo_shotgungirl,Minig_dryfire,,,,,,,,,,,Piper_Kill,Piper_Lead,Piper_Start,Piper_Ulti,Piper_Takedamage,Piper_Die,,45,,80,80,,,35,116,200,320,90,190,260,,,120,Medium,-46,,450,,,TID_SNIPER,TID_HERO_BUNDLE_15,,sc/ui.sc,hero_icon_piper,100,human,footstep,25,400,160,,,2,3,1,,,,,,,,,,PiperTutorial,,,, 19 | MinigunDude,,,pam,MinigunDudeWeapon,MinigunDudeUlti,,720,4300,,,,,,,,12,,105,130,Hero,,MinigunDudeDefault,,,,,,,takedamage_gen,death_minigun,Gen_move_fx,reload_minigun,No_ammo_shotgungirl,Minig_dryfire,,,,,,,,,,,Pam_kill,Pam_lead,Pam_start,Pam_ulti,Pam_hurt,Pam_die,,40,,80,80,,,35,95,140,205,70,140,190,-500,,145,Medium,-59,,450,,,TID_MINIGUN_DUDE,TID_HERO_BUNDLE_16,,sc/ui.sc,hero_icon_mj,400,human,footstep,30,400,130,,,1,3,2,,,,,,,,,,PamTutorial,,,, 20 | BlackHole,,,tara,BlackHoleWeapon,BlackHoleUlti,BlackHolePet,720,3200,,,,,,,,12,,75,90,Hero,,BlackholeDefault,,,,,,,takedamage_gen,death_blackhole,Gen_move_fx,reload_blackhole,No_ammo_shotgungirl,Mystic_dryfire,,,,,,,,,,,Tara_kill_vo,Tara_lead_vo,Tara_start_vo,,Tara_hurt_vo,Tara_die_vo,,50,,80,80,,,35,120,210,300,90,175,270,,,120,Medium,-59,,450,,,TID_BLACK_HOLE,TID_HERO_BUNDLE_17,,sc/ui.sc,hero_icon_taro,400,human,footstep,25,300,130,,,1,2,3,,,,,,,,,,TaraTutorial,,,, 21 | BarrelBot,,,darryl,BarrelBotWeapon,BarrelBotUlti,,770,4800,,,,,,,,12,,117,120,Hero,,BarrelbotDefault,,,,,,,takedamage_gen,death_barrel_bot,Gen_move_fx,reload_barrel_bot,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,,,,,,,,50,0,80,80,,,35,116,190,257,80,175,230,,,145,Medium,-48,,450,,,TID_BARREL_BOT,TID_HERO_BUNDLE_18,,sc/ui.sc,hero_icon_barrelbot,600,human,footstep,40,300,130,,,1,2,3,,,,,,,,,33,DarrylTutorial,,,, 22 | ArtilleryDude,,,penny,ArtilleryDudeWeapon,ArtilleryDudeUlti,,720,3200,,,,,,,,12,,93,100,Hero,,ArtilleryGalDefault,,,,,,,takedamage_gen,death_artillery_dude,Gen_move_fx,reload_artillery_dude,No_ammo_shotgungirl,dry_fire_mechanic,,,,,,,,,,,Penny_kill,Penny_lead,Penny_start,Penny_ulti,Penny_takedamage,Penny_die,,35,,80,80,,,35,110,190,290,80,150,260,-500,600,120,Medium,-45,,400,,,TID_ARTILLERY_DUDE,TID_HERO_BUNDLE_19,,sc/ui.sc,hero_icon_penny,500,human,footstep,20,200,160,,,3,2,1,,,,,,,,,,PennyTutorial,,,, 23 | HammerDude,,,frank,HammerDudeWeapon,HammerDudeUlti,,770,6100,,,,,,,,12,,120,120,Hero,,FrankDefault,,,,,,,takedamage_gen,death_hammer_dude,Gen_move_fx,,No_ammo_shotgungirl,dry_fire_barkeep,,,,,,,,,,,Frank_vo,Frank_vo,Frank_vo,Frank_vo,Frank_vo,Frank_vo,Frank_vo,75,,80,80,,,35,110,150,240,80,150,230,,,145,Medium,-60,,100,,,TID_HAMMER_DUDE,TID_HERO_BUNDLE_20,,sc/ui.sc,hero_icon_frank,0,human,footstep,40,250,130,,,1,3,2,,,,,,,,,,FrankTutorial,,,, 24 | HookDude,,,gene,HookWeapon,HookUlti,,720,3600,,,,,,,,12,,130,100,Hero,,HookDefault,,,,,,,takedamage_gen,death_hook_dude,Gen_move_fx,reload_gene,No_ammo_shotgungirl,dry_fire_gene,,,,,,,,,,,Gene_vo,Gene_vo,Gene_vo,Gene_vo,Gene_vo,Gene_vo,,30,,80,80,,,35,116,230,340,90,175,270,,,120,Medium,-36,,350,,,TID_HOOK,TID_HERO_BUNDLE_HOOK,,sc/ui.sc,hero_icon_gene,0,human,footstep,25,350,200,,,1,3,2,,,,,,,,,,GeneTutorial,,,, 25 | ClusterBombDude,,,tick,ClusterBombDudeWeapon,ClusterBombDudeUlti,,720,2200,,,,,,,,12,,100,70,Hero,,ClusterBombDefault,,,,,,,takedamage_gen,death_artillery_dude,Gen_move_fx,reload_tick,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Tick_vo_1,Tick_vo_1,Tick_vo_1,Tick_vo_1,Tick_vo_hurt,Tick_vo_die,,35,,80,80,,,35,110,230,340,80,150,270,,,120,Medium,-40,,350,,,TID_CLUSTER_BOMB_DUDE,TID_HERO_BUNDLE_CLUSTER_BOMB_DUDE,,sc/ui.sc,hero_icon_tick,0,human,footstep,85,300,160,,,3,2,1,,,,,,,,,,,true,,, 26 | Ninja,,,leon,NinjaWeapon,NinjaUlti,,820,3200,,,,,,,,12,,110,100,Hero,,NinjaDefault,,,,,,,takedamage_gen,death_ninja,Gen_move_fx,reload_leon,No_ammo_shotgungirl,Dry_fire_leon,,,,,,,,,,,Leon_kill_vo,Leon_lead_vo,Leon_start_vo,Leon_ulti_vo,Leon_hurt_vo,Leon_die_vo,,50,,80,80,,,35,116,190,330,80,150,270,,,120,Medium,-55,,450,,,TID_NINJA,TID_HERO_BUNDLE_NINJA,,sc/ui.sc,hero_icon_leon,0,human,footstep,25,250,130,,,3,2,1,,,,,,,,,,LeonTutorial,,,, 27 | Rosa,,,rosa,RosaWeapon,RosaUlti,,770,5400,,,,,,,,12,,85,100,Hero,,RosaDefault,,,,,,,takedamage_gen,death_rosa,Gen_move_fx,reload_rosa,No_ammo_shotgungirl,dry_fire_barkeep,,,,,,,,,,,Rosa_kill,Rosa_lead,Rosa_start,Rosa_ulti_vo,Rosa_hurt,Rosa_die,,50,,80,80,,,35,110,100,245,80,150,240,,,145,Medium,-55,,400,,,TID_ROSA,TID_HERO_BUNDLE_ROSA,,sc/ui.sc,hero_icon_rosa,0,human,footstep,30,400,130,,,3,2,1,,,,,,,,,,,,,, 28 | Whirlwind,,,carl,WhirlwindWeapon,WhirlwindUlti,,720,4400,,,,,,,,12,,115,70,Hero,,WhirlwindDefault,,,,,,,takedamage_gen,death_whirlwind,Gen_move_fx,reload_whirlwind,No_ammo_shotgungirl,Dry_fire_whirlwind,,carl_def_ulti_hit,,,,,,,,,Carl_kill_vo,Carl_lead_vo,Carl_start_vo,Carl_ulti_vo,Carl_hurt_vo,Carl_die_vo,Carl_atk_vo,30,,80,80,,,35,110,190,320,80,150,260,,,120,Medium,-48,,450,,,TID_WHIRLWIND,TID_HERO_BUNDLE_WHIRLWIND,,sc/ui.sc,hero_icon_carl,0,human,,25,50,200,TRUE,TRUE,1,3,2,,,,,,,,,,,,,, 29 | Baseball,,,bibi,BaseballWeapon,BaseballUlti,,770,4200,,,,,,,,12,,110,112,Hero,,BaseballDefault,,,,,,,takedamage_gen,death_baseball,Gen_move_fx,reload_baseball,No_ammo_shotgungirl,dry_fire_barkeep,,bibi_def_atk_hit,,,,,,,,,Bibi_kill_vo,Bibi_lead_vo,Bibi_start_vo,Bibi_ulti_vo,Bibi_hurt_vo,Bibi_die_vo,,30,,80,80,,,35,116,210,320,90,190,270,,,120,Medium,-48,,450,,,TID_BASEBALL,TID_HERO_BUNDLE_BASEBALL,,sc/ui.sc,hero_icon_bibi,0,human,footstep,25,400,100,,,1,3,2,,,,,,,,,,,,,, 30 | Arcade,,,8bit,ArcadeWeapon,ArcadeUlti,,580,4300,,,,,,,,12,,106,100,Hero,,ArcadeDefault,,,,,,,takedamage_gen,death_arcade,Gen_move_fx,reload_arcade,No_ammo_shotgungirl,arcade_dryfire,,,,,,,,,,,8bit_kill_vo,8bit_lead_vo,8bit_start_vo,8bit_ulti_vo,8bit_hurt_vo,8bit_die_vo,,57,,80,80,,,35,116,240,324,80,210,290,-500,,145,Medium,-43,,450,,,TID_ARCADE,TID_HERO_BUNDLE_ARCADE,,sc/ui.sc,hero_icon_8bit,0,human,footstep,30,400,130,,,1,3,2,,,,,,,,,,,,,, 31 | Sandstorm,,,sandy,SandstormWeapon,SandstormUlti,,770,3800,,,,,,,,12,,80,100,Hero,,SandstormDefault,,,,,,,takedamage_gen,death_rosa,Gen_move_fx,reload_sandy,No_ammo_shotgungirl,Dry_fire_sandy,,,,,,,,,,,Sandy_kill_vo,Sandy_lead_vo,Sandy_start_vo,Sandy_ulti_vo,Sandy_hurt_vo,Sandy_die_vo,,50,,80,80,,,35,116,190,330,80,150,270,,,145,Medium,-55,,400,,,TID_SANDSTORM,TID_HERO_BUNDLE_SANDSTORM,,sc/ui.sc,hero_icon_sandy,0,human,footstep,30,400,130,,,3,2,1,,,,,,,,,,,,,, 32 | BeeSniper,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 33 | Mummy,,,emz,MummyWeapon,MummyUlti,,720,3600,,,,,,,,12,,80,90,Hero,,MummyDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,Emz_reload,No_ammo_shotgungirl,Emz_dryfire,,,,,,,,,,,Emz_kill_vo,Emz_lead_vo,Emz_start_vo,Emz_ulti_vo,Emz_hurt_vo,Emz_die_vo,Emz_atk_vo,30,,80,80,,,35,116,210,270,90,175,240,,,120,Medium,-48,,450,,,TID_MUMMY,TID_HERO_BUNDLE_MUMMY,,sc/ui.sc,hero_icon_emz,0,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 34 | SpawnerDude,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 35 | Speedy,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 36 | Homer,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 37 | TutorialDummy,,,,,,,0,700,,,,,,,,12,,,,Minion_Building,,MeleeBotDefault,,,,,,,takedamage_gen,nuts_bolts_metal_explosion,Gen_move_fx,,No_ammo_shotgungirl,,tutorial_robo_spawn,,,,,,,,,,,,,,,,,35,,80,80,,,35,140,,,,,,,,145,Medium,-60,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 38 | TutorialDummy2,,,,,,,0,700,,,,,,,,12,,,,Minion_Building_charges_ulti,,MeleeBotDefault,,,,,,,takedamage_gen,nuts_bolts_metal_explosion,Gen_move_fx,,,,tutorial_robo_spawn,,,,,,,,,,,,,,,,,35,,80,80,,,35,140,,,,,,,,145,Medium,-60,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 39 | MechanicTurret,,,,,,,0,2800,,300,260,,,30,MechanicTurretProjectile,27,,,,Minion_Building,,TurretDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,,,,,SpawnTurret,,jessie_def_turret_atk,,,,,,,,,,,,,,,35,,75,75,,,25,116,220,297,,,,1000,-400,120,Medium,-32,,220,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 40 | HealingStation,,,,,,,0,2800,,,,,,,,12,,,,Minion_Building,,HealstationDefault,,,,,HealingStationHeal,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,,,,,pam_def_ulti_spawn,,,,,,,,,,,,,,,,,,,75,75,,,25,106,100,135,,,,1400,-500,120,Medium,-49,,300,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 41 | Safe,,,,,,,0,45000,,700,,,,,,20,,,,Pvp_Base,,Safe,,,,,,,nuts_bolts_metal_small,safe_explosion,,,,,,,,,,,,,,,,,,,,,,,,100,-100,0,0,0,84,,,,,,,,160,Medium,-75,,300,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 42 | ExplodingBarrel,,,,,,,0,12000,,,,,,,,,,,,Minion_Building,,,sc/level.sc,tnt_box,tnt_box,tnt_box_shadow,,ExplodingBarrelExplosion,,,,,,,,,,,,,,,,,,,,,,,,35,,100,-100,0,0,0,95,,,,,,,,145,Medium,-59,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 43 | PoisonBarrel,,,,,,,0,2,,,,,,,,,,,,Minion_Building,,Safe,,,,,,PoisonBarrelExplosion,,,,,,,,,,,,,,,,,,,,,,,,35,,80,80,,,35,106,,,,,,,,145,,0,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 44 | ShamanPet,,,,,,,610,4000,,600,400,,,,,6,,,,Minion_FindEnemies,,ShamanBearDefault,,,,,,,,death_bull_dude,Gen_move_fx,,,,nita_def_ulti_spawn,,bear_attack,,,,,,,,,,,,,,,30,,85,80,,,25,106,200,280,,,,500,-1250,145,Medium,-63,,100,,,,,,,,,,footstep,25,250,160,,,,,,,,,,,,,,,,,,, 45 | BoneThrowerPet,,,,,,,870,4000,,300,600,,,,,6,1200,,,Minion_Dog,,ShamanBearDefault,,,,,,,,death_bull_dude,Gen_move_fx,,,,nita_def_ulti_spawn,,bear_attack,,,,,,,,,,,,,,,30,,85,80,,,25,84,,,,,,,,120,Medium,-43,,,,,,,,,,,,footstep,25,250,160,,,,,,,,,,,,,,,,,,, 46 | LaserBall,,,,,,,0,1,,,,,,,,,,,,LaserBall,,BallDefault,,,,,,,,laser_ball_goal,,,,,,,,,,,,,,,,,,,,,,,,80,80,,,25,179,,,,,,,,120,,0,,,,,,,,,,,,,,,160,,,,,,,,,,,,,,,,,,, 47 | LootBox,,,,,,,0,6000,,,,,,,,,,,,LootBox,,LootBox,,,,,,,,Gen_wood_explosion,,,,,,,,,,,,,,,,,,,,,,35,,100,-100,0,0,0,95,,,,,,,,145,Medium,-40,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 48 | TutorialDummy3,,,,,,,0,4000,,,,,,,,12,,,,Minion_Building_charges_ulti,,BossBotDefault,,,,,,,takedamage_gen,boss_explosion,Gen_move_fx,,,,tutorial_robo_spawn,,,,,,,,,,,,,,,,,35,,80,80,,,35,200,,,,,,,,145,Medium,-75,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 49 | ArtilleryDudeTurret,,,,,,,0,2800,,2500,1200,,,,ArtilleryDudeTurretProjectile,40,,,,Minion_Building,,ArtilleryTurretDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,,,,,penny_def_ulti_spawn,,penny_def_turret_atk,,,,,,,,,,,,,,,35,,75,75,,,25,116,180,243,,,,1000,-1400,120,Medium,-32,,150,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 50 | CoopMeleeEnemy1,,,,,,,600,4800,,400,260,,,,,5,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,127,200,270,,,,,,120,Medium,-54,,,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 51 | CoopMeleeEnemy2,,,,,,,600,6800,,400,470,,,,,5,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,148,200,270,,,,,,145,Medium,-59,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,30,,30,255,120,255,,,,,, 52 | CoopMeleeEnemy3,,,,,,,600,11000,,400,600,,,,,6,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,169,200,270,,,,,,170,Medium,-65,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,100,,,255,140,140,,,,,, 53 | CoopMeleeEnemy4,,,,,,,600,16200,,400,730,,,,,6,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,190,200,270,,,,,,195,Medium,-70,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,150,100,,255,255,180,,,,,, 54 | CoopFastMeleeEnemy1,,,,,,,900,3000,,600,400,,,,,5,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,106,200,270,,,,,,100,Medium,-43,,,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 55 | CoopFastMeleeEnemy2,,,,,,,900,5400,,600,720,,,,,5,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,127,200,270,,,,,,120,Medium,-49,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,30,,30,255,120,255,,,,,, 56 | CoopFastMeleeEnemy3,,,,,,,900,6900,,600,920,,,,,6,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,148,200,270,,,,,,140,Medium,-54,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,100,,,255,140,140,,,,,, 57 | CoopFastMeleeEnemy4,,,,,,,900,10080,,600,1120,,,,,6,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,169,200,270,,,,,,160,Medium,-59,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,150,100,,255,255,180,,,,,, 58 | CoopRangedEnemy1,,,,,,,750,2000,,1400,630,,,30,CoopRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,127,200,270,,,,,,100,Medium,-49,,350,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 59 | CoopRangedEnemy2,,,,,,,750,3600,,1400,1130,,,30,CoopRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,148,200,270,,,,,,120,Medium,-54,,350,,,,,,,,,,footstep,25,250,130,,,,,,,true,30,,30,255,120,255,,,,,, 60 | CoopRangedEnemy3,,,,,,,750,4600,,1400,1450,,,30,CoopRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,169,200,270,,,,,,140,Medium,-59,,350,,,,,,,,,,footstep,25,250,130,,,,,,,true,100,,,255,140,140,,,,,, 61 | CoopRangedEnemy4,,,,,,,750,6700,,1400,1760,,,30,CoopRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,190,200,270,,,,,,160,Medium,-65,,350,,,,,,,,,,footstep,25,250,130,,,,,,,true,150,100,,255,255,180,,,,,, 62 | TntPet,,,,,,,770,2400,,600,400,,,30,ShotgunGirlPetProjectile,22,320,,,Minion_FollowOwner,,TntPetDefault,,,,,,,,death_shotgun_girl,Gen_move_fx,,,,,,bear_attack,,,,,,,,,,,,,,,30,,85,80,,,25,43,200,270,,,,,,90,Medium,-11,,350,,,,,,,,,,footstep,25,250,160,,,,,,,,,,,,,,,,,,, 63 | BlackHolePet,,,,,,,870,3000,,600,600,,,,,5,,,,Minion_FindEnemies,,BlackholePetDefault,,,,,,,,death_shotgun_girl,,,,,tara_def_ulti_starPower_spawn,,bear_attack,,,,,,sparkle_trail_dark_minion,,,,,,,,,30,,85,80,,,25,95,200,270,,,,,,90,Medium,-43,,350,,,,,,,,,,,25,250,160,,,,,,,,,,,,,,,,,,, 64 | CoopBoss1,,,,BossRapidFire,BossCharge,,600,45000,,400,600,,,,,8,,,,Npc_Boss,,BigBotDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,150,85,80,,,25,250,200,270,,,,,,220,Medium,-100,,500,,,,,,,,,,footstep,60,400,160,,,,,,,,,,,,,,,,,,, 65 | CoopBoss2,,,,BossRapidFire2,BossCharge,,600,55000,,400,640,,,,,9,,,,Npc_Boss,,BigBotDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,150,85,80,,,25,300,200,270,,,,,,250,Medium,-120,,500,,,,,,,,,,footstep,60,400,160,,,,,,,true,30,,30,255,120,255,,,,,, 66 | CoopBoss3,,,,BossRapidFire3,BossCharge,,600,65000,,400,680,,,,,9,,,,Npc_Boss,,BigBotDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,150,85,80,,,25,350,200,270,,,,,,280,Medium,-140,,500,,,,,,,,,,footstep,60,400,160,,,,,,,true,100,,,255,140,140,,,,,, 67 | TutorialExplodingBarrel,,,,,,,0,300,,,,,,,,,,,,Minion_Building,,TntBox,,,,,,ExplodingBarrelExplosion,,,,,,,,,,,,,,,,,,,,,,,,35,,100,-100,0,0,0,95,,,,,,,,145,,-59,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 68 | EventModifierBoss,,,,,,,600,32000,,400,600,,,,,7,,,,Minion_FindEnemies2,,BigBotDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,35,,85,80,,,25,250,200,270,,,,,,220,Medium,-100,,,,,,,,,,,,footstep,25,250,160,,,,,,,,,,,,,,,,,,, 69 | RaidBoss,,,,RaidBossRapidFire,RaidBossCharge,,550,250000,,400,800,,,,,9,,,,Npc_Boss,,BossBotDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,150,85,80,,,25,300,200,270,,,,,,280,Medium,-130,,500,,,,,,,,,,footstep,60,400,160,,,,,,,,,,,,,,,,,,, 70 | RaidBossMeleeEnemy1,,,,,,,650,3600,,400,260,,,,,5,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,127,200,270,,,,,,120,Medium,-54,,,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 71 | RaidBossMeleeEnemy2,,,,,,,650,5100,,400,470,,,,,5,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,148,200,270,,,,,,145,Medium,-59,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,30,,30,255,120,255,,,,,, 72 | RaidBossMeleeEnemy3,,,,,,,650,8250,,400,600,,,,,6,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,169,200,270,,,,,,170,Medium,-65,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,100,,,255,140,140,,,,,, 73 | RaidBossMeleeEnemy4,,,,,,,650,12150,,400,730,,,,,6,,,,Minion_FindEnemies,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,70,85,80,,,25,190,200,270,,,,,,195,Medium,-70,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,150,100,,255,255,180,,,,,, 74 | RaidBossFastMeleeEnemy1,,,,,,,950,2250,,600,400,,,,,5,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,106,200,270,,,,,,100,Medium,-43,,,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 75 | RaidBossFastMeleeEnemy2,,,,,,,950,4050,,600,720,,,,,5,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,127,200,270,,,,,,120,Medium,-49,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,30,,30,255,120,255,,,,,, 76 | RaidBossFastMeleeEnemy3,,,,,,,950,5175,,600,920,,,,,6,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,148,200,270,,,,,,140,Medium,-54,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,100,,,255,140,140,,,,,, 77 | RaidBossFastMeleeEnemy4,,,,,,,950,7560,,600,1120,,,,,6,,,,Minion_FindEnemies,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_fast_melee_attack,,,,,,,,,,,,,,,30,,85,80,,,25,169,200,270,,,,,,160,Medium,-59,,,,,,,,,,,,footstep,25,250,130,,,,,,,true,150,100,,255,255,180,,,,,, 78 | RaidBossRangedEnemy1,,,,,,,800,1500,,1400,630,,,40,RaidBossRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,127,200,270,,,,,,100,Medium,-49,,350,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 79 | RaidBossRangedEnemy2,,,,,,,800,2700,,1400,1130,,,40,RaidBossRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,148,200,270,,,,,,120,Medium,-54,,350,,,,,,,,,,footstep,25,250,130,,,,,,,true,30,,30,255,120,255,,,,,, 80 | RaidBossRangedEnemy3,,,,,,,800,3450,,1400,1450,,,40,RaidBossRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,169,200,270,,,,,,140,Medium,-59,,350,,,,,,,,,,footstep,25,250,130,,,,,,,true,100,,,255,140,140,,,,,, 81 | RaidBossRangedEnemy4,,,,,,,800,5040,,1400,1760,,,40,RaidBossRangedEnemyProjectile,27,,,,Minion_FindEnemies,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,30,,85,80,,,25,190,200,270,,,,,,160,Medium,-65,,350,,,,,,,,,,footstep,25,250,130,,,,,,,true,150,100,,255,255,180,,,,,, 82 | RoboWarsBase,,,,,,,0,30000,,500,1000,,,,RoboWarsBaseProjectile,35,,,,Pvp_Base,,RoboWarsBaseDefault,,,,,,,nuts_bolts_metal_small,siege_base_destroyed,,,,,,,siege_base_attack,,,,,,,,,,,,,,,40,,100,-100,0,0,0,550,,,,,,,,160,Medium,-75,,300,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 83 | RoboWarsBox,,,,,,,0,4000,,,,,,,,,,,,LootBox,,RoboWarsBox,,,,,,,,Gen_wood_explosion,,,,,robo_wars_box_spawn,,,,,,,,,,,,,,,,,35,,100,-100,0,0,0,,,,,,,,,145,Medium,-40,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 84 | RoboWarsRobo,,,,,,,650,45000,,400,500,,,,,6,,,,RoboWars,,BigBotDefault,,,,,,,nuts_bolts_metal_small,explosion_tnt_dude,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,35,,85,80,,,25,250,200,270,,,,,,220,Medium,-100,,,,,,,,,,,,footstep,25,250,160,,,,,,,,,,,,,,,,,,, 85 | TrainingDummySmall,,,,,,,0,1500,,,,,,,,12,,,,Minion_Building_charges_ulti,,MeleeFastBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,,,,,,,,,,,,,,,,35,,80,80,,,35,140,,,,,,,,120,Medium,-50,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 86 | TrainingDummyMedium,,,,,,,0,4000,,,,,,,,12,,,,Minion_Building_charges_ulti,,MeleeBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,,,,,,,,,,,,,,,,35,,80,80,,,35,140,,,,,,,,120,Medium,-50,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 87 | TrainingDummyBig,,,,,,,0,100000,,,,,,,,12,,,,Minion_Building_charges_ulti,,BossBotDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,,,,,,,,,,,,,,,,35,,80,80,,,35,200,,,,,,,,220,Medium,-75,,350,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 88 | TrainingDummyShooting,,,,,,,0,4000,,1400,500,,,,CoopRangedEnemyProjectile,20,,,,Minion_Building_charges_ulti,,RangedBotDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,Gen_move_fx,,,,robo_spawn,,coop_ranged_attack,,,,,,,,,,,,,,,50,,85,80,,,25,127,200,270,,,,,,120,Medium,-49,,350,,,,,,,,,,footstep,25,250,130,,,,,,,,,,,,,,,,,,, 89 | Train0,,,,,,,0,1,,,,,,,,,,,,Train,,MineCart,,,,,,,,,Gen_move_fx,,,,,,,,,,,,,,,,,,,,,,,80,80,,,25,250,,,,,,,,200,,,,,,,,,,,,,,,130,50,,,,,,,,,,,,,,,,,,,, 90 | Train1,,,,,,,0,1,,,,,,,,,,,,Train,,MineCartB,,,,,,,,,Gen_move_fx,,,,,,,,,,,,,,,,,,,,,,,80,80,,,25,250,,,,,,,,200,,,,,,,,,,,,,,,130,50,,,,,,,,,,,,,,,,,,,, 91 | Train2,,,,,,,0,1,,,,,,,,,,,,Train,,MineCartC,,,,,,,,,Gen_move_fx,,,,,,,,,,,,,,,,,,,,,,,80,80,,,25,250,,,,,,,,200,,,,,,,,,,,,,,,130,50,,,,,,,,,,,,,,,,,,,, 92 | Train3,,,,,,,0,1,,,,,,,,,,,,Train,,MineCartD,,,,,,,,,Gen_move_fx,,,,,,,,,,,,,,,,,,,,,,,80,80,,,25,250,,,,,,,,200,,,,,,,,,,,,,,,130,50,,,,,,,,,,,,,,,,,,,, 93 | Train4,,,,,,,0,1,,,,,,,,,,,,Train,,MineCartE,,,,,,,,,Gen_move_fx,,,,,,,,,,,,,,,,,,,,,,,80,80,,,25,250,,,,,,,,200,,,,,,,,,,,,,,,130,50,,,,,,,,,,,,,,,,,,,, 94 | ClusterBombPet,,,,,,,1200,1600,,1000,2000,,,,,,,,,Minion_FindEnemies,,ClusterBombPetDefault,,,,,,ClusterBombPetExplosion,nuts_bolts_metal_small,nuts_bolts_metal_explosion,,,,,tick_def_ulti_spawn,,,,,,,,,,,,,,,,,,,85,80,,,25,150,200,270,,,,,,90,Medium,-43,,,,,,,,,,,,,25,250,,,,,,,,,,,,,,,,,,,, 95 | BlackHolePet2,,,,,,,870,2400,,600,400,,,,BlackHolePet2Projectile,15,,,,Minion_FindEnemies,,BlackholePetDefault,,,,,,,,death_shotgun_girl,,,,,tara_def_ulti_starPower_spawn,,,,,,,,sparkle_trail_dark_minion,,,,,,,,,30,,85,80,,,25,95,200,270,,,,,,90,Medium,-43,,350,,,,,,,,,,,25,250,160,,,,,,,,,,,,,,,,,,, 96 | MechanicTurretWalking,,,,,,,770,2800,,300,240,,,30,MechanicTurretProjectile,27,,,,Minion_FollowOwner,,TurretDefault,,,,,,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,,,,,SpawnTurret,,jessie_def_turret_atk,,,,,,,,,,,,,,,35,,75,75,,,25,116,220,297,,,,1000,-400,120,Medium,-32,,220,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 97 | DamageBooster,,,,,,,0,2800,,,,,,,,12,,,,Minion_Building,,DamageBoosterDefault,,,,,DamageBoost,,nuts_bolts_metal_small,nuts_bolts_metal_explosion,,,,,pam_def_ulti_spawn,,,,,,,,,,,,,,,,,,,75,75,,,25,180,220,300,,,,1400,-500,120,Medium,-49,,300,,,,,,,,,,footstep,25,400,160,,,,,,,,,,,,,,,,,,, 98 | BeePet,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 99 | BossRaceBoss,,,,BossRaceBossRapidFire,BossRaceBossCharge,,500,220000,,400,800,,,,,9,,,,Npc_Boss,,BossRaceBossDefault,,,,,,,nuts_bolts_metal_small,boss_explosion,Gen_move_fx,,,,robo_spawn,,coop_melee_attack,,,,,,,,,,,,,,,30,150,85,80,,,25,300,200,270,,,,,,280,Medium,-130,,500,,,,,,,,,,footstep,60,400,160,,,,,,,,,,,,,,,,,,, 100 | SpawnerDudeTurret,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 101 | SpawnerPet,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 102 | ReloadBooster,,true,shelly,ShotgunGirlWeapon,ShotgunGirlUlti,,720,3600,,,,,,,,12,,128,120,Hero,,BanditGirlDefault,,,,,,,takedamage_gen,death_shotgun_girl,Gen_move_fx,reload_shotgun_girl,No_ammo_shotgungirl,Dry_fire_shotgungirl,,,,,,,,,,,Shelly_Kill,Shelly_Lead,Shelly_Start,Utilshotgun_Vo,ShellyTakedamge_Vo,Shelly_Die,,30,,80,80,,,35,116,210,284,90,175,260,,,120,Medium,-48,,450,,,TID_SHOTGUN_GIRL,TID_HERO_BUNDLE_0,,sc/ui.sc,hero_icon_shelly,1000,human,footstep,25,250,200,,,1,3,2,,,,,,,,,,ShellyTutorial,,,, 103 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | --------------------------------------------------------------------------------