diff --git a/.gitignore b/.gitignore index df5a23c..969f358 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ cache *_log *.log + +player1 +player2 diff --git a/Dockerfile b/Dockerfile index c2e2ee1..5059d0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml index 60b2954..ec26165 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,3 +22,4 @@ services: - 3724:3724 - 80:80 - 9002:9002 + - 8081:8081 diff --git a/docker_ctl.sh b/docker_ctl.sh index 365f5cd..68c76f7 100644 --- a/docker_ctl.sh +++ b/docker_ctl.sh @@ -4,35 +4,36 @@ CMD="docker exec -it hearthmod" case $1 in bucket_create) - $CMD /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 + $CMD /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) $CMD /opt/couchbase/bin/cbrestore /app/hm_database/hbs http://localhost:8091/ --bucket-source=hbs ;; compile) - $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_sunwell/examples && npm install' + $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_sunwell/examples && npm install' ;; - build_client) - $CMD /bin/bash -c 'cd /app/hm_client/src && qmake hearthmod.pro && make' - ;; + build_client) + $CMD /bin/bash -c 'cd /app/hm_client/src && qmake hearthmod.pro && make' + ;; 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 stud - $CMD /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 - # Start nginx - $CMD /app/hm_nginx/objs/nginx + $CMD mkdir -p /app/hm_log + # Start the servers + $CMD /app/hm_gameserver/hm_gameserver --log=/app/hm_log/hm_gameserver_$(date +%s).log + $CMD /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 + # Start fcgi + $CMD 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 /bin/bash -c 'cd /app/hm_sunwell && nodejs examples/server hm_sunwell > /app/hm_log/nodejs_server_$(date +%s).log 2>&1' ;; stop) - $CMD /bin/bash -c "ps -ef | grep hm_ | grep -v grep | awk '{print \$2}' | xargs 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" ;; *) diff --git a/hm_base/lib/libhmbase.a b/hm_base/lib/libhmbase.a deleted file mode 100644 index 8f98d9c..0000000 Binary files a/hm_base/lib/libhmbase.a and /dev/null differ diff --git a/hm_client/src/hearthmod.pro.user b/hm_client/src/hearthmod.pro.user index e91a09a..7bad305 100644 --- a/hm_client/src/hearthmod.pro.user +++ b/hm_client/src/hearthmod.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -83,6 +83,9 @@ true + + true + diff --git a/hm_gameserver/hm_gameserver b/hm_gameserver/hm_gameserver index 93c7384..d0d24a0 100755 Binary files a/hm_gameserver/hm_gameserver and b/hm_gameserver/hm_gameserver differ diff --git a/hm_gameserver/script/custom_mod b/hm_gameserver/script/custom_mod index 029c20c..77b07a6 100644 --- a/hm_gameserver/script/custom_mod +++ b/hm_gameserver/script/custom_mod @@ -202,7 +202,7 @@ name="Terrorblade" card=EX1_614 tags={183:3,203:5,202:4,48:6,45:1,47:5,201:3,251 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" card=CS2_022 tags={183:2,202:5,201:3,199:4,203:2,48:4,251:1,268:2,321:1,330:0,331:0,} custom=1 attachment=CS2_022e name="Polymorph E" card=CS2_022e tags={12:1,49:6,202:6} flags=(CARD_ATTACHMENT) # Hex @@ -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="Frost Nova" 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] @@ -394,7 +394,7 @@ name="Shiva's Guard" card=CS2_026 tags={183:2,202:5,201:3,199:4,203:1,48:3,251:1 [CS2_003] # Flamestrike -[CS2_032] +name="Flamestrike" card=CS2_032 tags={183:2,202:5,201:3,199:4,203:1,48:7,251:1,47:4,268:2,321:1,330:0,331:0,} custom=1 # 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 @@ -403,7 +403,7 @@ name="Counter Helix" card=EX1_400 tags={183:2,202:5,201:3,199:10,203:1,48:0,251: [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 +name="Holy Nova" card=CS1_112 tags={183:2,202:5,201:3,199:6,203:1,48:5,251:5,47:2,321:1,330:0,331:0,} custom=1 # Hellfire [CS2_062] @@ -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 diff --git a/hm_gameserver/script/flags_sections b/hm_gameserver/script/flags_sections index 65aaa81..57ce93e 100644 --- a/hm_gameserver/script/flags_sections +++ b/hm_gameserver/script/flags_sections @@ -29,7 +29,6 @@ spell_CS1h_001_FLAG, 1000 destroyed_NEW1_036_FLAG, 1000 buff_NEW1_036_FLAG, 1000 spell_aoe_GVG_010_FLAG, 1000 -spell_aoe_CS1_112_FLAG, 1000 spell_CS2_072_FLAG, 1000 buff_CS2_077_FLAG, 1000 buff_CS2_023_FLAG, 1000 @@ -125,7 +124,6 @@ weapon_destroyed_LOE_118_FLAG, 1000 weapon_attack_LOE_118_FLAG, 1000 onboard_LOE_118_FLAG, 1000 buff_LOEA06_03_FLAG, 1000 -spell_aoe_CS2_026_FLAG, 1000 attack_EX1_306_FLAG, 1000 battlecry_EX1_306_FLAG, 1000 destroyed_CS2_222_FLAG, 1000 @@ -136,3 +134,7 @@ destroyed_CS2_231_FLAG, 1000 attack_CS2_231_FLAG, 1000 idle_CS2_231_FLAG, 1000 onboard_CS2_231_FLAG, 1000 +buff_CS2_022_FLAG, 1000 +spell_aoe_CS1_112_FLAG, 1000 +spell_aoe_CS2_026_FLAG, 1000 +spell_aoe_CS2_032_FLAG, 1000 diff --git a/hm_gameserver/script/mechanics/cards/CS2_022.card b/hm_gameserver/script/mechanics/cards/CS2_022.card index e63b858..8d2c31a 100644 --- a/hm_gameserver/script/mechanics/cards/CS2_022.card +++ b/hm_gameserver/script/mechanics/cards/CS2_022.card @@ -2,7 +2,7 @@ { ".section buff" : { "code": " - hsl_transform($attacker, $defender, \"CS2_tk1\"); + hsl_transform($deck_player, $attacker, $defender, \"CS2_tk1\"); ", "target": "$enemy_minions" diff --git a/hm_gameserver/script/mechanics/include/section_buff.h b/hm_gameserver/script/mechanics/include/section_buff.h index 5b6dcd6..8549d15 100644 --- a/hm_gameserver/script/mechanics/include/section_buff.h +++ b/hm_gameserver/script/mechanics/include/section_buff.h @@ -91,6 +91,11 @@ int count = hsl_count_attachments(hsl_deck(HSL_defender), NULL, HSL_defender, CN_DESOLATOR_BONUS); if(count == 0) { hsl_add_single_attachment(HSL_player, hsl_deck(HSL_defender), HSL_attacker, HSL_defender); } \ } +#define buff_CS2_022\ + if(HSL_attacker && flag(&(HSL_attacker->state), buff_CS2_022_FLAG, FLAG_ISSET)) {\ + hsl_transform(HSL_deck_player, HSL_attacker, HSL_defender, "CS2_tk1"); \ + } + #define __SECTION_BUFF\ buff_EX1_371\ buff_CS2_011\ @@ -110,5 +115,6 @@ buff_OG_090\ buff_EX1_581\ buff_LOEA06_03\ + buff_CS2_022\ #endif \ No newline at end of file diff --git a/hm_gameserver/script/mechanics/include/section_spell_aoe.h b/hm_gameserver/script/mechanics/include/section_spell_aoe.h index 73dbf1e..8ac5f6d 100644 --- a/hm_gameserver/script/mechanics/include/section_spell_aoe.h +++ b/hm_gameserver/script/mechanics/include/section_spell_aoe.h @@ -26,29 +26,35 @@ hsl_refresh_mana(HSL_deck_player, 2); def(card_list_s, allcards) allcards = hsl_board_friendly_cards(HSL_deck_player, HSL_attacker->id, HSL_heroes_excluded); def(card_list_s, cl) foreach(cl, allcards) { hsl_receive_heal(card(cl), 2); } hsl_attack_aoe(HSL_attacker, allcards, HSL_fake_levelup); hsl_link_target(HSL_attacker, allcards); \ } -#define spell_aoe_CS1_112\ - if(HSL_attacker && flag(&(HSL_attacker->state), spell_aoe_CS1_112_FLAG, FLAG_ISSET)) {\ - def(card_list_s, allcards) allcards = hsl_board_friendly_cards(HSL_deck_player, HSL_attacker->id, HSL_heroes_excluded); def(card_list_s, cl) foreach(cl, allcards) { cl->card->receive.heal = 2; } hsl_attack_aoe(HSL_attacker, allcards, HSL_fake_levelup); hsl_link_target(HSL_attacker, allcards); \ - } - #define spell_aoe_EX1_400\ if(HSL_attacker && flag(&(HSL_attacker->state), spell_aoe_EX1_400_FLAG, FLAG_ISSET)) {\ def(card_list_s, e) e = hsl_board_enemy_cards(HSL_attacker, HSL_heroes_excluded, HSL_magic_immunity_included); def(card_list_s, cl) foreach(cl, e) { hsl_receive_damage(card(cl), 1); } hsl_attack_aoe(HSL_attacker, e, HSL_fake_levelup); hsl_link_target(HSL_attacker, e); \ } +#define spell_aoe_CS1_112\ + if(HSL_attacker && flag(&(HSL_attacker->state), spell_aoe_CS1_112_FLAG, FLAG_ISSET)) {\ + def(card_list_s, allcards) allcards = hsl_board_all_cards(HSL_attacker, HSL_heroes_included); def(card_list_s, cl) foreach(cl, allcards) { if(is_controller_player(card(cl))) { hsl_receive_heal(card(cl), 2); } else { hsl_receive_damage(card(cl), 2); } } hsl_attack_aoe(HSL_attacker, allcards, HSL_fake_levelup); hsl_link_target(HSL_attacker, allcards); \ + } + #define spell_aoe_CS2_026\ if(HSL_attacker && flag(&(HSL_attacker->state), spell_aoe_CS2_026_FLAG, FLAG_ISSET)) {\ def(card_list_s, e) e = hsl_board_enemy_cards(HSL_attacker, HSL_heroes_excluded, HSL_magic_immunity_excluded); int count = hsl_count_cards(e); if(count > 0) { def(card_s, card) card = hsl_random_card(e); def(card_list_s, cl) foreach(cl, e) { hsl_receive_damage(card(cl), 1); } if(card) { hsl_freeze(HSL_attacker, card); } } hsl_attack_aoe(HSL_attacker, e, HSL_fake_levelup); hsl_link_target(HSL_attacker, e); \ } +#define spell_aoe_CS2_032\ + if(HSL_attacker && flag(&(HSL_attacker->state), spell_aoe_CS2_032_FLAG, FLAG_ISSET)) {\ + def(card_list_s, e) e = hsl_board_enemy_cards(HSL_attacker, HSL_heroes_excluded, HSL_magic_immunity_excluded); def(card_list_s, cl) foreach(cl, e) { hsl_receive_damage(card(cl), 4); } hsl_attack_aoe(HSL_attacker, e, HSL_fake_levelup); hsl_link_target(HSL_attacker, e); \ + } + #define __SECTION_SPELL_AOE\ spell_aoe_EX1_312\ spell_aoe_EX1_251\ spell_aoe_EX1_259\ spell_aoe_EX1_303\ spell_aoe_GVG_010\ - spell_aoe_CS1_112\ spell_aoe_EX1_400\ + spell_aoe_CS1_112\ spell_aoe_CS2_026\ + spell_aoe_CS2_032\ #endif \ No newline at end of file diff --git a/hm_gameserver/src/flag_def.c b/hm_gameserver/src/flag_def.c index a20b3f8..c873f3f 100644 --- a/hm_gameserver/src/flag_def.c +++ b/hm_gameserver/src/flag_def.c @@ -327,4 +327,6 @@ int flag_defs[MAX_FLAGS_DEF] = { 1000, // index 323 1000, // index 324 1000, // index 325 +1000, // index 326 +1000, // index 327 }; diff --git a/hm_gameserver/src/game/mechanics/next_turn.c b/hm_gameserver/src/game/mechanics/next_turn.c index 738361b..07aa639 100644 --- a/hm_gameserver/src/game/mechanics/next_turn.c +++ b/hm_gameserver/src/game/mechanics/next_turn.c @@ -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); diff --git a/hm_gameserver/src/include/flag_def.h b/hm_gameserver/src/include/flag_def.h index f323c30..6892ac3 100644 --- a/hm_gameserver/src/include/flag_def.h +++ b/hm_gameserver/src/include/flag_def.h @@ -1,7 +1,7 @@ #ifndef FLAG_DEF_H_ #define FLAG_DEF_H_ -#define MAX_FLAGS_DEF 326 +#define MAX_FLAGS_DEF 328 int flag_defs[MAX_FLAGS_DEF]; enum flags_e { @@ -224,112 +224,114 @@ enum flags_e { destroyed_NEW1_036_FLAG = 216, buff_NEW1_036_FLAG = 217, spell_aoe_GVG_010_FLAG = 218, - spell_aoe_CS1_112_FLAG = 219, - spell_CS2_072_FLAG = 220, - buff_CS2_077_FLAG = 221, - buff_CS2_023_FLAG = 222, - attachment_attack_EX1_607e_FLAG = 223, - defender_TB_SPT_Boss_FLAG = 224, - buff_LOEA16_9_FLAG = 225, - buff_CS2_234_FLAG = 226, - buff_PRO_001c_FLAG = 227, - attack_effect_CS2_024_FLAG = 228, - spell_CS2_024_FLAG = 229, - spell_DS1_185_FLAG = 230, - buff_CS2_063_FLAG = 231, - buff_CS2_076_FLAG = 232, - buff_AT_074_FLAG = 233, - spell_BRMA11_3_FLAG = 234, - destroyed_BRM_003_FLAG = 235, - spell_BRM_003_FLAG = 236, - destroyed_AT_001_FLAG = 237, - spell_AT_001_FLAG = 238, - buff_EX1_607_FLAG = 239, - attack_EX1_097_FLAG = 240, - battlecry_EX1_097_FLAG = 241, - buff_OG_090_FLAG = 242, - attack_EX1_011_FLAG = 243, - battlecry_EX1_011_FLAG = 244, - endturn_EX1_105_FLAG = 245, - attack_EX1_105_FLAG = 246, - attack_CS2_088_FLAG = 247, - battlecry_CS2_088_FLAG = 248, - onboard_CS2_088_FLAG = 249, - attack_EX1_158t_FLAG = 250, - attack_NAX4_03H_FLAG = 251, - attack_AT_023_FLAG = 252, - attack_CS2_168_FLAG = 253, - attack_CS2_201_FLAG = 254, - attack_CS2_200_FLAG = 255, - attack_CS2_119_FLAG = 256, - attack_CS2_172_FLAG = 257, - attack_CS2_171_FLAG = 258, - 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, + spell_CS2_072_FLAG = 219, + buff_CS2_077_FLAG = 220, + buff_CS2_023_FLAG = 221, + attachment_attack_EX1_607e_FLAG = 222, + defender_TB_SPT_Boss_FLAG = 223, + buff_LOEA16_9_FLAG = 224, + buff_CS2_234_FLAG = 225, + buff_PRO_001c_FLAG = 226, + attack_effect_CS2_024_FLAG = 227, + spell_CS2_024_FLAG = 228, + spell_DS1_185_FLAG = 229, + buff_CS2_063_FLAG = 230, + buff_CS2_076_FLAG = 231, + buff_AT_074_FLAG = 232, + spell_BRMA11_3_FLAG = 233, + destroyed_BRM_003_FLAG = 234, + spell_BRM_003_FLAG = 235, + destroyed_AT_001_FLAG = 236, + spell_AT_001_FLAG = 237, + buff_EX1_607_FLAG = 238, + attack_EX1_097_FLAG = 239, + battlecry_EX1_097_FLAG = 240, + buff_OG_090_FLAG = 241, + attack_EX1_011_FLAG = 242, + battlecry_EX1_011_FLAG = 243, + endturn_EX1_105_FLAG = 244, + attack_EX1_105_FLAG = 245, + attack_CS2_088_FLAG = 246, + battlecry_CS2_088_FLAG = 247, + onboard_CS2_088_FLAG = 248, + attack_EX1_158t_FLAG = 249, + attack_NAX4_03H_FLAG = 250, + attack_AT_023_FLAG = 251, + attack_CS2_168_FLAG = 252, + attack_CS2_201_FLAG = 253, + attack_CS2_200_FLAG = 254, + attack_CS2_119_FLAG = 255, + attack_CS2_172_FLAG = 256, + attack_CS2_171_FLAG = 257, + attack_CS2_182_FLAG = 258, + attack_CS2_120_FLAG = 259, + attack_EX1_506a_FLAG = 260, + attack_CS2_042_FLAG = 261, + battlecry_CS2_042_FLAG = 262, + attack_CS2_boar_FLAG = 263, + attack_CS2_237_FLAG = 264, + attack_LOE_077_FLAG = 265, + battlecry_LOE_077_FLAG = 266, + destroyed_CS2_118_FLAG = 267, + defender_CS2_118_FLAG = 268, + attack_CS2_118_FLAG = 269, + onboard_CS2_118_FLAG = 270, + destroyed_AT_128_FLAG = 271, + attack_AT_128_FLAG = 272, + attack_EX1_614_FLAG = 273, + battlecry_EX1_614_FLAG = 274, + attack_EX1_593_FLAG = 275, + battlecry_EX1_593_FLAG = 276, + attack_GVG_105_FLAG = 277, + battlecry_GVG_105_FLAG = 278, + attack_NEW1_030_FLAG = 279, + battlecry_NEW1_030_FLAG = 280, + destroyed_EX1_383_FLAG = 281, + attack_EX1_383_FLAG = 282, + onboard_EX1_383_FLAG = 283, + destroyed_CS2_065_FLAG = 284, + attack_CS2_065_FLAG = 285, + onboard_CS2_065_FLAG = 286, + destroyed_AT_018_FLAG = 287, + attack_AT_018_FLAG = 288, + onboard_AT_018_FLAG = 289, + destroyed_EX1_165t2_FLAG = 290, + attack_EX1_165t2_FLAG = 291, + onboard_EX1_165t2_FLAG = 292, + destroyed_EX1_559_FLAG = 293, + attack_EX1_559_FLAG = 294, + onboard_EX1_559_FLAG = 295, + destroyed_NEW1_011_FLAG = 296, + defender_NEW1_011_FLAG = 297, + attack_NEW1_011_FLAG = 298, + onboard_NEW1_011_FLAG = 299, + attack_CS2_226_FLAG = 300, + battlecry_CS2_226_FLAG = 301, + attack_EX1_009_FLAG = 302, + buff_EX1_581_FLAG = 303, + attack_EX1_049_FLAG = 304, + battlecry_EX1_049_FLAG = 305, + spell_aoe_EX1_400_FLAG = 306, + attack_effect_attachment_LOEA06_03e_FLAG = 307, + weapon_LOE_118_FLAG = 308, + idle_LOE_118_FLAG = 309, + weapon_destroyed_LOE_118_FLAG = 310, + weapon_attack_LOE_118_FLAG = 311, + onboard_LOE_118_FLAG = 312, + buff_LOEA06_03_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, + buff_CS2_022_FLAG = 324, + spell_aoe_CS1_112_FLAG = 325, + spell_aoe_CS2_026_FLAG = 326, + spell_aoe_CS2_032_FLAG = 327, }; #endif \ No newline at end of file diff --git a/hm_gameserver/src/include/proto/ent_gen.h b/hm_gameserver/src/include/proto/ent_gen.h index 8b90430..09b676f 100644 --- a/hm_gameserver/src/include/proto/ent_gen.h +++ b/hm_gameserver/src/include/proto/ent_gen.h @@ -1,7 +1,7 @@ #ifndef ENTGEN_H_ #define ENTGEN_H_ -#define MAX_ENTITIES 133 +#define MAX_ENTITIES 135 #define MAX_BEASTS 0 #define MAX_TOTEMS 0 #define MAX_TOTEMIC_CALL 0 diff --git a/hm_gameserver/src/include/sections.h b/hm_gameserver/src/include/sections.h index 30e46dc..3d681ec 100644 --- a/hm_gameserver/src/include/sections.h +++ b/hm_gameserver/src/include/sections.h @@ -18,22 +18,22 @@ #ifndef SECTIONS_H_ #define SECTIONS_H_ -#include -#include -#include -#include -#include +#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // built-in variables #define HSL_attacker (attacker) @@ -65,16 +65,15 @@ #define is_spell(m_dst) (flag(&m_dst->state, CARD_SPELL, FLAG_ISSET)) -#define cmp_cardname(m_card, m_src) (strcmp(m_card->entity->name, m_src) == 0) +#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)\ - (p->id == m_card->parent->deck_copy->controller) +#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_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_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_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_armor(m_dst, m_change) \ + m_dst->armor += m_change; \ + flag(&m_dst->state, MECHANICS_ARMOR, 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_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_board_count_by_name(m_deck, m_name) \ + (board_count_by_name(m_deck, m_name)) -#define hsl_cards_by_name(m_deck, m_name) (cards_by_name(HSL_player, m_deck, m_name, CARD_BOARD)) +#define hsl_board_minions_count(m_deck, m_attacker) \ + cards_get_board_count(m_deck, NULL, 0, m_attacker->id) -#define hsl_board_count_by_name(m_deck, m_name) (board_count_by_name(m_deck, m_name)) +#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_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_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);\ - \ - /*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;\ - } +#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);*/ \ + \ + 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)\ - card_get(HSL_deck_player, HSL_deck_opponent, 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,15 +405,15 @@ 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)\ - hsl_heal(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;\ #entity_attack(p, m_attacker, m_defender);\ @@ -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,17 +477,17 @@ 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)\ - flag(&(m_card->state), CARD_DIVINE_SHIELD, FLAG_SET); +#define hsl_divine_shield(m_card) \ + flag(&(m_card->state), CARD_DIVINE_SHIELD, FLAG_SET); /** * @brief Set flag to card @@ -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;\ - }\ - \ - 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; +#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; #endif diff --git a/hm_gameserver/src/proto/ent.c b/hm_gameserver/src/proto/ent.c index 81fb0e0..10f9383 100644 --- a/hm_gameserver/src/proto/ent.c +++ b/hm_gameserver/src/proto/ent.c @@ -61,78 +61,80 @@ struct ent_s entities[MAX_ENTITIES] = {{ "GAME_ENTITY", 11, 6, (void *)0, (void , { "CS2_108", 7, 11, (void *)0, (void *)0, "Culling Blade", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 10 }, { 48, 3 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 58 , { "EX1_614", 7, 14, (void *)0, (void *)0, "Terrorblade", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 200, 15 }, { 203, 5 }, { 202, 4 }, { 48, 6 }, { 114, 1 }, { 47, 5 }, { 45, 1 }, { 331, 0 }, { 330, 0 }, { 183, 3 }, { 321, 1 }, { 32, 1 }, { 251, 6 }, }} // 59 , { "EX1_371", 7, 10, (void *)0, (void *)0, "Guardian Angel", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 5 }, { 48, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 60 -, { "CS2_022e", 8, 3, (void *)0, (void *)0, "Polymorph E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 61 -, { "EX1_246e", 8, 3, (void *)0, (void *)0, "Hex E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 62 -, { "CS2_092e", 8, 3, (void *)0, (void *)0, "Blessing of Kings E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 63 -, { "CS2_087e", 8, 3, (void *)0, (void *)0, "Blessing of Might E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 64 -, { "CS2_004e", 8, 3, (void *)0, (void *)0, "Power Word: Shield E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 65 -, { "CS2_009e", 8, 3, (void *)0, (void *)0, "Mark of the Wild E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 66 -, { "CS2_041e", 8, 3, (void *)0, (void *)0, "Ancestral Infusion", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 67 -, { "CS2_045e", 8, 3, (void *)0, (void *)0, "Rockbiter Weapon E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 68 -, { "CS2_046e", 8, 3, (void *)0, (void *)0, "Bloodlust E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 69 -, { "CS2_005o", 8, 3, (void *)0, (void *)0, "Claw E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 70 -, { "CS2_105e", 8, 3, (void *)0, (void *)0, "Heroic Strike E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 71 -, { "CS2_011", 7, 10, (void *)0, (void *)0, "Enrage", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_011o", {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 2 }, { 48, 3 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 72 -, { "CS2_011o", 8, 6, (void *)0, (void *)0, "Enraged", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 202, 6 }, { 199, 2 }, { 338, 1 }, { 331, 1 }, { 330, 1 }, { 183, 2 }, }} // 73 -, { "HERO_01", 7, 6, (void *)0, (void *)0, "Warrior", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 74 -, { "HERO_02", 7, 6, (void *)0, (void *)0, "Shamman", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 75 -, { "HERO_04", 7, 6, (void *)0, (void *)0, "Paladin", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 76 -, { "HERO_05", 7, 6, (void *)0, (void *)0, "Hunter", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 77 -, { "HERO_06", 7, 6, (void *)0, (void *)0, "Druid", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 78 -, { "HERO_07", 7, 6, (void *)0, (void *)0, "Warlock", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 79 -, { "HERO_08", 7, 6, (void *)0, (void *)0, "Mage", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 80 -, { "HERO_01a", 8, 6, (void *)0, (void *)0, "King of Khaz Modan", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 81 -, { "HERO_04a", 8, 6, (void *)0, (void *)0, "Blood Knight Matriarch", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 82 -, { "HERO_05a", 8, 6, (void *)0, (void *)0, "Alleria Windranger", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 83 -, { "HERO_08a", 8, 6, (void *)0, (void *)0, "Guardian Medivh", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 84 -, { "HERO_08b", 8, 6, (void *)0, (void *)0, "Khadgar", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 85 -, { "CS2_012", 7, 11, (void *)0, (void *)0, "Swipes", {{0, 0, 0, 0, 0, 0, 0, 0}}, "AT_039e", {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 2 }, { 48, 2 }, { 47, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 86 -, { "CS2_072", 7, 12, (void *)0, (void *)0, "Backstab", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 7 }, { 48, 0 }, { 47, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 6 }, }} // 87 -, { "DS1_185", 7, 9, (void *)0, (void *)0, "Arcane Shot", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 3 }, { 48, 1 }, { 47, 2 }, { 183, 2 }, { 321, 1 }, { 251, 8 }, }} // 88 -, { "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 -, { "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 -, { "CS2_222", 7, 12, (void *)0, (void *)0, "Stormwind Champion", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_222o", {{ 201, 2 }, { 203, 1 }, { 202, 4 }, { 48, 7 }, { 47, 6 }, { 45, 6 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, { 362, 1 }, }} // 96 -, { "CS2_222o", 8, 4, (void *)0, (void *)0, "Might of Stormwind", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 183, 2 }, { 202, 6 }, { 331, 0 }, { 330, 1 }, }} // 97 -, { "EX1_084e", 8, 3, (void *)0, (void *)0, "Charge", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 98 -, { "DS1_175o", 8, 3, (void *)0, (void *)0, "Furious Howl", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 99 -, { "EX1_399e", 8, 3, (void *)0, (void *)0, "Berserking", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 100 -, { "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_022", 7, 11, (void *)0, (void *)0, "Polymorph", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_022e", {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 4 }, { 48, 4 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 61 +, { "CS2_022e", 8, 3, (void *)0, (void *)0, "Polymorph E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 62 +, { "EX1_246e", 8, 3, (void *)0, (void *)0, "Hex E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 63 +, { "CS2_092e", 8, 3, (void *)0, (void *)0, "Blessing of Kings E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 64 +, { "CS2_087e", 8, 3, (void *)0, (void *)0, "Blessing of Might E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 65 +, { "CS2_004e", 8, 3, (void *)0, (void *)0, "Power Word: Shield E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 66 +, { "CS2_009e", 8, 3, (void *)0, (void *)0, "Mark of the Wild E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 67 +, { "CS2_041e", 8, 3, (void *)0, (void *)0, "Ancestral Infusion", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 68 +, { "CS2_045e", 8, 3, (void *)0, (void *)0, "Rockbiter Weapon E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 69 +, { "CS2_046e", 8, 3, (void *)0, (void *)0, "Bloodlust E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 70 +, { "CS2_005o", 8, 3, (void *)0, (void *)0, "Claw E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 71 +, { "CS2_105e", 8, 3, (void *)0, (void *)0, "Heroic Strike E", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 72 +, { "CS2_011", 7, 10, (void *)0, (void *)0, "Enrage", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_011o", {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 2 }, { 48, 3 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 73 +, { "CS2_011o", 8, 6, (void *)0, (void *)0, "Enraged", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 202, 6 }, { 199, 2 }, { 338, 1 }, { 331, 1 }, { 330, 1 }, { 183, 2 }, }} // 74 +, { "HERO_01", 7, 6, (void *)0, (void *)0, "Warrior", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 75 +, { "HERO_02", 7, 6, (void *)0, (void *)0, "Shamman", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 76 +, { "HERO_04", 7, 6, (void *)0, (void *)0, "Paladin", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 77 +, { "HERO_05", 7, 6, (void *)0, (void *)0, "Hunter", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 78 +, { "HERO_06", 7, 6, (void *)0, (void *)0, "Druid", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 79 +, { "HERO_07", 7, 6, (void *)0, (void *)0, "Warlock", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 80 +, { "HERO_08", 7, 6, (void *)0, (void *)0, "Mage", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 81 +, { "HERO_01a", 8, 6, (void *)0, (void *)0, "King of Khaz Modan", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 82 +, { "HERO_04a", 8, 6, (void *)0, (void *)0, "Blood Knight Matriarch", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 83 +, { "HERO_05a", 8, 6, (void *)0, (void *)0, "Alleria Windranger", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 84 +, { "HERO_08a", 8, 6, (void *)0, (void *)0, "Guardian Medivh", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 85 +, { "HERO_08b", 8, 6, (void *)0, (void *)0, "Khadgar", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 12, 1 }, { 49, 1 }, { 45, 30 }, { 202, 3 }, }} // 86 +, { "CS2_012", 7, 11, (void *)0, (void *)0, "Swipes", {{0, 0, 0, 0, 0, 0, 0, 0}}, "AT_039e", {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 2 }, { 48, 2 }, { 47, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, }} // 87 +, { "CS2_072", 7, 12, (void *)0, (void *)0, "Backstab", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 7 }, { 48, 0 }, { 47, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 6 }, }} // 88 +, { "DS1_185", 7, 9, (void *)0, (void *)0, "Arcane Shot", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 2 }, { 202, 5 }, { 199, 3 }, { 48, 1 }, { 47, 2 }, { 183, 2 }, { 321, 1 }, { 251, 8 }, }} // 89 +, { "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 }, }} // 90 +, { "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 }, }} // 91 +, { "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 }, }} // 92 +, { "CS2_026", 7, 13, (void *)0, (void *)0, "Frost Nova", {{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 }, }} // 93 +, { "CS2_032", 7, 12, (void *)0, (void *)0, "Flamestrike", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 4 }, { 48, 7 }, { 47, 4 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 268, 2 }, { 251, 1 }, }} // 94 +, { "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 }, }} // 95 +, { "CS1_112", 7, 11, (void *)0, (void *)0, "Holy Nova", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 201, 3 }, { 203, 1 }, { 202, 5 }, { 199, 6 }, { 48, 5 }, { 47, 2 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 5 }, }} // 96 +, { "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 }, }} // 97 +, { "CS2_222", 7, 12, (void *)0, (void *)0, "Stormwind Champion", {{0, 0, 0, 0, 0, 0, 0, 0}}, "CS2_222o", {{ 201, 2 }, { 203, 1 }, { 202, 4 }, { 48, 7 }, { 47, 6 }, { 45, 6 }, { 331, 0 }, { 330, 0 }, { 183, 2 }, { 321, 1 }, { 251, 1 }, { 362, 1 }, }} // 98 +, { "CS2_222o", 8, 4, (void *)0, (void *)0, "Might of Stormwind", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 183, 2 }, { 202, 6 }, { 331, 0 }, { 330, 1 }, }} // 99 +, { "EX1_084e", 8, 3, (void *)0, (void *)0, "Charge", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 100 +, { "DS1_175o", 8, 3, (void *)0, (void *)0, "Furious Howl", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 101 +, { "EX1_399e", 8, 3, (void *)0, (void *)0, "Berserking", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 12, 1 }, { 202, 6 }, { 49, 6 }, }} // 102 +, { "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 }, }} // 103 +, { "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 }, }} // 104 +, { "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 }, }} // 105 +, { "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 }, }} // 106 +, { "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 }, }} // 107 +, { "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 }, }} // 108 +, { "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 }, }} // 109 +, { "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 }, }} // 110 +, { "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 }, }} // 111 +, { "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 }, }} // 112 +, { "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 }, }} // 113 +, { "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 }, }} // 114 +, { "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 }, }} // 115 +, { "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 }, }} // 116 +, { "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 }, }} // 117 +, { "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 }, }} // 118 +, { "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 }, }} // 119 +, { "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 }, }} // 120 +, { "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 }, }} // 121 +, { "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 }, }} // 122 +, { "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 }, }} // 123 +, { "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 }, }} // 124 +, { "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 }, }} // 125 +, { "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 }, }} // 126 +, { "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 }, }} // 127 +, { "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 }, }} // 128 +, { "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 }, }} // 129 +, { "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 }, }} // 130 +, { "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 }, }} // 131 +, { "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 }, }} // 132 +, { "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 }, }} // 133 +, { "NO_CARD", 7, 1, (void *)0, (void *)0, "No Card", {{0, 0, 0, 0, 0, 0, 0, 0}}, (void *)0, {{ 49, 2 }, }} // 134 , }; void entities_init() { @@ -151,7 +153,6 @@ void entities_init() { flag(&entities[51].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[54].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[55].flags, CARD_ATTACHMENT, FLAG_SET); - flag(&entities[61].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[62].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[63].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[64].flags, CARD_ATTACHMENT, FLAG_SET); @@ -162,8 +163,8 @@ void entities_init() { flag(&entities[69].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[70].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[71].flags, CARD_ATTACHMENT, FLAG_SET); - flag(&entities[73].flags, CARD_ATTACHMENT, FLAG_SET); - flag(&entities[74].flags, CARD_HERO, FLAG_SET); + flag(&entities[72].flags, CARD_ATTACHMENT, FLAG_SET); + flag(&entities[74].flags, CARD_ATTACHMENT, FLAG_SET); flag(&entities[75].flags, CARD_HERO, FLAG_SET); flag(&entities[76].flags, CARD_HERO, FLAG_SET); flag(&entities[77].flags, CARD_HERO, FLAG_SET); @@ -175,32 +176,33 @@ void entities_init() { flag(&entities[83].flags, CARD_HERO, FLAG_SET); flag(&entities[84].flags, CARD_HERO, FLAG_SET); flag(&entities[85].flags, CARD_HERO, FLAG_SET); - flag(&entities[95].flags, CARD_ATTACHMENT, FLAG_SET); + flag(&entities[86].flags, CARD_HERO, FLAG_SET); flag(&entities[97].flags, CARD_ATTACHMENT, FLAG_SET); - 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[101].flags, CARD_ATTACHMENT, FLAG_SET); + flag(&entities[102].flags, CARD_ATTACHMENT, FLAG_SET); + flag(&entities[108].flags, CARD_ATTACHMENT, FLAG_SET); + flag(&entities[111].flags, CARD_ATTACHMENT, FLAG_SET); + flag(&entities[115].flags, CARD_ATTACHMENT, 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[118].flags, CARD_UNCOLLECTIBLE, FLAG_SET); flag(&entities[128].flags, CARD_HEROPOWER, FLAG_SET); + flag(&entities[128].flags, CARD_TARGETING, 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_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[131].flags, CARD_UNCOLLECTIBLE, FLAG_SET); - flag(&entities[132].flags, CARD_UNCOLLECTIBLE, FLAG_SET); + flag(&entities[128].flags, CARD_HP_SPELL_DAMAGE, FLAG_SET); + flag(&entities[130].flags, CARD_HEROPOWER, FLAG_SET); + flag(&entities[130].flags, CARD_SPELL, FLAG_SET); + flag(&entities[130].flags, CARD_NONTARGET, FLAG_SET); + flag(&entities[130].flags, CARD_HP_REINFORCE, FLAG_SET); + flag(&entities[130].flags, CARD_SUMMON, FLAG_SET); + flag(&entities[131].flags, CARD_HEROPOWER, FLAG_SET); + flag(&entities[131].flags, CARD_SPELL, FLAG_SET); + flag(&entities[131].flags, CARD_NONTARGET, FLAG_SET); + flag(&entities[131].flags, CARD_HP_DAGGERMASTERY, FLAG_SET); + flag(&entities[131].flags, CARD_SUMMON, FLAG_SET); + flag(&entities[133].flags, CARD_UNCOLLECTIBLE, FLAG_SET); + flag(&entities[134].flags, CARD_UNCOLLECTIBLE, FLAG_SET); } const char *race_beast[MAX_BEASTS] = { }; diff --git a/hm_gameserver/src/proto/ent_sections.c b/hm_gameserver/src/proto/ent_sections.c index 52f4ba9..f531c11 100644 --- a/hm_gameserver/src/proto/ent_sections.c +++ b/hm_gameserver/src/proto/ent_sections.c @@ -7,13 +7,13 @@ void entities_init2() { flag(&entities[39].flags, spell_EX1_354_FLAG, FLAG_SET); flag(&entities[39].flags, CARD_TARGET_ALLY_MINIONS, FLAG_SET); flag(&entities[39].flags, CARD_TARGETING, FLAG_SET); - flag(&entities[86].flags, destroyed_CS2_012_FLAG, FLAG_SET); - flag(&entities[86].flags, CARD_LEVELUP, FLAG_SET); - flag(&entities[86].flags, CARD_PIERCE_MAGIC_IMMUNITY, FLAG_SET); - flag(&entities[86].flags, CARD_SPELL, FLAG_SET); - flag(&entities[86].flags, spell_CS2_012_FLAG, FLAG_SET); - flag(&entities[86].flags, CARD_TARGET_ENEMY_MINIONS, FLAG_SET); - flag(&entities[86].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[87].flags, destroyed_CS2_012_FLAG, FLAG_SET); + flag(&entities[87].flags, CARD_LEVELUP, FLAG_SET); + flag(&entities[87].flags, CARD_PIERCE_MAGIC_IMMUNITY, FLAG_SET); + flag(&entities[87].flags, CARD_SPELL, FLAG_SET); + flag(&entities[87].flags, spell_CS2_012_FLAG, FLAG_SET); + flag(&entities[87].flags, CARD_TARGET_ENEMY_MINIONS, FLAG_SET); + flag(&entities[87].flags, CARD_TARGETING, FLAG_SET); flag(&entities[60].flags, destroyed_EX1_371_FLAG, FLAG_SET); flag(&entities[60].flags, CARD_BUFF, FLAG_SET); flag(&entities[60].flags, CARD_SPELL, FLAG_SET); @@ -26,12 +26,12 @@ void entities_init2() { flag(&entities[38].flags, CARD_AOE, FLAG_SET); flag(&entities[38].flags, spell_aoe_EX1_312_FLAG, FLAG_SET); flag(&entities[38].flags, CARD_NONTARGET, FLAG_SET); - flag(&entities[72].flags, destroyed_CS2_011_FLAG, FLAG_SET); - flag(&entities[72].flags, CARD_BUFF, FLAG_SET); - flag(&entities[72].flags, CARD_SPELL, FLAG_SET); - flag(&entities[72].flags, buff_CS2_011_FLAG, FLAG_SET); - flag(&entities[72].flags, CARD_TARGET_URSA, FLAG_SET); - flag(&entities[72].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[73].flags, destroyed_CS2_011_FLAG, FLAG_SET); + flag(&entities[73].flags, CARD_BUFF, FLAG_SET); + flag(&entities[73].flags, CARD_SPELL, FLAG_SET); + flag(&entities[73].flags, buff_CS2_011_FLAG, FLAG_SET); + flag(&entities[73].flags, CARD_TARGET_URSA, FLAG_SET); + flag(&entities[73].flags, CARD_TARGETING, FLAG_SET); flag(&entities[50].flags, destroyed_OG_223_FLAG, FLAG_SET); flag(&entities[50].flags, CARD_BUFF, FLAG_SET); flag(&entities[50].flags, CARD_SPELL, FLAG_SET); @@ -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[132].flags, CARD_SPELL, FLAG_SET); + flag(&entities[132].flags, CARD_AOE, FLAG_SET); + flag(&entities[132].flags, CARD_WEAPON, FLAG_SET); + flag(&entities[132].flags, CARD_NONTARGET, FLAG_SET); + flag(&entities[132].flags, weapon_CS2_097_FLAG, FLAG_SET); + flag(&entities[132].flags, idle_CS2_097_FLAG, FLAG_SET); + flag(&entities[132].flags, weapon_destroyed_CS2_097_FLAG, FLAG_SET); + flag(&entities[132].flags, weapon_attack_CS2_097_FLAG, FLAG_SET); + flag(&entities[132].flags, onboard_CS2_097_FLAG, FLAG_SET); + flag(&entities[129].flags, CARD_HEROPOWER, FLAG_SET); + flag(&entities[129].flags, CARD_SPELL, FLAG_SET); + flag(&entities[129].flags, spell_CS1h_001_FLAG, FLAG_SET); + flag(&entities[129].flags, CARD_TARGET_ALL, FLAG_SET); + flag(&entities[129].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); @@ -91,22 +91,18 @@ void entities_init2() { flag(&entities[19].flags, CARD_AOE, FLAG_SET); flag(&entities[19].flags, spell_aoe_GVG_010_FLAG, FLAG_SET); flag(&entities[19].flags, CARD_NONTARGET, FLAG_SET); - flag(&entities[94].flags, CARD_SPELL, FLAG_SET); - flag(&entities[94].flags, CARD_AOE, FLAG_SET); - flag(&entities[94].flags, spell_aoe_CS1_112_FLAG, FLAG_SET); - flag(&entities[94].flags, CARD_NONTARGET, FLAG_SET); - flag(&entities[87].flags, CARD_SPELL, FLAG_SET); - flag(&entities[87].flags, spell_CS2_072_FLAG, FLAG_SET); - flag(&entities[87].flags, CARD_TARGET_UNDAMAGED_MINION, FLAG_SET); - flag(&entities[87].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[88].flags, CARD_SPELL, FLAG_SET); + flag(&entities[88].flags, spell_CS2_072_FLAG, FLAG_SET); + flag(&entities[88].flags, CARD_TARGET_UNDAMAGED_MINION, FLAG_SET); + flag(&entities[88].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[92].flags, CARD_BUFF, FLAG_SET); + flag(&entities[92].flags, CARD_SPELL, FLAG_SET); + flag(&entities[92].flags, buff_CS2_077_FLAG, FLAG_SET); + flag(&entities[92].flags, CARD_NONTARGET, FLAG_SET); flag(&entities[91].flags, CARD_BUFF, FLAG_SET); flag(&entities[91].flags, CARD_SPELL, FLAG_SET); - flag(&entities[91].flags, buff_CS2_077_FLAG, FLAG_SET); + flag(&entities[91].flags, buff_CS2_023_FLAG, FLAG_SET); flag(&entities[91].flags, CARD_NONTARGET, FLAG_SET); - flag(&entities[90].flags, CARD_BUFF, FLAG_SET); - flag(&entities[90].flags, CARD_SPELL, FLAG_SET); - flag(&entities[90].flags, buff_CS2_023_FLAG, FLAG_SET); - flag(&entities[90].flags, CARD_NONTARGET, FLAG_SET); flag(&entities[36].flags, attachment_attack_EX1_607e_FLAG, FLAG_SET); flag(&entities[6].flags, CARD_HERO, FLAG_SET); flag(&entities[5].flags, defender_TB_SPT_Boss_FLAG, FLAG_SET); @@ -124,17 +120,17 @@ void entities_init2() { flag(&entities[4].flags, CARD_SPELL, FLAG_SET); flag(&entities[4].flags, buff_PRO_001c_FLAG, FLAG_SET); flag(&entities[4].flags, CARD_NONTARGET, FLAG_SET); - flag(&entities[89].flags, CARD_FREEZE, FLAG_SET); - flag(&entities[89].flags, CARD_MINION, FLAG_SET); - flag(&entities[89].flags, attack_effect_CS2_024_FLAG, FLAG_SET); + flag(&entities[90].flags, CARD_FREEZE, FLAG_SET); + flag(&entities[90].flags, CARD_MINION, FLAG_SET); + flag(&entities[90].flags, attack_effect_CS2_024_FLAG, FLAG_SET); + flag(&entities[90].flags, CARD_SPELL, FLAG_SET); + flag(&entities[90].flags, spell_CS2_024_FLAG, FLAG_SET); + flag(&entities[90].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); + flag(&entities[90].flags, CARD_TARGETING, FLAG_SET); flag(&entities[89].flags, CARD_SPELL, FLAG_SET); - flag(&entities[89].flags, spell_CS2_024_FLAG, FLAG_SET); + flag(&entities[89].flags, spell_DS1_185_FLAG, FLAG_SET); flag(&entities[89].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); flag(&entities[89].flags, CARD_TARGETING, FLAG_SET); - flag(&entities[88].flags, CARD_SPELL, FLAG_SET); - flag(&entities[88].flags, spell_DS1_185_FLAG, FLAG_SET); - flag(&entities[88].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); - flag(&entities[88].flags, CARD_TARGETING, FLAG_SET); flag(&entities[53].flags, CARD_BUFF, FLAG_SET); flag(&entities[53].flags, CARD_SPELL, FLAG_SET); flag(&entities[53].flags, buff_CS2_063_FLAG, FLAG_SET); @@ -182,24 +178,24 @@ void entities_init2() { flag(&entities[20].flags, CARD_SPELL, FLAG_SET); flag(&entities[20].flags, buff_OG_090_FLAG, FLAG_SET); flag(&entities[20].flags, CARD_NONTARGET, FLAG_SET); - flag(&entities[103].flags, CARD_MINION, FLAG_SET); - flag(&entities[103].flags, CARD_TARGETING, FLAG_SET); - flag(&entities[103].flags, attack_EX1_011_FLAG, FLAG_SET); - flag(&entities[103].flags, CARD_BATTLECRY, FLAG_SET); - flag(&entities[103].flags, battlecry_EX1_011_FLAG, FLAG_SET); - flag(&entities[103].flags, CARD_TARGET_ALLY_BOARD, FLAG_SET); - flag(&entities[103].flags, CARD_TARGETING_BC, FLAG_SET); + flag(&entities[105].flags, CARD_MINION, FLAG_SET); + flag(&entities[105].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[105].flags, attack_EX1_011_FLAG, FLAG_SET); + flag(&entities[105].flags, CARD_BATTLECRY, FLAG_SET); + flag(&entities[105].flags, battlecry_EX1_011_FLAG, FLAG_SET); + flag(&entities[105].flags, CARD_TARGET_ALLY_BOARD, FLAG_SET); + flag(&entities[105].flags, CARD_TARGETING_BC, FLAG_SET); flag(&entities[10].flags, endturn_EX1_105_FLAG, FLAG_SET); flag(&entities[10].flags, CARD_MINION, FLAG_SET); flag(&entities[10].flags, CARD_TARGETING, FLAG_SET); flag(&entities[10].flags, attack_EX1_105_FLAG, FLAG_SET); - flag(&entities[101].flags, CARD_MINION, FLAG_SET); - flag(&entities[101].flags, CARD_TARGETING, FLAG_SET); - flag(&entities[101].flags, attack_CS2_088_FLAG, FLAG_SET); - flag(&entities[101].flags, CARD_BATTLECRY, FLAG_SET); - flag(&entities[101].flags, battlecry_CS2_088_FLAG, FLAG_SET); - flag(&entities[101].flags, CARD_NONTARGET_BC, FLAG_SET); - flag(&entities[101].flags, onboard_CS2_088_FLAG, FLAG_SET); + flag(&entities[103].flags, CARD_MINION, FLAG_SET); + flag(&entities[103].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[103].flags, attack_CS2_088_FLAG, FLAG_SET); + flag(&entities[103].flags, CARD_BATTLECRY, FLAG_SET); + flag(&entities[103].flags, battlecry_CS2_088_FLAG, FLAG_SET); + flag(&entities[103].flags, CARD_NONTARGET_BC, FLAG_SET); + flag(&entities[103].flags, onboard_CS2_088_FLAG, FLAG_SET); flag(&entities[18].flags, CARD_MINION, FLAG_SET); flag(&entities[18].flags, CARD_TARGETING, FLAG_SET); flag(&entities[18].flags, attack_EX1_158t_FLAG, FLAG_SET); @@ -209,60 +205,60 @@ 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[124].flags, attack_CS2_168_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_201_FLAG, FLAG_SET); + flag(&entities[126].flags, CARD_MINION, FLAG_SET); + flag(&entities[126].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[126].flags, attack_CS2_200_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_119_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_172_FLAG, FLAG_SET); + flag(&entities[113].flags, CARD_MINION, FLAG_SET); + flag(&entities[113].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[113].flags, attack_CS2_171_FLAG, FLAG_SET); + flag(&entities[127].flags, CARD_MINION, FLAG_SET); + flag(&entities[127].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[127].flags, attack_CS2_182_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_120_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[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[116].flags, attack_EX1_506a_FLAG, FLAG_SET); + flag(&entities[106].flags, CARD_MINION, FLAG_SET); + flag(&entities[106].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[106].flags, attack_CS2_042_FLAG, FLAG_SET); + flag(&entities[106].flags, CARD_BATTLECRY, FLAG_SET); + flag(&entities[106].flags, battlecry_CS2_042_FLAG, FLAG_SET); + flag(&entities[106].flags, CARD_TARGET_BOARD, FLAG_SET); + flag(&entities[106].flags, CARD_TARGETING_BC, FLAG_SET); + flag(&entities[118].flags, CARD_TAUNT, FLAG_SET); + flag(&entities[118].flags, CARD_MINION, FLAG_SET); + flag(&entities[118].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[118].flags, attack_CS2_boar_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_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[121].flags, destroyed_CS2_118_FLAG, FLAG_SET); + flag(&entities[121].flags, defender_CS2_118_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_118_FLAG, FLAG_SET); + flag(&entities[121].flags, onboard_CS2_118_FLAG, FLAG_SET); + flag(&entities[121].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); @@ -274,13 +270,13 @@ void entities_init2() { flag(&entities[59].flags, battlecry_EX1_614_FLAG, FLAG_SET); flag(&entities[59].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); flag(&entities[59].flags, CARD_TARGETING_BC, FLAG_SET); - flag(&entities[102].flags, CARD_MINION, FLAG_SET); - flag(&entities[102].flags, CARD_TARGETING, FLAG_SET); - flag(&entities[102].flags, attack_EX1_593_FLAG, FLAG_SET); - flag(&entities[102].flags, CARD_BATTLECRY, FLAG_SET); - flag(&entities[102].flags, battlecry_EX1_593_FLAG, FLAG_SET); - flag(&entities[102].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); - flag(&entities[102].flags, CARD_TARGETING_BC, FLAG_SET); + flag(&entities[104].flags, CARD_MINION, FLAG_SET); + flag(&entities[104].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[104].flags, attack_EX1_593_FLAG, FLAG_SET); + flag(&entities[104].flags, CARD_BATTLECRY, FLAG_SET); + flag(&entities[104].flags, battlecry_EX1_593_FLAG, FLAG_SET); + flag(&entities[104].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); + flag(&entities[104].flags, CARD_TARGETING_BC, FLAG_SET); flag(&entities[14].flags, CARD_MINION, FLAG_SET); flag(&entities[14].flags, CARD_TARGETING, FLAG_SET); flag(&entities[14].flags, attack_GVG_105_FLAG, FLAG_SET); @@ -299,12 +295,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[114].flags, destroyed_CS2_065_FLAG, FLAG_SET); + flag(&entities[114].flags, CARD_BOSS, FLAG_SET); + flag(&entities[114].flags, CARD_MINION, FLAG_SET); + flag(&entities[114].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[114].flags, attack_CS2_065_FLAG, FLAG_SET); + flag(&entities[114].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 +321,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[112].flags, destroyed_NEW1_011_FLAG, FLAG_SET); + flag(&entities[112].flags, defender_NEW1_011_FLAG, FLAG_SET); + flag(&entities[112].flags, CARD_MINION, FLAG_SET); + flag(&entities[112].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[112].flags, attack_NEW1_011_FLAG, FLAG_SET); + flag(&entities[112].flags, onboard_NEW1_011_FLAG, FLAG_SET); + flag(&entities[112].flags, CARD_BOSS, FLAG_SET); + flag(&entities[107].flags, CARD_MINION, FLAG_SET); + flag(&entities[107].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[107].flags, attack_CS2_226_FLAG, FLAG_SET); + flag(&entities[107].flags, CARD_BATTLECRY, FLAG_SET); + flag(&entities[107].flags, battlecry_CS2_226_FLAG, FLAG_SET); + flag(&entities[107].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[110].flags, CARD_BUFF, FLAG_SET); + flag(&entities[110].flags, CARD_SPELL, FLAG_SET); + flag(&entities[110].flags, buff_EX1_581_FLAG, FLAG_SET); + flag(&entities[110].flags, CARD_TARGET_MINIONS, FLAG_SET); + flag(&entities[110].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); @@ -353,12 +349,12 @@ void entities_init2() { flag(&entities[11].flags, battlecry_EX1_049_FLAG, FLAG_SET); flag(&entities[11].flags, CARD_TARGET_ALLY_MINIONS, FLAG_SET); flag(&entities[11].flags, CARD_TARGETING_BC, FLAG_SET); - flag(&entities[93].flags, CARD_LEVELUP, FLAG_SET); - flag(&entities[93].flags, CARD_PIERCE_MAGIC_IMMUNITY, FLAG_SET); - flag(&entities[93].flags, CARD_SPELL, FLAG_SET); - flag(&entities[93].flags, CARD_AOE, FLAG_SET); - flag(&entities[93].flags, spell_aoe_EX1_400_FLAG, FLAG_SET); - flag(&entities[93].flags, CARD_NONTARGET, FLAG_SET); + flag(&entities[95].flags, CARD_LEVELUP, FLAG_SET); + flag(&entities[95].flags, CARD_PIERCE_MAGIC_IMMUNITY, FLAG_SET); + flag(&entities[95].flags, CARD_SPELL, FLAG_SET); + flag(&entities[95].flags, CARD_AOE, FLAG_SET); + flag(&entities[95].flags, spell_aoe_EX1_400_FLAG, FLAG_SET); + flag(&entities[95].flags, CARD_NONTARGET, FLAG_SET); flag(&entities[26].flags, attack_effect_attachment_LOEA06_03e_FLAG, FLAG_SET); flag(&entities[30].flags, CARD_SPELL, FLAG_SET); flag(&entities[30].flags, CARD_AOE, FLAG_SET); @@ -374,26 +370,39 @@ void entities_init2() { flag(&entities[25].flags, buff_LOEA06_03_FLAG, FLAG_SET); flag(&entities[25].flags, CARD_TARGET_ENEMY_BOARD, FLAG_SET); flag(&entities[25].flags, CARD_TARGETING, FLAG_SET); - flag(&entities[92].flags, CARD_SPELL, FLAG_SET); - 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[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[109].flags, CARD_MINION, FLAG_SET); + flag(&entities[109].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[109].flags, attack_EX1_306_FLAG, FLAG_SET); + flag(&entities[109].flags, CARD_BATTLECRY, FLAG_SET); + flag(&entities[109].flags, battlecry_EX1_306_FLAG, FLAG_SET); + flag(&entities[109].flags, CARD_NONTARGET_BC, FLAG_SET); + flag(&entities[98].flags, destroyed_CS2_222_FLAG, FLAG_SET); + flag(&entities[98].flags, CARD_MINION, FLAG_SET); + flag(&entities[98].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[98].flags, attack_CS2_222_FLAG, FLAG_SET); + flag(&entities[98].flags, idle_CS2_222_FLAG, FLAG_SET); + flag(&entities[98].flags, onboard_CS2_222_FLAG, FLAG_SET); + flag(&entities[122].flags, destroyed_CS2_231_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_231_FLAG, FLAG_SET); + flag(&entities[122].flags, idle_CS2_231_FLAG, FLAG_SET); + flag(&entities[122].flags, onboard_CS2_231_FLAG, FLAG_SET); + flag(&entities[61].flags, CARD_BUFF, FLAG_SET); + flag(&entities[61].flags, CARD_SPELL, FLAG_SET); + flag(&entities[61].flags, buff_CS2_022_FLAG, FLAG_SET); + flag(&entities[61].flags, CARD_TARGET_ENEMY_MINIONS, FLAG_SET); + flag(&entities[61].flags, CARD_TARGETING, FLAG_SET); + flag(&entities[96].flags, CARD_SPELL, FLAG_SET); + flag(&entities[96].flags, CARD_AOE, FLAG_SET); + flag(&entities[96].flags, spell_aoe_CS1_112_FLAG, FLAG_SET); + flag(&entities[96].flags, CARD_NONTARGET, FLAG_SET); + flag(&entities[93].flags, CARD_SPELL, FLAG_SET); + flag(&entities[93].flags, CARD_AOE, FLAG_SET); + flag(&entities[93].flags, spell_aoe_CS2_026_FLAG, FLAG_SET); + flag(&entities[93].flags, CARD_NONTARGET, FLAG_SET); + flag(&entities[94].flags, CARD_SPELL, FLAG_SET); + flag(&entities[94].flags, CARD_AOE, FLAG_SET); + flag(&entities[94].flags, spell_aoe_CS2_032_FLAG, FLAG_SET); + flag(&entities[94].flags, CARD_NONTARGET, FLAG_SET); } diff --git a/hm_lobbyserver/hm_lobbyserver b/hm_lobbyserver/hm_lobbyserver index 5afb42c..6f0c4b3 100755 Binary files a/hm_lobbyserver/hm_lobbyserver and b/hm_lobbyserver/hm_lobbyserver differ diff --git a/hm_nginx/auto/options b/hm_nginx/auto/options index 763871f..3789d7d 100644 --- a/hm_nginx/auto/options +++ b/hm_nginx/auto/options @@ -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= diff --git a/hm_nginx/objs/Makefile b/hm_nginx/objs/Makefile index 1be0f59..b0c364a 100644 --- a/hm_nginx/objs/Makefile +++ b/hm_nginx/objs/Makefile @@ -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_20240301_103609.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' diff --git a/hm_nginx/objs/autoconf.err b/hm_nginx/objs/autoconf.err index 0e1dbf9..8f61353 100644 --- a/hm_nginx/objs/autoconf.err +++ b/hm_nginx/objs/autoconf.err @@ -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/cci6t9qL.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/ccfAmoHn.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/ccwcVzVd.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/ccvM3t1L.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/ccZ1aKO6.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 diff --git a/hm_nginx/objs/nginx b/hm_nginx/objs/nginx index cc9f6c0..65e1226 100755 Binary files a/hm_nginx/objs/nginx and b/hm_nginx/objs/nginx differ diff --git a/hm_nginx/objs/nginx.8 b/hm_nginx/objs/nginx.8 index 93769b5..630669d 100644 --- a/hm_nginx/objs/nginx.8 +++ b/hm_nginx/objs/nginx.8 @@ -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_20240301_103609.log Error log file. .El .Sh EXIT STATUS diff --git a/hm_nginx/objs/ngx_auto_config.h b/hm_nginx/objs/ngx_auto_config.h index be2b6e4..ca35fd9 100644 --- a/hm_nginx/objs/ngx_auto_config.h +++ b/hm_nginx/objs/ngx_auto_config.h @@ -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_20240301_103609.log" #endif diff --git a/hm_sunwell/examples/carddata b/hm_sunwell/examples/carddata new file mode 100644 index 0000000..c4c4fe0 --- /dev/null +++ b/hm_sunwell/examples/carddata @@ -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." } \ No newline at end of file diff --git a/hm_sunwell/examples/server.js b/hm_sunwell/examples/server.js index ddb4e92..0915544 100644 --- a/hm_sunwell/examples/server.js +++ b/hm_sunwell/examples/server.js @@ -1,48 +1,55 @@ -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) { - var width = 400; +app.get("/", function(req, res) { + var width = 400; - var card_name = ""; - var card_data = ""; - var fs = require('fs'); + var card_name = ""; + var card_data = ""; + var fs = require("fs"); - var obj; - fs.readFile(process.cwd() + '/examples/carddata', 'utf8', function (err, data) { - if (err) throw err; - obj = JSON.parse(data); + var obj; + fs.readFile( + process.cwd() + "/examples/carddata", + "utf8", + function(err, data) { + if (err) throw err; + obj = JSON.parse(data); - var card = sunwell.createCard(obj, width, function(err, buffer) { - if (err) next(err); + var card = sunwell.createCard(obj, width, function(err, buffer) { + if (err) next(err); - res.writeHead(200, { - //'Cache-Control': 'max-age=86400', - 'Content-Type': 'image/png' - }); + res.writeHead(200, { + //'Cache-Control': 'max-age=86400', + "Content-Type": "image/png", + }); - res.write(buffer); - res.end(); + res.write(buffer); + res.end(); - fs.writeFile(process.cwd() + '/../hm_web/static/custom/' + obj['id'] + '.jpg', buffer, function(err) { - if(err) { - return console.log(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) { - next(err); + next(err); }); 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); }); diff --git a/hm_sunwell/package.json b/hm_sunwell/package.json index 764f2c0..974f271 100644 --- a/hm_sunwell/package.json +++ b/hm_sunwell/package.json @@ -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" diff --git a/hm_web/app.py b/hm_web/app.py index ffb4af5..f98d337 100755 --- a/hm_web/app.py +++ b/hm_web/app.py @@ -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: diff --git a/hm_web/customMod b/hm_web/customMod new file mode 100644 index 0000000..77b07a6 --- /dev/null +++ b/hm_web/customMod @@ -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 +name="Polymorph" card=CS2_022 tags={183:2,202:5,201:3,199:4,203:2,48:4,251:1,268:2,321:1,330:0,331:0,} custom=1 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="Frost Nova" 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 +name="Flamestrike" card=CS2_032 tags={183:2,202:5,201:3,199:4,203:1,48:7,251:1,47:4,268:2,321:1,330:0,331:0,} custom=1 + +# 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="Holy Nova" card=CS1_112 tags={183:2,202:5,201:3,199:6,203:1,48:5,251:5,47:2,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 +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 + +# 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) diff --git a/hm_web/sessions/2b8e2f2e270e7552ec125254d45848dec7f3fc02 b/hm_web/sessions/2b8e2f2e270e7552ec125254d45848dec7f3fc02 new file mode 100644 index 0000000..19d4288 --- /dev/null +++ b/hm_web/sessions/2b8e2f2e270e7552ec125254d45848dec7f3fc02 @@ -0,0 +1,2 @@ +KGRwMQpTJ2lwJwpwMgpWMTcyLjE5LjAuMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lvbl9p +ZCcKcDUKUycyYjhlMmYyZTI3MGU3NTUyZWMxMjUyNTRkNDU4NDhkZWM3ZjNmYzAyJwpwNgpzLg== diff --git a/hm_web/sessions/56759c1b2ee4d6a9440115345cfd9d2d70df082b b/hm_web/sessions/56759c1b2ee4d6a9440115345cfd9d2d70df082b deleted file mode 100644 index 11394ff..0000000 --- a/hm_web/sessions/56759c1b2ee4d6a9440115345cfd9d2d70df082b +++ /dev/null @@ -1,3 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpWMTcyLjE4LjAuMQpwMwpzUydzZWNyZXQnCnA0ClZzR0lhSUoKcDUKc1Mn -dXNlcicKcDYKVnRlc3QKcDcKc1Mnc2Vzc2lvbl9pZCcKcDgKUyc1Njc1OWMxYjJlZTRkNmE5NDQw -MTE1MzQ1Y2ZkOWQyZDcwZGYwODJiJwpwOQpzUydsb2dpbicKcDEwCkkxCnMu diff --git a/hm_web/sessions/7a14b38114446e5672270909b449acf7b5660e85 b/hm_web/sessions/7a14b38114446e5672270909b449acf7b5660e85 deleted file mode 100644 index 65a802d..0000000 --- a/hm_web/sessions/7a14b38114446e5672270909b449acf7b5660e85 +++ /dev/null @@ -1,3 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpWMTkyLjE2OC4zMi4xCnAzCnNTJ2xvZ2luJwpwNApJMApzUyd1c2VyJwpw -NQpTJycKc1Mnc2Vzc2lvbl9pZCcKcDYKUyc3YTE0YjM4MTE0NDQ2ZTU2NzIyNzA5MDliNDQ5YWNm -N2I1NjYwZTg1JwpwNwpzLg== diff --git a/hm_web/sessions/8c964dc8623db6cde86f5a568f6159265ff42be0 b/hm_web/sessions/8c964dc8623db6cde86f5a568f6159265ff42be0 deleted file mode 100644 index e1d2048..0000000 --- a/hm_web/sessions/8c964dc8623db6cde86f5a568f6159265ff42be0 +++ /dev/null @@ -1,2 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpWMTkyLjE2OC4xNi4xCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u -X2lkJwpwNQpTJzhjOTY0ZGM4NjIzZGI2Y2RlODZmNWE1NjhmNjE1OTI2NWZmNDJiZTAnCnA2CnMu diff --git a/hm_web/sessions/9444f3ab1ead649951e963aae8d8652e7483c9f8 b/hm_web/sessions/9444f3ab1ead649951e963aae8d8652e7483c9f8 deleted file mode 100644 index de839ea..0000000 --- a/hm_web/sessions/9444f3ab1ead649951e963aae8d8652e7483c9f8 +++ /dev/null @@ -1,2 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpWMTkyLjE2OC4xNi4xCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u -X2lkJwpwNQpTJzk0NDRmM2FiMWVhZDY0OTk1MWU5NjNhYWU4ZDg2NTJlNzQ4M2M5ZjgnCnA2CnMu diff --git a/hm_web/sessions/9ab79a7c70bf8997c7a5ceade6fe98f3a9ad09cd b/hm_web/sessions/9ab79a7c70bf8997c7a5ceade6fe98f3a9ad09cd deleted file mode 100644 index 0f30701..0000000 --- a/hm_web/sessions/9ab79a7c70bf8997c7a5ceade6fe98f3a9ad09cd +++ /dev/null @@ -1,2 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpWMTkyLjE2OC40OC4xCnAzCnNTJ2xvZ2luJwpwNApJMApzUydzZXNzaW9u -X2lkJwpwNQpTJzlhYjc5YTdjNzBiZjg5OTdjN2E1Y2VhZGU2ZmU5OGYzYTlhZDA5Y2QnCnA2CnMu diff --git a/hm_web/sessions/aacc1c260f50bbaf00ae28258591a9800c31b138 b/hm_web/sessions/aacc1c260f50bbaf00ae28258591a9800c31b138 deleted file mode 100644 index 3f9b969..0000000 --- a/hm_web/sessions/aacc1c260f50bbaf00ae28258591a9800c31b138 +++ /dev/null @@ -1,2 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpWMTcyLjE4LjAuMQpwMwpzUydsb2dpbicKcDQKSTAKc1Mnc2Vzc2lvbl9p -ZCcKcDUKUydhYWNjMWMyNjBmNTBiYmFmMDBhZTI4MjU4NTkxYTk4MDBjMzFiMTM4JwpwNgpzLg== diff --git a/hm_web/sessions/b5eba9f65cb33dcd0a7dbb9ab41f6305d2d7642f b/hm_web/sessions/b5eba9f65cb33dcd0a7dbb9ab41f6305d2d7642f deleted file mode 100644 index c898f83..0000000 --- a/hm_web/sessions/b5eba9f65cb33dcd0a7dbb9ab41f6305d2d7642f +++ /dev/null @@ -1,2 +0,0 @@ -KGRwMQpTJ2lwJwpwMgpOc1MnbG9naW4nCnAzCkkwCnNTJ3Nlc3Npb25faWQnCnA0ClMnYjVlYmE5 -ZjY1Y2IzM2RjZDBhN2RiYjlhYjQxZjYzMDVkMmQ3NjQyZicKcDUKcy4= diff --git a/hm_web/static/cardxml0.unity3d b/hm_web/static/cardxml0.unity3d index 31be099..c4d2ffb 100644 Binary files a/hm_web/static/cardxml0.unity3d and b/hm_web/static/cardxml0.unity3d differ diff --git a/hm_web/static/checksum b/hm_web/static/checksum index 07a401d..ec3b17f 100644 --- a/hm_web/static/checksum +++ b/hm_web/static/checksum @@ -1 +1 @@ -74d2dfa2dabf9111e06635fa618a438c ./static/cardxml0.unity3d +9dbdd6890d62c1d3f1126d165afa8774 ./static/cardxml0.unity3d diff --git a/hm_web/static/custom/CS1_112.jpg b/hm_web/static/custom/CS1_112.jpg index d538ede..b003641 100644 Binary files a/hm_web/static/custom/CS1_112.jpg and b/hm_web/static/custom/CS1_112.jpg differ diff --git a/hm_web/static/custom/CS2_022.jpg b/hm_web/static/custom/CS2_022.jpg new file mode 100644 index 0000000..16e3eb3 Binary files /dev/null and b/hm_web/static/custom/CS2_022.jpg differ diff --git a/hm_web/static/custom/CS2_026.jpg b/hm_web/static/custom/CS2_026.jpg index 844d299..6610b7d 100644 Binary files a/hm_web/static/custom/CS2_026.jpg and b/hm_web/static/custom/CS2_026.jpg differ diff --git a/hm_web/static/custom/CS2_032.jpg b/hm_web/static/custom/CS2_032.jpg new file mode 100644 index 0000000..3a89a5a Binary files /dev/null and b/hm_web/static/custom/CS2_032.jpg differ diff --git a/hm_web/test b/hm_web/test new file mode 100644 index 0000000..c4d2ffb Binary files /dev/null and b/hm_web/test differ