initial import, client gets to the lobby
titan engine, logic model, auth/game/gateway services. csv tables pulled out of the ipa are checked in so it runs out of the box.
This commit is contained in:
commit
812052bc3e
164 changed files with 14214 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
/target
|
||||
*.json.tmp
|
||||
docs/protocol.md
|
||||
584
Cargo.lock
generated
Normal file
584
Cargo.lock
generated
Normal file
|
|
@ -0,0 +1,584 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "auth-service"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"rand",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"service-rpc",
|
||||
"thiserror",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bytes"
|
||||
version = "1.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "game-service"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"logic",
|
||||
"rand",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"service-rpc",
|
||||
"thiserror",
|
||||
"titan",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gateway"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"auth-service",
|
||||
"game-service",
|
||||
"logic",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"service-rpc",
|
||||
"thiserror",
|
||||
"titan",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.189"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.34"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
|
||||
|
||||
[[package]]
|
||||
name = "logic"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"thiserror",
|
||||
"titan",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matchers"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
|
||||
dependencies = [
|
||||
"regex-automata",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
|
||||
|
||||
[[package]]
|
||||
name = "mio"
|
||||
version = "1.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"wasi",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nu-ansi-term"
|
||||
version = "0.50.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||
dependencies = [
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
||||
dependencies = [
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.107"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.47"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
|
||||
|
||||
[[package]]
|
||||
name = "scroll-server"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"auth-service",
|
||||
"game-service",
|
||||
"gateway",
|
||||
"logic",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"service-rpc",
|
||||
"titan",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.229"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_core"
|
||||
version = "1.0.229"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.229"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.151"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"serde",
|
||||
"serde_core",
|
||||
"zmij",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "service-rpc"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sharded-slab"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
|
||||
dependencies = [
|
||||
"errno",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.15.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.6.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.119"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "3.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "2.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "2.0.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread_local"
|
||||
version = "1.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "titan"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"thiserror",
|
||||
"titan-derive",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "titan-derive"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"libc",
|
||||
"mio",
|
||||
"pin-project-lite",
|
||||
"signal-hook-registry",
|
||||
"socket2",
|
||||
"tokio-macros",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tokio-macros"
|
||||
version = "2.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 3.0.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
|
||||
dependencies = [
|
||||
"pin-project-lite",
|
||||
"tracing-attributes",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-attributes"
|
||||
version = "0.1.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"valuable",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-log"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
|
||||
dependencies = [
|
||||
"log",
|
||||
"once_cell",
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-subscriber"
|
||||
version = "0.3.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319"
|
||||
dependencies = [
|
||||
"matchers",
|
||||
"nu-ansi-term",
|
||||
"once_cell",
|
||||
"regex-automata",
|
||||
"sharded-slab",
|
||||
"smallvec",
|
||||
"thread_local",
|
||||
"tracing",
|
||||
"tracing-core",
|
||||
"tracing-log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||
|
||||
[[package]]
|
||||
name = "valuable"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.1+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.61.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.56"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb"
|
||||
dependencies = [
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.8.56"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.119",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zmij"
|
||||
version = "1.0.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
|
||||
46
Cargo.toml
Normal file
46
Cargo.toml
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
[workspace]
|
||||
resolver = "2"
|
||||
members = [
|
||||
"titan/titan",
|
||||
"titan/titan-derive",
|
||||
"logic/logic",
|
||||
"services/service-rpc",
|
||||
"services/auth-service",
|
||||
"services/game-service",
|
||||
"services/gateway",
|
||||
"services/scroll-server",
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
rust-version = "1.75"
|
||||
license = "MIT"
|
||||
|
||||
[workspace.dependencies]
|
||||
titan = { path = "titan/titan" }
|
||||
titan-derive = { path = "titan/titan-derive" }
|
||||
logic = { path = "logic/logic" }
|
||||
service-rpc = { path = "services/service-rpc" }
|
||||
auth-service = { path = "services/auth-service" }
|
||||
game-service = { path = "services/game-service" }
|
||||
gateway = { path = "services/gateway" }
|
||||
|
||||
tokio = { version = "1.45", features = ["rt-multi-thread", "macros", "net", "io-util", "sync", "time", "signal", "fs"] }
|
||||
thiserror = "2"
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
rand = "0.8"
|
||||
async-trait = "0.1"
|
||||
proc-macro2 = "1"
|
||||
quote = "1"
|
||||
syn = { version = "2", features = ["full", "extra-traits"] }
|
||||
|
||||
[profile.release]
|
||||
opt-level = 3
|
||||
lto = "thin"
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
strip = true
|
||||
79
README.md
Normal file
79
README.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# scroll-server
|
||||
|
||||
A server for the `scroll` client (Clash Royale `2.0.1306`, iOS). Takes a real
|
||||
client from TCP connect to the lobby: login, own home data, chests, card
|
||||
upgrades, the shop.
|
||||
|
||||
## Requirements
|
||||
|
||||
* Rust 1.75+
|
||||
* PostgreSQL 16
|
||||
|
||||
## Running
|
||||
|
||||
```bash
|
||||
createdb scroll
|
||||
```
|
||||
|
||||
```bash
|
||||
cargo run --release -p scroll-server
|
||||
```
|
||||
|
||||
Listens on `0.0.0.0:9339`, the port the client hardcodes. The schema is created
|
||||
on first boot. `DATABASE_URL` defaults to `postgres:///scroll`.
|
||||
|
||||
On macOS a Homebrew cluster may need `LC_ALL=C` to start at all.
|
||||
|
||||
Services can also run separately:
|
||||
|
||||
```bash
|
||||
cargo run --release -p auth-service
|
||||
cargo run --release -p game-service
|
||||
cargo run --release -p gateway
|
||||
```
|
||||
|
||||
## Checking it without a phone
|
||||
|
||||
`scroll-probe` speaks the same protocol and prints the decoded lobby:
|
||||
|
||||
```bash
|
||||
cargo run --release -p gateway --bin scroll-probe -- 127.0.0.1:9339
|
||||
```
|
||||
|
||||
Flags: `--claim-free-chest`, `--buy-chest <name>`, `--desync`. Pass an account
|
||||
and pass token to reconnect as an existing player:
|
||||
`scroll-probe 127.0.0.1:9339 0 1 <passtoken>`.
|
||||
|
||||
## Pointing a client at it
|
||||
|
||||
The client hardcodes `game.clashroyaleapp.com`. Patch that string in the binary
|
||||
inside the ipa to your machine's address, keeping the 23 byte slot NUL padded so
|
||||
nothing around it moves.
|
||||
|
||||
## Configuration
|
||||
|
||||
| variable | default |
|
||||
| --- | --- |
|
||||
| `DATABASE_URL` | `postgres:///scroll` |
|
||||
| `SCROLL_GATEWAY_LISTEN` | `0.0.0.0:9339` |
|
||||
| `SCROLL_CSV_ROOT` | `assets` |
|
||||
| `SCROLL_SHOP` | `config/shop.json` |
|
||||
| `SCROLL_STARTER_PROFILE` | built in |
|
||||
| `RUST_LOG` | `info` |
|
||||
|
||||
## Shop
|
||||
|
||||
`config/shop.json` lists what the server sells, as `Name#count`:
|
||||
|
||||
```json
|
||||
{
|
||||
"offers": [
|
||||
{ "id": 1, "give": "Gold#1000" },
|
||||
{ "id": 5, "give": "chest:Gold#1" },
|
||||
{ "id": 7, "give": "Diamonds#500", "cost": "Gold#20000" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Names resolve against the csv tables. `cost` is optional; without it the server
|
||||
charges the same price the client computes from the game data.
|
||||
8
assets/csv_client/background_decos.csv
Normal file
8
assets/csv_client/background_decos.csv
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
"Name","FileName","ExportName","Layer"
|
||||
"string","string","string","String"
|
||||
"Grassland_background1","sc/level.sc","Grassland_background1","Background2"
|
||||
"Grassland_river_bridge1","sc/level.sc","Grassland_river_bridge1","Background3"
|
||||
"Grassland_river_horizontal_left","sc/level.sc","Grassland_river_horizontal_left","Background1"
|
||||
"Grassland_river_horizontal_right","sc/level.sc","Grassland_river_horizontal_right","Background1"
|
||||
"Grassland_river_horizontal","sc/level.sc","grassland_river_horizontal","Background1"
|
||||
"Arena_deco_ladder_1","sc/level.sc","Arena_deco_ladder_1","Background3"
|
||||
|
8
assets/csv_client/billing_packages.csv
Normal file
8
assets/csv_client/billing_packages.csv
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
Name,TID,Disabled,ExistsApple,ExistsAndroid,Diamonds,USD,Order,IconFile
|
||||
String,String,boolean,boolean,boolean,int,int,int,string
|
||||
com.supercell.scroll.gempack0,TID_DIAMOND_PACK_1,,TRUE,TRUE,500,499,1,shop_gems02
|
||||
com.supercell.scroll.gempack1,TID_DIAMOND_PACK_2,,TRUE,TRUE,1200,999,2,shop_gems03
|
||||
com.supercell.scroll.gempack2,TID_DIAMOND_PACK_3,,TRUE,TRUE,2500,1999,3,shop_gems04
|
||||
com.supercell.scroll.gempack3,TID_DIAMOND_PACK_4,,TRUE,TRUE,6500,4999,4,shop_gems05
|
||||
com.supercell.scroll.gempack4,TID_DIAMOND_PACK_5,,TRUE,TRUE,14000,9999,5,shop_gems06
|
||||
com.supercell.scroll.gempack5,TID_DIAMOND_PACK_0,,TRUE,TRUE,80,99,0,shop_gems01
|
||||
|
98
assets/csv_client/client_globals.csv
Normal file
98
assets/csv_client/client_globals.csv
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
"Name","NumberValue","BooleanValue","TextValue","StringArray","NumberArray"
|
||||
"String","int","boolean","string","String","int"
|
||||
"UDP_HEARTBEAT_MS",200,,,,
|
||||
"UDP_DISCONNECTED_SECONDS",10,,,,
|
||||
"MAIN_MENU_PARALLAX",0,,,,
|
||||
"SHOW_MANA_FULL_AFTER_SECONDS",5,,,,
|
||||
"BACKGROUND_Y_SIZE",1120,,,,
|
||||
"BACKGROUND_Y_OFFSET",90,,,,
|
||||
"REPLAY_ENABLED",,"TRUE",,,
|
||||
"REPLAY_BACKGROUND_Y_SIZE",1200,,,,
|
||||
"REPLAY_BACKGROUND_Y_OFFSET",250,,,,
|
||||
"REPLAY_BATTLE_END_HUD_DELAY_MILLIS",2700,,,,
|
||||
"REPLAY_SHOW_TOUCH_EVENTS",,,,,
|
||||
"SPELL_DRAG_NAME_Y_POS",-30,,,,
|
||||
"SHOW_NOT_ENOUGH_MANA_AFTER_FAILURES",1,,,,
|
||||
"LOCAL_NOTIFICATION_FREE_WORKERS_MINUTES",120,,,,
|
||||
"SPELL_DRAG_OBJECT_ALPHA",50,,,,
|
||||
"MIN_SPELL_COUNT_FOR_SORT_BUTTON",10,,,,
|
||||
"UNIT_SPEED_1",30,,,,
|
||||
"UNIT_SPEED_2",45,,,,
|
||||
"UNIT_SPEED_3",60,,,,
|
||||
"UNIT_SPEED_4",90,,,,
|
||||
"EGG_PLACEMENT_BLOCK_TOP",0,,,,
|
||||
"GAME_FACEBOOK_URL",,,,,
|
||||
"PAYING_USER_EMAIL_ID",249,,,,
|
||||
"GAME_CENTER_ACHIEVEMENTS_ENABLED",,"TRUE",,,
|
||||
"GAMECENTER_REAUTHORIZE",,,,,
|
||||
"GAME_CENTER_CHALLENGES_ENABLED",,"TRUE",,,
|
||||
"FAQ_URL",,,0,,
|
||||
"FORUMS_URL",,,0,,
|
||||
"LOW_GFX_DEVICES",,,,"ipod1",
|
||||
,,,,"ipod2",
|
||||
,,,,"ipod3",
|
||||
,,,,"ipod4",
|
||||
,,,,"ipad1",
|
||||
,,,,"iphone1",
|
||||
,,,,"iphone2",
|
||||
,,,,"iphone3",
|
||||
"MED_GFX_DEVICES",,,,"ipad2",
|
||||
"LOW_MEM_DEVICES",,,,"ipod1",
|
||||
,,,,"ipod2",
|
||||
,,,,"ipod3",
|
||||
,,,,"ipod4",
|
||||
,,,,"ipad1",
|
||||
,,,,"iphone2",
|
||||
"COME_BACK_NOTIFICATION_DELAY_HOURS_SMALL",48,,,,
|
||||
"COME_BACK_NOTIFICATION_DELAY_HOURS_MEDIUM",120,,,,
|
||||
"COME_BACK_NOTIFICATION_DELAY_HOURS_LARGE",336,,,,
|
||||
"APP_RATE_XP_LEVEL",11,,,,
|
||||
"FEEDBACK_EMAIL",,,0,,
|
||||
"SECTOR_COMMAND_MESSAGE_INTERVAL_SECONDS",2,,,,
|
||||
"ENEMY_OUTLINE_COLOR",,,0,,
|
||||
"OUTLINE_THICKNESS",-2,,,,
|
||||
"OUTLINE_BLUR_PERCENT",10,,,,
|
||||
"OUTLINE_BLUR_ITERATIONS",1,,,,
|
||||
"POPUP_BLUR_PERCENT",120,,,,
|
||||
"POPUP_BLUR_ITERATIONS",4,,,,
|
||||
"MATCH_END_BLUR_PERCENT",120,,,,
|
||||
"MATCH_END_BLUR_ITERATIONS",4,,,,
|
||||
"MAX_SPELL_PENDING_TIME",1200,,,,
|
||||
"TAUNTS_ENABLED",,"TRUE",,,
|
||||
"SHOW_TAUNT_TIME_SEC",4,,,,
|
||||
"NPC_REPLAY_ENABLED",,,,,
|
||||
"SHOW_MATCHMAKING_TIME_TOLERANCE",3,,,,
|
||||
"ENABLE_FACEBOOK",,"TRUE",,,
|
||||
"ENABLE_GAMECENTER_FRIENDS",,"TRUE",,,
|
||||
"SWITCH_CONFIRMATION_XP_LEVEL",5,,,,
|
||||
"PROMPT_GC_SWITCH_MIN_XP_LEVEL",2,,,,
|
||||
"NO_DEPLOY_ZONE_COLOR",,,90900000,,
|
||||
"PAYMENT_LIMIT_CONFIRMATION_ENABLED",,"TRUE",,,
|
||||
"PAYMENT_LIMIT_CONFIRMATION_USD",15000,,,,
|
||||
"PAYMENT_LIMIT_CONFIRMATION_TIME",15,,,,
|
||||
"CONFIRM_WORD_MAX_LENGTH",15,,,,
|
||||
"DISCONNECT_IN_APPS",,"FALSE",,,
|
||||
"IN_APP_RETRY_LIMIT",4,,,,
|
||||
"RETRY_PURCHASES_IN_SHOP",,"TRUE",,,
|
||||
"TOS_URL",,,"http://www.supercell.com/en/terms-of-service",,
|
||||
"PARENTS_GUIDE_URL",,,"http://www.supercell.com/en/parents",,
|
||||
"PRIVACY_POLICY_URL",,,"http://www.supercell.com/en/privacy-policy",,
|
||||
"HELPSHIFT_ENABLED",,"TRUE",,,
|
||||
"SEND_GC_ACHIVEMENT_0_PROGRESS",,"TRUE",,,
|
||||
"SEND_GC_ACHIVEMENT_PROGRESS_ONCE",,"TRUE",,,
|
||||
"USE_GC_SEND_ALL_ACHIEVEMENTS",,"TRUE",,,
|
||||
"SHOW_NOTIFICATION_FOR_DONATE",,"TRUE",,,
|
||||
"KEEP_ALIVE_WARNING_MS",10000,,,,
|
||||
"PING_WARNING_MS",3500,,,,
|
||||
"MATCHMAKING_TIP_INTERVAL_SEC",15,,,,
|
||||
"ATTRIBUTION_MAT",,"TRUE",,,
|
||||
"ATTRIBUTION_FB",,"TRUE",,,
|
||||
"ATTRIBUTION_IAD",,"TRUE",,,
|
||||
"APP_RATE_DIALOG_ENABLED",,"TRUE",,,
|
||||
"PURCHASE_DIALOG_ENABLED",,"TRUE",,,
|
||||
"PLAYER_ID_SHOW_ENABLED",,"TRUE",,,
|
||||
"VIBRATE_AFTER_MATCHMAKING_SECONDS",15,,,,
|
||||
"TAUNT_LIMIT",15,,,,
|
||||
"NAME_CHANGE_START_LEVEL",4,,,,
|
||||
"ENABLE_NAME_CHANGE",,"TRUE",,,
|
||||
"TAUNT_SOUND_COOLDOWN",6000,,,,
|
||||
|
32
assets/csv_client/credits.csv
Normal file
32
assets/csv_client/credits.csv
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
"Name",-0
|
||||
"String","int"
|
||||
"Patrick Corander",
|
||||
"Niko Derome",
|
||||
"Jonathan Dower",
|
||||
"Visa Forsten",
|
||||
"Tommi Hakala",
|
||||
"Hrvoje Horbec",
|
||||
"Chih-Han Hsu",
|
||||
"Rene Kivioja",
|
||||
"Rauli Laatikainen",
|
||||
"Lassi Leppinen",
|
||||
"Jani Lintunen",
|
||||
"Martin Schjøler",
|
||||
"Timothy Smith",
|
||||
"Antti Summala",
|
||||
"Tibor Toth",
|
||||
"-",
|
||||
"Mikko Hokkanen",
|
||||
"Daniel Iosca",
|
||||
"Janne Juhola",
|
||||
"Mikko Lehtonen",
|
||||
"Lasse Louhento",
|
||||
"Antti Mattila",
|
||||
"Taneli Oksama",
|
||||
"Douglas Portugal",
|
||||
"Asko Puurula",
|
||||
"Petri Styrman",
|
||||
"Ewan Thonger",
|
||||
"Wilhelm Tigerstedt",
|
||||
"Kustaa Vuori",
|
||||
"Tuomas Volotinen",
|
||||
|
741
assets/csv_client/effects.csv
Normal file
741
assets/csv_client/effects.csv
Normal file
|
|
@ -0,0 +1,741 @@
|
|||
"Name","Loop","FollowParent","ShakeScreen","Time","Sound","Type","FileName","ExportName","ParticleEmitterName","Effect","Layer","FlashColor","Scale","FlashDuration","TextInstanceName","TextParentInstanceName","EnemyVersion","FlashWidth"
|
||||
"string","boolean","boolean","int","int","string","string","string","string","string","string","string","int","int","int","string","string","string","int"
|
||||
"upgradeCard_start",,,,,"sound_upgradeCard_start","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle1",,"Above",,,,,,,
|
||||
"upgradeCard_ready",,,,,"sound_upgradeCard_ready","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Card_upgraded_effect1",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Card_upgrade_effect2",,"Above",,,,,,,
|
||||
,,,,3200,,"ParticleEmitter",,,"Card_upgrade_effect2",,"Above",,,,,,,
|
||||
,,,,6400,,"ParticleEmitter",,,"Card_upgrade_effect2",,"Above",,,,,,,
|
||||
,,,,9600,,"ParticleEmitter",,,"Card_upgrade_effect2",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Card_upgrade_effect3",,"Above",,,,,,,
|
||||
"upgradeCard_stat_appear",,,,,"sound_upgradeCard_stat_appear","SWF",,,,,"Above",,,,,,,
|
||||
"upgradeCard_stat_change",,,,,"sound_upgradeCard_stat_change","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_wood",,,,,"sound_openChest_wood","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_iron",,,,,"sound_openChest_iron","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_gold",,,,,"sound_openChest_gold","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_magical",,,,,"sound_openChest_magical","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_star",,,,,"sound_openChest_star","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_get_gold",,,,,"sound_openChest_get_gold","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_common_effect_smoke",,"Base",,,,,,,
|
||||
"openChest_get_gem",,,,,"sound_openChest_get_gem","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_common_effect_smoke",,"Base",,,,,,,
|
||||
"openChest_get_common",,,,,"sound_openChest_get_common","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_common_effect_smoke",,"Base",,,,,,,
|
||||
"openChest_get_rare",,,,,"sound_openChest_get_rare","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_get_rare",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_common_effect_smoke",,"Base",,,,,,,
|
||||
"openChest_get_epic",,,,,"sound_openChest_get_epic","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_epic_stars2",,"Above",,,,,,,
|
||||
"openChest_loop_gold",,,,,"sound_openChest_loop_gold","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_loop_gem",,,,,"sound_openChest_loop_gem","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_loop_common",,,,,"sound_openChest_loop_common","SWF",,,,,"Above",,,,,,,
|
||||
"openChest_loop_rare","true",,,,"sound_openChest_loop_rare","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"BlueSparksEmitter",,"Base",,,,,,,
|
||||
"openChest_loop_epic","true",,,,"sound_openChest_loop_epic","SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"openChest_epic_loop1",,"Object",,,,,,,
|
||||
"musketeer_deploy",,,,,"sound_musketeer_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,"sound_musketeer_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"musketeer_steps",,,,,"sound_musketeer_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"musketeer_attack",,,,,"sound_musketeer_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"musketeer_attack_start",,,,,"sound_musketeer_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"musketeer_hit",,,,,"sound_musketeer_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"musketeer_target",,,,,"sound_musketeer_target","SWF",,,,,"Above",,100,,,,,
|
||||
"musketeer_die",,,,,"sound_musketeer_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
"goblin_barrel_explosion",,,,,"sound_goblin_barrel_explosion","ParticleEmitter",,,"TargetDummy_planks",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"BlueSparkEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_rock_Emitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_deploy_dustPuff2",,"Base",,,,,,,
|
||||
"goblin_barrel_spawn",,,,,"sound_goblin_barrel_spawn","SWF",,,,,"Object",,,,,,,
|
||||
"Deployment_timer_1s",,,,,,"SWF","sc/effects.sc","troopDeployTimer_1s",,,"Above",,,,,,"Deployment_timer_1s_enemy",
|
||||
"Deployment_timer_1s_enemy",,,,,,"SWF","sc/effects.sc","troopDeployTimer_1s_enemy",,,"Above",,,,,,,
|
||||
"Deployment_timer_2s",,,,,,"SWF","sc/effects.sc","troopDeployTimer_2s",,,"Above",,,,,,"Deployment_timer_2s_enemy",
|
||||
"Deployment_timer_2s_enemy",,,,,,"SWF","sc/effects.sc","troopDeployTimer_2s_enemy",,,"Above",,,,,,,
|
||||
"Deployment_timer_3s",,,,,,"SWF","sc/effects.sc","troopDeployTimer_3s",,,"Above",,,,,,"Deployment_timer_3s_enemy",
|
||||
"Deployment_timer_3s_enemy",,,,,,"SWF","sc/effects.sc","troopDeployTimer_3s_enemy",,,"Above",,,,,,,
|
||||
"get_star_player",,,,,"sound_get_star_player","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
"get_star_enemy",,,,,"sound_get_star_enemy","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
"knight_deploy",,,,,"sound_knight_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,"sound_knight_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,"knight_deploy_dustPuff2","Deploy_ground_fX_mediumSize","Object",,,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
"knight_steps",,,,,"sound_knight_steps","ParticleEmitter",,,"knight_speps_dust1",,"Ground",,100,,,,,
|
||||
"knight_attack_start",,,,,"sound_knight_attack_start","Effect",,,,,"Object",,100,,,,,
|
||||
"knight_hit",,,,,"sound_knight_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"knight_target",,,,,"sound_knight_target","SWF",,,,,"Above",,100,,,,,
|
||||
"knight_die",,,,,"sound_knight_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_deploy_dustPuff1",,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_die_particle_sword",,"Object",,100,,,,,
|
||||
,,,,,,,,,,,,,100,,,,,
|
||||
"spear_goblin_deploy",,,,,"sound_spear_goblin_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"spear_goblin_steps",,,,,"sound_spear_goblin_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"spear_goblin_attack_start",,,,,"sound_spear_goblin_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"spear_goblin_attack",,,,,"sound_spear_goblin_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"spear_goblin_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_spear_goblin_die","SWF",,,,,"Object",,,,,,,
|
||||
"spear_goblin_projectile_hit",,,,,"sound_spear_goblin_projectile_hit","SWF",,,,,"Object",,,,,,,
|
||||
"barbarian_deploy",,,,,"sound_barbarian_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"barbarian_steps",,,,,"sound_barbarian_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"barbarian_attack_start",,,,,"sound_barbarian_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"barbarian_hit",,,,,"sound_barbarian_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"barbarian_target",,,,,"sound_barbarian_target","SWF",,,,,"Above",,100,,,,,
|
||||
"barbarian_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_barbarian_die","SWF",,,,,"Object",,,,,,,
|
||||
"goblins_deploy",,,,,"sound_goblins_deploy","SWF",,,"Explosion Pilar",,"Object",,100,,,,,
|
||||
"goblins_steps","true",,,,"sound_goblins_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"goblins_attack_start","true",,,,"sound_goblins_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"goblins_hit",,,,,"sound_goblins_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"goblins_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_goblins_die","SWF",,,,,"Object",,,,,,,
|
||||
"giant_skeleton_deploy",,,,,"sound_giant_skeleton_deploy","SWF",,,"giant_deploy_dustPuff",,"Object",,100,,,,"giant_skeleton_deploy_enemy",
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fx_largeSize","Base",,,,,,,
|
||||
"giant_skeleton_deploy_enemy",,,,,"sound_giant_skeleton_deploy","SWF",,,"giant_deploy_dustPuff",,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fx_largeSize","Base",,,,,,,
|
||||
"giant_skeleton_steps",,,,,"sound_giant_skeleton_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"giant_skeleton_attack_start",,,,,"sound_giant_skeleton_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"giant_skeleton_hit",,,,,"sound_giant_skeleton_hit","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"giant_hit_sparks",,"Above",,,,,,,
|
||||
,,,,25,,"ParticleEmitter",,,"giant_hit_puff1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","giant_hit_blow","giant_hitpuff2",,"Object",,,,,,,
|
||||
"giant_skeleton_die",,,,,"sound_giant_skeleton_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","death_giant1","Object",,100,,,,"giant_die_enemy",
|
||||
"giant_deploy",,,,,"sound_giant_deploy","SWF",,,"giant_deploy_dustPuff",,"Object",,100,,,,"giant_deploy_enemy",
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fx_largeSize","Base",,,,,,,
|
||||
"giant_deploy_enemy",,,,,"sound_giant_deploy","SWF",,,"giant_deploy_dustPuff",,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fx_largeSize","Base",,,,,,,
|
||||
"giant_steps",,,,,"sound_giant_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"giant_attack_start",,,,,"sound_giant_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"giant_hit",,,,,"sound_giant_hit","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"giant_hit_sparks",,"Above",,,,,,,
|
||||
,,,,25,,"ParticleEmitter",,,"giant_hit_puff1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","giant_hit_blow","giant_hitpuff2",,"Object",,,,,,,
|
||||
"giant_die",,,,,"sound_giant_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","death_giant1","Object",,100,,,,"giant_die_enemy",
|
||||
"giant_die_enemy",,,,,"sound_giant_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","death_giant1","Object",,100,,,,,
|
||||
"death_giant1",,,,,"sound_generic_death","ParticleEmitter",,,"giant_death_elixir_burst1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","giant_death_puff1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","giant_death_puff1_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","giant_death_elixir_ground1",,"Base",,,,,,,
|
||||
"pekka_deploy",,,,,"sound_pekka_deploy","SWF",,,,,"Object",,100,,,,"pekka_deploy_enemy",
|
||||
,,,,,"sound_pekka_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fx_largeSize","Base",,,,,,,
|
||||
"pekka_deploy_enemy",,,,,"sound_pekka_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"pekka_steps",,,,,"sound_pekka_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"pekka_attack_start",,,,,"sound_pekka_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"pekka_hit",,,,,"sound_pekka_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"pekka_die",,,,,"sound_pekka_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,"pekka_die_enemy",
|
||||
"pekka_die_enemy",,,,,"sound_pekka_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
"baby_dragon_deploy",,,,,"sound_baby_dragon_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,"sound_baby_dragon_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
"baby_dragon_steps",,,,,"sound_baby_dragon_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"baby_dragon_attack_start",,,,,"sound_baby_dragon_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"baby_dragon_attack",,,,,"sound_baby_dragon_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"baby_dragon_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_baby_dragon_die","SWF",,,,,"Object",,,,,,,
|
||||
"minion_deploy",,,,,"sound_minion_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"minion_steps",,,,,"sound_minion_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"minion_attack_start",,,,,"sound_minion_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"minion_attack",,,,,"sound_minion_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"minion_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_minion_die","SWF",,,,,"Object",,,,,,,
|
||||
"mortar_deploy",,,,,"sound_mortar_deploy","SWF",,,,,"Above",,,,,,,
|
||||
"mortar_turn",,,,,"sound_mortar_turn","SWF",,,,,"Above",,,,,,,
|
||||
"mortar_attack_start",,,,,"sound_mortar_attack_start","SWF",,,,,"Above",,,,,,,
|
||||
"mortar_attack",,,,,"sound_mortar_attack","ParticleEmitter",,,"cannon_smoke1",,"Above",,,,,,,
|
||||
"mortar_hit",,,350,,"sound_mortar_hit","ParticleEmitter",,,"catapult_rock_Emitter",,"Object",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_hit_smoke",,"Object",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_smokePuff",,"Object",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_grass_emitter",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_hit_shadow",,"Shadow",,,,,,,
|
||||
"mortar_target",,,,,,,,,,,,,,,,,,
|
||||
"mortar_die",,,1000,50,,"ParticleEmitter",,,"TowerExplode_explosion",,"Above",,,,,,,
|
||||
,,,,50,,"SWF","sc/effects.sc","ExplosionBlast",,,"Above",,,,,,,
|
||||
,,,,150,,"ParticleEmitter",,,"TowerExplode_sparks",,"Above",,,,,,,
|
||||
,,,,,"sound_mortar_die","SWF","sc/effects.sc","GlowRed",,,"Above",,,,,,,
|
||||
,,,,40,,"ParticleEmitter",,,"towerExplode_Smoke",,"Above",,,,,,,
|
||||
,,,,150,,"ParticleEmitter",,,"TowerExplode_rockEmitter",,"Object",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"towerExplode_Smoke",,"Shadow",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"TowerExplode_smokePuff",,"Above",,,,,,,
|
||||
"balloon_deploy",,,,,"sound_balloon_deploy","SWF",,,,,"Above",,,,,,,
|
||||
"balloon_turn",,,,,"sound_balloon_turn","SWF",,,,,"Above",,,,,,,
|
||||
"balloon_steps",,,,,"sound_balloon_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"balloon_attack_start",,,,,"sound_balloon_attack_start","SWF",,,,,"Above",,,,,,,
|
||||
"balloon_attack",,,,,"sound_balloon_attack","ParticleEmitter",,,"cannon_smoke1",,"Above",,,,,,,
|
||||
"balloon_hit",,,350,,"sound_balloon_hit","ParticleEmitter",,,"catapult_rock_Emitter",,"Object",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_hit_smoke",,"Object",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_smokePuff",,"Object",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_grass_emitter",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"catapult_hit_shadow",,"Shadow",,,,,,,
|
||||
"balloon_target",,,,,,,,,,,,,,,,,,
|
||||
"balloon_die",,,,,"sound_balloon_die","SWF","sc/effects.sc",,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"balloon_die_puff",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ballon_die_smoke",,"Above",,,,,,,
|
||||
"goblin_hut_deploy",,,,250,"sound_goblin_hut_deploy","ParticleEmitter",,,"towerExplode_Smoke",,"Ground",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"Rock Pieces Emitter",,"Ground",,,,,,,
|
||||
"goblin_hut_spawn",,,,,"sound_goblin_hut_spawn","SWF",,,"SmokeBomb_smoke1",,"Above",,,,,,,
|
||||
"goblin_hut_loop","true",,,,"sound_goblin_hut_loop","ParticleEmitter",,,"GoblinHut_smoke",,"Above",,,,,,,
|
||||
,,,,1000,,"ParticleEmitter",,,"GoblinHut_smoke",,"Above",,,,,,,
|
||||
,,,,2000,,"ParticleEmitter",,,"GoblinHut_smoke",,"Above",,,,,,,
|
||||
,,,,3000,,"ParticleEmitter",,,"GoblinHut_smoke",,"Above",,,,,,,
|
||||
,,,,4000,,"ParticleEmitter",,,"GoblinHut_smoke",,"Above",,,,,,,
|
||||
,,,,5000,,"ParticleEmitter",,,"GoblinHut_smoke",,"Above",,,,,,,
|
||||
"goblin_hut_die",,,,,"sound_goblin_hut_die","ParticleEmitter",,,"Goblin_hut_woodExplosion",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TowerExplode_smokePuff",,"Base",,,,,,,
|
||||
"witch_deploy",,,,,"sound_witch_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"witch_steps",,,,,"sound_witch_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"witch_attack_start",,,,,"sound_witch_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"witch_hit",,,,,"sound_witch_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"witch_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_witch_die","SWF",,,,,"Object",,,,,,,
|
||||
"witch_deploy_skeleton",,,,,"sound_witch_deploy_skeleton","SWF",,,"Explosion Pilar",,"Object",,100,,,,,
|
||||
"bomber_deploy",,,,,"sound_bomber_deploy","SWF",,,"Explosion Pilar",,"Object",,100,,,,,
|
||||
,,,,,"sound_bomber_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
"bomber_steps","true",,,,"sound_bomber_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"bomber_attack","true",,,,"sound_bomber_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"bomber_attack_start","true",,,,"sound_bomber_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"bomber_hit",,,,,"sound_bomber_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"bomber_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_bomber_die","SWF",,,,,"Object",,,,,,,
|
||||
"skeleton_deploy",,,,,"sound_skeleton_deploy","SWF",,,"Explosion Pilar",,"Object",,100,,,,,
|
||||
"skeleton_steps","true",,,,"sound_skeleton_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"skeleton_attack_start","true",,,,"sound_skeleton_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"skeleton_hit",,,,,"sound_skeleton_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"skeleton_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_skeleton_die","SWF",,,,,"Object",,,,,,,
|
||||
"golem_deploy",,,,,"sound_golem_deploy","SWF",,,,,"Object",,100,,,,"golem_deploy_enemy",
|
||||
"golem_deploy_enemy",,,,,"sound_golem_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"golem_steps",,,,,"sound_golem_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"golem_attack_start",,,,,"sound_golem_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"golem_hit",,,,,"sound_golem_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"golem_die",,,,200,"sound_golem_die","ParticleEmitter",,,"towerExplode_Smoke",,"Object",,100,,,,"golem_die_enemy",
|
||||
,,,,,,"ParticleEmitter",,,"Small_rock_particle1",,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,,"Death_player","Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","RoundExplosion",,,"Object",,,,,,,
|
||||
"golem_die_enemy",,,,200,"sound_golem_die","ParticleEmitter",,,"towerExplode_Smoke",,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Small_rock_particle1",,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,,"Death_player","Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","RoundExplosion",,,"Object",,,,,,,
|
||||
"valkyrie_deploy",,,,,"sound_valkyrie_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,"sound_valkyrie_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"valkyrie_steps",,,,,"sound_valkyrie_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"valkyrie_attack_start",,,,,"sound_valkyrie_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"valkyrie_hit",,,,,"sound_valkyrie_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"valkyrie_target",,,,,"sound_valkyrie_target","SWF",,,,,"Above",,100,,,,,
|
||||
"valkyrie_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_valkyrie_die","SWF",,,,,"Object",,,,,,,
|
||||
"replay_drag",,,,,,"ParticleEmitter",,,"touch_sparkle1",,"Above",,,,,,"replay_drag_enemy",
|
||||
"replay_drag_enemy",,,,,,"ParticleEmitter",,,"touch_sparkle2",,"Above",,,,,,,
|
||||
"dragon_deploy",,,,,"sound_dragon_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"dragon_steps",,,,,"sound_dragon_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"dragon_attack_start",,,,,"sound_dragon_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"dragon_attack",,,,,"sound_dragon_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"dragon_hit",,,,,"sound_dragon_projectile_hit","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"dragon_hit_sparks",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"dragon_fire_hit",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"dragon_hit_smoke",,"Object",,,,,,,
|
||||
"dragon_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_dragon_die","SWF",,,,,"Object",,,,,,,
|
||||
"Dragon_Emitter","true","true",,,,"ParticleEmitter",,,"DragonEmitterTrail",,"Above",,50,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"dragon_trail_glow",,"Object",,,,,,,
|
||||
"tesla_deploy",,,,,"sound_tesla_deploy","SWF",,,,,"Above",,,,,,,
|
||||
"tesla_up",,,,,"sound_tesla_up","SWF",,,,,"Above",,,,,,,
|
||||
"tesla_down",,,,,"sound_tesla_down","SWF",,,,,"Above",,,,,,,
|
||||
"tesla_attack_start",,,,,"sound_tesla_attack_start","SWF",,,,,"Above",,,,,,,
|
||||
"Tesla_beam",,,,,"sound_tesla_attack","SWF","sc/effects.sc","tesla_beam",,,"Above",,,,,,,80
|
||||
"tesla_hit_effect",,"true",,,"sound_tesla_hit","ParticleEmitter",,,"tesla_hit_spark",,"Object",,70,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"tesla_spot_hit",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"tesla_smoke_hit",,"Above",,,,,,,
|
||||
,,,,150,,"ParticleEmitter",,,"tesla_electric_hit",,"Above",,,,,,,
|
||||
"tesla_target",,,,,"sound_tesla_target",,,,,,,,,,,,,
|
||||
"tesla_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,,,,,,
|
||||
,,,,,"Boulder impact","SWF",,,,,"Object",,,,,,,
|
||||
"chr_wizard_deploy",,,,,"sound_chr_wizard_deploy","SWF",,,"Explosion Pilar",,"Object",,100,,,,,
|
||||
"chr_wizard_steps","true",,,,"sound_chr_wizard_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"chr_wizard_attack","true",,,,"sound_chr_wizard_attack","SWF",,,,,"Object",,100,,,,,
|
||||
"chr_wizard_attack_start",,,,,"sound_chr_wizard_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"chr_wizard_target",,,,,"sound_chr_wizard_target","SWF",,,,,"Above",,100,,,,,
|
||||
"chr_wizard_projectile_hit",,,,,"sound_chr_wizard_projectile_hit","ParticleEmitter",,,"chr_wiz_hit_sparks",,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chr_wiz_hit_fire",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chr_wiz_hit_smoke",,"Object",,,,,,,
|
||||
"chr_wizard_hit",,,,,"sound_chr_wizard_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"chr_wizard_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_chr_wizard_die","SWF",,,,,"Object",,,,,,,
|
||||
"mini_pekka_deploy",,,,,"sound_minipekka_deploy","SWF",,,,,"Object",,100,,,,"pekka_deploy_enemy",
|
||||
,,,,,"sound_minipekka_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fx_largeSize","Base",,,,,,,
|
||||
"mini_pekka_deploy_enemy",,,,,"sound_minipekka_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"mini_pekka_steps",,,,,"sound_minipekka_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"mini_pekka_attack_start",,,,,"sound_minipekka_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"mini_pekka_hit",,,,,"sound_minipekka_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"mini_pekka_die",,,,,"sound_minipekka_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,"pekka_die_enemy",
|
||||
"mini_pekka_die_enemy",,,,,"sound_minipekka_die","Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
"hog_rider_deploy",,,,,"sound_hog_rider_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"hog_rider_steps",,,,,"sound_hog_rider_steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"hog_rider_attack_start",,,,,"sound_hog_rider_attack_start","SWF",,,,,"Object",,100,,,,,
|
||||
"hog_rider_hit",,,,,"sound_hog_rider_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"hog_rider_target",,,,,"sound_hog_rider_target","SWF",,,,,"Above",,100,,,,,
|
||||
"hog_rider_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"sound_hog_rider_die","SWF",,,,,"Object",,,,,,,
|
||||
"hog_rider_landing",,,,,"sound_hog_rider_landing","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_deploy_dustPuff1",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_depoy_dustShadow",,"Shadow",,60,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_deploy_dustPuff2",,"Object",,60,,,,,
|
||||
"tombstone_deploy",,,,250,"sound_tombstone_deploy","ParticleEmitter",,,"towerExplode_Smoke",,"Ground",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"Rock Pieces Emitter",,"Ground",,,,,,,
|
||||
"tombstone_spawn",,,,,"sound_tombstone_spawn","SWF",,,"SmokeBomb_smoke1",,"Above",,,,,,,
|
||||
"tombstone_die",,,,,"sound_tombstone_die","ParticleEmitter",,,"Goblin_hut_woodExplosion",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TowerExplode_smokePuff",,"Base",,,,,,,
|
||||
"MAGIC3 EFFECTS ABOVE",,,,,,,,,,,,,,,,,,
|
||||
"SCROLL EFFECTS BELOW",,,,,,,,,,,,,,,,,,
|
||||
"Growth",,,,,"Growth","SWF",,,,,"Object",,,,,,,
|
||||
"HotCoals",,,,,"Hot coals appear","ParticleEmitter",,,"HotHoals1",,"Object",,85,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"BlueSparksEmitter",,"Object",,,,,,,
|
||||
,,,,2,,"ParticleEmitter",,,"SmokePuff",,"Object",,,,,,,
|
||||
"HotCoals_loop","true",,,,"Hot coals loop","ParticleEmitter",,,"HotHoals_loop",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HotCoals_loop2",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HotCoals_sparks",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HotCoals_loop4",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HotCoals_darken",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HotCoals_darken2",,"Base",,,,,,,
|
||||
"Charge_active",,,,,"Get gold","SWF","sc/effects.sc","get_gold",,,"Above",,,,"txt","resource",,
|
||||
"GetGold",,,,,"Get gold","SWF","sc/effects.sc","get_gold",,,"Above",,,,"txt","resource",,
|
||||
"GetMana",,,,,"get mana","SWF","sc/effects.sc","get_mana",,,"Above",,,,"txt","resource",,
|
||||
"Damage",,,,,,"SWF","sc/level.sc","effect_Hit1",,,"Object",,100,,,,,
|
||||
"Root",,"true",,,"Root","SWF","sc/effects.sc","spell_root_base",,,"Ground",,,,,,,
|
||||
,,,,250,,"SWF","sc/effects.sc","spell_root_front",,,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,"RootRocks1","RootRocks1",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"SewerSteam",,"Above",,,,,,,
|
||||
,,,,10,,"ParticleEmitter",,,"SewerSteam",,"Above",,,,,,,
|
||||
"FireballSpell",,,1000,70,,"ParticleEmitter",,,"SparkEmitter1",,"Object",,100,,,,,
|
||||
,,,,,"Fire ball explo","SWF","sc/effects.sc","ExplosionBlast",,,"Object",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"SparkEmitter1",,"Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","ExplosionGroundGlowSlowOut",,,"Ground",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","ExplosionGroundGlow",,,"Ground",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","ExplosionBlast",,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"SmokeEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ScreenFlash",,,,,"Ground",1694485504,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","Explosion",,,"Object",,,,,,,
|
||||
"MeteorExplosion",,,,,"Fireball explodes","SWF","sc/level.sc","MeteorExplosion",,,"Object",,100,,,,,
|
||||
"Immunity",,"true",,,,"SWF","sc/level.sc","immunity",,,"Above",,100,,,,,
|
||||
"Vulnerability",,"true",,,,"SWF","sc/level.sc","vulnerability",,,"Above",,100,,,,,
|
||||
"Healing",,"true",,,,"SWF","sc/level.sc","effect_heal",,,"Object",,100,,,,,
|
||||
"DeathEffect",,,,,,"SWF","sc/characters.sc","death_animation",,,"Ground",,100,,,,,
|
||||
"Invisibility",,"true",,,"Invisibility","SWF",,,,,"Object",,100,,,,,
|
||||
"MindControl",,"true",,,"MindControl","SWF",,,,,"Object",,100,,,,,
|
||||
"CharacterDeploy","true",,,,"CharacterDeploy","SWF",,,,,"Object",,50,,,,,
|
||||
"Protection",,"true",,,"Protection","SWF","sc/level.sc","effect_protection",,,"Object",,100,,,,,
|
||||
"damage_burn","true","true",,,,"SWF","sc/level.sc","effect_burn",,,"Object",,100,,,,,
|
||||
"Explosion",,,,,,"SWF","sc/effects.sc","SlamShockAnim","SmokeEmitter",,"Ground",,100,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","SlamFlashAnim",,,"Object",,100,,,,,
|
||||
,,,,,,"ScreenFlash",,,,,"Ground",-251605914,100,,,,,
|
||||
"HitEffect1",,"true",,20,,"SWF","sc/effects.sc","HitFlashFx",,,"Object",,100,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","hitFx",,,"Object",,100,,,,,
|
||||
,,,,10,,"ParticleEmitter",,,"BloodSpatter1",,"Object",,100,,,,,
|
||||
"ObjectClick1",,,,,,"Filter","sc/effects.sc","ObjectClick",,,"Ground",,100,,,,,
|
||||
"Cast_RainOfArrows",,,,,"Arrow fire","ParticleEmitter",,,,,"Above",,,,,,,
|
||||
"Cast_FireRainOfArrows",,,,,"Fire arrow","ParticleEmitter",,,,,"Above",,,,,,,
|
||||
"ArrowHitGround",,,,,"Arrow volley hit","ParticleEmitter",,,"Arrows Hit Ground",,"Ground",,100,,,,,
|
||||
"FireArrowHitGround","true",,,,"Arrow hit ground","ParticleEmitter",,,"Arrows Hit Ground",,"Ground",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FlameEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FlameEmitter_small",,"Object",,,,,,,
|
||||
,,,,10,,"ParticleEmitter",,,"Black_spot",,"Ground",,,,,,,
|
||||
"FireArrowProjectileEmitter","true",,,,,"ParticleEmitter",,,"FlameArrowEmitter_small",,"Above",,50,,,,,
|
||||
"ArrowHit",,,,,"Arrow hit","SWF",,,,,"Ground",,100,,,,,
|
||||
"SmokeArea","true",,,,"Smoke","ParticleEmitter",,,"SmokeBomb_smoke1",,"Above",,,,,,,
|
||||
,"true",,,100,,"ParticleEmitter",,,"SmokeBomb_smoke2",,"Above",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"SmokeBomb_smoke3",,"Above",,,,,,,
|
||||
"TowerDeploy",,,,,,,,,,,,,,,,,,
|
||||
"TowerIdle",,,,,,,,,,,,,,,,,,
|
||||
"TowerFire",,,,,"Tower Attack","ParticleEmitter",,,"Tower_fire_glow1",,"Above",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Tower_fire_particles1",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Tower_fire_particles2",,"Above",,,,,,,
|
||||
"TowerStartFire",,,,,,"ParticleEmitter",,,"Tower_fire_particles1",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Tower_fire_glow1",,"Above",,,,,,,
|
||||
"TowerProjectileHit",,,,,"Tower Hit","SWF","sc/effects.sc","ExplosionGroundGlowBlue",,,"Above",,35,,,,,
|
||||
,,,,130,,"SWF","sc/effects.sc","ElectricLightning",,,"Above",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","ElectricGlowBall",,,"Above",,,,,,,
|
||||
"TowerExplode",,,1000,50,,"ParticleEmitter",,,"TargetDummy_planks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"TargetDummy_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TowerExplode_rockEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Tower_destroyed_ground",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Big_rock_particle1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
"TowerPlayerLoop","true",,,,,"SWF","sc/effects.sc","GlowRed",,,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Tower_continuous_particles1",,"Above",,,,,,,
|
||||
"CrowdTowerTakeDamage",,,,,"sound_tower_take_damage","Effect",,,,,"Object",,,,,,"CrowdTowerTakeDamageEnemy",
|
||||
"CrowdTowerTakeDamageEnemy",,,,,"sound_tower_take_damage_enemy","Effect",,,,,"Object",,,,,,,
|
||||
"CrowdSummonBigUnit",,,,,"sound_summon_own_big","Effect",,,,,"Object",,,,,,"CrowdSummonBigUnitEnemy",
|
||||
"CrowdSummonBigUnitEnemy",,,,,"sound_summon_enemy_big","Effect",,,,,"Object",,,,,,,
|
||||
"CrowdDieBigUnit",,,,,"sound_summon_own_big_die","Effect",,,,,"Object",,,,,,"CrowdDieBigUnitEnemy",
|
||||
"CrowdDieBigUnitEnemy",,,,,"sound_summon_enemy_big_die","Effect",,,,,"Object",,,,,,,
|
||||
"FireplaceDeploy",,,,,"Fireplace deploy","SWF",,,,,"Object",,18,,,,,
|
||||
"FireplaceIdle","true",,,,"Fireplace idle","ParticleEmitter",,,"Fireplace_emitter",,"Object",,18,,,,,
|
||||
"FireplaceAttackStart",,,,,"Fireplace attack start","SWF",,,,,"Object",,100,,,,,
|
||||
"FireplaceHit",,,,,"Fireplace hit","SWF",,,,,"Object",,100,,,,,
|
||||
"FireplaceDie",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"Fireplace die","SWF",,,,,"Object",,,,,,,
|
||||
"FireSpiritDeploy","true",,,,"FireSpirit deploy","ParticleEmitter",,,"FireSpirit_emitter",,"Object",,18,,,,,
|
||||
"FireSpiritSteps",,,,,"FireSpirit steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"FireSpiritAttackStart",,,,,"FireSpirit attack start","SWF",,,,,"Object",,100,,,,,
|
||||
"FireSpiritHit",,,,,"FireSpirit hit","ParticleEmitter",,,"FireRingEmitter",,"Object",,30,,,,,
|
||||
"FireSpiritDie",,,,,,"ParticleEmitter",,,"FlameEmitter",,"Base",,100,,,,,
|
||||
"WizardDeploy",,,,,"WizardDeploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"WizardSteps","true",,,,"WizardSteps","SWF",,,,,"Ground",,100,,,,,
|
||||
"WizardAttackStart",,,,,"WizardAttackStart","SWF",,,,,"Object",,100,,,,,
|
||||
"WizardProjectileHit",,,,,"WizardProjectileHit","SWF",,,,,"Object",,100,,,,,
|
||||
"WizardHit",,,,,"WizardHit","SWF",,,,,"Object",,100,,,,,
|
||||
"WizardTakeDamage",,,,,"WizardTakeDamage","Filter","sc/level.sc","filter_burn",,,"Object",,50,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Stunner",,"Base",,,,,,,
|
||||
"WizardDie","true",,,,"WizardDie","ParticleEmitter","sc/characters.sc","death_animation","Wizard_die_player_emitter1",,"Object",,100,,,,,
|
||||
"ConstructionDeploy2x2",,,,,"Construction deploy 2x2","SWF",,,,,"Above",,100,,,,,
|
||||
"ConstructionDeploy3x3",,,,,"Construction deploy 3x3","SWF",,,,,"Above",,100,,,,,
|
||||
"ConstructionDestroyed",,,,,"Construction destroyed","SWF",,,,,"Above",,100,,,,,
|
||||
"GenericBuildingReady",,,,,"Generic building ready","SWF",,,,,"Above",,100,,,,,
|
||||
"ArcherTowerDeploy",,,,,"ArcherTower deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"ArcherTowerAttack",,,,,"ArcherTower attack","SWF",,,,,"Object",,100,,,,,
|
||||
"ArcherTowerTarget",,,,,"ArcherTower target","SWF",,,,,"Above",,100,,,,,
|
||||
"ArcherTowerDie",,,,,,"SWF",,,,,"Ground",,100,,,,,
|
||||
,,,,,"ArcherTower die","SWF",,,,,"Object",,,,,,,
|
||||
"Knight Deploy",,,,,"Knight deploy","SWF",,,,,"Object",,100,,,,,
|
||||
"Knight Charge",,,,,"Knight Charge","SWF",,,,,"Object",,100,,,,,
|
||||
"KnightSteps",,,,,"Knight steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"KnightAttackStart",,,,,"Knight attack start","ParticleEmitter",,,"Fireplace_emitter",,"Object",,100,,,,,
|
||||
"KnightHit",,,,,"Knight hit","SWF",,,,,"Object",,100,,,,,
|
||||
"KnightTarget",,,,,"Knight target","SWF",,,,,"Above",,100,,,,,
|
||||
"KnightDie",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"Ent Big Die","SWF",,,,,"Object",,,,,,,
|
||||
"ArcherDeploy",,,,,"Archer deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,,"Effect",,,,"Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
"ArcherSteps",,,,,"Archer steps","SWF",,,,,"Ground",,100,,,,,
|
||||
"ArcherAttackStart",,,,,"Archer attack start","SWF",,,,,"Object",,100,,,,,
|
||||
"ArcherAttack",,,,,"Archer attack","SWF",,,,,"Object",,100,,,,,
|
||||
"ArcherTarget",,,,,"Archer target","SWF",,,,,"Above",,100,,,,,
|
||||
"ArcherDie",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,"Archer die","SWF",,,,,"Object",,,,,,,
|
||||
"DecoFireplaceLoop","true",,,,,"ParticleEmitter",,,"Fireplace_particles_loop",,"Above",,,,,,,
|
||||
,"true",,,,,"SWF","sc/effects.sc","Deco_fireplace_glow",,,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Fireplace_bouncy_particles_loop",,"Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","Deco_fireplace_base",,,"Ground",,,,,,,
|
||||
"Background_haze","true",,,,,"ParticleEmitter","sc/effects.sc",,"Haze1",,"Object",,,,,,,
|
||||
"SCROLL EFFECTS ABOVE",,,,,,,,,,,,,,,,,,
|
||||
"GUNSHINE EFFECTS BELOW",,,,,,,,,,,,,,,,,,
|
||||
"LevelUp",,"true",,,"LevelUpWiz","SWF","sc/effects.sc","LevelUpGroundGlow",,,"Ground",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","LevelUpFx",,,"Above",,,,,,,
|
||||
,,,,,,"ScreenFlash",,,,,"Ground",-154,,,,,,
|
||||
"Stun",,,,70,,"ParticleEmitter",,,"Stunner",,"Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","ExplosionGroundGlowBlue",,,"Ground",,,,,,,
|
||||
,,,,130,,"SWF","sc/effects.sc","ElectricLightning",,,"Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","ElectricGlowBall",,,"Object",,,,,,,
|
||||
,,,,200,,"ScreenFlash",,,,,"Ground",-1258291201,,,,,,
|
||||
"PoisonSteam",,"true",,,,"ParticleEmitter",,,"PoisonSteamer",,"Above",,,,,,,
|
||||
"Burner","true","true",,,,"ParticleEmitter",,,"FlameEmitter",,"Object",,50,,,,,
|
||||
"Wall Explode",,,1000,180,,"ParticleEmitter",,,"WallExplosion",,"Above",,,,,,,
|
||||
,,,,100,,"SWF","sc/effects.sc","ExplosionBlast",,,"Above",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"WallExplosionSparks1",,"Above",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","GlowRedBig",,,"Above",,,,,,,
|
||||
,,,,,,"ScreenFlash",,,,,"Ground",-13261,,,,,,
|
||||
,,,,40,,"ParticleEmitter",,,"Explosion Pilar",,"Above",,,,,,,
|
||||
,,,,150,,"ParticleEmitter",,,"Rock Pieces Emitter",,"Object",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"SmokeEmitter",,"Object",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"SmokePuff",,"Object",,,,,,,
|
||||
"EndBattle","true",,,,,"SWF","sc/effects.sc","finalBattle_effect",,,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HotCoals_sparks",,"Base",,,,,,,
|
||||
"GoodTarget",,"true",,,,"Filter","sc/level.sc","filter_target",,,"Base",,100,,,,,
|
||||
"RangeDanger",,"true",,,,"Filter","sc/level.sc","filter_enemy",,,"Base",,100,,,,,
|
||||
,,,,,"Enemy on range","SWF","sc/level.sc","spot_enemy",,,"Above",,,,,,,
|
||||
"DragEffect","true",,,,,"ParticleEmitter",,,"DragSparkEmitter",,"Base",,,,,,,
|
||||
"SpellCasting",,,,,"SpellCasting","ParticleEmitter",,,"HotCoals_sparks",,"Object",,,,,,,
|
||||
"Fireball_explosion",,,800,100,,"ParticleEmitter",,,"explosion_base",,"Ground",,85,,,,,
|
||||
,,,,,"Fire ball explo","ParticleEmitter",,,"Fireball_explosion_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","explosion_glow1","Fireball_explosion_glow",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","explosion_glow1","Fireball_explosion_sparks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","darken_gradient","explosion_lava",,"Base",,,,,,,
|
||||
,,,,10,,"ParticleEmitter",,,"explosion_gradients",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_fire",,"Object",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"explosion_continousFire",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_glow",,"Above",,,,,,,
|
||||
"Generic_death",,,,,,"ParticleEmitter",,,"Death_sparkle",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Death_sparkle_still1",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"death_sparkle_still2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Fireball_explosion_glow",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Death_blue_smoke_shadow",,"Shadow",,,,,,,
|
||||
"TargetDummy_die",,,,,,"ParticleEmitter",,,"TargetDummy_planks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_smoke",,"Object",,,,,,,
|
||||
,,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,,,,,,
|
||||
"ArcherTower_continuousEffect","true",,,,,"SWF","sc/effects.sc","RoundExplosion",,,"Shadow",,,,,,,
|
||||
"ExplosiveBarrel_continuous","true",,,,,"ParticleEmitter",,,"ExplosiveBarrel_cont_glow1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ExplosiveBarrel_cont_glow2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ExplosiveBarrel_cont_sparks",,"Object",,,,,,,
|
||||
"Death_enemy",,,,,"sound_generic_death","ParticleEmitter",,,"Death_elixir_burst1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Death_enemy_puff",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Death_blue_smoke_shadow",,"Shadow",,,,,,,
|
||||
"Death_player",,,,,"sound_generic_death","ParticleEmitter",,,"Death_elixir_burst1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Death_enemy_puff",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Death_blue_smoke_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","BloodCloud","Death_elixir_ground1",,"Base",,,,,,,
|
||||
"ArcherTower_destruction",,,300,,"ArcherTower die","ParticleEmitter",,,"ArcherTower_particle1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle3",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle4",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particles5",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle6",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle7",,"Object",,,,,,,
|
||||
,,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_destruction_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_destruction_smoke_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_destroyed",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"AercherTower_particleShadows",,"Shadow",,,,,,,
|
||||
"ExplosiveBarrel_explosion",,,800,100,,"ParticleEmitter",,,"explosion_base",,"Ground",,85,,,,,
|
||||
,,,,,"Explosive Barrel explosion","ParticleEmitter",,,"Fireball_explosion_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","explosion_glow1","Fireball_explosion_glow",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","explosion_glow1","Fireball_explosion_sparks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","darken_gradient","explosion_lava",,"Base",,,,,,,
|
||||
,,,,10,,"ParticleEmitter",,,"explosion_gradients",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_fire",,"Object",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"explosion_continousFire",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_glow",,"Above",,,,,,,
|
||||
"ExplosiveBarrel_deploy",,,,,"ExplosiveBarrel deploy","SWF",,,,,"Object",,,,,,,
|
||||
"Projectile_rocket_emitter","true","true",,,,"ParticleEmitter",,,"Projectile_rocket_emitter1",,"Above",,,,,,,
|
||||
"RocketTower_attack",,"true",,,"RocketTower attack","ParticleEmitter",,,"RocketTower_emitter1",,"Above",,,,,,,
|
||||
,,,,1,,"ParticleEmitter",,,"RocketTower_smoke1",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"RocketTower_emitter2",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Musketeer_glow",,"Above",,,,,,,
|
||||
"RocketTower_destruction",,,300,,"RocketTower destruction","ParticleEmitter",,,"ArcherTower_particle1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle3",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle4",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particles5",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle6",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_particle7",,"Object",,,,,,,
|
||||
,,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_destruction_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"ArcherTower_destruction_smoke_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"AercherTower_particleShadows",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"RocketTower_destroyed_base",,"Base",,,,,,,
|
||||
"Beartrap_die",,,,,"BearTrapAttack","SWF",,,,,"Object",,,,,,,
|
||||
"cannon_fire_projectile",,,,,"Cannon Fire","ParticleEmitter",,,"cannon_glow_top",,"Above",,1,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_smoke1",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_firePareticles",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_glow",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_smoke_shadow",,"Shadow",,,,,,,
|
||||
"cannon_hit",,"true",,,,"ParticleEmitter",,,"cannon_hit_rock_emiter",,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_hit_smokePuff",,"Object",,60,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
"Cannon_deploy",,,,,"Cannon Deploy","SWF",,,,,"Above",,,,,,,
|
||||
"Cannon_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,,,,,,
|
||||
,,,,,"Boulder impact","SWF",,,,,"Object",,,,,,,
|
||||
"Tower_projectile_emitter","true","true",,,,"ParticleEmitter",,,"Tower_projectile_trail1",,"Object",,,,,,,
|
||||
"Fear_deploy",,,,,"PanicSpell","ParticleEmitter","sc/effects.sc","Fear_face","Fear_face_emitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","Fear_face","Fear_face_emitter_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"SmokePuff",,"Object",,,,,,,
|
||||
"BearTrap_deploy",,,,,"BearTrapDeploy","SWF",,,,,"Base",,,,,,,
|
||||
"Character_marker_player",,,,,,"SWF",,,,,"Base",,,,,,"Character_marker_enemy",
|
||||
"Character_marker_enemy",,,,,,"SWF",,,,,"Base",,,,,,,
|
||||
"piper_attack_effect","true",,,,,"ParticleEmitter",,,"piper_attack_emmiter",,"Object",,,,,,,
|
||||
"piper_hit",,"true",,,,"ParticleEmitter",,,"piper_hit_emmiter",,"Object",,100,,,,,
|
||||
"Character_move_target_marker_player","true","true",,,,"SWF","sc/effects.sc","wizard_roundBase_player",,,"Base",,,,,,"Character_move_target_marker_enemy",
|
||||
"Character_move_target_marker_enemy","true","true",,,,"SWF","sc/effects.sc","wizard_roundBase_enemy",,,"Base",,,,,,,
|
||||
"FireballEmitter","true","true",,,,"ParticleEmitter",,,"FireballEmitterTrail",,"Object",,50,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"fireball_trial_spark",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"fireball_trail_glow",,"Above",,,,,,,
|
||||
"rocketTowerHit",,,,,,"ParticleEmitter","sc/effects.sc","SlamShockAnim","rocketTowerHitsmoke",,"Above",,100,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","ExplosionBlast","RocketTower_fireworks",,"Above",,100,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","Deco_small_glow",,,"Base",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"rocketTower_fireworks2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"rocketTower_sparks",,"Object",,,,,,,
|
||||
"Death_elixir_player",,,,,,"ParticleEmitter",,,"Death_elixir_burst1",,"Object",,,,,,,
|
||||
"Clouds1","true",,,,,"ParticleEmitter",,,"Clouds_move1",,"Above",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","Overlay_glow",,,"Above",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","Overlay_darken",,,"Above",,,,,,,
|
||||
"Player_units_glow","true","true",,,,,,,,,,,,,,,"Enemy_units_glow",
|
||||
"Enemy_units_glow","true",,,,,"SWF","sc/ui.sc","troop_glow_red",,,"Base",,,,,,,
|
||||
"Troop_side",,,,,,,,,,,,,,,,,"Troop_side_enemy",
|
||||
"Troop_side_enemy","true",,,,,"SWF","sc/ui.sc","troop_glow_red",,,"Base",,,,,,,
|
||||
"Spell_rage_ground",,,,,,"SWF","sc/effects.sc","rage_effect_ground",,,"Base",,,,,,,
|
||||
"Spell_rage_effect",,,,,"sound_rage_effect","ParticleEmitter",,,"Spell_rage_smoke1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Spell_rage_smoke2",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Spell_rage_glowFast",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Spell_rage_sparckle1",,"Object",,,,,,,
|
||||
"Spell_rage_hit_effect","true","true",,,,,,,,,,,,,,,,
|
||||
"Spell_rage_loop","true",,,,,"ParticleEmitter",,,"Spell_rage_sparkle1_loop",,"Object",,,,,,,
|
||||
"EnemyGenericDie",,,,,"sound_enemy_die_jingle","Effect",,,,,"Object",,,,,,,
|
||||
"GenericDie",,,,,"sound_own_die_jingle","Effect",,,,,"Object",,,,,,"EnemyGenericDie",
|
||||
"inferno_beam_lvl1","true",,,,"inferno_loop","SWF","sc/effects.sc","inferno_beam",,,"Above",,,,,,,170
|
||||
"inferno_beam_lvl2","true",,,,"inferno_loop","SWF","sc/effects.sc","inferno_beam_stage2",,,"Above",,,,,,,170
|
||||
"inferno_beam_lvl3","true",,,,"inferno_loop","SWF","sc/effects.sc","inferno_beam_stage3",,,"Above",,,,,,,170
|
||||
"inferno_hit_effect",,"true",,,,"ParticleEmitter",,,"inferno_hit_sparks",,"Object",,70,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","inferno_hit_lines",,,"Object",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","inferno_hit",,,"Object",,,,,,,
|
||||
"inferno_muzzle","true",,,,,"SWF","sc/effects.sc","inferno_shoot",,,"Above",,,,,,,-1
|
||||
"inferno_stage2_root","true",,,,,"SWF","sc/effects.sc","inferno_stage2_root",,,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"inferno_stage2_sparks",,"Base",,,,,,,
|
||||
"inferno_stage3_root","true",,,,,"SWF","sc/effects.sc","inferno_stage3_root",,,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"inferno_stage3_sparks",,"Base",,,,,,,
|
||||
"inferno_muzzle_stage2","true",,,,,"SWF","sc/effects.sc","inferno_shoot_st2",,,"Above",,,,,,,-1
|
||||
,,,,,,"ParticleEmitter",,,"inferno_stage2_peak_flame",,"Above",,,,,,,
|
||||
"inferno_muzzle_stage3","true",,,,,"SWF","sc/effects.sc","inferno_shoot_st3",,,"Above",,,,,,,-1
|
||||
,,,,,,"ParticleEmitter",,,"inferno_stage3_peak_flame",,"Above",,,,,,,
|
||||
"BombTower_die",,,400,50,"sound_bomb_tower_die","ParticleEmitter",,,"TargetDummy_planks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"TargetDummy_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
"BombTower_projectile_hit",,,,,"sound_BombTower_projectile_hit","ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"BlueSparkEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_glow",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"BombTower_hit_flame",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"HitEffectParticles",,"Object",,,,,,,
|
||||
"Rocket_Emitter","true","true",,,,"ParticleEmitter",,,"Rocket_Emitter_Smoketrail",,"Object",,50,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Rocket_Emitter_Sparks",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Rocket_Emitter_Glow",,"Above",,,,,,,
|
||||
,,,,800,,"ParticleEmitter",,,"Rocket_Emitter_Smoketrail",,"Object",,,,,,,
|
||||
"Rocket_explosion",,,1500,,"sound_rocket_explosion","ParticleEmitter",,,"Fireball_explosion_smoke",,"Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","explosion_glow1","Fireball_explosion_glow",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter","sc/effects.sc","explosion_glow1","Fireball_explosion_sparks",,"Object",,,,,,,
|
||||
,,,,10,,"ParticleEmitter",,,"explosion_gradients",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_shadow",,"Shadow",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_fire",,"Object",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"explosion_continousFire",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"explosion_glow",,"Above",,,,,,,
|
||||
"Rocket_spawn",,,,,,,,,,,,,,,,,,
|
||||
,,,,,"sound_rocket_spawn",,,,,,,,,,,,,
|
||||
"Spell_freeze_loop","true",,,,,"ParticleEmitter",,,"Spell_freeze_snowflake1_loop",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Spell_freeze_snowflake2_loop",,"Object",,,,,,,
|
||||
"Spell_freeze_ground",,,,,,"SWF","sc/effects.sc","freeze_effect_ground",,,"Base",,,,,,,
|
||||
"Spell_freeze_cast",,,,,"sound_freeze_deploy","Effect",,,,,"Above",,,,,,,
|
||||
"level_up_hud",,,,,,"ParticleEmitter",,,"Death_sparkle_still1",,"Above",,,,,,"replay_drag_enemy",
|
||||
"summoner_attack",,,,,"Cannon Fire","ParticleEmitter",,,"cannon_glow_top",,"Above",,1,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_smoke1",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_firePareticles",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"cannon_glow",,"Object",,,,,,,
|
||||
"KingTowerExplode",,,2000,50,,"ParticleEmitter",,,"TargetDummy_planks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"TargetDummy_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TowerExplode_rockEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"KingTower_destroyed_ground",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Big_rock_particle1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
"Spell_lightning_effect",,,1000,200,"sound_musketeer_attack","ParticleEmitter",,,"Spell_ligntning_smoke1",,"Object",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"Spell_lightning_hitSpot",,"Ground",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"Spell_lightning_hitSpot2",,"Above",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"Spell_lightning_bolt",,"Above",,,,,,,
|
||||
,,,,50,,"ParticleEmitter",,,"Spell_lightning_sparks",,"Object",,,,,,,
|
||||
,,,,50,,"ParticleEmitter",,,"Spell_lightning_Flash",,"Ground",,,,,,,
|
||||
,,,,50,,"ParticleEmitter",,,"Spell_lightning_Rock_debris",,"Base",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"Spell_lightning_Rock_debris2",,"Base",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"Spell_lightning_electric",,"Base",,,,,,,
|
||||
"Spell_lightning_ground",,,,,,,,,,,,,,,,,,
|
||||
"Spell_lightning_cast",,,,,,"Effect",,,,,"Above",,,,,,,
|
||||
"Spell_zap_effect",,,250,150,"sound_spell_zap","ParticleEmitter",,,"Spell_zap_smoke1",,"Object",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"Spell_zap_hitSpot",,"Ground",,,,,,,
|
||||
,,,,200,,"ParticleEmitter",,,"Spell_zap_hitSpot2",,"Ground",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"Spell_zap_bolt",,"Above",,,,,,,
|
||||
,,,,50,,"ParticleEmitter",,,"Spell_zap_sparks",,"Object",,,,,,,
|
||||
,,,,50,,"ParticleEmitter",,,"Spell_zap_Flash",,"Ground",,,,,,,
|
||||
"MegaBombExplodeSkeleton",,,1000,,"sound_GiantSkeleton_bomb_die","ParticleEmitter",,,"MagaBomb_FireRing",,"Object",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"MegaBomb_explode_smoke",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"MegaBomb_explode_debris",,"Ground",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"MegaBomb_destroyed_ground",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"MegaBomb_explode_debris2",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"MegaBomb_explosion_glow",,"Object",,,,,,,
|
||||
"MegaBombExplodeBalloon",,,1000,,"sound_Balloon_Bomb_die","ParticleEmitter",,,"MagaBomb_FireRing",,"Object",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"MegaBomb_explode_smoke",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"MegaBomb_explode_debris",,"Ground",,,,,,,
|
||||
,,,,100,,"ParticleEmitter",,,"MegaBomb_destroyed_ground",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"MegaBomb_explode_debris2",,"Ground",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"MegaBomb_explosion_glow",,"Object",,,,,,,
|
||||
"prince_deploy",,,,,"sound_prince_deploy","SWF",,,,,"Object",,100,,,,,
|
||||
,,,,,"sound_prince_deploy_end","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,,"Effect",,,"deploy_unit_blue","Deploy_ground_fX_mediumSize","Base",,,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
"prince_steps",,,,,"sound_prince_steps","ParticleEmitter",,,"knight_speps_dust1",,"Ground",,100,,,,,
|
||||
"prince_charge_steps",,,,,"sound_prince_charge_steps","ParticleEmitter",,,"knight_speps_dust1",,"Ground",,100,,,,,
|
||||
"prince_charge",,,,,"sound_prince_charge","ParticleEmitter",,,"knight_deploy_dustPuff1",,"Object",,,,,,,
|
||||
,,,,,,"Filter","sc/level.sc","filter_protection",,,"Base",,,,,,,
|
||||
,,,,,,"SWF","sc/effects.sc","effect_charge",,,"Above",,,,"txt","charge",,
|
||||
"prince_charge_hit",,,,,"sound_prince_charge_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"prince_attack_start",,,,,"sound_prince_attack_start","Effect",,,,,"Object",,100,,,,,
|
||||
"prince_hit",,,,,"sound_prince_hit","SWF",,,,,"Object",,100,,,,,
|
||||
"prince_target",,,,,"sound_prince_target","SWF",,,,,"Above",,100,,,,,
|
||||
"prince_die",,,,,,"Effect","sc/effects.sc","RoundExplosion","Death_sparkle_still1","Death_player","Object",,100,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"knight_deploy_dustPuff1",,"Object",,100,,,,,
|
||||
,,,,,,,,,,,,,100,,,,,
|
||||
,,,,,,,,,,,,,100,,,,,
|
||||
"prince_charge_symbol",,"true",,,,"SWF","sc/level.sc","effect_protection",,,"Above",,,,,,,
|
||||
"Deploy_ground_fX_mediumSize",,,,300,,"ParticleEmitter",,,"knight_deploy_rocks_hitGround",,"Ground",,100,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"knight_deploy_dustPuff1",,"Ground",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"knight_depoy_dustShadow",,"Shadow",,60,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"knight_deploy_dustPuff2",,"Object",,60,,,,,
|
||||
,,,,,,,,,,,,,60,,,,,
|
||||
"Deploy_ground_fx_largeSize",,,,300,,"ParticleEmitter",,,"giant_deploy_dustPuff",,"Ground",,100,,,,"giant_skeleton_deploy_enemy",
|
||||
,,,,300,,"ParticleEmitter",,,"giant_deploy_rocks_hitGround",,"Ground",,,,,,,
|
||||
,,,,300,,"ParticleEmitter",,,"giant_deploy_dustPuff_shadow",,"Shadow",,,,,,,
|
||||
"King_player_activate_training",,,,,"sound_king_player_activate","SWF",,,,,"Object",,,,,,"King_enemy_activate_training",
|
||||
,,,,,"sound_king_angry","SWF",,,,,"Object",,,,,,,
|
||||
"King_enemy_activate_training",,,,,"sound_king_enemy_activate","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,"sound_king_happy_tower","SWF",,,,,"Object",,,,,,,
|
||||
"King_player_activate",,,,,"sound_king_player_activate","SWF",,,,,"Object",,,,,,"King_enemy_activate",
|
||||
,,,,,"sound_king_angry","SWF",,,,,"Object",,,,,,,
|
||||
"King_player_die",,,,,"sound_king_player_die","SWF",,,,,"Object",,,,,,"King_enemy_die",
|
||||
,,,2000,50,,"ParticleEmitter",,,"TargetDummy_planks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"TargetDummy_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TowerExplode_rockEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"KingTower_destroyed_ground",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Big_rock_particle1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
"King_enemy_activate",,,,,"sound_king_enemy_activate","SWF",,,,,"Object",,,,,,,
|
||||
,,,,,"sound_king_angry","SWF",,,,,"Object",,,,,,,
|
||||
"King_enemy_die",,,,,"sound_king_enemy_die","SWF",,,,,"Object",,,,,,,
|
||||
,,,2000,50,,"ParticleEmitter",,,"TargetDummy_planks",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"FireRingEmitter",,"Object",,,,,,,
|
||||
,,,,250,,"ParticleEmitter",,,"TargetDummy_smoke",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TowerExplode_rockEmitter",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"KingTower_destroyed_ground",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"Big_rock_particle1",,"Object",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"TargetDummy_planks2",,"Object",,,,,,,
|
||||
"King_attack",,,,,"sound_king_attack","SWF",,,,,"Object",,,,,,,
|
||||
"chest_landing_gold",,,,,,"SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_puff",,"Above",,,,,,,
|
||||
,,,,500,,"ParticleEmitter",,,"chest_landing_goldDust",,"Above",,,,,,,
|
||||
,,,,500,,"ParticleEmitter",,,"chest_landing_goldDust2",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_goldFlash",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_goldBurst",,"Base",,,,,,,
|
||||
"chest_landing_magic",,,,,,"SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_puff",,"Above",,,,,,,
|
||||
,,,,500,,"ParticleEmitter",,,"chest_landing_magicDust",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_magicFlash",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_goldFlash",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_magicBurst",,"Base",,,,,,,
|
||||
"chest_landing_wood",,,,,,"SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_puff",,"Above",,,,,,,
|
||||
"chest_landing_iron",,,,,,"SWF",,,,,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_puff",,"Above",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"chest_landing_metalHit",,"Base",,,,,,,
|
||||
"dark_arena_pot_flame",,,,,,"ParticleEmitter",,,"FlameEmitterSlow",,"Above",,100,,,,,
|
||||
"xp_levelup",,,,,,"SWF",,,,,"Above",,,,,,,
|
||||
,,,,500,,"ParticleEmitter",,,"xp_levelup_sparks",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"xp_levelup_flash",,"Base",,,,,,,
|
||||
,,,,,,"ParticleEmitter",,,"xp_levelup_burst",,"Base",,,,,,,
|
||||
"Inferno_continuous","true",,,,,"ParticleEmitter",,,"Inferno_loop1",,"Object",,100,,,,"Inferno_continuous",
|
||||
,,,,300,,"ParticleEmitter",,,"Inferno_loop1",,"Object",,,,,,,
|
||||
"GiantSkeleton_Bomb_deploy",,,,,"sound_GiantSkeleton_bomb_deploy","SWF",,,,,"Object",,,,,,,
|
||||
"GiantSkeleton_Bomb_die",,,,,"sound_GiantSkeleton_bomb_die","Effect","sc/effects.sc","MegaBombExplode",,,"Object",,,,,,,
|
||||
"Balloon_Bomb_deploy",,,,,"sound_Balloon_Bomb_deploy","SWF",,,,,"Object",,,,,,,
|
||||
"Balloon_Bomb_die",,,,,"sound_Balloon_Bomb_die","Effect","sc/effects.sc","MegaBombExplode",,,"Object",,,,,,,
|
||||
|
9
assets/csv_client/health_bars.csv
Normal file
9
assets/csv_client/health_bars.csv
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
"Name","FileName","PlayerExportName","EnemyExportName","NoDamagePlayerExportName","NoDamageEnemyExportName","MinimumHitpointValue","ShowOwnAlways","ShowEnemyAlways","YOffset"
|
||||
"String","String","String","String","String","String","int","boolean","boolean","int"
|
||||
"Small","sc/ui.sc","hp_player_small","hp_enemy_small","hp_player_number","hp_enemy_number",0,,"true",
|
||||
"Minion","sc/ui.sc","hp_player_minion","hp_enemy_minion","hp_player_minion","hp_enemy_minion",,,,
|
||||
"Medium","sc/ui.sc","hp_player_medium","hp_enemy_medium","hp_player_number","hp_enemy_number",75,,"true",
|
||||
"Legendary","sc/ui.sc","hp_player_legendary","hp_enemy_legendary","hp_player_number","hp_enemy_number",300,,"true",
|
||||
"High","sc/ui.sc","hp_player_high","hp_enemy_high","hp_player_number","hp_enemy_number",150,,"true",
|
||||
"Tower","sc/ui.sc","hp_player_tower_withNumber","hp_enemy_tower_withNumber","hp_player_tower_withNumber","hp_enemy_tower_withNumber",,,"true",
|
||||
"Summoner","sc/ui.sc","hp_player_wizard","hp_enemy_wizard","hp_player_wizard","hp_enemy_wizard",,"true","true",20
|
||||
|
78
assets/csv_client/hints.csv
Normal file
78
assets/csv_client/hints.csv
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
"Name","TID","NotBeenInClan","MinNpcWins","MaxNpcWins","MinArena","MaxArena","MinTophies","MaxTrophies","MinExpLevel","MaxExpLevel","iOSTID","AndroidTID"
|
||||
"String","String","boolean","int","int","int","int","int","int","int","int","String","String"
|
||||
"welcome message","TID_HINT_WELCOME",,,6,,,,,,,,
|
||||
"winning condition1","TID_HINT_WINNING_CONDITION1",,2,,,1,,,,,,
|
||||
"winning condition2","TID_HINT_WINNING_CONDITION2",,2,,,1,,,,,,
|
||||
"elixir basics1","TID_HINT_ELIXIR_BASICS1",,4,,,1,,,,,,
|
||||
"elixir basics2","TID_HINT_ELIXIR_BASICS2",,4,,,1,,,,,,
|
||||
"elixir basics3","TID_HINT_ELIXIR_BASICS3",,4,,,1,,,,,,
|
||||
"exp level1","TID_HINT_EXP_LEVEL1",,,,2,3,,,,,,
|
||||
"exp level2","TID_HINT_EXP_LEVEL2",,,,2,3,,,,,,
|
||||
"battle basics1","TID_HINT_BATTLE_BASICS1",,,,2,3,,,,,,
|
||||
"battle basics2","TID_HINT_BATTLE_BASICS2",,,,2,3,,,,,,
|
||||
"join clan","TID_HINT_JOIN_CLAN","TRUE",,,,,,,3,,,
|
||||
"tv royale","TID_HINT_TV_ROYALE",,,,1,3,,,,,,
|
||||
"arrows","TID_HINT_ARROWS",,6,,,2,,,,,,
|
||||
"giant","TID_HINT_GIANT",,6,,,2,,,,,,
|
||||
"knight and archers","TID_HINT_KIGHT_AND_ARCHERS",,,,1,1,,,,,,
|
||||
"area damage","TID_HINT_AREA_DAMAGE",,,,2,3,,,,,,
|
||||
"free chest","TID_HINT_FREE_CHEST",,,,2,3,,,,,,
|
||||
"match duration","TID_HINT_MATCH_DURATION",,,,1,3,,,,,,
|
||||
"overtime","TID_HINT_OVERTIME",,,,1,3,,,,,,
|
||||
"card types","TID_HINT_CARD_TYPES",,,,2,3,,,,,,
|
||||
"card rarities","TID_HINT_CARD_RARITIES",,,,1,3,,,,,,
|
||||
"deck basics1","TID_HINT_DECK_BASICS1",,,,2,3,,,,,,
|
||||
"deck basics2","TID_HINT_DECK_BASICS2",,,,1,1,,,,,,
|
||||
"achievements","TID_HINT_ACHIEVEMENT_GEMS",,,,,,,,3,6,,
|
||||
"clan rewards","TID_HINT_DONATE_REWARDS",,,,,,,,3,6,,
|
||||
"king activation","TID_HINT_KING_ACTIVATION",,,,2,4,,,,,,
|
||||
"king daughters","TID_HINT_KING_DAUGHTERS",,,,2,3,,,,,,
|
||||
"story1","TID_HINT_STORY1",,,,3,4,,,,,,
|
||||
"building lifetime","TID_HINT_BUILDING_LIFETIME",,,,2,4,,,,,,
|
||||
"crown towers","TID_HINT_TOWER_TARGETING",,,,2,3,,,,,,
|
||||
"building targeting","TID_HINT_BUILDINGS",,,,2,3,,,,,,
|
||||
"common max level","TID_HINT_COMMON_MAX_LEVEL",,,,,,,,8,,,
|
||||
"rare max level","TID_HINT_RARE_MAX_LEVEL",,,,,,,,8,,,
|
||||
"epic max level","TID_HINT_EPIC_MAX_LEVEL",,,,,,,,8,,,
|
||||
"card upgrades","TID_HINT_CARD_UPGRADES",,,,1,2,,,,,,
|
||||
"card unlocks","TID_HINT_CARD_UNLOCKS",,,,2,3,,,,,,
|
||||
"card shop","TID_HINT_SHOP_CYCLE",,,,1,4,,,,,,
|
||||
"chest basics1","TID_HINT_CHEST_BASICS1",,,,2,4,,,,,,
|
||||
"chest basics2","TID_HINT_CHEST_BASICS2",,,,2,4,,,,,,
|
||||
"chest basics3","TID_HINT_CHEST_BASICS3",,,,2,4,,,,,,
|
||||
"chest basics4","TID_HINT_CHEST_BASICS4",,,,2,4,,,,,,
|
||||
"matchmaking","TID_HINT_MATCHMAKING",,,,2,4,,,,,,
|
||||
"bomb tower","TID_HINT_BOMB_TOWER",,,,2,3,,,,,,
|
||||
"tank1","TID_HINT_TANK1",,,,2,3,,,,,,
|
||||
"tank2","TID_HINT_TANK2",,,,2,3,,,,,,
|
||||
"prince","TID_HINT_PRINCE",,,,2,3,,,,,,
|
||||
"tesla","TID_HINT_BATTLE_TESLA",,,,4,5,,,,,,
|
||||
"deploy area","TID_HINT_DEPLOY_AREA",,,,2,3,,,,,,
|
||||
"taunts","TID_HINT_TAUNTS",,,,2,3,,,,,,
|
||||
"three crowns","TID_HINT_THREE_CROWNS",,,,3,5,,,,,,
|
||||
"balloon","TID_HINT_BALLOON",,,,2,4,,,,,,
|
||||
"double elixir","TID_HINT_DOUBLE_ELIXIR",,,,2,3,,,,,,
|
||||
"huts","TID_HINT_HUTS",,,,2,3,,,,,,
|
||||
"tombstone","TID_HINT_TOMBSTONE",,,,2,3,,,,,,
|
||||
"rage","TID_HINT_RAGE",,,,3,5,,,,,,
|
||||
"direct damage","TID_HINT_DIRECT_DAMAGE",,,,3,4,,,,,,
|
||||
"elixir basics4","TID_HINT_MAX_ELIXIR",,,,2,3,,,,,,
|
||||
"starting hand","TID_HINT_STARTING_HAND",,,,2,3,,,,,,
|
||||
"crown chest","TID_HINT_CROWN_CHEST",,,,2,4,,,,,,
|
||||
"pro1","TID_HINT_BATTLE_PRO1",,,,3,,,,,,,
|
||||
"pro2","TID_HINT_BATTLE_PRO2",,,,3,,,,,,,
|
||||
"pro3","TID_HINT_BATTLE_PRO3",,,,5,,,,,,,
|
||||
"pro4","TID_HINT_BATTLE_PRO4",,,,3,5,,,,,,
|
||||
"pro5","TID_HINT_BATTLE_PRO5",,,,3,,,,,,,
|
||||
"targeting","TID_HINT_TARGETING",,,,3,5,,,,,,
|
||||
"inferno","TID_HINT_INFERNO",,,,4,5,,,,,,
|
||||
"giant skeleton","TID_HINT_GIANT_SKELETON",,,,2,4,,,,,,
|
||||
"epic sunday","TID_HINT_EPIC_SUNDAY",,,,2,5,,,,,,
|
||||
"gems from chests","TID_HINT_GEMS_FROM_CHESTS",,,,2,5,,,,,,
|
||||
"hog rider","TID_HINT_HOG_RIDER",,,,4,,,,,,,
|
||||
"golem1","TID_HINT_GOLEM1",,,,6,,,,,,,
|
||||
"golem2","TID_HINT_GOLEM2",,,,6,,,,,,,
|
||||
"pekkas","TID_HINT_PEKKAS",,,,2,6,,,,,,
|
||||
"trophy count","TID_HINT_TROPHY_COUNT",,,,3,5,,,,,,
|
||||
"lightning","TID_HINT_LIGHTNING",,,,2,4,,,,,,
|
||||
"bomber","TID_HINT_BOMBER",,,,1,2,,,,,,
|
||||
|
19
assets/csv_client/music.csv
Normal file
19
assets/csv_client/music.csv
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
"Name","FileName","Volume","Loop","PlayCount","FadeOutTimeSec","DurationSec"
|
||||
"String","String","int","boolean","int","int","int"
|
||||
"TutorialMusic","music/2min_loop_battle_01.ogg",50,"true",,,
|
||||
"BattleMusic","music/2min_loop_battle_01.ogg",50,"true",,,
|
||||
,"music/2min_loop_battle_02.ogg",50,"true",,,
|
||||
,"music/2min_loop_battle_03.ogg",50,"true",,,
|
||||
"MenuMusic","music/menu_03.ogg",70,,2,30,96
|
||||
,"music/wizmen04.ogg",70,,2,30,96
|
||||
,"music/new_menu_01.ogg",70,,2,30,96
|
||||
"TrainingArena","music/tutorial_2m_arena_forest_amb_01.ogg",50,"true",,,
|
||||
"60sec_training","music/60secs_training_Arena_01.ogg",65,,,,
|
||||
"Sudden_death","music/sudden_death_01.ogg",60,,,,
|
||||
"Pre_result","music/scroll_preresult_loop_01.ogg",80,,,,
|
||||
"Win","music/scroll_win_02.ogg",95,,,,
|
||||
"Lose","music/scroll_lose_01.ogg",85,,,,
|
||||
"Draw","music/scroll_draw_01.ogg",85,,,,
|
||||
"Post_result_loop","music/scroll_post_jingle_loop_01.ogg",50,"true",,,
|
||||
"60sec_loop","music/60_sec_music_loop_01.ogg",55,,,,
|
||||
"30sec_loop","music/30_sec_music_loop_01.ogg",60,,,,
|
||||
|
3
assets/csv_client/news.csv
Normal file
3
assets/csv_client/news.csv
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
"Name","ID","Enabled","TID","InfoTID","ItemSWF","ItemExportName","IconSWF","IconExportName","ImageSWF","ImageExportName","ButtonUrl","ButtonTID"
|
||||
"String","int","Boolean","String","String","String","String","String","String","String","String","String","String"
|
||||
"Update",115,"TRUE","TID_NEWS_UPDATE_TITLE","TID_NEWS_UPDATE_TEXT","sc/ui.sc","news_item",,,,,,
|
||||
|
568
assets/csv_client/particle_emitters.csv
Normal file
568
assets/csv_client/particle_emitters.csv
Normal file
|
|
@ -0,0 +1,568 @@
|
|||
"Name","ParticleCount","MinLife","MaxLife","ParticleMinInterval","ParticleMaxInterval","ParticleMinLife","ParticleMaxLife","ParticleMinAngle","ParticleMaxAngle","ParticleAngleRelativeToParent","ParticleRandomAngle","ParticleMinRadius","ParticleMaxRadius","ParticleMinSpeed","ParticleMaxSpeed","ParticleStartZ","ParticleMinVelocityZ","ParticleMaxVelocityZ","ParticleGravity","ParticleMinTailLength","ParticleMaxTailLength","ParticleResource","ParticleExportName","RotateToDirection","LoopParticleClip","StartScale","EndScale","FadeOutDuration","Inertia","EnemyVersion"
|
||||
"string","int","int","int","int","int","int","int","int","int","boolean","boolean","int","int","int","int","int","int","int","int","int","int","string","string","boolean","boolean","int","int","int","int","string"
|
||||
"RootRocks1",5,400,400,,5,800,1200,,360,,"true",1,1,10,90,5,100,250,-2000,,,"sc/effects.sc","Rock1ParticleSmall",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2ParticleSmall",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3ParticleSmall",,,,,,,
|
||||
"Arrows Hit Ground",1,1,200,,,1500,1900,,,,"true",,,,,,,,,,,"sc/level.sc","Arrow_enemy_ground_anim_1",,"true",,,500,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/level.sc","Arrow_enemy_ground_anim_2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/level.sc","Arrow_enemy_ground_anim_3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/level.sc","Arrow_enemy_ground_anim_4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/level.sc","Arrow_enemy_ground_anim_5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/level.sc","Arrow_enemy_ground_anim_6",,,,,,,
|
||||
"SmokeEmitter",8,1,1,,,1000,1500,,360,,,,,20,20,,,,,,,"sc/effects.sc","SmokeSmall",,,,,,,
|
||||
"SewerSteam",7,,,250,350,3100,3350,190,280,"true","true",,,1,2,,10,30,,,,"sc/effects.sc","SteamSmall",,,,,,,
|
||||
"BloodSpatter1",10,100,200,,50,150,250,,360,,"true",1,1,70,100,40,,,,1,50,"sc/effects.sc","BloodSpatter1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","BloodSpatter2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","BloodSpatter3",,,,,,,
|
||||
"FireRingEmitter",16,120,250,,,200,550,100,360,,"true",-1,2,60,120,,10,150,,60,200,"sc/effects.sc","FireParticle1",,,110,50,50,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3",,,,,,,
|
||||
"SparkEmitter1",50,100,200,,,200,500,,360,,"true",,,100,100,,100,200,300,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"Smoker2",17,,,500,700,1700,2000,270,20,,"true",,,,15,45,30,80,,,,"sc/effects.sc","SmokeSmallSlow",,,,,,,
|
||||
"SmokePuff",8,1,1,,,600,1500,,360,,"true",,,20,20,40,100,,,,,"sc/effects.sc","RisingSmoke",,,,,,,
|
||||
"Stunner",9,100,200,,,100,400,,360,,"true",,,400,500,,80,100,,200,400,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"Steamer",3,,,,,1100,1500,,,,,,,,,,100,150,,,,"sc/effects.sc","smoke_cloud_1",,,,,,,
|
||||
"PoisonSteamer",5,,,50,200,600,3000,180,270,,"true",,,1,5,30,5,6,-900,,,"sc/effects.sc","poisoncloud_small",,,,,,,
|
||||
"PoisonCloud_2",40,1,500,,,700,1400,,360,,"true",,,10,50,,,,-3000,,,"sc/effects.sc","poisoncloud_big",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","poisoncloud_small",,,,,,,
|
||||
"FireStorm",4,1300,1500,50,140,700,1100,,,,"true",,,,,,45,90,,,,"sc/effects.sc","Fire2_particle1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_particle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_particle4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_particle5",,,,,,,
|
||||
"FireBall",6,,,,100,700,1000,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_rotator1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_rotator2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_rotator3",,,,,,,
|
||||
"HitEffectParticles",20,100,100,,10,150,200,1,360,,"true",2,2,300,350,,60,100,,100,150,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"SlowSparkles",10,,,100,120,1000,2000,,360,,"true",2,2,,,35,50,80,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"BlueSparkEmitter",10,150,150,,10,200,350,,360,,"true",,,,500,,200,200,,100,300,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"LightningBurst",5,250,400,100,150,450,600,,,"true",,3,3,,,60,,,,,,"sc/effects.sc","Lightning","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Lightning2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Lightning4",,,,,,,
|
||||
"LightningGlow",8,500,500,20,50,200,450,,,"true",,1,1,200,200,35,,,,,,"sc/effects.sc","ElectricGlow","true",,,,,,
|
||||
"BlueSparksEmitter",8,100,5000,10,40,300,600,,160,,"true",-25,25,10,100,,20,100,300,,,"sc/effects.sc","SparkleBlue",,,200,100,,,
|
||||
"DirectionalBlueSparkEmitter",30,500,500,,40,300,400,,,"true",,2,2,100,200,35,,,,,,"sc/effects.sc","SparkleBlueOffset1","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlueOffset2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlueOffset3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlueOffset4",,,,,,,
|
||||
"FlameEmitter",5,,,150,200,1200,1200,,,,,,,,,,90,100,,,,"sc/effects.sc","FireParticle1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3",,,,,,,
|
||||
"FlameEmitter_small",15,1000,2500,150,200,400,800,,,,,,,,,,90,100,,,,"sc/effects.sc","FireParticle1_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3_small",,,,,,,
|
||||
"FlameArrowEmitter_small",10,1,1,1,50,200,500,,,,,,,,,29,90,100,,,,"sc/effects.sc","FireParticle1_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3_small",,,,,,,
|
||||
"Black_spot",1,,,,,2500,3000,,,,,,,,,,,,,,,"sc/effects.sc","dark_spot",,,,,,,
|
||||
"WallExplosion",10,200,200,,20,250,300,,360,,"true",,,100,140,40,,,,,,"sc/effects.sc","FireParticle1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3",,,,,,,
|
||||
"WallExplosionSparks1",20,200,200,,10,250,350,,360,,"true",,,200,250,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"Explosion Pilar",15,600,600,20,60,1000,1200,230,280,,,1,1,50,50,35,10,10,500,,,"sc/effects.sc","Fire2_rotator1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_rotator2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_rotator3",,,,,,,
|
||||
"Rock Pieces Emitter",13,400,400,,5,800,1200,,360,,"true",,,30,150,20,100,250,-2000,,,"sc/effects.sc","Rock1Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3Particle",,,,,,,
|
||||
"GlassShatterEmitter",10,1,,,,500,900,,360,,"true",,,70,120,,60,120,-1500,,,"sc/effects.sc","GlassShard1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard8",,,,,,,
|
||||
"GlassShatterEmitter2",30,200,400,1,20,500,1900,,360,"true","true",,,10,40,71,40,100,-1500,,,"sc/effects.sc","GlassShard1","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard8",,,,,,,
|
||||
"GlassShatterEmitter3",10,1,,,,500,500,,360,,"true",,,20,140,100,60,150,-1500,,,"sc/effects.sc","GlassShard1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard8",,,,,,,
|
||||
"PoisonDropsEmitter",25,300,,5,20,500,550,,360,,"true",,,80,,25,100,130,-1000,1,5,"sc/effects.sc","PoisonParticle1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","PoisonParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","PoisonParticle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","PoisonParticle4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","PoisonParticle5",,,,,,,
|
||||
"PoisonSteamSmall",5,,,2000,4000,1800,3000,180,270,,"true",,,1,6,20,1,2,-900,,,"sc/effects.sc","egg_steamer",,,,,,,
|
||||
"SmokeBomb_smoke1",28,,,,,1100,2500,,500,,"true",5,5,,10,,,100,,,1000,"sc/effects.sc","Steam",,,,,,,
|
||||
"SmokeBomb_smoke2",28,,,,,1100,2500,,500,,"true",9,9,,10,,,10,,,1000,"sc/effects.sc","Steam",,,,,,,
|
||||
"SmokeBomb_smoke3",28,,,,,1100,3000,,350,,"true",14,14,,10,,,10,,,1000,"sc/effects.sc","Steam",,,,,,,
|
||||
"FireSpirit_emitter",4,1,1,1,1,340,700,,180,,"true",,,,,15,,,120,,,"sc/effects.sc","Fire2_particle1",,,,,,,
|
||||
"Fireplace_emitter",2,1,100,1,50,500,900,,180,,"true",,,,,53,,,100,,,"sc/effects.sc","Fire2_particle1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_particle4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Fire2_particle5",,,,,,,
|
||||
"HotHoals1",28,,1000,1,2,2500,5000,,360,"true","true",3,3,,30,,,1000,-3500,,,"sc/effects.sc","particle_coal1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal8",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal9",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal10",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"HotCoals_sparks",4,100,5000,,50,300,800,,360,,"true",7,7,10,80,,10,100,500,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"HotHoals_loop",30,,5000,1,10,4000,5000,,360,"true","true",7,7,,10,,,500,-2000,,,"sc/effects.sc","particle_coal1","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal8",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal9",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal10",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"HotCoals_loop2",5,,1000,1,200,500,1200,,360,"true","true",7,7,,,,,,300,,,"sc/effects.sc","Sparkle","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"HotCoals_loop3",12,,3000,1,100,100,3000,,360,"true","true",4,4,,10,,,500,-2000,,,"sc/effects.sc","particle_coal1","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal8",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal9",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal10",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"HotCoals_loop4",30,,4000,1,10,4000,5000,,360,"true","true",10,10,,10,,,500,-2000,,,"sc/effects.sc","particle_coal1","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal8",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal9",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal10",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"HotCoals_darken",9,1,10000,,1,2000,5000,,360,,"true",4,4,,,,,,,,,"sc/effects.sc","darken_gradient",,,,,,,
|
||||
"HotCoals_darken2",6,1,10000,,1,2000,5000,,360,,"true",9,9,,,,,,,,,"sc/effects.sc","darken_gradient",,,,,,,
|
||||
"DragSparkEmitter",30,500,500,,40,300,400,90,90,"true",,2,2,100,200,35,,,,,,"sc/effects.sc","SparkleBlueOffset1","true",,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlueOffset2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlueOffset3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlueOffset4",,,,,,,
|
||||
"Fireplace_particles_loop",2,100,100,1,20,500,900,,,,"true",,2,,,30,10,100,100,,20,"sc/effects.sc","fireplace_particle","true",,,,,,
|
||||
"Fireplace_bouncy_particles_loop",1,100,100,1,20,1300,1900,1,360,,"true",3,3,10,20,37,20,200,-1000,,20,"sc/effects.sc","fireplace_particle","true",,,,,,
|
||||
"Musketeer_smoke1",10,,,,,1100,2500,,360,"true",,,,5,15,,50,90,-20,,1000,"sc/effects.sc","smoke_cloud_1","true","true",100,1,300,,
|
||||
"Musketeer_smoke_shadow",5,,,,,1100,2500,,360,"true",,,,-5,-15,,-50,-90,-20,,1000,"sc/effects.sc","smoke_cloud_1","true","true",80,30,2000,,
|
||||
"Musketeer_glow",1,,,,,400,600,,,,,,,,,,,,,,,"sc/effects.sc","Deco_small_glow",,,,,,,
|
||||
"Musketeer_fireParticles",3,,,,,500,800,-40,40,"true","true",,,100,200,,10,200,-200,,,"sc/effects.sc","fireplace_particle",,,180,10,200,,
|
||||
"Musketeer_glow_top",1,,,,,1200,1400,,,,,,,,,,40,40,30,,,"sc/effects.sc","Deco_small_glow2",,,,,100,,
|
||||
"Haze1",9,10000,,1000,,3000,9000,,360,,,,20,,,7,,,,,,"sc/effects.sc","Haze1",,,,,7000,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Haze2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Haze3",,,,,,,
|
||||
"Fireball_explosion_smoke",34,100,100,1,1,1500,2300,,360,,"true",3,7,10,15,14,20,30,10,,,"sc/effects.sc","explosion_cloud_1","true","true",100,120,1500,20,
|
||||
"Fireball_explosion_sparks",22,190,190,1,3,800,900,,360,,"true",1,3,70,80,73,500,900,-2000,,20,"sc/effects.sc","SparkleBlue","true",,100,1,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
"Fireball_explosion_glow",12,190,190,1,3,1200,2800,-30,30,,"true",,2,,50,10,20,90,35,,,"sc/effects.sc","Death_blue_smoke","true",,23,30,3500,40,
|
||||
"explosion_lava",15,200,200,,20,900,1000,,360,,"true",1,1,40,90,30,800,900,-3000,3,15,"sc/effects.sc","particle_coal9","true",,120,20,,,
|
||||
"explosion_gradients",1,190,190,1,1,4000,5000,,,,"true",,,,,,,,,,,"sc/effects.sc","darken_gradient",,,135,135,,,
|
||||
"explosion_base",32,100,100,1,1,1800,2200,,360,"true","true",1,8,,,,,50,-3500,,,"sc/effects.sc","particle_coal1",,"true",,,300,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal6",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal7",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal8",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal9",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal10",,,,,,,
|
||||
"explosion_shadow",12,100,100,1,1,2700,2800,,360,,"true",4,7,,,,,,,,,"sc/effects.sc","explosion_cloud_1","true","true",150,150,5000,,
|
||||
"explosion_fire",4,300,300,1,1,1200,1200,,360,,,1,7,1,10,,90,100,,,,"sc/effects.sc","FireParticle1",,,200,50,1500,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3",,,,,,,
|
||||
"explosion_continousFire",8,1500,1500,150,100,700,800,,360,,"true",1,3,,10,,,,300,,,"sc/effects.sc","MolotovTrailParticle","true",,200,1,,,
|
||||
"explosion_glow",8,100,100,1,1,500,2500,,360,,"true",1,5,,,25,,,100,,,"sc/effects.sc","Deco_fireplace_glow","true",,150,50,2000,,
|
||||
"FireBreath_attack_sparks",29,800,800,1,20,500,800,-40,40,"true","true",,,100,200,20,10,200,-200,,,"sc/effects.sc","fireplace_particle",,,180,10,500,,
|
||||
"FireBreath_attack_glow",19,400,400,40,80,600,1800,-10,10,,,,2,40,60,9,,,,,,"sc/effects.sc","Deco_small_glow",,,1,150,,50,
|
||||
"FireBreath_attack_flames",42,800,800,5,20,350,450,-15,25,"true","true",,,80,150,20,,,30,,,"sc/effects.sc","FireParticle3",,"true",1,130,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
"Death_sparkle",8,180,180,1,3,300,800,-15,15,"true",,,,40,100,44,80,230,-600,,,"sc/effects.sc","Death_blue_sparkle1",,"true",90,10,1000,30,"Death_sparkle_purple"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle4",,,,,,,
|
||||
"TargetDummy_planks",31,130,130,2,5,500,1200,,360,,"true",1,3,10,100,8,100,300,-500,,,"sc/effects.sc","crate_particle_1","true",,120,10,,20,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","crate_particle_2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","crate_particle_3",,,,,,,
|
||||
"TargetDummy_planks2",15,130,130,2,5,2500,3000,,360,,"true",1,3,10,50,4,400,700,-1200,,,"sc/effects.sc","crate_particle_1","true",,100,50,,20,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","crate_particle_2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","crate_particle_3",,,,,,,
|
||||
"TargetDummy_smoke",10,150,150,1,3,1100,2500,,360,"true",,,2,5,15,59,50,90,-20,,1000,"sc/effects.sc","smoke_cloud_1","true","true",140,1,400,,
|
||||
"Death_sparkle_still1",12,180,180,1,3,300,2500,-20,20,"true",,,2,,35,25,,50,-150,,,"sc/effects.sc","Death_blue_sparkle1",,"true",80,10,2000,25,"Death_sparkle2_purple"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle4",,,,,,,
|
||||
"death_sparkle_still2",17,180,180,1,3,300,3000,-30,30,"true",,,2,,45,45,,30,-150,,,"sc/effects.sc","Death_blue_sparkle1",,"true",60,10,2500,25,"Death_sparkle3_purple"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle4",,,,,,,
|
||||
"Death_blue_smoke_shadow",6,190,190,1,3,1200,2800,-30,30,,"true",,2,,50,,-20,-90,-35,,,"sc/effects.sc","Death_blue_smoke","true",,25,40,2500,40,
|
||||
"ExplosiveBarrel_cont_glow1",10,1000,1000,5,500,2200,500,,,,,,1,,,65,,,,,,"sc/effects.sc","Deco_small_glow2",,,20,40,500,,
|
||||
"ExplosiveBarrel_cont_glow2",10,1000,1000,5,500,2200,500,,,,,,1,,,65,,,,,,"sc/effects.sc","Deco_small_glow2",,,20,40,500,,
|
||||
"ExplosiveBarrel_cont_glow3",5,1000,1000,2,50,2200,500,,,,,,1,,,65,,,,,,"sc/effects.sc","Deco_small_glow2",,,20,40,500,,
|
||||
"ExplosiveBarrel_cont_sparks",9,100,5000,,50,100,2900,,360,,"true",,,,50,61,100,250,-500,,100,"sc/effects.sc","SparkleBlue",,,100,10,200,25,
|
||||
"Death_sparkle_purple",8,180,180,1,3,300,800,-15,15,"true",,,,40,100,44,80,230,-600,,,"sc/effects.sc","Death_purple_sparkle1",,"true",90,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Death_sparkle2_purple",12,180,180,1,3,600,2900,-20,20,"true",,,2,,35,25,,50,-150,,,"sc/effects.sc","Death_purple_sparkle1",,"true",80,10,1600,25,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Death_sparkle3_purple",17,180,180,1,3,300,3500,-30,30,"true",,,2,,45,45,,30,-150,,,"sc/effects.sc","Death_purple_sparkle1",,"true",60,10,2900,25,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Death_enemy_puff",12,190,190,1,3,1200,2800,-30,30,,"true",,2,,50,10,20,90,35,,,"sc/effects.sc","explosion_purple_glow1","true",,23,30,2000,40,
|
||||
"Death_player_puff",12,190,190,1,3,1200,2800,-30,30,,"true",,2,,50,10,20,90,35,,,"sc/effects.sc","Death_blue_smoke","true",,23,30,3500,40,"Death_enemy_puff"
|
||||
"ArcherTower_particle1",1,180,180,1,3,1000,1200,,360,"true",,,,10,50,,450,600,-2000,,,"sc/effects.sc","SparkleBlue",,,100,80,200,55,
|
||||
"ArcherTower_particle2",1,180,180,1,3,1500,1600,,360,"true",,,,10,50,,250,300,-2000,,,"sc/effects.sc","SparkleBlue",,,100,80,200,55,
|
||||
"ArcherTower_particle3",2,,200,,5,250,250,,360,"true",,,,,,47,,,,,,"sc/effects.sc","particle_coal6",,,100,200,400,,
|
||||
"ArcherTower_particle4",1,180,180,1,3,5000,6000,,360,"true",,,,5,20,25,30,50,-1000,,,"sc/effects.sc","SparkleBlue",,"true",100,80,200,20,
|
||||
"ArcherTower_particles5",1,180,180,1,3,5000,6000,,360,"true","true",,,20,20,93,250,260,-1000,,,"sc/effects.sc","SparkleBlue","true",,100,80,200,20,
|
||||
"ArcherTower_particle6",2,180,250,1,5,5000,6000,,360,"true",,,,20,20,93,200,250,-1000,,,"sc/effects.sc","SparkleBlue","true",,100,80,200,20,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"ArcherTower_particle7",66,250,250,1,10,1000,1600,,360,"true","true",,2,50,80,74,100,850,-1000,,,"sc/effects.sc","SparkleBlue","true",,130,40,200,25,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"ArcherTower_destruction_smoke",13,1000,1000,1,5,2000,4300,,360,,"true",3,5,10,15,14,20,30,10,,,"sc/effects.sc","explosion_cloud_1","true","true",100,120,6500,20,
|
||||
"ArcherTower_destruction_smoke_shadow",9,100,100,1,1,2700,2800,,360,,"true",1,4,,,,,,,,,"sc/effects.sc","explosion_cloud_1","true","true",150,150,8000,,
|
||||
"ArcherTower_destroyed",1,,,,,900000,900000,,360,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,200,,
|
||||
"AercherTower_particleShadows",16,250,250,1,10,1000,1200,,360,"true","true",,6,1,80,,-100,-850,-1000,,,"sc/effects.sc","SparkleBlue","true",,80,40,2000,25,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"Projectile_rocket_emitter1",4,,,,,150,600,-40,40,"true",,,2,,,,,,-500,,,"sc/effects.sc","fireplace_particle",,,120,30,200,,
|
||||
"Projectile_rocket_smoke1",5,,,,,600,1200,,360,"true",,,2,,,,,,20,,1000,"sc/effects.sc","smoke_cloud_1","true",,70,1,400,,
|
||||
"RocketTower_emitter1",12,190,190,1,2,50,500,170,200,"true",,,4,100,300,,10,100,200,,,"sc/effects.sc","fireplace_particle",,,150,30,200,25,
|
||||
"RocketTower_emitter2",6,,,,,250,300,170,200,"true",,,4,10,200,,1,10,200,,,"sc/effects.sc","Deco_small_glow2",,,130,30,200,25,
|
||||
"RocketTower_smoke1",9,200,200,1,30,600,2500,170,200,"true","true",,,40,80,,10,20,-20,,,"sc/effects.sc","smoke_cloud_1","true","true",100,1,400,25,
|
||||
"Projectile_emitter_glow1",12,1000,1000,2,50,100,300,,360,,"true",,2,,,,,,,,,"sc/effects.sc","Deco_small_glow2","true","true",1,60,,,
|
||||
"RocketTower_destroyed_base",1,,,,,900000,900000,,360,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,200,,
|
||||
"cannon_glow_top",1,,,,,1200,1400,,,,,,,,,,40,40,30,,,"sc/effects.sc","Deco_small_glow2",,,,,100,,
|
||||
"cannon_smoke1",10,,,,,500,1500,,360,"true",,,,5,25,,80,120,-60,,250,"sc/effects.sc","smoke_cloud_1","true","true",75,40,1800,,
|
||||
"cannon_firePareticles",9,150,150,1,50,300,400,-40,40,"true",,,,100,200,,10,200,-200,,,"sc/effects.sc","fireplace_particle","true",,180,10,200,,
|
||||
"cannon_glow",1,,,,,400,600,,,"true",,,,,,,,,,,,"sc/effects.sc","Deco_small_glow","true",,,,,,
|
||||
"cannon_smoke_shadow",5,,,,,1100,2500,,360,"true",,,,-5,-15,,-50,-90,-20,,1000,"sc/effects.sc","smoke_cloud_1","true","true",80,30,2000,,
|
||||
"cannon_hit_rock_emiter",4,200,400,,5,400,800,,360,,"true",,,30,75,35,50,120,-1000,,,"sc/effects.sc","Rock1Particle",,,80,10,,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3Particle",,,,,,,
|
||||
"cannon_hit_smokePuff",7,2,2,,,300,700,10,50,,"true",,,30,40,,200,250,-1000,,,"sc/effects.sc","SteamSmall","true","true",100,125,250,10,
|
||||
"cannon_hit_ballBounce",1,300,300,10,40,1000,1000,,,"true",,1,1,80,80,,150,150,-2000,,,"sc/level.sc","projectile_cannonball_large","true",,100,75,200,10,
|
||||
"cannonball_bounce_shadow",1,300,300,10,40,1000,1000,,,,,1,1,80,80,,150,150,-2000,,,"sc/level.sc","cannonball_large_shadow",,,80,55,200,10,
|
||||
"Wizard_roundBase_player",1,180,180,1,3,5000000,6000000,,360,"true",,,,,,,,,-1000,,,"sc/effects.sc","wizard_roundBase_player",,"true",,,200,20,"Wizard_roundBase_enemy"
|
||||
"Wizard_roundBase_enemy",1,180,180,1,3,5000000,6000000,,360,"true",,,,,,,,,-1000,,,"sc/effects.sc","wizard_roundBase_enemy",,,,,200,20,
|
||||
"Tower_fire_particles1",3,50,50,1,10,300,700,,360,"true","true",,1,,,,,,100,,,"sc/effects.sc","SparkleBlue","true",,70,20,300,25,"Tower_fire_particles1_enemy"
|
||||
"Tower_fire_glow1",2,150,250,20,50,200,200,,,,,,3,,,,10,300,,,,"sc/effects.sc","SparkleBlue",,,160,20,200,,"Tower_fire_glow1_enemy"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"Tower_fire_particles2",3,50,50,1,10,500,800,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,2000,,
|
||||
"Tower_fire_glow1_enemy",2,150,250,20,50,200,200,,,,,,3,,,,10,300,,,,"sc/effects.sc","SparkleBlue",,,160,20,200,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
"Tower_fire_particles1_enemy",3,50,50,1,10,300,700,,360,"true","true",,1,,,,,,100,,,"sc/effects.sc","SparkleBlue","true",,70,20,300,25,
|
||||
"Tower_fire_particles2_enemy",3,50,50,1,10,500,800,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,2000,,"Tower_fire_particles2_enemy"
|
||||
"Tower_continuous_particles1",2,3500,3500,3400,3500,600,1200,,360,"true","true",,1,,,35,,,100,,,"sc/effects.sc","SparkleBlue","true",,70,40,1000,25,"Tower_continuous_particles1_enemy"
|
||||
"Tower_continuous_particles1_enemy",2,3500,3500,3400,3500,600,1200,,360,"true","true",,1,,,35,,,100,,,"sc/effects.sc","SparkleBlue","true",,70,40,1000,25,"Tower_fire_particles1_enemy"
|
||||
"Tower_projectile_emitter1",1,,,,,300,400,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,600,,
|
||||
"Tower_projectile_trail1",1,1,1,1,50,200,500,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle3","true",,,,,,
|
||||
"Fear_face_emitter",6,1500,1500,1,100,1200,2500,,360,,"true",6,12,,,14,20,30,,,,"sc/effects.sc","Fear_face",,,40,60,,20,
|
||||
"Fear_face_emitter_shadow",7,1000,1000,1,5,2000,7300,,360,,,,12,,,14,,,,,,"sc/effects.sc","Fear_face_shadow",,,70,40,19000,,
|
||||
"Warhound_tear",7,300,300,,50,300,300,,360,,"true",,,80,100,20,100,150,-1000,,,"sc/effects.sc","GlassShard6",,,50,75,,,
|
||||
"piper_attack_emmiter",1,1500,1500,250,500,800,1000,45,60,,,,,10,25,50,10,25,10,,,"sc/effects.sc","piper_note",,,40,70,,,
|
||||
"piper_hit_emmiter",2,1000,1500,500,500,800,1200,10,15,,,,,,2,20,20,20,-50,,,"sc/effects.sc","piper_note_charm",,"true",60,25,,,
|
||||
"FireballEmitterTrail",50,800,800,5,10,600,800,-360,360,,"true",-2,2,1,10,,50,200,35,,,"sc/effects.sc","fireball_trail1",,,55,80,500,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
"fireball_trial_spark",16,800,800,5,10,600,800,,360,,"true",-4,4,15,30,,100,200,35,,,"sc/effects.sc","Sparkle",,,55,80,500,1,
|
||||
"fireball_trail_glow",50,800,800,5,10,600,800,-360,360,,"true",-2,2,1,10,,50,200,35,,,"sc/effects.sc","fireball_trail3",,,55,80,500,1,
|
||||
"Wizard_die_player_emitter1",1,1,1,,1,1000000,10000000,,,,,,,,,,,,,,,"sc/chr_royal_king.sc","King_royal_blue_die1_1",,,,,,,"Wizard_die_enemy_emitter1"
|
||||
"Wizard_die_book_emitter1",1,1,1,,1,100000,1000000,,360,,"true",,,60,70,,,,,,,"sc/chr_neutral_wizard.sc","Wizard_book_particle1",,,95,95,,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/chr_neutral_wizard.sc","Wizard_book_particle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/chr_neutral_wizard.sc","Wizard_book_particle3",,,,,,,
|
||||
"Wizard_die_enemy_emitter1",1,1,1,,1,1000000,10000000,,,,,,,,,,,,,,,"sc/chr_royal_king.sc","King_royal_red_die1_1",,,,,,,
|
||||
"rocketTowerHitsmoke",44,100,100,1,1,1000,1500,,360,,"true",-3,3,10,35,66,20,45,50,,,"sc/effects.sc","smoke_cloud_1","true","true",30,95,5000,20,
|
||||
"RocketTower_fireworks",14,190,190,1,3,500,1200,,360,,"true",1,1,80,100,,100,200,-300,,20,"sc/effects.sc","SparkleBlue","true",,80,1,,100,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal9",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
"Wizard_die_player_hat",1,1,1,,1,100000,1000000,,360,,"true",,,60,70,,,,,,,"sc/chr_neutral_wizard.sc","Wizard_player_hat1",,,95,95,,50,"Wizard_die_enemy_hat"
|
||||
"Wizard_die_enemy_hat",1,1,1,,1,100000,1000000,,360,,"true",,,60,70,,,,,,,"sc/chr_neutral_wizard.sc","Wizard_enemy_hat1",,,95,95,,50,
|
||||
"rocketTower_sparks",18,200,200,1,1,200,250,,360,,,,-1,200,300,9,50,100,-200,,,"sc/effects.sc","hitFx","true",,30,50,,500,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","rocketTower_spark2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","rocketTower_spark1",,,,,,,
|
||||
"fire_sparks2",46,600,650,25,25,500,1200,,360,,"true",-3,3,,,,200,300,-200,,,"sc/effects.sc","rocketTower_spark1",,,30,1,,,
|
||||
"rocketTower_fireworks2",4,100,100,25,50,450,500,2,280,,"true",-5,5,5,15,45,3,4,,,,"sc/effects.sc","rocket_tower_hit",,,100,150,350,,
|
||||
"catapult_hit_smoke",12,1,1,,,1000,1200,,360,,,,,100,120,3,10,10,25,,,"sc/effects.sc","catapult_hit_cloud_1",,,,,800,350,
|
||||
"catapult_smokePuff",10,100,100,,,600,1000,45,90,,"true",-2,2,10,80,42,50,120,50,,,"sc/effects.sc","catapult_hit_cloud_1",,,50,80,600,80,
|
||||
"catapultAttack_smoke",3,,,,,600,1000,,360,,"true",-1,1,15,35,42,60,80,-100,,,"sc/effects.sc","catapult_hit_cloud_1",,,40,60,600,100,
|
||||
"catapult_grass_emitter",5,400,400,,5,800,1200,,360,,"true",,,60,150,20,100,250,-2000,,,"sc/effects.sc","grass_particle_1",,,100,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","grass_particle_2",,,,,,,
|
||||
"catapult_rock_Emitter",13,400,400,,5,800,1200,,360,,"true",,,50,150,20,100,250,-2000,,,"sc/effects.sc","Rock1Particle",,,100,150,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3Particle",,,,,,,
|
||||
"catapult_hit_shadow",8,1,1,,,1000,1200,,360,,,,,20,20,,,,-350,,,"sc/effects.sc","catapult_hit_cloud_1",,,,,1000,10,
|
||||
"catapult_grass_shadow",4,400,400,,5,800,1200,,360,,"true",,,30,150,,100,250,-5000,,,"sc/effects.sc","grass_particle_1",,,100,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","grass_particle_2",,,,,,,
|
||||
"catapultHitSmoke_shadow",1,1,1,,,1000,1000,-265,-275,"true","true",,,40,40,2,,,,,,"sc/effects.sc","catapult_hit_cloud_1","true",,,,1000,,
|
||||
"towerExplode_Smoke",10,1,1,,,800,1000,,360,,,,,70,75,8,,,50,,,"sc/effects.sc","tower_destr_cloud_1",,,,,500,125,
|
||||
"TowerExplode_sparks",20,200,200,,10,250,350,,360,,"true",,,200,250,,,,,,,"sc/effects.sc","Sparkle",,,,,,,
|
||||
"TowerExplode_smokePuff",11,,,,,800,1000,,360,,"true",,,,20,40,80,100,25,,,"sc/effects.sc","tower_destr_cloud_1",,,,,900,,
|
||||
"TowerExplode_explosion",37,100,100,1,1,2500,300,,360,,"true",,,250,300,,,,,,,"sc/effects.sc","tower_destr_cloud_2",,,75,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","tower_destr_cloud_2",,,,,,,
|
||||
"TowerExplode_rockEmitter",23,350,350,,10,600,2000,,360,"true","true",2,4,,60,,300,1000,-3500,,,"sc/effects.sc","Rock1Particle","true",,50,80,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_wall1",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_wall2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_wall3",,,,,,,
|
||||
"TowerExplode_grassEmitter",1,,,,5,8000,4000,,,,"true",,,,,,,,-2000,,,"sc/effects.sc","star_appear",,"true",50,50,,,
|
||||
"towerExplode_Smoke_shadow",10,1,1,,,800,1000,,360,,,,,70,75,,,,-50,,,"sc/effects.sc","tower_destr_cloud_1",,,,,750,125,
|
||||
"TowerExplode_glass",10,1,1,,,800,1000,,360,,"true",,2,,50,90,100,500,-500,,,"sc/effects.sc","towerExplode_blue1","true",,120,70,300,50,"TowerExplode_glass_enemy"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_blue2",,,,,,,
|
||||
"TowerExplode_glass2",10,1,1,,,800,1000,,360,,"true",,2,60,150,90,10,50,,,,"sc/effects.sc","GlassShard2","true",,100,70,300,60,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","GlassShard6",,,,,,,
|
||||
"TowerExplodeBlueShard",1,,,,,800,800,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_blueShards",,,100,100,500,,"TowerExplodeEnemyShard"
|
||||
"TowerExplodeEnemyShard",1,,,,,800,800,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_enemyShards",,,100,100,500,,
|
||||
"TowerExplode_glass_enemy",10,1,1,,,800,1000,,360,,"true",,2,,50,90,100,500,-500,,,"sc/effects.sc","towerExplode_enemy1","true",,120,70,300,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_enemy2",,,,,,,
|
||||
"tower_destroyed",1,,,,,80000,80000,,,,,,,,,,,,,,,"sc/building_general_tower.sc","Common_Tower_destroyed",,,100,100,500,,
|
||||
"GoblinHut_smoke",3,1000,1000,200,200,5800,5800,,500,,,,1,,10,62,30,40,,,,"sc/effects.sc","Smoke_goblinHut",,,35,85,11000,100,
|
||||
"Goblin_hut_woodExplosion",54,150,150,5,10,1000,1600,,360,"true","true",,2,50,80,30,300,700,-1500,,,"sc/effects.sc","crate_particle_1","true",,100,80,200,25,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","crate_particle_2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","crate_particle_3",,,,,,,
|
||||
"knight_deploy_dustPuff1",12,1,1,,,800,1300,,360,,"true",-1,,40,70,,20,,,,,"sc/effects.sc","d1","true",,150,160,1650,100,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d4",,,,,,,
|
||||
"knight_deploy_rocks_hitGround",13,400,400,,5,1300,2000,,360,,"true",3,3,30,50,20,150,500,-2000,,,"sc/effects.sc","Rock1Particle",,,80,50,600,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3Particle",,,,,,,
|
||||
"deploy_unit_blue",1,,,,,600,600,,360,,,,,,,,100,,-500,,,"sc/effects.sc","wizard_roundBase_player",,,100,50,250,,
|
||||
"knight_depoy_dustShadow",3,1,1,,,900,1300,,360,,"true",-1,,-40,-70,,-20,,,,,"sc/effects.sc","d3","true",,230,260,1000,100,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d4",,,,,,,
|
||||
"knight_deploy_dustPuff2",55,1,1,,,500,600,,360,,"true",3,4,40,50,21,20,,25,,,"sc/effects.sc","d3",,,80,80,500,100,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3_green_dark",,,,,,,
|
||||
"knight_die_particle_shoulders",2,1,1,,1,9000,10000,,360,,"true",1,,30,50,,,,,,,"sc/effects.sc","particle_shoulder1",,,110,100,300,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_shoulder2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_shoulder3",,,,,,,
|
||||
"knight_die_particle_sword",1,1,1,,1,24000,25000,,360,,"true",,,,50,,,,,,,"sc/effects.sc","particle_sword",,,105,100,400,60,
|
||||
"knight_speps_dust1",3,1,1,,,600,1100,,360,,"true",-1,,,,,20,,,,,"sc/effects.sc","d2","true",,60,80,800,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d4",,,,,,,
|
||||
"Death_elixir_burst1",21,80,80,1,3,300,1000,,360,,,,,20,70,39,,600,-1700,,100,"sc/effects.sc","death_particle_elixir1",,,100,40,200,55,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","death_particle_elixir2",,,,,,,
|
||||
"Death_elixir_ground1",3,80,80,1,3,3000,4000,,360,"true",,,3,10,20,,,,-1700,,,"sc/effects.sc","death_ground_elixir1",,,100,40,2000,100,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","death_ground_elixir2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","death_ground_elixir3",,,,,,,
|
||||
"Tower_destroyed_ground",1,,,,,800000,800000,,,,,,,,,,,,,,,"sc/building_tower.sc","Tower_destroyed_ground1",,,,,,,
|
||||
"Big_rock_particle1",1,180,180,1,3,1900,1900,,360,,"true",,,70,70,,,,15,,,"sc/effects.sc","big_rock_particle1",,,80,80,500,55,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","big_rock_particle2",,,,,,,
|
||||
"giant_deploy_dustPuff",60,1,1,,,700,750,,360,,"true",4,4,60,80,,20,,25,,,"sc/effects.sc","d3",,,90,120,600,125,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3_green_dark",,,,,,,
|
||||
"giant_deploy_rocks_hitGround",13,400,400,,5,1300,2000,,360,,"true",3,6,60,80,20,150,500,-2000,,,"sc/effects.sc","Rock1Particle",,,80,50,600,40,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3Particle",,,,,,,
|
||||
"giant_deploy_dustPuff_shadow",60,1,1,,,700,750,,360,,"true",4,4,60,80,,20,,25,,,"sc/effects.sc","d3",,,90,120,700,125,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3_green_dark",,,,,,,
|
||||
"Clouds_move1",2,,,50000,50000,65000,75000,,,,,,,,8,,,,,,,"sc/effects.sc","cloud_move1",,,130,130,3000,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","cloud_move2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","cloud_move3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","cloud_move4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","cloud_move5",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","cloud_move6",,,,,,,
|
||||
"giant_steps_dust1",6,1,1,,,600,1100,,360,,"true",1,2,,,,20,,-10,,,"sc/effects.sc","d2","true",,70,90,800,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","d4",,,,,,,
|
||||
"giant_death_elixir_burst1",23,80,80,1,3,300,1000,,360,,,,,20,70,39,,600,-1700,,100,"sc/effects.sc","death_particle_elixir1",,,120,60,200,55,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","death_particle_elixir2",,,,,,,
|
||||
"giant_death_puff1",15,190,190,1,3,1200,2800,-30,30,,"true",2,4,,50,10,20,90,35,,,"sc/effects.sc","explosion_purple_glow1","true",,40,30,2000,40,
|
||||
"giant_death_puff1_shadow",6,190,190,1,3,1200,2800,-30,30,,"true",,2,,50,,-20,-90,-35,,,"sc/effects.sc","Death_blue_smoke","true",,25,40,2500,40,
|
||||
"giant_death_elixir_ground1",4,80,80,1,3,3000,4000,,360,"true",,,3,10,20,,,,-1700,,,"sc/effects.sc","death_ground_elixir1",,,180,40,2000,100,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","death_ground_elixir2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","death_ground_elixir3",,,,,,,
|
||||
"giant_hit_sparks",10,100,100,,10,100,100,1,360,"true","true",,2,300,350,50,60,100,,500,500,"sc/effects.sc","Sparkle","true",,110,150,,,
|
||||
"giant_hit_puff1",7,,,,,350,400,,360,"true",,-2,2,25,20,50,200,250,,,600,"sc/effects.sc","d5","true",,40,100,600,50,
|
||||
"giant_hitpuff2",24,,,,,400,400,-100,360,"true","true",,,100,100,49,,,,,,"sc/effects.sc","d3",,,100,50,500,100,
|
||||
"Spell_rage_smoke1",16,190,190,1,3,2200,5800,,360,,"true",5,10,,50,21,,,,,,"sc/effects.sc","explosion_purple_glow1","true",,50,100,9000,40,
|
||||
"Spell_rage_smoke2",16,,50,,,1200,2800,,360,,"true",2,20,,50,10,,50,1,,,"sc/effects.sc","rage_glowPurple",,,200,50,1000,50,
|
||||
"Spell_rage_glowFast",1,,200,,5,200,200,,360,"true",,,,,,22,,,,,,"sc/effects.sc","rage_effect_glow1",,,50,130,50,,
|
||||
"Spell_rage_sparckle1",32,180,180,1,3,300,800,,360,"true",,,18,40,100,44,80,230,-600,,,"sc/effects.sc","Death_purple_sparkle1",,"true",90,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Spell_rage_sparkle1_loop",7,180,180,1,3,300,1800,,360,"true",,,18,40,100,44,80,230,-600,,,"sc/effects.sc","Death_purple_sparkle1",,"true",90,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Spell_rage_sparckle2_loop",9,,200,1,20,300,1800,,360,"true",,17,19,,50,,,150,-600,,,"sc/effects.sc","Death_purple_sparkle1",,"true",90,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"inferno_hit_sparks",10,150,,,50,150,250,,360,,,2,2,100,200,40,,,,,,"sc/effects.sc","sharp_spark","true","true",5,20,100,,
|
||||
"inferno_stage2_sparks",28,3000,,100,500,600,800,220,310,,"true",,,50,70,,,,500,,,"sc/effects.sc","inferno_spark",,,80,130,,20,
|
||||
"inferno_stage3_sparks",27,3000,,50,200,600,900,220,310,,"true",1,2,80,110,,,,700,,,"sc/effects.sc","inferno_spark",,,90,130,,30,
|
||||
"inferno_stage2_peak_flame",27,3000,,50,200,800,1200,220,310,,"true",1,2,10,15,,,,100,,,"sc/effects.sc","inferno_spark_red",,,300,450,,70,
|
||||
"inferno_stage3_peak_flame",32,3000,,50,200,950,1350,220,310,,"true",1,2,10,15,,,,130,,,"sc/effects.sc","inferno_spark",,,400,550,,70,
|
||||
"touch_sparkle1",2,200,200,1,3,800,1500,-180,180,,,,2,5,10,,,,,50,100,"sc/effects.sc","Death_blue_sparkle1",,"true",60,10,1500,1,"Death_sparkle3_purple"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle4",,,,,,,
|
||||
"touch_sparkle2",2,200,200,1,3,800,1500,-180,180,,,,2,5,10,,,,,50,100,"sc/effects.sc","Death_purple_sparkle1",,"true",60,10,1500,1,"Death_sparkle3_purple"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Small_rock_particle1",8,180,180,1,3,1900,1900,,360,,"true",1,2,25,35,,,,10,,,"sc/effects.sc","big_rock_particle1",,,40,40,500,10,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","big_rock_particle2",,,,,,,
|
||||
"BombTower_hit_flame",50,350,350,5,10,600,800,-360,360,,"true",-2,2,1,10,,50,200,35,,,"sc/effects.sc","fireball_trail1",,,70,50,500,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
"Rocket_Emitter_Smoketrail",55,800,800,5,10,1800,2000,-360,360,,"true",-2,2,,,,,,35,,,"sc/effects.sc","fireball_trail1",,,120,40,500,20,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
"Rocket_Emitter_Sparks",13,800,800,,10,600,800,,360,,"true",-4,4,15,300,,,50,35,,,"sc/effects.sc","Sparkle",,,55,80,500,20,
|
||||
"Rocket_Emitter_Glow",50,800,800,5,10,800,800,-360,360,,"true",-3,3,,,,,,35,,,"sc/effects.sc","fireball_trail3",,,150,20,,1,
|
||||
"dragon_hit_sparks",15,190,190,1,3,800,900,-65,65,"true",,1,3,40,60,41,300,500,-2000,,20,"sc/effects.sc","SparkleBlue","true",,60,1,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
"dragon_AttackStart_smoke",9,600,500,5,10,600,800,-360,360,"true","true",-2,2,1,10,40,50,200,35,,,"sc/effects.sc","fireball_trail1","true",,25,50,300,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
"DragonEmitterTrail",31,1200,2000,5,10,700,900,-360,360,,"true",,,1,5,,25,150,35,,,"sc/effects.sc","fireball_trail1",,,35,60,600,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
"dragon_trail_glow",27,800,800,5,10,600,800,-360,360,,"true",,,1,10,,50,200,35,,,"sc/effects.sc","fireball_trail3",,,55,80,500,1,
|
||||
"dragon_fire_hit",11,1,1,,,100,150,-90,90,,"true",-1,3,2,2,,,,25,,,"sc/level.sc","dragon_fire_hit","true",,120,150,200,125,
|
||||
"dragon_hit_smoke",10,1,1,,,600,650,-45,45,,"true",3,3,50,110,,150,200,25,,,"sc/effects.sc","fireball_trail2","true",,20,120,500,250,
|
||||
"Spell_freeze_snowflake1_loop",3,180,180,2,2,1000,1000,,360,"true","true",8,9,15,10,66,,,-40,,,"sc/effects.sc","snowflake_anim",,,50,55,,,
|
||||
"Spell_freeze_snowflake2_loop",2,150,150,3,3,1000,1100,,360,,,5,10,14,16,71,2,2,-180,,,"sc/effects.sc","snowflake_anim",,,50,40,100,,
|
||||
"openChest_epic_stars2",22,300,300,2,9,300,800,-180,,"true",,,10,,400,44,300,900,-1000,,,"sc/effects.sc","Death_purple_sparkle1",,"true",150,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"Card_upgraded_effect1",70,1,1,,1,900,1800,,360,"true",,,20,,100,,,,200,,,"sc/effects.sc","Green_sparkle1",,"true",150,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Green_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Green_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Green_sparkle4",,,,,,,
|
||||
"Card_upgrade_effect2",22,3000,3000,10,100,900,1800,,360,"true",,-20,20,,100,,,,200,,,"sc/effects.sc","Green_sparkle1",,"true",150,10,300,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Green_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Green_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Green_sparkle4",,,,,,,
|
||||
"Card_upgrade_effect3",15,1,1,,,2000,3800,,360,"true",,-20,20,,,,50,100,,,,"sc/effects.sc","Haze1",,"true",150,10,4000,30,
|
||||
"openChest_common_effect_smoke",11,190,190,1,3,2200,5800,,360,,"true",3,8,,50,41,,50,,,,"sc/effects.sc","Smoke_puff_01","true",,40,90,8000,40,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Smoke_puff_02",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Smoke_puff_03",,,,,,,
|
||||
"openChest_epic_loop1",8,300,300,10,50,300,1500,-180,,"true",,-40,50,,50,,,,,,,"sc/effects.sc","Death_purple_sparkle1",,"true",150,10,500,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle4",,,,,,,
|
||||
"tesla_hit_spark",5,200,300,20,20,500,600,,360,,"true",1,1,50,100,40,60,100,-500,,,"sc/effects.sc","Death_blue_sparkle2","true","true",20,10,300,50,
|
||||
"tesla_smoke_hit",4,50,100,1,5,500,700,-90,90,,"true",,,30,50,,80,120,,,,"sc/effects.sc","d2","true",,60,80,1200,100,
|
||||
"tesla_spot_hit",1,,100,,,500,700,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,150,80,,,
|
||||
"tesla_electric_hit",2,450,450,50,75,400,400,-360,360,,"true",1,2,25,30,23,,,,,,"sc/effects.sc","electricity","true",,60,50,,200,
|
||||
"summoner_attack_start",10,,,,,500,1500,,360,"true",,,,5,25,60,80,120,-60,,250,"sc/effects.sc","smoke_cloud_1","true","true",75,40,1800,,
|
||||
"chr_wiz_hit_sparks",9,190,190,1,3,800,900,,360,,"true",1,1,60,65,20,200,300,-2000,,20,"sc/effects.sc","SparkleBlue","true",,50,1,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal4",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal3",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","particle_coal2",,,,,,,
|
||||
"chr_wiz_hit_fire",8,300,300,1,1,700,700,,360,,,2,3,,5,,150,200,1250,1000,1000,"sc/effects.sc","FireParticle1",,,60,40,800,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3",,,,,,,
|
||||
"chr_wiz_hit_smoke",34,100,100,1,1,800,1200,,360,,"true",1,2,10,25,,20,50,150,,,"sc/effects.sc","explosion_cloud_1","true","true",60,80,1500,,
|
||||
"KingTower_destroyed_ground",1,,,,,800000,800000,,,,,,,,,,,,,,,"sc/building_tower.sc","Tower_destroyed_ground2",,,,,,,
|
||||
"Spell_ligntning_smoke1",16,190,190,1,3,1000,1500,,360,,"true",2,3,30,40,42,25,25,,,,"sc/effects.sc","Smoke_puff_01","true",,35,55,800,10,
|
||||
"Spell_lightning_Flash",1,,100,,5,100,150,,360,,,,,,,,,,,,,"sc/effects.sc","ExplosionGroundGlowBlue",,,80,80,50,,
|
||||
"Spell_lightning_bolt",1,1,1,,,300,300,,,,,1,1,,,11,,,,,,"sc/effects.sc","lightning_bolt",,,100,100,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","lightning_bolt2",,,,,,,
|
||||
"Spell_lightning_hitSpot",1,,100,,,1500,1500,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,200,200,500,,
|
||||
"Spell_lightning_hitSpot2",1,,100,,,1500,1500,,,,,,,,,,,,,,,"sc/effects.sc","Deco_small_glow2",,,100,100,500,,
|
||||
"Spell_lightning_sparks",10,300,300,10,10,400,600,,360,,"true",1,1,80,150,35,150,150,,,,"sc/effects.sc","Sparkle","true",,80,80,250,20,
|
||||
"Spell_zap_smoke1",8,190,190,1,3,1000,1200,,360,,"true",1,2,10,25,42,10,20,,,,"sc/effects.sc","Smoke_puff_01","true",,25,35,1000,10,
|
||||
"Spell_zap_hitSpot",1,,100,,,1500,2000,,,,,,,,,,,,,,,"sc/effects.sc","SparkleBlue",,,200,200,500,,
|
||||
"Spell_zap_hitSpot2",1,,100,,,1000,1000,,,,,,,,,,,,,,,"sc/effects.sc","Deco_small_glow2",,,80,40,500,,
|
||||
"Spell_zap_sparks",6,300,300,10,10,400,600,,360,,"true",1,1,50,150,35,50,100,-1000,,,"sc/effects.sc","Death_blue_sparkle1","true",,20,30,400,20,
|
||||
"Spell_zap_Flash",1,,100,,5,100,150,,360,,,,,,,,,,,,,"sc/effects.sc","ExplosionGroundGlowBlue",,,40,40,50,,
|
||||
"Spell_zap_bolt",1,1,1,,,200,250,,,,,1,1,,,11,,,,,,"sc/effects.sc","zap_bolt1",,,100,100,250,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","zap_bolt2",,,,,,,
|
||||
"MegaBomb_destroyed_ground",1,,,,,5000,5000,,,,,,,,,,,,,,,"sc/building_mega_bomb.sc","bomb_destruction_state",,,100,100,1000,,
|
||||
"MegaBomb_explode_smoke",10,150,200,1,3,1000,2000,,360,"true",,,2,10,25,33,90,100,,,50,"sc/effects.sc","smoke_cloud_1","true","true",200,50,1200,,
|
||||
"MegaBomb_explode_debris",14,350,350,,10,600,2000,,360,"true","true",2,4,50,60,,300,1000,-3500,,,"sc/effects.sc","Rock1Particle","true",,80,90,,,
|
||||
"MegaBomb_explode_debris2",5,350,350,,10,600,2000,,360,"true","true",2,4,50,60,,300,600,-1000,,,"sc/effects.sc","towerExplode_wall2","true",,80,80,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_wall1",,,,,,,
|
||||
"MegaBomb_explosion_glow",8,100,100,1,1,450,800,,360,,"true",1,5,,,11,,,50,,,"sc/effects.sc","Deco_fireplace_glow","true",,120,100,1000,,
|
||||
"MagaBomb_FireRing",16,120,250,,,200,550,100,360,,"true",-1,2,60,120,,10,150,,60,200,"sc/effects.sc","FireParticle1",,,110,50,50,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireball_trail2",,,,,,,
|
||||
"Spell_lightning_Rock_debris",10,400,400,,5,800,1200,,360,,"true",,,80,100,9,200,300,-1000,,,"sc/effects.sc","Rock1Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock2Particle",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Rock3Particle",,,,,,,
|
||||
"Spell_lightning_Rock_debris2",5,400,400,,5,800,1200,,360,,"true",,,80,100,9,200,300,-2500,,,"sc/effects.sc","towerExplode_wall2","true",,80,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","towerExplode_wall3",,,,,,,
|
||||
"Spell_lightning_electric",3,800,1200,10,50,150,200,-180,,,"true",-6,6,10,30,,,,,,,"sc/effects.sc","electricity","true","true",60,70,300,30,
|
||||
"chest_landing_puff",11,190,190,1,3,2200,2500,,360,,"true",1,5,,30,,50,150,,,,"sc/effects.sc","Smoke_puff_01","true",,40,90,6000,30,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Smoke_puff_02",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Smoke_puff_03",,,,,,,
|
||||
"chest_landing_goldDust",8,800,800,5,10,600,800,,360,,"true",-8,8,15,30,,100,200,35,,,"sc/effects.sc","golden_dust",,,35,10,500,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","golden_dust2",,,,,,,
|
||||
"chest_landing_magicDust",16,800,800,5,10,600,800,,360,,"true",-8,8,15,30,,100,200,35,,,"sc/effects.sc","inferno_hit",,,50,10,500,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
"chest_landing_goldDust2",8,800,800,5,10,600,800,,360,,"true",-8,8,15,30,,100,200,35,,,"sc/effects.sc","golden_dust",,,15,10,500,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","golden_dust2",,,,,,,
|
||||
"chest_landing_metalHit",16,250,250,1,10,1000,1200,,360,"true","true",,2,50,80,,100,150,-1000,,,"sc/effects.sc","d4","true",,80,100,2000,10,
|
||||
"chest_landing_goldFlash",2,,,,,400,500,,,"true",,,,,,,,,,,,"sc/effects.sc","Deco_small_glow","true",,100,200,,,
|
||||
"chest_landing_magicFlash",1,,,,,400,500,,360,"true",,,,,,,,,,,,"sc/effects.sc","rage_effect_glow1",,,50,80,300,,
|
||||
"chest_landing_magicBurst",15,1,1,,1,900,1800,,360,"true",,,10,,100,,,,200,,,"sc/effects.sc","inferno_hit",,"true",100,10,300,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_purple_sparkle2",,,,,,,
|
||||
"chest_landing_goldBurst",15,1,1,,1,900,1800,,360,"true",,,10,,100,,,,200,,,"sc/effects.sc","golden_dust2",,"true",50,10,300,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","golden_dust",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Deco_small_glow2",,,,,,,
|
||||
"openChest_get_rare",25,200,200,,10,400,550,,360,,"true",1,5,200,250,40,150,250,-50,,,"sc/effects.sc","Sparkle",,,200,300,,,
|
||||
"balloon_die_puff",11,,,,,800,1000,,360,,"true",2,3,15,20,97,100,120,25,,,"sc/effects.sc","tower_destr_cloud_1",,,,,900,,
|
||||
"ballon_die_smoke",17,100,100,1,1,1000,1500,,360,,"true",,3,10,35,157,50,60,50,,,"sc/effects.sc","smoke_cloud_1","true","true",60,125,3000,25,
|
||||
"FlameEmitterSlow",8,,,170,200,1600,1800,,,,,,,,,50,50,60,,,,"sc/effects.sc","FireParticle1",,,100,60,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2",,,100,60,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3",,,100,60,,,
|
||||
"xp_levelup_flash",8,,,,,500,800,,360,"true",,,,100,,,,,,,,"sc/effects.sc","Death_blue_smoke",,,50,300,600,,
|
||||
"xp_levelup_burst",23,1,1,,1,900,1800,,360,"true",,,10,100,250,,,,100,,,"sc/effects.sc","Death_blue_sparkle2",,"true",100,10,300,50,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle4",,,,,,,
|
||||
"xp_levelup_sparks",16,800,800,5,10,600,800,,360,,"true",-8,8,50,80,,100,200,35,,,"sc/effects.sc","Death_blue_sparkle2",,,50,10,500,1,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","Death_blue_sparkle3",,,,,,,
|
||||
"Inferno_loop1",8,410,800,1,10,300,700,,360,"true","true",2,2,,5,,,100,60,,,"sc/effects.sc","FireParticle1_small",,"true",150,50,300,25,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle2_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireplace_particle",,,,,,,
|
||||
"Inferno_loop2",2,450,750,20,50,200,200,,360,,"true",3,3,1,5,,,,200,,,"sc/effects.sc","FireParticle2_small",,"true",160,50,200,,"Tower_fire_glow1_enemy"
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","FireParticle3_small",,,,,,,
|
||||
,,,,,,,,,,,,,,,,,,,,,,"sc/effects.sc","fireplace_particle",,,,,,,
|
||||
|
614
assets/csv_client/sounds.csv
Normal file
614
assets/csv_client/sounds.csv
Normal file
|
|
@ -0,0 +1,614 @@
|
|||
"Name","FileNames","MinVolume","MaxVolume","MinPitch","MaxPitch","Priority","MaximumByType","MaxRepeatMs","Loop","PlayVariationsInSequence","PlayVariationsInSequenceManualReset","StartDelayMinMs","StartDelayMaxMs","PlayOnlyWhenInView","MaxVolumeScaleLimit","NoSoundScaleLimit","PadEmpyToEndMs"
|
||||
"string","string","int","int","int","int","int","int","int","boolean","boolean","boolean","int","int","boolean","int","int","int"
|
||||
"60sec_warn_01","sfx/60_sec_warn_02_v2.wav",80,80,100,100,1,1,,,,,,,,,,
|
||||
"30sec_warn_01","sfx/60_sec_warn_02_v2.wav",90,90,119,119,1,1,,,,,,,,,,
|
||||
"ScrollAmb01","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"ScrollAmb02","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Menu swipe","sfx/menu_swipe_09.wav",30,30,98,102,1,2,,,,,,,,,,
|
||||
"Menu bump","sfx/bump_01.wav",20,25,97,103,1,2,,,,,,,,,,
|
||||
"Menu updown swipe","sfx/up_down_swipe_01.wav",25,28,97,103,1,1,,,,,,,,,,
|
||||
"Menu press select card","sfx/press_select_button_02.wav",50,50,100,100,1,1,,,,,,,,,,
|
||||
"Menu press upgrade card","sfx/press_select_button_01.wav",50,50,100,100,1,1,,,,,,,,,,
|
||||
"Countdown_10","sfx/10_cd_02.wav",84,84,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_9","sfx/9_cd_02.wav",86,86,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_8","sfx/8_cd_02.wav",88,88,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_7","sfx/7_cd_02.wav",90,90,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_6","sfx/6_cd_02.wav",92,92,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_5","sfx/5_cd_02.wav",94,94,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_4","sfx/4_cd_02.wav",96,96,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_3","sfx/3_cd_02.wav",100,100,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_2","sfx/2_cd_02.wav",100,100,100,100,1,3,,,,,,,,,,
|
||||
"Countdown_1","sfx/1_cd_02.wav",100,100,100,100,1,3,,,,,,,,,,
|
||||
"ButtonClick","sfx/button_click_02.wav",60,60,100,100,1,3,,,,,,,,,,
|
||||
"ButtonClick2","sfx/menu_click_05.wav",50,50,100,100,1,3,,,,,,,,,,
|
||||
"AttackButton","sfx/attack_button_01.wav",60,60,100,100,1,3,,,,,,,,,,
|
||||
"SpellCasting","sfx/spellcast01.wav",30,35,96,104,1,2,,,,,,,,,,
|
||||
"Wiz voc","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Protection","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"MindControl","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Invisibility","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"CharacterDeploy","sfx/dummy_01.wav",1,1,98,102,3,1,,,,,,,,,,
|
||||
"Elf wizard","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Elf warrior","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Fire elemental","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Fireball explodes","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Flaming wall","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Healing","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Orc","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Arrow fire","sfx/archer_queen_attack_02.wav",45,50,98,102,1,3,,,,,,,,,,
|
||||
"Fire arrow","sfx/fire_arrows_03.wav",45,50,97,103,1,3,,,,,,,,,,
|
||||
"Fire ball","sfx/fire_ball_02.wav",50,60,98,102,1,3,,,,,,,,,,
|
||||
"Fire ball explo","sfx/fire_ball_explo_02.wav",50,60,97,103,1,2,,,,,,,,,,
|
||||
"Arrow hit ground","sfx/arrow_norm_impact_02.wav",10,15,92,108,1,3,,,,,,,,,,
|
||||
"Arrow volley hit","sfx/arrow_norm_impact_06.wav",55,60,95,105,2,1,,,,,,,,,,
|
||||
"Fire arrow volley hit","sfx/fire_arrows_impact_01.wav",45,55,95,105,1,2,,,,,,,,,,
|
||||
"Blood boil","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Tower explode","sfx/building_destroyed_05.wav",40,40,100,100,1,3,,,,,,,,,,
|
||||
"Footman deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Footman steps","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Footman attack start","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Footman hit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Footman target","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Footman die","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Knight deploy","sfx/barb_deploy_11v2.wav",50,50,100,100,1,3,,,,,,,,,,
|
||||
,"sfx/barb_deploy_11v3.wav",50,50,100,100,1,3,,,,,,,,,,
|
||||
"Knight steps","sfx/knight_footstep_01.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_02.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_03.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_04.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"Knight attack start","sfx/knight_attack_hack_01.wav",1,1,95,105,1,3,,,,,,,,,,
|
||||
"Knight hit","sfx/knight_attack_hack_01.wav",60,80,98,102,1,3,,,,,,,,,,
|
||||
"Knight Charge","sfx/knight_charge_02.wav",50,50,98,102,1,3,,,,,,,,,,
|
||||
"Knight target","sfx/target_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"Knight die","sfx/knight_death_01.wav",60,60,100,100,1,5,,,,,,,,,,
|
||||
"King deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"King steps","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"King attack start","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"King hit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"King target","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"King die","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Demon deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Demon steps","sfx/dummy_01.wav",1,1,100,100,1,1,,,"true",,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Cat jump","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Cat spawn","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Cat land","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Demon attack start","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Demon hit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Demon target","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Demon die","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Catapult deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Catapult turn","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Catapult attack start","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Catapult fire","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Catapult reload","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Spell available","sfx/card_ready_02.wav",40,40,100,100,1,1,,,,,,,,,,
|
||||
"Spell not ready","sfx/spell_not_ready_01.wav",50,50,100,100,1,1,,,,,,,,,,
|
||||
"Spell ready","sfx/spell_ready_01.wav",40,40,100,100,1,1,,,,,,,,,,
|
||||
"Mana add","sfx/mana_pool_01.wav",20,20,95,105,1,2,,,,,,,,,,
|
||||
"Boulder impact","sfx/boulder_impact_01.wav",80,90,95,105,1,2,,,,,,,,,,
|
||||
"Select spell","sfx/grabcard_01.wav",50,50,98,102,1,2,,,,,,,,,,
|
||||
"Archer deploy","sfx/clash_archer_deploy_01.wav",50,50,98,102,1,1,,,,,,,,,,
|
||||
"Archer steps","sfx/gen_troop_step_01.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_02.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_03.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_04.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
"Archer attack","sfx/archer_attack_07.wav",22,32,97,103,1,2,,,,,,,,,,
|
||||
"Archer target","sfx/target_01.wav",1,1,98,102,1,3,,,,,,,,,,
|
||||
"Arrow hit","sfx/arrow_hit_13.wav",20,25,95,105,1,2,,,,,,,,,,
|
||||
"Archer attack start","sfx/target_01.wav",1,1,97,103,1,3,,,,,,,,,,
|
||||
"Archer die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"Root","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Smoke","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Lightning","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Wizard hurt","sfx/wiz_hurt_01.wav",50,50,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_02.wav",50,50,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_03.wav",50,50,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_04.wav",50,50,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
"Get gold","sfx/get_gold_01v2.wav",30,40,97,103,1,2,,,,,,,,,,
|
||||
"Get diamonds","sfx/get_diamonds_01.wav",30,35,100,100,1,2,,,,,,,,,,
|
||||
"get mana","sfx/get_mana_01.wav",50,50,97,103,1,2,,,,,,,,,,
|
||||
"Builder deploy",,,,,,,,,,,,,,,,,
|
||||
"Builder steps",,,,,,,,,,,,,,,,,
|
||||
"Builder attack start",,,,,,,,,,,,,,,,,
|
||||
"Builder hit",,,,,,,,,,,,,,,,,
|
||||
"Builder target",,,,,,,,,,,,,,,,,
|
||||
"Builder die",,1,1,98,102,1,3,,,,,,,,,,
|
||||
"ArcherTower deploy",,,,,,,,,,,,,,,,,
|
||||
"ArcherTower attack","sfx/archer_tower_fire_05.wav",40,50,96,103,1,3,,,,,,,,,,
|
||||
"ArcherTower target",,,,,,,,,,,,,,,,,
|
||||
"ArcherTower die","sfx/building_destroyed_05.wav",40,40,100,100,1,3,,,,,,,,,,
|
||||
"FireSpirit deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"FireSpirit steps",,,,,,,,,,,,,,,,,
|
||||
"FireSpirit attack start","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"FireSpirit hit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"FireSpirit die","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Wolf deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Wolf steps",,,,,,,,,,,,,,,,,
|
||||
"Wolf attack start",,,,,,,,,,,,,,,,,
|
||||
"Wolf hit",,,,,,,,,,,,,,,,,
|
||||
"Wolf target",,,,,,,,,,,,,,,,,
|
||||
"Wolf die",,,,,,,,,,,,,,,,,
|
||||
"Fireplace deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Fireplace idle",,,,,,,,,,,,,,,,,
|
||||
"Fireplace attack start",,,,,,,,,,,,,,,,,
|
||||
"Fireplace hit",,,,,,,,,,,,,,,,,
|
||||
"Fireplace die",,,,,,,,,,,,,,,,,
|
||||
"Cauldron deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Cauldron steps",,,,,,,,,,,,,,,,,
|
||||
"Cauldron hit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Cauldrond die",,,,,,,,,,,,,,,,,
|
||||
"Construction deploy 2x2","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Construction deploy 3x3","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Construction destroyed",,,,,,,,,,,,,,,,,
|
||||
"Generic building ready",,,,,,,,,,,,,,,,,
|
||||
"Card ready","sfx/card_ready_01.wav",30,30,100,100,1,3,,,,,,,,,,
|
||||
,"sfx/card_ready_01.wav",30,30,112,112,1,3,,,,,,,,,,
|
||||
,"sfx/card_ready_01.wav",30,30,126,126,1,3,,,,,,,,,,
|
||||
,"sfx/card_ready_01.wav",30,30,133,133,1,3,,,,,,,,,,
|
||||
,"sfx/card_ready_01.wav",30,30,150,150,1,3,,,,,,,,,,
|
||||
"Scroll open","sfx/scroll_open_01v3333.wav",50,50,99,101,1,4,,,,,,,,,,
|
||||
"Scroll close","sfx/scroll_close_07.wav",40,40,97,103,1,4,,,,,,,,,,
|
||||
"Scroll taphold","sfx/scroll_taphold_03.wav",40,40,97,103,1,4,,,,,,,,,,
|
||||
"Scroll drop","sfx/scroll_drop_02.wav",40,40,97,103,1,4,,,,,,,,,,
|
||||
"Chest unlockstart","sfx/unlock_chest_start_01.wav",50,50,100,100,4,1,,,,,,,,,,
|
||||
"Claim chest","sfx/dummy_01.wav",1,1,100,100,4,1,,,,,,,,,,
|
||||
"Chest discard","sfx/chest_discard_01.wav",50,50,98,102,1,2,,,,,,,,,,
|
||||
"No workers","sfx/tap_locked_chest_01.wav",40,40,100,100,1,2,,,,,,,,,,
|
||||
"Cast hot coals","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Hot coals appear","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Hot coals loop","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Growth","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WizardDeploy","sfx/deploy_wizard_01.wav",70,70,100,100,1,3,,,,,,,,,,
|
||||
"WizardSteps","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WizardAttackStart","sfx/wiz_attack_01.wav",65,65,95,105,1,3,,,,,,,,,,
|
||||
"WizardHit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WizardProjectileHit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WizardTakeDamage","sfx/wiz_hurt_05.wav",1,1,100,100,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_06.wav",1,1,100,100,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_07.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_08.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
"WizardDie","sfx/wiz_hurt_05.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_06.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_07.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
,"sfx/wiz_hurt_08.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
"Spell sacrifice","sfx/spell_sacrifice_09.wav",75,75,100,100,1,4,,,,,,,,,,
|
||||
"Spell fuse","sfx/scroll_fusion_01.wav",60,60,100,100,1,4,,,,,,,,,,
|
||||
"Enemy on range","sfx/bad_drop_03.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
"Unlock with diamonds","sfx/open_chest_diamonds_02.wav",50,50,100,100,1,3,,,,,,,,,,
|
||||
"Scroll loading","sfx/dummy_01.wav",50,50,100,100,1,3,,,,,,,,,,
|
||||
"Water of life","sfx/water_of_life_01.wav",1,1,100,100,1,2,,,,,,,,,,
|
||||
"Musketeer deploy",,,,,,,,,,,,,,,,,
|
||||
"Musketeer steps",,,,,,,,,,,,,,,,,
|
||||
"Musketeer attack start",,,,,,,,,,,,,,,,,
|
||||
"Musketeer fire projectile","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Musketeer special attack start",,,,,,,,,,,,,,,,,
|
||||
"Musketeer special fire projectile",,,,,,,,,,,,,,,,,
|
||||
"Musketeer die",,,,,,,,,,,,,,,,,
|
||||
"Mercenary deploy",,,,,,,,,,,,,,,,,
|
||||
"Mercenary steps",,,,,,,,,,,,,,,,,
|
||||
"Mercenary attack start",,,,,,,,,,,,,,,,,
|
||||
"Mercenary hit",,,,,,,,,,,,,,,,,
|
||||
"Mercenary die","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Ent Big Deploy",,,,,,,,,,,,,,,,,
|
||||
"Ent Big Steps","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
,"sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Ent Big AttackStart",,,,,,,,,,,,,,,,,
|
||||
"Ent Big Attack","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Ent Big Target",,,,,,,,,,,,,,,,,
|
||||
"Ent Big Die",,,,,,,,,,,,,,,,,
|
||||
"TutorialCharacter1","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,1000,,,,,
|
||||
"SellChest","sfx/get_gold_04.wav",50,50,99,99,1,3,,,,,,,,,,
|
||||
"Fire Breath Deploy",,,,,,,,,,,,,,,,,
|
||||
"Fire Breath Steps",,,,,,,,,,,,,,,,,
|
||||
"Fire Breath Attack Start","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Fire Breath Attack",,50,50,99,101,1,3,,,,,,,,,,
|
||||
"Fire Breath Die",,,,,,,,,,,,,,,,,
|
||||
"Explosive Barrel explosion","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"ExplosiveBarrel deploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"RocketTower attack","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"RocketTower destruction","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"PanicSpell","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"Cannon Fire","sfx/cannon_fire_03.wav",35,45,96,104,1,3,,,,,,,,,,
|
||||
"Cannon Deploy","sfx/cannon_deploy_01.wav",70,70,98,102,1,3,,,,,,,,,,
|
||||
"Tower Attack","sfx/tower_shoot_01.wav",30,35,98,102,1,3,,,,,,,,,,
|
||||
"Tower Hit","sfx/tower_hit_01.wav",25,30,98,102,1,3,,,,,,,,,,
|
||||
"Spellfusion","sfx/spellfusion01.wav",85,85,100,100,1,3,,,,,,,,,,
|
||||
"LevelUpWiz","sfx/wiz_level_up_02.wav",90,90,100,100,1,2,,,,,,,,,,
|
||||
"BearTrapDeploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"BearTrapAttack","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WizMove","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WarHoundDeploy","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"WarHound steps",,,,,,,,,,,,,,,,,
|
||||
"WarHound attack start",,,,,,,,,,,,,,,,,
|
||||
"WarHound hit",,,,,,,,,,,,,,,,,
|
||||
"WarHound target",,,,,,,,,,,,,,,,,
|
||||
"WarHound die",,,,,,,,,,,,,,,,,
|
||||
"sound_knight_deploy","sfx/knight_deploy_31111.wav",70,70,100,100,1,3,,,,,,,,,,
|
||||
"sound_knight_deploy_end","sfx/knight_deploy_end_01.wav",60,60,100,100,1,3,,,,,1000,1000,,,,
|
||||
"sound_knight_steps","sfx/knight_footstep_01.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_02.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_03.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_04.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_knight_attack_start","sfx/knight_attack_start_05.wav",45,55,97,101,1,2,,,,,360,360,,,,
|
||||
,"sfx/knight_attack_start_02.wav",45,55,97,101,1,2,,,,,430,430,,,,
|
||||
,"sfx/knight_attack_start_03.wav",45,55,97,101,1,2,,,,,320,320,,,,
|
||||
,"sfx/knight_attack_start_04.wav",45,55,97,101,1,2,,,,,320,320,,,,
|
||||
,"sfx/knight_attack_start_01.wav",45,55,97,101,1,2,,,,,300,300,,,,
|
||||
"sound_knight_hit","sfx/knight_hit_01.wav",30,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_knight_target","sfx/target_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_knight_die","sfx/knight_die_01.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
,"sfx/knight_die_04.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
,"sfx/knight_die_03.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
"sound_barbarian_deploy","sfx/deploy_barbarians_01.wav",70,70,98,102,1,1,500,,,,,,,,,
|
||||
"sound_barbarian_steps","sfx/knight_footstep_01.wav",40,40,99,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_02.wav",40,40,99,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_03.wav",40,40,99,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_04.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_barbarian_attack_start","sfx/barbarian_attack_02.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_03.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_04.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_05.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_06.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_07.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_08.wav",40,40,98,102,1,2,300,,,,300,320,,,,
|
||||
"sound_barbarian_hit","sfx/knight_attack_hack_01.wav",1,1,98,102,1,3,,,,,,,,,,
|
||||
"sound_barbarian_target","sfx/target_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_barbarian_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_goblins_deploy","sfx/goblin_deploy_14.wav",50,50,98,102,1,1,,,,,,,,,,
|
||||
"sound_goblins_steps","sfx/gen_troop_step_01.wav",70,70,98,102,2,4,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_02.wav",70,70,98,102,2,4,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_03.wav",70,70,98,102,2,4,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_04.wav",70,70,98,102,2,4,,,,,,,,,,
|
||||
"sound_goblins_attack_start","sfx/gob_attack_01v2.wav",30,40,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/gob_attack_02v2.wav",30,40,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/gob_attack_03v2.wav",30,40,97,103,1,3,,,,,,,,,,
|
||||
"sound_goblins_hit","sfx/footman_attack_hit_01.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
,"sfx/footman_attack_hit_02.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
,"sfx/footman_attack_hit_03.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
,"sfx/footman_attack_hit_04.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
"sound_goblins_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_giant_deploy","sfx/giant_deploy_01.wav",90,90,100,100,1,2,,,,,,,,,,
|
||||
"sound_giant_steps","sfx/demon_step_01.wav",40,60,95,105,1,2,,,,,,,,,,
|
||||
"sound_giant_attack_start","sfx/giant_attack_swing_01.wav",65,80,98,102,1,1,,,,,,,,,,
|
||||
,"sfx/giant_attack_swing_02.wav",65,80,98,102,1,1,,,,,,,,,,
|
||||
,"sfx/giant_attack_swing_03.wav",65,80,98,102,1,1,,,,,,,,,,
|
||||
"sound_giant_hit","sfx/giant_hit_01.wav",60,70,95,105,1,2,,,,,,,,,,
|
||||
"sound_giant_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_pekka_deploy","sfx/pekka_deploy_01.wav",80,80,100,100,1,3,,,,,,,,,,
|
||||
"sound_pekka_deploy_end","sfx/pekka_deploy_end_03.wav",100,100,100,100,1,3,,,,,3000,3000,,,,
|
||||
"sound_pekka_steps","sfx/pekka_footstep_02.wav",40,45,96,104,1,3,,,,,,,,,,
|
||||
"sound_pekka_attack_start","sfx/pekka_atk_01.wav",60,60,97,103,1,3,,,,,,,,,,
|
||||
"sound_pekka_hit","sfx/pekka_attack_hit_03.wav",50,60,98,102,1,3,,,,,,,,,,
|
||||
"sound_pekka_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_minion_deploy","sfx/archer_deploy_05.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
"sound_minion_steps","sfx/minion_wing_02.wav",15,30,93,107,2,2,100,,,,,,,,,
|
||||
"sound_minion_attack_start","sfx/tinymite_attack_04.wav",1,1,96,104,1,3,,,,,,,,,,
|
||||
"sound_minion_attack","sfx/tinymite_attack_04.wav",50,55,95,105,1,1,,,,,,,,,,
|
||||
,"sfx/tinymite_attack_05.wav",50,55,95,105,1,1,,,,,,,,,,
|
||||
,"sfx/tinymite_attack_06.wav",50,55,95,105,1,1,,,,,,,,,,
|
||||
"sound_minion_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_minion_projectile_hit",,,,,,,,,,,,,,,,,
|
||||
"Gameend Horn","sfx/big_horn_end_02_v2.wav",80,80,100,100,1,1,,,,,,,,,,
|
||||
"sound_mortar_deploy","sfx/boulder_impact_01.wav",40,50,95,105,1,2,,,,,,,,,,
|
||||
"sound_mortar_turn","sfx/target_01.wav",25,30,97,103,1,3,,,,,,,,,,
|
||||
"sound_mortar_attack_start","sfx/mortar_fire_02.wav",1,1,98,102,1,2,,,,,,,,,,
|
||||
"sound_mortar_attack","sfx/mortar_fire_03.wav",80,80,98,102,1,2,,,,,,,,,,
|
||||
"sound_mortar_hit","sfx/boulder_impact_01.wav",80,90,95,105,1,2,,,,,,,,,,
|
||||
"sound_mortar_die","sfx/building_destroyed_05.wav",40,40,100,100,1,3,,,,,,,,,,
|
||||
"sound_balloon_deploy","sfx/deploy_balloon_06.wav",90,90,98,102,1,2,,,,,,,,,,
|
||||
"sound_balloon_turn","sfx/target_01.wav",25,30,97,103,1,3,,,,,,,,,,
|
||||
"sound_balloon_steps","sfx/balloon_fly_loop_01.wav",55,55,98,102,2,2,,,,,,,,,,
|
||||
"sound_balloon_attack_start","sfx/drop_bomb_03.wav",70,70,100,100,1,3,,,,,,,,,,
|
||||
"sound_balloon_attack",,,,,,,,,,,,,,,,,
|
||||
"sound_balloon_hit","sfx/boulder_impact_01.wav",80,90,95,105,1,2,,,,,,,,,,
|
||||
"sound_balloon_die","sfx/building_destroyed_05.wav",40,40,100,100,1,3,,,,,,,,,,
|
||||
"sound_goblin_hut_deploy","sfx/deploy_goblin_hut_02.wav",75,75,98,102,1,2,,,,,,,,,,
|
||||
"sound_goblin_hut_spawn","sfx/goblin_spawn_03.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
,"sfx/goblin_spawn_04.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
,"sfx/goblin_spawn_01.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
,"sfx/goblin_spawn_02.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
"sound_goblin_hut_loop",,,,,,,,,,,,,,,,,
|
||||
"sound_goblin_hut_die","sfx/boulder_impact_01.wav",80,90,95,105,1,2,,,,,,,,,,
|
||||
"sound_witch_deploy","sfx/summon_witch_01.wav",70,70,100,100,1,3,,,,,,,,,,
|
||||
"sound_witch_steps","sfx/knight_footstep_01.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_02.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_03.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_04.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_witch_attack_start","sfx/witch_attack_02.wav",35,45,101,99,1,3,,,,,,,,,,
|
||||
"sound_witch_hit","sfx/knight_attack_hack_01.wav",60,80,98,102,1,3,,,,,,,,,,
|
||||
"sound_witch_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_witch_deploy_skeleton","sfx/witch_summon_02.wav",60,60,98,102,1,1,1000,,,,,,,,,
|
||||
"sound_skeleton_deploy","sfx/skeleton_deploy_03.wav",65,65,100,100,1,1,500,,,,,,,,,
|
||||
"sound_skeleton_steps","sfx/gen_troop_step_01.wav",20,30,98,102,2,4,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_02.wav",10,20,98,102,2,4,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_03.wav",10,20,98,102,2,4,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_04.wav",10,20,98,102,2,4,,,,,,,,,,
|
||||
"sound_skeleton_attack_start","sfx/skeleton_atk_03.wav",40,50,97,103,1,2,,,,,,,,,,
|
||||
"sound_skeleton_hit","sfx/footman_attack_hit_01.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
,"sfx/footman_attack_hit_02.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
,"sfx/footman_attack_hit_03.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
,"sfx/footman_attack_hit_04.wav",10,20,96,104,2,3,,,,,,,,,,
|
||||
"sound_skeleton_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_golem_deploy","sfx/giant_deploy_04v3.wav",80,80,100,100,1,2,,,,,,,,,,
|
||||
"sound_golem_steps","sfx/gen_troop_step_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_02.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_03.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_04.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
"sound_golem_attack_start","sfx/stone_golem_attack_02.wav",70,80,98,102,1,2,,,,,,,,,,
|
||||
"sound_golem_hit","sfx/golem_hit_01.wav",70,80,98,102,1,2,,,,,,,,,,
|
||||
"sound_golem_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_get_star_player","sfx/get_star_equence_01_v2.wav",65,65,100,100,1,2,,,,,,,,,,
|
||||
"sound_get_star_enemy","sfx/get_star_equence_01boo.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
"sound_generic_death","sfx/npc_die_04.wav",35,45,95,104,1,3,,,,,,,,,,
|
||||
"deploy timer tick","sfx/deploy_timer_tick_01v4.wav",30,30,100,100,1,2,,,,,,,,,,
|
||||
"deploy timer ding","sfx/deploy_timer_ding_03.wav",40,40,100,100,1,2,,,,,,,,,,
|
||||
"enemy deploy timer tick","sfx/enemy_deploy_timer_tick_01.wav",20,20,100,100,1,2,,,,,,,,,,
|
||||
"enemy deploy timer ding","sfx/enemy_deploy_timer_ding_04.wav",40,40,100,100,1,2,,,,,,,,,,
|
||||
"match start","sfx/big_horn_start_02_v2.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Goblin_arena_start","sfx/goblin_arena_jingle_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Underground_arena_start","sfx/underground_arena_jingle_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Bone_pit_arena_start","sfx/bone_pit_arena_jingle_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Dark_arena_start","sfx/dark_arena_jing_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Barbarian_arena_start","sfx/barbarian_jingle_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Spell_arena_start","sfx/spellarena_jing_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Builder_arena_start","sfx/builder_arena_jingle_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"inferno_loop","sfx/laser_loop_02.wav",33,33,100,100,1,1,,"true",,,,,,,,
|
||||
"Overtime","sfx/big_horn_start_02_v2.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"sound_tower_take_damage","sfx/tower_attacked_02.wav",50,50,100,100,1,1,30000,,,,,,,,,
|
||||
"sound_tower_take_damage_enemy","sfx/enemy_tower_attacked_03.wav",55,55,100,100,1,1,30000,,,,,,,,,
|
||||
"sound_enemy_die_jingle","sfx/dummy_01.wav",1,1,100,100,5,1,300,,,,,,,,,
|
||||
"sound_own_die_jingle","sfx/dummy_01.wav",1,1,100,100,5,1,300,,,,,,,,,
|
||||
"sound_rage_effect","sfx/rage_spell_01.wav",60,60,98,102,1,1,,,,,,,,,,
|
||||
"sound_inferno_tower_attack","sfx/laser_loop_02.wav",50,50,98,102,1,1,,,,,,,,,,
|
||||
"sound_valkyrie_deploy","sfx/valkyrie_deploy_02.wav",70,70,100,100,1,3,,,,,,,,,,
|
||||
"sound_valkyrie_deploy_end","sfx/valkyrie_deploy_end_02.wav",50,50,100,100,1,3,,,,,1000,1000,,,,
|
||||
"sound_valkyrie_steps","sfx/knight_footstep_01.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_02.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_03.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_04.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_valkyrie_attack_start","sfx/valkyrie_atk_04.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_05.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_04.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_06.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_07.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_08.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_09.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
,"sfx/valkyrie_atk_10.wav",60,65,97,103,1,3,,,,,,,,,,
|
||||
"sound_valkyrie_hit","sfx/valkyrie_hit_01.wav",20,35,98,102,1,3,,,,,,,,,,
|
||||
"sound_valkyrie_target","sfx/target_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_valkyrie_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_summon_own_big","sfx/summon_own_07.wav",80,80,97,102,1,2,,,,,4200,4200,,,,
|
||||
"sound_summon_enemy_big","sfx/enemy_summon_01.wav",55,55,97,103,1,2,,,,,3000,3200,,,,
|
||||
"sound_summon_enemy_big_die","sfx/kill_enemy_big_summon_02.wav",55,55,97,103,1,2,,,,,2000,2500,,,,
|
||||
"sound_summon_own_big_die","sfx/own_summon_die_03.wav",55,55,97,103,1,2,,,,,2000,2500,,,,
|
||||
"sound_bomber_deploy","sfx/deploy_skeleton_01.wav",70,70,100,100,1,2,,,,,,,,,,
|
||||
"sound_bomber_deploy_end","sfx/skeleton_deploy_end_01.wav",70,70,100,100,1,2,,,,,1000,1000,,,,
|
||||
"sound_bomber_steps","sfx/bomb_skeleton_01v3.wav",25,35,95,105,3,2,,,,,,,,,,
|
||||
"sound_bomber_attack",,,,,,,,,,,,,,,,,
|
||||
"sound_bomber_attack_start","sfx/bomb_skeleton_atk_04.wav",75,80,97,103,1,1,,,,,,,,,,
|
||||
"sound_bomber_hit",,,,,,,,,,,,,,,,,
|
||||
"sound_bomber_die",,,,,,,,,,,,,,,,,
|
||||
"sound_BombTower_projectile_hit","sfx/skeleton_bomb_explo_01.wav",65,70,95,105,1,1,,,,,,,,,,
|
||||
"sound_goblin_barrel_explosion","sfx/barrel_explosion_02.wav",65,70,95,105,1,1,,,,,,,,,,
|
||||
"sound_goblin_barrel_spawn","sfx/barrel_drawback_14.wav",70,70,100,100,1,2,,,,,,,,,,
|
||||
"sound_rocket_explosion","sfx/rocket_hit_01v2.wav",75,75,96,104,1,2,,,,,,,,,,
|
||||
"sound_rocket_spawn","sfx/rocket_launch_02v2.wav",75,75,96,104,1,2,,,,,,,,,,
|
||||
"sound_dragon_deploy","sfx/archer_deploy_05.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
"sound_dragon_steps","sfx/gen_troop_step_01.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_02.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_03.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
,"sfx/gen_troop_step_04.wav",40,40,98,102,1,2,,,,,,,,,,
|
||||
"sound_dragon_attack_start","sfx/tinymite_attack_04.wav",1,1,96,104,1,3,,,,,,,,,,
|
||||
"sound_dragon_attack","sfx/tinymite_attack_04.wav",35,50,95,105,1,3,,,,,,,,,,
|
||||
,"sfx/tinymite_attack_05.wav",35,50,95,105,1,3,,,,,,,,,,
|
||||
,"sfx/tinymite_attack_06.wav",35,50,95,105,1,3,,,,,,,,,,
|
||||
"sound_dragon_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"chat_donate","sfx/donate_01.wav",40,40,100,100,1,3,,,,,,,,,,
|
||||
"chat_new_msg","sfx/scroll_chat_01.wav",20,20,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_wood","sfx/wooden_chest_open_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_iron","sfx/iron_chest_open_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_gold","sfx/gold_chest_open_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_magical","sfx/magic_chest_open_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_star","sfx/star_chest_open_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_get_gold","sfx/get_card_gold_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_get_gem","sfx/get_card_gems_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_get_common","sfx/get_card_comon_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_get_rare","sfx/get_card_rare_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_get_epic","sfx/get_epic_rare_01.wav",100,100,100,100,1,5,,,,,,,,,,
|
||||
"sound_openChest_loop_gold","sfx/chest_loop_01.wav",30,30,100,100,1,1,,"true",,,,,,,,
|
||||
"sound_openChest_loop_gem","sfx/chest_loop_01.wav",30,30,100,100,1,1,,"true",,,,,,,,
|
||||
"sound_openChest_loop_common",,40,5,100,100,1,1,,"true",,,,,,,,
|
||||
"sound_openChest_loop_rare",,40,40,100,100,1,1,,"true",,,,,,,,
|
||||
"sound_openChest_loop_epic",,40,40,100,100,1,1,,"true",,,,,,,,
|
||||
"sound_musketeer_deploy","sfx/musketeer_deploy_01.wav",70,70,100,100,1,3,,,,,,,,,,
|
||||
"sound_musketeer_deploy_end","sfx/musketeer_reload_01.wav",60,60,97,103,1,3,,,,,1200,1200,,,,
|
||||
"sound_musketeer_steps",,,,,,,,,,,,,,,,,
|
||||
"sound_musketeer_attack","sfx/musket_fire_02.wav",60,65,94,106,1,4,,,,,,,,,,
|
||||
"sound_musketeer_attack_start",,,,,,,,,,,,,,,,,
|
||||
"sound_musketeer_hit",,,,,,,,,,,,,,,,,
|
||||
"sound_musketeer_target",,,,,,,,,,,,,,,,,
|
||||
"sound_musketeer_die",,,,,,,,,,,,,,,,,
|
||||
"sound_upgradeCard_start","sfx/upgrade_card_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_upgradeCard_ready","sfx/card_upgrade_hit_01.wav",60,60,100,100,1,5,,,,,,,,,,
|
||||
"sound_upgradeCard_stat_appear","sfx/card_upgrade_stat_05.wav",60,60,100,100,1,3,,,,,,,,,,
|
||||
"sound_upgradeCard_stat_change","sfx/card_upgrade_counter_01.wav",25,25,100,100,1,20,20,,,,,,,,,
|
||||
"sound_freeze_deploy","sfx/freeze_04.wav",65,65,98,102,1,2,,,,,,,,,,
|
||||
"sound_tesla_deploy","sfx/boulder_impact_01.wav",40,50,95,105,1,2,,,,,,,,,,
|
||||
"sound_tesla_up","sfx/tesla_open_02.wav",80,80,98,102,1,3,,,,,,,,,,
|
||||
"sound_tesla_down","sfx/tesla_close_02.wav",70,70,98,102,1,3,,,,,,,,,,
|
||||
"sound_tesla_attack_start","sfx/dummy_01.wav",1,1,96,103,1,5,,,,,,,,,,
|
||||
"sound_tesla_attack","sfx/tesla_zap_01.wav",40,40,96,103,1,5,,,,,,,,,,
|
||||
"sound_tesla_hit","sfx/boulder_impact_01.wav",1,1,95,105,1,2,,,,,,,,,,
|
||||
"sound_tesla_target","sfx/tesla_open_02.wav",1,1,100,100,1,3,,,,,,,,,,
|
||||
"sound_chr_wizard_deploy","sfx/deploy_wizard_01.wav",70,70,100,100,1,1,,,,,,,,,,
|
||||
"sound_chr_wizard_steps","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"sound_chr_wizard_target","sfx/target_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_chr_wizard_attack_start","sfx/wiz_fireball_01v8.wav",60,60,98,102,1,3,,,,,,,,,,
|
||||
"sound_chr_wizard_attack","sfx/dummy_01.wav",1,1,95,105,1,3,,,,,,,,,,
|
||||
"sound_chr_wizard_projectile_hit","sfx/fireball_hit_01.wav",50,50,95,105,2,3,,,,,,,,,,
|
||||
"sound_chr_wizard_hit","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"sound_chr_wizard_die","sfx/wiz_hurt_05.wav",40,40,98,102,1,1,,,,,5000,6000,,,,3000
|
||||
"sound_card_fly_in","sfx/card_fly_in_05.wav",40,40,100,100,2,4,,,,,,,,,,
|
||||
"sound_elixir_bubble","sfx/elixir_lost_01.wav",20,20,98,102,2,3,,,,,,,,,,
|
||||
"sound_buy_card","sfx/buy_card_01.wav",45,45,100,100,1,4,,,,,,,,,,
|
||||
"sound_prince_deploy","sfx/prince_deploy_01.wav",65,65,100,100,1,3,,,,,,,,,,
|
||||
"sound_prince_deploy_end","sfx/horse_blow_01.wav",65,65,100,100,1,3,,,,,1000,1000,,,,
|
||||
"sound_prince_steps","sfx/horse_gallop_01.wav",40,45,97,102,2,2,,,,,,,,,,
|
||||
,"sfx/horse_gallop_02.wav",40,45,97,102,2,2,,,,,,,,,,
|
||||
"sound_prince_charge_steps","sfx/horse_gallop_01.wav",55,60,130,137,2,2,,,,,,,,,,
|
||||
,"sfx/horse_gallop_02.wav",55,60,130,137,2,2,,,,,,,,,,
|
||||
"sound_prince_charge","sfx/rider_charge_03.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
"sound_prince_charge_hit",,,,,,,,,,,,,,,,,
|
||||
"sound_prince_attack_start","sfx/prince_atk_01v2.wav",60,60,98,102,1,2,,,,,210,210,,,,
|
||||
,"sfx/prince_atk_02v2.wav",60,60,98,102,1,2,,,,,210,210,,,,
|
||||
,"sfx/prince_atk_03v2.wav",60,60,98,102,1,2,,,,,210,210,,,,
|
||||
,"sfx/prince_atk_04v2.wav",60,60,98,102,1,2,,,,,210,210,,,,
|
||||
"sound_prince_hit","sfx/prince_hit_01.wav",55,65,95,105,1,2,,,,,,,,,,
|
||||
"sound_prince_target",,,,,,,,,,,,,,,,,
|
||||
"sound_spear_goblin_deploy","sfx/spear_gob_dep_01v2.wav",60,60,96,104,1,2,,,,,,,,,,
|
||||
"sound_spear_goblin_steps",,,,,,,,,,,,,,,,,
|
||||
"sound_spear_goblin_attack_start","sfx/spear_gob_atk_swish_01.wav",55,55,98,108,1,2,,,,,550,550,,,,
|
||||
,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,,,,,,
|
||||
"sound_spear_goblin_attack","sfx/spear_gob_atk_01.wav",40,40,96,104,1,2,,,,,,,,,,
|
||||
,"sfx/spear_gob_atk_02.wav",40,40,96,104,1,2,,,,,,,,,,
|
||||
,"sfx/spear_gob_atk_03.wav",40,40,96,104,1,2,,,,,,,,,,
|
||||
"sound_spear_goblin_die",,,,,,,,,,,,,,,,,
|
||||
"sound_spear_goblin_projectile_hit","sfx/spear_gob_atk_hit_01.wav",25,30,95,105,2,4,,,,,,,,,,
|
||||
"sound_giant_skeleton_deploy","sfx/big_skeleton_summon_01.wav",90,90,100,100,1,3,,,,,,,,,,
|
||||
"sound_giant_skeleton_steps","sfx/big_skeleton_walk_05.wav",45,55,92,106,1,4,,,,,,,,,,
|
||||
"sound_giant_skeleton_attack_start","sfx/skeleton_arm_swing_02.wav",60,60,96,104,1,3,,,,,200,200,,,,
|
||||
"sound_giant_skeleton_hit","sfx/big_skeleton_hit_01.wav",80,80,96,104,1,3,,,,,,,,,,
|
||||
"sound_giant_skeleton_die",,,,,,,,,,,,,,,,,
|
||||
"sound_minipekka_deploy","sfx/minipekka_deploy_01.wav",80,80,98,102,1,3,,,,,,,,,,
|
||||
"sound_minipekka_deploy_end","sfx/mini_pekka_deploy_end_05.wav",65,65,100,100,1,3,,,,,1100,1100,,,,
|
||||
"sound_minipekka_steps","sfx/minipekka_step_03.wav",40,45,96,104,1,3,,,,,,,,,,
|
||||
"sound_minipekka_attack_start","sfx/mini_pekka_atk_12.wav",60,60,97,103,1,3,,,,,100,100,,,,
|
||||
"sound_minipekka_hit","sfx/mini_pekka_hit_03.wav",60,70,95,105,1,3,,,,,,,,,,
|
||||
"sound_minipekka_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_hog_rider_deploy","sfx/deploy_barbarians_01.wav",70,70,98,102,1,1,500,,,,,,,,,
|
||||
"sound_hog_rider_steps","sfx/knight_footstep_01.wav",40,40,99,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_02.wav",40,40,99,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_03.wav",40,40,99,102,1,2,,,,,,,,,,
|
||||
,"sfx/knight_footstep_04.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_hog_rider_attack_start","sfx/barbarian_attack_02.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_03.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_04.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_05.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_06.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_07.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
,"sfx/barbarian_attack_08.wav",40,50,98,105,1,3,,,,,300,320,,,,
|
||||
"sound_hog_rider_hit","sfx/knight_attack_hack_01.wav",1,1,98,102,1,3,,,,,,,,,,
|
||||
"sound_hog_rider_target","sfx/target_01.wav",40,40,98,102,1,3,,,,,,,,,,
|
||||
"sound_hog_rider_die","sfx/npc_die_02.wav",1,1,97,103,1,5,,,,,,,,,,
|
||||
"sound_hog_rider_landing","sfx/boulder_impact_01.wav",70,70,98,102,1,1,,,,,,,,,,
|
||||
"sound_baby_dragon_deploy","sfx/babydragon_deploy_01.wav",80,80,98,102,1,3,,,,,,,,,,
|
||||
"sound_baby_dragon_deploy_end","sfx/baby_dragon_deploy_end_11.wav",75,75,98,102,2,1,,,,,1100,1100,,,,
|
||||
"sound_baby_dragon_steps","sfx/babydragon_wing_01.wav",30,40,95,105,2,4,300,,,,100,100,,,,
|
||||
"sound_baby_dragon_attack_start","sfx/baby_dragon_fireball_08.wav",65,70,98,102,1,3,,,,,150,150,,,,
|
||||
"sound_baby_dragon_attack",,,,,,,,,,,,,,,,,
|
||||
"sound_baby_dragon_die",,,,,,,,,,,,,,,,,
|
||||
"sound_dragon_projectile_hit","sfx/sound_fireball_hit_01.wav",55,65,93,106,2,4,,,,,,,,,,
|
||||
"tap_magic_chest","sfx/magic_chest_land_01.wav",70,70,100,100,1,2,,,,,,,,,,
|
||||
"tap_wooden_chest","sfx/wooden_chest_land_01.wav",70,70,100,100,1,2,,,,,,,,,,
|
||||
"tap_iron_chest","sfx/iron_chest_land_01.wav",70,70,100,100,1,2,,,,,,,,,,
|
||||
"tap_gold_chest","sfx/golden_chest_land_01.wav",70,70,100,100,1,2,,,,,,,,,,
|
||||
"sound_king_player_activate","sfx/king_activate_01.wav",100,100,100,100,1,3,,,,,1800,1800,,,,
|
||||
"sound_king_player_die",,,,,,,,,,,,,,,,,
|
||||
"sound_king_enemy_activate","sfx/king_activate_01.wav",100,100,100,100,1,3,,,,,1800,1800,,,,
|
||||
"sound_king_angry","sfx/king_tower_gone_01.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_tower_gone_02.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_tower_gone_03.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_tower_gone_04.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_tower_gone_05.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_tower_gone_06.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_tower_gone_07.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
"sound_king_happy_tower","sfx/king_happy_01.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_happy_02.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_happy_03.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
,"sfx/king_happy_04.wav",100,100,100,100,1,3,1500,,,,,,,,,
|
||||
"sound_king_enemy_die",,,,,,,,,,,,,,,,,
|
||||
"sound_king_attack","sfx/king_fire_04.wav",60,70,94,106,1,4,,,,,,,,,,
|
||||
"Achievement Unlock","sfx/achievement_unlock_01.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
"Claim Achievement","sfx/claim_achievement_01.wav",60,60,100,100,1,2,,,,,,,,,,
|
||||
"First_Crown","sfx/1st_crown_01.wav",60,60,100,100,,2,,,,,,,,,,
|
||||
"Second_Crown","sfx/2nd_crown_01.wav",65,65,100,100,,2,,,,,,,,,,
|
||||
"Third_Crown","sfx/3rd_crown_01.wav",70,70,100,100,,2,,,,,,,,,,
|
||||
"sound_chest_fly","sfx/chest_fly_01.wav",60,60,100,100,1,2,,,,,250,250,,,,
|
||||
"Tut_jing_start","sfx/tut_jing_01.wav",90,90,100,100,1,1,,,,,,,,,,
|
||||
"Tut_jing_time_1","sfx/tut_jing_02.wav",70,70,100,100,1,1,,,,,,,,,,
|
||||
"Tut_jing_time_2","sfx/tut_jing_02.wav",80,80,119,119,1,1,,,,,,,,,,
|
||||
"Tut_count_01","sfx/tut_count_01.wav",55,55,100,100,1,4,,,,,,,,,,
|
||||
"Names_whoosh_out","sfx/tex_whoosh_02.wav",60,60,100,100,1,4,,,,,,,,,,
|
||||
"Names_whoosh_in","sfx/text_whoosh_in_03.wav",90,90,100,100,1,4,,,,,200,200,,,,
|
||||
"sound_spell_zap","sfx/zap_02.wav",80,80,95,105,1,3,,,,,,,,,,
|
||||
"sound_board_slide_in","sfx/board_slide_in_01.wav",55,55,92,92,1,2,,,,,,,,,,
|
||||
"sound_tombstone_deploy","sfx/tombstone_deploy_01.wav",65,65,100,100,1,3,,,,,,,,,,
|
||||
"sound_tombstone_spawn","sfx/goblin_spawn_03.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
,"sfx/goblin_spawn_04.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
,"sfx/goblin_spawn_01.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
,"sfx/goblin_spawn_02.wav",40,50,98,102,2,3,,,,,,,,,,
|
||||
"sound_tombstone_die","sfx/boulder_impact_01.wav",80,90,95,105,1,2,,,,,,,,,,
|
||||
"sound_supercell_jingle","sfx/supercell_jingle.wav",80,80,100,100,1,3,,,,,,,,,,
|
||||
"sound_tutorial_first_vo","sfx/king_tut_first_vo_01.wav",90,90,100,100,1,3,,,,,300,300,,,,
|
||||
"sound_tutorial_second_vo","sfx/king_tut_second_vo_01.wav",80,80,100,100,1,3,,,,,3200,3200,,,,
|
||||
"sound_tutorial_first_plink","sfx/dummy_01.wav",1,1,100,100,1,1,,,,,,,,,,
|
||||
"sound_tutorial_second_plink","sfx/tutorial_plink_02v2.wav",65,65,100,100,1,3,,,,,,,,,,
|
||||
"sound_text_bubble_appear","sfx/speech_bubble_tut_03.wav",40,40,95,105,1,3,,,,,,,,,,
|
||||
"sound_press_battle_button","sfx/press_arena_01.wav",80,80,100,100,1,3,,,,,,,,,,
|
||||
"sound_get_crown","sfx/get_crown_02.wav",40,40,100,100,1,5,,,,,,,,,,
|
||||
"sound_tap_gems","sfx/tap_gems_02.wav",60,60,100,100,1,5,,,,,,,,,,
|
||||
"sound_tap_coins","sfx/tap_coins_01.wav",42,42,100,100,1,3,,,,,,,,,,
|
||||
"sound_buy_card_common","sfx/buy_common_card_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_buy_card_rare","sfx/buy_rare_card_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_buy_card_epic","sfx/buy_epic_card_01.wav",80,80,100,100,1,5,,,,,,,,,,
|
||||
"sound_bomb_tower_die","sfx/building_explode_01.wav",80,80,95,105,1,3,,,,,,,,,,
|
||||
"sound_purchase_gems","sfx/buy_gems_02.wav",60,60,100,100,1,3,,,,,,,,,,
|
||||
"sound_king_level_up","sfx/king_level_up_01.wav",95,95,100,100,1,2,,,,,,,,,,
|
||||
"sound_king_happy","sfx/king_laughter_01.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_laughter_02.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_laughter_03.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_laughter_04.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
"sound_king_crying","sfx/king_crying_01.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_crying_02.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_crying_03.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_crying_04.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
"sound_king_congratulate","sfx/king_congrats_01.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_congrats_02.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_congrats_03.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_congrats_04.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
"sound_king_mad","sfx/king_mad_01.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_mad_02.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_mad_03.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
,"sfx/king_mad_04.wav",65,65,98,102,1,2,15000,,,,,,,,,
|
||||
"sound_explosion","sfx/explosion_01.wav",80,80,97,103,1,3,,,,,,,,,,
|
||||
"sound_GiantSkeleton_bomb_deploy","sfx/bomb_drop_01.wav",80,80,100,100,1,2,,,,,,,,,,
|
||||
"sound_GiantSkeleton_bomb_die","sfx/explosion_01.wav",80,80,97,103,1,3,,,,,,,,,,
|
||||
"sound_Balloon_Bomb_deploy","sfx/bomb_drop_01.wav",80,80,100,100,1,2,,,,,,,,,,
|
||||
"sound_Balloon_Bomb_die","sfx/explosion_01.wav",80,80,97,103,1,3,,,,,,,,,,
|
||||
"sound_extra_time_jingle","sfx/extratime_jingle_02.wav",100,100,100,100,1,3,,,,,,,,,,
|
||||
|
1088
assets/csv_client/texts.csv
Normal file
1088
assets/csv_client/texts.csv
Normal file
File diff suppressed because one or more lines are too long
13
assets/csv_logic/achievements.csv
Normal file
13
assets/csv_logic/achievements.csv
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
"Name","Level","TID","InfoTID","Action","ActionCount","ExpReward","DiamondReward","Hero","SortIndex","Hidden"
|
||||
"String","int","String","String","String","int","int","int","String","int","Boolean"
|
||||
"com.supercell.scroll.teamplayer",2,"TID_ACHIEVEMENT_TITLE_CLAN","TID_ACHIEVEMENT_INFO_CLAN","jointeam",1,10,100,,1,
|
||||
"com.supercell.scroll.donate",0,"TID_ACHIEVEMENT_TITLE_DONATE","TID_ACHIEVEMENT_INFO_DONATE","donate",25,5,3,,2,
|
||||
"com.supercell.scroll.donate2",1,"TID_ACHIEVEMENT_TITLE_DONATE","TID_ACHIEVEMENT_INFO_DONATE","donate",250,10,5,,3,
|
||||
"com.supercell.scroll.donate3",2,"TID_ACHIEVEMENT_TITLE_DONATE","TID_ACHIEVEMENT_INFO_DONATE","donate",2500,20,10,,4,
|
||||
"com.supercell.scroll.reacharena",0,"TID_ACHIEVEMENT_TITLE_REACHARENA","TID_ACHIEVEMENT_INFO_REACHARENA","reacharena",2,5,3,,5,
|
||||
"com.supercell.scroll.reacharena2",1,"TID_ACHIEVEMENT_TITLE_REACHARENA","TID_ACHIEVEMENT_INFO_REACHARENA","reacharena",4,10,5,,6,
|
||||
"com.supercell.scroll.reacharena3",2,"TID_ACHIEVEMENT_TITLE_REACHARENA","TID_ACHIEVEMENT_INFO_REACHARENA","reacharena",6,20,10,,7,
|
||||
"com.supercell.scroll.cards",0,"TID_ACHIEVEMENT_TITLE_CARDS","TID_ACHIEVEMENT_INFO_CARDS","findcard",20,5,3,,8,
|
||||
"com.supercell.scroll.cards2",1,"TID_ACHIEVEMENT_TITLE_CARDS","TID_ACHIEVEMENT_INFO_CARDS","findcard",30,10,5,,9,
|
||||
"com.supercell.scroll.cards3",2,"TID_ACHIEVEMENT_TITLE_CARDS","TID_ACHIEVEMENT_INFO_CARDS","findcard",40,20,10,,10,
|
||||
"com.supercell.scroll.watchtv",2,"TID_ACHIEVEMENT_TITLE_TV","TID_ACHIEVEMENT_INFO_TV","watchtv",1,5,5,,11,
|
||||
|
98
assets/csv_logic/alliance_badges.csv
Normal file
98
assets/csv_logic/alliance_badges.csv
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
Name,IconSWF,IconExportName
|
||||
String,String,String
|
||||
clan_badge_01_01,sc/ui.sc,clan_badge_01_01
|
||||
clan_badge_01_02,sc/ui.sc,clan_badge_01_02
|
||||
clan_badge_01_03,sc/ui.sc,clan_badge_01_03
|
||||
clan_badge_01_04,sc/ui.sc,clan_badge_01_04
|
||||
clan_badge_02_01,sc/ui.sc,clan_badge_02_01
|
||||
clan_badge_02_02,sc/ui.sc,clan_badge_02_02
|
||||
clan_badge_02_03,sc/ui.sc,clan_badge_02_03
|
||||
clan_badge_02_04,sc/ui.sc,clan_badge_02_04
|
||||
clan_badge_03_01,sc/ui.sc,clan_badge_03_01
|
||||
clan_badge_03_02,sc/ui.sc,clan_badge_03_02
|
||||
clan_badge_03_03,sc/ui.sc,clan_badge_03_03
|
||||
clan_badge_03_04,sc/ui.sc,clan_badge_03_04
|
||||
clan_badge_04_01,sc/ui.sc,clan_badge_04_01
|
||||
clan_badge_04_02,sc/ui.sc,clan_badge_04_02
|
||||
clan_badge_04_03,sc/ui.sc,clan_badge_04_03
|
||||
clan_badge_04_04,sc/ui.sc,clan_badge_04_04
|
||||
clan_badge_05_01,sc/ui.sc,clan_badge_05_01
|
||||
clan_badge_05_02,sc/ui.sc,clan_badge_05_02
|
||||
clan_badge_05_03,sc/ui.sc,clan_badge_05_03
|
||||
clan_badge_05_04,sc/ui.sc,clan_badge_05_04
|
||||
clan_badge_06_01,sc/ui.sc,clan_badge_06_01
|
||||
clan_badge_06_02,sc/ui.sc,clan_badge_06_02
|
||||
clan_badge_06_03,sc/ui.sc,clan_badge_06_03
|
||||
clan_badge_06_04,sc/ui.sc,clan_badge_06_04
|
||||
clan_badge_07_01,sc/ui.sc,clan_badge_07_01
|
||||
clan_badge_07_02,sc/ui.sc,clan_badge_07_02
|
||||
clan_badge_07_03,sc/ui.sc,clan_badge_07_03
|
||||
clan_badge_07_04,sc/ui.sc,clan_badge_07_04
|
||||
clan_badge_07_05,sc/ui.sc,clan_badge_07_05
|
||||
clan_badge_07_06,sc/ui.sc,clan_badge_07_06
|
||||
clan_badge_08_01,sc/ui.sc,clan_badge_08_01
|
||||
clan_badge_08_02,sc/ui.sc,clan_badge_08_02
|
||||
clan_badge_08_03,sc/ui.sc,clan_badge_08_03
|
||||
clan_badge_09_01,sc/ui.sc,clan_badge_09_01
|
||||
clan_badge_09_02,sc/ui.sc,clan_badge_09_02
|
||||
clan_badge_09_03,sc/ui.sc,clan_badge_09_03
|
||||
clan_badge_10_01,sc/ui.sc,clan_badge_10_01
|
||||
clan_badge_10_02,sc/ui.sc,clan_badge_10_02
|
||||
clan_badge_10_03,sc/ui.sc,clan_badge_10_03
|
||||
clan_badge_10_04,sc/ui.sc,clan_badge_10_04
|
||||
clan_badge_10_05,sc/ui.sc,clan_badge_10_05
|
||||
clan_badge_10_06,sc/ui.sc,clan_badge_10_06
|
||||
clan_badge_11_01,sc/ui.sc,clan_badge_11_01
|
||||
clan_badge_11_02,sc/ui.sc,clan_badge_11_02
|
||||
clan_badge_11_03,sc/ui.sc,clan_badge_11_03
|
||||
clan_badge_12_01,sc/ui.sc,clan_badge_12_01
|
||||
clan_badge_12_02,sc/ui.sc,clan_badge_12_02
|
||||
clan_badge_12_03,sc/ui.sc,clan_badge_12_03
|
||||
clan_badge_13_01,sc/ui.sc,clan_badge_13_01
|
||||
clan_badge_13_02,sc/ui.sc,clan_badge_13_02
|
||||
clan_badge_13_03,sc/ui.sc,clan_badge_13_03
|
||||
clan_badge_14_01,sc/ui.sc,clan_badge_14_01
|
||||
clan_badge_14_02,sc/ui.sc,clan_badge_14_02
|
||||
clan_badge_14_03,sc/ui.sc,clan_badge_14_03
|
||||
clan_badge_15_01,sc/ui.sc,clan_badge_15_01
|
||||
clan_badge_15_02,sc/ui.sc,clan_badge_15_02
|
||||
clan_badge_15_03,sc/ui.sc,clan_badge_15_03
|
||||
clan_badge_15_04,sc/ui.sc,clan_badge_15_04
|
||||
clan_badge_15_05,sc/ui.sc,clan_badge_15_05
|
||||
clan_badge_15_06,sc/ui.sc,clan_badge_15_06
|
||||
clan_badge_16_01,sc/ui.sc,clan_badge_16_01
|
||||
clan_badge_16_02,sc/ui.sc,clan_badge_16_02
|
||||
clan_badge_16_03,sc/ui.sc,clan_badge_16_03
|
||||
clan_badge_16_04,sc/ui.sc,clan_badge_16_04
|
||||
clan_badge_16_05,sc/ui.sc,clan_badge_16_05
|
||||
clan_badge_16_06,sc/ui.sc,clan_badge_16_06
|
||||
clan_badge_17_01,sc/ui.sc,clan_badge_17_01
|
||||
clan_badge_17_02,sc/ui.sc,clan_badge_17_02
|
||||
clan_badge_18_01,sc/ui.sc,clan_badge_18_01
|
||||
clan_badge_18_02,sc/ui.sc,clan_badge_18_02
|
||||
clan_badge_19_01,sc/ui.sc,clan_badge_19_01
|
||||
clan_badge_19_02,sc/ui.sc,clan_badge_19_02
|
||||
clan_badge_20_01,sc/ui.sc,clan_badge_20_01
|
||||
clan_badge_20_02,sc/ui.sc,clan_badge_20_02
|
||||
clan_badge_20_03,sc/ui.sc,clan_badge_20_03
|
||||
clan_badge_21_01,sc/ui.sc,clan_badge_21_01
|
||||
clan_badge_21_02,sc/ui.sc,clan_badge_21_02
|
||||
clan_badge_21_03,sc/ui.sc,clan_badge_21_03
|
||||
clan_badge_22_01,sc/ui.sc,clan_badge_22_01
|
||||
clan_badge_22_02,sc/ui.sc,clan_badge_22_02
|
||||
clan_badge_22_03,sc/ui.sc,clan_badge_22_03
|
||||
clan_badge_22_04,sc/ui.sc,clan_badge_22_04
|
||||
clan_badge_22_05,sc/ui.sc,clan_badge_22_05
|
||||
clan_badge_22_06,sc/ui.sc,clan_badge_22_06
|
||||
clan_badge_23_01,sc/ui.sc,clan_badge_23_01
|
||||
clan_badge_23_02,sc/ui.sc,clan_badge_23_02
|
||||
clan_badge_23_03,sc/ui.sc,clan_badge_23_03
|
||||
clan_badge_24_01,sc/ui.sc,clan_badge_24_01
|
||||
clan_badge_24_02,sc/ui.sc,clan_badge_24_02
|
||||
clan_badge_24_03,sc/ui.sc,clan_badge_24_03
|
||||
clan_badge_25_01,sc/ui.sc,clan_badge_25_01
|
||||
clan_badge_25_02,sc/ui.sc,clan_badge_25_02
|
||||
clan_badge_25_03,sc/ui.sc,clan_badge_25_03
|
||||
clan_badge_25_04,sc/ui.sc,clan_badge_25_04
|
||||
clan_badge_25_05,sc/ui.sc,clan_badge_25_05
|
||||
clan_badge_25_06,sc/ui.sc,clan_badge_25_06
|
||||
|
7
assets/csv_logic/alliance_roles.csv
Normal file
7
assets/csv_logic/alliance_roles.csv
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
"Name","Level","TID","CanInvite","CanSendMail","CanChangeAllianceSettings","CanAcceptJoinRequest","CanKick","CanBePromotedToLeader","CanPromoteToOwnLevel"
|
||||
"String","int","String","Boolean","Boolean","Boolean","Boolean","Boolean","Boolean","Boolean"
|
||||
"NonMember",0,,"false","false","false","false",,,
|
||||
"Member",1,"TID_ALLIANCE_ROLE_MEMBER","false","false","false","false","false",,
|
||||
"Leader",20,"TID_ALLIANCE_ROLE_LEADER","true","true","true","true","true","true",
|
||||
"Elder",5,"TID_ALLIANCE_ROLE_ELDER","true","false","false","true","true",,
|
||||
"Co-leader",10,"TID_ALLIANCE_ROLE_CO_LEADER","true","true","true","true","true","true","true"
|
||||
|
6
assets/csv_logic/area_effect_objects.csv
Normal file
6
assets/csv_logic/area_effect_objects.csv
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
"Name","LifeDuration","LifeDurationIncreasePerLevel","Radius","LoopingEffect","OneShotEffect","ScaledEffect","HitEffect","Pushback","MaximumTargets","HitSpeed","Damage","ReducedTowerDamage","HitBiggestTargets","DamageType","Healing","Buff","BuffTime","BuffTimeIncreasePerLevel","BuffNumber","OnlyEnemies","OnlyOwnTroops","Projectile","HitsGround","HitsAir","ProjectileStartHeight","ProjectilesToCenter"
|
||||
"string","int","int","int","string","string","string","string","int","int","int","int","boolean","boolean","string","int","string","int","int","int","boolean","boolean","string","boolean","boolean","int","boolean"
|
||||
"Rage",9000,600,5000,"Spell_rage_loop","Spell_rage_effect","Spell_rage_ground",,,,300,,,,,,"Rage",500,,1,,"TRUE",,"TRUE","TRUE",,
|
||||
"Freeze",6000,400,4000,"Spell_freeze_loop",,"Spell_freeze_ground",,,,,,,,,,"Freeze",6000,400,1,"TRUE",,,"TRUE","TRUE",,
|
||||
"Lightning",1500,,3000,,,,,,,460,,,"TRUE",,,,,,,"TRUE",,"LighningSpell","TRUE","TRUE",10,
|
||||
"Zap",1,,2500,,"Spell_zap_effect",,,,,,90,"TRUE",,,,,,,,"TRUE",,,"TRUE","TRUE",,
|
||||
|
9
assets/csv_logic/arenas.csv
Normal file
9
assets/csv_logic/arenas.csv
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
"Name","TID","SubtitleTID","Arena","TrainingCamp","TrophyLimit","DemoteTrophyLimit","ChestRewardMultiplier","ChestShopPriceMultiplier","MatchCost","RequestSize","MaxDonationCount","IconSWF","IconExportName","MatchmakingMinTrophyDelta","MatchmakingMaxTrophyDelta","MatchmakingMaxSeconds","PvpLocation","DailyDonationCapacityLimit"
|
||||
"string","string","string","Int","boolean","int","int","int","int","int","int","int","string","string","int","int","int","String","int"
|
||||
"TrainingCamp","TID_ARENA_TRAINING_CAMP","TID_INFO_ARENA_TRAINING_CAMP",0,"TRUE",0,0,100,100,0,10,1,"sc/ui_arena.sc","arena_00",0,200,120,"TrainingCamp",60
|
||||
"Arena1","TID_ARENA1","TID_INFO_ARENA1",1,,0,0,100,100,1,10,1,"sc/ui_arena.sc","arena_01",0,200,120,"PvP_goblin",60
|
||||
"Arena2","TID_ARENA2","TID_INFO_ARENA2",2,,400,350,135,130,2,10,2,"sc/ui_arena.sc","arena_02",40,300,120,"PvP_bone",60
|
||||
"Arena3","TID_ARENA3","TID_INFO_ARENA3",3,,800,750,160,150,3,10,2,"sc/ui_arena.sc","arena_03",80,350,120,"PvP_barbarian",60
|
||||
"Arena4","TID_ARENA4","TID_INFO_ARENA4",4,,1000,950,180,165,4,11,2,"sc/ui_arena.sc","arena_04",100,400,120,"PvP_dark",66
|
||||
"Arena5","TID_ARENA5","TID_INFO_ARENA5",5,,1200,1150,200,180,5,12,2,"sc/ui_arena.sc","arena_05",120,450,120,"PvP_spell",72
|
||||
"Arena6","TID_ARENA6","TID_INFO_ARENA6",6,,1400,1350,210,185,6,13,2,"sc/ui_arena.sc","arena_06",140,500,120,"PvP_royal",78
|
||||
|
16
assets/csv_logic/buildings.csv
Normal file
16
assets/csv_logic/buildings.csv
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
"Name","SightRange","DeployTime","ChargeRange","Speed","Hitpoints","HitSpeed","LoadTime","Damage","DamageSpecial","DamageType","Projectile","Range","MinimumRange","AttacksGround","AttacksAir","DeathDamageRadius","DeathDamage","DeathPushBack","Healing","ReloadAfterHits","ReloadTime","LifeTime","ProjectileSpecial","ProjectileEffect","ProjectileEffectSpecial","AreaDamageRadius","TargetOnlyBuildings","DamageTypeVulnerabilities","DamageTypeImmunities","SpecialAttackInterval","BuffOnDamage","BuffOnDamageTime","IgnoreTargetIfImmuneToBuff","StartingBuff","StartingBuffTime","FileName","BlueExportName","BlueTopExportName","RedExportName","RedTopExportName","UseAnimator","AttachedCharacter","AttachedCharacterHeight","DamageEffect","DamageEffectSpecial","DeathEffect","MoveEffect","SpawnEffect","CrowdEffects","ShadowScaleX","ShadowScaleY","ShadowX","ShadowY","ShadowSkew","Pushback","IgnorePushback","Scale","CollisionRadius","Mass","TileSizeOverride","AreaBuff","AreaBuffTime","AreaBuffRadius","AreaBuffOwnTroops","AreaBuffEnemies","Gold","ManaOnDeath","HealthBar","HealthBarOffsetY","ShowHealthNumber","FlyingHeight","DamageExportName","GrowTime","GrowSize","MorphCharacter","MorphEffect","HealOnMorph","AreaEffectOnMorph","AttackStartEffect","AttackStartEffectSpecial","DashCooldown","JumpHeight","DashPushBack","DashRadius","DashDamage","LandingEffect","DashMinRange","DashMaxRange","JumpSpeed","ContinuousEffect","SpawnStartTime","SpawnInterval","SpawnNumber","SpawnLimit","SpawnPauseTime","SpawnCharacterLevelIndex","SpawnCharacter","SpawnCharacterEffect","DeathSpawnCount","DeathSpawnCharacter","Kamikaze","ChargeEffect","TakeDamageEffect","ProjectileStartRadius","ProjectileStartZ","StopMovementAfterMS","WaitMS","IsSummonerTower","NoDeploySizeW","NoDeploySizeH","TID","VariableDamage2","VariableDamageTime1","VariableDamage3","VariableDamageTime2","TargettedDamageEffect1","TargettedDamageEffect2","TargettedDamageEffect3","DamageLevelTransitionEffect12","DamageLevelTransitionEffect23","FlameEffect1","FlameEffect2","FlameEffect3","TargetEffectY","ForceAttackAnimationToEnd","SelfAsAoeCenter","HidesWhenNotAttacking","HideTimeMs","TargetedHitEffect","UpTimeMs","HideEffect","AppearEffect","ManaCollectAmount","ManaGenerateTimeMs","ManaGenerateLimit","HasRotationOnTimeline","TurretMovement","ProjectileYOffset","ChargeSpeedMultiplier","RandomDeployDelay","DeployBaseAnimExportName","JumpEnabled","SightClip","Egg"
|
||||
"string","int","int","int","int","int","int","int","int","int","string","string","int","int","boolean","boolean","int","int","int","int","int","int","int","string","string","string","int","boolean","string","string","int","string","int","boolean","string","int","string","string","string","string","string","boolean","string","int","string","string","string","string","string","boolean","int","int","int","int","int","int","boolean","int","int","int","int","string","int","int","boolean","boolean","int","int","string","int","boolean","int","string","int","int","string","string","boolean","string","string","string","int","int","int","int","int","string","int","int","int","string","int","int","int","int","int","int","string","string","int","string","boolean","string","string","int","int","int","int","boolean","int","int","string","int","int","int","int","string","string","string","string","string","string","string","string","int","boolean","boolean","boolean","int","string","int","string","string","int","int","int","boolean","int","int","int","int","string","boolean","int","string"
|
||||
"KingTower",8000,,,,2400,1000,500,,,,"KingProjectile",8000,,"true","true",,,,,,,,,"King_attack",,,,,,,,,,"SummonerBuff",-1,"sc/building_tower.sc","KingTower_blue",,"KingTower_red",,,,2400,"musketeer_hit",,"King_player_die",,,,102,60,-6,2,13,,,100,1400,,2,,,,,,,,"Summoner",-27,"true",,"filter_damage",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,300,3500,,,,18,16,"TID_CHARACTER_WIZARD",,,,,,,,,,,,,,,,,,,,,,,,,"true",5,400,,,,,,
|
||||
"PrincessTower",8500,,,,1400,800,,,,,"PrincessProjectile",8500,,"true","true",,,,,,,,,"ArcherTowerAttack",,,,,,,,,,,,"sc/building_tower.sc","StarTower_base_blue","StarTower_top_blue","StarTower_base_red","StarTower_top_red",,"PrincessB",2200,,,"TowerExplode",,,"true",102,70,-5,5,13,,,100,1000,,,,,,,,,,"Tower",,"true",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,300,3000,,,"true",11,21,"TID_BUILDING_ARCHER_TOWER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"Cannon",7000,1000,,,700,800,,,,,"TowerCannonball",7000,,"true",,,,,,,,60000,,"cannon_fire_projectile",,,,,,,,,,,,"sc/building_basic_cannon.sc","building_cannon",,"building_enemy_cannon",,,,,,,"Cannon_die",,"Cannon_deploy",,90,-90,-7,10,10,,,100,600,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1000,2500,,,,,,"TID_BUILDING_CANNON",,,,,,,,,,,,,,,,,,,,,,,,,"true",15,,,,,,,
|
||||
"GoblinHut",,1000,,,700,10000,,,,,,,,"true",,,,,,,,60000,,,,,,,,,,,,,,"sc/building_goblin_hut.sc","building_goblinHut_player",,"building_goblinHut_enemy",,,,,,,"goblin_hut_die",,"goblin_hut_deploy",,90,60,-8,,5,,,100,1000,,,,,,,,,,,,,,"filter_damage_wobble",,,,,,,,,,,,,,,,,,,,,1,,4950,2,"SpearGoblin",,,,,,,400,400,,,,,,"TID_BUILDING_GOBLIN_HUT",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"Mortar",13000,3000,,,500,5000,4000,,,,"MortarProjectile",13000,5000,"true",,,,,,,,60000,,"mortar_attack",,,,,,,,,,,,"sc/building_mortar.sc","building_mortar1",,"building_mortar1_enemy",,"true",,,,,"mortar_die",,,,80,80,,,35,,,140,600,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1000,1000,,,,,,"TID_BUILDING_MORTAR",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"InfernoTower",6500,1000,,,840,400,1200,20,,,,6500,,"true","true",,,,,,,60000,,,,,,,,,,,,,,"sc/building_inferno_tower.sc","inferno_blue",,"inferno_red",,"true",,,"inferno_hit_effect",,"Cannon_die",,,,90,70,-5,15,35,,,120,600,,,,,,,,,,,,,,,,,,,,,"knight_attack_start",,,,,,,,,,,"Inferno_continuous",,,,,,,,,,,,,,1000,1000,,,,,,"TID_BUILDING_INFERNO",75,2000,400,2000,"inferno_beam_lvl1","inferno_beam_lvl2","inferno_beam_lvl3","inferno_stage2_root","inferno_stage3_root","inferno_muzzle","inferno_muzzle_stage2","inferno_muzzle_stage3",-80,,,,,,,,,,,,,,,,,,,,
|
||||
"BombTower",6500,1000,,,800,1900,1400,,,,"BombTowerProjectile",6500,,"true",,,,,,,,60000,,,,,,,,,,,,,,"sc/building_bomb_tower.sc","building_bomb_tower_blue","building_bomb_tower_top_blue","building_bomb_tower_red","building_bomb_tower_top_red",,"Bomber",3200,,,"BombTower_die",,"Cannon_deploy",,100,85,-8,,35,,,100,600,,,,,,,,,,,-15,,,"filter_damage_wobble",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4500,,,,,,"TID_BUILDING_BOMB_TOWER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"BarbarianHut",,1000,,,700,10000,,,,,,,,"true",,,,,,,,60000,,,,,,,,,,,,,,"sc/building_barbarian_hut.sc","building_barbarian_hut_blue",,"building_barbarian_hut_red",,,,,,,"goblin_hut_die",,,,90,60,-8,,5,,,100,1000,,,,,,,,,,,,,,"filter_damage_wobble",,,,,,,,,,,,,,,,,,,,500,2,,11350,2,"Barbarian",,,,,,,400,400,,,,,,"TID_BUILDING_BARBARIAN_HUT",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"Tesla",6000,1000,,,340,700,,60,,,,6000,,"true","true",,,,,,,60000,,,,,,,,,,,,,,"sc/building_tesla.sc","tesla1_blue",,"tesla1_red",,,,,"tesla_hit_effect",,"tesla_die",,"tesla_deploy",,80,80,,,35,,,90,500,,,,,,,,,,,10,,,,,,,,,,"Tesla_beam",,,,,,,,,,,,,,,,,,,,,,,,,1000,1000,,,,,,"TID_BUILDING_TESLA",,,,,,,,,,,,,-60,,,"true",800,"Tesla_beam",800,"tesla_down","tesla_up",,,,,,,,,,,,
|
||||
"ElixirCollector",,1000,,,800,,,,,,,,,,,,,,,,,70000,,,,,,,,,,,,,,"sc/building_elixir_collector.sc","building_elixir_pump_blue",,"building_elixir_pump_red",,,,,,,"tesla_die",,"tesla_deploy",,55,50,-15,,35,,,100,1000,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"TID_BUILDING_ELIXIR_COLLECTOR",,,,,,,,,,,,,,,,,,,,,,1,9950,,,,,,,,,,
|
||||
"Xbow",13000,3000,,,900,300,,,,,"xbow_projectile",13000,,"true","true",,,,,,,40000,,"ArcherTowerAttack",,,,,,,,,,,,"sc/building_xbow.sc","building_xbow_attack1_1",,"building_xbow_red_attack1",,,,,,,"Cannon_die",,"Cannon_deploy",,80,80,,,35,,,100,600,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1000,2400,,,,,,"TID_BUILDING_XBOW",,,,,,,,,,,,,,,,,,,,,,,,,"true",10,,,,,,,
|
||||
"Tombstone",,1000,,,200,10000,,,,,,,,"true",,,,,,,,60000,,,,,,,,,,,,,,"sc/building_tombstone.sc","building_tombstone_blue",,"building_tombstone_red",,,,,,,"tombstone_die",,"tombstone_deploy",,90,60,-8,,5,,,100,1000,,,,,,,,,,,,,,"filter_damage_wobble",,,,,,,,,,,,,,,,,,,,,1,,3950,2,"Skeleton",,6,"Skeleton",,,,400,400,,,,,,"TID_BUILDING_TOMBSTONE",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"GiantSkeletonBomb",,1000,,,,,,,,,,,,"true","true",3000,720,1800,,,,,,,,,,,,,,,,,,"sc/building_mega_bomb.sc","giant_skeleton_bomb_blue",,"giant_skeleton_bomb_red",,,,,,,"MegaBombExplodeSkeleton",,"GiantSkeleton_Bomb_deploy",,,,,,,,,100,450,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,400,,,,,,"TID_BUILDING_GIANT_SKELETON_BOMB",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"BalloonBomb",,1000,,,,,,,,,,,,"true","true",2000,100,,,,,,,,,,,,,,,,,,,"sc/building_mega_bomb.sc","balloon_bomb_blue",,"balloon_bomb_red",,,,,,,"MegaBombExplodeBalloon",,"Balloon_Bomb_deploy",,,,,,,,,100,450,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,400,,,,,,"TID_BUILDING_GIANT_SKELETON_BOMB",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
|
15
assets/csv_logic/character_buffs.csv
Normal file
15
assets/csv_logic/character_buffs.csv
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
"Name","IconFileName","IconExportName","ChangeControl","DamagePerSecond","DamageType","DamageReduction","HealReduction","ImmuneToAntiMagic","HitSpeedMultiplier","SpeedMultiplier","SpawnSpeedMultiplier","NegatesBuffs","ImmunityToBuffs","Invisible","RemoveOnAttack","TimeToEmptyBankedDamage","RemoveOnHeal","DamageMultiplier","Panic","Effect","FilterFile","FilterExportName","SizeMultiplier","StaticTarget","HitsToDestroy","DisableRadius","DisabledCooldown","IgnorePushBack","MarkEffect"
|
||||
"String","String","String","Boolean","int","String","int","int","Boolean","int","int","int","String","String","Boolean","Boolean","int","Boolean","int","boolean","String","String","String","int","boolean","int","int","int","boolean","String"
|
||||
"Rage",,,,,,,,,135,135,135,,,,,,,,,"Spell_rage_hit_effect","sc/effects.sc","filter_rage",,,,,,,"Healing"
|
||||
"Flaming","sc/ui.sc","buff_icon_small_fire",,25,"Fire",,,"TRUE",,,,"Freeze","Freeze",,,,,,,"Burner","sc/level.sc","filter_burn",,,,,,,
|
||||
"Freeze",,,,,,,,"TRUE",-100,-100,-100,"Flaming","Flaming",,,,,,,,"sc/level.sc","filter_cold",,,,,,,
|
||||
"Poisoned",,,,,"Poison",,,"TRUE",,,,,,,,7000,"TRUE",,,"PoisonSteam","sc/level.sc","filter_poison",,,,,,,
|
||||
"Smoke","sc/ui.sc","buff_icon_small_smoke",,,,,,"TRUE",-100,-50,,,,"TRUE",,,,,,,"sc/level.sc","filter_cold",,,,,,,
|
||||
"Supersize","sc/ui.sc",,,,,,,,,,,"Poisoned",,,,,,,,"Growth",,,150,,,,,,"Healing"
|
||||
"Root","sc/ui.sc",,,,,,,,,-100,,,,,,,,,,"Root",,,,"true",,,,"true","Healing"
|
||||
"Stun","sc/ui.sc",,,,,,,,,-100,,,,,,,,,,"Stun",,,,"true",,,,,
|
||||
"Panic","sc/ui.sc","buff_icon_small_mindcotroll",,,,,,,,,,,,,,,,,"true",,,,,,,,,,"Healing"
|
||||
"Maul",,,,,,,,,-50,-50,,,,,,,"TRUE",,,,,,,,,,,,
|
||||
"Steroid","sc/ui.sc","buff_icon_small_bloodrage",,,,,100,,140,130,,,,,,,,,,,,,,,,,,,"Healing"
|
||||
"SummonerBuff",,,,,,,90,"TRUE",,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,90,,,,,,,,,,,,,,,,,,,,,,
|
||||
|
25
assets/csv_logic/characters.csv
Normal file
25
assets/csv_logic/characters.csv
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
"Name","SightRange","DeployTime","ChargeRange","Speed","Hitpoints","HitSpeed","LoadTime","Damage","DamageSpecial","DamageType","Projectile","Range","MinimumRange","AttacksGround","AttacksAir","DeathDamageRadius","DeathDamage","DeathPushBack","Healing","ReloadAfterHits","ReloadTime","LifeTime","ProjectileSpecial","ProjectileEffect","ProjectileEffectSpecial","AreaDamageRadius","TargetOnlyBuildings","DamageTypeVulnerabilities","DamageTypeImmunities","SpecialAttackInterval","BuffOnDamage","BuffOnDamageTime","IgnoreTargetIfImmuneToBuff","StartingBuff","StartingBuffTime","FileName","BlueExportName","BlueTopExportName","RedExportName","RedTopExportName","UseAnimator","AttachedCharacter","AttachedCharacterHeight","DamageEffect","DamageEffectSpecial","DeathEffect","MoveEffect","SpawnEffect","CrowdEffects","ShadowScaleX","ShadowScaleY","ShadowX","ShadowY","ShadowSkew","Pushback","IgnorePushback","Scale","CollisionRadius","Mass","TileSizeOverride","AreaBuff","AreaBuffTime","AreaBuffRadius","AreaBuffOwnTroops","AreaBuffEnemies","Gold","ManaOnDeath","HealthBar","HealthBarOffsetY","ShowHealthNumber","FlyingHeight","DamageExportName","GrowTime","GrowSize","MorphCharacter","MorphEffect","HealOnMorph","AreaEffectOnMorph","AttackStartEffect","AttackStartEffectSpecial","DashCooldown","JumpHeight","DashPushBack","DashRadius","DashDamage","LandingEffect","DashMinRange","DashMaxRange","JumpSpeed","ContinuousEffect","SpawnStartTime","SpawnInterval","SpawnNumber","SpawnLimit","SpawnPauseTime","SpawnCharacterLevelIndex","SpawnCharacter","SpawnCharacterEffect","DeathSpawnCount","DeathSpawnCharacter","Kamikaze","ChargeEffect","TakeDamageEffect","ProjectileStartRadius","ProjectileStartZ","StopMovementAfterMS","WaitMS","IsSummonerTower","NoDeploySizeW","NoDeploySizeH","TID","VariableDamage2","VariableDamageTime1","VariableDamage3","VariableDamageTime2","TargettedDamageEffect1","TargettedDamageEffect2","TargettedDamageEffect3","DamageLevelTransitionEffect12","DamageLevelTransitionEffect23","FlameEffect1","FlameEffect2","FlameEffect3","TargetEffectY","ForceAttackAnimationToEnd","SelfAsAoeCenter","HidesWhenNotAttacking","HideTimeMs","TargetedHitEffect","UpTimeMs","HideEffect","AppearEffect","ManaCollectAmount","ManaGenerateTimeMs","ManaGenerateLimit","HasRotationOnTimeline","TurretMovement","ProjectileYOffset","ChargeSpeedMultiplier","RandomDeployDelay","DeployBaseAnimExportName","JumpEnabled","SightClip","Egg"
|
||||
"string","int","int","int","int","int","int","int","int","int","string","string","int","int","boolean","boolean","int","int","int","int","int","int","int","string","string","string","int","boolean","string","string","int","string","int","boolean","string","int","string","string","string","string","string","boolean","string","int","string","string","string","string","string","boolean","int","int","int","int","int","int","boolean","int","int","int","int","string","int","int","boolean","boolean","int","int","string","int","boolean","int","string","int","int","string","string","boolean","string","string","string","int","int","int","int","int","string","int","int","int","string","int","int","int","int","int","int","string","string","int","string","boolean","string","string","int","int","int","int","boolean","int","int","string","int","int","int","int","string","string","string","string","string","string","string","string","int","boolean","boolean","boolean","int","string","int","string","string","int","int","int","boolean","int","int","int","int","string","boolean","int","string"
|
||||
"Knight",6000,1000,,60,650,1100,700,75,,,,1500,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_knight.sc","Knight",,"Knight_enemy",,"true",,,"knight_hit",,"knight_die","knight_steps","knight_deploy",,85,85,,-10,35,,,100,500,6,,,,,,,,,"Medium",35,,,"filter_damage",,,,,,,"knight_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_KNIGHT",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Archer",6000,1000,,60,125,1200,1000,,,,"ArcherArrow",5500,,"true","true",,,,,,,,,"ArcherAttack",,,,,,,,,,,,"sc/chr_archer.sc","archer1",,"archer1_enemy",,"true",,,,,"ArcherDie","ArcherSteps","ArcherDeploy",,75,75,,-15,25,,,87,500,3,,,,,,,,,"Small",-10,,,"filter_damage",,,,,,,"ArcherAttackStart",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_ARCHER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
"Goblin",6000,1000,,120,80,1100,900,50,,,,1000,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_goblin.sc","goblin1",,"goblin1_enemy",,"true",,,"goblins_hit",,"goblins_die","goblins_steps","goblins_deploy",,50,50,-5,5,35,,,100,500,2,,,,,,,,,"Small",,,,"filter_damage",,,,,,,"goblins_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,350,350,,,,,,"TID_CHARACTER_GOBLIN",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
"Giant",8000,1000,,45,1700,1500,1000,115,,,,2000,,"true",,,,,,,,,,,,,"true",,,,,,,,,"sc/chr_giant.sc","giant1",,"giant1_enemy",,"true",,,"giant_hit",,"giant_die","giant_steps","giant_deploy","TRUE",85,80,,,25,,"true",100,750,18,,,,,,,,,"High",,,,"filter_damage_wobble",,,,,,,"giant_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,640,100,,,,"TID_CHARACTER_GIANT",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Pekka",6000,3000,,45,3000,1700,1200,450,,,,1500,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_pekka.sc","pekka",,"pekka_enemy",,"true",,,"pekka_hit",,"pekka_die","pekka_steps","pekka_deploy","TRUE",80,80,,,35,,"true",100,750,18,,,,,,,,,"Medium",,,,"filter_damage_wobble",,,,,,,"pekka_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_PEKKA",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Minion",6000,1000,,90,85,1000,500,,,,"MinionSpit",2500,,"true","true",,,,,,,,,"minion_attack",,,,,,,,,,,,"sc/chr_minion.sc","minion1",,"minion1_enemy",,"true",,,,,"minion_die","minion_steps","minion_deploy",,85,-60,,20,,,,85,500,2,,,,,,,,,"Small",,,1500,,,,,,,,"minion_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_MINION",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
"Balloon",8000,3000,,60,760,3000,2800,600,,,,400,,"true",,,,,,,,,,,,,"true",,,,,,,,,"sc/chr_balloon.sc","balloon1",,"balloon1_enemy",,"true",,,"balloon_hit",,"balloon_die","balloon_steps","balloon_deploy",,85,50,,-10,15,,"true",100,300,6,,,,,,,,,"Small",,,3000,,,,,,,,"balloon_attack_start",,,,,,,,,,,,,,,,,,,,,"BalloonBomb",,,,450,450,,,,,,"TID_CHARACTER_BALLOON",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Witch",6000,1000,,60,500,700,200,,,,"WitchProjectile",5500,,"true","true",,,,,,,,,,,,,,,,,,,,,"sc/chr_witch.sc","witch1",,"witch1_enemy",,"true",,,"witch_hit",,"witch_die","witch_steps","witch_deploy",,80,80,,,35,,,100,500,4,,,,,,,,,"Medium",,,,"filter_damage",,,,,,,"witch_attack_start",,,,,,,,,,,,,300,3,,6900,6,"Skeleton","witch_deploy_skeleton",,,,,,450,450,,,,,,"TID_CHARACTER_WITCH",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Skeleton",6000,1000,,90,25,1000,500,25,,,,750,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_skeleton.sc","skeleton1",,"skeleton1",,"true",,,"skeleton_hit",,"skeleton_die","skeleton_steps","skeleton_deploy",,50,50,-5,5,35,,,130,500,1,,,,,,,,,"Small",,,,"filter_damage",,,,,,,"skeleton_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,350,350,,,,,,"TID_CHARACTER_SKELETON",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
"Barbarian",6000,1000,,60,250,1500,1000,85,,,,1200,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_barbarian.sc","barbarian1",,"barbarian1_enemy",,"true",,,"barbarian_hit",,"barbarian_die","barbarian_steps","barbarian_deploy",,85,85,,-10,35,,,95,500,4,,,,,,,,,"Medium",,,,"filter_damage",,,,,,,"barbarian_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_BARBARIAN",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
"Golem",8000,3000,,45,2300,2500,1500,130,,,,1500,,"true",,2000,200,1800,,,,,,,,,"true",,,,,,,,,"sc/chr_golem.sc","golem1",,"golem1_enemy",,"true",,,"golem_hit",,"golem_die","golem_steps","golem_deploy",,-85,80,,,25,,"true",130,750,20,,,,,,,,,"High",,,,"filter_damage_wobble",,,,,,,"golem_attack_start",,,,,,,,,,,,,,,,,,,,2,"GolemSmall",,,,450,450,,,,,,"TID_CHARACTER_GOLEM",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"GolemSmall",8000,1000,,45,1150,2500,1500,65,,,,750,,"true",,2000,100,1800,,,,,,,,,"true",,,,,,,,,"sc/chr_golem.sc","golem1",,"golem1_enemy",,"true",,,"golem_hit",,"golem_die","golem_steps","golem_deploy","TRUE",50,50,-5,5,35,,,75,500,6,,,,,,,,,"Medium",,,,"filter_damage",,,,,,,"golem_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,350,350,,,,,,"TID_CHARACTER_SMALL_GOLEM",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Valkyrie",6000,1000,,60,700,1600,1400,110,,,,1500,,"true",,,,,,,,,,,,2000,,,,,,,,,,"sc/chr_valkyrie.sc","valkyrie1",,"valkyrie1_enemy",,"true",,,"valkyrie_hit",,"valkyrie_die","valkyrie_steps","valkyrie_deploy",,-85,80,,,25,,"true",140,500,5,,,,,,,,,"Medium",,,,"filter_damage",,,,,,,"valkyrie_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_VALKYRIE",,,,,,,,,,,,,,"true","true",,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Bomber",6000,1000,,60,150,2000,1800,,,,"BombSkeletonProjectile",5000,,"true",,,,,,,,,,"bomber_attack",,,,,,,,,,,,"sc/chr_bomber.sc","chr_bomber",,"chr_bomber_RED",,"true",,,,,"bomber_die","bomber_steps","bomber_deploy",,50,50,-5,5,35,,,100,500,4,,,,,,,,,"Small",,,,"filter_damage",,,,,,,"bomber_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,350,350,,,,,,"TID_CHARACTER_BOMBER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Musketeer",6500,1000,,60,340,1100,600,,,,"MusketeerProjectile",6500,,"true","true",,,,,,,,,"musketeer_attack",,,,,,,,,,,,"sc/chr_musketeer.sc","chr_musketeer_blue",,"chr_musketeer",,"true",,,"musketeer_hit",,"musketeer_die","musketeer_steps","musketeer_deploy",,80,80,,-10,35,,,100,750,5,,,,,,,,,"Medium",,,,"filter_damage",,,,,,,"musketeer_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_MUSKETEER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"BabyDragon",6000,1000,,90,800,1800,1300,,,,"BabyDragonProjectile",3500,,"true","true",,,,,,,,,"dragon_attack_start",,,,,,,,,,,,"sc/chr_baby_dragon.sc","baby_dragon",,"baby_dragon_enemy",,"true",,,,,"baby_dragon_die","baby_dragon_steps","baby_dragon_deploy",,85,-60,,20,,,"true",100,500,5,,,,,,,,,"High",,,3500,,,,,,,,"baby_dragon_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,500,1900,,,,,,"TID_CHARACTER_BABY_DRAGON",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"MiniPekka",6000,1000,,90,650,1800,1300,450,,,,1500,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_mini_pekka.sc","minipekka",,"minipekka_red",,"true",,,"mini_pekka_hit",,"mini_pekka_die","mini_pekka_steps","mini_pekka_deploy",,80,80,,,35,,"true",100,450,4,,,,,,,,,"Medium",,,,"filter_damage_wobble",,,,,,,"mini_pekka_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_MINIPEKKA",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Wizard",6000,1000,,60,340,1700,1200,,,,"chr_wizardProjectile",5500,,"true","true",,,,,,,,,,,,,,,,,,,,,"sc/chr_wizard.sc","wizard1",,"wizard1_red",,"true",,,"chr_wizard_hit",,"chr_wizard_die","chr_wizard_steps","chr_wizard_deploy",,80,80,,,35,,,87,700,5,,,,,,,,,"Medium",,,,"filter_damage",,,,,,,"chr_wizard_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,550,1500,,,,,,"TID_CHARACTER_WIZARD",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"Prince",6000,1000,250,60,820,1500,1000,160,350,,,2500,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_prince.sc","Prince",,"Prince_red",,"true",,,"prince_hit","prince_charge_hit","prince_die","prince_steps","prince_deploy",,80,80,,,35,,"true",92,650,6,,,,,,,,,"Medium",,,,"filter_damage_wobble",,,,,,,"prince_attack_start",,,,,,,,,,,,,,,,,,,,,,,"prince_charge",,,,,,,,,"TID_CHARACTER_PRINCE",,,,,,,,,,,,,,,,,,,,,,,,,,,,230,,"filter_deploy_unit_default",,,
|
||||
"SpearGoblin",6000,1000,,120,52,1300,1100,,,,"SpearGoblinProjectile",5500,,"true","true",,,,,,,,,"spear_goblin_attack",,,,,,,,,,,,"sc/chr_goblin_archer.sc","goblinArcher_blue",,"goblinArcher",,"true",,,,,"spear_goblin_die","spear_goblin_steps","spear_goblin_deploy",,75,75,,-15,25,,,133,500,1,,,,,,,,,"Small",-10,,,"filter_damage",,,,,,,"spear_goblin_attack_start",,,,,,,,,,,,,,,,,,,,,,,,,,600,,,,,,"TID_CHARACTER_SPEAR_GOBLIN",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
"GiantSkeleton",6000,1000,,60,2000,1500,1000,90,,,,2000,,"true",,,,,,,,,,,,,,,,,,,,,,"sc/chr_giant_skeleton.sc","giant_skeleton",,"giant_skeleton_enemy",,"true",,,"giant_skeleton_hit",,"giant_skeleton_die","giant_skeleton_steps","giant_skeleton_deploy","TRUE",50,50,-5,5,35,,"true",105,1200,15,,,,,,,,,"High",,,,"filter_damage_wobble",,,,,,,"giant_skeleton_attack_start",,,,,,,,,,,,,,,,,,,,1,"GiantSkeletonBomb",,,,450,450,,,,,,"TID_CHARACTER_GIANT_SKELETON",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"filter_deploy_unit_default",,,
|
||||
"HogRider",10000,1000,,120,800,1500,1000,170,,,,1400,,"true",,,,,,,,,,,,,"true",,,,,,,,,"sc/chr_hog_rider.sc","hog_rider",,"hog_rider_red",,"true",,,"hog_rider_hit",,"hog_rider_die","hog_rider_steps","hog_rider_deploy",,85,85,,-10,35,,,95,600,4,,,,,,,,,"Medium",-15,,,"filter_damage",,,,,,,"hog_rider_attack_start",,,4000,,,,"hog_rider_landing",,,160,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_HOG_RIDER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default","true",3000,
|
||||
"PrincessB",6000,1000,,60,125,1200,1000,,,,"PrincessProjectile",5500,,"true","true",,,,,,,,,"ArcherAttack",,,,,,,,,,,,"sc/chr_princess_twins.sc","princessB",,"princessB_red",,"true",,,,,"ArcherDie","ArcherSteps","ArcherDeploy",,75,75,,-15,25,,,100,500,3,,,,,,,,,"Small",-10,,,"filter_damage",,,,,,,"ArcherAttackStart",,,,,,,,,,,,,,,,,,,,,,,,,450,450,,,,,,"TID_CHARACTER_ARCHER",,,,,,,,,,,,,,,,,,,,,,,,,,,,,400,"filter_deploy_unit_default",,,
|
||||
|
248
assets/csv_logic/chest_order.csv
Normal file
248
assets/csv_logic/chest_order.csv
Normal file
|
|
@ -0,0 +1,248 @@
|
|||
"Name","Chest",,,,
|
||||
"String","String",,,,
|
||||
"Newbie1","Newbie1",,,,
|
||||
"Newbie2","Newbie2",,,,
|
||||
"Newbie3","NewbieRandom",,,,
|
||||
"Newbie4","NewbieFixedEpic",,,,
|
||||
"Newbie5","NewbieRandom",,,,
|
||||
"Newbie6","NewbieRandom",,,,
|
||||
"MainCycle","Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Magic",,0,0,1
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Magic",,0,0,1
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Magic",,0,0,1
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
,"Silver",,1,0,0
|
||||
,"Gold",,0,1,0
|
||||
,"Silver",,1,0,0
|
||||
|
7
assets/csv_logic/damage_types.csv
Normal file
7
assets/csv_logic/damage_types.csv
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
"Name","Efficiency","NumberOfJumps","MinBuffChance","MaxBuffChance","BankDamage","Buff","DamageEffect","BuffTime","TID"
|
||||
"String","int","int","int","int","int","String","String","int","String"
|
||||
"Physical",100,,,,,,"Damage",,"TID_DAMAGE_TYPE_PHYSICAL"
|
||||
"Fire",100,,,,,,"Damage",,"TID_DAMAGE_TYPE_FIRE"
|
||||
"Poison",100,,,,25,"Poisoned","Damage",,"TID_DAMAGE_TYPE_POISON"
|
||||
"Electrical",100,4,,,,,"Damage",,"TID_DAMAGE_TYPE_ELECTRICAL"
|
||||
"Cold",100,,100,100,,"Freeze","Damage",2000,"TID_DAMAGE_TYPE_COLD"
|
||||
|
172
assets/csv_logic/decos.csv
Normal file
172
assets/csv_logic/decos.csv
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
"Name","FileName","ExportName","Layer","LowendLayer","ShadowScale","ShadowX","ShadowY","ShadowSkew","CollisionRadius","Effect"
|
||||
"string","string","string","string","string","int","int","int","int","int","string"
|
||||
"Grassland_tree1","sc/level.sc","Grassland_2x2_tree1","Object","Ground",80,-24,-31,4,,
|
||||
"Grassland_tree2","sc/level.sc","Grassland_2x2_tree2","Object","Ground",80,-24,-31,4,,
|
||||
"Grassland_tree3","sc/level.sc","Grassland_2x2_tree3","Object","Ground",85,-26,-39,4,,
|
||||
"Grassland_tree4","sc/level.sc","Grassland_2x2_tree4","Object","Ground",80,-23,-28,2,,
|
||||
"Grassland_rock1","sc/level.sc","Grassland_1x1_rock1","Object","Ground",63,-5,5,12,,
|
||||
"Grassland_rock2","sc/level.sc","Grassland_2x2_rock2","Object","Ground",88,-3,-5,,,
|
||||
"Grassland_rock3","sc/level.sc","Grassland_1x1_rock3","Object","Ground",71,-4,1,,,
|
||||
"Grassland_bush1","sc/level.sc","Grassland_1x1_bush1","Object","Ground",91,-4,-8,28,,
|
||||
"Deco_fireplace","sc/effects.sc","Deco_fireplace","Object","Ground",1,,,,,"DecoFireplaceLoop"
|
||||
"deco_chest_wood1","sc/level.sc","deco_chest_wood1","Object","Ground",92,,-18,67,,
|
||||
"deco_chest_iron1","sc/level.sc","deco_chest_iron1","Object","Ground",92,,-18,67,,
|
||||
"deco_chest_silver1","sc/level.sc","deco_chest_silver1","Object","Ground",92,,-18,67,,
|
||||
"deco_chest_gold1","sc/level.sc","deco_chest_gold1","Object","Ground",92,,-18,67,,
|
||||
"deco_chest_magical1","sc/level.sc","deco_chest_magical1","Object","Ground",92,,-18,67,,
|
||||
"Grassland_1x1_flower1","sc/level.sc","Grassland_1x1_flower1","Ground","Ground",,,,,,
|
||||
"Grassland_1x1_flower2","sc/level.sc","Grassland_1x1_flower2","Ground","Ground",,,,,,
|
||||
"Grassland_1x1_flower3","sc/level.sc","Grassland_1x1_flower3","Ground","Ground",,,,,,
|
||||
"Grassland_1x1_flower4","sc/level.sc","Grassland_1x1_flower4","Ground","Ground",,,,,,
|
||||
"Grassland_3x3_flowers1","sc/level.sc","Grassland_3x3_flowers1","Ground","Ground",,,,,,
|
||||
"Grassland_3x3_flowers2","sc/level.sc","Grassland_3x3_flowers2","Ground","Ground",,,,,,
|
||||
"Grassland_rock1_withHaze","sc/level.sc","Grassland_1x1_rock1","Object","Ground",77,-5,7,12,,"Background_haze"
|
||||
"Grassland_rock2_withHaze","sc/level.sc","Grassland_2x2_rock2","Object","Ground",94,-3,-5,,,"Background_haze"
|
||||
"Grassland_rock3_withHaze","sc/level.sc","Grassland_1x1_rock3","Object","Ground",78,-4,1,,,"Background_haze"
|
||||
"WoodWall_single_1","sc/level.sc","WoodWall_single_1","Object","Ground",83,,,38,,
|
||||
"WoodWall_single_2","sc/level.sc","WoodWall_single_2","Object","Ground",83,,,38,,
|
||||
"WoodWall_single_3","sc/level.sc","WoodWall_single_3","Object","Ground",79,,,38,,
|
||||
"WoodWall_multi_horizontal_1","sc/level.sc","WoodWall_multi_horizontal_1","Object","Ground",95,,3,50,,
|
||||
"WoodWall_multi_vertical_1","sc/level.sc","WoodWall_multi_vertical_1","Object","Ground",98,-8,-6,18,,
|
||||
"ChestTemplate","sc/effects.sc","Deco_fireplace","Object","Ground",100,,,,,
|
||||
"Arena_stand_right_1","sc/level.sc","arena_stand_right_1","Object","Ground",95,-6,-6,,,
|
||||
"Arena_stand_left_1","sc/level.sc","arena_stand_left_1","Object","Ground",95,-6,-6,,,
|
||||
"Arena_stand_right_full_1","sc/level.sc","arena_stand_right_full_1","Object","Ground",95,-6,-6,,,
|
||||
"Arena_stand_left_full_1","sc/level.sc","arena_stand_left_full_1","Object","Ground",95,-6,-6,,,
|
||||
"Cloud_object","sc/level.sc","Cloud_object","Object","Ground",,-4,-8,28,,"Clouds1"
|
||||
"arena_stand_right_full_1_blue","sc/level.sc","arena_stand_right_full_1_blue","Object","Ground",95,-6,-6,,,
|
||||
"arena_stand_left_full_1_blue","sc/level.sc","arena_stand_left_full_1_blue","Object","Ground",95,-6,-6,,,
|
||||
"arena_stand_right_full_1_red","sc/level.sc","arena_stand_right_full_1_red","Object","Ground",95,-6,-6,,,
|
||||
"arena_stand_left_full_1_red","sc/level.sc","arena_stand_left_full_1_red","Object","Ground",95,-6,-6,,,
|
||||
"royal_arena_bridge","sc/level_royal_arena.sc","royal_arena_bridge","Object","Ground",95,-9,58,,,
|
||||
"royal_red_deco","sc/level_royal_arena.sc","royal_red_deco","Object","Ground",61,,5,22,496,
|
||||
"royal_blue_deco","sc/level_royal_arena.sc","royal_blue_deco","Object","Ground",67,2,2,31,496,
|
||||
"royal_bucket","sc/level_royal_arena.sc","royal_bucket","Object","Ground",94,-5,73,6,,
|
||||
"royal_red_endwall1","sc/level_royal_arena.sc","royal_red_endwall1","Object","Ground",95,,-48,4,,
|
||||
"royal_red_tower1","sc/level_royal_arena.sc","royal_red_tower1","Object","Ground",95,,,37,,
|
||||
"royal_red_tower2","sc/level_royal_arena.sc","royal_red_tower2","Object","Ground",95,,-32,18,,
|
||||
"royal_red_wall_middle","sc/level_royal_arena.sc","royal_red_wall_middle","Object","Ground",100,21,-88,26,,
|
||||
"royal_mid_tower","sc/level_royal_arena.sc","royal_mid_tower","Object","Ground",95,-8,76,14,,
|
||||
"royal_red_endwall2","sc/level_royal_arena.sc","royal_red_endwall2","Object","Ground",95,35,-48,59,,
|
||||
"royal_blue_endwall1","sc/level_royal_arena.sc","royal_blue_endwall1","Object","Ground",96,-12,59,24,,
|
||||
"royal_blue_endwall2","sc/level_royal_arena.sc","royal_blue_endwall2","Object","Ground",95,-13,72,11,,
|
||||
"royal_blue_roof_left","sc/level_royal_arena.sc","royal_blue_roof_left","Object","Ground",95,-28,-139,,,
|
||||
"royal_blue_roof_right","sc/level_royal_arena.sc","royal_blue_roof_right","Object","Ground",95,-4,-112,11,,
|
||||
"royal_blue_tower1","sc/level_royal_arena.sc","royal_blue_tower1","Object","Ground",95,2,11,10,,
|
||||
"royal_blue_tower2","sc/level_royal_arena.sc","royal_blue_tower2","Object","Ground",94,24,-111,53,,
|
||||
"royal_blue_wall_middle","sc/level_royal_arena.sc","royal_blue_wall_middle","Object","Ground",95,-7,43,42,,
|
||||
"royal_red_roof_left","sc/level_royal_arena.sc","royal_red_roof_left","Object","Ground",95,3,-151,33,,
|
||||
"royal_red_roof_right","sc/level_royal_arena.sc","royal_red_roof_right","Object","Ground",95,-9,-146,,,
|
||||
"royal_sidestand_left","sc/level_royal_arena.sc","royal_sidestand_left","Object","Ground",95,-29,147,8,,
|
||||
"royal_sidestand_right","sc/level_royal_arena.sc","royal_sidestand_right","Object","Ground",84,-35,112,1,,
|
||||
"royal_blocktree","sc/level_royal_arena.sc","royal_blocktree","Object","Ground",95,-6,-6,29,,
|
||||
"royal_bush1x","sc/level_royal_arena.sc","royal_bush1x","Object","Ground",95,-3,-5,25,,
|
||||
"royal_mushrooms","sc/level_royal_arena.sc","royal_mushrooms","Object","Ground",95,-2,4,6,,
|
||||
"goblin_roofshade_left_blue","sc/level_goblin_arena.sc","goblin_roofshade_left_blue","Object","Ground",95,-6,-6,,,
|
||||
"goblin_roofshade_left_red","sc/level_goblin_arena.sc","goblin_roofshade_left_red","Object","Ground",95,-6,-6,,,
|
||||
"goblin_roofshade_right_blue","sc/level_goblin_arena.sc","goblin_roofshade_right_blue","Object","Ground",95,-6,-6,,,
|
||||
"goblin_roofshade_right_red","sc/level_goblin_arena.sc","goblin_roofshade_right_red","Object","Ground",95,-6,-6,,,
|
||||
"goblin_sharp1","sc/level_goblin_arena.sc","goblin_sharp1","Object","Ground",95,-6,-6,,,
|
||||
"goblin_sharp2","sc/level_goblin_arena.sc","goblin_sharp2","Object","Ground",95,-6,-6,,,
|
||||
"goblin_sharp3","sc/level_goblin_arena.sc","goblin_sharp3","Object","Ground",95,-6,-6,,,
|
||||
"goblin_sidestand_left","sc/level_goblin_arena.sc","goblin_sidestand_left","Object","Ground",95,-6,-6,,,
|
||||
"goblin_sidestand_right","sc/level_goblin_arena.sc","goblin_sidestand_right","Object","Ground",95,-6,-6,,,
|
||||
"goblin_stone1","sc/level_goblin_arena.sc","goblin_stone1","Object","Ground",95,-6,-6,,,
|
||||
"goblin_stone2","sc/level_goblin_arena.sc","goblin_stone2","Object","Ground",95,-6,-6,,,
|
||||
"goblin_waterwheel","sc/level_goblin_arena.sc","goblin_waterwheel","Object","Ground",95,10,-41,21,,
|
||||
"goblin_woodpole1","sc/level_goblin_arena.sc","goblin_woodpole1","Object","Ground",95,-6,-6,,,
|
||||
"goblin_woodpole2","sc/level_goblin_arena.sc","goblin_woodpole2","Object","Ground",95,-6,-6,,,
|
||||
"goblin_woodtower1","sc/level_goblin_arena.sc","goblin_woodtower1","Object","Ground",95,-6,-6,,,
|
||||
"goblin_woodtower2","sc/level_goblin_arena.sc","goblin_woodtower2","Object","Ground",95,2,-23,44,,
|
||||
"goblin_woodwall1","sc/level_goblin_arena.sc","goblin_woodwall1","Object","Ground",95,-6,-6,,,
|
||||
"goblin_tree1","sc/level_goblin_arena.sc","goblin_tree1","Object","Ground",95,-6,-6,,,
|
||||
"goblin_tree2","sc/level_goblin_arena.sc","goblin_tree2","Object","Ground",95,-6,-6,,,
|
||||
"goblin_tree3","sc/level_goblin_arena.sc","goblin_tree3","Object","Ground",95,-6,-6,,,
|
||||
"goblin_tree4","sc/level_goblin_arena.sc","goblin_tree4","Object","Ground",95,-6,-6,,,
|
||||
"goblin_red_tower","sc/level_goblin_arena.sc","goblin_red_tower","Object","Ground",95,-6,-6,,,
|
||||
"goblin_blue_tower","sc/level_goblin_arena.sc","goblin_blue_tower","Object","Ground",95,-6,-6,,,
|
||||
"training_cliff1","sc/arena_training.sc","cliff01","Object","Ground",95,-15,34,24,,
|
||||
"training_cliff2","sc/arena_training.sc","cliff02","Object","Ground",95,-6,4,14,,
|
||||
"training_cliff3","sc/arena_training.sc","cliff03","Object","Ground",95,-8,,31,,
|
||||
"training_cliff4","sc/arena_training.sc","cliff04","Object","Ground",95,-3,-2,24,,
|
||||
"training_cliff5","sc/arena_training.sc","cliff05","Object","Ground",95,-8,-8,19,,
|
||||
"training_cliff6","sc/arena_training.sc","cliff06","Object","Ground",95,-13,2,32,,
|
||||
"training_cliff7","sc/arena_training.sc","cliff07","Object","Ground",95,-10,2,13,,
|
||||
"training_tree1","sc/arena_training.sc","tree01","Object","Ground",95,-6,-6,,,
|
||||
"training_tree2","sc/arena_training.sc","tree02","Object","Ground",95,-6,-6,,,
|
||||
"training_tree3","sc/arena_training.sc","tree03","Object","Ground",95,-6,-6,,,
|
||||
"training_bush1","sc/arena_training.sc","bush01","Object","Ground",95,-6,-6,,,
|
||||
"training_bush2","sc/arena_training.sc","bush02","Object","Ground",95,-6,-6,,,
|
||||
"training_cliffs_left","sc/arena_training.sc","training_cliffs_left","Object","Ground",95,-28,92,10,,
|
||||
"training_cliffs_right","sc/arena_training.sc","training_cliffs_right","Object","Ground",98,-23,93,13,,
|
||||
"training_deco1","sc/arena_training.sc","training_deco1","Object","Ground",72,2,,22,386,
|
||||
"training_deco2","sc/arena_training.sc","training_deco2","Object","Ground",78,,,13,386,
|
||||
"fence_left_back","sc/arena_training.sc","fence_left_back","Object","Ground",95,,10,15,,
|
||||
"fence_left_front","sc/arena_training.sc","fence_left_front","Object","Ground",98,2,-6,21,,
|
||||
"fence_right_back","sc/arena_training.sc","fence_right_back","Object","Ground",95,1,7,12,,
|
||||
"fence_right_front","sc/arena_training.sc","fence_right_front","Object","Ground",95,2,,21,,
|
||||
"tree_group01","sc/arena_training.sc","tree_group01","Object","Ground",90,-6,-6,,,
|
||||
"bone_1_left","sc/level_bone_arena.sc","bone_1_left","Object","Ground",90,-3,-32,10,,
|
||||
"bone_1_right","sc/level_bone_arena.sc","bone_1_right","Object","Ground",90,6,-56,60,,
|
||||
"bone_2_left","sc/level_bone_arena.sc","bone_2_left","Object","Ground",90,-9,19,,,
|
||||
"bone_2_right","sc/level_bone_arena.sc","bone_2_right","Object","Ground",90,,5,64,,
|
||||
"bone_endstones_bottom","sc/level_bone_arena.sc","bone_endstones_bottom","Object","Ground",90,-15,-31,31,,
|
||||
"bone_endstones_top","sc/level_bone_arena.sc","bone_endstones_top","Object","Ground",90,-10,-21,33,,
|
||||
"bone_sidestands_botleft","sc/level_bone_arena.sc","bone_sidestands_botleft","Object","Ground",90,-19,132,,,
|
||||
"bone_sidestands_botright","sc/level_bone_arena.sc","bone_sidestands_botright","Object","Ground",90,-15,153,5,,
|
||||
"bone_sidestands_right","sc/level_bone_arena.sc","bone_sidestands_right","Object","Ground",90,-12,127,,,
|
||||
"bone_sidestands_topleft","sc/level_bone_arena.sc","bone_sidestands_topleft","Object","Ground",90,-31,127,5,,
|
||||
"bone_tower1","sc/level_bone_arena.sc","bone_tower1","Object","Ground",98,-8,-45,,,
|
||||
"bone_tower2","sc/level_bone_arena.sc","bone_tower2","Object","Ground",98,-6,-35,22,,
|
||||
"bone_deco_left","sc/level_bone_arena.sc","bone_deco_left","Object","Object",90,,-2,21,380,
|
||||
"bone_deco_right","sc/level_bone_arena.sc","bone_deco_right","Object","Object",90,-1,,37,380,
|
||||
"bone_decostone1","sc/level_bone_arena.sc","bone_decostone1","Object","Ground",111,-13,-17,,,
|
||||
"bone_decostone2","sc/level_bone_arena.sc","bone_decostone2","Object","Ground",90,2,-11,39,,
|
||||
"dark_fire_pot","sc/level_dark_arena.sc","dark_fire_pot","Object","Object",95,-6,-6,,,"dark_arena_pot_flame"
|
||||
"dark_gate_bottom","sc/level_dark_arena.sc","dark_gate_bottom","Object","Ground",95,-6,-6,,,
|
||||
"dark_gate_top","sc/level_dark_arena.sc","dark_gate_top","Object","Ground",95,-6,-6,,,
|
||||
"dark_deco1","sc/level_dark_arena.sc","dark_deco1","Object","Ground",84,,-4,20,410,
|
||||
"dark_pekka_bottom_left","sc/level_dark_arena.sc","dark_pekka_bottom_left","Object","Ground",95,-6,-6,,,
|
||||
"dark_pekka_bottom_right","sc/level_dark_arena.sc","dark_pekka_bottom_right","Object","Ground",95,-6,-6,,,
|
||||
"dark_pekka_top_left","sc/level_dark_arena.sc","dark_pekka_top_left","Object","Ground",95,-6,-6,,,
|
||||
"dark_pekka_top_right","sc/level_dark_arena.sc","dark_pekka_top_right","Object","Ground",95,-6,-6,,,
|
||||
"dark_stand_blue_left","sc/level_dark_arena.sc","dark_stand_blue_left","Object","Ground",95,-6,-6,,,
|
||||
"dark_stand_blue_right","sc/level_dark_arena.sc","dark_stand_blue_right","Object","Ground",95,-6,-6,,,
|
||||
"dark_stand_left_red","sc/level_dark_arena.sc","dark_stand_left_red","Object","Ground",95,-6,-6,,,
|
||||
"dark_stand_red_right","sc/level_dark_arena.sc","dark_stand_red_right","Object","Ground",95,-6,-6,,,
|
||||
"barbarian_blocktree","sc/level_barbarian_arena.sc","barbarian_blocktree","Object","Ground",95,-6,-6,29,,
|
||||
"barbarian_blue_barracks","sc/level_barbarian_arena.sc","barbarian_blue_barracks","Object","Ground",95,-22,-4,38,,
|
||||
"barbarian_red_barracks","sc/level_barbarian_arena.sc","barbarian_red_barracks","Object","Ground",95,-6,-6,31,,
|
||||
"barbarian_blue_sidestand_left","sc/level_barbarian_arena.sc","barbarian_blue_sidestand_left","Object","Ground",95,-11,1,20,,
|
||||
"barbarian_blue_sidestand_right","sc/level_barbarian_arena.sc","barbarian_blue_sidestand_right","Object","Ground",95,-17,-6,26,,
|
||||
"barbarian_red_sidestand_left","sc/level_barbarian_arena.sc","barbarian_red_sidestand_left","Object","Ground",95,-6,-6,10,,
|
||||
"barbarian_red_sidestand_right","sc/level_barbarian_arena.sc","barbarian_red_sidestand_right","Object","Ground",95,-6,-6,19,,
|
||||
"barbarian_tower1","sc/level_barbarian_arena.sc","barbarian_tower1","Object","Ground",95,-4,9,20,,
|
||||
"barbarian_tower2","sc/level_barbarian_arena.sc","barbarian_tower2","Object","Ground",95,,5,11,,
|
||||
"barbarian_tower3","sc/level_barbarian_arena.sc","barbarian_tower3","Object","Ground",104,-12,25,20,,
|
||||
"barbarian_tower4","sc/level_barbarian_arena.sc","barbarian_tower4","Object","Ground",95,5,11,23,,
|
||||
"barbarian_barrell","sc/level_barbarian_arena.sc","barbarian_barrell","Object","Ground",95,-8,51,39,,
|
||||
"barbarian_fence1","sc/level_barbarian_arena.sc","barbarian_fence1","Object","Ground",95,-2,4,39,,
|
||||
"barbarian_wall1","sc/level_barbarian_arena.sc","barbarian_wall1","Object","Ground",95,-8,2,,,
|
||||
"barbarian_wall2","sc/level_barbarian_arena.sc","barbarian_wall2","Object","Ground",95,2,1,39,,
|
||||
"barbarian_bush1x","sc/level_barbarian_arena.sc","barbarian_bush1x","Object","Ground",95,-3,-5,25,,
|
||||
"barbarian_mushrooms","sc/level_barbarian_arena.sc","barbarian_mushrooms","Object","Ground",95,-2,4,6,,
|
||||
"barbarian_deco1","sc/level_barbarian_arena.sc","barbarian_deco1","Object","Ground",95,-4,13,24,392,
|
||||
"barbarian_deco2","sc/level_barbarian_arena.sc","barbarian_deco2","Object","Ground",95,-4,13,39,392,
|
||||
"spell_arena_edge_back","sc/level_spell_arena.sc","arena_edge_back","Object","Ground",95,-6,-6,,,
|
||||
"spell_arena_edge_front","sc/level_spell_arena.sc","arena_edge_front","Object","Ground",95,-6,-6,,,
|
||||
"spell_arena_edge_left","sc/level_spell_arena.sc","arena_edge_left","Object","Ground",95,-6,-6,,,
|
||||
"spell_arena_edge_right","sc/level_spell_arena.sc","arena_edge_right","Object","Ground",95,-6,-6,,,
|
||||
"spell_arena_edge_pole","sc/level_spell_arena.sc","arena_edge_pole","Object","Ground",95,-6,-6,,,
|
||||
"spell_entry_pole_back","sc/level_spell_arena.sc","entry_pole_back","Object","Ground",95,-6,-6,,,
|
||||
"spell_entry_pole_front","sc/level_spell_arena.sc","entry_pole_front","Object","Ground",95,-6,-6,,,
|
||||
"spell_crystal_rock_left","sc/level_spell_arena.sc","crystal_rock_left","Object","Ground",95,-6,-6,,,
|
||||
"spell_crystal_rock_right","sc/level_spell_arena.sc","crystal_rock_right","Object","Ground",95,-6,-6,,,
|
||||
"spell_pot_left","sc/level_spell_arena.sc","spell_pot_left","Object","Ground",95,-6,-6,,,
|
||||
"spell_pot_right","sc/level_spell_arena.sc","spell_pot_right","Object","Ground",95,-6,-6,,,
|
||||
"spell_stand_blue_left","sc/level_spell_arena.sc","stand_blue_left","Object","Ground",95,-6,-6,,,
|
||||
"spell_stand_blue_right","sc/level_spell_arena.sc","stand_blue_right","Object","Ground",95,-6,-6,,,
|
||||
"spell_stand_red_left","sc/level_spell_arena.sc","stand_red_left","Object","Ground",95,-6,-6,,,
|
||||
"spell_stand_red_right","sc/level_spell_arena.sc","stand_red_right","Object","Ground",95,-6,-6,,,
|
||||
"spell_red_deco","sc/level_spell_arena.sc","spell_red_deco","Object","Ground",95,-6,-6,,,
|
||||
"spell_blue_deco","sc/level_spell_arena.sc","spell_blue_deco","Object","Ground",95,-6,-6,,,
|
||||
|
3
assets/csv_logic/eggs.csv
Normal file
3
assets/csv_logic/eggs.csv
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
"Name","FileName","BlueExportName","RedExportName","BlueTopExportName","RedTopExportName","HatchDuration","Hitpoints","CharacterStartingBuff","CharacterStartingBuffTime","Homespawn","IgnoreAggro","CollisionRadius","Effect","DeathEffect","ShadowScale","ShadowX","ShadowY","ShadowSkew"
|
||||
"String","String","String","String","String","String","int","int","String","int","boolean","boolean","int","String","String","int","int","int","int"
|
||||
"Egg","sc/characters.sc","order_spawning_orb","order_spawning_orb",,,3000,1,,,,,350,,,100,,10,35
|
||||
|
14
assets/csv_logic/exp_levels.csv
Normal file
14
assets/csv_logic/exp_levels.csv
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
"Name","ExpToNextLevel","SummonerLevel","TowerLevel","TroopLevel","Decks","SummonerKillGold","TowerKillGold","DiamondReward"
|
||||
"String","int","int","int","int","int","int","int","int"
|
||||
1,20,1,1,1,1,0,0,
|
||||
2,50,2,2,2,1,0,0,
|
||||
3,100,3,3,3,1,0,0,
|
||||
4,200,4,4,4,1,0,0,
|
||||
5,400,5,5,5,1,0,0,
|
||||
6,1000,6,6,6,1,0,0,
|
||||
7,2000,7,7,7,1,0,0,
|
||||
8,4000,8,8,8,1,0,0,
|
||||
9,10000,9,9,9,1,0,0,
|
||||
10,30000,10,10,10,1,0,0,
|
||||
11,80000,11,11,11,1,0,0,
|
||||
12,100000,12,12,12,1,0,0,
|
||||
|
2
assets/csv_logic/gamble_chests.csv
Normal file
2
assets/csv_logic/gamble_chests.csv
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
"Name","GoldPrice","Location"
|
||||
"String","int","String"
|
||||
|
158
assets/csv_logic/globals.csv
Normal file
158
assets/csv_logic/globals.csv
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
"Name","NumberValue","BooleanValue","TextValue","StringArray","NumberArray"
|
||||
"String","int","boolean","string","String","int"
|
||||
"ALLIANCE_CREATE_RESOURCE",,,"Gold",,
|
||||
"ALLIANCE_CREATE_COST",1000,,,,
|
||||
"ALLIANCE_TROOP_REQUEST_COOLDOWN",1200,,,,
|
||||
"STARTING_DIAMONDS",100,,,,
|
||||
"CLAN_TOURNAMENT_ENABLED",,"TRUE",,,
|
||||
"ACHIEVEMENTS_ENABLED",,"TRUE",,,
|
||||
"MAX_MANA",10,,,,
|
||||
"MANA_REGEN_MS",28000,,,,
|
||||
"MANA_REGEN_MS_END",14000,,,,
|
||||
"MANA_REGEN_MS_OVERTIME",14000,,,,
|
||||
"MANA_SPEED_UP_WHEN_REMAINING_SECONDS",60,,,,
|
||||
"MANA_REGEN_PENALTY_FROM_TOWER",,,,,
|
||||
"START_MANA",5,,,,
|
||||
"K_FACTOR",60,,,,
|
||||
"MINIMUM_CHANGE_FOR_REAL_BATTLE",1,,,,
|
||||
"TARGET_SCORE",1000,,,,
|
||||
"MINIMUM_SCORE",0,,,,
|
||||
"DAMAGE_NOTICE_TIME",2000,,,,
|
||||
"PROTECTION_CAP_PERCENTAGE",90,,,,
|
||||
"PANIC_RUN_MIN_TIME",1000,,,,
|
||||
"PANIC_RUN_MAX_TIME",1500,,,,
|
||||
"PANIC_SPEED_MULTIPLIER",175,,,,
|
||||
"MAX_MESSAGE_LENGTH",128,,,,
|
||||
"MAX_ALLIANCE_MAIL_LENGTH",256,,,,
|
||||
"CHARGE_DAMAGE_MULTIPLIER",200,,,,
|
||||
"NEXT_SPELL_COOLDOWN_MILLISECONDS",2000,,,,
|
||||
"NEXT_SPELL_COOLDOWN_MILLISECONDS_BOOST",1000,,,,
|
||||
"NEXT_SPELL_COOLDOWN_MILLISECONDS_OVERTIME",1000,,,,
|
||||
"SPEED_UP_DIAMOND_COST_1_MIN",1,,,,
|
||||
"SPEED_UP_DIAMOND_COST_1_HOUR",20,,,,
|
||||
"SPEED_UP_DIAMOND_COST_24_HOURS",360,,,,
|
||||
"SPEED_UP_DIAMOND_COST_1_WEEK",1800,,,,
|
||||
"BATTLE_END_EXP_REWARD",0,,,,
|
||||
"GAMBLE_PRICE_COOLDOWN_MINUTES",1380,,,,
|
||||
"TUTORIAL_MAX_SPELL_CAST_DISTANCE_TILES",6,,,,
|
||||
"SPEED_UP_FREE_SECONDS",0,,,,
|
||||
"RESOURCE_DIAMOND_COST_1",1,,,,
|
||||
"RESOURCE_DIAMOND_COST_10",1,,,,
|
||||
"RESOURCE_DIAMOND_COST_100",8,,,,
|
||||
"RESOURCE_DIAMOND_COST_1000",60,,,,
|
||||
"RESOURCE_DIAMOND_COST_10000",500,,,,
|
||||
"RESOURCE_DIAMOND_COST_100000",4500,,,,
|
||||
"RESOURCE_DIAMOND_COST_1000000",45000,,,,
|
||||
"MAX_RESOURCE_PURCHASE_SIZE",1000000,,,,
|
||||
"ALLIANCE_SCORE_CONTRIBUTION_PERCENTAGE",,,,,50
|
||||
,,,,,25
|
||||
,,,,,12
|
||||
,,,,,10
|
||||
,,,,,3
|
||||
"STARTING_GOLD",100,,,,
|
||||
"ATTACK_FINISH_TIME_MS",250,,,,
|
||||
"BATTLE_PING_SAMPLE_SECONDS",15,,,,
|
||||
"FREE_CHEST_INTERVAL_HOURS",4,,,,
|
||||
"EXTRA_BUFF_RADIUS",2000,,,,
|
||||
"PVP_UNLOCKED_AT_LEVEL",1,,,,
|
||||
"DAMAGE_INCREASE_PERCENT_PER_SPELL_LEVEL",10,,,,
|
||||
"HITPOINT_INCREASE_PERCENT_PER_SPELL_LEVEL",10,,,,
|
||||
"DAMAGE_INCREASE_PERCENT_PER_KING_LEVEL",8,,,,
|
||||
"HITPOINT_INCREASE_PERCENT_PER_KING_LEVEL",8,,,,
|
||||
"DAMAGE_INCREASE_PERCENT_PER_TOWER_LEVEL",9,,,,
|
||||
"HITPOINT_INCREASE_PERCENT_PER_TOWER_LEVEL",9,,,,
|
||||
"END_TIMER_ANIM_MS",12000,,,,
|
||||
"MAX_CHEST_COUNT",4,,,,
|
||||
"MAX_WORKERS",1,,,,
|
||||
"EXTRA_CHEST_ENABLED",,"FALSE",,,
|
||||
"CHEST_AUTO_OPENING",,"FALSE",,,
|
||||
"RECORD_TOUCH_EVENTS",,"TRUE",,,
|
||||
"CROWN_CHEST_COOLDOWN_HOURS",24,,,,
|
||||
"CROWN_CHEST_CROWN_COUNT",10,,,,
|
||||
"MELEE_RANGE_LIMIT",2000,,,,
|
||||
"REQUEST_SPELLS_COOLDOWN_MINUTES",480,,,,
|
||||
"STARTING_ARENA",,,"TrainingCamp",,
|
||||
"REDUCED_TOWER_DAMAGE_PERCENT",50,,,,
|
||||
"LEAVE_ALLIANCE_DONATION_COOLDOWN_MINUTES",150,,,,
|
||||
"ALLIANCE_UNLOCK_EXP_LEVEL",3,,,,
|
||||
"TUTORIAL_ARENA_MATCH_COUNT",7,,,,
|
||||
"TUTORIAL_UPGRADE_COUNT",1,,,,
|
||||
"PRICE_EPIC",2000,,,,
|
||||
"PRICE_RARE",40,,,,
|
||||
"PRICE_COMMON",3,,,,
|
||||
"PRICE_EPIC_INCREASE_PER_ONE_BOUGHT_PERCENT",180,,,,
|
||||
"PRICE_RARE_INCREASE_PER_ONE_BOUGHT_PERCENT",140,,,,
|
||||
"PRICE_COMMON_INCREASE_PER_ONE_BOUGHT_PERCENT",120,,,,
|
||||
"BUY_LIMIT_EPIC",10,,,,
|
||||
"BUY_LIMIT_RARE",20,,,,
|
||||
"BUY_LIMIT_COMMON",50,,,,
|
||||
"BIG_LIMIT",1000,,,,
|
||||
"SUPER_LIMIT",50000,,,,
|
||||
"SHARE_REPLAY_COOLDOWN_SECS",40,,,,
|
||||
"TEAM_MAIL_COOLDOWN_SECS",43200,,,,
|
||||
"CHALLENGE_MATCH_COST",5,,,,
|
||||
"CHALLENGE_MATCHES_ENABLED",,"TRUE",,,
|
||||
"NAME_POPUP_WIN_CNT",6,,,,
|
||||
"KING_ACTIVATE_TIME_MS",3300,,,,
|
||||
"TV_WEIGHT_TOP3_VS_TOP3",100,,,,
|
||||
"TV_WEIGHT_TOP3_VS_TOP10",70,,,,
|
||||
"TV_WEIGHT_TOP10_VS_TOP10",60,,,,
|
||||
"TV_WEIGHT_TOP10_VS_TOP20",55,,,,
|
||||
"TV_WEIGHT_TOP20_VS_TOP20",50,,,,
|
||||
"TV_WEIGHT_TOP20_VS_TOP50",45,,,,
|
||||
"TV_WEIGHT_TOP50_VS_TOP50",40,,,,
|
||||
"TV_WEIGHT_OTHERS",40,,,,
|
||||
"TV_WEIGTH_NOT_UNDERDOG",80,,,,
|
||||
"TV_WEIGHT_WINNER_ONE_CROWN_BEHIND",90,,,,
|
||||
"DONATION_CAPACITY_LIMIT_COOLDOWN_HOURS",24,,,,
|
||||
"DEVICE_LINK_CODE_LENGTH",12,,,,
|
||||
"DEVICE_LINK_CODE_VALID_SECONDS",120,,,,
|
||||
"RESET_SPELL_USAGE_COUNTER_MATCHES",10,,,,
|
||||
"FREE_CHEST_DIAMONDS",,,,,2
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,2
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,2
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,2
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,2
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
,,,,,0
|
||||
"CROWN_CHEST_DIAMONDS",,,,,2
|
||||
,,,,,3
|
||||
,,,,,2
|
||||
,,,,,3
|
||||
,,,,,2
|
||||
,,,,,4
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,4
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,3
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,2
|
||||
,,,,,3
|
||||
,,,,,3
|
||||
,,,,,2
|
||||
,,,,,3
|
||||
,,,,,2
|
||||
,,,,,3
|
||||
,,,,,3
|
||||
|
14
assets/csv_logic/locales.csv
Normal file
14
assets/csv_logic/locales.csv
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
"Name","IconSWF","IconExportName","LocalizedName","Enabled","FileName"
|
||||
"String","String","String","String","Boolean","String"
|
||||
"EN","sc/ui.sc","flag_gb","English","true","csv_client/texts.csv"
|
||||
"FR","sc/ui.sc","flag_france",,,"csv_client/texts.csv"
|
||||
"DE","sc/ui.sc","flag_germany",,,"csv_client/texts.csv"
|
||||
"ES","sc/ui.sc","flag_spain",,,"csv_client/texts.csv"
|
||||
"IT","sc/ui.sc","flag_italy",,,"csv_client/texts.csv"
|
||||
"NL","sc/ui.sc","flag_netherlands",,,"csv_client/texts.csv"
|
||||
"NO","sc/ui.sc","flag_norway",,,"csv_client/texts.csv"
|
||||
"PT","sc/ui.sc","flag_brazil",,,"csv_client/texts.csv"
|
||||
"TR","sc/ui.sc","flag_turkey",,,"csv_client/texts.csv"
|
||||
"Asia",,,,,"csv_client/texts.csv"
|
||||
"Arabic",,,,,"csv_client/texts.csv"
|
||||
"Other",,,,,"csv_client/texts.csv"
|
||||
|
94
assets/csv_logic/locations.csv
Normal file
94
assets/csv_logic/locations.csv
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
"Name","NpcOnly","PvpOnly","ShadowR","ShadowG","ShadowB","ShadowA","ShadowOffsetX","ShadowOffsetY","ShadowClamp","Music","MusicStartTime","Sound","SoundStartTime","SoundPlayOvertime","ExtraTimeMusic","MatchLength","WinCondition","OvertimeSeconds","NoStartScreen","NoEndScreen","HideTopUI","HideManaBar","EndScreenDelay","FileName","AmbientSound","OverlaySC","OverlayExportName","CrowdEffects","CloudFileName","CloudExportName","CloudMinScale","CloudMaxScale","CloudMinSpeed","CloudMaxSpeed","CloudMinAlpha","CloudMaxAlpha","CloudCount"
|
||||
"string","boolean","boolean","int","int","int","int","int","int","int","string","int","string","int","boolean","string","int","string","int","boolean","boolean","boolean","boolean","int","string","string","string","string","boolean","string","string","int","int","int","int","int","int","int"
|
||||
"FirstMatch","true",,,,100,60,100,100,50,"TrainingArena",180,"Tut_jing_start",180,,"60sec_training",,"Normal",,,,,,4000,"locations/training_arena.csv","ScrollAmb01",,,,"sc/effects.sc","cloud_1",54,114,25,154,7,10,4
|
||||
"TrainingCamp",,,,,100,60,100,100,50,"TrainingArena",180,"Tut_jing_start",180,,"60sec_training",180,"Normal",60,,,,,4000,"locations/training_arena.csv","ScrollAmb01",,,,"sc/effects.sc","cloud_1",54,114,25,154,7,10,4
|
||||
,,,,,,,,,,"60sec_training",60,"Tut_jing_time_1",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_jing_time_2",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Tut_count_01",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
"PvP_goblin",,"true",,30,,55,100,100,50,"BattleMusic",180,"Goblin_arena_start",180,,"Sudden_death",180,"Normal",60,,,,,4000,"locations/goblin_arena.csv","ScrollAmb01",,,"TRUE","sc/effects.sc","cloud_1",70,110,25,80,15,15,5
|
||||
,,,,,,,,,,"60sec_loop",60,"60sec_warn_01",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,"30sec_loop",30,"30sec_warn_01",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_10",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_9",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_8",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_7",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_6",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_5",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_4",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_3",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_2",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_1",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
"PvP_barbarian",,"true",,,100,50,100,100,50,"BattleMusic",180,"Barbarian_arena_start",180,,"Sudden_death",180,"Normal",60,,,,,4000,"locations/barbarian_arena.csv","ScrollAmb01",,,"TRUE","sc/effects.sc","cloud_1",70,110,25,80,15,15,5
|
||||
,,,,,,,,,,"60sec_loop",60,"60sec_warn_01",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,"30sec_loop",30,"30sec_warn_01",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_10",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_9",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_8",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_7",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_6",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_5",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_4",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_3",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_2",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_1",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
"PvP_bone",,"true",50,10,,55,100,100,50,"BattleMusic",180,"Bone_pit_arena_start",180,,"Sudden_death",180,"Normal",60,,,,,4000,"locations/bone_arena.csv","ScrollAmb01",,,"TRUE","sc/effects.sc","cloud_1",70,110,25,80,15,15,5
|
||||
,,,,,,,,,,"60sec_loop",60,"60sec_warn_01",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,"30sec_loop",30,"30sec_warn_01",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_10",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_9",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_8",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_7",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_6",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_5",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_4",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_3",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_2",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_1",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
"PvP_dark",,"true",50,10,,55,100,100,50,"BattleMusic",180,"Dark_arena_start",180,,"Sudden_death",180,"Normal",60,,,,,4000,"locations/dark_arena.csv","ScrollAmb01",,,"TRUE",,,,,,,,,
|
||||
,,,,,,,,,,"60sec_loop",60,"60sec_warn_01",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,"30sec_loop",30,"30sec_warn_01",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_10",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_9",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_8",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_7",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_6",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_5",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_4",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_3",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_2",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_1",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
"PvP_royal",,"true",,,100,50,100,100,50,"BattleMusic",180,"match start",180,,"Sudden_death",180,"Normal",60,,,,,4000,"locations/royal_arena.csv","ScrollAmb01",,,"TRUE","sc/effects.sc","cloud_1",70,110,25,80,15,15,5
|
||||
,,,,,,,,,,"60sec_loop",60,"60sec_warn_01",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,"30sec_loop",30,"30sec_warn_01",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_10",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_9",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_8",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_7",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_6",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_5",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_4",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_3",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_2",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_1",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
"PvP_spell",,"true",,,100,50,100,100,50,"BattleMusic",180,"Spell_arena_start",180,,"Sudden_death",180,"Normal",60,,,,,4000,"locations/spell_arena.csv","ScrollAmb01",,,"TRUE","sc/effects.sc","cloud_1",70,110,25,80,15,15,5
|
||||
,,,,,,,,,,"60sec_loop",60,"60sec_warn_01",60,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,"30sec_loop",30,"30sec_warn_01",30,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_10",10,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_9",9,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_8",8,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_7",7,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_6",6,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_5",5,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_4",4,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_3",3,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_2",2,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,,,,"Countdown_1",1,"TRUE",,,,,,,,,,,,,,,,,,,,,,,
|
||||
|
22
assets/csv_logic/npcs.csv
Normal file
22
assets/csv_logic/npcs.csv
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
"Name","Location","PredefinedDeck","Trophies","ManaRegenMs","ManaRegenMsEnd","ManaRegenMsOvertime","ExpLevel","CanReplay","TID","ExpReward","Seed","FullDeckNotNeeded","ReserveMana","StartingMana","WizardHpMultiplier","StartTaunt","OwnTowerDestroyedTaunt","HighlightTargetsOnManaFull"
|
||||
"String","String","String","int","int","int","int","int","boolean","String","int","int","boolean","int","int","int","String","String","boolean"
|
||||
"Npc1","FirstMatch","BasicDeck1",0,120000,120000,120000,1,"true","TID_NPC_1",0,2,"true",0,1,40,,"NPC1_Tower","TRUE"
|
||||
"Npc2","FirstMatch","BasicDeck2",0,120000,120000,120000,1,"true","TID_NPC_2",0,,"true",1,1,60,"NPC2_Start","NPC2_Tower",
|
||||
"Npc3","TrainingCamp","BasicDeck3",0,100000,100000,100000,1,"true","TID_NPC_3",0,,"true",2,1,60,"NPC3_Start","NPC3_Tower",
|
||||
"Npc4","TrainingCamp","BasicDeck4",0,80000,40000,40000,1,"true","TID_NPC_4",0,,"true",2,2,80,"NPC4_Start","NPC4_Tower",
|
||||
"Npc5","TrainingCamp","BasicDeck5",0,60000,30000,30000,1,"true","TID_NPC_5",0,,"true",3,3,80,"NPC4_Start","NPC4_Tower",
|
||||
"Npc6","TrainingCamp","BasicDeck6",0,60000,30000,30000,1,"true","TID_NPC_6",0,,"true",4,4,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc7","TrainingCamp","BasicDeck7",0,50000,25000,25000,1,"true","TID_NPC_7",0,,"true",5,5,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc8","TrainingCamp","BasicDeck8",50,50000,25000,25000,2,"true","TID_NPC_8",0,,"true",5,5,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc9","TrainingCamp","BasicDeck9",150,40000,20000,20000,2,"true","TID_NPC_9",0,,"true",5,5,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc10","TrainingCamp","BasicDeck10",300,30000,15000,15000,2,"true","TID_NPC_10",0,,"true",5,5,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc11","TrainingCamp","BasicDeck11",450,30000,15000,15000,3,"true","TID_NPC_11",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc12","TrainingCamp","BasicDeck12",600,30000,15000,15000,3,"true","TID_NPC_12",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc13","TrainingCamp","BasicDeck13",700,30000,15000,15000,3,"true","TID_NPC_13",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc14","TrainingCamp","BasicDeck14",800,30000,15000,15000,4,"true","TID_NPC_14",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc15","TrainingCamp","BasicDeck15",900,30000,15000,15000,4,"true","TID_NPC_15",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc16","TrainingCamp","BasicDeck16",1000,28000,14000,9000,5,"true","TID_NPC_16",0,,"true",5,,,"NPC16_Start","NPC4_Tower",
|
||||
"Npc17","TrainingCamp","BasicDeck17",1100,28000,14000,9000,5,"true","TID_NPC_17",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc18","TrainingCamp","BasicDeck18",1200,28000,14000,9000,6,"true","TID_NPC_18",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc19","TrainingCamp","BasicDeck19",1300,28000,14000,9000,6,"true","TID_NPC_19",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
"Npc20","TrainingCamp","BasicDeck20",1400,28000,14000,9000,7,"true","TID_NPC_20",0,,"true",5,,,"NPC4_Start","NPC4_Tower",
|
||||
|
135
assets/csv_logic/predefined_decks.csv
Normal file
135
assets/csv_logic/predefined_decks.csv
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
"Name","Spells","SpellLevel","Description"
|
||||
"String","String","int","String"
|
||||
"BasicDeck1","Goblins",1,
|
||||
"BasicDeck2","Goblins",1,
|
||||
,"Knight",1,
|
||||
"BasicDeck3","Knight",1,
|
||||
,"Goblins",1,
|
||||
,"Skeletons",1,
|
||||
"BasicDeck4","Knight",1,
|
||||
,"Goblins",1,
|
||||
,"Skeletons",1,
|
||||
,"Archer",1,
|
||||
"BasicDeck5","Knight",1,
|
||||
,"Goblins",1,
|
||||
,"Skeletons",1,
|
||||
,"Archer",1,
|
||||
,"Bomber",1,
|
||||
"BasicDeck6","Knight",1,
|
||||
,"Goblins",2,
|
||||
,"Skeletons",1,
|
||||
,"Archer",2,
|
||||
,"Bomber",1,
|
||||
,"Arrows",1,
|
||||
"BasicDeck7","Knight",1,
|
||||
,"Goblins",2,
|
||||
,"Skeletons",1,
|
||||
,"Archer",2,
|
||||
,"Bomber",1,
|
||||
,"Arrows",1,
|
||||
,"Fireball",1,
|
||||
,"Giant",1,
|
||||
"BasicDeck8","Knight",2,
|
||||
,"Archer",2,
|
||||
,"Goblins",2,
|
||||
,"SpearGoblins",2,
|
||||
,"Giant",1,
|
||||
,"GoblinHut",1,
|
||||
,"Fireball",2,
|
||||
,"BabyDragon",1,
|
||||
"BasicDeck9","Knight",2,
|
||||
,"Archer",2,
|
||||
,"Goblins",2,
|
||||
,"SpearGoblins",3,
|
||||
,"Giant",1,
|
||||
,"GoblinHut",1,
|
||||
,"Arrows",3,
|
||||
,"SkeletonArmy",1,
|
||||
"BasicDeck10","Knight",3,
|
||||
,"Archer",3,
|
||||
,"Goblins",2,
|
||||
,"Skeletons",2,
|
||||
,"Prince",1,
|
||||
,"SpearGoblins",3,
|
||||
,"Arrows",3,
|
||||
,"Fireball",1,
|
||||
"BasicDeck11","Valkyrie",1,
|
||||
,"Archer",3,
|
||||
,"Witch",1,
|
||||
,"Skeletons",3,
|
||||
,"Tombstone",1,
|
||||
,"GiantSkeleton",1,
|
||||
,"Knight",3,
|
||||
,"Fireball",2,
|
||||
"BasicDeck12","Knight",3,
|
||||
,"Archer",3,
|
||||
,"Goblins",3,
|
||||
,"Skeletons",4,
|
||||
,"BombTower",2,
|
||||
,"Minions",2,
|
||||
,"Tombstone",2,
|
||||
,"Balloon",1,
|
||||
"BasicDeck13","Barbarians",3,
|
||||
,"BarbarianHut",1,
|
||||
,"SkeletonArmy",2,
|
||||
,"Skeletons",4,
|
||||
,"Witch",1,
|
||||
,"Fireball",2,
|
||||
,"Cannon",1,
|
||||
,"Arrows",4,
|
||||
"BasicDeck14","Musketeer",2,
|
||||
,"Bomber",4,
|
||||
,"BarbarianHut",2,
|
||||
,"Goblins",4,
|
||||
,"Giant",2,
|
||||
,"Balloon",2,
|
||||
,"Archer",4,
|
||||
,"Fireball",2,
|
||||
"BasicDeck15","Musketeer",2,
|
||||
,"Bomber",5,
|
||||
,"MiniPekka",2,
|
||||
,"Goblins",4,
|
||||
,"Prince",1,
|
||||
,"Balloon",1,
|
||||
,"Archer",4,
|
||||
,"Fireball",4,
|
||||
"BasicDeck16","Knight",5,
|
||||
,"Archer",5,
|
||||
,"SkeletonArmy",2,
|
||||
,"Goblins",5,
|
||||
,"Fireball",3,
|
||||
,"Giant",2,
|
||||
,"Valkyrie",3,
|
||||
,"MiniPekka",2,
|
||||
"BasicDeck17","HogRider",3,
|
||||
,"InfernoTower",2,
|
||||
,"Cannon",6,
|
||||
,"Knight",5,
|
||||
,"SpearGoblins",6,
|
||||
,"Prince",3,
|
||||
,"Archer",6,
|
||||
,"Fireball",3,
|
||||
"BasicDeck18","Witch",2,
|
||||
,"Pekka",2,
|
||||
,"Goblins",6,
|
||||
,"SpearGoblins",6,
|
||||
,"Zap",6,
|
||||
,"Wizard",3,
|
||||
,"Archer",6,
|
||||
,"Arrows",6,
|
||||
"BasicDeck19","Musketeer",4,
|
||||
,"MinionHorde",6,
|
||||
,"Rocket",4,
|
||||
,"Goblins",6,
|
||||
,"Giant",4,
|
||||
,"Wizard",3,
|
||||
,"Archer",7,
|
||||
,"Arrows",6,
|
||||
"BasicDeck20","BarbarianHut",4,
|
||||
,"Tombstone",3,
|
||||
,"BombTower",4,
|
||||
,"Goblins",6,
|
||||
,"Giant",4,
|
||||
,"SpearGoblins",7,
|
||||
,"Prince",3,
|
||||
,"Fireball",4,
|
||||
|
22
assets/csv_logic/projectiles.csv
Normal file
22
assets/csv_logic/projectiles.csv
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
"Name","Speed","FileName","ExportName","ShadowExportName","Homing","HitEffect","Damage","ReducedTowerDamage","Pushback","Radius","VisualRandomRadius","AoeToAir","AoeToGround","DamageType","OnlyEnemies","OnlyOwnTroops","MaximumTargets","Gravity","SpawnAreaEffectObject","SpawnCharacterLevelIndex","SpawnCharacterDeployTime","SpawnCharacter","SpawnCharacterCount","TargetBuff","BuffTime","BuffTimeIncreasePerLevel","TrailEffect","ProjectileRadius","ProjectileRange","use360Frames"
|
||||
"string","int","string","string","string","boolean","string","int","boolean","int","int","int","boolean","boolean","string","boolean","boolean","int","int","string","int","int","string","int","string","int","int","string","int","int","boolean"
|
||||
"FireballSpell",600,"sc/level.sc","fireball_projectile1","projectile_arrow_shadow",,"Fireball_explosion",325,"TRUE",1800,2500,,"true","true",,"true",,,50,,,,,,,,,"FireballEmitter",,,
|
||||
"KingProjectile",850,"sc/level.sc","projectile_cannonball_small",,"true","cannon_hit",50,,,,,,,,"true",,,,,,,,,,,,,,,
|
||||
"ArcherArrow",400,"sc/level.sc","projectile_arrow_basic_enemy","projectile_arrow_shadow","true","ArrowHit",40,,,,,,,,"true",,,60,,,,,,,,,,,,
|
||||
"PrincessProjectile",400,"sc/level.sc","projectile_arrow_basic_enemy","projectile_arrow_shadow","true","ArrowHit",50,,,,,,,,"true",,,60,,,,,,,,,,,,
|
||||
"ArrowsSpell",600,"sc/level.sc","projectile_arrow_basic_enemy","projectile_arrow_shadow","true","ArrowHitGround",110,"TRUE",,4000,,"true","true",,"true",,,50,,,,,,,,,,,,
|
||||
"ArrowsSpellDeco",600,"sc/level.sc","projectile_arrow_basic_enemy","projectile_arrow_shadow","true","ArrowHitGround",,,,,,"true","true",,"true",,,50,,,,,,,,,,,,
|
||||
"TowerCannonball",1000,"sc/level.sc","projectile_cannonball_large","projectile_arrow_shadow","true","cannon_hit",60,,,,,,,,"true",,,,,,,,,,,,,,,
|
||||
"MinionSpit",1000,"sc/level.sc","projectile_cannonball_small","projectile_arrow_shadow","true","ArrowHit",40,,,,,,,,"true",,,,,,,,,,,,,,,
|
||||
"MortarProjectile",300,"sc/level.sc","catapult_projectile1","projectile_arrow_shadow",,"mortar_hit",200,,,1800,,,"true",,"true",,,60,,,,,,,,,,,,
|
||||
"WitchProjectile",600,"sc/level.sc","Tower_projectile1",,"true","WizardProjectileHit",32,,,1000,,"true","true",,"true",,,,,,,,,,,,,,,
|
||||
"BombSkeletonProjectile",300,"sc/level.sc","projectile_bomb","projectile_arrow_shadow",,"BombTower_projectile_hit",100,,,1500,,,"true",,"true",,,200,,,,,,,,,"FireArrowProjectileEmitter",,,
|
||||
"BombTowerProjectile",300,"sc/level.sc","projectile_bomb","projectile_arrow_shadow",,"BombTower_projectile_hit",120,,,1500,,,"true",,"true",,,200,,,,,,,,,"FireArrowProjectileEmitter",,,
|
||||
"RocketSpell",350,"sc/level.sc","projectile_rocket","projectile_shadow_rocket",,"Rocket_explosion",650,"TRUE",1800,2000,,"true","true",,"true",,,50,,,,,,,,,"Rocket_Emitter",,,"true"
|
||||
"GoblinBarrelSpell",400,"sc/spell_goblin_barrel.sc","spell_goblin_barrel_projectile","Barrel_shadow",,"goblin_barrel_explosion",,,,1500,,,"true",,"true",,,40,,6,1300,"Goblin",3,,,,,,,
|
||||
"MusketeerProjectile",1000,"sc/level.sc","projectile_cannonball_small","projectile_arrow_shadow","true","cannon_hit",140,,,,,,,,"true",,,,,,,,,,,,,,,
|
||||
"BabyDragonProjectile",500,"sc/level.sc","dragon_projectile","projectile_arrow_shadow","true","dragon_hit",100,,,1200,,"true","true",,"true",,,250,,,,,,,,,"Dragon_Emitter",,,
|
||||
"chr_wizardProjectile",600,"sc/level.sc","fireball_small",,"true","chr_wizard_projectile_hit",140,,,1200,,"true","true",,"true",,,,,,,,,,,,,,,
|
||||
"xbow_projectile",1400,"sc/level.sc","projectile_arrow_basic","projectile_arrow_shadow","true","ArrowHit",18,,,,,,,,"true",,,,,,,,,,,,,,,
|
||||
"LighningSpell",500,,,,,"Spell_lightning_effect",600,"TRUE",,,,,,,"true",,,,,,,,,,,,,,,
|
||||
"SpearGoblinProjectile",350,"sc/level.sc","projectile_spear_360","projectile_arrow_shadow","true","spear_goblin_projectile_hit",24,,,,,,,,"true",,,150,,,,,,,,,,,,"true"
|
||||
|
32
assets/csv_logic/rarities.csv
Normal file
32
assets/csv_logic/rarities.csv
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
"Name","LevelCount","RelativeLevel","DonateCapacity","DonateReward","DonateXP","GoldConversionValue","ChanceWeight","BalanceMultiplier","UpgradeExp","UpgradeMaterialCount","UpgradeCost","TID","IconExportNamePrefix","CardBaseFileName","BigFrameExportName","CardBaseExportName","StackedCardExportName","CardRewardExportName","CastEffect","InfoTitleExportName","CardRarityBGExportName","SortOrder","Red","Green","Blue","AppearEffect","BuySound","LoopEffect","ShowAsQuestionMark","CardTxtBgFrameIdx","CardGlowInstanceName"
|
||||
"String","int","int","int","int","int","int","int","int","int","int","int","String","String","String","String","String","String","String","String","String","String","int","int","int","int","String","String","String","boolean","int","String"
|
||||
"Common",12,0,1,5,1,5,194,100,4,2,5,"TID_RARITY_COMMON",,"sc/ui.sc","spell_card_big","spell_card","spell_stack","spell_card_reward","SpellCasting","rarity_common","common_order",1,153,204,255,"openChest_get_common","sound_buy_card_common","openChest_loop_common","FALSE",0,
|
||||
,,,,,,,,,5,4,20,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,6,10,50,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,10,20,150,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,25,50,400,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,50,100,1000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,100,200,2000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,200,400,4000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,400,800,8000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,800,2000,20000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,1600,5000,50000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,0,100,0,,,,,,,,,,,,,,,,,,,,
|
||||
"Rare",10,2,10,50,5,50,10,130,6,2,50,"TID_RARITY_RARE",,"sc/ui.sc","spell_card_rare_big","spell_card_rare","spell_stack_rare","spell_card_rare_reward","SpellCasting","rarity_rare","rare_order",2,255,204,102,"openChest_get_rare","sound_buy_card_rare","openChest_loop_rare","FALSE",1,"card_glow_rare"
|
||||
,,,,,,,,,10,4,150,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,25,10,400,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,50,20,1000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,100,50,2000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,200,100,4000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,400,200,8000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,800,500,20000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,1600,1000,50000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,0,10,0,,,,,,,,,,,,,,,,,,,,
|
||||
"Epic",8,6,200,50,25,1000,1,180,25,2,400,"TID_RARITY_EPIC",,"sc/ui.sc","spell_card_epic_big","spell_card_epic","spell_stack_epic","spell_card_epic_reward","SpellCasting","rarity_epic","epic_order",3,255,153,255,"openChest_get_epic","sound_buy_card_epic","openChest_loop_epic","TRUE",2,"card_frame_glow_epic"
|
||||
,,,,,,,,,50,4,1000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,100,10,2000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,200,20,4000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,400,50,8000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,800,100,20000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,1600,300,50000,,,,,,,,,,,,,,,,,,,,
|
||||
,,,,,,,,,0,1,0,,,,,,,,,,,,,,,,,,,,
|
||||
|
268
assets/csv_logic/regions.csv
Normal file
268
assets/csv_logic/regions.csv
Normal file
|
|
@ -0,0 +1,268 @@
|
|||
Name,TID,DisplayName,IsCountry
|
||||
String,String,String,boolean
|
||||
_EU,,Europe,FALSE
|
||||
_NA,,North America,FALSE
|
||||
_SA,,South America,FALSE
|
||||
_AS,,Asia,FALSE
|
||||
_AU,,Australia,FALSE
|
||||
_AF,,Africa,FALSE
|
||||
_INT,TID_REGION_INT,International,FALSE
|
||||
AF,,Afghanistan,TRUE
|
||||
AX,,Åland Islands,TRUE
|
||||
AL,,Albania,TRUE
|
||||
DZ,,Algeria,TRUE
|
||||
AS,,American Samoa,TRUE
|
||||
AD,,Andorra,TRUE
|
||||
AO,,Angola,TRUE
|
||||
AI,,Anguilla,TRUE
|
||||
AQ,,Antarctica,TRUE
|
||||
AG,,Antigua and Barbuda,TRUE
|
||||
AR,,Argentina,TRUE
|
||||
AM,,Armenia,TRUE
|
||||
AW,,Aruba,TRUE
|
||||
AC,,Ascension Island,TRUE
|
||||
AU,,Australia,TRUE
|
||||
AT,,Austria,TRUE
|
||||
AZ,,Azerbaijan,TRUE
|
||||
BS,,Bahamas,TRUE
|
||||
BH,,Bahrain,TRUE
|
||||
BD,,Bangladesh,TRUE
|
||||
BB,,Barbados,TRUE
|
||||
BY,,Belarus,TRUE
|
||||
BE,,Belgium,TRUE
|
||||
BZ,,Belize,TRUE
|
||||
BJ,,Benin,TRUE
|
||||
BM,,Bermuda,TRUE
|
||||
BT,,Bhutan,TRUE
|
||||
BO,,Bolivia,TRUE
|
||||
BA,,Bosnia and Herzegovina,TRUE
|
||||
BW,,Botswana,TRUE
|
||||
BV,,Bouvet Island,TRUE
|
||||
BR,,Brazil,TRUE
|
||||
IO,,British Indian Ocean Territory,TRUE
|
||||
VG,,British Virgin Islands,TRUE
|
||||
BN,,Brunei,TRUE
|
||||
BG,,Bulgaria,TRUE
|
||||
BF,,Burkina Faso,TRUE
|
||||
BI,,Burundi,TRUE
|
||||
KH,,Cambodia,TRUE
|
||||
CM,,Cameroon,TRUE
|
||||
CA,,Canada,TRUE
|
||||
IC,,Canary Islands,TRUE
|
||||
CV,,Cape Verde,TRUE
|
||||
BQ,,Caribbean Netherlands,TRUE
|
||||
KY,,Cayman Islands,TRUE
|
||||
CF,,Central African Republic,TRUE
|
||||
EA,,Ceuta and Melilla,TRUE
|
||||
TD,,Chad,TRUE
|
||||
CL,,Chile,TRUE
|
||||
CN,,China,TRUE
|
||||
CX,,Christmas Island,TRUE
|
||||
CC,,Cocos (Keeling) Islands,TRUE
|
||||
CO,,Colombia,TRUE
|
||||
KM,,Comoros,TRUE
|
||||
CG,,Congo (DRC),TRUE
|
||||
CD,,Congo (Republic),TRUE
|
||||
CK,,Cook Islands,TRUE
|
||||
CR,,Costa Rica,TRUE
|
||||
CI,,Côte d’Ivoire,TRUE
|
||||
HR,,Croatia,TRUE
|
||||
CU,,Cuba,TRUE
|
||||
CW,,Curaçao,TRUE
|
||||
CY,,Cyprus,TRUE
|
||||
CZ,,Czech Republic,TRUE
|
||||
DK,,Denmark,TRUE
|
||||
DG,,Diego Garcia,TRUE
|
||||
DJ,,Djibouti,TRUE
|
||||
DM,,Dominica,TRUE
|
||||
DO,,Dominican Republic,TRUE
|
||||
EC,,Ecuador,TRUE
|
||||
EG,,Egypt,TRUE
|
||||
SV,,El Salvador,TRUE
|
||||
GQ,,Equatorial Guinea,TRUE
|
||||
ER,,Eritrea,TRUE
|
||||
EE,,Estonia,TRUE
|
||||
ET,,Ethiopia,TRUE
|
||||
FK,,Falkland Islands,TRUE
|
||||
FO,,Faroe Islands,TRUE
|
||||
FJ,,Fiji,TRUE
|
||||
FI,,Finland,TRUE
|
||||
FR,,France,TRUE
|
||||
GF,,French Guiana,TRUE
|
||||
PF,,French Polynesia,TRUE
|
||||
TF,,French Southern Territories,TRUE
|
||||
GA,,Gabon,TRUE
|
||||
GM,,Gambia,TRUE
|
||||
GE,,Georgia,TRUE
|
||||
DE,,Germany,TRUE
|
||||
GH,,Ghana,TRUE
|
||||
GI,,Gibraltar,TRUE
|
||||
GR,,Greece,TRUE
|
||||
GL,,Greenland,TRUE
|
||||
GD,,Grenada,TRUE
|
||||
GP,,Guadeloupe,TRUE
|
||||
GU,,Guam,TRUE
|
||||
GT,,Guatemala,TRUE
|
||||
GG,,Guernsey,TRUE
|
||||
GN,,Guinea,TRUE
|
||||
GW,,Guinea-Bissau,TRUE
|
||||
GY,,Guyana,TRUE
|
||||
HT,,Haiti,TRUE
|
||||
HM,,Heard & McDonald Islands,TRUE
|
||||
HN,,Honduras,TRUE
|
||||
HK,,Hong Kong,TRUE
|
||||
HU,,Hungary,TRUE
|
||||
IS,,Iceland,TRUE
|
||||
IN,,India,TRUE
|
||||
ID,,Indonesia,TRUE
|
||||
IR,,Iran,TRUE
|
||||
IQ,,Iraq,TRUE
|
||||
IE,,Ireland,TRUE
|
||||
IM,,Isle of Man,TRUE
|
||||
IL,,Israel,TRUE
|
||||
IT,,Italy,TRUE
|
||||
JM,,Jamaica,TRUE
|
||||
JP,,Japan,TRUE
|
||||
JE,,Jersey,TRUE
|
||||
JO,,Jordan,TRUE
|
||||
KZ,,Kazakhstan,TRUE
|
||||
KE,,Kenya,TRUE
|
||||
KI,,Kiribati,TRUE
|
||||
XK,,Kosovo,TRUE
|
||||
KW,,Kuwait,TRUE
|
||||
KG,,Kyrgyzstan,TRUE
|
||||
LA,,Laos,TRUE
|
||||
LV,,Latvia,TRUE
|
||||
LB,,Lebanon,TRUE
|
||||
LS,,Lesotho,TRUE
|
||||
LR,,Liberia,TRUE
|
||||
LY,,Libya,TRUE
|
||||
LI,,Liechtenstein,TRUE
|
||||
LT,,Lithuania,TRUE
|
||||
LU,,Luxembourg,TRUE
|
||||
MO,,Macau,TRUE
|
||||
MK,,Macedonia (FYROM),TRUE
|
||||
MG,,Madagascar,TRUE
|
||||
MW,,Malawi,TRUE
|
||||
MY,,Malaysia,TRUE
|
||||
MV,,Maldives,TRUE
|
||||
ML,,Mali,TRUE
|
||||
MT,,Malta,TRUE
|
||||
MH,,Marshall Islands,TRUE
|
||||
MQ,,Martinique,TRUE
|
||||
MR,,Mauritania,TRUE
|
||||
MU,,Mauritius,TRUE
|
||||
YT,,Mayotte,TRUE
|
||||
MX,,Mexico,TRUE
|
||||
FM,,Micronesia,TRUE
|
||||
MD,,Moldova,TRUE
|
||||
MC,,Monaco,TRUE
|
||||
MN,,Mongolia,TRUE
|
||||
ME,,Montenegro,TRUE
|
||||
MS,,Montserrat,TRUE
|
||||
MA,,Morocco,TRUE
|
||||
MZ,,Mozambique,TRUE
|
||||
MM,,Myanmar (Burma),TRUE
|
||||
NA,,Namibia,TRUE
|
||||
NR,,Nauru,TRUE
|
||||
NP,,Nepal,TRUE
|
||||
NL,,Netherlands,TRUE
|
||||
NC,,New Caledonia,TRUE
|
||||
NZ,,New Zealand,TRUE
|
||||
NI,,Nicaragua,TRUE
|
||||
NE,,Niger,TRUE
|
||||
NG,,Nigeria,TRUE
|
||||
NU,,Niue,TRUE
|
||||
NF,,Norfolk Island,TRUE
|
||||
KP,,North Korea,TRUE
|
||||
MP,,Northern Mariana Islands,TRUE
|
||||
NO,,Norway,TRUE
|
||||
OM,,Oman,TRUE
|
||||
PK,,Pakistan,TRUE
|
||||
PW,,Palau,TRUE
|
||||
PS,,Palestine,TRUE
|
||||
PA,,Panama,TRUE
|
||||
PG,,Papua New Guinea,TRUE
|
||||
PY,,Paraguay,TRUE
|
||||
PE,,Peru,TRUE
|
||||
PH,,Philippines,TRUE
|
||||
PN,,Pitcairn Islands,TRUE
|
||||
PL,,Poland,TRUE
|
||||
PT,,Portugal,TRUE
|
||||
PR,,Puerto Rico,TRUE
|
||||
QA,,Qatar,TRUE
|
||||
RE,,Réunion,TRUE
|
||||
RO,,Romania,TRUE
|
||||
RU,,Russia,TRUE
|
||||
RW,,Rwanda,TRUE
|
||||
BL,,Saint Barthélemy,TRUE
|
||||
SH,,Saint Helena,TRUE
|
||||
KN,,Saint Kitts and Nevis,TRUE
|
||||
LC,,Saint Lucia,TRUE
|
||||
MF,,Saint Martin,TRUE
|
||||
PM,,Saint Pierre and Miquelon,TRUE
|
||||
WS,,Samoa,TRUE
|
||||
SM,,San Marino,TRUE
|
||||
ST,,São Tomé and Príncipe,TRUE
|
||||
SA,,Saudi Arabia,TRUE
|
||||
SN,,Senegal,TRUE
|
||||
RS,,Serbia,TRUE
|
||||
SC,,Seychelles,TRUE
|
||||
SL,,Sierra Leone,TRUE
|
||||
SG,,Singapore,TRUE
|
||||
SX,,Sint Maarten,TRUE
|
||||
SK,,Slovakia,TRUE
|
||||
SI,,Slovenia,TRUE
|
||||
SB,,Solomon Islands,TRUE
|
||||
SO,,Somalia,TRUE
|
||||
ZA,,South Africa,TRUE
|
||||
KR,,South Korea,TRUE
|
||||
SS,,South Sudan,TRUE
|
||||
ES,,Spain,TRUE
|
||||
LK,,Sri Lanka,TRUE
|
||||
VC,,St. Vincent & Grenadines,TRUE
|
||||
SD,,Sudan,TRUE
|
||||
SR,,Suriname,TRUE
|
||||
SJ,,Svalbard and Jan Mayen,TRUE
|
||||
SZ,,Swaziland,TRUE
|
||||
SE,,Sweden,TRUE
|
||||
CH,,Switzerland,TRUE
|
||||
SY,,Syria,TRUE
|
||||
TW,,Taiwan,TRUE
|
||||
TJ,,Tajikistan,TRUE
|
||||
TZ,,Tanzania,TRUE
|
||||
TH,,Thailand,TRUE
|
||||
TL,,Timor-Leste,TRUE
|
||||
TG,,Togo,TRUE
|
||||
TK,,Tokelau,TRUE
|
||||
TO,,Tonga,TRUE
|
||||
TT,,Trinidad and Tobago,TRUE
|
||||
TA,,Tristan da Cunha,TRUE
|
||||
TN,,Tunisia,TRUE
|
||||
TR,,Turkey,TRUE
|
||||
TM,,Turkmenistan,TRUE
|
||||
TC,,Turks and Caicos Islands,TRUE
|
||||
TV,,Tuvalu,TRUE
|
||||
UM,,U.S. Outlying Islands,TRUE
|
||||
VI,,U.S. Virgin Islands,TRUE
|
||||
UG,,Uganda,TRUE
|
||||
UA,,Ukraine,TRUE
|
||||
AE,,United Arab Emirates,TRUE
|
||||
GB,,United Kingdom,TRUE
|
||||
US,,United States,TRUE
|
||||
UY,,Uruguay,TRUE
|
||||
UZ,,Uzbekistan,TRUE
|
||||
VU,,Vanuatu,TRUE
|
||||
VA,,Vatican City,TRUE
|
||||
VE,,Venezuela,TRUE
|
||||
VN,,Vietnam,TRUE
|
||||
WF,,Wallis and Futuna,TRUE
|
||||
EH,,Western Sahara,TRUE
|
||||
YE,,Yemen,TRUE
|
||||
ZM,,Zambia,TRUE
|
||||
ZW,,Zimbabwe,TRUE
|
||||
CUSTOM1,TID_REGION_CUSTOM1,,FALSE
|
||||
CUSTOM2,TID_REGION_CUSTOM2,,FALSE
|
||||
CUSTOM3,TID_REGION_CUSTOM3,,FALSE
|
||||
CUSTOM4,TID_REGION_CUSTOM4,,FALSE
|
||||
CUSTOM5,TID_REGION_CUSTOM5,,FALSE
|
||||
|
5
assets/csv_logic/resource_packs.csv
Normal file
5
assets/csv_logic/resource_packs.csv
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
"Name","TID","Resource","Amount","IconFile"
|
||||
"String","String","String","int","string"
|
||||
"Gold1","TID_RESOURCE_PACK_GOLD_SMALL","Gold",1000,"shop_gold01"
|
||||
"Gold2","TID_RESOURCE_PACK_GOLD_MEDIUM","Gold",10000,"shop_gold02"
|
||||
"Gold3","TID_RESOURCE_PACK_GOLD_BIG","Gold",100000,"shop_gold03"
|
||||
|
13
assets/csv_logic/resources.csv
Normal file
13
assets/csv_logic/resources.csv
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
"Name","TID","IconSWF","CollectEffect","IconExportName","PremiumCurrency","CapFullTID","TextRed","TextGreen","TextBlue","Cap","IconFile","ShopIcon"
|
||||
"String","String","String","String","String","Boolean","String","int","int","int","int","string","string"
|
||||
"Diamonds","TID_DIAMONDS","sc/ui.sc",,"icon_gems","TRUE",,,255,92,,"gems","icon_gems"
|
||||
"Gold","TID_GOLD","sc/ui.sc","Collect Gold","icon_gold",,"TID_GOLD_CAP_FULL",192,,192,500000,"gold","icon_gold"
|
||||
"ChestOrderIndex",,,,,,,,,,,,
|
||||
"ChestCount",,,,,,,,,,,,
|
||||
"StarCount",,,,,,,,,,,,
|
||||
"FreeGold","TID_GOLD","sc/ui.sc","Collect Gold","icon_gold",,,192,,192,500000,"gold","icon_gold"
|
||||
"MaxScore",,,,,,,,,,,,
|
||||
"ThreeCrownWins",,,,,,,,,,,,
|
||||
"CardCount",,,,,,,,,,,,
|
||||
"FavouriteSpell",,,,,,,,,,,,
|
||||
"DonationsTotal",,,,,,,,,,,,
|
||||
|
5
assets/csv_logic/spawn_points.csv
Normal file
5
assets/csv_logic/spawn_points.csv
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
"Name","FileName","ExportName","FirstWait","Characters","Wait","DontLoop"
|
||||
"string","string","string","int","String","int","boolean"
|
||||
"SpawnPoint",,,1,"Barbarian",1300,
|
||||
,,,,"Barbarian",1300,
|
||||
,,,,"Barbarian",7300,
|
||||
|
2
assets/csv_logic/spell_sets.csv
Normal file
2
assets/csv_logic/spell_sets.csv
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
"Name","Spells"
|
||||
"String","String"
|
||||
|
12
assets/csv_logic/spells_buildings.csv
Normal file
12
assets/csv_logic/spells_buildings.csv
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
"Name","IconFile","UnlockArena","Rarity","ManaCost","NotInUse","Mirror","SummonCharacter","SummonNumber","Radius","RadiusRangeIncrease","Projectile","InstantDamage","DamagePerSecond","DurationSeconds","InstantHeal","HealPerSecond","Effect","DamageType","Pushback","MultipleProjectiles","CustomFirstProjectile","BuffTime","BuffTimeIncreasePerLevel","BuffNumber","BuffType","BuffOnDamage","OnlyOwnTroops","OnlyEnemies","CastSound","AreaEffectObject","TID","TID_INFO","TID_FLAVOR"
|
||||
"string","string","string","string","int","boolean","boolean","string","int","int","int","string","int","int","int","int","int","string","string","int","int","string","int","int","int","string","string","boolean","boolean","string","string","string","string","string"
|
||||
"Cannon","chaos_cannon","Arena3","Common",6,,,"Cannon",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_CANNON","TID_SPELL_INFO_CANNON",
|
||||
"GoblinHut","fire_furnace","Arena1","Rare",5,,,"GoblinHut",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_GOBLIN_HUT","TID_SPELL_INFO_GOBLIN_HUT",
|
||||
"Mortar","building_mortar","Arena6","Common",6,,,"Mortar",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_MORTAR","TID_SPELL_INFO_MORTAR",
|
||||
"InfernoTower","building_inferno","Arena4","Rare",6,,,"InfernoTower",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_INFERNO","TID_SPELL_INFO_INFERNO",
|
||||
"BombTower","bomb_tower","Arena2","Rare",6,,,"BombTower",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_BOMB_TOWER","TID_SPELL_INFO_BOMB_TOWER",
|
||||
"BarbarianHut","barbarian_hut","Arena3","Rare",6,,,"BarbarianHut",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_BARBARIAN_HUT","TID_SPELL_INFO_BARBARIAN_HUT",
|
||||
"Tesla","building_tesla","Arena4","Common",4,,,"Tesla",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_TESLA","TID_SPELL_INFO_TESLA",
|
||||
"Elixir Collector","building_elixir_collector","Arena6","Rare",5,,,"ElixirCollector",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_ELIXIR_COLLECTOR","TID_SPELL_INFO_ELIXIR_COLLECTOR",
|
||||
"Xbow","building_xbow","Arena3","Epic",6,,,"Xbow",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_XBOW","TID_SPELL_INFO_XBOW",
|
||||
"Tombstone","tombstone","Arena2","Rare",3,,,"Tombstone",,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_TOMBSTONE","TID_SPELL_INFO_TOMBSTONE",
|
||||
|
25
assets/csv_logic/spells_characters.csv
Normal file
25
assets/csv_logic/spells_characters.csv
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
"Name","IconFile","UnlockArena","Rarity","ManaCost","NotInUse","Mirror","SummonCharacter","SummonNumber","Radius","RadiusRangeIncrease","Projectile","InstantDamage","DamagePerSecond","DurationSeconds","InstantHeal","HealPerSecond","Effect","DamageType","Pushback","MultipleProjectiles","CustomFirstProjectile","BuffTime","BuffTimeIncreasePerLevel","BuffNumber","BuffType","BuffOnDamage","OnlyOwnTroops","OnlyEnemies","CastSound","AreaEffectObject","TID","TID_INFO","TID_FLAVOR"
|
||||
"string","string","string","string","int","boolean","boolean","string","int","int","int","string","int","int","int","int","int","string","string","int","int","string","int","int","int","string","string","boolean","boolean","string","string","string","string","string"
|
||||
"Knight","knight","TrainingCamp","Common",3,,,"Knight",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_KNIGHT","TID_SPELL_INFO_KNIGHT",
|
||||
"Archer","archers","TrainingCamp","Common",3,,,"Archer",2,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_ARCHERS","TID_SPELL_INFO_ARCHERS",
|
||||
"Goblins","goblins","Arena1","Common",2,,,"Goblin",3,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_GOBLINS","TID_SPELL_INFO_GOBLINS",
|
||||
"Giant","giant","TrainingCamp","Rare",5,,,"Giant",,,,,,,,,,"CharacterDeploy",,,,,,,,,,"true",,,,"TID_SPELL_GIANT","TID_SPELL_INFO_GIANT",
|
||||
"Pekka","pekka","Arena4","Epic",8,,,"Pekka",,,,,,,,,,"CharacterDeploy",,,,,,,,,,"true",,,,"TID_SPELL_PEKKA","TID_SPELL_INFO_PEKKA",
|
||||
"Minions","minion","Arena2","Common",3,,,"Minion",3,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_MINIONS","TID_SPELL_INFO_MINIONS",
|
||||
"Balloon","chr_balloon","Arena2","Epic",4,,,"Balloon",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_BALLOON","TID_SPELL_INFO_BALLOON",
|
||||
"Witch","chr_witch","TrainingCamp","Epic",5,,,"Witch",,,,,,,,,,"CharacterDeploy",,,,,,,,,,"true",,,,"TID_SPELL_WITCH","TID_SPELL_INFO_WITCH",
|
||||
"Barbarians","barbarians","Arena3","Common",5,,,"Barbarian",4,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_BARBARIANS","TID_SPELL_INFO_BARBARIANS",
|
||||
"Golem","chr_golem","Arena6","Epic",8,,,"Golem",,,,,,,,,,"CharacterDeploy",,,,,,,,,,"true",,,,"TID_SPELL_GOLEM","TID_SPELL_INFO_GOLEM",
|
||||
"Skeletons","skeletons","Arena2","Common",1,,,"Skeleton",4,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_SKELETONS","TID_SPELL_INFO_SKELETONS",
|
||||
"Valkyrie","valkyrie","Arena1","Rare",4,,,"Valkyrie",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_VALKYRIE","TID_SPELL_INFO_VALKYRIE",
|
||||
"SkeletonArmy","skeleton_horde","TrainingCamp","Epic",4,,,"Skeleton",20,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_SKELETON_HORDE","TID_SPELL_INFO_SKELETON_HORDE",
|
||||
"Bomber","bomber","TrainingCamp","Common",3,,,"Bomber",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_BOMBER","TID_SPELL_INFO_BOMBER",
|
||||
"Musketeer","musketeer","TrainingCamp","Rare",5,,,"Musketeer",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_MUSKETEER","TID_SPELL_INFO_MUSKETEER",
|
||||
"BabyDragon","baby_dragon","TrainingCamp","Epic",4,,,"BabyDragon",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_BABY_DRAGON","TID_SPELL_INFO_BABY_DRAGON",
|
||||
"MiniPekka","mini_pekka","TrainingCamp","Epic",4,,,"MiniPekka",,,,,,,,,,"CharacterDeploy",,,,,,,,,,"true",,,,"TID_SPELL_MINIPEKKA","TID_SPELL_INFO_MINIPEKKA",
|
||||
"Wizard","wizard","Arena5","Rare",5,,,"Wizard",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_WIZARD","TID_SPELL_INFO_WIZARD",
|
||||
"Prince","prince","TrainingCamp","Rare",5,,,"Prince",,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_PRINCE","TID_SPELL_INFO_PRINCE",
|
||||
"SpearGoblins","goblin_archer","Arena1","Common",2,,,"SpearGoblin",3,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_SPEAR_GOBLINS","TID_SPELL_INFO_SPEAR_GOBLINS",
|
||||
"GiantSkeleton","giant_skeleton","Arena2","Epic",7,,,"GiantSkeleton",1,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_GIANT_SKELETON","TID_SPELL_INFO_GIANT_SKELETON",
|
||||
"HogRider","hog_rider","Arena4","Rare",4,,,"HogRider",1,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_HOG_RIDER","TID_SPELL_INFO_HOG_RIDER",
|
||||
"MinionHorde","minion_horde","Arena4","Common",5,,,"Minion",6,,,,,,,,,"CharacterDeploy",,,,,,,,,,,,,,"TID_SPELL_MINION_HORDE","TID_SPELL_INFO_MINION_HORDE",
|
||||
|
11
assets/csv_logic/spells_other.csv
Normal file
11
assets/csv_logic/spells_other.csv
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"Name","IconFile","UnlockArena","Rarity","ManaCost","NotInUse","Mirror","SummonCharacter","SummonNumber","Radius","RadiusRangeIncrease","Projectile","InstantDamage","DamagePerSecond","DurationSeconds","InstantHeal","HealPerSecond","Effect","DamageType","Pushback","MultipleProjectiles","CustomFirstProjectile","BuffTime","BuffTimeIncreasePerLevel","BuffNumber","BuffType","BuffOnDamage","OnlyOwnTroops","OnlyEnemies","CastSound","AreaEffectObject","TID","TID_INFO","TID_FLAVOR"
|
||||
"string","string","string","string","int","boolean","boolean","string","int","int","int","string","int","int","int","int","int","string","string","int","int","string","int","int","int","string","string","boolean","boolean","string","string","string","string","string"
|
||||
"Fireball","fire_fireball","TrainingCamp","Rare",4,,,,,,,"FireballSpell",,,,,,,,,,,,,,,,,"true","Fire ball",,"TID_SPELL_FIREBALL","TID_SPELL_INFO_FIREBALL",
|
||||
"Arrows","order_volley","TrainingCamp","Common",3,,,,,4000,,"ArrowsSpellDeco",,,,,,"Cast_RainOfArrows",,,15,"ArrowsSpell",,,,,,,"true","SpellCasting",,"TID_SPELL_ARROWS","TID_SPELL_INFO_ARROWS",
|
||||
"Rage","rage","Arena3","Epic",3,,,,,,,,,,,,,,,,,,,,,,,"true",,"SpellCasting","Rage","TID_SPELL_RAGE","TID_SPELL_INFO_RAGE",
|
||||
"Rocket","rocket","Arena3","Rare",6,,,,,,,"RocketSpell",,,,,,,,,,,,,,,,,"true","sound_rocket_spawn",,"TID_SPELL_ROCKET","TID_SPELL_INFO_ROCKET",
|
||||
"GoblinBarrel","goblin_barrel","Arena1","Epic",4,,,,,,,"GoblinBarrelSpell",,,,,,"goblin_barrel_spawn",,,,,,,,,,,"true","sound_goblin_barrel_spawn",,"TID_SPELL_GOBLIN_BARREL","TID_SPELL_INFO_GOBLIN_BARREL",
|
||||
"Freeze","freeze","Arena4","Epic",4,,,,,,,,,,,,,"Spell_freeze_cast",,,,,,,,,,,"true","SpellCasting","Freeze","TID_SPELL_FREEZE","TID_SPELL_INFO_FREEZE",
|
||||
"Mirror","mirror","Arena5","Epic",1,,"true",,,,,,,,,,,,,,,,,,,,,,,"SpellCasting",,"TID_SPELL_MIRROR","TID_SPELL_INFO_MIRROR",
|
||||
"Lightning","lightning","Arena1","Epic",6,,,,,3000,,,,,,,,,,,,,,,,,,,"true","SpellCasting","Lightning","TID_SPELL_LIGHTNING","TID_SPELL_INFO_LIGHTNING",
|
||||
"Zap","zap","Arena5","Common",2,,,,,2500,,,,,,,,,,,,,,,,,,,"true","SpellCasting","Zap","TID_SPELL_ZAP","TID_SPELL_INFO_ZAP",
|
||||
|
26
assets/csv_logic/taunts.csv
Normal file
26
assets/csv_logic/taunts.csv
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
"Name","TID","TauntMenu","FileName","ExportName","IconExportName","BtnExportName","Sound"
|
||||
"String","String","Boolean","string","string","string","string","string"
|
||||
"Taunt1","TID_EMOTE1","TRUE",,,,"taunt_btn_01",
|
||||
"Taunt2","TID_EMOTE2","TRUE",,,,"taunt_btn_02",
|
||||
"Taunt3","TID_EMOTE3","TRUE",,,,"taunt_btn_03",
|
||||
"Taunt4","TID_EMOTE4","TRUE",,,,"taunt_btn_04",
|
||||
"Taunt5","TID_EMOTE5","TRUE",,,,"taunt_btn_05",
|
||||
"Taunt6","TID_EMOTE6","TRUE",,,,"taunt_btn_06",
|
||||
"Taunt7","TID_EMOTE7",,,,,,
|
||||
"Taunt8","TID_EMOTE8",,,,,,
|
||||
"Taunt9","TID_EMOTE9",,,,,,
|
||||
"NPC1_Start","NPC1_TAUNT_START",,,,,,
|
||||
"NPC1_Tower","NPC1_TAUNT_TOWER",,,,,,
|
||||
"NPC1_Deploy","NPC1_TAUNT_DEPLOY",,,,,,
|
||||
"NPC1_Attack","NPC1_TAUNT_ATTACK",,,,,,
|
||||
"NPC2_Start","NPC2_TAUNT_START",,,,,,
|
||||
"NPC2_Tower","NPC2_TAUNT_TOWER",,,,,,
|
||||
"NPC3_Start","NPC3_TAUNT_START",,,,,,
|
||||
"NPC3_Tower","NPC3_TAUNT_TOWER",,,,,,
|
||||
"NPC4_Start","NPC4_TAUNT_START",,,,,,
|
||||
"NPC4_Tower","NPC4_TAUNT_TOWER",,,,,,
|
||||
"NPC16_Start","NPC16_TAUNT_START",,,,,,
|
||||
"TauntGfx1",,"TRUE","sc/ui_stickers.sc","sticker_thumbs_anim","sticker_thumbs_icon","emoji_btn_01","sound_king_congratulate"
|
||||
"TauntGfx2",,"TRUE","sc/ui_stickers.sc","sticker_angry_anim","sticker_angry_icon","emoji_btn_02","sound_king_mad"
|
||||
"TauntGfx3",,"TRUE","sc/ui_stickers.sc","sticker_cry_anim","sticker_cry_icon","emoji_btn_03","sound_king_crying"
|
||||
"TauntGfx4",,"TRUE","sc/ui_stickers.sc","sticker_lol_anim","sticker_lol_icon","emoji_btn_04","sound_king_happy"
|
||||
|
42
assets/csv_logic/treasure_chests.csv
Normal file
42
assets/csv_logic/treasure_chests.csv
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
"Name","BaseChest","Arena","ShopPriceWithoutSpeedUp","SpeedUpCost","TimeTakenDays","TimeTakenHours","TimeTakenMinutes","TimeTakenSeconds","RandomSpells","DifferentSpells","ChestCountInChestCycle","RareChance","EpicChance","GuaranteedSpells","MinDiamonds","MaxDiamonds","MinGold","MaxGold","FileName","ExportName","ShopExportName","GainedExportName","AnimExportName","OpenInstanceName","SlotLandEffect","OpenEffect","TapSound","TapSoundShop","DescriptionTID","TID","NotificationTID","AddFirstSpellToCollection","TutorialChest","SpellSet","Exp"
|
||||
"String","String","String","int","int","int","int","int","int","int","int","int","int","int","String","int","int","int","int","String","String","String","String","String","String","String","String","String","String","String","String","String","boolean","boolean","String","int"
|
||||
"Newbie1",,"TrainingCamp",0,1,,,,15,2,2,,,,"Knight",,,16,16,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
,,,,,,,,,,,,,,"Arrows",,,,,,,,,,,,,,,,,,,,,
|
||||
"Newbie2",,"TrainingCamp",0,1,,,,15,2,2,,10,200,"Musketeer",,,16,16,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"NewbieFixedEpic",,"TrainingCamp",0,1,,,,15,2,2,,10,2,,,,13,19,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"NewbieRandom",,"TrainingCamp",0,1,,,,15,2,2,,10,200,,,,13,19,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Silver",,"TrainingCamp",5,15,,3,,,3,3,60,12,540,,,,19,29,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold",,"TrainingCamp",20,40,,8,,,10,5,19,10,285,,,,64,96,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic",,"TrainingCamp",230,60,,12,,,30,8,1,5,30,,,,192,288,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free",,"TrainingCamp",0,0,,,,,3,3,,10,200,"Goblins",,,19,29,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star",,"TrainingCamp",0,0,,,,,10,5,,10,200,,,,64,96,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Silver_Arena1","Silver","Arena1",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold_Arena1","Gold","Arena1",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic_Arena1","Magic","Arena1",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free_Arena1","Free","Arena1",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star_Arena1","Star","Arena1",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_star",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Silver_Arena2","Silver","Arena2",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold_Arena2","Gold","Arena2",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic_Arena2","Magic","Arena2",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free_Arena2","Free","Arena2",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star_Arena2","Star","Arena2",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_star",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Silver_Arena3","Silver","Arena3",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold_Arena3","Gold","Arena3",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic_Arena3","Magic","Arena3",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free_Arena3","Free","Arena3",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star_Arena3","Star","Arena3",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_star",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Silver_Arena4","Silver","Arena4",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold_Arena4","Gold","Arena4",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic_Arena4","Magic","Arena4",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free_Arena4","Free","Arena4",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star_Arena4","Star","Arena4",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_star",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Silver_Arena5","Silver","Arena5",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold_Arena5","Gold","Arena5",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic_Arena5","Magic","Arena5",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free_Arena5","Free","Arena5",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star_Arena5","Star","Arena5",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_star",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Silver_Arena6","Silver","Arena6",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_iron","chest_iron_open","get_metal_chest","chest_open_iron","chest_iron","chest_landing_iron","openChest_iron","tap_iron_chest","sound_openChest_iron",,"TID_CHEST_SILVER","TID_CHEST_SILVER_NOTIFICATION",,,,
|
||||
"Gold_Arena6","Gold","Arena6",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold","chest_gold_open","get_gold_chest","chest_open_gold","chest_gold","chest_landing_gold","openChest_gold","tap_gold_chest","sound_openChest_gold",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
"Magic_Arena6","Magic","Arena6",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_magical","chest_magical_open","get_magic_chest","chest_open_magical","chest_magical","chest_landing_magic","openChest_magical","tap_magic_chest","sound_openChest_magical",,"TID_CHEST_MAGICAL","TID_CHEST_MAGICAL_NOTIFICATION",,,,
|
||||
"Free_Arena6","Free","Arena6",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_wood",,"get_wood_chest","chest_open_wooden","chest_wood","chest_landing_wood","openChest_wood","tap_wooden_chest","sound_openChest_wood",,"TID_CHEST_WOOD","TID_CHEST_WOOD_NOTIFICATION",,,,
|
||||
"Star_Arena6","Star","Arena6",,,,,,,,,,,,,,,,,"sc/ui_chest.sc","Chest_gold",,"get_gold_chest","chest_open_gold","chest_star","chest_landing_magic","openChest_star","tap_magic_chest","sound_openChest_star",,"TID_CHEST_GOLD","TID_CHEST_GOLD_NOTIFICATION",,,,
|
||||
|
4
assets/csv_logic/tutorials_home.csv
Normal file
4
assets/csv_logic/tutorials_home.csv
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
"Name","Location","NPC","TID","ButtonTID","FinishRequirement","WaitTimeMS","FileName","PopupCorner","PopupExportName","BubbleExportName","Sound","Darkening","BubbleObject","OverlayExportName","SpellDragExportName","SpellToCast","TutorialSpell","SpellTileX","SpellTileY","DisableSpells","HideCombatUI","DisableTroopMovement","DisableLeaderMovement","DisableSpawnPoints","DisableOpponentSpells","PauseCombat","Dependency","Priority","Taunt","HighlightTargetsOnManaFull","DisableBattleStartScreen","NpcMatchesPlayed","DisableBattleMenu"
|
||||
"String","String","String","String","String","String","int","String","int","String","String","String","boolean","String","String","String","String","String","int","int","boolean","boolean","boolean","boolean","boolean","boolean","boolean","String","int","String","boolean","boolean","int","boolean"
|
||||
"UpgradeSpell",,,,,"FuseSpell",,,,,,,,,,,,,,,,,,,,,,,0,,,,,"true"
|
||||
"AskName",,,,,"EnterName",,,,,,,,,,,,,,,,,,,,,,,1,,,,6,
|
||||
|
23
assets/csv_logic/tutorials_npc.csv
Normal file
23
assets/csv_logic/tutorials_npc.csv
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
"Name","Location","NPC","TID","ButtonTID","FinishRequirement","WaitTimeMS","FileName","PopupCorner","PopupExportName","BubbleExportName","Sound","Darkening","BubbleObject","OverlayExportName","SpellDragExportName","SpellToCast","TutorialSpell","SpellTileX","SpellTileY","DisableSpells","HideCombatUI","DisableTroopMovement","DisableLeaderMovement","DisableSpawnPoints","DisableOpponentSpells","PauseCombat","Dependency","Priority","Taunt","HighlightTargetsOnManaFull","DisableBattleStartScreen","NpcMatchesPlayed","DisableBattleMenu"
|
||||
"String","String","String","String","String","String","int","String","int","String","String","String","boolean","String","String","String","String","String","int","int","boolean","boolean","boolean","boolean","boolean","boolean","boolean","String","int","String","boolean","boolean","int","boolean"
|
||||
"NPC1_Start_Delay","FirstMatch","Npc1",,,,3000,,,,,,,,,,,,,,,"TRUE",,,,"TRUE",,,,,,"true",,
|
||||
"NPC1_King_Speaks","FirstMatch","Npc1","TID_TUTORIAL_KING_WELCOME",,,,"sc/tutorial.sc",4,"tutorial_character1_left","bubble_tutorial_anim","sound_tutorial_first_vo",,,,,,,,,,"TRUE",,,,"TRUE",,,,,,"true",,
|
||||
,,,"TID_TUTORIAL_KING_WELCOME2",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC1_Start_Taunt","FirstMatch","Npc1",,,,2000,,,,,,,,,,,,,,,"TRUE",,,,"TRUE",,"NPC1_King_Speaks",,,,,,
|
||||
"NPC1_Attack_HighlightArea","FirstMatch","Npc1","TID_TUTORIAL_ENEMY_AREA",,,1000,,,,,"sound_tutorial_first_plink",,,,,,,,,,"TRUE",,,,"TRUE",,,,,,,,
|
||||
"NPC1_Attack_HighlightUnits","FirstMatch","Npc1",,,,3000,,,,,"sound_tutorial_second_plink",,,,,,,,,,"TRUE",,,,"TRUE",,,,,,,,
|
||||
"NPC1_Attack_ShowSpells","FirstMatch","Npc1",,,,3000,,,,,"sound_tutorial_second_vo",,,,,,,,,,,,,,"TRUE",,,,,,,,
|
||||
"NPC1_Attack_DragSpell","FirstMatch","Npc1",,,"CastSpell",,,,,,,,,,"Tutorial_Hand1","Knight",,10,38,,,,,,"TRUE",,,,"NPC1_Deploy",,,,
|
||||
"NPC1_Attack_DragSpell2","FirstMatch","Npc1",,,"CastSpell",,,,,,,,,,"Tutorial_Hand1","Archer",,10,38,,,,,,"TRUE",,,,,,,,
|
||||
"NPC1_Attack_Tower","FirstMatch","Npc1",,,"StarGained",,,,,,,,,,,,,,,,,,,,"TRUE",,,,,,,,
|
||||
"NPC1_Defend_Delay","FirstMatch","Npc1",,,,5000,,,,,,,,,,,,,,,,,,,"TRUE",,,,,,,,
|
||||
"NPC1_Defend_EnemyDeploy","FirstMatch","Npc1",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC1_Defend2_Delay","FirstMatch","Npc1",,,,10000,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC1_Attack_Last","FirstMatch","Npc1",,,,120000,,,,,,,,,,,,,,,,,,,,,,,,"TRUE",,,
|
||||
"NPC2_Mana_Popup_Delay","FirstMatch","Npc2",,,,1200,,,,,,,,,,,,,,"TRUE",,,,,"TRUE","TRUE",,,,,"true",,
|
||||
"NPC2_Mana_Popup","FirstMatch","Npc2",,,"PressOK",,"sc/ui.sc",,"popup_elixir_tip",,,"true",,,,,,,,"TRUE",,,,,,"TRUE","NPC2_Mana_Popup_Delay",,,,"true",,
|
||||
"NPC3_start","TrainingCamp","Npc3",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC4_start","TrainingCamp","Npc4",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC5_start","TrainingCamp","Npc5",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC6_start","TrainingCamp","Npc6",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
"NPC7_start","TrainingCamp","Npc7",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
|
37
config/starter-profile.example.json
Normal file
37
config/starter-profile.example.json
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"name_prefix": "Scroll",
|
||||
"exp_level": 3,
|
||||
"exp_points": 0,
|
||||
"gold": 25000,
|
||||
"diamonds": 5000,
|
||||
"free_diamonds": 0,
|
||||
"trophies": 0,
|
||||
"npc_win_count": 1,
|
||||
"npc_lose_count": 0,
|
||||
"arena": "Arena1",
|
||||
"gold_resource": "Gold",
|
||||
"chest_slot_count": 4,
|
||||
"deck": [
|
||||
"Knight",
|
||||
"Archer",
|
||||
"Goblins",
|
||||
"Giant",
|
||||
"Minions",
|
||||
"Fireball",
|
||||
"Arrows",
|
||||
"Cannon"
|
||||
],
|
||||
"extra_collection": [
|
||||
"Musketeer",
|
||||
"Valkyrie",
|
||||
"Skeletons",
|
||||
"Bomber",
|
||||
"Barbarians",
|
||||
"SpearGoblins",
|
||||
"MiniPekka",
|
||||
"Witch"
|
||||
],
|
||||
"card_level_index": 0,
|
||||
"card_count": 20,
|
||||
"finish_tutorials": true
|
||||
}
|
||||
15
data/accounts.json
Normal file
15
data/accounts.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"next_low": 2,
|
||||
"accounts": [
|
||||
{
|
||||
"high": 0,
|
||||
"low": 1,
|
||||
"pass_token": "KIzXwApNr3fe6Yn0SOtv1gm9kOFIZnl3CAFT92EQ",
|
||||
"created_at": 1787460399,
|
||||
"last_seen_at": 1787460399,
|
||||
"session_count": 1,
|
||||
"play_time_seconds": 0,
|
||||
"banned": false
|
||||
}
|
||||
]
|
||||
}
|
||||
182
data/players.json
Normal file
182
data/players.json
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
{
|
||||
"profiles": [
|
||||
{
|
||||
"account": {
|
||||
"high": 0,
|
||||
"low": 1
|
||||
},
|
||||
"name": "Scroll1",
|
||||
"name_set_by_user": false,
|
||||
"exp_level": 1,
|
||||
"exp_points": 0,
|
||||
"gold": 5026,
|
||||
"diamonds": 1000,
|
||||
"free_diamonds": 0,
|
||||
"trophies": 0,
|
||||
"arena": {
|
||||
"table": 54,
|
||||
"name": "Arena1"
|
||||
},
|
||||
"chest_slot_count": 4,
|
||||
"deck": [
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Knight"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Archer"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Goblins"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Giant"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Pekka"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Minions"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Balloon"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Witch"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
}
|
||||
],
|
||||
"collection": [
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Barbarians"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Golem"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Skeletons"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Valkyrie"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "SkeletonArmy"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Bomber"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Musketeer"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "BabyDragon"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "Prince"
|
||||
},
|
||||
"level_index": 0,
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"card": {
|
||||
"table": 26,
|
||||
"name": "SpearGoblins"
|
||||
},
|
||||
"level_index": 1,
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"battle_count": 0,
|
||||
"win_count": 0,
|
||||
"lose_count": 0,
|
||||
"npc_win_count": 1,
|
||||
"npc_lose_count": 0,
|
||||
"three_crown_wins": 0,
|
||||
"tutorials_finished": true,
|
||||
"gold_resource": {
|
||||
"table": 5,
|
||||
"name": "Gold"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
16
logic/logic/Cargo.toml
Normal file
16
logic/logic/Cargo.toml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[package]
|
||||
name = "logic"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
rust-version.workspace = true
|
||||
license.workspace = true
|
||||
description = "Scroll game logic model and wire messages built on top of the titan engine"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
serde = ["dep:serde"]
|
||||
|
||||
[dependencies]
|
||||
titan = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
serde = { workspace = true, optional = true }
|
||||
47
logic/logic/src/commands/client.rs
Normal file
47
logic/logic/src/commands/client.rs
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
use titan::Payload;
|
||||
use crate::commands::chest_source;
|
||||
use crate::commands::command_type;
|
||||
use crate::commands::header::LogicCommandHeader;
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Payload)]
|
||||
#[codec(tag = vint)]
|
||||
pub enum ClientCommand {
|
||||
#[codec(id = command_type::START_REWARD_CLAIM)]
|
||||
StartRewardClaim {
|
||||
header: LogicCommandHeader,
|
||||
#[codec(vint)]
|
||||
chest_id: i32,
|
||||
},
|
||||
#[codec(id = command_type::COLLECT_FREE_CHEST)]
|
||||
CollectFreeChest { header: LogicCommandHeader },
|
||||
#[codec(id = command_type::COLLECT_MULTI_WIN_CHEST)]
|
||||
CollectMultiWinChest { header: LogicCommandHeader },
|
||||
}
|
||||
impl ClientCommand {
|
||||
pub fn command_type(&self) -> i32 {
|
||||
match self {
|
||||
ClientCommand::StartRewardClaim { .. } => command_type::START_REWARD_CLAIM,
|
||||
ClientCommand::CollectFreeChest { .. } => command_type::COLLECT_FREE_CHEST,
|
||||
ClientCommand::CollectMultiWinChest { .. } => command_type::COLLECT_MULTI_WIN_CHEST,
|
||||
}
|
||||
}
|
||||
pub fn header(&self) -> &LogicCommandHeader {
|
||||
match self {
|
||||
ClientCommand::StartRewardClaim { header, .. }
|
||||
| ClientCommand::CollectFreeChest { header }
|
||||
| ClientCommand::CollectMultiWinChest { header } => header,
|
||||
}
|
||||
}
|
||||
pub fn claimed_chest_source(&self) -> Option<i32> {
|
||||
match self {
|
||||
ClientCommand::StartRewardClaim { .. } => Some(chest_source::SLOT),
|
||||
ClientCommand::CollectFreeChest { .. } => Some(chest_source::FREE),
|
||||
ClientCommand::CollectMultiWinChest { .. } => Some(chest_source::CROWN),
|
||||
}
|
||||
}
|
||||
pub fn claimed_chest_id(&self) -> i32 {
|
||||
match self {
|
||||
ClientCommand::StartRewardClaim { chest_id, .. } => *chest_id,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
106
logic/logic/src/commands/command.rs
Normal file
106
logic/logic/src/commands/command.rs
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
use titan::Payload;
|
||||
use crate::commands::chest_source;
|
||||
use crate::commands::command_type;
|
||||
use crate::commands::header::LogicCommandHeader;
|
||||
use crate::commands::reward::LogicReward;
|
||||
use crate::data::LogicDataRef;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicClaimRewardCommand {
|
||||
pub reward: Option<LogicReward>,
|
||||
#[codec(vint)]
|
||||
pub chest_id: i32,
|
||||
#[codec(vint)]
|
||||
pub chest_source: i32,
|
||||
#[codec(vint)]
|
||||
pub server_command_id: i32,
|
||||
pub header: LogicCommandHeader,
|
||||
}
|
||||
impl LogicClaimRewardCommand {
|
||||
pub fn new(reward: LogicReward, chest_id: i32, chest_source: i32) -> Self {
|
||||
Self {
|
||||
reward: Some(reward),
|
||||
chest_id,
|
||||
chest_source,
|
||||
server_command_id: 0,
|
||||
header: LogicCommandHeader::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Payload)]
|
||||
#[codec(tag = vint)]
|
||||
pub enum LogicCommand {
|
||||
#[codec(id = command_type::CLAIM_REWARD)]
|
||||
ClaimReward { command: LogicClaimRewardCommand },
|
||||
#[codec(id = command_type::START_REWARD_CLAIM)]
|
||||
StartRewardClaim {
|
||||
header: LogicCommandHeader,
|
||||
#[codec(vint)]
|
||||
chest_id: i32,
|
||||
},
|
||||
#[codec(id = command_type::FUSE_SPELLS)]
|
||||
FuseSpells {
|
||||
header: LogicCommandHeader,
|
||||
spell: LogicDataRef,
|
||||
},
|
||||
#[codec(id = command_type::COLLECT_FREE_CHEST)]
|
||||
CollectFreeChest { header: LogicCommandHeader },
|
||||
#[codec(id = command_type::COLLECT_MULTI_WIN_CHEST)]
|
||||
CollectMultiWinChest { header: LogicCommandHeader },
|
||||
#[codec(id = command_type::SORT_COLLECTION)]
|
||||
SortCollection {
|
||||
header: LogicCommandHeader,
|
||||
#[codec(vint)]
|
||||
sort_mode: i32,
|
||||
},
|
||||
#[codec(id = command_type::HELP_OPENED)]
|
||||
HelpOpened { header: LogicCommandHeader },
|
||||
#[codec(id = command_type::SHOP_OPENED)]
|
||||
ShopOpened { header: LogicCommandHeader },
|
||||
#[codec(id = command_type::REFRESH_ACHIEVEMENTS)]
|
||||
RefreshAchievements { header: LogicCommandHeader },
|
||||
#[codec(id = command_type::PAGE_OPENED)]
|
||||
PageOpened {
|
||||
header: LogicCommandHeader,
|
||||
#[codec(vint)]
|
||||
page: i32,
|
||||
},
|
||||
}
|
||||
impl LogicCommand {
|
||||
pub fn command_type(&self) -> i32 {
|
||||
match self {
|
||||
LogicCommand::ClaimReward { .. } => command_type::CLAIM_REWARD,
|
||||
LogicCommand::StartRewardClaim { .. } => command_type::START_REWARD_CLAIM,
|
||||
LogicCommand::FuseSpells { .. } => command_type::FUSE_SPELLS,
|
||||
LogicCommand::CollectFreeChest { .. } => command_type::COLLECT_FREE_CHEST,
|
||||
LogicCommand::CollectMultiWinChest { .. } => command_type::COLLECT_MULTI_WIN_CHEST,
|
||||
LogicCommand::SortCollection { .. } => command_type::SORT_COLLECTION,
|
||||
LogicCommand::HelpOpened { .. } => command_type::HELP_OPENED,
|
||||
LogicCommand::ShopOpened { .. } => command_type::SHOP_OPENED,
|
||||
LogicCommand::RefreshAchievements { .. } => command_type::REFRESH_ACHIEVEMENTS,
|
||||
LogicCommand::PageOpened { .. } => command_type::PAGE_OPENED,
|
||||
}
|
||||
}
|
||||
pub fn is_server_command(&self) -> bool {
|
||||
(200..500).contains(&self.command_type())
|
||||
}
|
||||
pub fn claimed_chest_source(&self) -> Option<i32> {
|
||||
match self {
|
||||
LogicCommand::StartRewardClaim { .. } => Some(chest_source::SLOT),
|
||||
LogicCommand::CollectFreeChest { .. } => Some(chest_source::FREE),
|
||||
LogicCommand::CollectMultiWinChest { .. } => Some(chest_source::CROWN),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn claimed_chest_id(&self) -> i32 {
|
||||
match self {
|
||||
LogicCommand::StartRewardClaim { chest_id, .. } => *chest_id,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
pub fn upgraded_spell(&self) -> Option<&LogicDataRef> {
|
||||
match self {
|
||||
LogicCommand::FuseSpells { spell, .. } => Some(spell),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
27
logic/logic/src/commands/header.rs
Normal file
27
logic/logic/src/commands/header.rs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
use titan::{LogicLong, Payload};
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Payload)]
|
||||
pub struct LogicCommandHeader {
|
||||
#[codec(vint)]
|
||||
pub tick_when_given: i32,
|
||||
#[codec(vint)]
|
||||
pub execute_tick: i32,
|
||||
#[codec(vlong)]
|
||||
pub executor_account_id: LogicLong,
|
||||
}
|
||||
impl Default for LogicCommandHeader {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
tick_when_given: -1,
|
||||
execute_tick: -1,
|
||||
executor_account_id: LogicLong::ZERO,
|
||||
}
|
||||
}
|
||||
}
|
||||
impl LogicCommandHeader {
|
||||
pub fn for_account(executor_account_id: LogicLong) -> Self {
|
||||
Self {
|
||||
executor_account_id,
|
||||
..Self::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
33
logic/logic/src/commands/mod.rs
Normal file
33
logic/logic/src/commands/mod.rs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
mod command;
|
||||
mod header;
|
||||
mod reward;
|
||||
pub use command::{LogicClaimRewardCommand, LogicCommand};
|
||||
pub use header::LogicCommandHeader;
|
||||
pub use reward::LogicReward;
|
||||
pub mod command_type {
|
||||
pub const CLAIM_REWARD: i32 = 213;
|
||||
pub const ADD_CHEST: i32 = 214;
|
||||
pub const ADD_SPELLS: i32 = 216;
|
||||
pub const SWAP_SPELLS: i32 = 500;
|
||||
pub const START_EXPLORING: i32 = 502;
|
||||
pub const START_REWARD_CLAIM: i32 = 503;
|
||||
pub const FUSE_SPELLS: i32 = 504;
|
||||
pub const SPEED_UP_EXPLORING: i32 = 506;
|
||||
pub const SELL_CHEST: i32 = 507;
|
||||
pub const UPDATE_LAST_SHOWN_LEVEL_UP: i32 = 516;
|
||||
pub const CANCEL_CHEST_OPEN: i32 = 517;
|
||||
pub const COLLECT_FREE_CHEST: i32 = 518;
|
||||
pub const SORT_COLLECTION: i32 = 520;
|
||||
pub const MOVE_SPELL: i32 = 521;
|
||||
pub const COLLECT_MULTI_WIN_CHEST: i32 = 523;
|
||||
pub const HELP_OPENED: i32 = 531;
|
||||
pub const SHOP_OPENED: i32 = 532;
|
||||
pub const REFRESH_ACHIEVEMENTS: i32 = 538;
|
||||
pub const PAGE_OPENED: i32 = 539;
|
||||
}
|
||||
pub mod chest_source {
|
||||
pub const SLOT: i32 = 1;
|
||||
pub const FREE: i32 = 2;
|
||||
pub const CROWN: i32 = 3;
|
||||
pub const PURCHASED: i32 = 4;
|
||||
}
|
||||
29
logic/logic/src/commands/reward.rs
Normal file
29
logic/logic/src/commands/reward.rs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
use titan::Payload;
|
||||
use crate::model::LogicSpell;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicReward {
|
||||
#[codec(null_list)]
|
||||
pub spells: Option<Vec<LogicSpell>>,
|
||||
#[codec(vint)]
|
||||
pub gold: i32,
|
||||
#[codec(vint)]
|
||||
pub diamonds: i32,
|
||||
}
|
||||
impl LogicReward {
|
||||
pub fn new(spells: Vec<LogicSpell>, gold: i32, diamonds: i32) -> Self {
|
||||
Self {
|
||||
spells: Some(spells),
|
||||
gold,
|
||||
diamonds,
|
||||
}
|
||||
}
|
||||
pub fn spell_count(&self) -> usize {
|
||||
self.spells.as_ref().map(Vec::len).unwrap_or_default()
|
||||
}
|
||||
pub fn card_copies(&self) -> i32 {
|
||||
self.spells
|
||||
.as_ref()
|
||||
.map(|spells| spells.iter().map(|spell| spell.count).sum())
|
||||
.unwrap_or_default()
|
||||
}
|
||||
}
|
||||
39
logic/logic/src/commands/server.rs
Normal file
39
logic/logic/src/commands/server.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
use titan::Payload;
|
||||
use crate::commands::command_type;
|
||||
use crate::commands::header::LogicCommandHeader;
|
||||
use crate::commands::reward::LogicReward;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicClaimRewardCommand {
|
||||
pub reward: Option<LogicReward>,
|
||||
#[codec(vint)]
|
||||
pub chest_id: i32,
|
||||
#[codec(vint)]
|
||||
pub chest_source: i32,
|
||||
#[codec(vint)]
|
||||
pub server_command_id: i32,
|
||||
pub header: LogicCommandHeader,
|
||||
}
|
||||
impl LogicClaimRewardCommand {
|
||||
pub fn new(reward: LogicReward, chest_id: i32, chest_source: i32) -> Self {
|
||||
Self {
|
||||
reward: Some(reward),
|
||||
chest_id,
|
||||
chest_source,
|
||||
server_command_id: 0,
|
||||
header: LogicCommandHeader::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Payload)]
|
||||
#[codec(tag = vint)]
|
||||
pub enum ServerCommand {
|
||||
#[codec(id = command_type::CLAIM_REWARD)]
|
||||
ClaimReward { command: LogicClaimRewardCommand },
|
||||
}
|
||||
impl ServerCommand {
|
||||
pub fn command_type(&self) -> i32 {
|
||||
match self {
|
||||
ServerCommand::ClaimReward { .. } => command_type::CLAIM_REWARD,
|
||||
}
|
||||
}
|
||||
}
|
||||
218
logic/logic/src/data/data_ref.rs
Normal file
218
logic/logic/src/data/data_ref.rs
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
use titan::{ByteStreamReader, ByteStreamWriter, GlobalId, Payload, Result};
|
||||
use crate::data::logic_data::LogicData;
|
||||
use crate::data::logic_data_tables::LogicDataTables;
|
||||
use crate::data::tables::table;
|
||||
use crate::data::typed::{
|
||||
LogicArenaData, LogicRarityData, LogicResourceData, LogicSpellData, LogicTreasureChestData,
|
||||
};
|
||||
#[derive(Clone, Default)]
|
||||
pub enum LogicDataRef {
|
||||
#[default]
|
||||
None,
|
||||
Resolved(Arc<LogicData>),
|
||||
Unresolved(GlobalId),
|
||||
}
|
||||
impl LogicDataRef {
|
||||
pub fn of(table_index: i32, instance_id: i32) -> Self {
|
||||
Self::from_global_id(GlobalId::new(table_index, instance_id))
|
||||
}
|
||||
pub fn from_global_id(global_id: GlobalId) -> Self {
|
||||
match LogicDataTables::instance().data_by_id(global_id) {
|
||||
Some(data) => LogicDataRef::Resolved(Arc::clone(data)),
|
||||
None => LogicDataRef::Unresolved(global_id),
|
||||
}
|
||||
}
|
||||
pub fn by_name(table_index: i32, name: &str) -> Self {
|
||||
match LogicDataTables::instance().data_by_name(table_index, name) {
|
||||
Some(data) => LogicDataRef::Resolved(Arc::clone(data)),
|
||||
None => LogicDataRef::None,
|
||||
}
|
||||
}
|
||||
pub fn spell(name: &str) -> Self {
|
||||
Self::by_name(table::SPELLS, name)
|
||||
}
|
||||
pub fn arena(name: &str) -> Self {
|
||||
Self::by_name(table::ARENAS, name)
|
||||
}
|
||||
pub fn resource(name: &str) -> Self {
|
||||
Self::by_name(table::RESOURCES, name)
|
||||
}
|
||||
pub fn treasure_chest(name: &str) -> Self {
|
||||
Self::by_name(table::TREASURE_CHESTS, name)
|
||||
}
|
||||
pub fn is_none(&self) -> bool {
|
||||
matches!(self, LogicDataRef::None)
|
||||
}
|
||||
pub fn is_resolved(&self) -> bool {
|
||||
matches!(self, LogicDataRef::Resolved(_))
|
||||
}
|
||||
pub fn global_id(&self) -> Option<GlobalId> {
|
||||
match self {
|
||||
LogicDataRef::None => None,
|
||||
LogicDataRef::Resolved(data) => Some(data.global_id()),
|
||||
LogicDataRef::Unresolved(id) => Some(*id),
|
||||
}
|
||||
}
|
||||
pub fn table_index(&self) -> Option<i32> {
|
||||
self.global_id().map(|id| id.class_id)
|
||||
}
|
||||
pub fn instance_id(&self) -> Option<i32> {
|
||||
self.global_id().map(|id| id.instance_id)
|
||||
}
|
||||
pub fn data(&self) -> Option<&Arc<LogicData>> {
|
||||
match self {
|
||||
LogicDataRef::Resolved(data) => Some(data),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
pub fn name(&self) -> &str {
|
||||
self.data().map(|data| data.name()).unwrap_or("")
|
||||
}
|
||||
pub fn belongs_to(&self, table_index: i32) -> bool {
|
||||
let Some(class_id) = self.table_index() else {
|
||||
return false;
|
||||
};
|
||||
class_id == table_index || LogicDataTables::members_of(table_index).contains(&class_id)
|
||||
}
|
||||
fn typed<T>(&self, table_index: i32, wrap: fn(Arc<LogicData>) -> T) -> Option<T> {
|
||||
self.belongs_to(table_index)
|
||||
.then(|| self.data().map(|data| wrap(Arc::clone(data))))
|
||||
.flatten()
|
||||
}
|
||||
pub fn as_spell(&self) -> Option<LogicSpellData> {
|
||||
self.typed(table::SPELLS, LogicSpellData::new)
|
||||
}
|
||||
pub fn as_arena(&self) -> Option<LogicArenaData> {
|
||||
self.typed(table::ARENAS, LogicArenaData::new)
|
||||
}
|
||||
pub fn as_resource(&self) -> Option<LogicResourceData> {
|
||||
self.typed(table::RESOURCES, LogicResourceData::new)
|
||||
}
|
||||
pub fn as_treasure_chest(&self) -> Option<LogicTreasureChestData> {
|
||||
self.typed(table::TREASURE_CHESTS, LogicTreasureChestData::new)
|
||||
}
|
||||
pub fn as_rarity(&self) -> Option<LogicRarityData> {
|
||||
self.typed(table::RARITIES, LogicRarityData::new)
|
||||
}
|
||||
}
|
||||
impl PartialEq for LogicDataRef {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.global_id() == other.global_id()
|
||||
}
|
||||
}
|
||||
impl Eq for LogicDataRef {}
|
||||
impl fmt::Debug for LogicDataRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self.global_id() {
|
||||
None => f.write_str("LogicDataRef(none)"),
|
||||
Some(id) => match self.name() {
|
||||
"" => write!(f, "LogicDataRef({id})"),
|
||||
name => write!(f, "LogicDataRef({id} {name})"),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
impl fmt::Display for LogicDataRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match (self.global_id(), self.name()) {
|
||||
(None, _) => f.write_str("-"),
|
||||
(Some(id), "") => write!(f, "{id}"),
|
||||
(Some(_), name) => f.write_str(name),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl From<GlobalId> for LogicDataRef {
|
||||
fn from(value: GlobalId) -> Self {
|
||||
Self::from_global_id(value)
|
||||
}
|
||||
}
|
||||
impl From<Arc<LogicData>> for LogicDataRef {
|
||||
fn from(value: Arc<LogicData>) -> Self {
|
||||
LogicDataRef::Resolved(value)
|
||||
}
|
||||
}
|
||||
impl Payload for LogicDataRef {
|
||||
fn encode(&self, writer: &mut ByteStreamWriter) -> Result<()> {
|
||||
match self.global_id() {
|
||||
None => writer.write_vint(0),
|
||||
Some(id) => {
|
||||
writer.write_vint(id.class_id);
|
||||
writer.write_vint(id.instance_id);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn decode(reader: &mut ByteStreamReader<'_>) -> Result<Self> {
|
||||
let class_id = reader.read_vint()?;
|
||||
if class_id == 0 {
|
||||
return Ok(LogicDataRef::None);
|
||||
}
|
||||
let instance_id = reader.read_vint()?;
|
||||
Ok(Self::from_global_id(GlobalId::new(class_id, instance_id)))
|
||||
}
|
||||
}
|
||||
#[cfg(feature = "serde")]
|
||||
mod serde_support {
|
||||
use serde::de::{self, MapAccess, Visitor};
|
||||
use serde::ser::SerializeMap;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
use super::LogicDataRef;
|
||||
impl Serialize for LogicDataRef {
|
||||
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||
let Some(id) = self.global_id() else {
|
||||
return serializer.serialize_none();
|
||||
};
|
||||
let mut map = serializer.serialize_map(Some(2))?;
|
||||
map.serialize_entry("table", &id.class_id)?;
|
||||
match self.name() {
|
||||
"" => map.serialize_entry("instance", &id.instance_id)?,
|
||||
name => map.serialize_entry("name", name)?,
|
||||
}
|
||||
map.end()
|
||||
}
|
||||
}
|
||||
#[derive(Deserialize)]
|
||||
struct Repr {
|
||||
table: i32,
|
||||
#[serde(default)]
|
||||
name: Option<String>,
|
||||
#[serde(default)]
|
||||
instance: Option<i32>,
|
||||
}
|
||||
impl<'de> Deserialize<'de> for LogicDataRef {
|
||||
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
|
||||
struct RefVisitor;
|
||||
impl<'de> Visitor<'de> for RefVisitor {
|
||||
type Value = LogicDataRef;
|
||||
fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
formatter.write_str("null or a { table, name | instance } object")
|
||||
}
|
||||
fn visit_unit<E: de::Error>(self) -> Result<Self::Value, E> {
|
||||
Ok(LogicDataRef::None)
|
||||
}
|
||||
fn visit_none<E: de::Error>(self) -> Result<Self::Value, E> {
|
||||
Ok(LogicDataRef::None)
|
||||
}
|
||||
fn visit_some<D: Deserializer<'de>>(
|
||||
self,
|
||||
deserializer: D,
|
||||
) -> Result<Self::Value, D::Error> {
|
||||
deserializer.deserialize_any(RefVisitor)
|
||||
}
|
||||
fn visit_map<A: MapAccess<'de>>(self, map: A) -> Result<Self::Value, A::Error> {
|
||||
let repr = Repr::deserialize(de::value::MapAccessDeserializer::new(map))?;
|
||||
if let Some(instance) = repr.instance {
|
||||
return Ok(LogicDataRef::of(repr.table, instance));
|
||||
}
|
||||
let name = repr.name.ok_or_else(|| {
|
||||
de::Error::custom("a data reference needs either `name` or `instance`")
|
||||
})?;
|
||||
Ok(LogicDataRef::by_name(repr.table, &name))
|
||||
}
|
||||
}
|
||||
deserializer.deserialize_option(RefVisitor)
|
||||
}
|
||||
}
|
||||
}
|
||||
74
logic/logic/src/data/logic_data.rs
Normal file
74
logic/logic/src/data/logic_data.rs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
use std::sync::Arc;
|
||||
use titan::{CsvRow, CsvTable, GlobalId};
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct LogicData {
|
||||
csv_table: Arc<CsvTable>,
|
||||
row_index: usize,
|
||||
global_id: GlobalId,
|
||||
name: String,
|
||||
}
|
||||
impl LogicData {
|
||||
pub fn new(csv_table: Arc<CsvTable>, row_index: usize, table_index: i32) -> Self {
|
||||
let name = csv_table
|
||||
.row_at(row_index)
|
||||
.map(|row| row.string(0).to_owned())
|
||||
.unwrap_or_default();
|
||||
Self {
|
||||
csv_table,
|
||||
row_index,
|
||||
global_id: GlobalId::new(table_index, row_index as i32),
|
||||
name,
|
||||
}
|
||||
}
|
||||
pub fn name(&self) -> &str {
|
||||
&self.name
|
||||
}
|
||||
pub fn global_id(&self) -> GlobalId {
|
||||
self.global_id
|
||||
}
|
||||
pub fn table_index(&self) -> i32 {
|
||||
self.global_id.class_id
|
||||
}
|
||||
pub fn instance_id(&self) -> i32 {
|
||||
self.global_id.instance_id
|
||||
}
|
||||
pub fn row_index(&self) -> usize {
|
||||
self.row_index
|
||||
}
|
||||
pub fn csv_table(&self) -> &Arc<CsvTable> {
|
||||
&self.csv_table
|
||||
}
|
||||
pub fn row(&self) -> Option<&CsvRow> {
|
||||
self.csv_table.row_at(self.row_index)
|
||||
}
|
||||
pub fn array_size(&self) -> usize {
|
||||
self.row().map(CsvRow::array_size).unwrap_or_default()
|
||||
}
|
||||
fn column(&self, name: &str) -> Option<usize> {
|
||||
self.csv_table.column_index(name)
|
||||
}
|
||||
pub fn int(&self, column: &str) -> i32 {
|
||||
match (self.row(), self.column(column)) {
|
||||
(Some(row), Some(index)) => row.int(index),
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
pub fn int_at(&self, column: &str, level: usize) -> i32 {
|
||||
match (self.row(), self.column(column)) {
|
||||
(Some(row), Some(index)) => row.scaled_int(index, level),
|
||||
_ => 0,
|
||||
}
|
||||
}
|
||||
pub fn string(&self, column: &str) -> &str {
|
||||
match (self.row(), self.column(column)) {
|
||||
(Some(row), Some(index)) => row.string(index),
|
||||
_ => "",
|
||||
}
|
||||
}
|
||||
pub fn boolean(&self, column: &str) -> bool {
|
||||
match (self.row(), self.column(column)) {
|
||||
(Some(row), Some(index)) => row.boolean(index),
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
}
|
||||
52
logic/logic/src/data/logic_data_table.rs
Normal file
52
logic/logic/src/data/logic_data_table.rs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use titan::CsvTable;
|
||||
use crate::data::logic_data::LogicData;
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct LogicDataTable {
|
||||
table_index: i32,
|
||||
csv_table: Arc<CsvTable>,
|
||||
items: Vec<Arc<LogicData>>,
|
||||
by_name: HashMap<String, usize>,
|
||||
}
|
||||
impl LogicDataTable {
|
||||
pub fn load(table_index: i32, csv_table: CsvTable) -> Self {
|
||||
let csv_table = Arc::new(csv_table);
|
||||
let items: Vec<Arc<LogicData>> = (0..csv_table.row_count())
|
||||
.map(|row_index| Arc::new(LogicData::new(Arc::clone(&csv_table), row_index, table_index)))
|
||||
.collect();
|
||||
let by_name = items
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(_, item)| !item.name().is_empty())
|
||||
.map(|(index, item)| (item.name().to_owned(), index))
|
||||
.collect();
|
||||
Self {
|
||||
table_index,
|
||||
csv_table,
|
||||
items,
|
||||
by_name,
|
||||
}
|
||||
}
|
||||
pub fn table_index(&self) -> i32 {
|
||||
self.table_index
|
||||
}
|
||||
pub fn csv_table(&self) -> &Arc<CsvTable> {
|
||||
&self.csv_table
|
||||
}
|
||||
pub fn count(&self) -> usize {
|
||||
self.items.len()
|
||||
}
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.items.is_empty()
|
||||
}
|
||||
pub fn get_at(&self, index: usize) -> Option<&Arc<LogicData>> {
|
||||
self.items.get(index)
|
||||
}
|
||||
pub fn get_by_name(&self, name: &str) -> Option<&Arc<LogicData>> {
|
||||
self.by_name.get(name).and_then(|index| self.items.get(*index))
|
||||
}
|
||||
pub fn iter(&self) -> impl Iterator<Item = &Arc<LogicData>> {
|
||||
self.items.iter()
|
||||
}
|
||||
}
|
||||
217
logic/logic/src/data/logic_data_tables.rs
Normal file
217
logic/logic/src/data/logic_data_tables.rs
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
use std::collections::HashMap;
|
||||
use std::path::Path;
|
||||
use std::sync::{Arc, OnceLock, RwLock};
|
||||
use titan::{CsvError, CsvReader, GlobalId};
|
||||
use crate::data::logic_data::LogicData;
|
||||
use crate::data::logic_data_table::LogicDataTable;
|
||||
use crate::data::tables::table;
|
||||
pub const TABLE_COUNT: usize = 62;
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct LogicDataTableResource {
|
||||
pub file_name: &'static str,
|
||||
pub table_index: i32,
|
||||
}
|
||||
impl LogicDataTableResource {
|
||||
const fn new(file_name: &'static str, table_index: i32) -> Self {
|
||||
Self {
|
||||
file_name,
|
||||
table_index,
|
||||
}
|
||||
}
|
||||
}
|
||||
pub const DATA_TABLE_RESOURCES: &[LogicDataTableResource] = &[
|
||||
LogicDataTableResource::new("csv_logic/locales.csv", table::LOCALES),
|
||||
LogicDataTableResource::new("csv_logic/globals.csv", table::GLOBALS),
|
||||
LogicDataTableResource::new("csv_logic/resources.csv", table::RESOURCES),
|
||||
LogicDataTableResource::new("csv_logic/damage_types.csv", table::DAMAGE_TYPES),
|
||||
LogicDataTableResource::new("csv_logic/character_buffs.csv", table::CHARACTER_BUFFS),
|
||||
LogicDataTableResource::new("csv_logic/projectiles.csv", table::PROJECTILES),
|
||||
LogicDataTableResource::new("csv_logic/predefined_decks.csv", table::PREDEFINED_DECKS),
|
||||
LogicDataTableResource::new("csv_logic/eggs.csv", table::EGGS),
|
||||
LogicDataTableResource::new("csv_logic/rarities.csv", table::RARITIES),
|
||||
LogicDataTableResource::new("csv_logic/locations.csv", table::LOCATIONS),
|
||||
LogicDataTableResource::new("csv_logic/npcs.csv", table::NPCS),
|
||||
LogicDataTableResource::new("csv_logic/treasure_chests.csv", table::TREASURE_CHESTS),
|
||||
LogicDataTableResource::new("csv_logic/area_effect_objects.csv", table::AREA_EFFECT_OBJECTS),
|
||||
LogicDataTableResource::new("csv_logic/spells_characters.csv", table::SPELLS_CHARACTERS),
|
||||
LogicDataTableResource::new("csv_logic/spells_buildings.csv", table::SPELLS_BUILDINGS),
|
||||
LogicDataTableResource::new("csv_logic/spells_other.csv", table::SPELLS_OTHER),
|
||||
LogicDataTableResource::new("csv_logic/characters.csv", table::CHARACTERS),
|
||||
LogicDataTableResource::new("csv_logic/buildings.csv", table::BUILDINGS),
|
||||
LogicDataTableResource::new("csv_logic/decos.csv", table::DECOS),
|
||||
LogicDataTableResource::new("csv_logic/gamble_chests.csv", table::GAMBLE_CHESTS),
|
||||
LogicDataTableResource::new("csv_logic/spawn_points.csv", table::SPAWN_POINTS),
|
||||
LogicDataTableResource::new("csv_logic/tutorials_home.csv", table::TUTORIALS_HOME),
|
||||
LogicDataTableResource::new("csv_logic/exp_levels.csv", table::EXP_LEVELS),
|
||||
LogicDataTableResource::new("csv_logic/tutorials_npc.csv", table::TUTORIALS_NPC),
|
||||
LogicDataTableResource::new("csv_logic/spell_sets.csv", table::SPELL_SETS),
|
||||
LogicDataTableResource::new("csv_logic/chest_order.csv", table::CHEST_ORDER),
|
||||
LogicDataTableResource::new("csv_logic/taunts.csv", table::TAUNTS),
|
||||
LogicDataTableResource::new("csv_logic/arenas.csv", table::ARENAS),
|
||||
LogicDataTableResource::new("csv_logic/resource_packs.csv", table::RESOURCE_PACKS),
|
||||
LogicDataTableResource::new("csv_logic/regions.csv", table::REGIONS),
|
||||
LogicDataTableResource::new("csv_logic/alliance_roles.csv", table::ALLIANCE_ROLES),
|
||||
LogicDataTableResource::new("csv_logic/alliance_badges.csv", table::ALLIANCE_BADGES),
|
||||
LogicDataTableResource::new("csv_logic/achievements.csv", table::ACHIEVEMENTS),
|
||||
LogicDataTableResource::new("csv_client/music.csv", table::MUSIC),
|
||||
LogicDataTableResource::new("csv_client/background_decos.csv", table::BACKGROUND_DECOS),
|
||||
LogicDataTableResource::new("csv_client/billing_packages.csv", table::BILLING_PACKAGES),
|
||||
LogicDataTableResource::new("csv_client/sounds.csv", table::SOUNDS),
|
||||
LogicDataTableResource::new("csv_client/effects.csv", table::EFFECTS),
|
||||
LogicDataTableResource::new("csv_client/particle_emitters.csv", table::PARTICLE_EMITTERS),
|
||||
LogicDataTableResource::new("csv_client/health_bars.csv", table::HEALTH_BARS),
|
||||
LogicDataTableResource::new("csv_client/client_globals.csv", table::CLIENT_GLOBALS),
|
||||
LogicDataTableResource::new("csv_client/credits.csv", table::CREDITS),
|
||||
LogicDataTableResource::new("csv_client/news.csv", table::NEWS),
|
||||
LogicDataTableResource::new("csv_client/hints.csv", table::HINTS),
|
||||
];
|
||||
pub const COMBINED_TABLES: &[(i32, &[i32])] = &[
|
||||
(table::SPELLS, &[
|
||||
table::SPELLS_CHARACTERS,
|
||||
table::SPELLS_BUILDINGS,
|
||||
table::SPELLS_OTHER,
|
||||
]),
|
||||
(table::CHARACTERS_COMBINED, &[table::CHARACTERS, table::BUILDINGS]),
|
||||
(table::TUTORIALS_COMBINED, &[
|
||||
table::TUTORIALS_HOME,
|
||||
table::TUTORIALS_NPC,
|
||||
]),
|
||||
];
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum DataError {
|
||||
#[error("{file}: {source}")]
|
||||
Csv {
|
||||
file: String,
|
||||
#[source]
|
||||
source: CsvError,
|
||||
},
|
||||
#[error("no data table was found under {0}")]
|
||||
NothingLoaded(String),
|
||||
}
|
||||
static INSTANCE: RwLock<Option<Arc<LogicDataTables>>> = RwLock::new(None);
|
||||
static EMPTY: OnceLock<Arc<LogicDataTables>> = OnceLock::new();
|
||||
#[derive(Debug, Default)]
|
||||
pub struct LogicDataTables {
|
||||
tables: HashMap<i32, Arc<LogicDataTable>>,
|
||||
loaded_files: Vec<String>,
|
||||
skipped_files: Vec<String>,
|
||||
}
|
||||
impl LogicDataTables {
|
||||
pub fn empty() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
pub fn install(tables: Arc<LogicDataTables>) -> bool {
|
||||
let mut slot = INSTANCE.write().expect("data table lock poisoned");
|
||||
slot.replace(tables).is_none()
|
||||
}
|
||||
pub fn instance() -> Arc<LogicDataTables> {
|
||||
match INSTANCE.read().expect("data table lock poisoned").as_ref() {
|
||||
Some(tables) => Arc::clone(tables),
|
||||
None => Arc::clone(EMPTY.get_or_init(|| Arc::new(LogicDataTables::empty()))),
|
||||
}
|
||||
}
|
||||
pub fn is_installed() -> bool {
|
||||
INSTANCE
|
||||
.read()
|
||||
.expect("data table lock poisoned")
|
||||
.as_ref()
|
||||
.map(|tables| tables.is_loaded())
|
||||
.unwrap_or(false)
|
||||
}
|
||||
pub fn load_from_dir(root: impl AsRef<Path>) -> Result<Self, DataError> {
|
||||
let root = root.as_ref();
|
||||
let mut tables = HashMap::new();
|
||||
let mut loaded_files = Vec::new();
|
||||
let mut skipped_files = Vec::new();
|
||||
for resource in DATA_TABLE_RESOURCES {
|
||||
let path = root.join(resource.file_name);
|
||||
if !path.is_file() {
|
||||
skipped_files.push(resource.file_name.to_owned());
|
||||
continue;
|
||||
}
|
||||
let csv = CsvReader::parse_file(&path).map_err(|source| DataError::Csv {
|
||||
file: resource.file_name.to_owned(),
|
||||
source,
|
||||
})?;
|
||||
tables.insert(
|
||||
resource.table_index,
|
||||
Arc::new(LogicDataTable::load(resource.table_index, csv)),
|
||||
);
|
||||
loaded_files.push(resource.file_name.to_owned());
|
||||
}
|
||||
if tables.is_empty() {
|
||||
return Err(DataError::NothingLoaded(root.display().to_string()));
|
||||
}
|
||||
Ok(Self {
|
||||
tables,
|
||||
loaded_files,
|
||||
skipped_files,
|
||||
})
|
||||
}
|
||||
pub fn is_loaded(&self) -> bool {
|
||||
!self.tables.is_empty()
|
||||
}
|
||||
pub fn loaded_files(&self) -> &[String] {
|
||||
&self.loaded_files
|
||||
}
|
||||
pub fn skipped_files(&self) -> &[String] {
|
||||
&self.skipped_files
|
||||
}
|
||||
pub fn table(&self, table_index: i32) -> Option<&Arc<LogicDataTable>> {
|
||||
self.tables.get(&table_index)
|
||||
}
|
||||
pub fn members_of(table_index: i32) -> &'static [i32] {
|
||||
COMBINED_TABLES
|
||||
.iter()
|
||||
.find(|(combined, _)| *combined == table_index)
|
||||
.map(|(_, members)| *members)
|
||||
.unwrap_or(&[])
|
||||
}
|
||||
pub fn data_by_id(&self, id: GlobalId) -> Option<&Arc<LogicData>> {
|
||||
self.table(id.class_id)?.get_at(id.instance_id as usize)
|
||||
}
|
||||
pub fn data_by_name(&self, table_index: i32, name: &str) -> Option<&Arc<LogicData>> {
|
||||
if let Some(table) = self.table(table_index) {
|
||||
if let Some(data) = table.get_by_name(name) {
|
||||
return Some(data);
|
||||
}
|
||||
}
|
||||
Self::members_of(table_index)
|
||||
.iter()
|
||||
.find_map(|member| self.table(*member)?.get_by_name(name))
|
||||
}
|
||||
pub fn global_id_by_name(&self, table_index: i32, name: &str) -> Option<GlobalId> {
|
||||
self.data_by_name(table_index, name)
|
||||
.map(|data| data.global_id())
|
||||
}
|
||||
pub fn spell_by_name(&self, name: &str) -> Option<&Arc<LogicData>> {
|
||||
self.data_by_name(table::SPELLS, name)
|
||||
}
|
||||
pub fn arena_by_name(&self, name: &str) -> Option<&Arc<LogicData>> {
|
||||
self.data_by_name(table::ARENAS, name)
|
||||
}
|
||||
pub fn resource_by_name(&self, name: &str) -> Option<&Arc<LogicData>> {
|
||||
self.data_by_name(table::RESOURCES, name)
|
||||
}
|
||||
pub fn treasure_chest_by_name(&self, name: &str) -> Option<&Arc<LogicData>> {
|
||||
self.data_by_name(table::TREASURE_CHESTS, name)
|
||||
}
|
||||
pub fn exp_level_count(&self) -> usize {
|
||||
self.table(table::EXP_LEVELS).map(|table| table.count()).unwrap_or(0)
|
||||
}
|
||||
pub fn globals(&self) -> Option<&Arc<LogicDataTable>> {
|
||||
self.table(table::GLOBALS)
|
||||
}
|
||||
pub fn global_int(&self, name: &str, fallback: i32) -> i32 {
|
||||
self.globals()
|
||||
.and_then(|table| table.get_by_name(name).cloned())
|
||||
.map(|data| data.int("NumberValue"))
|
||||
.unwrap_or(fallback)
|
||||
}
|
||||
pub fn global_boolean(&self, name: &str, fallback: bool) -> bool {
|
||||
self.globals()
|
||||
.and_then(|table| table.get_by_name(name).cloned())
|
||||
.map(|data| data.boolean("BooleanValue"))
|
||||
.unwrap_or(fallback)
|
||||
}
|
||||
}
|
||||
16
logic/logic/src/data/mod.rs
Normal file
16
logic/logic/src/data/mod.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
mod data_ref;
|
||||
mod logic_data;
|
||||
mod logic_data_table;
|
||||
mod logic_data_tables;
|
||||
mod tables;
|
||||
mod typed;
|
||||
pub use data_ref::LogicDataRef;
|
||||
pub use logic_data::LogicData;
|
||||
pub use logic_data_table::LogicDataTable;
|
||||
pub use logic_data_tables::{
|
||||
DataError, LogicDataTableResource, LogicDataTables, DATA_TABLE_RESOURCES, TABLE_COUNT,
|
||||
};
|
||||
pub use tables::{table, DataId, RESOURCE_DIAMONDS, RESOURCE_FREE_GOLD, RESOURCE_GOLD};
|
||||
pub use typed::{
|
||||
LogicArenaData, LogicRarityData, LogicResourceData, LogicSpellData, LogicTreasureChestData,
|
||||
};
|
||||
87
logic/logic/src/data/tables.rs
Normal file
87
logic/logic/src/data/tables.rs
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
use crate::data::data_ref::LogicDataRef;
|
||||
pub mod table {
|
||||
pub const LOCALES: i32 = 1;
|
||||
pub const BILLING_PACKAGES: i32 = 2;
|
||||
pub const GLOBALS: i32 = 3;
|
||||
pub const SOUNDS: i32 = 4;
|
||||
pub const RESOURCES: i32 = 5;
|
||||
pub const CHARACTERS_COMBINED: i32 = 6;
|
||||
pub const SPELLS: i32 = 7;
|
||||
pub const DAMAGE_TYPES: i32 = 8;
|
||||
pub const CHARACTER_BUFFS: i32 = 9;
|
||||
pub const PROJECTILES: i32 = 10;
|
||||
pub const EFFECTS: i32 = 11;
|
||||
pub const PREDEFINED_DECKS: i32 = 12;
|
||||
pub const EGGS: i32 = 13;
|
||||
pub const RARITIES: i32 = 14;
|
||||
pub const LOCATIONS: i32 = 15;
|
||||
pub const ALLIANCE_BADGES: i32 = 16;
|
||||
pub const NPCS: i32 = 18;
|
||||
pub const TREASURE_CHESTS: i32 = 19;
|
||||
pub const CLIENT_GLOBALS: i32 = 20;
|
||||
pub const PARTICLE_EMITTERS: i32 = 21;
|
||||
pub const AREA_EFFECT_OBJECTS: i32 = 22;
|
||||
pub const SPELLS_CHARACTERS: i32 = 26;
|
||||
pub const SPELLS_BUILDINGS: i32 = 27;
|
||||
pub const SPELLS_OTHER: i32 = 28;
|
||||
pub const CHARACTERS: i32 = 34;
|
||||
pub const BUILDINGS: i32 = 35;
|
||||
pub const HEALTH_BARS: i32 = 40;
|
||||
pub const MUSIC: i32 = 41;
|
||||
pub const DECOS: i32 = 42;
|
||||
pub const GAMBLE_CHESTS: i32 = 43;
|
||||
pub const SPAWN_POINTS: i32 = 44;
|
||||
pub const TUTORIALS_HOME: i32 = 45;
|
||||
pub const EXP_LEVELS: i32 = 46;
|
||||
pub const TUTORIALS_NPC: i32 = 48;
|
||||
pub const TUTORIALS_COMBINED: i32 = 49;
|
||||
pub const BACKGROUND_DECOS: i32 = 50;
|
||||
pub const SPELL_SETS: i32 = 51;
|
||||
pub const CHEST_ORDER: i32 = 52;
|
||||
pub const TAUNTS: i32 = 53;
|
||||
pub const ARENAS: i32 = 54;
|
||||
pub const RESOURCE_PACKS: i32 = 55;
|
||||
pub const CREDITS: i32 = 56;
|
||||
pub const REGIONS: i32 = 57;
|
||||
pub const NEWS: i32 = 58;
|
||||
pub const ALLIANCE_ROLES: i32 = 59;
|
||||
pub const ACHIEVEMENTS: i32 = 60;
|
||||
pub const HINTS: i32 = 61;
|
||||
}
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct DataId;
|
||||
impl DataId {
|
||||
pub fn of(table: i32, instance: i32) -> LogicDataRef {
|
||||
LogicDataRef::of(table, instance)
|
||||
}
|
||||
pub fn arena(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::ARENAS, instance)
|
||||
}
|
||||
pub fn character_card(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::SPELLS_CHARACTERS, instance)
|
||||
}
|
||||
pub fn building_card(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::SPELLS_BUILDINGS, instance)
|
||||
}
|
||||
pub fn other_card(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::SPELLS_OTHER, instance)
|
||||
}
|
||||
pub fn treasure_chest(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::TREASURE_CHESTS, instance)
|
||||
}
|
||||
pub fn resource(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::RESOURCES, instance)
|
||||
}
|
||||
pub fn chest_order(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::CHEST_ORDER, instance)
|
||||
}
|
||||
pub fn locale(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::LOCALES, instance)
|
||||
}
|
||||
pub fn alliance_badge(instance: i32) -> LogicDataRef {
|
||||
Self::of(table::ALLIANCE_BADGES, instance)
|
||||
}
|
||||
}
|
||||
pub const RESOURCE_GOLD: &str = "Gold";
|
||||
pub const RESOURCE_DIAMONDS: &str = "Diamonds";
|
||||
pub const RESOURCE_FREE_GOLD: &str = "FreeGold";
|
||||
124
logic/logic/src/data/typed.rs
Normal file
124
logic/logic/src/data/typed.rs
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
use std::sync::Arc;
|
||||
use crate::data::logic_data::LogicData;
|
||||
macro_rules! typed_data {
|
||||
($name:ident) => {
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct $name(Arc<LogicData>);
|
||||
impl $name {
|
||||
pub fn new(data: Arc<LogicData>) -> Self {
|
||||
Self(data)
|
||||
}
|
||||
pub fn data(&self) -> &Arc<LogicData> {
|
||||
&self.0
|
||||
}
|
||||
pub fn name(&self) -> &str {
|
||||
self.0.name()
|
||||
}
|
||||
pub fn global_id(&self) -> titan::GlobalId {
|
||||
self.0.global_id()
|
||||
}
|
||||
pub fn instance_id(&self) -> i32 {
|
||||
self.0.instance_id()
|
||||
}
|
||||
pub fn int(&self, column: &str) -> i32 {
|
||||
self.0.int(column)
|
||||
}
|
||||
pub fn int_at(&self, column: &str, level: usize) -> i32 {
|
||||
self.0.int_at(column, level)
|
||||
}
|
||||
pub fn string(&self, column: &str) -> &str {
|
||||
self.0.string(column)
|
||||
}
|
||||
pub fn boolean(&self, column: &str) -> bool {
|
||||
self.0.boolean(column)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
typed_data!(LogicSpellData);
|
||||
typed_data!(LogicArenaData);
|
||||
typed_data!(LogicResourceData);
|
||||
typed_data!(LogicTreasureChestData);
|
||||
typed_data!(LogicRarityData);
|
||||
impl LogicSpellData {
|
||||
pub fn rarity(&self) -> &str {
|
||||
self.string("Rarity")
|
||||
}
|
||||
pub fn mana_cost(&self) -> i32 {
|
||||
self.int("ManaCost")
|
||||
}
|
||||
pub fn unlock_arena(&self) -> &str {
|
||||
self.string("UnlockArena")
|
||||
}
|
||||
pub fn not_in_use(&self) -> bool {
|
||||
self.boolean("NotInUse")
|
||||
}
|
||||
pub fn tid(&self) -> &str {
|
||||
self.string("TID")
|
||||
}
|
||||
}
|
||||
impl LogicArenaData {
|
||||
pub fn arena_index(&self) -> i32 {
|
||||
self.int("Arena")
|
||||
}
|
||||
pub fn trophy_limit(&self) -> i32 {
|
||||
self.int("TrophyLimit")
|
||||
}
|
||||
pub fn demote_trophy_limit(&self) -> i32 {
|
||||
self.int("DemoteTrophyLimit")
|
||||
}
|
||||
pub fn is_training_camp(&self) -> bool {
|
||||
self.boolean("TrainingCamp")
|
||||
}
|
||||
pub fn daily_donation_capacity_limit(&self) -> i32 {
|
||||
self.int("MaxDonationCount")
|
||||
}
|
||||
pub fn request_size(&self) -> i32 {
|
||||
self.int("RequestSize")
|
||||
}
|
||||
}
|
||||
impl LogicResourceData {
|
||||
pub fn cap(&self) -> i32 {
|
||||
self.int("Cap")
|
||||
}
|
||||
}
|
||||
impl LogicTreasureChestData {
|
||||
pub fn arena(&self) -> &str {
|
||||
self.string("Arena")
|
||||
}
|
||||
pub fn total_time_taken_seconds(&self) -> i32 {
|
||||
self.int("TimeTakenDays") * 86_400
|
||||
+ self.int("TimeTakenHours") * 3_600
|
||||
+ self.int("TimeTakenMinutes") * 60
|
||||
+ self.int("TimeTakenSeconds")
|
||||
}
|
||||
pub fn random_spells(&self) -> i32 {
|
||||
self.int("RandomSpells")
|
||||
}
|
||||
pub fn different_spells(&self) -> i32 {
|
||||
self.int("DifferentSpells")
|
||||
}
|
||||
pub fn min_gold(&self) -> i32 {
|
||||
self.int("MinGold")
|
||||
}
|
||||
pub fn max_gold(&self) -> i32 {
|
||||
self.int("MaxGold")
|
||||
}
|
||||
}
|
||||
impl LogicRarityData {
|
||||
pub fn level_count(&self) -> i32 {
|
||||
self.int("LevelCount")
|
||||
}
|
||||
pub fn relative_level(&self) -> i32 {
|
||||
self.int("RelativeLevel")
|
||||
}
|
||||
pub fn upgrade_cost(&self, level: usize) -> i32 {
|
||||
self.int_at("UpgradeCost", level)
|
||||
}
|
||||
pub fn upgrade_material_count(&self, level: usize) -> i32 {
|
||||
self.int_at("UpgradeMaterialCount", level)
|
||||
}
|
||||
pub fn donate_capacity(&self) -> i32 {
|
||||
self.int("DonateCapacity")
|
||||
}
|
||||
}
|
||||
36
logic/logic/src/factory.rs
Normal file
36
logic/logic/src/factory.rs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
use titan::{message_registry, MessageRegistry};
|
||||
use crate::messages::{
|
||||
AskForAvatarStreamMessage, AskForBattleReplayStreamMessage,
|
||||
AskForPlayingFacebookFriendsMessage, AskForTVContentMessage, AvailableServerCommandMessage,
|
||||
ClientCapabilitiesMessage, EndClientTurnMessage, GoHomeMessage, KeepAliveMessage,
|
||||
KeepAliveServerMessage, LoginFailedMessage, LoginMessage, LoginOkMessage, OwnHomeDataMessage,
|
||||
OutOfSyncMessage, ServerErrorMessage, SetDeviceTokenMessage, StartMissionMessage,
|
||||
};
|
||||
pub struct LogicScrollMessageFactory;
|
||||
impl LogicScrollMessageFactory {
|
||||
pub fn registry() -> MessageRegistry {
|
||||
scroll_message_registry()
|
||||
}
|
||||
}
|
||||
pub fn scroll_message_registry() -> MessageRegistry {
|
||||
message_registry![
|
||||
LoginMessage,
|
||||
ClientCapabilitiesMessage,
|
||||
KeepAliveMessage,
|
||||
GoHomeMessage,
|
||||
EndClientTurnMessage,
|
||||
StartMissionMessage,
|
||||
SetDeviceTokenMessage,
|
||||
AskForPlayingFacebookFriendsMessage,
|
||||
AskForTVContentMessage,
|
||||
AskForAvatarStreamMessage,
|
||||
AskForBattleReplayStreamMessage,
|
||||
LoginOkMessage,
|
||||
LoginFailedMessage,
|
||||
KeepAliveServerMessage,
|
||||
OwnHomeDataMessage,
|
||||
AvailableServerCommandMessage,
|
||||
OutOfSyncMessage,
|
||||
ServerErrorMessage,
|
||||
]
|
||||
}
|
||||
231
logic/logic/src/home/logic_home_mode.rs
Normal file
231
logic/logic/src/home/logic_home_mode.rs
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
use crate::commands::{chest_source, LogicCommand, LogicReward};
|
||||
use crate::data::{LogicDataRef, LogicRarityData};
|
||||
use crate::model::{
|
||||
LogicClientAvatar, LogicClientHome, LogicSpell, LogicTimer, TICKS_PER_SECOND,
|
||||
};
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub enum CommandOutcome {
|
||||
ClaimStarted { source: i32, chest_id: i32 },
|
||||
Upgraded { spell: LogicDataRef, level: i32, gold_spent: i32 },
|
||||
Applied,
|
||||
Rejected(&'static str),
|
||||
Ignored,
|
||||
}
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct LogicHomeMode {
|
||||
home: LogicClientHome,
|
||||
avatar: LogicClientAvatar,
|
||||
tick: i32,
|
||||
current_timestamp: i32,
|
||||
claiming_reward: bool,
|
||||
}
|
||||
impl LogicHomeMode {
|
||||
pub fn new(home: LogicClientHome, avatar: LogicClientAvatar, current_timestamp: i32) -> Self {
|
||||
Self {
|
||||
home,
|
||||
avatar,
|
||||
tick: 0,
|
||||
current_timestamp,
|
||||
claiming_reward: false,
|
||||
}
|
||||
}
|
||||
pub fn home(&self) -> &LogicClientHome {
|
||||
&self.home
|
||||
}
|
||||
pub fn home_mut(&mut self) -> &mut LogicClientHome {
|
||||
&mut self.home
|
||||
}
|
||||
pub fn avatar(&self) -> &LogicClientAvatar {
|
||||
&self.avatar
|
||||
}
|
||||
pub fn avatar_mut(&mut self) -> &mut LogicClientAvatar {
|
||||
&mut self.avatar
|
||||
}
|
||||
pub fn tick_count(&self) -> i32 {
|
||||
self.tick
|
||||
}
|
||||
pub fn current_timestamp(&self) -> i32 {
|
||||
self.current_timestamp
|
||||
}
|
||||
pub fn set_current_timestamp(&mut self, timestamp: i32) {
|
||||
self.current_timestamp = timestamp;
|
||||
}
|
||||
pub fn is_claiming_reward(&self) -> bool {
|
||||
self.claiming_reward
|
||||
}
|
||||
pub fn checksum(&self) -> i32 {
|
||||
self.home
|
||||
.chest_id_counter
|
||||
.wrapping_add((self.home.spell_collection.spells.len() as i32) << 16)
|
||||
}
|
||||
pub fn tick(&mut self) {
|
||||
for timer in self.timers_mut() {
|
||||
if timer.remaining_ticks > 0 {
|
||||
timer.remaining_ticks -= 1;
|
||||
}
|
||||
}
|
||||
for chest in self.home.chest_slots.iter_mut().flatten() {
|
||||
if let Some(timer) = chest.unlock_timer.as_mut() {
|
||||
if timer.remaining_ticks > 0 {
|
||||
timer.remaining_ticks -= 1;
|
||||
} else {
|
||||
chest.unlocked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
self.tick += 1;
|
||||
if self.tick % TICKS_PER_SECOND == 0 {
|
||||
self.current_timestamp = self.current_timestamp.saturating_add(1);
|
||||
}
|
||||
}
|
||||
pub fn fast_forward_to_tick(&mut self, target_tick: i32, tick_limit: i32) -> i32 {
|
||||
let mut executed = 0;
|
||||
while self.tick < target_tick && executed < tick_limit {
|
||||
self.tick();
|
||||
executed += 1;
|
||||
}
|
||||
if self.tick < target_tick {
|
||||
self.tick = target_tick;
|
||||
}
|
||||
executed
|
||||
}
|
||||
fn timers_mut(&mut self) -> impl Iterator<Item = &mut LogicTimer> {
|
||||
[
|
||||
&mut self.home.free_chest_timer,
|
||||
&mut self.home.donation_cooldown_timer,
|
||||
&mut self.home.donation_capacity_limit_timer,
|
||||
&mut self.home.star_chest_timer,
|
||||
&mut self.home.request_spells_cooldown_timer,
|
||||
&mut self.home.shop_timer,
|
||||
&mut self.home.share_replay_cooldown_timer,
|
||||
&mut self.home.send_team_mail_cooldown_timer,
|
||||
]
|
||||
.into_iter()
|
||||
}
|
||||
pub fn execute(&mut self, command: &LogicCommand) -> CommandOutcome {
|
||||
match command {
|
||||
LogicCommand::ClaimReward { .. } => CommandOutcome::Ignored,
|
||||
LogicCommand::CollectFreeChest { .. } => self.start_claim(chest_source::FREE, 0),
|
||||
LogicCommand::CollectMultiWinChest { .. } => self.start_claim(chest_source::CROWN, 0),
|
||||
LogicCommand::StartRewardClaim { chest_id, .. } => {
|
||||
self.start_claim(chest_source::SLOT, *chest_id)
|
||||
}
|
||||
LogicCommand::FuseSpells { spell, .. } => self.upgrade_spell(spell),
|
||||
LogicCommand::SortCollection { sort_mode, .. } => {
|
||||
self.home.spell_collection.current_sort = *sort_mode;
|
||||
CommandOutcome::Applied
|
||||
}
|
||||
LogicCommand::PageOpened { page, .. } => {
|
||||
if (0..32).contains(page) {
|
||||
self.home.opened_pages |= 1 << page;
|
||||
}
|
||||
CommandOutcome::Applied
|
||||
}
|
||||
LogicCommand::HelpOpened { .. }
|
||||
| LogicCommand::ShopOpened { .. }
|
||||
| LogicCommand::RefreshAchievements { .. } => CommandOutcome::Applied,
|
||||
}
|
||||
}
|
||||
fn start_claim(&mut self, source: i32, chest_id: i32) -> CommandOutcome {
|
||||
if self.claiming_reward {
|
||||
return CommandOutcome::Rejected("a reward claim is already in progress");
|
||||
}
|
||||
self.claiming_reward = true;
|
||||
CommandOutcome::ClaimStarted { source, chest_id }
|
||||
}
|
||||
pub fn apply_reward(&mut self, reward: &LogicReward) {
|
||||
for spell in reward.spells.iter().flatten() {
|
||||
self.grant_spell(spell);
|
||||
}
|
||||
self.avatar.diamonds = self.avatar.diamonds.saturating_add(reward.diamonds);
|
||||
self.add_gold(reward.gold);
|
||||
self.claiming_reward = false;
|
||||
}
|
||||
fn grant_spell(&mut self, granted: &LogicSpell) {
|
||||
if let Some(spell) = self.find_spell_mut(&granted.data) {
|
||||
spell.count = spell.count.saturating_add(granted.count);
|
||||
return;
|
||||
}
|
||||
if let Some(slot) = self.free_selected_deck_slot() {
|
||||
*slot = Some(granted.clone());
|
||||
return;
|
||||
}
|
||||
self.home.spell_collection.spells.push(granted.clone());
|
||||
}
|
||||
fn free_selected_deck_slot(&mut self) -> Option<&mut Option<LogicSpell>> {
|
||||
let index = self.home.selected_deck_index.max(0) as usize;
|
||||
self.home
|
||||
.decks
|
||||
.get_mut(index)?
|
||||
.slots
|
||||
.iter_mut()
|
||||
.find(|slot| slot.is_none())
|
||||
}
|
||||
fn upgrade_spell(&mut self, data: &LogicDataRef) -> CommandOutcome {
|
||||
let rarity = rarity_of(data);
|
||||
let Some(spell) = self.find_spell_mut(data) else {
|
||||
return CommandOutcome::Rejected("the avatar does not own this card");
|
||||
};
|
||||
let level_index = spell.level_index;
|
||||
let (cost, material) = match &rarity {
|
||||
Some(rarity) => (
|
||||
rarity.upgrade_cost(level_index as usize),
|
||||
rarity.upgrade_material_count(level_index as usize),
|
||||
),
|
||||
None => (0, 0),
|
||||
};
|
||||
if let Some(rarity) = &rarity {
|
||||
if level_index + 1 >= rarity.level_count() {
|
||||
return CommandOutcome::Rejected("the card is already at its maximum level");
|
||||
}
|
||||
}
|
||||
if spell.count < material {
|
||||
return CommandOutcome::Rejected("not enough cards to upgrade");
|
||||
}
|
||||
if self.gold() < cost {
|
||||
return CommandOutcome::Rejected("not enough gold to upgrade");
|
||||
}
|
||||
let spell = self.find_spell_mut(data).expect("card present");
|
||||
spell.count -= material;
|
||||
spell.level_index += 1;
|
||||
let level = spell.level_index + 1;
|
||||
self.add_gold(-cost);
|
||||
CommandOutcome::Upgraded {
|
||||
spell: data.clone(),
|
||||
level,
|
||||
gold_spent: cost,
|
||||
}
|
||||
}
|
||||
fn find_spell_mut(&mut self, data: &LogicDataRef) -> Option<&mut LogicSpell> {
|
||||
self.home
|
||||
.decks
|
||||
.iter_mut()
|
||||
.flat_map(|deck| deck.slots.iter_mut().flatten())
|
||||
.chain(self.home.spell_collection.spells.iter_mut())
|
||||
.find(|spell| &spell.data == data)
|
||||
}
|
||||
pub fn gold(&self) -> i32 {
|
||||
self.avatar
|
||||
.commodities
|
||||
.types
|
||||
.first()
|
||||
.and_then(|slots| slots.first())
|
||||
.map(|slot| slot.count)
|
||||
.unwrap_or(0)
|
||||
}
|
||||
pub fn add_gold(&mut self, amount: i32) {
|
||||
if let Some(slot) = self
|
||||
.avatar
|
||||
.commodities
|
||||
.types
|
||||
.first_mut()
|
||||
.and_then(|slots| slots.first_mut())
|
||||
{
|
||||
slot.count = slot.count.saturating_add(amount).max(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
fn rarity_of(data: &LogicDataRef) -> Option<LogicRarityData> {
|
||||
let name = data.as_spell()?.rarity().to_owned();
|
||||
LogicDataRef::by_name(crate::data::table::RARITIES, &name).as_rarity()
|
||||
}
|
||||
2
logic/logic/src/home/mod.rs
Normal file
2
logic/logic/src/home/mod.rs
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mod logic_home_mode;
|
||||
pub use logic_home_mode::{CommandOutcome, LogicHomeMode};
|
||||
20
logic/logic/src/lib.rs
Normal file
20
logic/logic/src/lib.rs
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
pub mod commands;
|
||||
pub mod data;
|
||||
pub mod home;
|
||||
pub mod factory;
|
||||
pub mod messages;
|
||||
pub mod model;
|
||||
pub use data::{
|
||||
table, DataError, LogicArenaData, LogicData, LogicDataRef, LogicDataTable,
|
||||
LogicDataTableResource, LogicDataTables, LogicRarityData, LogicResourceData, LogicSpellData,
|
||||
LogicTreasureChestData, DATA_TABLE_RESOURCES, TABLE_COUNT,
|
||||
};
|
||||
pub use factory::{scroll_message_registry, LogicScrollMessageFactory};
|
||||
pub use commands::{
|
||||
chest_source, command_type, LogicClaimRewardCommand, LogicCommand, LogicCommandHeader,
|
||||
LogicReward,
|
||||
};
|
||||
pub use home::{CommandOutcome, LogicHomeMode};
|
||||
pub use messages::*;
|
||||
pub use model::*;
|
||||
pub use titan::{GlobalId, LogicLong};
|
||||
19
logic/logic/src/messages/available_server_command.rs
Normal file
19
logic/logic/src/messages/available_server_command.rs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
use titan::Message;
|
||||
use crate::commands::{LogicClaimRewardCommand, LogicCommand};
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 24111, direction = "server", name = "AvailableServerCommandMessage")]
|
||||
pub struct AvailableServerCommandMessage {
|
||||
pub command: LogicCommand,
|
||||
}
|
||||
impl AvailableServerCommandMessage {
|
||||
pub fn claim_reward(command: LogicClaimRewardCommand) -> Self {
|
||||
Self {
|
||||
command: LogicCommand::ClaimReward { command },
|
||||
}
|
||||
}
|
||||
}
|
||||
impl Default for AvailableServerCommandMessage {
|
||||
fn default() -> Self {
|
||||
Self::claim_reward(LogicClaimRewardCommand::default())
|
||||
}
|
||||
}
|
||||
7
logic/logic/src/messages/client_capabilities.rs
Normal file
7
logic/logic/src/messages/client_capabilities.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
use titan::Message;
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 10107, direction = "client", name = "ClientCapabilitiesMessage")]
|
||||
pub struct ClientCapabilitiesMessage {
|
||||
#[codec(vint)]
|
||||
pub ping_ms: i32,
|
||||
}
|
||||
25
logic/logic/src/messages/client_requests.rs
Normal file
25
logic/logic/src/messages/client_requests.rs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
use titan::{LogicLong, Message};
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 10113, direction = "client", name = "SetDeviceTokenMessage")]
|
||||
pub struct SetDeviceTokenMessage {
|
||||
#[codec(bytes)]
|
||||
pub device_token: Option<Vec<u8>>,
|
||||
}
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 10513, direction = "client", name = "AskForPlayingFacebookFriendsMessage")]
|
||||
pub struct AskForPlayingFacebookFriendsMessage {
|
||||
#[codec(string, null_list)]
|
||||
pub facebook_ids: Option<Vec<Option<String>>>,
|
||||
}
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 14402, direction = "client", name = "AskForTVContentMessage")]
|
||||
pub struct AskForTVContentMessage {}
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 14405, direction = "client", name = "AskForAvatarStreamMessage")]
|
||||
pub struct AskForAvatarStreamMessage {}
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 14406, direction = "client", name = "AskForBattleReplayStreamMessage")]
|
||||
pub struct AskForBattleReplayStreamMessage {
|
||||
#[codec(long)]
|
||||
pub avatar_id: LogicLong,
|
||||
}
|
||||
14
logic/logic/src/messages/end_client_turn.rs
Normal file
14
logic/logic/src/messages/end_client_turn.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
use titan::Message;
|
||||
use crate::commands::LogicCommand;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 14102, direction = "client", name = "EndClientTurnMessage")]
|
||||
#[codec(partial)]
|
||||
pub struct EndClientTurnMessage {
|
||||
#[codec(vint)]
|
||||
pub tick: i32,
|
||||
#[codec(vint)]
|
||||
pub checksum: i32,
|
||||
pub commands: Vec<LogicCommand>,
|
||||
#[codec(bytes, stop_if_eof)]
|
||||
pub trailing: Option<Vec<u8>>,
|
||||
}
|
||||
7
logic/logic/src/messages/go_home.rs
Normal file
7
logic/logic/src/messages/go_home.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
use titan::Message;
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 14101, direction = "client", name = "GoHomeMessage")]
|
||||
pub struct GoHomeMessage {
|
||||
#[codec(bool)]
|
||||
pub from_offer_wall: bool,
|
||||
}
|
||||
7
logic/logic/src/messages/keep_alive.rs
Normal file
7
logic/logic/src/messages/keep_alive.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
use titan::Message;
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 10108, direction = "client", name = "KeepAliveMessage")]
|
||||
pub struct KeepAliveMessage {}
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 20108, direction = "server", name = "KeepAliveServerMessage")]
|
||||
pub struct KeepAliveServerMessage {}
|
||||
58
logic/logic/src/messages/login.rs
Normal file
58
logic/logic/src/messages/login.rs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
use titan::{LogicLong, Message};
|
||||
use crate::data::LogicDataRef;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 10101, direction = "client", name = "LoginMessage")]
|
||||
#[codec(partial)]
|
||||
pub struct LoginMessage {
|
||||
#[codec(long)]
|
||||
pub account_id: LogicLong,
|
||||
#[codec(string)]
|
||||
pub pass_token: Option<String>,
|
||||
#[codec(vint)]
|
||||
pub client_major_version: i32,
|
||||
#[codec(vint)]
|
||||
pub client_minor_version: i32,
|
||||
#[codec(vint)]
|
||||
pub client_build: i32,
|
||||
#[codec(string)]
|
||||
pub resource_sha: Option<String>,
|
||||
#[codec(string)]
|
||||
pub udid: Option<String>,
|
||||
#[codec(string)]
|
||||
pub open_udid: Option<String>,
|
||||
#[codec(string)]
|
||||
pub mac_address: Option<String>,
|
||||
#[codec(string)]
|
||||
pub device: Option<String>,
|
||||
#[codec(string)]
|
||||
pub advertising_id: Option<String>,
|
||||
#[codec(string)]
|
||||
pub os_version: Option<String>,
|
||||
#[codec(bool)]
|
||||
pub android: bool,
|
||||
#[codec(string_ref)]
|
||||
pub reserved_device_string: String,
|
||||
#[codec(string_ref)]
|
||||
pub android_id: String,
|
||||
#[codec(string_ref, stop_if_eof)]
|
||||
pub preferred_device_language: String,
|
||||
pub preferred_language: LogicDataRef,
|
||||
#[codec(string_ref, stop_if_eof)]
|
||||
pub facebook_attribution_id: String,
|
||||
#[codec(bool)]
|
||||
pub advertising_enabled: bool,
|
||||
#[codec(string)]
|
||||
pub apple_identifier_for_vendor: Option<String>,
|
||||
}
|
||||
impl LoginMessage {
|
||||
pub fn is_new_account(&self) -> bool {
|
||||
self.account_id.is_zero() || self.pass_token.is_none()
|
||||
}
|
||||
pub fn client_version(&self) -> (i32, i32, i32) {
|
||||
(
|
||||
self.client_major_version,
|
||||
self.client_minor_version,
|
||||
self.client_build,
|
||||
)
|
||||
}
|
||||
}
|
||||
40
logic/logic/src/messages/login_failed.rs
Normal file
40
logic/logic/src/messages/login_failed.rs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
use titan::Message;
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum LoginFailureReason {
|
||||
ClientVersionTooOld = 8,
|
||||
PatchContent = 7,
|
||||
ServerMaintenance = 10,
|
||||
Banned = 11,
|
||||
AccountNotFound = 12,
|
||||
Generic = 1,
|
||||
}
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 20103, direction = "server", name = "LoginFailedMessage")]
|
||||
pub struct LoginFailedMessage {
|
||||
#[codec(vint)]
|
||||
pub error_code: i32,
|
||||
#[codec(string)]
|
||||
pub fingerprint_json: Option<String>,
|
||||
#[codec(string)]
|
||||
pub redirect_domain: Option<String>,
|
||||
#[codec(string)]
|
||||
pub content_url: Option<String>,
|
||||
#[codec(vint)]
|
||||
pub remaining_seconds: i32,
|
||||
}
|
||||
impl LoginFailedMessage {
|
||||
pub fn with_reason(reason: LoginFailureReason) -> Self {
|
||||
Self {
|
||||
error_code: reason as i32,
|
||||
..Self::default()
|
||||
}
|
||||
}
|
||||
pub fn patch(fingerprint_json: String, content_url: String) -> Self {
|
||||
Self {
|
||||
error_code: LoginFailureReason::PatchContent as i32,
|
||||
fingerprint_json: Some(fingerprint_json),
|
||||
content_url: Some(content_url),
|
||||
..Self::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
39
logic/logic/src/messages/login_ok.rs
Normal file
39
logic/logic/src/messages/login_ok.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
use titan::{LogicLong, Message};
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 20104, direction = "server", name = "LoginOkMessage")]
|
||||
pub struct LoginOkMessage {
|
||||
#[codec(long)]
|
||||
pub account_id: LogicLong,
|
||||
#[codec(long)]
|
||||
pub home_id: LogicLong,
|
||||
#[codec(string)]
|
||||
pub pass_token: Option<String>,
|
||||
#[codec(string)]
|
||||
pub facebook_id: Option<String>,
|
||||
#[codec(string)]
|
||||
pub gamecenter_id: Option<String>,
|
||||
#[codec(vint)]
|
||||
pub server_major_version: i32,
|
||||
#[codec(vint)]
|
||||
pub server_minor_version: i32,
|
||||
#[codec(vint)]
|
||||
pub server_build: i32,
|
||||
#[codec(vint)]
|
||||
pub content_version: i32,
|
||||
#[codec(string)]
|
||||
pub server_environment: Option<String>,
|
||||
#[codec(vint)]
|
||||
pub session_count: i32,
|
||||
#[codec(vint)]
|
||||
pub play_time_seconds: i32,
|
||||
#[codec(vint)]
|
||||
pub days_since_started_playing: i32,
|
||||
#[codec(string)]
|
||||
pub facebook_app_id: Option<String>,
|
||||
#[codec(string)]
|
||||
pub server_time: Option<String>,
|
||||
#[codec(string)]
|
||||
pub account_created_date: Option<String>,
|
||||
#[codec(vint)]
|
||||
pub startup_cooldown_seconds: i32,
|
||||
}
|
||||
51
logic/logic/src/messages/mod.rs
Normal file
51
logic/logic/src/messages/mod.rs
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
mod available_server_command;
|
||||
mod client_capabilities;
|
||||
mod client_requests;
|
||||
mod end_client_turn;
|
||||
mod go_home;
|
||||
mod keep_alive;
|
||||
mod login;
|
||||
mod login_failed;
|
||||
mod login_ok;
|
||||
mod out_of_sync;
|
||||
mod own_home_data;
|
||||
mod server_error;
|
||||
mod start_mission;
|
||||
pub use available_server_command::AvailableServerCommandMessage;
|
||||
pub use client_capabilities::ClientCapabilitiesMessage;
|
||||
pub use client_requests::{
|
||||
AskForAvatarStreamMessage, AskForBattleReplayStreamMessage, AskForPlayingFacebookFriendsMessage,
|
||||
AskForTVContentMessage, SetDeviceTokenMessage,
|
||||
};
|
||||
pub use end_client_turn::EndClientTurnMessage;
|
||||
pub use go_home::GoHomeMessage;
|
||||
pub use keep_alive::{KeepAliveMessage, KeepAliveServerMessage};
|
||||
pub use login::LoginMessage;
|
||||
pub use login_failed::{LoginFailedMessage, LoginFailureReason};
|
||||
pub use login_ok::LoginOkMessage;
|
||||
pub use out_of_sync::OutOfSyncMessage;
|
||||
pub use own_home_data::OwnHomeDataMessage;
|
||||
pub use server_error::ServerErrorMessage;
|
||||
pub use start_mission::StartMissionMessage;
|
||||
pub mod message_type {
|
||||
pub const LOGIN: u16 = 10101;
|
||||
pub const CLIENT_CAPABILITIES: u16 = 10107;
|
||||
pub const SET_DEVICE_TOKEN: u16 = 10113;
|
||||
pub const ASK_FOR_PLAYING_FACEBOOK_FRIENDS: u16 = 10513;
|
||||
pub const ASK_FOR_TV_CONTENT: u16 = 14402;
|
||||
pub const ASK_FOR_AVATAR_STREAM: u16 = 14405;
|
||||
pub const ASK_FOR_BATTLE_REPLAY_STREAM: u16 = 14406;
|
||||
pub const KEEP_ALIVE: u16 = 10108;
|
||||
pub const GO_HOME: u16 = 14101;
|
||||
pub const END_CLIENT_TURN: u16 = 14102;
|
||||
pub const START_MISSION: u16 = 14104;
|
||||
pub const SERVER_HELLO: u16 = 20100;
|
||||
pub const LOGIN_FAILED: u16 = 20103;
|
||||
pub const LOGIN_OK: u16 = 20104;
|
||||
pub const KEEP_ALIVE_SERVER: u16 = 20108;
|
||||
pub const OWN_HOME_DATA: u16 = 24101;
|
||||
pub const AVAILABLE_SERVER_COMMAND: u16 = 24111;
|
||||
pub const OWN_AVATAR_DATA: u16 = 24102;
|
||||
pub const OUT_OF_SYNC: u16 = 24104;
|
||||
pub const SERVER_ERROR: u16 = 24115;
|
||||
}
|
||||
11
logic/logic/src/messages/out_of_sync.rs
Normal file
11
logic/logic/src/messages/out_of_sync.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
use titan::Message;
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Message)]
|
||||
#[message(id = 24104, direction = "server", name = "OutOfSyncMessage")]
|
||||
pub struct OutOfSyncMessage {
|
||||
#[codec(vint)]
|
||||
pub server_checksum: i32,
|
||||
#[codec(vint)]
|
||||
pub client_checksum: i32,
|
||||
#[codec(vint)]
|
||||
pub tick: i32,
|
||||
}
|
||||
19
logic/logic/src/messages/own_home_data.rs
Normal file
19
logic/logic/src/messages/own_home_data.rs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
use titan::Message;
|
||||
use crate::model::{LogicClientAvatar, LogicClientHome};
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 24101, direction = "server", name = "OwnHomeDataMessage")]
|
||||
pub struct OwnHomeDataMessage {
|
||||
pub home: LogicClientHome,
|
||||
pub avatar: LogicClientAvatar,
|
||||
#[codec(vint)]
|
||||
pub random_seed: i32,
|
||||
}
|
||||
impl OwnHomeDataMessage {
|
||||
pub fn new(home: LogicClientHome, avatar: LogicClientAvatar, random_seed: i32) -> Self {
|
||||
Self {
|
||||
home,
|
||||
avatar,
|
||||
random_seed,
|
||||
}
|
||||
}
|
||||
}
|
||||
14
logic/logic/src/messages/server_error.rs
Normal file
14
logic/logic/src/messages/server_error.rs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
use titan::Message;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 24115, direction = "server", name = "ServerErrorMessage")]
|
||||
pub struct ServerErrorMessage {
|
||||
#[codec(string)]
|
||||
pub message: Option<String>,
|
||||
}
|
||||
impl ServerErrorMessage {
|
||||
pub fn new(message: impl Into<String>) -> Self {
|
||||
Self {
|
||||
message: Some(message.into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
7
logic/logic/src/messages/start_mission.rs
Normal file
7
logic/logic/src/messages/start_mission.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
use titan::Message;
|
||||
use crate::data::LogicDataRef;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Message)]
|
||||
#[message(id = 14104, direction = "client", name = "StartMissionMessage")]
|
||||
pub struct StartMissionMessage {
|
||||
pub npc: LogicDataRef,
|
||||
}
|
||||
48
logic/logic/src/model/chest.rs
Normal file
48
logic/logic/src/model/chest.rs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
use titan::Payload;
|
||||
use crate::data::{LogicDataRef, LogicTreasureChestData};
|
||||
use crate::model::LogicTimer;
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum ChestSource {
|
||||
Free = 0,
|
||||
Battle = 1,
|
||||
Crown = 2,
|
||||
Shop = 3,
|
||||
Reward = 4,
|
||||
}
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicChest {
|
||||
pub data: LogicDataRef,
|
||||
#[codec(bool)]
|
||||
pub unlocked: bool,
|
||||
#[codec(bool)]
|
||||
pub claimed: bool,
|
||||
#[codec(bool)]
|
||||
pub is_new: bool,
|
||||
pub unlock_timer: Option<LogicTimer>,
|
||||
#[codec(vint)]
|
||||
pub chest_id: i32,
|
||||
#[codec(vint)]
|
||||
pub source: i32,
|
||||
#[codec(vint)]
|
||||
pub slot_index: i32,
|
||||
}
|
||||
impl LogicChest {
|
||||
pub fn locked(data: LogicDataRef, chest_id: i32, slot_index: i32, source: ChestSource) -> Self {
|
||||
Self {
|
||||
data,
|
||||
unlocked: false,
|
||||
claimed: false,
|
||||
is_new: true,
|
||||
unlock_timer: None,
|
||||
chest_id,
|
||||
source: source as i32,
|
||||
slot_index,
|
||||
}
|
||||
}
|
||||
pub fn is_unlocking(&self) -> bool {
|
||||
self.unlock_timer.is_some()
|
||||
}
|
||||
pub fn treasure_chest_data(&self) -> Option<LogicTreasureChestData> {
|
||||
self.data.as_treasure_chest()
|
||||
}
|
||||
}
|
||||
99
logic/logic/src/model/client_avatar.rs
Normal file
99
logic/logic/src/model/client_avatar.rs
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
use titan::{LogicLong, Payload};
|
||||
use crate::data::{LogicArenaData, LogicDataRef};
|
||||
use crate::model::LogicDataSlot;
|
||||
pub const COMMODITY_TYPE_COUNT: usize = 6;
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicCommodityStore {
|
||||
#[codec(vint)]
|
||||
pub type_count: i32,
|
||||
pub types: [Vec<LogicDataSlot>; COMMODITY_TYPE_COUNT],
|
||||
}
|
||||
impl Default for LogicCommodityStore {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
type_count: COMMODITY_TYPE_COUNT as i32,
|
||||
types: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl LogicCommodityStore {
|
||||
pub fn set(&mut self, commodity_type: usize, slots: Vec<LogicDataSlot>) {
|
||||
if let Some(entry) = self.types.get_mut(commodity_type) {
|
||||
*entry = slots;
|
||||
}
|
||||
}
|
||||
pub fn push(&mut self, commodity_type: usize, slot: LogicDataSlot) {
|
||||
if let Some(entry) = self.types.get_mut(commodity_type) {
|
||||
entry.push(slot);
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicAllianceInfo {
|
||||
#[codec(vlong)]
|
||||
pub alliance_id: LogicLong,
|
||||
#[codec(string_ref)]
|
||||
pub name: String,
|
||||
pub badge: LogicDataRef,
|
||||
#[codec(vint)]
|
||||
pub role: i32,
|
||||
}
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicClientAvatar {
|
||||
#[codec(vlong)]
|
||||
pub avatar_id: LogicLong,
|
||||
#[codec(vlong)]
|
||||
pub account_id: LogicLong,
|
||||
#[codec(vlong)]
|
||||
pub home_id: LogicLong,
|
||||
#[codec(string_ref)]
|
||||
pub name: String,
|
||||
#[codec(bool)]
|
||||
pub name_set_by_user: bool,
|
||||
#[codec(vint)]
|
||||
pub name_change_state: i32,
|
||||
pub arena: LogicDataRef,
|
||||
#[codec(vint)]
|
||||
pub score: i32,
|
||||
#[codec(bool)]
|
||||
pub legacy_flag: bool,
|
||||
pub commodities: LogicCommodityStore,
|
||||
#[codec(vint)]
|
||||
pub diamonds: i32,
|
||||
#[codec(vint)]
|
||||
pub free_diamonds: i32,
|
||||
#[codec(vint)]
|
||||
pub exp_points: i32,
|
||||
#[codec(vint)]
|
||||
pub exp_level: i32,
|
||||
#[codec(vint)]
|
||||
pub cumulative_purchased_diamonds: i32,
|
||||
pub alliance: Option<LogicAllianceInfo>,
|
||||
#[codec(vint)]
|
||||
pub battle_count: i32,
|
||||
#[codec(vint)]
|
||||
pub win_count: i32,
|
||||
#[codec(vint)]
|
||||
pub lose_count: i32,
|
||||
#[codec(vint)]
|
||||
pub win_loose_streak: i32,
|
||||
#[codec(vint)]
|
||||
pub npc_win_count: i32,
|
||||
#[codec(vint)]
|
||||
pub npc_lose_count: i32,
|
||||
#[codec(bool)]
|
||||
pub arena_before_last_npc_match: bool,
|
||||
}
|
||||
impl LogicClientAvatar {
|
||||
pub fn is_in_alliance(&self) -> bool {
|
||||
self.alliance.is_some()
|
||||
}
|
||||
pub fn arena_data(&self) -> Option<LogicArenaData> {
|
||||
self.arena.as_arena()
|
||||
}
|
||||
pub fn total_battle_count(&self) -> i32 {
|
||||
self.battle_count
|
||||
.saturating_add(self.npc_win_count)
|
||||
.saturating_add(self.npc_lose_count)
|
||||
}
|
||||
}
|
||||
85
logic/logic/src/model/client_home.rs
Normal file
85
logic/logic/src/model/client_home.rs
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
use titan::{LogicLong, Payload};
|
||||
use crate::data::{LogicArenaData, LogicDataRef};
|
||||
use crate::model::{LogicChest, LogicDataSlot, LogicSpellCollection, LogicSpellDeck, LogicTimer};
|
||||
pub const TUTORIAL_BITSET_WORDS: usize = 8;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicClientHome {
|
||||
#[codec(long)]
|
||||
pub home_id: LogicLong,
|
||||
#[codec(vint)]
|
||||
pub chest_id_counter: i32,
|
||||
#[codec(vint)]
|
||||
pub free_chest_collect_count: i32,
|
||||
pub donation_capacity_limit_timer: LogicTimer,
|
||||
#[codec(vint)]
|
||||
pub donated_capacity: i32,
|
||||
pub decks: Vec<LogicSpellDeck>,
|
||||
pub spell_collection: LogicSpellCollection,
|
||||
#[codec(vint)]
|
||||
pub selected_deck_index: i32,
|
||||
pub chest_slots: Vec<Option<LogicChest>>,
|
||||
pub free_chest_timer: LogicTimer,
|
||||
pub donation_cooldown_timer: LogicTimer,
|
||||
pub free_chest: Option<LogicChest>,
|
||||
pub purchased_chest: Option<LogicChest>,
|
||||
#[codec(vint)]
|
||||
pub crowns_towards_crown_chest: i32,
|
||||
#[codec(bool)]
|
||||
pub star_chest_timer_pending: bool,
|
||||
pub star_chest_timer: LogicTimer,
|
||||
pub crown_chest: Option<LogicChest>,
|
||||
pub request_spells_cooldown_timer: LogicTimer,
|
||||
#[codec(vint)]
|
||||
pub finished_tutorials: [i32; TUTORIAL_BITSET_WORDS],
|
||||
#[codec(vint)]
|
||||
pub opened_pages: i32,
|
||||
#[codec(vint)]
|
||||
pub last_shown_level_up: i32,
|
||||
pub arena: LogicDataRef,
|
||||
#[codec(vint)]
|
||||
pub shop_seed: i32,
|
||||
#[codec(vint)]
|
||||
pub shop_weekday_index: i32,
|
||||
#[codec(vint)]
|
||||
pub shop_weekday_index_seen: i32,
|
||||
pub shop_timer: LogicTimer,
|
||||
pub shop_spells: Vec<LogicDataSlot>,
|
||||
pub share_replay_cooldown_timer: LogicTimer,
|
||||
pub send_team_mail_cooldown_timer: LogicTimer,
|
||||
#[codec(vint)]
|
||||
pub free_chest_diamond_index: i32,
|
||||
#[codec(vint)]
|
||||
pub crown_chest_diamond_index: i32,
|
||||
#[codec(vint)]
|
||||
pub card_usage_stats_battle_count: i32,
|
||||
#[codec(vint)]
|
||||
pub royal_tv_replay_version_major: i32,
|
||||
#[codec(vint)]
|
||||
pub royal_tv_replay_version_build: i32,
|
||||
#[codec(vint)]
|
||||
pub royal_tv_replay_version_content: i32,
|
||||
#[codec(vint)]
|
||||
pub seen_replay_ids: Vec<i32>,
|
||||
#[codec(string)]
|
||||
pub card_request_message: Option<String>,
|
||||
pub requested_cards: Vec<LogicDataRef>,
|
||||
}
|
||||
impl LogicClientHome {
|
||||
pub fn selected_deck(&self) -> Option<&LogicSpellDeck> {
|
||||
self.decks.get(self.selected_deck_index.max(0) as usize)
|
||||
}
|
||||
pub fn total_spell_count(&self) -> usize {
|
||||
self.spell_collection.spells.len()
|
||||
+ self
|
||||
.decks
|
||||
.iter()
|
||||
.map(LogicSpellDeck::filled_slot_count)
|
||||
.sum::<usize>()
|
||||
}
|
||||
pub fn finish_all_tutorials(&mut self) {
|
||||
self.finished_tutorials = [-1; TUTORIAL_BITSET_WORDS];
|
||||
}
|
||||
pub fn arena_data(&self) -> Option<LogicArenaData> {
|
||||
self.arena.as_arena()
|
||||
}
|
||||
}
|
||||
16
logic/logic/src/model/data_slot.rs
Normal file
16
logic/logic/src/model/data_slot.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
use titan::Payload;
|
||||
use crate::data::LogicDataRef;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicDataSlot {
|
||||
pub data: LogicDataRef,
|
||||
#[codec(vint)]
|
||||
pub count: i32,
|
||||
}
|
||||
impl LogicDataSlot {
|
||||
pub fn new(data: LogicDataRef, count: i32) -> Self {
|
||||
Self { data, count }
|
||||
}
|
||||
pub fn resource(&self) -> Option<crate::data::LogicResourceData> {
|
||||
self.data.as_resource()
|
||||
}
|
||||
}
|
||||
12
logic/logic/src/model/mod.rs
Normal file
12
logic/logic/src/model/mod.rs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
mod chest;
|
||||
mod client_avatar;
|
||||
mod client_home;
|
||||
mod data_slot;
|
||||
mod spell;
|
||||
mod timer;
|
||||
pub use chest::{ChestSource, LogicChest};
|
||||
pub use client_avatar::{LogicAllianceInfo, LogicClientAvatar, LogicCommodityStore, COMMODITY_TYPE_COUNT};
|
||||
pub use client_home::{LogicClientHome, TUTORIAL_BITSET_WORDS};
|
||||
pub use data_slot::LogicDataSlot;
|
||||
pub use spell::{LogicSpell, LogicSpellCollection, LogicSpellDeck, DECK_SLOT_COUNT};
|
||||
pub use timer::{LogicTimer, TICKS_PER_SECOND};
|
||||
82
logic/logic/src/model/spell.rs
Normal file
82
logic/logic/src/model/spell.rs
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
use titan::Payload;
|
||||
use crate::data::LogicDataRef;
|
||||
pub const DECK_SLOT_COUNT: usize = 8;
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicSpell {
|
||||
pub data: LogicDataRef,
|
||||
#[codec(vint)]
|
||||
pub level_index: i32,
|
||||
#[codec(vint)]
|
||||
pub create_time: i32,
|
||||
#[codec(vint)]
|
||||
pub count: i32,
|
||||
#[codec(vint)]
|
||||
pub new_count: i32,
|
||||
#[codec(vint)]
|
||||
pub recent_use_count: i32,
|
||||
#[codec(bool)]
|
||||
pub new_upgrade_available: bool,
|
||||
#[codec(bool)]
|
||||
pub show_new_icon: bool,
|
||||
}
|
||||
impl LogicSpell {
|
||||
pub fn card(data: LogicDataRef, level_index: i32, count: i32) -> Self {
|
||||
Self {
|
||||
data,
|
||||
level_index,
|
||||
count,
|
||||
..Self::default()
|
||||
}
|
||||
}
|
||||
pub fn spell_data(&self) -> Option<crate::data::LogicSpellData> {
|
||||
self.data.as_spell()
|
||||
}
|
||||
pub fn mana_cost(&self) -> i32 {
|
||||
self.spell_data().map(|data| data.mana_cost()).unwrap_or(0)
|
||||
}
|
||||
pub fn rarity(&self) -> Option<crate::data::LogicRarityData> {
|
||||
let name = self.spell_data()?.rarity().to_owned();
|
||||
LogicDataRef::by_name(crate::data::table::RARITIES, &name).as_rarity()
|
||||
}
|
||||
pub fn level(&self) -> i32 {
|
||||
self.level_index + 1
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicSpellDeck {
|
||||
#[codec(split)]
|
||||
pub slots: [Option<LogicSpell>; DECK_SLOT_COUNT],
|
||||
}
|
||||
impl Default for LogicSpellDeck {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
slots: std::array::from_fn(|_| None),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl LogicSpellDeck {
|
||||
pub fn from_cards(cards: impl IntoIterator<Item = LogicSpell>) -> Self {
|
||||
let mut deck = Self::default();
|
||||
for (slot, card) in deck.slots.iter_mut().zip(cards) {
|
||||
*slot = Some(card);
|
||||
}
|
||||
deck
|
||||
}
|
||||
pub fn filled_slot_count(&self) -> usize {
|
||||
self.slots.iter().flatten().count()
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Default, Clone, PartialEq, Eq, Payload)]
|
||||
pub struct LogicSpellCollection {
|
||||
pub spells: Vec<LogicSpell>,
|
||||
#[codec(vint)]
|
||||
pub current_sort: i32,
|
||||
}
|
||||
impl LogicSpellCollection {
|
||||
pub fn from_spells(spells: Vec<LogicSpell>) -> Self {
|
||||
Self {
|
||||
spells,
|
||||
current_sort: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
30
logic/logic/src/model/timer.rs
Normal file
30
logic/logic/src/model/timer.rs
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
use titan::Payload;
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Payload)]
|
||||
pub struct LogicTimer {
|
||||
#[codec(vint)]
|
||||
pub remaining_ticks: i32,
|
||||
#[codec(vint)]
|
||||
pub total_ticks: i32,
|
||||
#[codec(vint)]
|
||||
pub end_timestamp: i32,
|
||||
}
|
||||
pub const TICKS_PER_SECOND: i32 = 20;
|
||||
impl LogicTimer {
|
||||
pub const fn idle() -> Self {
|
||||
Self {
|
||||
remaining_ticks: 0,
|
||||
total_ticks: 0,
|
||||
end_timestamp: -1,
|
||||
}
|
||||
}
|
||||
pub fn started(seconds: i32, timestamp: i32) -> Self {
|
||||
Self {
|
||||
remaining_ticks: seconds.saturating_mul(TICKS_PER_SECOND),
|
||||
total_ticks: seconds.saturating_mul(TICKS_PER_SECOND),
|
||||
end_timestamp: seconds.saturating_add(timestamp),
|
||||
}
|
||||
}
|
||||
pub const fn remaining_seconds(&self) -> i32 {
|
||||
self.remaining_ticks / TICKS_PER_SECOND
|
||||
}
|
||||
}
|
||||
194
logic/logic/tests/data_tables.rs
Normal file
194
logic/logic/tests/data_tables.rs
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
use std::path::{Path, PathBuf};
|
||||
use logic::{table, LogicDataTables};
|
||||
use titan::GlobalId;
|
||||
struct TempTree {
|
||||
root: PathBuf,
|
||||
}
|
||||
impl TempTree {
|
||||
fn new(label: &str) -> Self {
|
||||
let root = std::env::temp_dir().join(format!(
|
||||
"scroll-data-{label}-{}-{:?}",
|
||||
std::process::id(),
|
||||
std::thread::current().id()
|
||||
));
|
||||
let _ = std::fs::remove_dir_all(&root);
|
||||
std::fs::create_dir_all(root.join("csv_logic")).expect("create tree");
|
||||
Self { root }
|
||||
}
|
||||
fn write(&self, relative: &str, contents: &str) {
|
||||
let path = self.root.join(relative);
|
||||
if let Some(parent) = path.parent() {
|
||||
std::fs::create_dir_all(parent).expect("create parent");
|
||||
}
|
||||
std::fs::write(path, contents).expect("write fixture");
|
||||
}
|
||||
fn path(&self) -> &Path {
|
||||
&self.root
|
||||
}
|
||||
}
|
||||
impl Drop for TempTree {
|
||||
fn drop(&mut self) {
|
||||
let _ = std::fs::remove_dir_all(&self.root);
|
||||
}
|
||||
}
|
||||
fn fixture(label: &str) -> TempTree {
|
||||
let tree = TempTree::new(label);
|
||||
tree.write(
|
||||
"csv_logic/spells_characters.csv",
|
||||
concat!(
|
||||
"Name,Rarity,ManaCost\n",
|
||||
"string,string,int\n",
|
||||
"Knight,Common,3\n",
|
||||
"Archers,Common,3\n",
|
||||
"Giant,Rare,5\n"
|
||||
),
|
||||
);
|
||||
tree.write(
|
||||
"csv_logic/spells_buildings.csv",
|
||||
concat!(
|
||||
"Name,Rarity,ManaCost\n",
|
||||
"string,string,int\n",
|
||||
"Cannon,Common,3\n",
|
||||
"Tesla,Common,4\n"
|
||||
),
|
||||
);
|
||||
tree.write(
|
||||
"csv_logic/arenas.csv",
|
||||
concat!(
|
||||
"Name,Arena,TrophyLimit\n",
|
||||
"string,int,int\n",
|
||||
"TrainingCamp,0,0\n",
|
||||
"Arena1,1,400\n"
|
||||
),
|
||||
);
|
||||
tree.write(
|
||||
"csv_logic/resources.csv",
|
||||
concat!(
|
||||
"Name,Cap\n",
|
||||
"string,int\n",
|
||||
"Gold,1000000\n",
|
||||
"Diamonds,0\n",
|
||||
"FreeGold,0\n"
|
||||
),
|
||||
);
|
||||
tree
|
||||
}
|
||||
#[test]
|
||||
fn tables_are_indexed_by_the_client_table_ids() {
|
||||
let tree = fixture("ids");
|
||||
let tables = LogicDataTables::load_from_dir(tree.path()).expect("load");
|
||||
assert!(tables.is_loaded());
|
||||
assert_eq!(tables.loaded_files().len(), 4);
|
||||
assert!(!tables.skipped_files().is_empty());
|
||||
assert_eq!(
|
||||
tables.table(table::SPELLS_CHARACTERS).map(|t| t.count()),
|
||||
Some(3)
|
||||
);
|
||||
assert_eq!(tables.table(table::ARENAS).map(|t| t.count()), Some(2));
|
||||
assert!(tables.table(table::ACHIEVEMENTS).is_none());
|
||||
}
|
||||
#[test]
|
||||
fn names_resolve_to_the_global_id_that_travels_on_the_wire() {
|
||||
let tree = fixture("names");
|
||||
let tables = LogicDataTables::load_from_dir(tree.path()).expect("load");
|
||||
assert_eq!(
|
||||
tables.global_id_by_name(table::SPELLS, "Knight"),
|
||||
Some(GlobalId::new(table::SPELLS_CHARACTERS, 0))
|
||||
);
|
||||
assert_eq!(
|
||||
tables.global_id_by_name(table::SPELLS, "Giant"),
|
||||
Some(GlobalId::new(table::SPELLS_CHARACTERS, 2))
|
||||
);
|
||||
assert_eq!(
|
||||
tables.global_id_by_name(table::SPELLS, "Tesla"),
|
||||
Some(GlobalId::new(table::SPELLS_BUILDINGS, 1))
|
||||
);
|
||||
assert_eq!(tables.global_id_by_name(table::SPELLS, "Golem"), None);
|
||||
assert_eq!(
|
||||
tables.global_id_by_name(table::ARENAS, "Arena1"),
|
||||
Some(GlobalId::new(table::ARENAS, 1))
|
||||
);
|
||||
assert_eq!(
|
||||
tables.global_id_by_name(table::RESOURCES, "Gold"),
|
||||
Some(GlobalId::new(table::RESOURCES, 0))
|
||||
);
|
||||
}
|
||||
#[test]
|
||||
fn a_global_id_resolves_back_to_its_row() {
|
||||
let tree = fixture("roundtrip");
|
||||
let tables = LogicDataTables::load_from_dir(tree.path()).expect("load");
|
||||
let knight = tables
|
||||
.data_by_id(GlobalId::new(table::SPELLS_CHARACTERS, 0))
|
||||
.expect("knight");
|
||||
assert_eq!(knight.name(), "Knight");
|
||||
assert_eq!(knight.int("ManaCost"), 3);
|
||||
assert_eq!(knight.string("Rarity"), "Common");
|
||||
assert_eq!(knight.global_id(), GlobalId::new(table::SPELLS_CHARACTERS, 0));
|
||||
assert!(tables
|
||||
.data_by_id(GlobalId::new(table::SPELLS_CHARACTERS, 99))
|
||||
.is_none());
|
||||
}
|
||||
#[test]
|
||||
fn an_empty_directory_is_reported_rather_than_silently_accepted() {
|
||||
let tree = TempTree::new("empty");
|
||||
let error = LogicDataTables::load_from_dir(tree.path()).expect_err("must fail");
|
||||
assert!(error.to_string().contains("no data table"));
|
||||
assert!(!LogicDataTables::empty().is_loaded());
|
||||
}
|
||||
fn shipped_assets() -> Option<PathBuf> {
|
||||
let root = Path::new(env!("CARGO_MANIFEST_DIR"))
|
||||
.join("../../assets")
|
||||
.canonicalize()
|
||||
.ok()?;
|
||||
root.join("csv_logic/spells_characters.csv").is_file().then_some(root)
|
||||
}
|
||||
#[test]
|
||||
fn data_references_round_trip_whether_or_not_the_tables_are_installed() {
|
||||
use titan::Payload;
|
||||
let raw = logic::LogicDataRef::of(table::SPELLS_CHARACTERS, 3);
|
||||
let bytes = raw.to_bytes().expect("encode");
|
||||
let decoded = logic::LogicDataRef::from_bytes(&bytes).expect("decode");
|
||||
assert_eq!(decoded, raw);
|
||||
assert_eq!(decoded.global_id(), Some(GlobalId::new(table::SPELLS_CHARACTERS, 3)));
|
||||
let empty = logic::LogicDataRef::None;
|
||||
let bytes = empty.to_bytes().expect("encode");
|
||||
assert_eq!(bytes, vec![0]);
|
||||
assert!(logic::LogicDataRef::from_bytes(&bytes).expect("decode").is_none());
|
||||
}
|
||||
#[test]
|
||||
fn installed_tables_turn_references_into_typed_data_classes() {
|
||||
let Some(root) = shipped_assets() else {
|
||||
eprintln!("assets/ is absent, skipping the typed data class check");
|
||||
return;
|
||||
};
|
||||
let tables = LogicDataTables::load_from_dir(&root).expect("load");
|
||||
logic::LogicDataTables::install(std::sync::Arc::new(tables));
|
||||
let knight = logic::LogicDataRef::spell("Knight");
|
||||
assert!(knight.is_resolved());
|
||||
assert_eq!(knight.name(), "Knight");
|
||||
assert_eq!(knight.to_string(), "Knight");
|
||||
assert_eq!(
|
||||
knight.global_id(),
|
||||
Some(GlobalId::new(table::SPELLS_CHARACTERS, 0))
|
||||
);
|
||||
let spell = knight.as_spell().expect("spell data");
|
||||
assert_eq!(spell.rarity(), "Common");
|
||||
assert_eq!(spell.mana_cost(), 3);
|
||||
assert!(knight.as_arena().is_none());
|
||||
let arena = logic::LogicDataRef::arena("TrainingCamp");
|
||||
let arena_data = arena.as_arena().expect("arena data");
|
||||
assert!(arena_data.is_training_camp());
|
||||
assert_eq!(arena_data.trophy_limit(), 0);
|
||||
let card = logic::model::LogicSpell::card(knight.clone(), 0, 10);
|
||||
assert_eq!(card.mana_cost(), 3);
|
||||
assert_eq!(card.level(), 1);
|
||||
let rarity = card.rarity().expect("rarity data");
|
||||
assert_eq!(rarity.name(), "Common");
|
||||
assert_eq!(rarity.level_count(), 12);
|
||||
assert_eq!(rarity.upgrade_cost(0), 5);
|
||||
let chest = logic::LogicDataRef::treasure_chest("Silver")
|
||||
.as_treasure_chest()
|
||||
.expect("chest data");
|
||||
assert!(chest.total_time_taken_seconds() > 0);
|
||||
assert!(chest.max_gold() >= chest.min_gold());
|
||||
}
|
||||
163
logic/logic/tests/own_home_data.rs
Normal file
163
logic/logic/tests/own_home_data.rs
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
use logic::model::{
|
||||
ChestSource, LogicAllianceInfo, LogicChest, LogicClientAvatar, LogicClientHome, LogicDataSlot,
|
||||
LogicSpell, LogicSpellCollection, LogicSpellDeck, LogicTimer,
|
||||
};
|
||||
use logic::{DataId, LogicScrollMessageFactory, OwnHomeDataMessage};
|
||||
use titan::{ByteStreamReader, ByteStreamWriter, LogicLong, MessageFactory, MessageMeta, Payload};
|
||||
fn sample_message() -> OwnHomeDataMessage {
|
||||
let deck = LogicSpellDeck::from_cards((0..8).map(|index| {
|
||||
LogicSpell::card(DataId::character_card(index), index % 3, 10 + index)
|
||||
}));
|
||||
let collection = LogicSpellCollection::from_spells(
|
||||
(0..12)
|
||||
.map(|index| LogicSpell::card(DataId::character_card(index), 1, index))
|
||||
.collect(),
|
||||
);
|
||||
let mut home = LogicClientHome {
|
||||
home_id: LogicLong::new(0, 42),
|
||||
chest_id_counter: 7,
|
||||
free_chest_collect_count: 3,
|
||||
donation_capacity_limit_timer: LogicTimer::started(86_400, 1_000),
|
||||
donated_capacity: 12,
|
||||
decks: vec![deck, LogicSpellDeck::default()],
|
||||
spell_collection: collection,
|
||||
selected_deck_index: 0,
|
||||
chest_slots: vec![
|
||||
Some(LogicChest::locked(
|
||||
DataId::treasure_chest(0),
|
||||
1,
|
||||
0,
|
||||
ChestSource::Battle,
|
||||
)),
|
||||
None,
|
||||
Some(LogicChest {
|
||||
unlock_timer: Some(LogicTimer::started(3_600, 500)),
|
||||
..LogicChest::locked(DataId::treasure_chest(1), 2, 2, ChestSource::Crown)
|
||||
}),
|
||||
],
|
||||
free_chest_timer: LogicTimer::started(14_400, 100),
|
||||
donation_cooldown_timer: LogicTimer::idle(),
|
||||
free_chest: Some(LogicChest::locked(
|
||||
DataId::treasure_chest(2),
|
||||
3,
|
||||
-1,
|
||||
ChestSource::Free,
|
||||
)),
|
||||
purchased_chest: None,
|
||||
crowns_towards_crown_chest: 4,
|
||||
star_chest_timer_pending: true,
|
||||
star_chest_timer: LogicTimer::idle(),
|
||||
crown_chest: None,
|
||||
request_spells_cooldown_timer: LogicTimer::idle(),
|
||||
finished_tutorials: [0; 8],
|
||||
opened_pages: 0b1011,
|
||||
last_shown_level_up: 2,
|
||||
arena: DataId::arena(1),
|
||||
shop_seed: -1,
|
||||
shop_weekday_index: 3,
|
||||
shop_weekday_index_seen: 3,
|
||||
shop_timer: LogicTimer::started(600, 900),
|
||||
shop_spells: vec![
|
||||
LogicDataSlot::new(DataId::character_card(4), 1),
|
||||
LogicDataSlot::new(DataId::other_card(2), 0),
|
||||
],
|
||||
share_replay_cooldown_timer: LogicTimer::idle(),
|
||||
send_team_mail_cooldown_timer: LogicTimer::idle(),
|
||||
free_chest_diamond_index: 1,
|
||||
crown_chest_diamond_index: 2,
|
||||
card_usage_stats_battle_count: 25,
|
||||
royal_tv_replay_version_major: 2,
|
||||
royal_tv_replay_version_build: 1306,
|
||||
royal_tv_replay_version_content: 8,
|
||||
seen_replay_ids: vec![5, -9, 1_000_000],
|
||||
card_request_message: Some("need arrows".to_owned()),
|
||||
requested_cards: vec![DataId::other_card(1), DataId::character_card(3)],
|
||||
};
|
||||
home.set_tutorial_finished(0);
|
||||
home.set_tutorial_finished(37);
|
||||
let mut avatar = LogicClientAvatar {
|
||||
avatar_id: LogicLong::new(0, 42),
|
||||
account_id: LogicLong::new(0, 42),
|
||||
home_id: LogicLong::new(0, 42),
|
||||
name: "BladeWise".to_owned(),
|
||||
name_set_by_user: true,
|
||||
name_change_state: -1,
|
||||
arena: DataId::arena(1),
|
||||
score: 1_337,
|
||||
legacy_flag: false,
|
||||
commodities: Default::default(),
|
||||
diamonds: 500,
|
||||
free_diamonds: 25,
|
||||
exp_points: 90,
|
||||
exp_level: 6,
|
||||
cumulative_purchased_diamonds: 0,
|
||||
alliance: Some(LogicAllianceInfo {
|
||||
alliance_id: LogicLong::new(0, 9),
|
||||
name: "Scroll Devs".to_owned(),
|
||||
badge: DataId::alliance_badge(16_000_000),
|
||||
role: 2,
|
||||
}),
|
||||
battle_count: 40,
|
||||
win_count: 22,
|
||||
lose_count: 18,
|
||||
win_loose_streak: 3,
|
||||
npc_win_count: 4,
|
||||
npc_lose_count: 0,
|
||||
arena_before_last_npc_match: true,
|
||||
};
|
||||
avatar
|
||||
.commodities
|
||||
.set(0, vec![LogicDataSlot::new(DataId::resource(0), 12_500)]);
|
||||
avatar.commodities.set(
|
||||
1,
|
||||
vec![LogicDataSlot::new(DataId::character_card(0), 3)],
|
||||
);
|
||||
OwnHomeDataMessage::new(home, avatar, 0x5EED)
|
||||
}
|
||||
#[test]
|
||||
fn own_home_data_roundtrips_byte_for_byte() {
|
||||
let message = sample_message();
|
||||
let bytes = message.to_bytes().unwrap();
|
||||
let decoded = OwnHomeDataMessage::from_bytes(&bytes).unwrap();
|
||||
assert_eq!(decoded, message);
|
||||
assert_eq!(decoded.to_bytes().unwrap(), bytes);
|
||||
let mut reader = ByteStreamReader::new(&bytes);
|
||||
OwnHomeDataMessage::decode(&mut reader).unwrap();
|
||||
assert_eq!(reader.remaining(), 0);
|
||||
}
|
||||
#[test]
|
||||
fn own_home_data_starts_with_the_raw_big_endian_home_id() {
|
||||
let message = sample_message();
|
||||
let bytes = message.to_bytes().unwrap();
|
||||
assert_eq!(&bytes[0..8], &[0, 0, 0, 0, 0, 0, 0, 42]);
|
||||
assert_eq!(bytes[8], 7);
|
||||
}
|
||||
#[test]
|
||||
fn message_metadata_matches_the_client_definition() {
|
||||
assert_eq!(OwnHomeDataMessage::MESSAGE_TYPE, 24101);
|
||||
assert_eq!(OwnHomeDataMessage::MESSAGE_VERSION, 0);
|
||||
assert_eq!(OwnHomeDataMessage::NAME, "OwnHomeDataMessage");
|
||||
}
|
||||
#[test]
|
||||
fn the_factory_decodes_registered_messages() {
|
||||
let registry = LogicScrollMessageFactory::registry();
|
||||
let message = sample_message();
|
||||
let bytes = message.to_bytes().unwrap();
|
||||
let decoded = registry.create(24101, 0, &bytes).unwrap();
|
||||
assert_eq!(decoded.message_type(), 24101);
|
||||
assert_eq!(decoded.name(), "OwnHomeDataMessage");
|
||||
let concrete = decoded
|
||||
.as_any()
|
||||
.downcast_ref::<OwnHomeDataMessage>()
|
||||
.expect("downcast");
|
||||
assert_eq!(concrete, &message);
|
||||
}
|
||||
#[test]
|
||||
fn empty_optionals_only_cost_a_single_packed_bit() {
|
||||
let mut writer = ByteStreamWriter::new();
|
||||
let home = LogicClientHome::default();
|
||||
home.encode(&mut writer).unwrap();
|
||||
let bytes = writer.into_inner();
|
||||
let decoded = LogicClientHome::from_bytes(&bytes).unwrap();
|
||||
assert_eq!(decoded, home);
|
||||
}
|
||||
21
services/auth-service/Cargo.toml
Normal file
21
services/auth-service/Cargo.toml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
[package]
|
||||
name = "auth-service"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
description = "Account identity and session issuing service"
|
||||
|
||||
[dependencies]
|
||||
service-rpc = { workspace = true }
|
||||
tokio = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
tracing-subscriber = { workspace = true }
|
||||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
rand = { workspace = true }
|
||||
async-trait = { workspace = true }
|
||||
|
||||
[[bin]]
|
||||
name = "auth-service"
|
||||
path = "src/main.rs"
|
||||
43
services/auth-service/src/config.rs
Normal file
43
services/auth-service/src/config.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
use std::path::PathBuf;
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct AuthConfig {
|
||||
pub listen: String,
|
||||
pub store_path: PathBuf,
|
||||
pub min_client_build: i32,
|
||||
pub max_client_build: i32,
|
||||
pub content_fingerprint: Option<String>,
|
||||
pub content_url: Option<String>,
|
||||
}
|
||||
impl Default for AuthConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
listen: "127.0.0.1:9401".to_owned(),
|
||||
store_path: PathBuf::from("data/accounts.json"),
|
||||
min_client_build: 0,
|
||||
max_client_build: i32::MAX,
|
||||
content_fingerprint: None,
|
||||
content_url: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
impl AuthConfig {
|
||||
pub fn from_env() -> Self {
|
||||
let defaults = Self::default();
|
||||
Self {
|
||||
listen: env_string("SCROLL_AUTH_LISTEN").unwrap_or(defaults.listen),
|
||||
store_path: env_string("SCROLL_AUTH_STORE")
|
||||
.map(PathBuf::from)
|
||||
.unwrap_or(defaults.store_path),
|
||||
min_client_build: env_i32("SCROLL_MIN_CLIENT_BUILD").unwrap_or(defaults.min_client_build),
|
||||
max_client_build: env_i32("SCROLL_MAX_CLIENT_BUILD").unwrap_or(defaults.max_client_build),
|
||||
content_fingerprint: env_string("SCROLL_CONTENT_FINGERPRINT"),
|
||||
content_url: env_string("SCROLL_CONTENT_URL"),
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn env_string(key: &str) -> Option<String> {
|
||||
std::env::var(key).ok().filter(|value| !value.is_empty())
|
||||
}
|
||||
pub fn env_i32(key: &str) -> Option<i32> {
|
||||
env_string(key).and_then(|value| value.parse().ok())
|
||||
}
|
||||
7
services/auth-service/src/lib.rs
Normal file
7
services/auth-service/src/lib.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
pub mod config;
|
||||
pub mod service;
|
||||
pub mod store;
|
||||
pub mod time;
|
||||
pub use config::AuthConfig;
|
||||
pub use service::AuthService;
|
||||
pub use store::{Account, AccountStore};
|
||||
19
services/auth-service/src/main.rs
Normal file
19
services/auth-service/src/main.rs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
use std::sync::Arc;
|
||||
use auth_service::{AuthConfig, AuthService};
|
||||
use service_rpc::serve;
|
||||
use tokio::net::TcpListener;
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
tracing_subscriber::fmt()
|
||||
.with_env_filter(
|
||||
tracing_subscriber::EnvFilter::try_from_default_env()
|
||||
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
|
||||
)
|
||||
.init();
|
||||
let config = AuthConfig::from_env();
|
||||
let listener = TcpListener::bind(&config.listen).await?;
|
||||
tracing::info!(listen = %config.listen, "auth service listening");
|
||||
let service = AuthService::bootstrap(config).await?;
|
||||
serve(listener, Arc::clone(&service)).await?;
|
||||
Ok(())
|
||||
}
|
||||
137
services/auth-service/src/service.rs
Normal file
137
services/auth-service/src/service.rs
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
use std::sync::Arc;
|
||||
use service_rpc::{
|
||||
AccountRef, AuthApi, AuthRequest, AuthResponse, DeviceInfo, LoginOutcome, RpcResult, RpcService,
|
||||
Session,
|
||||
};
|
||||
use crate::config::AuthConfig;
|
||||
use crate::store::AccountStore;
|
||||
use crate::time::{days_between, format_utc, unix_millis, unix_seconds};
|
||||
pub const ERROR_CODE_GENERIC: i32 = 1;
|
||||
pub const ERROR_CODE_PATCH: i32 = 7;
|
||||
pub const ERROR_CODE_CLIENT_TOO_OLD: i32 = 8;
|
||||
pub const ERROR_CODE_BANNED: i32 = 11;
|
||||
pub struct AuthService {
|
||||
config: AuthConfig,
|
||||
store: Arc<AccountStore>,
|
||||
}
|
||||
impl AuthService {
|
||||
pub async fn bootstrap(config: AuthConfig) -> std::io::Result<Arc<Self>> {
|
||||
let store = Arc::new(AccountStore::open(&config.store_path).await?);
|
||||
tracing::info!(
|
||||
accounts = store.len().await,
|
||||
store = %config.store_path.display(),
|
||||
"account store ready"
|
||||
);
|
||||
Ok(Arc::new(Self { config, store }))
|
||||
}
|
||||
pub fn store(&self) -> &Arc<AccountStore> {
|
||||
&self.store
|
||||
}
|
||||
fn version_verdict(&self, device: &DeviceInfo) -> Option<(i32, Option<String>)> {
|
||||
if device.client_build < self.config.min_client_build {
|
||||
return Some((
|
||||
ERROR_CODE_CLIENT_TOO_OLD,
|
||||
Some(format!(
|
||||
"client build {} is older than the required {}",
|
||||
device.client_build, self.config.min_client_build
|
||||
)),
|
||||
));
|
||||
}
|
||||
if device.client_build > self.config.max_client_build {
|
||||
return Some((
|
||||
ERROR_CODE_CLIENT_TOO_OLD,
|
||||
Some(format!(
|
||||
"client build {} is newer than the supported {}",
|
||||
device.client_build, self.config.max_client_build
|
||||
)),
|
||||
));
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
#[async_trait::async_trait]
|
||||
impl AuthApi for AuthService {
|
||||
async fn login(
|
||||
&self,
|
||||
account: AccountRef,
|
||||
pass_token: Option<String>,
|
||||
device: DeviceInfo,
|
||||
) -> RpcResult<LoginOutcome> {
|
||||
if let Some((error_code, message)) = self.version_verdict(&device) {
|
||||
tracing::warn!(%account, build = device.client_build, "rejecting outdated client");
|
||||
return Ok(LoginOutcome::Rejected {
|
||||
error_code,
|
||||
message,
|
||||
});
|
||||
}
|
||||
let stored = if account.is_zero() || pass_token.is_none() {
|
||||
None
|
||||
} else {
|
||||
self.store.get(account).await
|
||||
};
|
||||
let stored = match stored {
|
||||
Some(existing) => {
|
||||
let presented = pass_token.as_deref().unwrap_or_default();
|
||||
if existing.pass_token != presented {
|
||||
tracing::warn!(%account, "pass token mismatch");
|
||||
return Ok(LoginOutcome::Rejected {
|
||||
error_code: ERROR_CODE_GENERIC,
|
||||
message: Some("invalid pass token".to_owned()),
|
||||
});
|
||||
}
|
||||
if existing.banned {
|
||||
return Ok(LoginOutcome::Rejected {
|
||||
error_code: ERROR_CODE_BANNED,
|
||||
message: Some("account is banned".to_owned()),
|
||||
});
|
||||
}
|
||||
existing
|
||||
}
|
||||
None => {
|
||||
let created = self.store.create().await?;
|
||||
tracing::info!(account = %created.account_ref(), "created account");
|
||||
created
|
||||
}
|
||||
};
|
||||
let refreshed = self
|
||||
.store
|
||||
.touch_session(stored.account_ref())
|
||||
.await?
|
||||
.unwrap_or(stored);
|
||||
let now = unix_seconds();
|
||||
Ok(LoginOutcome::Accepted(Session {
|
||||
account: refreshed.account_ref(),
|
||||
pass_token: refreshed.pass_token.clone(),
|
||||
session_count: refreshed.session_count,
|
||||
play_time_seconds: refreshed.play_time_seconds,
|
||||
days_since_started_playing: days_between(refreshed.created_at, now),
|
||||
account_created_date: format_utc(refreshed.created_at),
|
||||
server_time: unix_millis().to_string(),
|
||||
}))
|
||||
}
|
||||
async fn resolve(&self, account: AccountRef) -> RpcResult<bool> {
|
||||
Ok(self.store.get(account).await.is_some())
|
||||
}
|
||||
}
|
||||
#[async_trait::async_trait]
|
||||
impl RpcService for AuthService {
|
||||
type Request = AuthRequest;
|
||||
type Response = AuthResponse;
|
||||
fn service_name(&self) -> &'static str {
|
||||
"auth"
|
||||
}
|
||||
async fn call(&self, request: AuthRequest) -> RpcResult<AuthResponse> {
|
||||
match request {
|
||||
AuthRequest::Login {
|
||||
account,
|
||||
pass_token,
|
||||
device,
|
||||
} => Ok(AuthResponse::Login(
|
||||
self.login(account, pass_token, device).await?,
|
||||
)),
|
||||
AuthRequest::Resolve { account } => Ok(AuthResponse::Resolved {
|
||||
known: self.resolve(account).await?,
|
||||
}),
|
||||
}
|
||||
}
|
||||
}
|
||||
139
services/auth-service/src/store.rs
Normal file
139
services/auth-service/src/store.rs
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
use std::collections::HashMap;
|
||||
use std::path::{Path, PathBuf};
|
||||
use rand::distributions::Alphanumeric;
|
||||
use rand::Rng;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use service_rpc::AccountRef;
|
||||
use tokio::sync::RwLock;
|
||||
use crate::time::unix_seconds;
|
||||
pub const PASS_TOKEN_LEN: usize = 40;
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct Account {
|
||||
pub high: i32,
|
||||
pub low: i32,
|
||||
pub pass_token: String,
|
||||
pub created_at: i64,
|
||||
pub last_seen_at: i64,
|
||||
pub session_count: i32,
|
||||
pub play_time_seconds: i32,
|
||||
#[serde(default)]
|
||||
pub banned: bool,
|
||||
}
|
||||
impl Account {
|
||||
pub fn account_ref(&self) -> AccountRef {
|
||||
AccountRef::new(self.high, self.low)
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Default, Serialize, Deserialize)]
|
||||
struct StoreSnapshot {
|
||||
next_low: i32,
|
||||
accounts: Vec<Account>,
|
||||
}
|
||||
pub struct AccountStore {
|
||||
path: PathBuf,
|
||||
state: RwLock<StoreState>,
|
||||
}
|
||||
#[derive(Default)]
|
||||
struct StoreState {
|
||||
next_low: i32,
|
||||
accounts: HashMap<AccountRef, Account>,
|
||||
}
|
||||
impl AccountStore {
|
||||
pub async fn open(path: impl AsRef<Path>) -> std::io::Result<Self> {
|
||||
let path = path.as_ref().to_path_buf();
|
||||
let snapshot = match tokio::fs::read(&path).await {
|
||||
Ok(bytes) => serde_json::from_slice::<StoreSnapshot>(&bytes).unwrap_or_default(),
|
||||
Err(error) if error.kind() == std::io::ErrorKind::NotFound => StoreSnapshot::default(),
|
||||
Err(error) => return Err(error),
|
||||
};
|
||||
let mut accounts = HashMap::with_capacity(snapshot.accounts.len());
|
||||
for account in snapshot.accounts {
|
||||
accounts.insert(account.account_ref(), account);
|
||||
}
|
||||
Ok(Self {
|
||||
path,
|
||||
state: RwLock::new(StoreState {
|
||||
next_low: snapshot.next_low.max(1),
|
||||
accounts,
|
||||
}),
|
||||
})
|
||||
}
|
||||
pub async fn create(&self) -> std::io::Result<Account> {
|
||||
let now = unix_seconds();
|
||||
let account = {
|
||||
let mut state = self.state.write().await;
|
||||
let low = state.next_low;
|
||||
state.next_low = state.next_low.wrapping_add(1).max(1);
|
||||
let account = Account {
|
||||
high: 0,
|
||||
low,
|
||||
pass_token: generate_pass_token(),
|
||||
created_at: now,
|
||||
last_seen_at: now,
|
||||
session_count: 0,
|
||||
play_time_seconds: 0,
|
||||
banned: false,
|
||||
};
|
||||
state.accounts.insert(account.account_ref(), account.clone());
|
||||
account
|
||||
};
|
||||
self.persist().await?;
|
||||
Ok(account)
|
||||
}
|
||||
pub async fn get(&self, account: AccountRef) -> Option<Account> {
|
||||
self.state.read().await.accounts.get(&account).cloned()
|
||||
}
|
||||
pub async fn touch_session(&self, account: AccountRef) -> std::io::Result<Option<Account>> {
|
||||
let updated = {
|
||||
let mut state = self.state.write().await;
|
||||
match state.accounts.get_mut(&account) {
|
||||
None => None,
|
||||
Some(stored) => {
|
||||
let now = unix_seconds();
|
||||
stored.play_time_seconds = stored
|
||||
.play_time_seconds
|
||||
.saturating_add(((now - stored.last_seen_at).clamp(0, 3_600)) as i32);
|
||||
stored.last_seen_at = now;
|
||||
stored.session_count = stored.session_count.saturating_add(1);
|
||||
Some(stored.clone())
|
||||
}
|
||||
}
|
||||
};
|
||||
if updated.is_some() {
|
||||
self.persist().await?;
|
||||
}
|
||||
Ok(updated)
|
||||
}
|
||||
pub async fn len(&self) -> usize {
|
||||
self.state.read().await.accounts.len()
|
||||
}
|
||||
pub async fn is_empty(&self) -> bool {
|
||||
self.state.read().await.accounts.is_empty()
|
||||
}
|
||||
async fn persist(&self) -> std::io::Result<()> {
|
||||
let snapshot = {
|
||||
let state = self.state.read().await;
|
||||
StoreSnapshot {
|
||||
next_low: state.next_low,
|
||||
accounts: state.accounts.values().cloned().collect(),
|
||||
}
|
||||
};
|
||||
let encoded = serde_json::to_vec_pretty(&snapshot)
|
||||
.map_err(|error| std::io::Error::new(std::io::ErrorKind::InvalidData, error))?;
|
||||
if let Some(parent) = self.path.parent() {
|
||||
if !parent.as_os_str().is_empty() {
|
||||
tokio::fs::create_dir_all(parent).await?;
|
||||
}
|
||||
}
|
||||
let temporary = self.path.with_extension("json.tmp");
|
||||
tokio::fs::write(&temporary, &encoded).await?;
|
||||
tokio::fs::rename(&temporary, &self.path).await
|
||||
}
|
||||
}
|
||||
pub fn generate_pass_token() -> String {
|
||||
rand::thread_rng()
|
||||
.sample_iter(&Alphanumeric)
|
||||
.take(PASS_TOKEN_LEN)
|
||||
.map(char::from)
|
||||
.collect()
|
||||
}
|
||||
44
services/auth-service/src/time.rs
Normal file
44
services/auth-service/src/time.rs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
pub fn unix_seconds() -> i64 {
|
||||
SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.map(|elapsed| elapsed.as_secs() as i64)
|
||||
.unwrap_or_default()
|
||||
}
|
||||
pub fn unix_millis() -> i64 {
|
||||
SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.map(|elapsed| elapsed.as_millis() as i64)
|
||||
.unwrap_or_default()
|
||||
}
|
||||
pub fn format_utc(seconds: i64) -> String {
|
||||
let days_since_epoch = seconds.div_euclid(86_400);
|
||||
let seconds_of_day = seconds.rem_euclid(86_400);
|
||||
let (year, month, day) = civil_from_days(days_since_epoch);
|
||||
format!(
|
||||
"{year:04}-{month:02}-{day:02}T{:02}:{:02}:{:02}Z",
|
||||
seconds_of_day / 3_600,
|
||||
(seconds_of_day % 3_600) / 60,
|
||||
seconds_of_day % 60
|
||||
)
|
||||
}
|
||||
fn civil_from_days(days: i64) -> (i64, u32, u32) {
|
||||
let z = days + 719_468;
|
||||
let era = z.div_euclid(146_097);
|
||||
let day_of_era = z.rem_euclid(146_097);
|
||||
let year_of_era =
|
||||
(day_of_era - day_of_era / 1_460 + day_of_era / 36_524 - day_of_era / 146_096) / 365;
|
||||
let year = year_of_era + era * 400;
|
||||
let day_of_year = day_of_era - (365 * year_of_era + year_of_era / 4 - year_of_era / 100);
|
||||
let shifted_month = (5 * day_of_year + 2) / 153;
|
||||
let day = (day_of_year - (153 * shifted_month + 2) / 5 + 1) as u32;
|
||||
let month = if shifted_month < 10 {
|
||||
shifted_month + 3
|
||||
} else {
|
||||
shifted_month - 9
|
||||
} as u32;
|
||||
(year + i64::from(month <= 2), month, day)
|
||||
}
|
||||
pub fn days_between(from_seconds: i64, to_seconds: i64) -> i32 {
|
||||
((to_seconds - from_seconds).max(0) / 86_400) as i32
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue