Compare commits

..

10 Commits

Author SHA1 Message Date
HearthMod Admin 30acd05ce7 Update .gitignore to handle session files and build artifacts
- Added patterns for session files in hm_web/sessions/
- Added patterns for binary files (executables)
- Added patterns for nginx build artifacts

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-07 13:24:44 +00:00
HearthMod Admin 35a5e88cf0 Fix couchbase connection issue in Docker container
- Added couchbase service start to docker_ctl.sh start command
- Added bucket creation with proper credentials in startup
- Added couchbase service stop to docker_ctl.sh stop command
- Ensures lobbyserver connects successfully to couchbase on container startup

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-07 13:07:39 +00:00
Mohd- 9678b1222e server running in background 2025-03-07 15:11:34 +03:00
mohd 33a2253e3d added https support 2024-05-14 16:59:00 +03:00
root 8f7ddedd0d Change gameserver address to Droplet IP 2024-05-11 13:45:57 +00:00
root b449a54fda minor updates 2024-05-11 13:44:45 +00:00
omer a55d3c4b9b Improvements to matchmaking system 2024-04-15 15:51:19 +02:00
omer 79ca60d136 Fixes to sunwell and minor improvements 2024-04-15 15:50:41 +02:00
omer 87a4da5882 Fix 'stop' command 2024-02-29 18:37:47 -06:00
omer 7544f159d9 Make things a bit more readable 2024-02-28 19:14:09 -06:00
317 changed files with 2180 additions and 694 deletions
+13
View File
@@ -15,3 +15,16 @@ cache
*_log
*.log
player1
player2
# Session files
hm_web/sessions/*
# Binary files
hm_gameserver/hm_gameserver
hm_lobbyserver/hm_lobbyserver
# Build artifacts
hm_nginx/objs/*
+21
View File
@@ -0,0 +1,21 @@
# HearthMod Build Commands and Code Guidelines
## Build Commands
- `docker-compose up --build` - Build and start the project container
- `bash docker_ctl.sh compile` - Compile and install server stack
- `bash docker_ctl.sh start` - Start server stack
- `bash docker_ctl.sh stop` - Stop server stack
- Component-specific: `cd hm_gameserver && make`
- Base library: `make -C ../hm_base target=game`
## Code Style Guidelines
- **Indentation**: 4 spaces for C/C++/Python
- **Naming**:
- C: snake_case for functions/variables, UPPER_SNAKE_CASE for constants
- C++: camelCase for methods/variables, UPPER_SNAKE_CASE for constants
- Structs use _s suffix, enums use _e suffix
- **Headers**: System includes first, then project includes
- **Error handling**: Functions return int (0=success, negative=failure)
- **Logging**: Use `hm_log(LOG_LEVEL, log_instance, "message")`
- **Memory**: Always free allocated resources, use pooled allocation when possible
- **Initialization**: Follow component-specific init/cleanup patterns
-7
View File
@@ -11,13 +11,6 @@ RUN git clone https://github.com/couchbase/libcouchbase.git
RUN cd libcouchbase && git checkout 2.9.0 && cmake . && make && make install && ldconfig
# RUN wget http://packages.couchbase.com/clients/c/libcouchbase-2.5.8_ubuntu1404_amd64.tar && tar xvf *.tar && cd libcouchbase-2.5.8_ubuntu1404_amd64/ && dpkg -i *.deb
RUN pip install couchbase==2.2.4
# hearthmod
#RUN git clone https://github.com/farb3yonddriv3n/hm_database.git
#RUN git clone https://github.com/farb3yonddriv3n/hm_base.git
#RUN git clone https://github.com/farb3yonddriv3n/hm_gameserver.git
#RUN git clone https://github.com/farb3yonddriv3n/hm_lobbyserver.git
#RUN git clone https://github.com/farb3yonddriv3n/hm_ctl.git
#RUN git clone https://github.com/farb3yonddriv3n/hm_stud.git
# cleanup
RUN rm -rf /app/couchbase-server-enterprise_4.5.0-ubuntu14.04_amd64.deb
-4
View File
@@ -48,28 +48,24 @@ bash docker_ctl.sh bucket_create
creates a bucket in couchbase.
```sh
cd hearthmod/
bash docker_ctl.sh bucket_restore
```
restores the latest database snapshot/populates it.
```sh
cd hearthmod/
bash docker_ctl.sh compile
```
compiles and installs the entire hearthmod server stack.
```sh
cd hearthmod/
bash docker_ctl.sh start
```
starts the hearthmod server stack.
```sh
cd hearthmod/
bash docker_ctl.sh stop
```
+2
View File
@@ -21,4 +21,6 @@ services:
- 1119:1119
- 3724:3724
- 80:80
- 443:443
- 9002:9002
- 8081:8081
Regular → Executable
+18 -9
View File
@@ -13,7 +13,7 @@ case $1 in
$CMD /bin/bash -c 'cd /app/hm_stud && make && rm -rf cert/test* && cd cert && sh gen_cert.sh'
$CMD make -C /app/hm_gameserver
$CMD make -C /app/hm_lobbyserver
$CMD /bin/bash -c 'cd /app/hm_nginx && sed "s@\/usr\/local\/web@$(pwd)\/..\/hm_web\/@" conf/hm_nginx.conf > conf/nginx.conf && ./configure && make && make install'
$CMD /bin/bash -c 'cd /app/hm_nginx && sed "s@\/usr\/local\/web@$(pwd)\/..\/hm_web\/@" conf/hm_nginx.conf > conf/nginx.conf && ./configure --with-http_ssl_module && make && make install'
$CMD /bin/bash -c 'cd /app/hm_sunwell/examples && npm install'
;;
build_client)
@@ -21,19 +21,28 @@ case $1 in
;;
start)
$CMD mkdir -p /app/hm_log
# Start the servers
$CMD /app/hm_gameserver/hm_gameserver --log=/app/hm_log/hm_gameserver_$(date +%s)
$CMD /app/hm_lobbyserver/hm_lobbyserver --gameserver=127.0.0.1 --log=/app/hm_log/hm_lobbyserver_$(date +%s)
# Start couchbase server first
$CMD service couchbase-server start
# Wait for couchbase to initialize
sleep 5
# Create bucket if it doesn't exist
$CMD /opt/couchbase/bin/couchbase-cli bucket-create -c "localhost:8091" -u Administrator -p password --bucket=hbs --bucket-password=aci --bucket-type=couchbase --bucket-ramsize=200 --bucket-replica=1 --wait || true
# Start the servers in background with -d flag
docker exec -d hearthmod /app/hm_gameserver/hm_gameserver --log=/app/hm_log/hm_gameserver_$(date +%s).log
docker exec -d hearthmod /app/hm_lobbyserver/hm_lobbyserver --gameserver=127.0.0.1 --log=/app/hm_log/hm_lobbyserver_$(date +%s).log
# Start stud
$CMD /app/hm_stud/stud /app/hm_stud/cert/test.com.pem
docker exec -d hearthmod /app/hm_stud/stud /app/hm_stud/cert/test.com.pem
# Start fcgi
$CMD spawn-fcgi -d /app/hm_web/ -f /app/hm_web/app.py -a 127.0.0.1 -p 9002
docker exec -d hearthmod spawn-fcgi -d /app/hm_web/ -f /app/hm_web/app.py -a 127.0.0.1 -p 9002
# Start nginx
$CMD /app/hm_nginx/objs/nginx
docker exec -d hearthmod /app/hm_nginx/objs/nginx
docker exec -d hearthmod /bin/bash -c 'cd /app/hm_sunwell && nodejs examples/server hm_sunwell > /app/hm_log/nodejs_server_$(date +%s).log 2>&1'
;;
stop)
$CMD ps -ef | grep hm_ | grep -v grep | awk '{print $2}' | xargs kill -9
$CMD ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs sudo kill -9
$CMD /bin/bash -c "ps -ef | grep hm_ | grep -v grep | awk '{print \$2}' | xargs kill -9"
$CMD /bin/bash -c "ps -ef | grep nginx | grep -v grep | awk '{print \$2}' | xargs kill -9"
# Stop couchbase server last
$CMD service couchbase-server stop
;;
*)
echo "Usage: ctl.sh {bucket_create|bucket_restore|compile|start|stop}" >&2
+29 -10
View File
@@ -1,15 +1,34 @@
#!/bin/bash
# Sleep for a few seconds (if needed)
# sleep 5
# compiling
# Start Couchbase Server
if [ "$(whoami)" = "couchbase" ]; then
exec /opt/couchbase/bin/couchbase-server -- -kernel global_enable_tracing false -noinput
else
exec chpst -ucouchbase /opt/couchbase/bin/couchbase-server -- -kernel global_enable_tracing false -noinput
fi
cd /app/hm_stud && make && rm -rf cert/test* && cd cert && sh gen_cert.sh
make -C /app/hm_gameserver
make -C /app/hm_lobbyserver
cd /app/hm_nginx && sed "s@\/usr\/local\/web@$(pwd)\/..\/hm_web\/@" conf/hm_nginx.conf > conf/nginx.conf && ./configure --with-http_ssl_module && make && make install
cd /app/hm_sunwell/examples && npm install
# Keep the script running to prevent the container from exiting
# tail -f /dev/null
# start
mkdir -p /app/hm_log
# Start the servers
/app/hm_gameserver/hm_gameserver --log=/app/hm_log/hm_gameserver_$(date +%s).log
/app/hm_lobbyserver/hm_lobbyserver --gameserver=104.131.186.231 --log=/app/hm_log/hm_lobbyserver_$(date +%s).log
# Start stud
/app/hm_stud/stud /app/hm_stud/cert/test.com.pem
# Start fcgi
spawn-fcgi -d /app/hm_web/ -f /app/hm_web/app.py -a 127.0.0.1 -p 9002
# Start nginx
/app/hm_nginx/objs/nginx
/bin/bash -c 'cd /app/hm_sunwell && nodejs examples/server hm_sunwell > /app/hm_log/nodejs_server_$(date +%s).log 2>&1' &
# bucket create
/opt/couchbase/bin/couchbase-cli bucket-create -c "localhost:8091" --bucket=hbs --bucket-password=aci --bucket-type=couchbase --bucket-ramsize=200 --bucket-replica=1 --wait
# bucket restore
/opt/couchbase/bin/cbrestore /app/hm_database/hbs http://localhost:8091/ --bucket-source=hbs
tail -f /dev/null
Binary file not shown.
+1 -1
View File
@@ -434,7 +434,7 @@ void async_handle_socket_errno(struct conn_client_s *c)
} else if(errno == EPIPE) {
hm_log(LOG_ERR, c->log, "{Connector} Broken pipe to backend (EPIPE)");
} else {
hm_log(LOG_ERR, c->log, "{Connector} errno: %d", errno);
hm_log(LOG_ERR, c->log, "{Connector} errno: %d (%s)", errno, strerror(errno));
}
}
+4 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 12.0.2, 2024-02-28T13:09:40. -->
<!-- Written by QtCreator 12.0.2, 2024-03-13T13:45:55. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@@ -83,6 +83,9 @@
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
<valuemap type="QVariantMap" key="CppEditor.QuickFix">
<value type="bool" key="UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
Binary file not shown.
+3 -3
View File
@@ -379,7 +379,7 @@ name="Sprint" card=CS2_077 tags={183:2,202:5,201:3,199:7,203:1,48:7,251:1,268:2,
[DS1_233]
# Frost Nova
name="Shiva's Guard" card=CS2_026 tags={183:2,202:5,201:3,199:4,203:1,48:3,251:1,47:1,268:2,321:1,330:0,331:0,208:1,} custom=1
name="Shiva's Guard" card=CS2_026 tags={183:2,202:5,201:3,199:4,203:1,48:2,251:1,47:1,268:2,321:1,330:0,331:0,208:1,} custom=1
# Fan of Knives
[EX1_129]
@@ -473,7 +473,7 @@ name="Witch Doctor" card=EX1_011 tags={183:2,202:4,201:1,203:2,48:1,47:2,45:1,25
[CS2_189]
# Fire Elemental
name="Fire Elemental" card=CS2_042 tags={183:2,202:4,201:3,199:8,203:1,48:6,47:6,45:5,251:3,321:1,218:1,} custom=1
[CS2_042]
# Ironforge Rifleman
[CS2_141]
@@ -487,7 +487,7 @@ name="Legion Commander" card=CS2_226 tags={183:2,202:4,201:1,203:4,48:5,47:4,45:
name="Frostwolf Banner" card=CS2_226e tags={183:2,202:6,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Succubus
name="Queen of Pain" card=EX1_306 tags={183:2,202:4,201:3,199:9,200:15,203:2,48:3,47:4,45:3,251:1,268:2,321:1,218:1,} custom=1
name="Queen of Pain" card=EX1_306 tags={183:2,202:4,201:3,199:9,200:15,203:2,48:3,47:3,45:5,251:1,268:2,321:1,218:1,} custom=1
# Sap
name="Sap" card=EX1_581 tags={183:2,203:2,202:5,48:2,201:3,199:7,268:2,321:1,330:0,331:0,} custom=1
-2
View File
@@ -72,8 +72,6 @@ attack_CS2_171_FLAG, 1000
attack_CS2_182_FLAG, 1000
attack_CS2_120_FLAG, 1000
attack_EX1_506a_FLAG, 1000
attack_CS2_042_FLAG, 1000
battlecry_CS2_042_FLAG, 1000
attack_CS2_boar_FLAG, 1000
attack_CS2_237_FLAG, 1000
attack_LOE_077_FLAG, 1000
@@ -2,7 +2,7 @@
{
".section buff" : {
"code": "
hsl_transform($attacker, $defender, \"CS2_tk1\");
hsl_transform($deck_player, $attacker, $defender, \"CS2_tk1\");
",
"target": "$enemy_minions"
@@ -81,11 +81,6 @@
hsl_attack(HSL_attacker, HSL_defenders, HSL_fake_levelup); \
}
#define attack_CS2_042\
if(HSL_attacker && flag(&(HSL_attacker->state), attack_CS2_042_FLAG, FLAG_ISSET)) {\
hsl_attack(HSL_attacker, HSL_defenders, HSL_fake_levelup); \
}
#define attack_CS2_boar\
if(HSL_attacker && flag(&(HSL_attacker->state), attack_CS2_boar_FLAG, FLAG_ISSET)) {\
hsl_attack(HSL_attacker, HSL_defenders, HSL_fake_levelup); \
@@ -208,7 +203,6 @@
attack_CS2_182\
attack_CS2_120\
attack_EX1_506a\
attack_CS2_042\
attack_CS2_boar\
attack_CS2_237\
attack_LOE_077\
@@ -16,11 +16,6 @@
def(card_list_s, allcards) allcards = hsl_board_friendly_cards(HSL_deck_player, HSL_attacker->id, HSL_heroes_included); def(card_list_s, cl) foreach(cl, allcards) { cl->card->receive.heal = 99; } hsl_attack_aoe(attacker, allcards, HSL_fake_levelup); hsl_link_target(attacker, allcards); \
}
#define battlecry_CS2_042\
if(HSL_attacker && flag(&(HSL_attacker->state), battlecry_CS2_042_FLAG, FLAG_ISSET)) {\
def(card_s, def) def = hsl_card(HSL_target); if(def) { hsl_attack_bc(HSL_attacker, def, 3); } \
}
#define battlecry_LOE_077\
if(HSL_attacker && flag(&(HSL_attacker->state), battlecry_LOE_077_FLAG, FLAG_ISSET)) {\
hsl_summon_card(HSL_deck_player, CN_BOAR, cardholder1); hsl_summon_card(HSL_deck_player, CN_VULTURE, cardholder2); \
@@ -65,7 +60,6 @@
battlecry_EX1_097\
battlecry_EX1_011\
battlecry_CS2_088\
battlecry_CS2_042\
battlecry_LOE_077\
battlecry_EX1_614\
battlecry_EX1_593\
-2
View File
@@ -325,6 +325,4 @@ int flag_defs[MAX_FLAGS_DEF] = {
1000, // index 321
1000, // index 322
1000, // index 323
1000, // index 324
1000, // index 325
};
@@ -38,8 +38,6 @@ void mechanics_next_turn(struct conn_client_s *c, struct hs_holder_s *p)
reset_turn_plays(opponent);
summon_npc(c, p, opponent);
mechanics_expired(p, deck);
mechanics_expired(p, opponent);
+63 -65
View File
@@ -1,7 +1,7 @@
#ifndef FLAG_DEF_H_
#define FLAG_DEF_H_
#define MAX_FLAGS_DEF 326
#define MAX_FLAGS_DEF 324
int flag_defs[MAX_FLAGS_DEF];
enum flags_e {
@@ -267,69 +267,67 @@ enum flags_e {
attack_CS2_182_FLAG = 259,
attack_CS2_120_FLAG = 260,
attack_EX1_506a_FLAG = 261,
attack_CS2_042_FLAG = 262,
battlecry_CS2_042_FLAG = 263,
attack_CS2_boar_FLAG = 264,
attack_CS2_237_FLAG = 265,
attack_LOE_077_FLAG = 266,
battlecry_LOE_077_FLAG = 267,
destroyed_CS2_118_FLAG = 268,
defender_CS2_118_FLAG = 269,
attack_CS2_118_FLAG = 270,
onboard_CS2_118_FLAG = 271,
destroyed_AT_128_FLAG = 272,
attack_AT_128_FLAG = 273,
attack_EX1_614_FLAG = 274,
battlecry_EX1_614_FLAG = 275,
attack_EX1_593_FLAG = 276,
battlecry_EX1_593_FLAG = 277,
attack_GVG_105_FLAG = 278,
battlecry_GVG_105_FLAG = 279,
attack_NEW1_030_FLAG = 280,
battlecry_NEW1_030_FLAG = 281,
destroyed_EX1_383_FLAG = 282,
attack_EX1_383_FLAG = 283,
onboard_EX1_383_FLAG = 284,
destroyed_CS2_065_FLAG = 285,
attack_CS2_065_FLAG = 286,
onboard_CS2_065_FLAG = 287,
destroyed_AT_018_FLAG = 288,
attack_AT_018_FLAG = 289,
onboard_AT_018_FLAG = 290,
destroyed_EX1_165t2_FLAG = 291,
attack_EX1_165t2_FLAG = 292,
onboard_EX1_165t2_FLAG = 293,
destroyed_EX1_559_FLAG = 294,
attack_EX1_559_FLAG = 295,
onboard_EX1_559_FLAG = 296,
destroyed_NEW1_011_FLAG = 297,
defender_NEW1_011_FLAG = 298,
attack_NEW1_011_FLAG = 299,
onboard_NEW1_011_FLAG = 300,
attack_CS2_226_FLAG = 301,
battlecry_CS2_226_FLAG = 302,
attack_EX1_009_FLAG = 303,
buff_EX1_581_FLAG = 304,
attack_EX1_049_FLAG = 305,
battlecry_EX1_049_FLAG = 306,
spell_aoe_EX1_400_FLAG = 307,
attack_effect_attachment_LOEA06_03e_FLAG = 308,
weapon_LOE_118_FLAG = 309,
idle_LOE_118_FLAG = 310,
weapon_destroyed_LOE_118_FLAG = 311,
weapon_attack_LOE_118_FLAG = 312,
onboard_LOE_118_FLAG = 313,
buff_LOEA06_03_FLAG = 314,
spell_aoe_CS2_026_FLAG = 315,
attack_EX1_306_FLAG = 316,
battlecry_EX1_306_FLAG = 317,
destroyed_CS2_222_FLAG = 318,
attack_CS2_222_FLAG = 319,
idle_CS2_222_FLAG = 320,
onboard_CS2_222_FLAG = 321,
destroyed_CS2_231_FLAG = 322,
attack_CS2_231_FLAG = 323,
idle_CS2_231_FLAG = 324,
onboard_CS2_231_FLAG = 325,
attack_CS2_boar_FLAG = 262,
attack_CS2_237_FLAG = 263,
attack_LOE_077_FLAG = 264,
battlecry_LOE_077_FLAG = 265,
destroyed_CS2_118_FLAG = 266,
defender_CS2_118_FLAG = 267,
attack_CS2_118_FLAG = 268,
onboard_CS2_118_FLAG = 269,
destroyed_AT_128_FLAG = 270,
attack_AT_128_FLAG = 271,
attack_EX1_614_FLAG = 272,
battlecry_EX1_614_FLAG = 273,
attack_EX1_593_FLAG = 274,
battlecry_EX1_593_FLAG = 275,
attack_GVG_105_FLAG = 276,
battlecry_GVG_105_FLAG = 277,
attack_NEW1_030_FLAG = 278,
battlecry_NEW1_030_FLAG = 279,
destroyed_EX1_383_FLAG = 280,
attack_EX1_383_FLAG = 281,
onboard_EX1_383_FLAG = 282,
destroyed_CS2_065_FLAG = 283,
attack_CS2_065_FLAG = 284,
onboard_CS2_065_FLAG = 285,
destroyed_AT_018_FLAG = 286,
attack_AT_018_FLAG = 287,
onboard_AT_018_FLAG = 288,
destroyed_EX1_165t2_FLAG = 289,
attack_EX1_165t2_FLAG = 290,
onboard_EX1_165t2_FLAG = 291,
destroyed_EX1_559_FLAG = 292,
attack_EX1_559_FLAG = 293,
onboard_EX1_559_FLAG = 294,
destroyed_NEW1_011_FLAG = 295,
defender_NEW1_011_FLAG = 296,
attack_NEW1_011_FLAG = 297,
onboard_NEW1_011_FLAG = 298,
attack_CS2_226_FLAG = 299,
battlecry_CS2_226_FLAG = 300,
attack_EX1_009_FLAG = 301,
buff_EX1_581_FLAG = 302,
attack_EX1_049_FLAG = 303,
battlecry_EX1_049_FLAG = 304,
spell_aoe_EX1_400_FLAG = 305,
attack_effect_attachment_LOEA06_03e_FLAG = 306,
weapon_LOE_118_FLAG = 307,
idle_LOE_118_FLAG = 308,
weapon_destroyed_LOE_118_FLAG = 309,
weapon_attack_LOE_118_FLAG = 310,
onboard_LOE_118_FLAG = 311,
buff_LOEA06_03_FLAG = 312,
spell_aoe_CS2_026_FLAG = 313,
attack_EX1_306_FLAG = 314,
battlecry_EX1_306_FLAG = 315,
destroyed_CS2_222_FLAG = 316,
attack_CS2_222_FLAG = 317,
idle_CS2_222_FLAG = 318,
onboard_CS2_222_FLAG = 319,
destroyed_CS2_231_FLAG = 320,
attack_CS2_231_FLAG = 321,
idle_CS2_231_FLAG = 322,
onboard_CS2_231_FLAG = 323,
};
#endif
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef ENTGEN_H_
#define ENTGEN_H_
#define MAX_ENTITIES 133
#define MAX_ENTITIES 132
#define MAX_BEASTS 0
#define MAX_TOTEMS 0
#define MAX_TOTEMIC_CALL 0
+271 -232
View File
@@ -18,22 +18,22 @@
#ifndef SECTIONS_H_
#define SECTIONS_H_
#include <section_buff.h>
#include <section_battlecry.h>
#include <section_defender.h>
#include <section_spell.h>
#include <section_spell_aoe.h>
#include <section_attachment_attack.h>
#include <section_attack.h>
#include <section_attack_effect.h>
#include <section_weapon.h>
#include <section_endturn.h>
#include <section_onboard.h>
#include <section_destroyed.h>
#include <section_weapon_destroyed.h>
#include <section_idle.h>
#include <section_weapon_attack.h>
#include <section_attachment_attack.h>
#include <section_attack_effect_attachment.h>
#include <section_battlecry.h>
#include <section_buff.h>
#include <section_defender.h>
#include <section_destroyed.h>
#include <section_endturn.h>
#include <section_idle.h>
#include <section_onboard.h>
#include <section_spell.h>
#include <section_spell_aoe.h>
#include <section_weapon.h>
#include <section_weapon_attack.h>
#include <section_weapon_destroyed.h>
// built-in variables
#define HSL_attacker (attacker)
@@ -67,14 +67,13 @@
#define cmp_cardname(m_card, m_src) (strcmp(m_card->entity->name, m_src) == 0)
#define hsl_set_windfury(m_dst)\
flag(&m_dst->state, CARD_WINDFURY, FLAG_SET)
#define hsl_set_windfury(m_dst) flag(&m_dst->state, CARD_WINDFURY, FLAG_SET)
#define hsl_set_taunt(m_dst)\
flag(&m_dst->state, CARD_TAUNT, FLAG_SET);
#define hsl_set_taunt(m_dst) flag(&m_dst->state, CARD_TAUNT, FLAG_SET);
#define hsl_refresh_mana(m_deck, m_amount)\
deck->mana_used = (m_amount > deck->mana_used) ? 0 : deck->mana_used - m_amount ;
#define hsl_refresh_mana(m_deck, m_amount) \
deck->mana_used = \
(m_amount > deck->mana_used) ? 0 : deck->mana_used - m_amount;
#define turn_plays(m_card) (m_card->turn_plays)
@@ -84,79 +83,82 @@
* @param m_alias iterator
* @param m_src source
*/
#define foreach(m_alias, m_src)\
for(m_alias = m_src; m_alias != NULL; m_alias = m_alias->next)
#define foreach(m_alias, m_src) \
for (m_alias = m_src; m_alias != NULL; m_alias = m_alias->next)
/**
* @brief Find out if controller is current player
*
* @param m_card played card
*/
#define is_controller_player(m_card)\
#define is_controller_player(m_card) \
(p->id == m_card->parent->deck_copy->controller)
// hsl_* macros
// only works on friendly deck
#define hsl_set_magic_immunity(m_dst)\
force_expire(p, HSL_deck_player, m_dst);\
mechanics_expire(p->game->turn + 2, m_dst, EXPIRE_MAGIC_IMMUNITY, 1, NULL);\
flag(&m_dst->state, CARD_DIVINE_SHIELD, FLAG_SET);
#define hsl_set_magic_immunity(m_dst) \
force_expire(p, HSL_deck_player, m_dst); \
mechanics_expire(p->game->turn + 2, m_dst, EXPIRE_MAGIC_IMMUNITY, 1, NULL); \
flag(&m_dst->state, CARD_DIVINE_SHIELD, FLAG_SET);
#define hsl_set_fullhealth(m_dst)\
m_dst->health = m_dst->total_health;\
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_set_fullhealth(m_dst) \
m_dst->health = m_dst->total_health; \
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_swap_health(m_dst, m_src)\
int hp = m_dst->health;\
m_dst->health = m_dst->total_health = m_src->health - m_src->buff_health;\
m_src->health = m_src->total_health = hp + m_src->buff_health;\
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);\
flag(&m_src->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_swap_health(m_dst, m_src) \
int hp = m_dst->health; \
m_dst->health = m_dst->total_health = m_src->health - m_src->buff_health; \
m_src->health = m_src->total_health = hp + m_src->buff_health; \
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET); \
flag(&m_src->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_set_health(m_dst, m_change)\
m_dst->health = m_dst->total_health = (m_change + m_dst->buff_health);\
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_set_health(m_dst, m_change) \
m_dst->health = m_dst->total_health = (m_change + m_dst->buff_health); \
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_decrease_health(m_dst, m_change)\
m_dst->buff_health -= m_change;\
m_dst->total_health -= m_change;\
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);\
if(m_dst->health > m_dst->total_health) {\
m_dst->health = m_dst->total_health;\
}
#define hsl_increase_health(m_dst, m_change)\
m_dst->buff_health += m_change;\
m_dst->health += m_change;\
m_dst->total_health += m_change;\
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_replenish_health(m_dst, m_change)\
if(m_dst->total_health >= (m_dst->health + m_change)) {\
m_dst->health += m_change;\
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);\
#define hsl_decrease_health(m_dst, m_change) \
m_dst->buff_health -= m_change; \
m_dst->total_health -= m_change; \
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET); \
if (m_dst->health > m_dst->total_health) { \
m_dst->health = m_dst->total_health; \
}
#define hsl_increase_health(m_dst, m_change) \
m_dst->buff_health += m_change; \
m_dst->health += m_change; \
m_dst->total_health += m_change; \
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET);
#define hsl_change_armor(m_dst, m_change)\
m_dst->armor += m_change;\
flag(&m_dst->state, MECHANICS_ARMOR, FLAG_SET);
#define hsl_replenish_health(m_dst, m_change) \
if (m_dst->total_health >= (m_dst->health + m_change)) { \
m_dst->health += m_change; \
flag(&m_dst->state, MECHANICS_HEALTH, FLAG_SET); \
}
#define hsl_change_attack(m_dst, m_change)\
m_dst->attack += m_change;\
flag(&m_dst->state, MECHANICS_ATTACK, FLAG_SET);
#define hsl_change_armor(m_dst, m_change) \
m_dst->armor += m_change; \
flag(&m_dst->state, MECHANICS_ARMOR, FLAG_SET);
#define hsl_change_attack(m_dst, m_change) \
m_dst->attack += m_change; \
flag(&m_dst->state, MECHANICS_ATTACK, FLAG_SET);
#define hsl_cards_by_name(m_deck, m_name) (cards_by_name(HSL_player, m_deck, m_name, CARD_BOARD))
#define hsl_cards_by_name(m_deck, m_name) \
(cards_by_name(HSL_player, m_deck, m_name, CARD_BOARD))
#define hsl_board_count_by_name(m_deck, m_name) (board_count_by_name(m_deck, m_name))
#define hsl_board_count_by_name(m_deck, m_name) \
(board_count_by_name(m_deck, m_name))
#define hsl_board_minions_count(m_deck, m_attacker) cards_get_board_count(m_deck, NULL, 0, m_attacker->id)
#define hsl_board_minions_count(m_deck, m_attacker) \
cards_get_board_count(m_deck, NULL, 0, m_attacker->id)
#define hsl_add_single_attachment(m_player, m_deck, m_dst, m_src) add_single_attachment(m_player, m_deck, m_dst, m_src)
#define hsl_add_single_attachment(m_player, m_deck, m_dst, m_src) \
add_single_attachment(m_player, m_deck, m_dst, m_src)
#define hsl_remove_attachment(m_deck, m_opponent, m_card, m_name) (card_remove_attachment(m_deck, m_opponent, m_card, m_name))
#define hsl_remove_attachment(m_deck, m_opponent, m_card, m_name) \
(card_remove_attachment(m_deck, m_opponent, m_card, m_name))
#define level(m_dst) (m_dst->boss.level)
@@ -164,139 +166,171 @@ flag(&m_dst->state, MECHANICS_ATTACK, FLAG_SET);
#define is_boss(m_dst) (flag(&m_dst->state, CARD_BOSS, FLAG_ISSET))
#define hsl_apply_attachment(m_player, m_deck, m_dst, m_src) (card_apply_attachment(m_player, m_deck, m_dst, m_src))
#define hsl_apply_attachment(m_player, m_deck, m_dst, m_src) \
(card_apply_attachment(m_player, m_deck, m_dst, m_src))
#define hsl_cards_get_hand_random(m_deck) (cards_get_hand_random(m_deck))
#define hsl_cards_get_hand(m_deck) (cards_get_hand(m_deck))
#define hsl_receive_damage(m_dst, m_dmg)\
if(m_dst) { m_dst->receive.damage = m_dmg; }
#define hsl_receive_damage(m_dst, m_dmg) \
if (m_dst) { \
m_dst->receive.damage = m_dmg; \
}
#define hsl_receive_heal(m_dst, m_heal)\
if(m_dst) { m_dst->receive.heal = m_heal; }
#define hsl_receive_heal(m_dst, m_heal) \
if (m_dst) { \
m_dst->receive.heal = m_heal; \
}
#define hsl_freeze(m_src, m_dst)\
hm_log(LOG_DEBUG, lg, "Attacker [%s](%d) froze [%s](%d)", m_src->entity->desc, m_src->id, m_dst->entity->desc, m_dst->id);\
mechanics_expire(p->game->turn + 3, m_dst, EXPIRE_FROZEN, 1, NULL);\
flag(&m_dst->state, CARD_FROZEN, FLAG_SET);
#define hsl_freeze(m_src, m_dst) \
hm_log(LOG_DEBUG, lg, "Attacker [%s](%d) froze [%s](%d)", \
m_src->entity->desc, m_src->id, m_dst->entity->desc, m_dst->id); \
mechanics_expire(p->game->turn + 3, m_dst, EXPIRE_FROZEN, 1, NULL); \
flag(&m_dst->state, CARD_FROZEN, FLAG_SET);
#define hsl_add_defender(m_src, m_holder)\
struct card_list_s *m_holder;\
LIST_ADD(defenders, m_holder, m_src)
#define hsl_add_defender(m_src, m_holder) \
struct card_list_s *m_holder; \
LIST_ADD(defenders, m_holder, m_src)
#define hsl_return_to_hand(m_card)\
flag(&m_card->state, CARD_BOARD, FLAG_UNSET);\
flag(&m_card->state, CARD_HAND, FLAG_SET);\
flag(&m_card->state, CARD_EXHAUSTED, FLAG_UNSET);\
m_card->health = m_card->total_health = m_card->default_health;\
flag(&m_card->state, MECHANICS_HEALTH, FLAG_SET);\
m_card->attack = m_card->default_attack;\
flag(&m_card->state, MECHANICS_ATTACK, FLAG_SET);\
card_remove_attachment(hsl_deck(m_card), NULL, m_card, NULL);\
card_destroy(m_card, hsl_deck(m_card), 1);\
/* order is importatnt here, new zone position must come after card is destroyed */\
if(m_card->controller == HSL_deck_player->controller) {\
m_card->zone_position = ++(HSL_deck_player->handposition);\
} else {\
m_card->zone_position = ++(HSL_deck_opponent->handposition);\
}\
#define hsl_return_to_hand(m_card) \
flag(&m_card->state, CARD_BOARD, FLAG_UNSET); \
flag(&m_card->state, CARD_HAND, FLAG_SET); \
flag(&m_card->state, CARD_EXHAUSTED, FLAG_UNSET); \
m_card->health = m_card->total_health = m_card->default_health; \
flag(&m_card->state, MECHANICS_HEALTH, FLAG_SET); \
m_card->attack = m_card->default_attack; \
flag(&m_card->state, MECHANICS_ATTACK, FLAG_SET); \
card_remove_attachment(hsl_deck(m_card), NULL, m_card, NULL); \
card_destroy(m_card, hsl_deck(m_card), 1); \
/* order is importatnt here, new zone position must come after card is \
* destroyed */ \
if (m_card->controller == HSL_deck_player->controller) { \
m_card->zone_position = ++(HSL_deck_player->handposition); \
} else { \
m_card->zone_position = ++(HSL_deck_opponent->handposition); \
}
#define hsl_cards_get_hand(m_deck) (cards_get_hand(m_deck))
#define hsl_add_new_card_hand(m_deck, m_card, m_holder)\
struct card_s *m_holder = add_new_card(m_deck->parent->game, m_deck, -1, m_card, -1);\
flag(&m_holder->state, CARD_HAND, FLAG_SET);\
m_holder->zone_position = ++(m_deck->handposition);
#define hsl_add_new_card_hand(m_deck, m_card, m_holder) \
struct card_s *m_holder = \
add_new_card(m_deck->parent->game, m_deck, -1, m_card, -1); \
flag(&m_holder->state, CARD_HAND, FLAG_SET); \
m_holder->zone_position = ++(m_deck->handposition);
#define hsl_destroy(m_deck, m_dst)\
{\
struct card_s *__fake_defender = m_dst;\
__SECTION_DESTROYED\
}\
flag(&m_dst->state, CARD_DESTROYED, FLAG_SET);\
cards_board_destroyed_reorder(m_deck, m_dst->zone_position);
#define hsl_destroy(m_deck, m_dst) \
{ \
struct card_s *__fake_defender = m_dst; \
__SECTION_DESTROYED \
} \
flag(&m_dst->state, CARD_DESTROYED, FLAG_SET); \
cards_board_destroyed_reorder(m_deck, m_dst->zone_position);
#define hsl_destroy_inhand(m_dst) card_discard_by_name(HSL_player, HSL_fake_defender, m_dst)
#define hsl_destroy_inhand(m_dst) \
card_discard_by_name(HSL_player, HSL_fake_defender, m_dst)
#define hsl_set_weapon_durability(m_dst, m_value)\
m_dst->durability += m_value;\
flag(&m_dst->state, MECHANICS_DURABILITY, FLAG_SET);
#define hsl_set_weapon_durability(m_dst, m_value) \
m_dst->durability += m_value; \
flag(&m_dst->state, MECHANICS_DURABILITY, FLAG_SET);
#define hsl_weapon_durability(m_dst) m_dst->durability
#define hsl_destroy_weapon(m_attacker, m_deck)\
if(m_deck->heroweapon) {\
/*struct card_list_s *itm;*/\
__SECTION_WEAPON_DESTROYED;\
flag(&m_deck->heroweapon->state, CARD_DESTROYED, FLAG_SET);\
flag(&m_deck->heroweapon->state, CARD_BOARD, FLAG_UNSET);\
flag(&m_deck->heroweapon->state, CARD_HEROWEAPON, FLAG_UNSET);\
flag(&m_deck->heroweapon->state, CARD_EXHAUSTED, FLAG_UNSET);\
#define hsl_destroy_weapon(m_attacker, m_deck) \
if (m_deck->heroweapon) { \
/*struct card_list_s *itm;*/ \
__SECTION_WEAPON_DESTROYED; \
flag(&m_deck->heroweapon->state, CARD_DESTROYED, FLAG_SET); \
flag(&m_deck->heroweapon->state, CARD_BOARD, FLAG_UNSET); \
flag(&m_deck->heroweapon->state, CARD_HEROWEAPON, FLAG_UNSET); \
flag(&m_deck->heroweapon->state, CARD_EXHAUSTED, FLAG_UNSET); \
\
/*LIST_ADD(m_attacker->target.card, itm, m_holder->deck_copy->heroweapon);*/\
/*LIST_ADD(m_attacker->target.card, itm, \
* m_holder->deck_copy->heroweapon);*/ \
\
flag(&m_deck->heroweapon->state, MECHANICS_DESTROY_WEAPON, FLAG_SET);\
m_deck->heroweapon = NULL;\
flag(&m_deck->heroweapon->state, MECHANICS_DESTROY_WEAPON, FLAG_SET); \
m_deck->heroweapon = NULL; \
}
#define is_weapon(m_deck, m_src) (m_deck && m_deck->heroweapon && strcmp(m_deck->heroweapon->entity->name, m_src) == 0)
#define is_weapon(m_deck, m_src) \
(m_deck && m_deck->heroweapon && \
strcmp(m_deck->heroweapon->entity->name, m_src) == 0)
#define hsl_change_cost(m_card, m_change)\
(m_card->cost = (m_card->default_cost - m_change >= 0) ? (m_card->default_cost - m_change) : 0);\
flag(&(m_card->state), MECHANICS_COST, FLAG_SET);
#define hsl_change_cost(m_card, m_change) \
(m_card->cost = (m_card->default_cost - m_change >= 0) \
? (m_card->default_cost - m_change) \
: 0); \
flag(&(m_card->state), MECHANICS_COST, FLAG_SET);
#define hsl_card_spell_by_name(m_player, m_deck, m_name) (card_by_name(m_player, m_deck, m_name, CARD_SPELL))
#define hsl_card_board_by_name(m_player, m_deck, m_name) (card_by_name(m_player, m_deck, m_name, CARD_BOARD))
#define hsl_card_hand_by_name(m_player, m_deck, m_name) (card_by_name(m_player, m_deck, m_name, CARD_HAND))
#define hsl_card_spell_by_name(m_player, m_deck, m_name) \
(card_by_name(m_player, m_deck, m_name, CARD_SPELL))
#define hsl_card_board_by_name(m_player, m_deck, m_name) \
(card_by_name(m_player, m_deck, m_name, CARD_BOARD))
#define hsl_card_hand_by_name(m_player, m_deck, m_name) \
(card_by_name(m_player, m_deck, m_name, CARD_HAND))
#define hsl_count_attachments(m_deck, m_opponent, m_card, m_name) (card_count_attachment(m_deck, m_opponent, m_card, m_name))
#define hsl_count_attachments(m_deck, m_opponent, m_card, m_name) \
(card_count_attachment(m_deck, m_opponent, m_card, m_name))
#define hsl_discard_random_hand(m_deck, m_amount, m_holder)\
int m_holder;\
for(m_holder = 0; m_holder < m_amount; m_holder++) {\
struct card_s *m_card = cards_get_hand_random(m_deck);\
if(m_card) {\
flag(&m_card->state, CARD_DISCARD, FLAG_SET);\
flag(&m_card->state, CARD_HAND, FLAG_UNSET);\
cards_reorder_hand_owner(m_deck, m_card->id);\
}\
}
#define hsl_discard_random_hand(m_deck, m_amount, m_holder) \
int m_holder; \
for (m_holder = 0; m_holder < m_amount; m_holder++) { \
struct card_s *m_card = cards_get_hand_random(m_deck); \
if (m_card) { \
flag(&m_card->state, CARD_DISCARD, FLAG_SET); \
flag(&m_card->state, CARD_HAND, FLAG_UNSET); \
cards_reorder_hand_owner(m_deck, m_card->id); \
} \
}
#define hsl_discard_hand(m_deck, m_all)\
struct card_list_s *m_holder;\
for(m_holder = m_all; m_holder != NULL; m_holder = m_holder->next) {\
flag(&m_holder->card->state, CARD_DISCARD, FLAG_SET);\
cards_reorder_hand_owner(m_deck, m_holder->card->id);\
}
#define hsl_discard_hand(m_deck, m_all) \
struct card_list_s *m_holder; \
for (m_holder = m_all; m_holder != NULL; m_holder = m_holder->next) { \
flag(&m_holder->card->state, CARD_DISCARD, FLAG_SET); \
cards_reorder_hand_owner(m_deck, m_holder->card->id); \
}
#define card(m_list) (m_list->card)
#define hsl_card(m_target)\
#define hsl_card(m_target) \
card_get(HSL_deck_player, HSL_deck_opponent, m_target)
#define hsl_deck(m_card) ((m_card->controller == HSL_deck_player->controller) ? HSL_deck_player : HSL_deck_opponent)
#define hsl_deck(m_card) \
((m_card->controller == HSL_deck_player->controller) ? HSL_deck_player \
: HSL_deck_opponent)
#define default_health(m_card) (m_card->default_health)
#define default_attack(m_card) (m_card->default_attack)
#define hsl_board_all_cards(m_attacker, m_hero) cards_get_board(p->deck_copy, p->opponent.deck_copy, m_hero, m_attacker->id, HSL_magic_immunity_included, 1)
#define hsl_board_all_cards(m_attacker, m_hero) \
cards_get_board(p->deck_copy, p->opponent.deck_copy, m_hero, m_attacker->id, \
HSL_magic_immunity_included, 1)
#define hsl_board_all_cards_no_boss(m_attacker, m_hero) (cards_get_board(p->deck_copy, p->opponent.deck_copy, m_hero, m_attacker->id, HSL_magic_immunity_included, 0))
#define hsl_board_all_cards_no_boss(m_attacker, m_hero) \
(cards_get_board(p->deck_copy, p->opponent.deck_copy, m_hero, \
m_attacker->id, HSL_magic_immunity_included, 0))
#define hsl_board_friendly_cards(m_deck, m_attacker, m_hero) (cards_get_board(m_deck, NULL, m_hero, m_attacker, HSL_magic_immunity_included, 1))
#define hsl_board_friendly_cards(m_deck, m_attacker, m_hero) \
(cards_get_board(m_deck, NULL, m_hero, m_attacker, \
HSL_magic_immunity_included, 1))
#define hsl_board_friendly_cards_wattacker(m_hero) cards_get_board(p->deck_copy, NULL, m_hero, -1, HSL_magic_immunity_included, 1);
#define hsl_board_friendly_cards_wattacker(m_hero) \
cards_get_board(p->deck_copy, NULL, m_hero, -1, HSL_magic_immunity_included, \
1);
#define hsl_board_enemy_cards(m_attacker, m_hero, m_mi) cards_get_board(NULL, p->opponent.deck_copy, m_hero, m_attacker->id, m_mi, 1);
#define hsl_board_enemy_cards(m_attacker, m_hero, m_mi) \
cards_get_board(NULL, p->opponent.deck_copy, m_hero, m_attacker->id, m_mi, 1);
#define hsl_board_friendly_no_boss(m_attacker, m_hero, m_mi) cards_get_board(NULL, p->opponent.deck_copy, m_hero, m_attacker->id, m_mi, 0);
#define hsl_board_friendly_no_boss(m_attacker, m_hero, m_mi) \
cards_get_board(NULL, p->opponent.deck_copy, m_hero, m_attacker->id, m_mi, 0);
#define hsl_board_boss_cards(m_deck) (cards_get_board_boss(m_deck))
#define hsl_attack_aoe(m_dst, m_src, m_fake_levelup) mechanics_attack_aoe(c, opt->position, m_dst, &m_src, m_fake_levelup)
#define hsl_attack(m_dst, m_src, m_fake_levelup) hsl_attack_aoe(m_dst, m_src, m_fake_levelup)
#define hsl_attack_aoe(m_dst, m_src, m_fake_levelup) \
mechanics_attack_aoe(c, opt->position, m_dst, &m_src, m_fake_levelup)
#define hsl_attack(m_dst, m_src, m_fake_levelup) \
hsl_attack_aoe(m_dst, m_src, m_fake_levelup)
/**
* @brief Summon card for deck
@@ -305,12 +339,12 @@ for(m_holder = m_all; m_holder != NULL; m_holder = m_holder->next) {\
* @param m_name name of the card
* @param m_card card holder
**/
#define hsl_summon_card(m_deck, m_name, m_card)\
int m_card##pos = cards_board_last(m_deck);\
if(m_card##pos <= MAX_BOARD) {\
struct card_s *m_card = add_new_card(p->game, m_deck, -1, m_name, -1);\
mechanics_put_card_onboard(c, m_card##pos, m_card, 1, NULL, NULL, m_deck);\
}
#define hsl_summon_card(m_deck, m_name, m_card) \
int m_card##pos = cards_board_last(m_deck); \
if (m_card##pos <= MAX_BOARD) { \
struct card_s *m_card = add_new_card(p->game, m_deck, -1, m_name, -1); \
mechanics_put_card_onboard(c, m_card##pos, m_card, 1, NULL, NULL, m_deck); \
}
/**
* @brief Count number of cards in list of cards
@@ -334,17 +368,17 @@ if(m_card##pos <= MAX_BOARD) {\
* @param m_card card's holder
* @param m_amount number of cards to draw
**/
#define hsl_draw_cards(m_player, m_deck, m_card, m_amount)\
int m_card##idx;\
struct card_s *m_card;\
for(m_card##idx = 0; m_card##idx < m_amount; m_card##idx++) {\
m_card = draw_random_card(m_deck, m_player->entity_id, 0);\
if(m_card) {\
flag(&m_card->state, CARD_HAND, FLAG_SET);\
struct card_list_s *m_card##itm;\
LIST_ADD(defenders, m_card##itm, m_card);\
}\
}
#define hsl_draw_cards(m_player, m_deck, m_card, m_amount) \
int m_card##idx; \
struct card_s *m_card; \
for (m_card##idx = 0; m_card##idx < m_amount; m_card##idx++) { \
m_card = draw_random_card(m_deck, m_player->entity_id, 0); \
if (m_card) { \
flag(&m_card->state, CARD_HAND, FLAG_SET); \
struct card_list_s *m_card##itm; \
LIST_ADD(defenders, m_card##itm, m_card); \
} \
}
/**
* @brief Link card to another card's targets
@@ -352,8 +386,7 @@ for(m_card##idx = 0; m_card##idx < m_amount; m_card##idx++) {\
* @param m_dst destination card
* @param m_src source card
**/
#define hsl_link_target(m_dst, m_src)\
LIST_ADD_LINK(m_dst->target.card, m_src)
#define hsl_link_target(m_dst, m_src) LIST_ADD_LINK(m_dst->target.card, m_src)
/**
* @brief Add target to defenders
@@ -361,9 +394,9 @@ for(m_card##idx = 0; m_card##idx < m_amount; m_card##idx++) {\
* @param m_src source card
* @param m_holder variable placeholder
**/
#define hsl_add_target(m_src, m_holder)\
struct card_list_s *m_holder##item;\
LIST_ADD(defenders, m_holder##item, m_src);\
#define hsl_add_target(m_src, m_holder) \
struct card_list_s *m_holder##item; \
LIST_ADD(defenders, m_holder##item, m_src);
/**
* @brief Attack as battlecry
@@ -372,14 +405,14 @@ LIST_ADD(defenders, m_holder##item, m_src);\
* @param m_defender defending card
* @param m_damage damage caused
**/
#define hsl_attack_bc(m_attacker, m_defender, m_damage)\
m_defender->receive.damage = m_damage;\
entity_attack(p, m_attacker, m_defender);
#define hsl_attack_bc(m_attacker, m_defender, m_damage) \
m_defender->receive.damage = m_damage; \
entity_attack(p, m_attacker, m_defender);
/**
* @brief Heal defender by certain amount (alias)
**/
#define hsl_heal_bc(m_attacker, m_defender, m_damage)\
#define hsl_heal_bc(m_attacker, m_defender, m_damage) \
hsl_heal(m_attacker, m_defender, m_damage);
/*
m_defender->receive.heal = m_damage;\
@@ -395,11 +428,11 @@ LIST_ADD(m_attacker->target.card, item, m_defender);
* @param m_defender receiver card
* @param m_damage amount of healing
**/
#define hsl_heal(m_attacker, m_defender, m_damage)\
m_defender->receive.heal = m_damage;\
entity_attack(p, m_attacker, m_defender);\
struct card_list_s *item;\
LIST_ADD(m_attacker->target.card, item, m_defender);
#define hsl_heal(m_attacker, m_defender, m_damage) \
m_defender->receive.heal = m_damage; \
entity_attack(p, m_attacker, m_defender); \
struct card_list_s *item; \
LIST_ADD(m_attacker->target.card, item, m_defender);
/**
* @brief Mark target as corrupted
@@ -409,9 +442,9 @@ LIST_ADD(m_attacker->target.card, item, m_defender);
* @param m_turn number of turns from current turn when card is destroyed
* @param m_defender destination card
*/
#define hsl_buff_corrupt_expire(m_turn, m_defender)\
flag(&(m_defender->state), CARD_CORRUPTED, FLAG_SET);\
mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_DESTROY, 1, NULL)
#define hsl_buff_corrupt_expire(m_turn, m_defender) \
flag(&(m_defender->state), CARD_CORRUPTED, FLAG_SET); \
mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_DESTROY, 1, NULL)
/**
* @brief Change attack for m_turn turns
@@ -420,10 +453,11 @@ mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_DESTROY, 1, NULL)
* @param m_defender destination card
* @param m_attack value to change
*/
#define hsl_buff_attack_expire(m_turn, m_defender, m_attack)\
m_defender->attack += m_attack;\
flag(&(m_defender->state), MECHANICS_ATTACK, FLAG_SET);\
mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_ATTACK, -(m_attack), NULL);
#define hsl_buff_attack_expire(m_turn, m_defender, m_attack) \
m_defender->attack += m_attack; \
flag(&(m_defender->state), MECHANICS_ATTACK, FLAG_SET); \
mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_ATTACK, \
-(m_attack), NULL);
/**
* @brief Change health of card
@@ -431,9 +465,11 @@ mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_ATTACK, -(m_attack),
* @param m_card destination card
* @param m_health health value
*/
#define hsl_add_attachment(m_player, m_attacker, m_defender, m_turn)\
add_single_attachment(m_player, hsl_deck(m_defender), m_attacker, m_defender);\
mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_ATTACHMENT, 0, m_attacker->attachment);
#define hsl_add_attachment(m_player, m_attacker, m_defender, m_turn) \
add_single_attachment(m_player, hsl_deck(m_defender), m_attacker, \
m_defender); \
mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_ATTACHMENT, 0, \
m_attacker->attachment);
/**
* @brief Change health of card
@@ -441,16 +477,16 @@ mechanics_expire(p->game->turn + m_turn, m_defender, EXPIRE_ATTACHMENT, 0, m_att
* @param m_card destination card
* @param m_health health value
*/
#define buff_health(m_card, m_health)\
defenders->card->health = m_health;\
flag(&(m_card->state), MECHANICS_HEALTH, FLAG_SET);
#define buff_health(m_card, m_health) \
defenders->card->health = m_health; \
flag(&(m_card->state), MECHANICS_HEALTH, FLAG_SET);
/**
* @brief Set divine shield to card
*
* @param m_card destination card
*/
#define hsl_divine_shield(m_card)\
#define hsl_divine_shield(m_card) \
flag(&(m_card->state), CARD_DIVINE_SHIELD, FLAG_SET);
/**
@@ -459,8 +495,7 @@ flag(&(m_card->state), MECHANICS_HEALTH, FLAG_SET);
* @param m_card destination card
* @param m_flag flag to set
*/
#define setflag(m_card, m_flag)\
flag(&(m_card->state), m_flag, FLAG_SET);
#define setflag(m_card, m_flag) flag(&(m_card->state), m_flag, FLAG_SET);
/**
* @brief Unset flag from card
@@ -468,29 +503,31 @@ flag(&(m_card->state), MECHANICS_HEALTH, FLAG_SET);
* @param m_card destination card
* @param m_flag flag to unset
*/
#define unsetflag(m_card, m_flag)\
flag(&(m_card->state), m_flag, FLAG_UNSET);
#define unsetflag(m_card, m_flag) flag(&(m_card->state), m_flag, FLAG_UNSET);
/**
* @brief Unset windfury flag from card
*
* @param m_card destination card
*/
#define hsl_unset_windfury(m_card) (flag(&(m_card->state), CARD_WINDFURY, FLAG_UNSET))
#define hsl_unset_windfury(m_card) \
(flag(&(m_card->state), CARD_WINDFURY, FLAG_UNSET))
/**
* @brief Set exhausted flag to card
*
* @param m_card destination card
*/
#define hsl_set_exhausted(m_card) (flag(&(m_card->state), CARD_EXHAUSTED, FLAG_SET))
#define hsl_set_exhausted(m_card) \
(flag(&(m_card->state), CARD_EXHAUSTED, FLAG_SET))
/**
* @brief Unset exhausted flag from card
*
* @param m_card destination card
*/
#define hsl_unset_exhausted(m_card) (flag(&(m_card->state), CARD_EXHAUSTED, FLAG_UNSET))
#define hsl_unset_exhausted(m_card) \
(flag(&(m_card->state), CARD_EXHAUSTED, FLAG_UNSET))
/**
* @brief Transform defender to m_name
@@ -501,38 +538,40 @@ flag(&(m_card->state), MECHANICS_HEALTH, FLAG_SET);
* @param m_defender card being attacked
* @param m_name card code name
*/
#define hsl_transform(m_attacker, m_defender,m_name)\
struct card_s *card;\
card = add_new_card(p->game, p->opponent.deck_copy, -1, m_name, -1);\
card->zone_position = m_defender->zone_position;\
mechanics_put_card_onboard(c, card->zone_position, card, 1, NULL, NULL);\
m_defender->linked = card->id;\
flag(&m_defender->state, CARD_LINKED, FLAG_SET);\
flag(&m_defender->state, CARD_HIDE, FLAG_SET);\
flag(&m_defender->state, CARD_BOARD, FLAG_UNSET);
#define hsl_transform(m_deck, m_attacker, m_defender, m_name) \
struct card_s *card; \
card = add_new_card(p->game, p->opponent.deck_copy, -1, m_name, -1); \
card->zone_position = m_defender->zone_position; \
mechanics_put_card_onboard(c, card->zone_position, card, 1, NULL, NULL, \
m_deck); \
m_defender->linked = card->id; \
flag(&m_defender->state, CARD_LINKED, FLAG_SET); \
flag(&m_defender->state, CARD_HIDE, FLAG_SET); \
flag(&m_defender->state, CARD_BOARD, FLAG_UNSET);
/**
* @brief Give weapon to player
*
* Called only in '.section onboard'. There is no need to linked destroyed weapon to defenders
* Called only in '.section onboard'. There is no need to linked destroyed
* weapon to defenders
*
* @param m_dst hero card
*/
#define hsl_give_weapon(m_dst)\
if(m_dst->heroweapon != NULL) {\
/* destroy weapon first */\
{\
struct card_s *__fake_weapon = m_dst->heroweapon;\
__SECTION_WEAPON_DESTROYED;\
}\
#define hsl_give_weapon(m_dst) \
if (m_dst->heroweapon != NULL) { \
/* destroy weapon first */ \
{ \
struct card_s *__fake_weapon = m_dst->heroweapon; \
__SECTION_WEAPON_DESTROYED; \
} \
\
m_dst->heroweapon->priority_override = 900;\
flag(&(m_dst->heroweapon->state), CARD_DESTROYED, FLAG_SET);\
flag(&(m_dst->heroweapon->state), CARD_BOARD, FLAG_UNSET);\
flag(&(m_dst->heroweapon->state), CARD_HEROWEAPON, FLAG_UNSET);\
}\
flag(&attacker->state, CARD_BOARD, FLAG_SET);\
flag(&attacker->state, CARD_HEROWEAPON, FLAG_SET);\
m_dst->heroweapon = attacker;
m_dst->heroweapon->priority_override = 900; \
flag(&(m_dst->heroweapon->state), CARD_DESTROYED, FLAG_SET); \
flag(&(m_dst->heroweapon->state), CARD_BOARD, FLAG_UNSET); \
flag(&(m_dst->heroweapon->state), CARD_HEROWEAPON, FLAG_UNSET); \
} \
flag(&attacker->state, CARD_BOARD, FLAG_SET); \
flag(&attacker->state, CARD_HEROWEAPON, FLAG_SET); \
m_dst->heroweapon = attacker;
#endif
+45 -46
View File
@@ -92,7 +92,7 @@ struct ent_s entities[MAX_ENTITIES] = {{ "GAME_ENTITY", 11, 6, (void *)0, (void
, { "CS2_024", 7, 11, (void *)0, (void *)0, "Frostbolt", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 4 }, { 48, 2 }, { 47, 3 }, { 183, 2 }, { 321, 1 }, { 208, 1 }, { 268, 2 }, { 251, 1 }, }} // 89
, { "CS2_023", 7, 11, (void *)0, (void *)0, "Arcane Intellect", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 4 }, { 48, 3 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 90
, { "CS2_077", 7, 11, (void *)0, (void *)0, "Sprint", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 7 }, { 48, 7 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 91
, { "CS2_026", 7, 13, (void *)0, (void *)0, "Shiva's Guard", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 4 }, { 48, 3 }, { 47, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 208, 1 }, { 268, 2 }, { 251, 1 }, }} // 92
, { "CS2_026", 7, 13, (void *)0, (void *)0, "Shiva's Guard", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 4 }, { 48, 2 }, { 47, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 208, 1 }, { 268, 2 }, { 251, 1 }, }} // 92
, { "EX1_400", 7, 11, (void *)0, (void *)0, "Counter Helix", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 10 }, { 48, 0 }, { 47, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 93
, { "CS1_112", 7, 10, (void *)0, (void *)0, "Mekansm", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 6 }, { 48, 4 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 5 }, }} // 94
, { "CS2_122e", 8, 3, (void *)0, (void *)0, "Enhanced", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 95
@@ -104,35 +104,34 @@ struct ent_s entities[MAX_ENTITIES] = {{ "GAME_ENTITY", 11, 6, (void *)0, (void
, { "CS2_088", 7, 11, (void *)0, (void *)0, "Omniknight", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 4 }, { 199, 5 }, { 48, 2 }, { 47, 1 }, { 45, 17 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 251, 5 }, }} // 101
, { "EX1_593", 7, 9, (void *)0, (void *)0, "Phantom Assassin", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 4 }, { 48, 4 }, { 47, 4 }, { 45, 2 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, }} // 102
, { "EX1_011", 7, 10, (void *)0, (void *)0, "Witch Doctor", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 1 }, { 203, 2 }, { 202, 4 }, { 48, 1 }, { 47, 2 }, { 45, 1 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 251, 6 }, }} // 103
, { "CS2_042", 7, 11, (void *)0, (void *)0, "Fire Elemental", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 4 }, { 199, 8 }, { 48, 6 }, { 47, 6 }, { 45, 5 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 251, 3 }, }} // 104
, { "CS2_226", 7, 12, (void *)0, (void *)0, "Legion Commander", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_226e", {{ 201, 1 }, { 203, 4 }, { 202, 4 }, { 48, 5 }, { 47, 4 }, { 45, 4 }, { 331, 0 }, { 330, 0 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 105
, { "CS2_226e", 8, 4, (void *)0, (void *)0, "Frostwolf Banner", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 183, 2 }, { 202, 6 }, { 331, 1 }, { 330, 1 }, }} // 106
, { "EX1_306", 7, 13, (void *)0, (void *)0, "Queen of Pain", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 15 }, { 203, 2 }, { 202, 4 }, { 199, 9 }, { 48, 3 }, { 47, 4 }, { 45, 3 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 107
, { "EX1_581", 7, 10, (void *)0, (void *)0, "Sap", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 7 }, { 48, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, }} // 108
, { "CS1_113e", 8, 3, (void *)0, (void *)0, "Mind Control E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 109
, { "NEW1_011", 8, 11, (void *)0, "CS2_108", "Mogul Khan, Axe", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 203, 5 }, { 202, 4 }, { 199, 10 }, { 48, 3 }, { 47, 2 }, { 197, 0 }, { 45, 20 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, }} // 110
, { "CS2_171", 7, 12, (void *)0, (void *)0, "Stonetusk Boar", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 1 }, { 47, 1 }, { 197, 0 }, { 45, 1 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 6 }, }} // 111
, { "CS2_065", 7, 13, "OG_101", "EX1_312", "Enigma", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 15 }, { 203, 5 }, { 202, 4 }, { 199, 9 }, { 48, 2 }, { 47, 1 }, { 45, 15 }, { 190, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 9 }, }} // 112
, { "EX1_565o", 8, 3, (void *)0, (void *)0, "Flametongue", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 113
, { "EX1_506a", 8, 9, (void *)0, (void *)0, "Murloc Scout", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 14 }, { 203, 1 }, { 202, 4 }, { 48, 0 }, { 47, 1 }, { 45, 1 }, { 183, 2 }, { 251, 1 }, }} // 114
, { "CS2_237", 7, 12, (void *)0, (void *)0, "Vulture", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 1 }, { 202, 4 }, { 199, 3 }, { 48, 1 }, { 47, 1 }, { 45, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 32, 1 }, }} // 115
, { "CS2_boar", 8, 11, (void *)0, (void *)0, "Boar", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 20 }, { 203, 1 }, { 202, 4 }, { 48, 1 }, { 47, 1 }, { 45, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 251, 1 }, }} // 116
, { "CS2_119", 7, 8, (void *)0, (void *)0, "Oasis Snapjaw", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 4 }, { 47, 2 }, { 45, 7 }, { 183, 2 }, { 321, 1 }, }} // 117
, { "CS2_172", 7, 11, (void *)0, (void *)0, "Bloodfen Raptor", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 1 }, { 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 2 }, { 47, 3 }, { 45, 2 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 118
, { "CS2_118", 7, 9, (void *)0, "EX1_303", "Shadow Fiend", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 203, 5 }, { 202, 4 }, { 48, 2 }, { 47, 1 }, { 45, 14 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, }} // 119
, { "CS2_231", 7, 8, (void *)0, (void *)0, "Wisp", {{0, 0, 0, 0, 0, 0, 0, 0}}, "NAX12_04e", {{ 201, 3 }, { 203, 1 }, { 202, 4 }, { 48, 2 }, { 47, 0 }, { 45, 2 }, { 183, 3 }, { 251, 7 }, }} // 120
, { "CS2_201", 7, 8, (void *)0, (void *)0, "Core Hound", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 1 }, { 202, 4 }, { 48, 7 }, { 47, 9 }, { 45, 5 }, { 183, 2 }, { 321, 1 }, }} // 121
, { "CS2_168", 7, 10, (void *)0, (void *)0, "Murloc Raider", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 2 }, { 200, 14 }, { 203, 2 }, { 202, 4 }, { 48, 1 }, { 47, 2 }, { 45, 1 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 122
, { "CS2_120", 7, 8, (void *)0, (void *)0, "River Crocolisk", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 2 }, { 47, 2 }, { 45, 3 }, { 183, 2 }, { 321, 1 }, }} // 123
, { "CS2_200", 7, 7, (void *)0, (void *)0, "Boulderfist Ogre", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 203, 2 }, { 202, 4 }, { 48, 6 }, { 47, 6 }, { 45, 7 }, { 183, 2 }, { 321, 1 }, }} // 124
, { "CS2_182", 7, 12, (void *)0, (void *)0, "Chillwind Yeti", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 4 }, { 48, 4 }, { 47, 4 }, { 45, 5 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 6 }, }} // 125
, { "CS2_034", 7, 7, (void *)0, (void *)0, "Fireblast", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 48, 2 }, { 49, 1 }, { 47, 1 }, { 202, 10 }, }} // 126
, { "CS1h_001", 8, 7, (void *)0, (void *)0, "Lesser Heal", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 10 }, { 199, 6 }, { 48, 2 }, { 183, 2 }, { 251, 1 }, }} // 127
, { "CS2_101", 7, 6, (void *)0, (void *)0, "Reinforce", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 10 }, { 48, 2 }, { 49, 1 }, { 12, 1 }, }} // 128
, { "CS2_083b", 8, 6, (void *)0, (void *)0, "Dagger Mastery", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 10 }, { 48, 2 }, { 49, 1 }, { 12, 1 }, }} // 129
, { "CS2_097", 7, 13, (void *)0, (void *)0, "Divine Rapier", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 7 }, { 199, 5 }, { 48, 5 }, { 47, 8 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 187, 1 }, { 32, 1 }, { 251, 6 }, }} // 130
, { "MANA_CARD", 9, 3, (void *)0, (void *)0, "Empty card", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 263, 5 }, { 12, 1 }, { 49, 3 }, }} // 131
, { "NO_CARD", 7, 1, (void *)0, (void *)0, "No Card", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 49, 2 }, }} // 132
, { "CS2_226", 7, 12, (void *)0, (void *)0, "Legion Commander", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_226e", {{ 201, 1 }, { 203, 4 }, { 202, 4 }, { 48, 5 }, { 47, 4 }, { 45, 4 }, { 331, 0 }, { 330, 0 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 104
, { "CS2_226e", 8, 4, (void *)0, (void *)0, "Frostwolf Banner", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 183, 2 }, { 202, 6 }, { 331, 1 }, { 330, 1 }, }} // 105
, { "EX1_306", 7, 13, (void *)0, (void *)0, "Queen of Pain", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 15 }, { 203, 2 }, { 202, 4 }, { 199, 9 }, { 48, 3 }, { 47, 3 }, { 45, 5 }, { 218, 1 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 106
, { "EX1_581", 7, 10, (void *)0, (void *)0, "Sap", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 7 }, { 48, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, }} // 107
, { "CS1_113e", 8, 3, (void *)0, (void *)0, "Mind Control E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 108
, { "NEW1_011", 8, 11, (void *)0, "CS2_108", "Mogul Khan, Axe", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 203, 5 }, { 202, 4 }, { 199, 10 }, { 48, 3 }, { 47, 2 }, { 197, 0 }, { 45, 20 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, }} // 109
, { "CS2_171", 7, 12, (void *)0, (void *)0, "Stonetusk Boar", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 1 }, { 47, 1 }, { 197, 0 }, { 45, 1 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 6 }, }} // 110
, { "CS2_065", 7, 13, "OG_101", "EX1_312", "Enigma", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 15 }, { 203, 5 }, { 202, 4 }, { 199, 9 }, { 48, 2 }, { 47, 1 }, { 45, 15 }, { 190, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 9 }, }} // 111
, { "EX1_565o", 8, 3, (void *)0, (void *)0, "Flametongue", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 112
, { "EX1_506a", 8, 9, (void *)0, (void *)0, "Murloc Scout", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 14 }, { 203, 1 }, { 202, 4 }, { 48, 0 }, { 47, 1 }, { 45, 1 }, { 183, 2 }, { 251, 1 }, }} // 113
, { "CS2_237", 7, 12, (void *)0, (void *)0, "Vulture", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 1 }, { 202, 4 }, { 199, 3 }, { 48, 1 }, { 47, 1 }, { 45, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 32, 1 }, }} // 114
, { "CS2_boar", 8, 11, (void *)0, (void *)0, "Boar", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 20 }, { 203, 1 }, { 202, 4 }, { 48, 1 }, { 47, 1 }, { 45, 1 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 251, 1 }, }} // 115
, { "CS2_119", 7, 8, (void *)0, (void *)0, "Oasis Snapjaw", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 4 }, { 47, 2 }, { 45, 7 }, { 183, 2 }, { 321, 1 }, }} // 116
, { "CS2_172", 7, 11, (void *)0, (void *)0, "Bloodfen Raptor", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 1 }, { 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 2 }, { 47, 3 }, { 45, 2 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 117
, { "CS2_118", 7, 9, (void *)0, "EX1_303", "Shadow Fiend", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 203, 5 }, { 202, 4 }, { 48, 2 }, { 47, 1 }, { 45, 14 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, }} // 118
, { "CS2_231", 7, 8, (void *)0, (void *)0, "Wisp", {{0, 0, 0, 0, 0, 0, 0, 0}}, "NAX12_04e", {{ 201, 3 }, { 203, 1 }, { 202, 4 }, { 48, 2 }, { 47, 0 }, { 45, 2 }, { 183, 3 }, { 251, 7 }, }} // 119
, { "CS2_201", 7, 8, (void *)0, (void *)0, "Core Hound", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 1 }, { 202, 4 }, { 48, 7 }, { 47, 9 }, { 45, 5 }, { 183, 2 }, { 321, 1 }, }} // 120
, { "CS2_168", 7, 10, (void *)0, (void *)0, "Murloc Raider", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 2 }, { 200, 14 }, { 203, 2 }, { 202, 4 }, { 48, 1 }, { 47, 2 }, { 45, 1 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 121
, { "CS2_120", 7, 8, (void *)0, (void *)0, "River Crocolisk", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 200, 20 }, { 203, 2 }, { 202, 4 }, { 48, 2 }, { 47, 2 }, { 45, 3 }, { 183, 2 }, { 321, 1 }, }} // 122
, { "CS2_200", 7, 7, (void *)0, (void *)0, "Boulderfist Ogre", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 203, 2 }, { 202, 4 }, { 48, 6 }, { 47, 6 }, { 45, 7 }, { 183, 2 }, { 321, 1 }, }} // 123
, { "CS2_182", 7, 12, (void *)0, (void *)0, "Chillwind Yeti", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 4 }, { 48, 4 }, { 47, 4 }, { 45, 5 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 6 }, }} // 124
, { "CS2_034", 7, 7, (void *)0, (void *)0, "Fireblast", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 48, 2 }, { 49, 1 }, { 47, 1 }, { 202, 10 }, }} // 125
, { "CS1h_001", 8, 7, (void *)0, (void *)0, "Lesser Heal", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 10 }, { 199, 6 }, { 48, 2 }, { 183, 2 }, { 251, 1 }, }} // 126
, { "CS2_101", 7, 6, (void *)0, (void *)0, "Reinforce", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 10 }, { 48, 2 }, { 49, 1 }, { 12, 1 }, }} // 127
, { "CS2_083b", 8, 6, (void *)0, (void *)0, "Dagger Mastery", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 10 }, { 48, 2 }, { 49, 1 }, { 12, 1 }, }} // 128
, { "CS2_097", 7, 13, (void *)0, (void *)0, "Divine Rapier", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 7 }, { 199, 5 }, { 48, 5 }, { 47, 8 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 187, 1 }, { 32, 1 }, { 251, 6 }, }} // 129
, { "MANA_CARD", 9, 3, (void *)0, (void *)0, "Empty card", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 263, 5 }, { 12, 1 }, { 49, 3 }, }} // 130
, { "NO_CARD", 7, 1, (void *)0, (void *)0, "No Card", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 49, 2 }, }} // 131
, };
void entities_init() {
@@ -180,27 +179,27 @@ void entities_init() {
flag(&entities[98].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[99].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[100].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[106].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[109].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[113].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[114].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
flag(&entities[116].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
flag(&entities[126].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[126].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[126].flags, CARD_SPELL, FLAG_SET);
flag(&entities[126].flags, CARD_HP_SPELL_DAMAGE, FLAG_SET);
flag(&entities[105].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[108].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[112].flags, CARD_ATTACHMENT, FLAG_SET);
flag(&entities[113].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
flag(&entities[115].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
flag(&entities[125].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[125].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[125].flags, CARD_SPELL, FLAG_SET);
flag(&entities[125].flags, CARD_HP_SPELL_DAMAGE, FLAG_SET);
flag(&entities[127].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[127].flags, CARD_SPELL, FLAG_SET);
flag(&entities[127].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[127].flags, CARD_HP_REINFORCE, FLAG_SET);
flag(&entities[127].flags, CARD_SUMMON, FLAG_SET);
flag(&entities[128].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[128].flags, CARD_SPELL, FLAG_SET);
flag(&entities[128].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[128].flags, CARD_HP_REINFORCE, FLAG_SET);
flag(&entities[128].flags, CARD_HP_DAGGERMASTERY, FLAG_SET);
flag(&entities[128].flags, CARD_SUMMON, FLAG_SET);
flag(&entities[129].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[129].flags, CARD_SPELL, FLAG_SET);
flag(&entities[129].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[129].flags, CARD_HP_DAGGERMASTERY, FLAG_SET);
flag(&entities[129].flags, CARD_SUMMON, FLAG_SET);
flag(&entities[130].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
flag(&entities[131].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
flag(&entities[132].flags, CARD_UNCOLLECTIBLE, FLAG_SET);
}
const char *race_beast[MAX_BEASTS] = {
};
+83 -90
View File
@@ -68,20 +68,20 @@ void entities_init2() {
flag(&entities[31].flags, CARD_AOE, FLAG_SET);
flag(&entities[31].flags, spell_aoe_EX1_303_FLAG, FLAG_SET);
flag(&entities[31].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[130].flags, CARD_SPELL, FLAG_SET);
flag(&entities[130].flags, CARD_AOE, FLAG_SET);
flag(&entities[130].flags, CARD_WEAPON, FLAG_SET);
flag(&entities[130].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[130].flags, weapon_CS2_097_FLAG, FLAG_SET);
flag(&entities[130].flags, idle_CS2_097_FLAG, FLAG_SET);
flag(&entities[130].flags, weapon_destroyed_CS2_097_FLAG, FLAG_SET);
flag(&entities[130].flags, weapon_attack_CS2_097_FLAG, FLAG_SET);
flag(&entities[130].flags, onboard_CS2_097_FLAG, FLAG_SET);
flag(&entities[127].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[127].flags, CARD_SPELL, FLAG_SET);
flag(&entities[127].flags, spell_CS1h_001_FLAG, FLAG_SET);
flag(&entities[127].flags, CARD_TARGET_ALL, FLAG_SET);
flag(&entities[127].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[129].flags, CARD_SPELL, FLAG_SET);
flag(&entities[129].flags, CARD_AOE, FLAG_SET);
flag(&entities[129].flags, CARD_WEAPON, FLAG_SET);
flag(&entities[129].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[129].flags, weapon_CS2_097_FLAG, FLAG_SET);
flag(&entities[129].flags, idle_CS2_097_FLAG, FLAG_SET);
flag(&entities[129].flags, weapon_destroyed_CS2_097_FLAG, FLAG_SET);
flag(&entities[129].flags, weapon_attack_CS2_097_FLAG, FLAG_SET);
flag(&entities[129].flags, onboard_CS2_097_FLAG, FLAG_SET);
flag(&entities[126].flags, CARD_HEROPOWER, FLAG_SET);
flag(&entities[126].flags, CARD_SPELL, FLAG_SET);
flag(&entities[126].flags, spell_CS1h_001_FLAG, FLAG_SET);
flag(&entities[126].flags, CARD_TARGET_ALL, FLAG_SET);
flag(&entities[126].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[46].flags, destroyed_NEW1_036_FLAG, FLAG_SET);
flag(&entities[46].flags, CARD_BUFF, FLAG_SET);
flag(&entities[46].flags, CARD_SPELL, FLAG_SET);
@@ -209,60 +209,53 @@ void entities_init2() {
flag(&entities[33].flags, CARD_MINION, FLAG_SET);
flag(&entities[33].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[33].flags, attack_AT_023_FLAG, FLAG_SET);
flag(&entities[122].flags, CARD_MINION, FLAG_SET);
flag(&entities[122].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[122].flags, attack_CS2_168_FLAG, FLAG_SET);
flag(&entities[121].flags, CARD_MINION, FLAG_SET);
flag(&entities[121].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[121].flags, attack_CS2_201_FLAG, FLAG_SET);
flag(&entities[124].flags, CARD_MINION, FLAG_SET);
flag(&entities[124].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[124].flags, attack_CS2_200_FLAG, FLAG_SET);
flag(&entities[117].flags, CARD_MINION, FLAG_SET);
flag(&entities[117].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[117].flags, attack_CS2_119_FLAG, FLAG_SET);
flag(&entities[118].flags, CARD_MINION, FLAG_SET);
flag(&entities[118].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[118].flags, attack_CS2_172_FLAG, FLAG_SET);
flag(&entities[111].flags, CARD_MINION, FLAG_SET);
flag(&entities[111].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[111].flags, attack_CS2_171_FLAG, FLAG_SET);
flag(&entities[125].flags, CARD_MINION, FLAG_SET);
flag(&entities[125].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[125].flags, attack_CS2_182_FLAG, FLAG_SET);
flag(&entities[121].flags, attack_CS2_168_FLAG, FLAG_SET);
flag(&entities[120].flags, CARD_MINION, FLAG_SET);
flag(&entities[120].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[120].flags, attack_CS2_201_FLAG, FLAG_SET);
flag(&entities[123].flags, CARD_MINION, FLAG_SET);
flag(&entities[123].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[123].flags, attack_CS2_120_FLAG, FLAG_SET);
flag(&entities[114].flags, CARD_MINION, FLAG_SET);
flag(&entities[114].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[114].flags, attack_EX1_506a_FLAG, FLAG_SET);
flag(&entities[104].flags, CARD_MINION, FLAG_SET);
flag(&entities[104].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[104].flags, attack_CS2_042_FLAG, FLAG_SET);
flag(&entities[104].flags, CARD_BATTLECRY, FLAG_SET);
flag(&entities[104].flags, battlecry_CS2_042_FLAG, FLAG_SET);
flag(&entities[104].flags, CARD_TARGET_BOARD, FLAG_SET);
flag(&entities[104].flags, CARD_TARGETING_BC, FLAG_SET);
flag(&entities[116].flags, CARD_TAUNT, FLAG_SET);
flag(&entities[123].flags, attack_CS2_200_FLAG, FLAG_SET);
flag(&entities[116].flags, CARD_MINION, FLAG_SET);
flag(&entities[116].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[116].flags, attack_CS2_boar_FLAG, FLAG_SET);
flag(&entities[116].flags, attack_CS2_119_FLAG, FLAG_SET);
flag(&entities[117].flags, CARD_MINION, FLAG_SET);
flag(&entities[117].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[117].flags, attack_CS2_172_FLAG, FLAG_SET);
flag(&entities[110].flags, CARD_MINION, FLAG_SET);
flag(&entities[110].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[110].flags, attack_CS2_171_FLAG, FLAG_SET);
flag(&entities[124].flags, CARD_MINION, FLAG_SET);
flag(&entities[124].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[124].flags, attack_CS2_182_FLAG, FLAG_SET);
flag(&entities[122].flags, CARD_MINION, FLAG_SET);
flag(&entities[122].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[122].flags, attack_CS2_120_FLAG, FLAG_SET);
flag(&entities[113].flags, CARD_MINION, FLAG_SET);
flag(&entities[113].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[113].flags, attack_EX1_506a_FLAG, FLAG_SET);
flag(&entities[115].flags, CARD_TAUNT, FLAG_SET);
flag(&entities[115].flags, CARD_MINION, FLAG_SET);
flag(&entities[115].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[115].flags, attack_CS2_237_FLAG, FLAG_SET);
flag(&entities[115].flags, attack_CS2_boar_FLAG, FLAG_SET);
flag(&entities[114].flags, CARD_MINION, FLAG_SET);
flag(&entities[114].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[114].flags, attack_CS2_237_FLAG, FLAG_SET);
flag(&entities[12].flags, CARD_MINION, FLAG_SET);
flag(&entities[12].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[12].flags, attack_LOE_077_FLAG, FLAG_SET);
flag(&entities[12].flags, CARD_BATTLECRY, FLAG_SET);
flag(&entities[12].flags, battlecry_LOE_077_FLAG, FLAG_SET);
flag(&entities[12].flags, CARD_NONTARGET_BC, FLAG_SET);
flag(&entities[119].flags, destroyed_CS2_118_FLAG, FLAG_SET);
flag(&entities[119].flags, defender_CS2_118_FLAG, FLAG_SET);
flag(&entities[119].flags, CARD_MINION, FLAG_SET);
flag(&entities[119].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[119].flags, attack_CS2_118_FLAG, FLAG_SET);
flag(&entities[119].flags, onboard_CS2_118_FLAG, FLAG_SET);
flag(&entities[119].flags, CARD_BOSS, FLAG_SET);
flag(&entities[118].flags, destroyed_CS2_118_FLAG, FLAG_SET);
flag(&entities[118].flags, defender_CS2_118_FLAG, FLAG_SET);
flag(&entities[118].flags, CARD_MINION, FLAG_SET);
flag(&entities[118].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[118].flags, attack_CS2_118_FLAG, FLAG_SET);
flag(&entities[118].flags, onboard_CS2_118_FLAG, FLAG_SET);
flag(&entities[118].flags, CARD_BOSS, FLAG_SET);
flag(&entities[16].flags, destroyed_AT_128_FLAG, FLAG_SET);
flag(&entities[16].flags, CARD_MINION, FLAG_SET);
flag(&entities[16].flags, CARD_TARGETING, FLAG_SET);
@@ -299,12 +292,12 @@ void entities_init2() {
flag(&entities[52].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[52].flags, attack_EX1_383_FLAG, FLAG_SET);
flag(&entities[52].flags, onboard_EX1_383_FLAG, FLAG_SET);
flag(&entities[112].flags, destroyed_CS2_065_FLAG, FLAG_SET);
flag(&entities[112].flags, CARD_BOSS, FLAG_SET);
flag(&entities[112].flags, CARD_MINION, FLAG_SET);
flag(&entities[112].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[112].flags, attack_CS2_065_FLAG, FLAG_SET);
flag(&entities[112].flags, onboard_CS2_065_FLAG, FLAG_SET);
flag(&entities[111].flags, destroyed_CS2_065_FLAG, FLAG_SET);
flag(&entities[111].flags, CARD_BOSS, FLAG_SET);
flag(&entities[111].flags, CARD_MINION, FLAG_SET);
flag(&entities[111].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[111].flags, attack_CS2_065_FLAG, FLAG_SET);
flag(&entities[111].flags, onboard_CS2_065_FLAG, FLAG_SET);
flag(&entities[42].flags, destroyed_AT_018_FLAG, FLAG_SET);
flag(&entities[42].flags, CARD_SPELLPOWER, FLAG_SET);
flag(&entities[42].flags, CARD_BOSS, FLAG_SET);
@@ -325,27 +318,27 @@ void entities_init2() {
flag(&entities[45].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[45].flags, attack_EX1_559_FLAG, FLAG_SET);
flag(&entities[45].flags, onboard_EX1_559_FLAG, FLAG_SET);
flag(&entities[110].flags, destroyed_NEW1_011_FLAG, FLAG_SET);
flag(&entities[110].flags, defender_NEW1_011_FLAG, FLAG_SET);
flag(&entities[110].flags, CARD_MINION, FLAG_SET);
flag(&entities[110].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[110].flags, attack_NEW1_011_FLAG, FLAG_SET);
flag(&entities[110].flags, onboard_NEW1_011_FLAG, FLAG_SET);
flag(&entities[110].flags, CARD_BOSS, FLAG_SET);
flag(&entities[105].flags, CARD_MINION, FLAG_SET);
flag(&entities[105].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[105].flags, attack_CS2_226_FLAG, FLAG_SET);
flag(&entities[105].flags, CARD_BATTLECRY, FLAG_SET);
flag(&entities[105].flags, battlecry_CS2_226_FLAG, FLAG_SET);
flag(&entities[105].flags, CARD_NONTARGET_BC, FLAG_SET);
flag(&entities[109].flags, destroyed_NEW1_011_FLAG, FLAG_SET);
flag(&entities[109].flags, defender_NEW1_011_FLAG, FLAG_SET);
flag(&entities[109].flags, CARD_MINION, FLAG_SET);
flag(&entities[109].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[109].flags, attack_NEW1_011_FLAG, FLAG_SET);
flag(&entities[109].flags, onboard_NEW1_011_FLAG, FLAG_SET);
flag(&entities[109].flags, CARD_BOSS, FLAG_SET);
flag(&entities[104].flags, CARD_MINION, FLAG_SET);
flag(&entities[104].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[104].flags, attack_CS2_226_FLAG, FLAG_SET);
flag(&entities[104].flags, CARD_BATTLECRY, FLAG_SET);
flag(&entities[104].flags, battlecry_CS2_226_FLAG, FLAG_SET);
flag(&entities[104].flags, CARD_NONTARGET_BC, FLAG_SET);
flag(&entities[29].flags, CARD_MINION, FLAG_SET);
flag(&entities[29].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[29].flags, attack_EX1_009_FLAG, FLAG_SET);
flag(&entities[108].flags, CARD_BUFF, FLAG_SET);
flag(&entities[108].flags, CARD_SPELL, FLAG_SET);
flag(&entities[108].flags, buff_EX1_581_FLAG, FLAG_SET);
flag(&entities[108].flags, CARD_TARGET_MINIONS, FLAG_SET);
flag(&entities[108].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[107].flags, CARD_BUFF, FLAG_SET);
flag(&entities[107].flags, CARD_SPELL, FLAG_SET);
flag(&entities[107].flags, buff_EX1_581_FLAG, FLAG_SET);
flag(&entities[107].flags, CARD_TARGET_MINIONS, FLAG_SET);
flag(&entities[107].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[11].flags, CARD_MINION, FLAG_SET);
flag(&entities[11].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[11].flags, attack_EX1_049_FLAG, FLAG_SET);
@@ -378,22 +371,22 @@ void entities_init2() {
flag(&entities[92].flags, CARD_AOE, FLAG_SET);
flag(&entities[92].flags, spell_aoe_CS2_026_FLAG, FLAG_SET);
flag(&entities[92].flags, CARD_NONTARGET, FLAG_SET);
flag(&entities[107].flags, CARD_MINION, FLAG_SET);
flag(&entities[107].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[107].flags, attack_EX1_306_FLAG, FLAG_SET);
flag(&entities[107].flags, CARD_BATTLECRY, FLAG_SET);
flag(&entities[107].flags, battlecry_EX1_306_FLAG, FLAG_SET);
flag(&entities[107].flags, CARD_NONTARGET_BC, FLAG_SET);
flag(&entities[106].flags, CARD_MINION, FLAG_SET);
flag(&entities[106].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[106].flags, attack_EX1_306_FLAG, FLAG_SET);
flag(&entities[106].flags, CARD_BATTLECRY, FLAG_SET);
flag(&entities[106].flags, battlecry_EX1_306_FLAG, FLAG_SET);
flag(&entities[106].flags, CARD_NONTARGET_BC, FLAG_SET);
flag(&entities[96].flags, destroyed_CS2_222_FLAG, FLAG_SET);
flag(&entities[96].flags, CARD_MINION, FLAG_SET);
flag(&entities[96].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[96].flags, attack_CS2_222_FLAG, FLAG_SET);
flag(&entities[96].flags, idle_CS2_222_FLAG, FLAG_SET);
flag(&entities[96].flags, onboard_CS2_222_FLAG, FLAG_SET);
flag(&entities[120].flags, destroyed_CS2_231_FLAG, FLAG_SET);
flag(&entities[120].flags, CARD_MINION, FLAG_SET);
flag(&entities[120].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[120].flags, attack_CS2_231_FLAG, FLAG_SET);
flag(&entities[120].flags, idle_CS2_231_FLAG, FLAG_SET);
flag(&entities[120].flags, onboard_CS2_231_FLAG, FLAG_SET);
flag(&entities[119].flags, destroyed_CS2_231_FLAG, FLAG_SET);
flag(&entities[119].flags, CARD_MINION, FLAG_SET);
flag(&entities[119].flags, CARD_TARGETING, FLAG_SET);
flag(&entities[119].flags, attack_CS2_231_FLAG, FLAG_SET);
flag(&entities[119].flags, idle_CS2_231_FLAG, FLAG_SET);
flag(&entities[119].flags, onboard_CS2_231_FLAG, FLAG_SET);
}
Binary file not shown.
+39 -32
View File
@@ -15,11 +15,11 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdarg.h>
#include <memory.h>
#include <malloc.h>
#include <ev.h>
#include <malloc.h>
#include <memory.h>
#include <stdarg.h>
#include <stdio.h>
#include <hmbase.h>
@@ -30,51 +30,58 @@ struct playerlist_s {
struct playerlist_s *next;
};
static struct playerlist_s *queue = NULL;
static int gamehandle = 0;
struct playerlist_s *queue = NULL;
struct playerlist_s *tail = NULL; // Pointer to the last element
void mm_push(struct conn_client_s *c)
{
struct playerlist_s *p;
p = malloc(sizeof(*p));
// Add a player to the matchmaking queue
void mm_push(struct conn_client_s *c) {
struct playerlist_s *p = malloc(sizeof(*p));
p->player = c;
p->next = queue;
p->next = NULL;
if (queue == NULL) {
queue = p;
} else {
tail->next = p;
}
tail = p; // Update the tail pointer
}
struct conn_client_s *mm_pop()
{
struct conn_client_s *c;
struct playerlist_s *p;
// Remove a player from the matchmaking queue
struct conn_client_s *mm_pop() {
if (queue == NULL)
return NULL;
p = queue;
c = queue->player;
struct playerlist_s *temp = queue;
struct conn_client_s *c = temp->player;
queue = queue->next;
free(p);
if (queue == NULL) {
tail = NULL; // If the queue is empty after pop, reset the tail pointer
}
free(temp);
return c;
}
int matchmaking(struct conn_client_s *player1)
{
struct conn_client_s *player2;
// Matchmaking
int matchmaking(struct conn_client_s *player) {
// Add the player to the queue
mm_push(player);
// first player
if(queue == NULL) {
mm_push(player1);
return 0;
}
while (queue != NULL && queue->next != NULL) {
struct conn_client_s *player1 = mm_pop();
struct conn_client_s *player2 = mm_pop();
player2 = mm_pop();
if(player1 && player2) {
if (player1 && player2) {
start_game(player1, player2, gamehandle++);
return 0;
} else {
// This block should never be reached in this setup
return -1;
}
}
return -1;
return 0;
}
+1 -1
View File
@@ -9,7 +9,7 @@ NGX_PREFIX=
NGX_SBIN_PATH=
NGX_CONF_PREFIX=
NGX_CONF_PATH=
NGX_ERROR_LOG_PATH=
NGX_ERROR_LOG_PATH=/app/hm_log/hm_web_nginx_$(date +"%Y%m%d_%H%M%S").log
NGX_PID_PATH=
NGX_LOCK_PATH=
NGX_USER=
+40 -76
View File
@@ -34,12 +34,44 @@ http {
server {
listen 80;
server_name localhost;
server_name hsmod.xyz www.hsmod.xyz; # Change to your actual domain
#charset koi8-r;
location / {
return 301 https://$host$request_uri;
}
}
#access_log logs/host.access.log main;
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
server {
listen 443 ssl;
server_name hsmod.xyx www.hsmod.xyz; # Change to your actual domain
ssl_certificate /app/letsencrypt/fullchain.pem; # Path to fullchain.pem
ssl_certificate_key /app/letsencrypt/privkey.pem; # Path to privkey.pem
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_dhparam /app/letsencrypt/ssl-dhparams.pem;
# FastCGI settings retained from your original config
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
@@ -58,84 +90,16 @@ http {
fastcgi_pass 127.0.0.1:9002;
}
# Setup for serving static files
location /static/ {
root /usr/local/web;
if (-f $request_filename) {
rewrite ^/static/(.*)$ /static/$1 break;
root /app/hm_nginx/../hm_web/;
try_files $uri $uri/ =404;
}
}
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
# Error pages configuration
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
}
+2 -2
View File
@@ -1090,7 +1090,7 @@ objs/nginx.8: man/nginx.8 objs/ngx_auto_config.h
sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
-e "s|%%ERROR_LOG_PATH%%|/app/hm_log/hm_web_nginx_20240430_165947.log|" \
< man/nginx.8 > $@
install: objs/nginx
@@ -1130,4 +1130,4 @@ install: objs/nginx
test -d '$(DESTDIR)/usr/local/nginx/html' || cp -R html '$(DESTDIR)/usr/local/nginx'
test -d '$(DESTDIR)/usr/local/nginx/logs' || mkdir -p '$(DESTDIR)/usr/local/nginx/logs'
test -d '$(DESTDIR)/app/hm_log' || mkdir -p '$(DESTDIR)/app/hm_log'
+5 -5
View File
@@ -159,7 +159,7 @@ cc -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -o objs/autotest objs/autotest.c
----------------------------------------
checking for crypt()
/tmp/ccBjPW1g.o: In function `main':
/tmp/ccI0ONuh.o: In function `main':
autotest.c:(.text+0xf): undefined reference to `crypt'
collect2: error: ld returned 1 exit status
----------
@@ -273,7 +273,7 @@ checking for statvfs()
----------------------------------------
checking for dlopen()
/tmp/ccRfQzDW.o: In function `main':
/tmp/ccqZfqrJ.o: In function `main':
autotest.c:(.text+0xf): undefined reference to `dlopen'
collect2: error: ld returned 1 exit status
----------
@@ -436,7 +436,7 @@ objs/autotest.c: In function 'main':
objs/autotest.c:7:5: warning: implicit declaration of function 'setproctitle' [-Wimplicit-function-declaration]
setproctitle("test");;
^
/tmp/ccjBplGI.o: In function `main':
/tmp/ccmOYxie.o: In function `main':
autotest.c:(.text+0xf): undefined reference to `setproctitle'
collect2: error: ld returned 1 exit status
----------
@@ -465,7 +465,7 @@ checking for pwrite()
----------------------------------------
checking for sys_nerr
/tmp/ccWsrzXf.o: In function `main':
/tmp/cccCRQau.o: In function `main':
autotest.c:(.text+0x6): warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
135
----------------------------------------
@@ -495,7 +495,7 @@ checking for System V shared memory
----------------------------------------
checking for POSIX semaphores
/tmp/cc19ydxX.o: In function `main':
/tmp/cc19cGD0.o: In function `main':
autotest.c:(.text+0x29): undefined reference to `sem_init'
autotest.c:(.text+0x41): undefined reference to `sem_destroy'
collect2: error: ld returned 1 exit status
Binary file not shown.
+1 -1
View File
@@ -166,7 +166,7 @@ Contains the process ID of
The contents of this file are not sensitive, so it can be world-readable.
.It Pa /usr/local/nginx/conf/nginx.conf
The main configuration file.
.It Pa /usr/local/nginx/logs/error.log
.It Pa /app/hm_log/hm_web_nginx_20240430_165947.log
Error log file.
.El
.Sh EXIT STATUS
+1 -1
View File
@@ -384,7 +384,7 @@
#ifndef NGX_ERROR_LOG_PATH
#define NGX_ERROR_LOG_PATH "logs/error.log"
#define NGX_ERROR_LOG_PATH "/app/hm_log/hm_web_nginx_20240430_165947.log"
#endif
+1
View File
@@ -0,0 +1 @@
{"cost":7,"type":"SPELL","texture":"CS2_032","id":"CS2_032","text":"Deal $4 damage to all enemy minions.","name":"Flamestrike","rarity":"FREE", "artist":"Zoltan Boros", "set":"CORE", "flavor":"asdf", "playRequirements":{"REQ_TARGET_TO_PLAY":0,"REQ_MINION_TARGET":0}, "collectible":true, "playerClass":"NEUTRAL", "howToEarnGolden":"Unlocked at Level 45.", "howToEarn":"Unlocked at Level 1." }
+20 -13
View File
@@ -1,18 +1,21 @@
var express = require('express');
var express = require("express");
var app = express();
var Sunwell = require('../sunwell');
var Sunwell = require("../sunwell");
var sunwell = new Sunwell({ bodyFontSize: 35 });
app.get('/', function(req, res) {
app.get("/", function(req, res) {
var width = 400;
var card_name = "";
var card_data = "";
var fs = require('fs');
var fs = require("fs");
var obj;
fs.readFile(process.cwd() + '/examples/carddata', 'utf8', function (err, data) {
fs.readFile(
process.cwd() + "/examples/carddata",
"utf8",
function(err, data) {
if (err) throw err;
obj = JSON.parse(data);
@@ -21,22 +24,26 @@ app.get('/', function(req, res) {
res.writeHead(200, {
//'Cache-Control': 'max-age=86400',
'Content-Type': 'image/png'
"Content-Type": "image/png",
});
res.write(buffer);
res.end();
fs.writeFile(process.cwd() + '/../hm_web/static/custom/' + obj['id'] + '.jpg', buffer, function(err) {
if(err) {
fs.writeFile(
process.cwd() + "/../hm_web/static/custom/" + obj["id"] + ".jpg",
buffer,
function(err) {
if (err) {
return console.log(err);
}
console.log("The file " + obj['id'] + " was saved!");
});
});
console.log("The file " + obj["id"] + " was saved!");
}
);
});
}
);
});
app.use(function(err, req, res, next) {
@@ -44,5 +51,5 @@ app.use(function(err, req, res, next) {
});
var listener = app.listen(process.env.PORT || 8081, function() {
console.log('Server listening on port', listener.address().port);
console.log("Server listening on port", listener.address().port);
});
+1 -1
View File
@@ -4,7 +4,7 @@
"description": "Canvas based renderer for Hearthstone cards.",
"main": "sunwell.js",
"scripts": {
"start": "node examples/server",
"start": "nodejs examples/server",
"test": "istanbul cover ./node_modules/mocha/bin/_mocha",
"coveralls": "cat ./coverage/lcov.info | coveralls && rm -rf ./coverage",
"postpublish": "git push && git push --tags"
+4 -5
View File
@@ -457,12 +457,11 @@ class deck:
elif(i[0] == '__name'):
names.append(i[1])
elif(i[0] == '__code'):
if(i[1].find("\"enabled") > -1):
enabled_pattern = r'enabled:(\d+)'
enabled_match = re.search(enabled_pattern, i[1])
if(enabled_match):
enabled = 1
if(i[1].find("\"enabled:2\"") > -1):
names.append(2)
else:
names.append(1)
names.append(int(enabled_match.group(1)))
if(i[1].find("\"boss\"") > -1):
names.append('boss')
else:
+731
View File
@@ -0,0 +1,731 @@
#!/bin/sh
# Game entity
name="Game Entity" card=GAME_ENTITY tags={10:85,20:1,49:1,198:4,202:1,204:2}
# Mana Card
name="Coin" card=GAME_005 tags={49:3,202:5,313:1}
# Player1
name="Player1" card=PLAYER1 tags={7:75,17:1,27:64,28:10,29:4,30:1,31:1,49:1,176:10,202:2,272:1,399:4}
# Player2
name="Player2" card=PLAYER2 tags={7:75,17:1,23:1,24:1,27:66,28:10,29:4,30:2,31:2,49:1,176:10,202:2,272:1,399:3}
# Power of the Horde
name="Kill Roshan" card=PRO_001c tags={183:11,202:5,48:30,330:0,331:0,} custom=1
# The Sentinel
name="The Sentinel" card=TB_SPT_Boss tags={183:18,202:3,47:0,45:30,380:39537,} custom=1
# The Scourge
name="The Scourge " card=LOEA04_01 tags={183:20,45:30,330:0,331:0,380:16231,202:3,} custom=1
# Enrage
name="Tether" card=NAX12_04e tags={183:12,202:6,330:0,331:0,338:1,} custom=1 flags=(CARD_ATTACHMENT)
# Lantern of Power
name="Grow" card=LOEA16_3e tags={183:20,202:6,330:0,331:0,} custom=1 flags=(CARD_ATTACHMENT)
# Lothar's Left Greave
name="Arcane Boots" card=LOEA16_9 tags={183:20,202:5,48:0,330:0,331:0,} custom=1
# Mountain Giant
name="Tiny" card=EX1_105 tags={183:3,202:4,201:3,203:5,48:1,47:0,45:1,251:6,321:1,} custom=1 attachment=LOEA16_3e
# Youthful Brewmaster
name="Youthful Brewmaster" card=EX1_049 tags={183:3,202:4,201:2,203:1,48:2,47:3,45:2,251:6,321:1,330:0,331:0,218:1,} custom=1
# Brann Bronzebeard
name="Karroch, the Beastmaster" card=LOE_077 tags={183:20,202:4,203:5,114:1,321:1,48:5,47:2,45:3,330:0,331:0,362:0,} custom=1
# Abomination
name="Pudge, the Butcher" card=EX1_097 tags={183:3,202:4,201:3,203:3,48:5,47:0,45:4,251:6,321:1,330:0,331:0,190:0,217:0,} custom=1
# Piloted Sky Golem
name="Boush, the Tinker" card=GVG_105 tags={183:13,321:1,48:3,202:4,203:4,47:1,45:2,200:17,330:0,331:0,217:1,} custom=1
# Icehowl
[AT_125]
# Skeleton
name="Skeleton" card=NAX4_03H tags={183:12,202:4,48:7,47:6,45:5,} custom=1
# Skeleton Knight
name="The Skeleton King" card=AT_128 tags={183:15,321:1,203:5,202:4,48:7,47:6,45:5,114:1,330:0,331:0,217:1,} custom=1
# Deathwing
name="Deathwing" card=NEW1_030 tags={183:3,203:5,202:4,48:10,47:12,45:12,200:24,114:1,321:1,330:0,331:0,218:1,} custom=1
# Treant
name="Treant" card=EX1_158t tags={183:3,202:4,201:3,199:2,251:1,47:1,45:2,48:1,330:0,331:0,} custom=1
# Velen's Chosen
name="Guardian Greaves" card=GVG_010 tags={183:13,203:1,202:5,48:0,199:6,321:1,330:0,331:0,} custom=1
# Cabalist's Tome
name="Arcane Books" card=OG_090 tags={183:21,321:1,203:4,202:5,48:0,199:4,330:0,331:0,} custom=1
# Seal of Champions
name="Black King Bar" card=AT_074 tags={183:15,321:1,203:1,202:5,48:2,199:5,330:0,331:0,} custom=1 attachment=AT_074e2
# Seal of Champions E
name="Magic Immunity" card=AT_074e2 tags={183:15,202:6,199:5,330:0,331:0,} custom=1 flags=(CARD_ATTACHMENT)
# Dagon
name="Dagon" card=BRMA11_3 tags={183:14,202:5,48:1,47:1,330:0,331:0,} custom=1
# Sparring Partner
[AT_069]
# Divine Rapier E
name="Divine Rapier" card=FP1_020e tags={183:12,202:6,199:5,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Desolator
name="Desolator" card=LOEA06_03 tags={183:20,202:5,48:2,330:0,331:0,} custom=1 attachment=LOEA06_03e
# Desolator E
name="Desolate" card=LOEA06_03e tags={183:20,202:6,330:0,331:0,} custom=1 flags=(CARD_ATTACHMENT)
# Rooted
name="Level 2" card=EX1_178ae tags={183:3,202:6,199:2,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Inner Rage
name="Satanic" card=EX1_607 tags={183:3,203:5,202:5,48:3,201:3,199:10,321:1,} custom=1 attachment=EX1_607e
# Angry Chicken
name="Courier" card=EX1_009 tags={321:1,183:3,203:3,202:4,48:1,47:2,45:1,330:0,331:0,200:20,212:1,} custom=1
# Repel
[LOEA16_20]
# Cursed Blade
name="Echo Sabre " card=LOE_118 tags={183:20,321:1,203:3,202:7,48:2,47:0,187:3,199:10,330:0,331:0,} custom=1
# Shadowflame
name="Requiem of Souls" card=EX1_303 tags={183:3,202:5,201:3,199:9,203:3,48:4,251:1,268:2,321:1,330:0,331:0,370:1,} custom=1
# Demonfire E
name="Necromastery" card=EX1_596e tags={183:3,203:1,202:6,48:0,201:3,199:9,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Void Crusher
name="Eidolon" card=AT_023 tags={183:15,321:1,203:3,202:4,48:2,47:2,45:2,199:9,200:15,330:0,331:0,403:0,} custom=1
# Forbidden Shaping
name="Demonic Conversion" card=OG_101 tags={183:21,321:1,203:4,202:5,48:3,199:6,330:0,331:0,} custom=1
# Charge E
name="Level 1" card=CS2_103e2 tags={183:2,202:6,199:10,330:0,331:0,} custom=1 flags=(CARD_ATTACHMENT)
# Inner Rage E
name="Satanic" card=EX1_607e tags={183:3,202:6,199:10,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Inner Fire E
name="Level 3" card=CS1_129e tags={183:3,202:6,199:6,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Twisting Nether
name="The Black Hole" card=EX1_312 tags={183:3,202:5,201:3,199:9,203:4,48:8,251:1,268:2,321:1,330:0,331:0,} custom=1
# Mal Ganis
[GVG_021]
# Lay on Hands
name="Purification" card=EX1_354 tags={183:3,202:5,201:3,199:5,203:4,48:8,251:1,321:1,330:0,331:0,} custom=1
# Flame Lance
name="Laguna Blade" card=AT_001 tags={183:15,321:1,203:1,202:5,48:8,199:4,47:10,330:0,331:0,} custom=1
# Dragon's Breath
name="Dragon's Breath" card=BRM_003 tags={183:14,321:1,203:1,202:5,48:3,199:4,47:2,330:0,331:0,} custom=1
# Confessor Paletress
name="Lina" card=AT_018 tags={183:15,321:1,203:5,202:4,48:2,47:1,45:14,199:6,114:1,330:0,331:0,200:16,} custom=1 level2=BRM_003 level3=AT_001
# Lightning Storm
name="God's Wrath" card=EX1_259 tags={183:3,202:5,201:3,199:8,203:3,48:6,251:1,47:3,321:1,330:0,331:0,215:1,} custom=1
# Forked Lightning
name="Forked Lightning" card=EX1_251 tags={183:3,202:5,201:3,199:8,203:1,48:2,251:1,47:1,321:1,330:0,331:0,215:1,} custom=1
# Archmage Antonidas
name="Zeus" card=EX1_559 tags={183:3,203:5,202:4,48:3,47:1,45:15,201:3,251:3,199:4,114:1,321:1,330:0,331:0,32:1,} custom=1 level2=EX1_251 level3=EX1_259
# Commanding Shout
name="Warcry" card=NEW1_036 tags={183:3,203:3,202:5,48:1,199:10,321:1,330:0,331:0,} custom=1 attachment=NEW1_036e
# Commanding Shout
name="Sven: Warcry" card=NEW1_036e tags={183:3,202:6,199:10,330:0,331:0,338:1,} custom=1 flags=(CARD_ATTACHMENT)
# Druid of the Claw
name="Ursa" card=EX1_165t2 tags={183:3,203:5,202:4,48:4,47:3,45:21,199:2,330:0,331:0,200:20,190:0,} custom=1 level2=CS2_012 level3=CS2_011
# Open Wounds
name="Wounded" card=AT_039e tags={183:15,202:6,199:2,330:0,331:0,338:1,} custom=1 flags=(CARD_ATTACHMENT)
# Divine Strength
name="God's Strength" card=OG_223 tags={183:21,321:1,203:1,202:5,48:3,199:5,} custom=1 attachment=OG_223e
# Optimism
name="Sven: God's Strength" card=OG_223e tags={183:21,202:6,} custom=1 flags=(CARD_ATTACHMENT)
# Tirion Fordring
name="Sven" card=EX1_383 tags={183:3,203:5,202:4,48:3,47:3,45:16,201:3,199:5,251:1,114:1,321:1,330:0,331:0,194:0,190:0,217:0,} custom=1 level2=NEW1_036 level3=OG_223
# Windfury
[CS2_039]
# Corruption
name="Corruption" card=CS2_063 tags={183:2,202:5,201:3,199:9,203:1,48:1,251:1,321:1,330:0,331:0,} custom=1 attachment=CS2_063e
# Corruption E
name="Corruption" card=CS2_063e tags={183:2,202:6,199:9,330:2,331:2,} custom=1 flags=(CARD_ATTACHMENT)
# Hunter's Mark
[CS2_084] attachment=CS2_084e
# Hunter's Mark E
name="Hunter's Mark E" card=CS2_084e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Assasinate
name="Assassinate" card=CS2_076 tags={183:2,202:5,201:3,199:7,203:2,48:5,251:6,268:2,321:1,330:0,331:0,} custom=1
# Shadow Word: Death
[EX1_622]
# Shadow Word: Pain
name="Shadow Word: Pain" card=CS2_234 tags={321:1,183:2,203:2,202:5,48:2,199:6,330:0,331:0,} custom=1
# Execute
name="Culling Blade" card=CS2_108 tags={183:2,202:5,201:3,199:10,203:2,48:3,251:1,268:2,321:1,330:0,331:0,} custom=1
# Illidan
name="Terrorblade" card=EX1_614 tags={183:3,203:5,202:4,48:6,45:1,47:5,201:3,251:6,114:1,321:1,330:0,331:0,200:15,32:1,} custom=1
# Hand of Protection
name="Guardian Angel" card=EX1_371 tags={183:2,203:2,202:5,48:2,199:5,201:3,251:1,321:1,330:0,331:0,} custom=1
# Polymorph
[CS2_022] attachment=CS2_022e
name="Polymorph E" card=CS2_022e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Hex
[EX1_246] attachment=EX1_246e
# Hex E
name="Hex E" card="EX1_246e" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Blessing of Kings
[CS2_092] attachment=CS2_092e
# Blessing of Kings E
name="Blessing of Kings E" card="CS2_092e" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Blessing of Might
[CS2_087] attachment=CS2_087e
# Blessing of Might E
name="Blessing of Might E" card="CS2_087e" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Power Word: Shield
[CS2_004] attachment=CS2_004e
# Power Word: Shield E
name="Power Word: Shield E" card="CS2_004e" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Charge
[CS2_103] attachment=CS2_103e2
# Charge E
#name="Charge E" card="CS2_103e2" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Mark of the Wild
[CS2_009] attachment=CS2_009e
# Mark of the Wild E
name="Mark of the Wild E" card="CS2_009e" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Ancestral Healing
[CS2_041] attachment=CS2_041e
# Ancestral Infusion
name="Ancestral Infusion" card="CS2_041e" tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Rockbiter Weapon
[CS2_045] attachment=CS2_045e
# Rockbiter Weapon E
name="Rockbiter Weapon E" card=CS2_045e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Divine spirit
[CS2_236]
# Bloodlust
[CS2_046] attachment=CS2_046e
# Bloodlust E
name="Bloodlust E" card=CS2_046e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Claw
[CS2_005] attachment=CS2_005o
# Claw E
name="Claw E" card=CS2_005o tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Heroic Strike
[CS2_105] attachment=CS2_105e
# Heroic Strike E
name="Heroic Strike E" card=CS2_105e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Savage Roar
name="Enrage" card=CS2_011 tags={183:2,202:5,201:3,199:2,203:1,48:3,251:1,321:1,330:0,331:0,} custom=1 attachment=CS2_011o
# Savage Roar E
name="Enraged" card=CS2_011o tags={183:2,202:6,199:2,330:1,331:1,338:1,} custom=1 flags=(CARD_ATTACHMENT)
# Warrior
name="Warrior" card=HERO_01 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Shamman
name="Shamman" card=HERO_02 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Rogue
#name="Rogue" card=TB_SPT_Boss tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Paladin
name="Paladin" card=HERO_04 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Hunter
name="Hunter" card=HERO_05 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Druid
name="Druid" card=HERO_06 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Warlock
name="Warlock" card=HERO_07 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Mage
name="Mage" card=HERO_08 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Priest
#name="Priest" card=LOEA04_01 tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# King of Khaz Modan
name="King of Khaz Modan" card=HERO_01a tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Blood Knight Matriarch
name="Blood Knight Matriarch" card=HERO_04a tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Alleria Windranger
name="Alleria Windranger" card=HERO_05a tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Guardian Medivh
name="Guardian Medivh" card=HERO_08a tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Khadgar
name="Khadgar" card=HERO_08b tags={12:1,45:30,49:1,201:3,202:3,203:2} flags=(CARD_HERO)
# Ice lance
#CS2_031 tags={12:1,47:0,48:1,49:3,201:3,202:5,203:2,264:1} flags=(CARD_SPELL|CARD_SPELL_DAMAGE|CARD_TARGETING|CARD_FREEZE|CARD_TARGET_FROZEN_4_DMG)
# Holy Smite
[CS1_130]
# Fireball
[CS2_029]
# Swipe
name="Swipes" card=CS2_012 tags={183:2,202:5,201:3,199:2,203:1,48:2,251:1,47:2,321:1,330:0,331:0,} custom=1 attachment=AT_039e
# Hammer of Wrath
[CS2_094]
# Backstab
name="Backstab" card=CS2_072 tags={183:2,202:5,201:3,199:7,203:2,251:6,48:0,47:2,268:2,321:1,330:0,331:0,} custom=1
# Drain Life
[CS2_061]
# Sacrificial Pact
[NEW1_003]
# Arcane Shot
name="Arcane Shot" card=DS1_185 tags={183:2,202:5,201:3,199:3,203:2,48:1,251:8,47:2,321:1,} custom=1
# Soulfire
[EX1_308]
# Mortal Coil
[EX1_302]
# Shield Block
[EX1_606]
# Shiv
[EX1_278]
# Starfire
[EX1_173]
# Moonfire
[CS2_008]
# Kill Command
[EX1_539]
# Frostbolt
name="Frostbolt" card=CS2_024 tags={183:2,202:5,201:3,199:4,203:1,48:2,251:1,47:3,268:2,321:1,208:1,} custom=1
# Frost Shock
[CS2_037]
# Shadow Bolt
[CS2_057]
# Feral Rage - choose one
#OG_047 tags={12:1,48:2,49:3,201:3,202:5,203:2,264:1} flags=(CARD_SPELL|CARD_SPELL_DAMAGE|CARD_NONTARGET)
# Arcane intellect
name="Arcane Intellect" card=CS2_023 tags={183:2,202:5,201:3,199:4,203:2,48:3,251:1,268:2,321:1,330:0,331:0,} custom=1
# Sprint
name="Sprint" card=CS2_077 tags={183:2,202:5,201:3,199:7,203:1,48:7,251:1,268:2,321:1,330:0,331:0,} custom=1
# Arcane Explosion
[CS2_025]
# Arcane Missiles
[EX1_277]
# Tracking
[DS1_184]
# Sinister Strike
[CS2_075]
# Mind Blast
[DS1_233]
# Frost Nova
name="Shiva's Guard" card=CS2_026 tags={183:2,202:5,201:3,199:4,203:1,48:2,251:1,47:1,268:2,321:1,330:0,331:0,208:1,} custom=1
# Fan of Knives
[EX1_129]
# Cleave
[CS2_114]
# Multishot
[DS1_183]
# Mind Vision
[CS2_003]
# Flamestrike
[CS2_032]
# Whirlwind
name="Counter Helix" card=EX1_400 tags={183:2,202:5,201:3,199:10,203:1,48:0,251:1,47:1,321:1,330:0,331:0,} custom=1
# Consecration
[CS2_093]
# Holy Nova
name="Mekansm" card=CS1_112 tags={183:2,202:5,201:3,199:6,203:1,48:4,251:5,321:1,330:0,331:0,} custom=1
# Hellfire
[CS2_062]
# Water Elemental
[CS2_033]
################
# Aura
###############
# Raid leader
[CS2_122] attachment=CS2_122e
# Enhanced
name="Enhanced" card=CS2_122e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Stormwind champion
name="Stormwind Champion" card=CS2_222 tags={183:2,202:4,201:2,203:1,48:7,47:6,45:6,251:1,321:1,330:0,331:0,362:1,} custom=1 attachment=CS2_222o
# Might of Stormwind
name="Might of Stormwind" card=CS2_222o tags={183:2,202:6,330:1,331:0,} custom=1 flags=(CARD_ATTACHMENT)
# Warsong Commander
[EX1_084] attachment=EX1_084e
# Charge
name="Charge" card=EX1_084e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Timber Wolf
[DS1_175] attachment=DS1_175o
# Furious Howl
name="Furious Howl" card=DS1_175o tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Gurubashi Berserker
[EX1_399] attachment=EX1_399e
# Berserking
name="Berserking" card=EX1_399e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
################
# Battlecry
###############
# Dread Infernal
[CS2_064]
# Novice engineer
[EX1_015]
# Gnomish Inventor
[CS2_147]
# Darkscale Healer
[DS1_055]
# Guardian of Kings
name="Omniknight" card=CS2_088 tags={183:2,202:4,201:3,199:5,203:1,48:2,251:5,45:17,47:1,321:1,218:1,} custom=1
# Nightblade
name="Phantom Assassin" card=EX1_593 tags={183:2,203:2,202:4,48:4,45:2,47:4,201:3,321:1,218:1,} custom=1
# Acidic Swamp Ooze
[EX1_066]
# Voodoo doctor
name="Witch Doctor" card=EX1_011 tags={183:2,202:4,201:1,203:2,48:1,47:2,45:1,251:6,321:1,218:1,} custom=1
# Elven Archer
[CS2_189]
# Fire Elemental
[CS2_042]
# Ironforge Rifleman
[CS2_141]
# Stormpike Commando
[CS2_150]
# Frostwolf Warlord
name="Legion Commander" card=CS2_226 tags={183:2,202:4,201:1,203:4,48:5,47:4,45:4,251:1,321:1,330:0,331:0,218:1,} custom=1 attachment=CS2_226e
# Frostwolf Banner
name="Frostwolf Banner" card=CS2_226e tags={183:2,202:6,330:1,331:1,} custom=1 flags=(CARD_ATTACHMENT)
# Succubus
name="Queen of Pain" card=EX1_306 tags={183:2,202:4,201:3,199:9,200:15,203:2,48:3,47:3,45:5,251:1,268:2,321:1,218:1,} custom=1
# Sap
name="Sap" card=EX1_581 tags={183:2,203:2,202:5,48:2,201:3,199:7,268:2,321:1,330:0,331:0,} custom=1
# Mind Control
[CS1_113] attachment=CS1_113e
# Mind Control E
name="Mind Control E" card=CS1_113e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
# Vanish
[NEW1_004]
################
# Spell damage
###############
# Archmage
[CS2_155]
# Dalaran mage
[EX1_582]
# Kobold geomancer
[CS2_142]
# Ogre magi
[CS2_197]
################
# Charge
###############
# Wolfirder
[CS2_124]
# Bluegill warrior
[CS2_173]
# Kor'kron elite
name="Mogul Khan, Axe" card=NEW1_011 tags={183:2,203:5,202:4,321:1,330:0,331:0,48:3,47:2,45:20,199:10,197:0,} custom=1 level3=CS2_108
# Stormwind knight
[CS2_131]
# Reckless rocketeer
[CS2_213]
# Stonetusk boar
name="Stonetusk Boar" card=CS2_171 tags={183:2,202:4,201:3,200:20,203:2,48:1,47:1,45:1,251:6,268:2,321:1,197:0,} custom=1
# Huffer
[NEW1_034] flags=(CARD_UNCOLLECTIBLE)
################
# Divine shield
###############
# Scarlet Crusader
[EX1_020]
################
# Taunt
###############
# Lord of the Arena
[CS2_162]
# Booty bay bodyguard
[CS2_187]
# Frostwolf Grunt
[CS2_121]
# Goldshire footman
[CS1_042]
# Ironbark protector
[CS2_232]
# Sen'jin Shieldmasta
[CS2_179]
# Voidwalker
name="Enigma" card=CS2_065 tags={183:2,202:4,201:3,199:9,200:15,203:5,48:2,45:15,251:9,47:1,268:2,321:1,190:0,} custom=1 level2=OG_101 level3=EX1_312
# Misha
[NEW1_032] flags=(CARD_UNCOLLECTIBLE)
# Frog
[hexfrog] flags=(CARD_UNCOLLECTIBLE)
################
# Totem
###############
# Wrath of Air Totem
[CS2_052] flags=(CARD_UNCOLLECTIBLE|CARD_TOTEMIC_CALL_CHILD)
# Stoneclaw Totem
[CS2_051] flags=(CARD_UNCOLLECTIBLE|CARD_TOTEMIC_CALL_CHILD)
# Searing Totem
[CS2_050] flags=(CARD_UNCOLLECTIBLE|CARD_TOTEMIC_CALL_CHILD)
# Healing Totem
[NEW1_009] flags=(CARD_UNCOLLECTIBLE|CARD_TOTEMIC_CALL_CHILD)
# Flametongue Totem
[EX1_565] attachment=EX1_565o
# Flametongue
name="Flametongue" card=EX1_565o tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT)
################
# Summon
###############
# Mirror Image
[CS2_027]
# Mirror Image
[CS2_mirror]
# Animal Companion
[NEW1_031]
# Dragonling Mechanic
[EX1_025]
# Mechanical Dragonling
[EX1_025t] flags=(CARD_UNCOLLECTIBLE)
# Murloc Tidehunter
[EX1_506]
# Murloc Scout
name="Murloc Scout" card=EX1_506a tags={183:2,202:4,201:3,200:14,203:1,47:1,45:1,251:1,48:0,} custom=1 flags=(CARD_UNCOLLECTIBLE)
# Razorfen Hunter
[CS2_196]
# Leokk
[NEW1_033] flags=(CARD_UNCOLLECTIBLE)
# Starving Buzzard
name="Vulture" card=CS2_237 tags={321:1,183:2,203:1,202:4,48:1,47:1,45:1,199:3,200:20,330:0,331:0,32:1,} custom=1
# Sheep
[CS2_tk1] flags=(CARD_UNCOLLECTIBLE)
# Avator of the Coin
[GAME_002] flags=(CARD_UNCOLLECTIBLE)
# Boar
name="Boar" card=CS2_boar tags={183:2,202:4,201:3,203:1,47:1,45:1,251:1,48:1,200:20,330:0,331:0,} custom=1 flags=(CARD_UNCOLLECTIBLE)
# Oasis Snapjaw
name="Oasis Snapjaw" card=CS2_119 tags={321:1,183:2,203:2,202:4,48:4,47:2,45:7,200:20,} custom=1
# Bloodfen Raptor
name="Bloodfen Raptor" card=CS2_172 tags={183:2,203:2,202:4,48:2,45:2,47:3,201:1,251:1,268:2,321:1,200:20,} custom=1
# Magma Rager
name="Shadow Fiend" card=CS2_118 tags={321:1,183:2,203:5,202:4,48:2,47:1,45:14,330:0,331:0,} custom=1 level3=EX1_303
# Puddlestomper
#GVG_064 tags={12:1,45:2,47:3,48:2,49:3,202:4,203:2} flags=(CARD_MINION)
# Wisp
name="Wisp" card=CS2_231 tags={183:3,203:1,202:4,48:2,45:2,47:0,201:3,251:7,} custom=1 attachment=NAX12_04e
# Core Hound
name="Core Hound" card=CS2_201 tags={321:1,183:2,203:1,202:4,48:7,47:9,45:5,200:20,} custom=1
# Murloc Raider
name="Murloc Raider" card=CS2_168 tags={183:2,202:4,201:2,203:2,48:1,47:2,45:1,251:1,321:1,200:14,} custom=1
# River Crocolisk
name="River Crocolisk" card=CS2_120 tags={321:1,183:2,203:2,202:4,48:2,47:2,45:3,200:20,} custom=1
# Boulderfist Ogre
name="Boulderfist Ogre" card=CS2_200 tags={321:1,183:2,203:2,202:4,48:6,47:6,45:7,} custom=1
# Chillwind Yeti
name="Chillwind Yeti" card=CS2_182 tags={183:2,202:4,201:3,203:1,48:4,47:4,45:5,251:6,268:2,321:1,330:0,331:0,} custom=1
# Fireblast
name="Fireblast" card=CS2_034 tags={12:1,47:1,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_TARGETING|CARD_SPELL|CARD_HP_SPELL_DAMAGE)
# Lesser Heal
# name="Lesser Heal" card=CS1h_001 tags={12:1,47:2,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_TARGETING|CARD_SPELL|CARD_SPELL_HEAL)
# Lesser Heal
name="Lesser Heal" card=CS1h_001 tags={183:2,202:10,201:3,199:6,203:2,48:2,251:1,} custom=1
# Healing Touch
[CS2_007]
# Holy Light
[CS2_089]
# Reinforce
name="Reinforce" card=CS2_101 tags={12:1,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_SPELL|CARD_NONTARGET|CARD_HP_REINFORCE|CARD_SUMMON)
# Silverhand Recruit
[CS2_101t] flags=(CARD_MINION|CARD_UNCOLLECTIBLE)
# Dagger Mastery
name="Dagger Mastery" card=CS2_083b tags={12:1,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_SPELL|CARD_NONTARGET|CARD_HP_DAGGERMASTERY|CARD_SUMMON)
################
# Weapon
###############
# Wicked Knife
[CS2_082] flags=(CARD_UNCOLLECTIBLE)
# Assassin's Blade
[CS2_080]
# Truesilver Champion
name="Divine Rapier" card=CS2_097 tags={183:2,202:7,201:3,199:5,203:1,48:5,47:8,187:1,251:6,321:1,330:0,331:0,32:1,} custom=1
# Fiery War Axe
[CS2_106]
# Light's Justice
[CS2_091]
# Arcanite reaper
[CS2_112]
##############
# Totemic Call
[CS2_049] tags={12:1,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_SPELL|CARD_NONTARGET|CARD_SUMMON|CARD_HP_TOTEMIC_CALL)
# Shapeshift
[CS2_017] tags={12:1,47:1,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_SPELL|CARD_NONTARGET|CARD_HP_SHAPESHIFT|CARD_SUMMON)
# Armor Up
[CS2_102] tags={12:1,47:2,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_SPELL|CARD_NONTARGET|CARD_HP_ARMORUP|CARD_SUMMON)
# Life Tap
[CS2_056] tags={12:1,47:2,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_SPELL|CARD_NONTARGET|CARD_HP_LIFETAP|CARD_SUMMON)
# Steady Shot
[DS1h_292] tags={12:1,47:2,48:2,49:1,201:3,202:10,203:2} flags=(CARD_HEROPOWER|CARD_TARGETING|CARD_SPELL|CARD_HP_SPELL_DAMAGE|CARD_TARGET_HERO)
# Empty mana card
name="Empty card" card=MANA_CARD tags={12:1,49:3,263:5} flags=(CARD_UNCOLLECTIBLE)
# No card
name="No Card" card=NO_CARD tags={49:2} flags=(CARD_UNCOLLECTIBLE)
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjE0NS45NgpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwMDFiMTIzZDQyYmVmYmMzMWQ5M2VlNDQ1ZmQ2ZmYzZWU4MzRlNTdiJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTg1LjE5MS4xMjYuMjEzCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzAxMDBlZDY4NDhjZjg1ZmEyNmQ5MzE4YmQ5MWY5NjdjZjdhMGU1NjUnCnA2
CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWODMuMTQ3LjUyLjM3CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzAxMTcwZjU5MmU5NjY3NTQ2NmFjNGI3YzgxMjQwZGVlZTI2MTEzMWQnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTk3LjIzMS4xOTYuNDAKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnMDNmZWJiYjI3NjlhYTFjYmRlN2UyYjMyYjNkOTI3NWZiMzc3ODRiOCcKcDYK
cy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjEzOC42MwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwNDY5ZGExNmM3NzRjMzA0NzhhNWZiZDE3ZDJlZDA5NGYyMTgzNTU2JwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjEzOC42MwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwNDk5ZTA5NDM0MWVhMTdmZDdhYTg1OWU3ZGU5NWE3M2RkZTZiYTNjJwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWODMuMTQ3LjUyLjQyCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzA1YzA1YTQxMTIxMGYzMmJhMmIyYmMxODZlZmE2ZjkzM2JmMWUzNTInCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY4Ljc2LjIwLjIyOQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwNjc2YTFkYTc4NGRhMjZlZTQyNGQ2MGQxMzAyOWY2YzNiNzRlMjIzJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTg1LjE5MS4xMjYuMjEzCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzA2YTkzZWMyNmExNDMyMGIyYzQ2NmVjNzAxZTFhMmYwOTM5ZDg1NzUnCnA2
CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTg1LjE5MS4xMjYuMjEzCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzA3NTFlNzdjNjIxMjhjOGE3MjIyYjAzMjU1M2RhMzY3YjI5MGRjYjUnCnA2
CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNTQuMzYuMTE1LjIyMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwNzY1M2Y3ZGVhODBkMmQxYzFhNTliY2FiMWMyMjVkN2MzM2MyNGY1JwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNDUuMTI4LjIzMi4yMjkKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnMDdlMDU4NmYxM2RkMDE4NzQ2MGRjM2NhODZhZThjMjM3ZDdiMzJlOCcKcDYK
cy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWODEuMTY5LjIzNC4xMTYKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnMDlkZDdiZjMyOTVhYTJmYjk4NDdjZjczMzA0YjNhZjJmMjBjZDZkMicKcDYK
cy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNTQuMzYuMTE1LjIyMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwYmU3MjQ2NTZhZTM2ZGZiMDAwNzJkMmY0NDVlNDRjNGMzODFjODFlJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjE0NS45NgpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwYmVkOWZkMzhjZThhNjc2OTY0OTEwNzAyOTM5OGRkMmQzNDRlNjUxJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNzguMTUzLjE0MC4zNwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycwYzVhMWU1ZDUzYzU2YmYyYTZmMDA2YThkZTEwYzQ4YWU4MWNkYjM0JwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDUuMTU2LjEyOS43CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzBkNjhkNWM0OGEyMzNkMGIwYjY4Y2RiYTA5ZDU0ZDc0MThhN2ExYzMnCnA2CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDUuMTU2LjEyOS43CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzBlYzc0NjA0YTAwYmYyNDE1ZDg1NWQ4YmU2NzRjNTljOGRkZWM0NjgnCnA2CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWMTguMTcwLjk3Ljg5CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzBmNTBlYTVjN2M4ZGQxODQ2ZGM5MjM0OGI0ZmEzNTQ5NDhkNTA2YmQnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjEzOC42MwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycxMWVhNGEwYjY1YmNhNjJlOGFiY2Y3ODBiYzUwODViOTFiY2IzNWIzJwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWODMuMTQ3LjUyLjM3CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzEyMGE4MGU3ZGFmZGVkYzBkM2U4ODU0MzMwNDhmZjhiNTY4Y2U3NmMnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjE0NS45NgpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycxNGIzMzEyNzYxN2JhNTA5ZDdkM2FhMGYxNWRlMTBkNjI0NzFmNjYxJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTQzLjExMC4yMjIuMTY2CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzE0ZDZhZTg1NjY3ODFiOTI0YzBkMmIyMTg1NjUwMzUzYjM3ZTdkZTYnCnA2
CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDUuMTU2LjEyOS43CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzE0ZTE2YzU3NGIyOWYwNjQ4MTYxMTJlNWI3ZGJkYzI0M2YyMzNkNzAnCnA2CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWODQuNTQuNTEuMzcKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Npb25f
aWQnCnA1ClMnMTUzZjYyY2Y4NWExZDhkZTIwNjAzYTA1MWVhNWQxODg0ZmUxOGY4MicKcDYKcy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNzguMTUzLjE0MC4zMApwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycxNjRlYmQ1ZTM0ZTY4NjY3ZWY3Zjk2NjFlMmI1OWI2NmFmODc2Y2FjJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTg1LjE5MS4xMjYuMjEzCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzE2NmNjM2M0MzdhYTBlNmNmZDU2NDFlNzNiNWQ0M2JlYzVhNzg1MmQnCnA2
CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNTQuMjQ0LjU3Ljk2CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzE2ZGI2NWMzZTdmMGE4NGM2MzFjNjljZTQ4Y2UyZTI4ZDVmNDI5NWInCnA2CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWODQuNTQuNTEuMzcKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Npb25f
aWQnCnA1ClMnMThkZGU1M2I3YmIyYWFiMGI2NTFiYzRkZTgzNmM0ZWUxNDVlOTJjYycKcDYKcy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTgzLjgxLjE2OS4xMzkKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnMThmYmQ0NDQyMDE3ZTU3N2VkZDU5ZTE2NTVjYWQyZmY3YWIxZGJjZScKcDYK
cy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNTQuMzYuMTE1LjIyMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycxOWI1YTgxM2EzMzE5MGMyMjJjMWU0YzUwNjExOWQ1Y2FhMjMxZTExJwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWMzUuODguNDguMTQxCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzFkMDE1NTllZDJiN2Q4MzJiZmU1MWM1NmRhNGY3MTEyNjJkNDQzYzYnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNTcuMTI5LjIzLjE2NgpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycxZGI3MTEzMjNkMmMzMjM2Njc1NmU4YTVmZjY2ZjRjOTI3ZTQyNWUzJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTQzLjExMC4yMjIuMTY2CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzFlZjhhNjRiZWZkNDllOTFjOWIwZGY0ODZiNDc5YmI3ZWJmNjlhNzgnCnA2
CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjE0NS45NgpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycyMWQ0NThjNTVmMTAwNDFiYjliYjZjODlhZmMzZjBiN2VmZDg0N2U2JwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTQzLjExMC4yMjIuMTY2CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzIyNDU2N2FkZDRlOGE0YTQ2OGUzMmYyODEzYmM2N2FhYmNjMTljYzMnCnA2
CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY4Ljc2LjIwLjIyOQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycyMjhmNmQ0M2FjMWY5MmNiNmJhNTgwN2NmNjU3MWMyZTA3YjhlZWNiJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTQzLjExMC4yMjIuMTY2CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzIzMzA1YjY1OWZiZjQ5MTk4NTYwMDc5ZTE4MjAyMjE5MWQ3OGVkMzInCnA2
CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWMTguMTcwLjk3Ljg5CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzI0NDdmYzk1MjcxNjlhNDJjOWJlYThmN2Y0NjYxMTA0NmMyNjg4MjEnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTc5LjQzLjE4OC4xMDYKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnMjY0YTExODlmODA1MmNmYjZhOGY3MmUzYTA0YmRhOTE5ZWZmODk3YicKcDYK
cy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjE0NS45NgpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycyN2Y3N2M2ZTExZTUxNzhhOGQ4ODFiYzU0ZjllMmE5Zjg3ZWM4Mzg0JwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDMuMTYzLjguMTQ4CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzI4NjRmYmEwZmQwN2EwZDQyMGIzMTM2OGQwOGIxMWYxM2M4MDIwYTUnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTg1LjE5MS4xMjYuMjEzCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzI4NzMzY2Q0ZGM5MWQ3NWVkYzRkM2E4NWE1NDZmYThkNzI5YTgwNGMnCnA2
CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDUuMTU2LjEyOS43CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzJhNTk5ZTYyNjc1ZWRmNWE0Zjc0MTY0YWY4NmY3N2Q3ZmY4MjkzMjUnCnA2CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDUuMTU2LjEyOS43CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzJiNzA3NjdiOGZhNTEyMDY4MTY0NmRiNmEwZTc5YjllYmEzNjhhNmMnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTg1LjE4MC4xNDMuOApwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycyYmMxZDI5NjlhOTUyOGY3YmYzMDAyNmE1ODAyNDBmODUzYmE3YTA3JwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjEzOC42MwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycyZTRlN2U4OGI5NTQ0MjlmZDNhNTE5N2YyZTlhYWVlMWM5NDMwZGMxJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNzguMTUzLjE0MC4zNwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUycyZTg1NTFiZGEyNDE5NTA0MWQ3YTk2NTZhNjk3OTlhMGUzM2I4ZmFmJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNTQuMzYuMTE1LjIyMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUyczMDJkMmIxMGI2OTNkZmFiODdmODRkYmE1YTQxYmU4MDQ2MzJiYjYzJwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTgzLjgxLjE2OS4xMzkKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnMzE5M2ZiOGRlNjFjOTY0ZDFhNWZlMzU3NTkzZmZhZjI0NTExNDc3OCcKcDYK
cy4=
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNDMuMTYzLjguMTQ4CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzM0YzE2YjFkOWI1NDg4NTY3MDA4N2VlN2JjYzdhYjk2NzI3NDg4YmEnCnA2CnMu
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWMTguMTcwLjk3Ljg5CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzM1OGM2NmM0MWRjM2Y5NWY4MjdkNTIzMDllNmJiMzcwNmNkNTA5ZWYnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNzguMTUzLjE0MC4zMApwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUyczNjdhMWVmZmRhNmQ1YzEzMmIxYzM0Y2JmOWJiZjYxZGRlODk4MzE4JwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNjUuNDkuMS41MApwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lvbl9p
ZCcKcDUKUyczN2MxZjU4MzE0ZjE5NzFlNmEwYTRjNDc4M2U1M2U2MDRlODZmZmFjJwpwNgpzLg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWNjUuNDkuMS4zOApwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lvbl9p
ZCcKcDUKUyczOGYyNDU4ZDdhZGJjZDZlYzZmMTFmNGNmNDQ2NTlhYmZlYTlkODg3JwpwNgpzLg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWMTguMTcwLjk3Ljg5CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzM5OWE2MTQyZDU3NGNlN2Y5NWE0ODhkMjM2NjA1NTc0ZmQ3NmI4MjEnCnA2CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTQzLjExMC4yMjIuMTY2CnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzM5YzQxNWM5ZjU2MjgwNDY0ODdhMDVlZWJjN2JhN2Q1NWY1MzUyYTInCnA2
CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTY3Ljk0LjEzOC42MwpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUyczYTllNmE3N2QzYzk1YjljMzlkYWRlNDczOGI1MTA0NmIyYjFjYzM5JwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNDMuMTMxLjI0OS4xNTMKcDMKc1MnbG9naW4nCnA0CkkwCnNTJ3Nlc3Np
b25faWQnCnA1ClMnM2FkOTNlODI0OTY3ZTExMGZlZGVkYmE0YThjNmUxNTU0MjdlZDAxZCcKcDYK
cy4=
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWMTgwLjIxNC4yMzkuMTIxCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNz
aW9uX2lkJwpwNQpTJzNkYmIzOWU3MmFmOTZmY2MyZWQ3MTFiNzYxZTg3ODkwZmM1ZjFlNWMnCnA2
CnMu
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNTQuMzYuMTE1LjIyMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUyc0MGMzMTA4NTUyNTU4NGY0OTVmNWI4NTkxNWFjM2IwZTAwMDg3NjE3JwpwNgpz
Lg==
@@ -0,0 +1,3 @@
KGRwMQpTJ2lwJwpwMgpWNDMuMTM0Ljg5LjExMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lv
bl9pZCcKcDUKUyc0MzI4MTE0ZDU3NGE1NmI0Njk2ZmI4MDBiYTIyMDdmMWJhNDc4ODY0JwpwNgpz
Lg==
@@ -0,0 +1,2 @@
KGRwMQpTJ2lwJwpwMgpWODMuMTQ3LjUyLjQyCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u
X2lkJwpwNQpTJzQzYTVhODc4YmM2M2Y4ODJiMDNhZjllNTg5NjNjYmI0NDA4MGU5ZDQnCnA2CnMu

Some files were not shown because too many files have changed in this diff Show More