├── 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 |
--------------------------------------------------------------------------------