Page MenuHomePhabricator (Chris)

No OneTemporary

Size
254 KB
Referenced Files
None
Subscribers
None
diff --git a/data/labels.txt b/data/labels.txt
index 3940e83..af8737f 100644
--- a/data/labels.txt
+++ b/data/labels.txt
@@ -1,2857 +1,2871 @@
[english]
start_new_game#Start a new game
start_desc#Old game will be destroyed
restore#Restore game
at#at
level#level
begin_journey#Begin your journey in a new dungeon
config_keys#Configure keys
redef_input#Redefine player's input
exit_game#Exit game
return_to_desktop#Return to the desktop
key_configuration#Keys' configuration
key_configuration_desc#Please configure the keys
key_configuration_insert#[insert Key]
key_configuration_done#DONE
key_move_up#move up
key_move_down#move down
key_move_left#move left
key_move_right#move right
key_fire_up#fire up
key_fire_down#fire down
key_fire_left#fire left
key_fire_right#fire right
key_fire_select#fire select
key_time#time control
key_fire#fire (one button)
key_spell#cast a spell
configure_game#Configuration
configure_game_desc#Changes game options
config_back#Back
config_back_desc#Back to the main menu
config_lang#Language
config_lang_desc#Choose with left and right arrows
english#English
french#French
keys_move#move
keys_fire#fire
keys_select_1#fire
keys_select_2#selector
keys_time#time control
tuto_reset#Tutorial reset
tuto_reset_desc#Resets the tutorial
menu_continue#Continue
menu_continue_desc#Continue the game
menu_save_quit#Save and quit
menu_save_quit_desc#Save and return to main screen
menu_quit#Quit without saving
menu_quit_desc#Return to main screen without saving
play_again#Press [ENTER] to play again / [ESC] to go back to the menu
items_found#Items
monsters_killed#Monsters
congratulations_1#CONGRATULATIONS!
congratulations_2#You've challenged this demo and kill the bosses!
congratulations_3#See you soon for new adventures!
by#by
critical#CRITICAL
poison#POISON
merchant_speech_0#Best price in the entire dungeon!
merchant_speech_1#Welcome to the Pawn'n'Witches shop!
merchant_speech_2#Have a look at our merchandise!
enemy_butcher#Pigman Butcher
enemy_giant_slime#Giant Slime
enemy_rat_king#Wererat King
enemy_giant_spider#Giant Spider
item_copper#Copper coin
item_copper_desc#A copper coin (value 1)
item_silver#Silver coin
item_silver_desc#A silver coin (value 5)
item_gold#Gold coin
item_gold_desc#A gold coin (value 10)
item_titan_heart#Titan's Heart
item_titan_heart_desc#Increases Max HP
item_elven_cookie#Elven Cookie
item_elven_cookie_desc#Restores and increases Max HP
item_apple#Apple
item_apple_desc#Restores 3 HP
item_apple_green#Green apple
item_apple_green_desc#Restores 3 HP and cures poison
item_bread#Bread
item_bread_desc#Restores 7 HP
item_cheese#Cheese
item_cheese_desc#Restores 15 HP
item_boss_key#Boss Key
item_boss_key_desc#Opens the Boss gate
item_sorcerer_hat#Sorcerer's Hat
item_sorcerer_hat_desc#Increases fire rate
item_velvet_boots#Velvet Boots
item_velvet_boots_desc#Increases speed
item_spell_dual#Spell : Dual bolts
item_spell_dual_desc#Shoots two bolts
item_displacement_gloves#Displacement Gloves
item_displacement_gloves_desc#Player's velocity impacts bolt's one
item_staff_desc#Increases bolt's speed and damage
item_fairy#Fairy Lilly
item_fairy_desc#Helps you in the dungeon
item_leather_belt#Leather belt
item_leather_belt_desc#Increases fire rate
item_blood_snake#Blood Snake
item_blood_snake_desc#Increases damage
item_gem_ice#Ice Gem
item_gem_ice_desc#Ice attack (freeze)
item_gem_illusion#illusion Gem
item_gem_illusion_desc#illusion attack (ignores walls and armor)
item_gem_stone#Stone Gem
item_gem_stone_desc#Stone attack (repulse)
item_gem_lightning#Lightning Gem
item_gem_lightning_desc#Lightning attack (bouncing)
item_fairy_ice#Fairy Natasha
item_fairy_ice_desc#Helps you in the dungeon
item_ring_ice#Sapphire Ring
item_ring_ice_desc#Increases ice power
item_ring_stone_desc#Increases stone power
item_ring_lightning_desc#Increases lightning power
item_ring_illusion_desc#Increases illusion power
item_spell_triple#Spell : Triple bolts
item_spell_triple_desc#Shoots three bolts
item_fairy_fire#Fairy Alicia
item_fairy_fire_desc#Helps you in the dungeon
item_fairy_target#Fairy Scarlett
item_fairy_target_desc#Helps you in the dungeon
item_robe_magician#Magician's Robe
item_robe_magician_desc#Increases armor
item_gem_fire#Fire Gem
item_gem_fire_desc#Fire attack (more damages)
item_ring_fire#Ruby Ring
item_ring_fire_desc#Increases fire power
item_manual_staff#Staff's Manual
item_manual_staff_desc#Increases fire range
item_spell_teleport#Spell: Teleport
item_spell_teleport_desc#Cast to teleport within the room
item_spell_slime_explode#Spell: Invoke Slime
item_spell_slime_explode_desc#Cast to invoke an explosive slime
item_spell_fireball#Spell: Fireball
item_spell_fireball_desc#Cast to launch a fireball
item_spell_freeze#Spell: Freeze monsters
item_spell_freeze_desc#Cast to freeze monsters
item_spell_earthquake#Spell: Earthquake
item_spell_earthquake_desc#Cast to make the dungeon shake
item_spell_protection#Spell: Magic shield
item_spell_protection_desc#Cast to summon a magic shield
item_manual_slime#Manual of Slime Mastery
item_manual_slime_desc#Slimes don't aim at you anymore
item_spell_dual_quick#Spellbook of Quick Dual bolts
item_spell_dual_quick_desc#Shoots two bolts (quick)
item_spell_triple_quick#Spellbook of Quick Triple bolts
item_spell_triple_quick_desc#Shoots three bolts (quick)
item_manual_health#Health's Manual
item_manual_health_desc#Health items give more HP
item_rear_shot#Staff cap
item_rear_shot_desc#Shots a rear bolt
item_book_random_shot#Spellbook of Random Shot
item_book_random_shot_desc#Shots a bolt in a random direction
item_spell_web#Spell: Spider Web
item_spell_web_desc#Cast to throw spider webs
item_book_magic_i#Book of magic - Tome I
item_book_magic_i_desc#Decreases spell's cooldown
item_book_magic_ii#Book of magic - Tome II
item_book_magic_ii_desc#Increases spell's power
item_sulfur#Sulfur
item_sulfur_desc#Can make corpses explode
spell_teleport#teleport
spell_slime_explode#invoke slime
spell_fireball#fireball
spell_freeze#freeze monsters
spell_earthquake#earthquake
spell_protection#magic shield
spell_web#spider web
msg_level1_0#Your quest begins!
msg_level1_1#"Witches have abducted the Archmage's daughter and brought her in their lair.
msg_level1_2#I have to recover her!"
msg_level2_0#The Archmage's daughter
msg_level2_1#"I'm coming right now to rescue you!
msg_level2_2#Hopefully, she's safe and sound..."
msg_level3_0#The Archmage's daughter
msg_level3_1#"Did I ever tell you?
msg_level3_2#The Archmage's daughter is the sweetest girl of the Magic Academy!"
msg_level4_0#The Archmage
msg_level4_1#"The Archmage is a very wise man, and also my mentor.
msg_level4_2#He's taught me we live in the best of the worlds."
msg_level5_0#The Archmage's daughter
msg_level5_1#"I remember the Archmage's daughter and me, back in the Magic Academy.
msg_level5_2#We used to play at the healer mage, hi hi!"
msg_level6_0#The Archmage
msg_level6_1#"My parents died when I was a baby.
msg_level6_2#The Archmage has raised me like his own son."
msg_rats_bats_0#Monsters
msg_rats_bats_1#"Hey! Why do we always have to exterminate rats or bats
msg_rats_bats_2#in these Rogue games ?"
msg_snakes_0#Snakes
msg_snakes_1#"I HATE snakes!"
msg_witches_0#Witches
msg_witches_1#"B... Witches!!!"
msg_gold_0#Gold
msg_gold_1#"♫ Money money money ♫
msg_gold_2#I wonder if I can buy useful items in this dungeon..."
msg_familiar_0#Fairies
msg_familiar_1#"Oh! I've got company!
msg_familiar_2#I hope I'll find others allies in the dungeon."
msg_butcher_0#The Pigman Butcher
msg_butcher_1#"Wow this one is a big guy!
msg_butcher_2#I hope I won't end up in sausages..."
msg_giant_slime_0#The Giant Slime
msg_giant_slime_1#"I am green, huge and I stink.
msg_giant_slime_2#What I am ?"
msg_cyclops_1#"How did it go in the room?
msg_cyclops_2#It's bigger and larger than the gate!"
msg_wererat_0#The Wererat
msg_wererat_1#"Looks like my old aunt..."
msg_giant_spider_before_0#The empty room
msg_giant_spider_before_1#"Is there anybody in there? "
msg_giant_spider_after_0#The Giant Spider
msg_giant_spider_after_1#"I HATE spiders"
msg_tuto_intro_0#Tutorial: Basics
msg_tuto_intro_1#Use WASD (standard) to move around the dungeon.
msg_tuto_intro_2#Fire with the arrows (standard).
msg_tuto_items_0#Tutorial: Items
msg_tuto_items_1#Items enhance your character or give you new powers.
msg_tuto_items_2#Find or buy as many as you can.
msg_tuto_heal_0#Tutorial: Health
msg_tuto_heal_1#You've lost some hit points.
msg_tuto_heal_2#Find something to heal you before you die.
msg_tuto_shops_0#Tutorial: Shops
msg_tuto_shops_1#You can find many shops in the dungeon.
msg_tuto_shops_2#Here can you spend money to buy items or food.
msg_tuto_boss_door_0#Tutorial: Boss gate
msg_tuto_boss_door_1#From here, you can see a closed golden door.
msg_tuto_boss_door_2#Here is the boss of the floor, but you need the golden key to enter.
msg_tuto_challenge_door_0#Tutorial: Challenge room
msg_tuto_challenge_door_1#Look at the decorative door. It is a challenge room.
msg_tuto_challenge_door_2#You can obtain valuable rewards here, but enter with caution!
msg_tuto_shots_0#Tutorial: Shot types
msg_tuto_shots_1#You've found a new shot type.
msg_tuto_shots_2#Press [fire select] (standard: tab) to switch between your shot types.
msg_tuto_spell_0#Tutorial: Spells
msg_tuto_spell_1#You've found a magic spell.
msg_tuto_spell_2#Press the spell key (standard: space) to cast the spell.
msg_francky_0#The... Thing
msg_francky_1#Yuk... It looks like made with various body parts!
msg_tuto_tips_0#Tutorial: Tips
msg_tuto_tips_1#Use Time Control (standard: RShift) to travel faster.
msg_tuto_tips_2#Press [Enter] to close the message box immediately.
enemy_type_bat#a bat
enemy_type_rat#a rat
enemy_type_rat_black#a black rat
enemy_type_rat_helmet#a rat with helmet
enemy_type_rat_black_helmet#a black rat with helmet
enemy_type_evil_flower#an evil flower
enemy_type_evil_flower_ice#an evil edelweiss
enemy_type_snake#a snake
enemy_type_snake_blood#a blood snake
enemy_type_slime#a slime
enemy_type_slime_red#a red slime
enemy_type_slime_blue#a blue slime
enemy_type_slime_violet#a violet slime
enemy_type_imp_blue#a blue imp
enemy_type_imp_red#a red imp
enemy_type_pumpkin#a mad pumpkin
enemy_type_witch#a witch
enemy_type_witch_red#a red witch
enemy_type_cauldron#a cauldron
enemy_type_bubble#a bubble
enemy_type_boss_butcher#the Pigman Butcher
enemy_type_boss_slime_giant#the Giant Slime
enemy_type_boss_rat_king#the Wererat King
enemy_type_boss_spider_giant#the Giant Spider
enemy_type_green_rat#a green rat
enemy_type_rock_falling#a falling rock
enemy_type_rock_missile#a throwing rock
enemy_type_spider_egg#a falling spider egg
enemy_type_spider_little#a spider
enemy_type_spider_web#a spider web
enemy_type_ghost#a ghost
enemy_type_zombie#a zombie
enemy_type_zombie_dark#a dark zombie
enemy_type_francky#the Thing
enemy_type_himself#himself
source_explosion#explosion
source_poison#poison
enemy_francky#The Thing
enemy_francky_head#The Thing's head
inventory#Inventory
dc_certificate#Death certificate
dc_killed_by#Killed by
dc_died_level#Died on level
dc_after#after
dc_minutes#min. of game
dc_killed_monsters#Slayed monsters
dc_gold#Gold
dc_challenges#Completed challenges
player_name#Player name
player_name_desc#Modify player name
hi_scores#Hall of fame
hi_scores_desc#Best scores
credits#Credits
credits_desc#Credits screen
volume_sound#Sound volume
volume_sound_desc#Use left/right arrows to change volume
volume_music#Music volume
certificate_capture#Press [F1] to save the certificate as a PNG file
certificate_saved#Saved to
msg_tuto_temple_0#Tutorial: Temple
msg_tuto_temple_1#The temple is the place where you can worship a divinity or donate.
msg_tuto_temple_2#Divinities can help you and provide bonuses.
key_interact#interact
interact_worship#Worship
interact_shop#Buy
interact_donate#Donate 10 pieces of gold
interact_donate_fail#(not enough gold)
worshipping#You're now a worshipper of
divinity_healer_0#Pomonos the Righteous
divinity_healer_1#Guardian of the righteousness and patroness of the weak.
divinity_healer_2#He appreciates donations, suffering and fighting evil.
divinity_fighter_0#Tello the Powerful
divinity_fighter_1#Lord of the fighters and the war.
divinity_fighter_2#He appreciates monsters and titans falling in battle.
divinity_ice_0#Mister Snow
divinity_ice_1#Divinity of the cold.
divinity_ice_2#He likes the use of ice.
divinity_stone_0#Gaya
divinity_stone_1#Divinity of the stone and earth.
divinity_stone_2#He likes the use of stone.
divinity_intervention_0#Divine intervention
divinity_intervention_1#intervenes in your favour.
divinity_gift_0#Divine gift
divinity_gift_1#grants you a gift.
item_floor_map#Dungeon Map
item_floor_map_desc#Reveals the map of the present floor
item_alcohol#Absinthe
item_alcohol_desc#Temporarily increases damage
item_staff#Ebony Staff
item_ring_stone#Quartz Ring
item_ring_lightning#Amethyst Ring
item_ring_illusion#Obsidian Ring
enemy_cyclops#Stone Cyclops
msg_cyclops_0#The Stone Cyclops
enemy_type_boss_cyclops#the Stone Cyclops
achiev_rats#Rodenticide
achiev_rats_desc#Kill 250 rats
achiev_100#Stingy
achiev_100_desc#Collect 100 gold coins
achiev_piety_max#Faithful
achiev_piety_max_desc#Reach the max piety level
achiev_4_hits#Brochette
achiev_4_hits_desc#Hurt 4 monsters with the same shot
achiev_complete_set#Dressed
achiev_complete_set_desc#Equip robe + hat + boots + gloves
achiev_giant_slime#Giant Slime Slayer
achiev_giant_slime_desc#Kill the Giant Slime
achiev_cyclops#Cyclops Slayer
achiev_cyclops_desc#Kill the Stone Cyclops
achiev_rat_king#Wererat Slayer
achiev_rat_king_desc#Kill the Wererat king
achiev_giant_spider#Giant Spider Slayer
achiev_giant_spider_desc#Kill the Giant Spider
achiev_francky#Thing Slayer
achiev_francky_desc#Kill the Thing
achiev_butcher#Butcher Slayer
achiev_butcher_desc#Kill the Butcher
achiev_witches#Inquisitor
achiev_witches_desc#Kill 50 witches
achiev_eggs#Bad omelette
achiev_eggs_desc#Destroy 100 eggs
achiev_vampire#Vampire Hunter
achiev_vampire_desc#Kill the Vampire
achiev_challenges#Gladiator
achiev_challenges_desc#Complete 4 challenges
achiev_win#Live a dream
achiev_win_desc#Finish the demo
func_achiev_screen#Achievements screen
func_achiev_all#All achievements descriptions
func_double_spell#Two spells drop
enemy_type_evil_flower_fire#an evil fire flower
enemy_type_bat_skeleton#a skeleton bat
enemy_type_slime_large#a large slime
enemy_type_slime_blue_large#a large blue slime
enemy_type_slime_red_large#a large red slime
enemy_type_slime_violet_large#a large violet slime
enemy_type_bogeyman#a bogeyman
enemy_type_cauldron_elemental#an elemental cauldron
menu_achievements#Achievements
menu_achievements_desc#Display the achievements
achievement_complete#Achievement unlocked!
item_spell_flower#Spell: Invoke magic flower
item_spell_flower_desc#Cast to invoke a magic flower
item_rapid_shots#Spellbook of Rapid Fire
item_rapid_shots_desc#Wizard machine gun
item_fairy_poison#Fairy Vicky
item_fairy_poison_desc#Helps you in the dungeon
item_luck#Four-leaf clover
item_luck_desc#Temporarily increases gold drop
item_fairy_powder#Fairy Dust
item_fairy_powder_desc#Temporarily excites the fairies
item_ring_poison#Emerald ring
item_ring_poison_desc#Increases poison power
item_gem_poison#Poison Gem
item_gem_poison_desc#Poison attack
item_book_prayer_i#Book of prayer - Tome I
item_book_prayer_i_desc#Increases piety
item_book_prayer_ii#Book of prayer - Tome II
item_book_prayer_ii_desc#Reduces piety cost
item_pet_slime#Slime Pet
item_pet_slime_desc#It will follow and help you
item_hat_advanced#Warlock's Hat
item_hat_advanced_desc#Elemental resistance + firerate up
item_robe_advanced#Magic robe of shock
item_robe_advanced_desc#Repulses and increases armor
item_critical#Fake mage beard
item_critical_desc#Chance to critical shot (x2)
item_critical_advanced#Fake Archmage beard
item_critical_advanced_desc#Increases critical damage (x3)
item_spell_fairy#Spell: Fairy transmutation
item_spell_fairy_desc#Cast to transmute to a fairy
item_gloves_advanced#Ranger gloves
item_gloves_advanced_desc#Disarm traps and firerate up
item_boots_advanced#Ranger boots
item_boots_advanced_desc#Increases speed
divinity_leveling_0#Devotion level up!
div_fighter_lvl#increases your damage
div_healer_lvl_2#gives you regeneration
div_healer_lvl_3#increases your regeneration
div_ice_lvl_3#increases your ice resistance
div_ice_lvl_4#increases your ice attack
div_ice_lvl_5#increases your frozen immunity
div_stone_lvl_3#increases your stone resistance
div_stone_lvl_4#increases your stone attack
div_stone_lvl_5#increases your repulse immunity
enemy_vampire#Vampire
enemy_type_vampire#the Vampire
msg_tuto_achiev_0#Tutorial: Achievements
msg_tuto_achiev_1#You've completed an achievement.
msg_tuto_achiev_2#They unlock new items or bonus.
msg_vampire_0#The Vampire
msg_vampire_1#I forgot to bring some garlic!
msg_level7_0#The Archmage's daughter
msg_level7_1#"I'm getting closer and closer.
msg_level7_2#She can't be so far from here."
divinity_air_0#Ostram
divinity_air_1#Divinity of air and storm.
divinity_air_2#He likes the use of lightning.
div_air_lvl#increases your speed
div_air_lvl_4#increases your lightning attack
config_joystick#Configure joystick
redef_joystick#Redefine joystick control
joystick_configuration#Joystick configuration
joystick_configuration_desc#Please configure the joystick
joystick_configuration_insert#[press button]
joystick_not_found#Joystick not connected!
item_scroll_revelation#Scroll of revelation
item_scroll_revelation_desc#Reveal secrets and potion effects
item_potion_01#Red potion
item_potion_02#Green potion
item_potion_03#Golden potion
item_potion_04#Blue potion
item_potion_05#Violet potion
item_potion_06#Rosa potion
item_potion_07#Orange potion
item_potion_08#Turquoise potion
item_potion_09#Brown potion
item_potion_10#Dark potion
item_potion_desc#Unknown effect
item_potion_health#Healing potion
item_potion_health_desc#Restores 18 HP
item_potion_poison#Poison potion
item_potion_poison_desc#Makes poisoned
item_potion_speed#Speed potion
item_potion_speed_desc#Temporary increases speed
item_potion_slow#Slow potion
item_potion_slow_desc#Temporary decreases speed
item_potion_weakness#Weakness potion
item_potion_weakness_desc#Temporary decreases damage
item_potion_strength#Strength potion
item_potion_strength_desc#Temporary increases damage
item_potion_oblivion#Oblivion potion
item_potion_oblivion_desc#Forget potion effects and map
item_potion_confusion#Confusion potion
item_potion_confusion_desc#Makes confused
item_potion_cure#Tabula Rasa potion
item_potion_cure_desc#Cancel all player effects
item_potion_rage#Rage potion
item_potion_rage_desc#Throws fireballs around the player
item_bag#Bag
item_bag_desc#Provides more space for consumables
msg_potion_id_0#Potion identification
msg_potion_id_1#You've identified:
msg_tuto_consumables_0#Tutorial: Consumables
msg_tuto_consumables_1#[num1-num4] to use the consumable item.
msg_tuto_consumables_2#[left shift][num1-num4] to drop it.
msg_tuto_potions_0#Tutorial: Potions
msg_tuto_potions_1#You have found a potion.
msg_tuto_potions_2#You have to drink or identify it to know its effect.
secret_found#Secret room found!
enemy_type_sausage#a sausage
enemy_type_spider_tarantula#a tarantula
effect_speed#Speed up!
effect_slow#Speed down!
effect_strength#Damage up!
effect_weakness#Damage down!
effect_confusion#Confused!
effect_forget#You forget!
effect_cure#Tabula rasa!
effect_rage#Raaaage!
item_book_alchemy#Book of alchemy
item_book_alchemy_desc#Reveals the effect of some potions
item_fairy_stone#Fairy Cassandra
item_fairy_stone_desc#Helps you in the dungeon
item_merchant#Merchant guild seal
item_merchant_desc#Better prices in shop
item_spell_time#Spell: Time stop
item_spell_time_desc#Cast to slow down the time
item_side_shots#Spellbook of side Shots
item_side_shots_desc#Shots side bolts
item_spell_lightning#Spell: Lightning
item_spell_lightning_desc#Cast to invoke a lightning
item_belt_advanced#Black belt
item_belt_advanced_desc#Increases fairies fire rate
item_rear_shot_advanced#Silver staff cap
item_rear_shot_advanced_desc#Shots two rear bolts
item_amulet_retaliation#Amulet of vengeance
item_amulet_retaliation_desc#Retaliates
item_rage_amulet#Rage Amulet
item_rage_amulet_desc#Sends fire bolts
achiev_fairies#Charlie's Angels
achiev_fairies_desc#Get 3 fairies
achiev_ghost#Ghostbuster
achiev_ghost_desc#Kill 50 ghosts
achiev_noob#True noob
achiev_noob_desc#Die in level 1
achiev_no_damage#Tough guy
achiev_no_damage_desc#Complete 1 level without losing life
achiev_no_damage2#Very tough Guy
achiev_no_damage2_desc#Complete 2 levels without losing life
achiev_no_damage3#Very very tough Guy
achiev_no_damage3_desc#Complete 3 levels without losing life
achiev_apostate#Apostate
achiev_apostate_desc#Reject a level 4 divinity
achiev_fanatic#Fanatic
achiev_fanatic_desc#Give 100 gold to temple
func_nothing#Nothing!
state_frozen#Frozen
state_slow#Slow
state_speed#Hasted
state_poison#Poisoned
state_weakness#Weakness
state_strength#Strength
state_rage#Rage
state_confusion#Confused
state_time#Time stop
state_div_protection#Protected (div)
state_div_speed#Hasted (div)
state_div_firerate#Firerate+ (div)
state_div_damage#Damage+ (div)
dc_victory#Victory certificate
dc_after_victory#Victory after
player#player
players#players
ui_base_damage#Base damage
ui_fire_rate#Fire rate
ui_second#second
ui_temple_donation#Temple donation
divinity_illusion_0#Moryo
divinity_illusion_1#Lord of illusion.
divinity_illusion_2#He likes secrets and illusions.
div_illusion_lvl_3#makes the ghosts visible
div_illusion_lvl_4#increases your illusion attack
+
+divinity_fire_0#Magma
+divinity_fire_1#Divinity of the fire.
+divinity_fire_2#He likes the use of fire.
+div_fire_lvl_3#increases your fire resistance
+div_fire_lvl_4#increases your fire attack
+
+divinity_death_0#King Ssssrah
+divinity_death_1#Monarch of death.
+divinity_death_2#He likes death and poison.
+div_death_lvl_3#increases your poison resistance
+div_death_lvl_4#increases your poison attack
+div_death_lvl_5#increases your poison resistance
+
[french]
start_new_game#Nouvelle partie
start_desc#L'ancienne partie sera perdue
restore#Continuer la partie
at#à
level#niveau
begin_journey#Démarrer dans un nouveau donjon
config_keys#Configurer le clavier
redef_input#Redéfinir les touches
exit_game#Quitter
return_to_desktop#Retour au bureau
key_configuration#Configuration des touches
key_configuration_desc#Veuillez configurer les touches
key_configuration_insert#[presser touche]
key_configuration_done#FAIT
key_move_up#Déplacement haut
key_move_down#Déplacement bas
key_move_left#Déplacement gauche
key_move_right#Déplacement droite
key_fire_up#Tir haut
key_fire_down#Tir bas
key_fire_left#Tir gauche
key_fire_right#Tir droite
key_fire_select#Sélecteur de tir
key_time#Accélérer le temps
key_fire#Tir (un bouton)
key_spell#Lancer un sort
configure_game#Configuration
configure_game_desc#Modifier les options
config_back#Retour
config_back_desc#Retour au menu principal
config_lang#Langue
config_lang_desc#Choisissez avec les flèches (gauche et droite)
english#Anglais
french#Français
keys_move#déplacer
keys_fire#tirer
keys_select_1#sélecteur
keys_select_2#de tir
keys_time#accélerer
tuto_reset#RAZ des tutoriels
tuto_reset_desc#Réinitialisation des tutoriels
menu_continue#Continuer
menu_continue_desc#Continuer le jeu
menu_save_quit#Sauvegarder et quitter
menu_save_quit_desc#Sauvegarder et retourner au menu principal
menu_quit#Quitter sans sauvegarder
menu_quit_desc#Retourner au menu principal sans sauvegarder
inventory#Equipement
play_again#Pressez [ENTRER] pour rejouer / [ESC] pour revenir au menu
items_found#Objets
monsters_killed#Monstres
congratulations_1#FELICITATIONS !
congratulations_2#Vous êtes brillamment arrivé au terme de cette démo !
congratulations_3#A bientôt pour de nouvelles aventures !
by#par
critical#CRITIQUE
poison#POISON
merchant_speech_0#Les meilleures affaires du donjon !
merchant_speech_1#Bienvenue à la boutique Pawn'n'Witches !
merchant_speech_2#Jetez un oeil à nos produits !
enemy_butcher#Boucher porcin
enemy_giant_slime#Slime géant
enemy_cyclops#Cyclope de pierre
enemy_rat_king#Roi des Rats-garous
enemy_giant_spider#Araignée géante
enemy_francky#La Chose
enemy_francky_head#La tête de la Chose
item_copper#Pièce de cuivre
item_copper_desc#Une pièce de cuivre (1)
item_silver#Pièce d'argent
item_silver_desc#Une pièce d'argent (5)
item_gold#Pièce d'or
item_gold_desc#Une pièce d'or (10)
item_titan_heart#Coeur de Titan
item_titan_heart_desc#Augmente les PV max
item_elven_cookie#Biscuit elfique
item_elven_cookie_desc#Guérit et augmente les PV
item_apple#Pomme
item_apple_desc#Guérit 3 PV
item_apple_green#Pomme verte
item_apple_green_desc#Guérit le poison et 3 PV
item_bread#Pain
item_bread_desc#Guérit 7 HP
item_cheese#Fromage
item_cheese_desc#Guérit 15 HP
item_boss_key#Clef du boss
item_boss_key_desc#Ouvre la porte du boss
item_sorcerer_hat#Chapeau d'enchanteur
item_sorcerer_hat_desc#Augmente la cadence de tir
item_velvet_boots#Bottes de velours
item_velvet_boots_desc#Augmente la vitesse
item_spell_dual#Sort: double-tir
item_spell_dual_desc#Tire deux projectiles
item_rage_amulet#Amulette de rage
item_rage_amulet_desc#Tire régulièrement des boules de feu
item_displacement_gloves#Gants de déplacement
item_displacement_gloves_desc#La vitesse du porteur impacte la trajectoire
item_staff#Bâton d'ébène
item_staff_desc#Augmente les dégâts et la vitesse de tir
item_fairy#La fée Lilly
item_fairy_desc#Vous aide dans le donjon
item_leather_belt#Ceinture de cuir
item_leather_belt_desc#Augmente la cadence de tir
item_blood_snake#Serpent de sang
item_blood_snake_desc#Augmente les dégâts
item_gem_ice#Gemme de glace
item_gem_ice_desc#Attaque de glace (gèle)
item_gem_illusion#Gemme d'illusion
item_gem_illusion_desc#Attaque d'illusion(ignore murs et armures)
item_gem_stone#Gemme de pierre
item_gem_stone_desc#Attaque de pierre(repousse)
item_gem_lightning#Gemme de foudre
item_gem_lightning_desc#Attaque de foudre(rebondit)
item_fairy_ice#La fée Natacha
item_fairy_ice_desc#Vous aide dans le donjon
item_ring_ice#Anneau de saphir
item_ring_ice_desc#Augmente le pouvoir de glace
item_ring_stone#Anneau de quartz
item_ring_stone_desc#Augmente le pouvoir de pierre
item_ring_lightning#Anneau d'améthyste
item_ring_lightning_desc#Augmente le pouvoir de foudre
item_ring_illusion#Anneau d'obsidienne
item_ring_illusion_desc#Augmente le pouvoir d'illusion
item_spell_triple#Manuel de Triple-tir
item_spell_triple_desc#Tire trois projectiles
item_fairy_fire#La fée Alicia
item_fairy_fire_desc#Vous aide dans le donjon
item_fairy_target#La fée Scarlett
item_fairy_target_desc#Vous aide dans le donjon
item_robe_magician#Robe de magicien
item_robe_magician_desc#Augmente l'armure
item_gem_fire#Gemme de feu
item_gem_fire_desc#Attaque de feu (dégâts augmentés)
item_ring_fire#Anneau de rubis
item_ring_fire_desc#Augmente le pouvoir de feu
item_manual_staff#Manuel du bâton
item_manual_staff_desc#Augmente la portée
item_spell_teleport#Sort : Téléportation
item_spell_teleport_desc#Permet de se téléporter dans la pièce
item_spell_slime_explode#Sort: Invoquer Slime
item_spell_slime_explode_desc#Invoque un slime explosif
item_spell_fireball#Sort: Boule de feu
item_spell_fireball_desc#Envoie une boule de feu
item_spell_freeze#Sort: Geler monstres
item_spell_freeze_desc#Gèle les monstres
item_spell_earthquake#Sort: Séisme
item_spell_earthquake_desc#Fait trembler le donjon
item_spell_protection#Sort: Protection
item_spell_protection_desc#Invoque un bouclier magique
item_manual_slime#Manuel de maîtrise des slimes
item_manual_slime_desc#Les slimes ne vous visent plus
item_spell_dual_quick#Sort: Double-tir (rapide)
item_spell_dual_quick_desc#Tire deux projectiles (rapide)
item_spell_triple_quick#Sort: Triple-tir (rapide)
item_spell_triple_quick_desc#Tire trois projectiles (rapide)
item_manual_health#Manuel de santé
item_manual_health_desc#Gain de PV augmenté
item_rear_shot#Embout de bâton
item_rear_shot_desc#Tir arrière
item_book_random_shot#Sort: Tir aléatoire
item_book_random_shot_desc#Tire dans une direction aléatoire
item_spell_web#Sort: Toile d'araignée
item_spell_web_desc#Tire des toiles d'araignée
item_book_magic_i#Grimoire - Tome I
item_book_magic_i_desc#Réduit le délai entre deux sorts
item_book_magic_ii#Grimoire - Tome II
item_book_magic_ii_desc#Augmente la puissance du sort
item_sulfur#Soufre
item_sulfur_desc#Chance de faire exploser les cadavres
spell_teleport#téléportation
spell_slime_explode#invoquer slime
spell_fireball#boule de feu
spell_freeze#geler monstres
spell_earthquake#séisme
spell_protection#protection
spell_web#toile d'araignée
msg_level1_0#Votre quête commence !
msg_level1_1#"Les sorcières ont enlevé la fille de l'Archimage.
msg_level1_2#Je dois descendre dans leur antre et la secourir !"
msg_level2_0#La fille de l'Archimage
msg_level2_1#"J'arrive, je vais te sortir de là !
msg_level2_2#J'espère qu'elle est saine et sauve..."
msg_level3_0#La fille de l'Archimage
msg_level3_1#"Vous l'ai-je déjà dit ?
msg_level3_2#La fille de l'Archimage est la plus douce de l'Académie de Magie !"
msg_level4_0#L'Archimage
msg_level4_1#"L'Archimage est très sage, et est aussi mon mentor.
msg_level4_2#Il m'a appris que nous vivons dans le meilleur des monde."
msg_level5_0#La fille de l'Archimage
msg_level5_1#"Je me souviens d'elle et de moi, à l'Académie de Magie.
msg_level5_2#Enfants, nous jouions au mage guérisseur, hi hi !"
msg_level6_0#L'Archimage
msg_level6_1#"Mes parents sont décédés quand j'étais bébé.
msg_level6_2#L'Archimage m'a élevé comme si j'étais des siens."
msg_rats_bats_0#La vermine
msg_rats_bats_1#"Hey! Pourquoi faut-il toujours exterminer des rats et chauve-souris
msg_rats_bats_2#dans les Roguelikes ?"
msg_snakes_0#Les serpents
msg_snakes_1#"Je DETESTE les serpents!"
msg_witches_0#Les sorcières
msg_witches_1#"S.. Sorcières !!!"
msg_gold_0#Or
msg_gold_1#"♫ Money money money ♫
msg_gold_2#Je me demande si je peux acheter des trucs intéressants dans ce donjon..."
msg_familiar_0#Les fées
msg_familiar_1#"Oh ! De la compagnie !
msg_familiar_2#J'espère trouver d'autres alliés dans le donjon."
msg_butcher_0#Le Boucher porcin
msg_butcher_1#"Wow, ce gars est balèze !
msg_butcher_2#J'espère ne pas terminer en saucisses..."
msg_giant_slime_0#Le Slime géant
msg_giant_slime_1#"Je suis vert, énorme et je pue.
msg_giant_slime_2#Qui suis-je ?"
msg_cyclops_0#Le Cyclope de pierre
msg_cyclops_1#"Comment est-il entré dans cette pièce ?
msg_cyclops_2#Il est plus large que les portes !"
msg_wererat_0#Le Roi des Rats-garous
msg_wererat_1#"Il ressemble à ma vieille tante..."
msg_giant_spider_before_0#Une pièce vide
msg_giant_spider_before_1#"Y'a quelqu'un ? "
msg_giant_spider_after_0#L'Araignée géante
msg_giant_spider_after_1#"Je DETESTE les araignées"
msg_tuto_intro_0#Tutoriel: Bases
msg_tuto_intro_1#Utilisez ZQSD (standard) pour se déplacer dans le donjon.
msg_tuto_intro_2#Tirez avec les flèches (standard).
msg_tuto_items_0#Tutoriel: Objets
msg_tuto_items_1#Les objets améliorent le personnage ou lui octroient de nouveaux pouvoirs.
msg_tuto_items_2#trouvez ou achetez-en autant que possible.
msg_tuto_heal_0#Tutoriel: Santé
msg_tuto_heal_1#Vous avez perdu des points de vie.
msg_tuto_heal_2#Trouvez des moyens de guérir avant de mourir.
msg_tuto_shops_0#Tutoriel: Boutique
msg_tuto_shops_1#Vous pouvez trouver plusieurs boutiques dans le donjon.
msg_tuto_shops_2#Ici, vous dépenserez votre argent en objets et nourriture.
msg_tuto_boss_door_0#Tutoriel: Porte du Boss
msg_tuto_boss_door_1#D'ici, vous apercevez une porte dorée verrouillée.
msg_tuto_boss_door_2#Elle protège le Boss, trouvez la clef adéquate pour l'ouvrir.
msg_tuto_challenge_door_0#Tutoriel: Salle de Challenge
msg_tuto_challenge_door_1#Regardez la porte décorée ? C'est une salle de challenge.
msg_tuto_challenge_door_2#Vous pouvez y gagner des objets de valeur mais attention !
msg_tuto_shots_0#Tutoriel: Types de tir
msg_tuto_shots_1#Vous avez trouvé un nouveau type de tir.
msg_tuto_shots_2#Appuyez sur [sélection de tir] (standard: tab) pour changer de type de tir.
msg_tuto_spell_0#Tutoriel: Magie
msg_tuto_spell_1#Vous avez trouvé un nouveau sort.
msg_tuto_spell_2#Appuyez sur la touche de sort (standard: espace) pour le lancer.
msg_francky_0#La... Chose
msg_francky_1#Beurk... Il a l'air "fabriqué" à partir de morceaux de cadavres !
msg_tuto_tips_0#Tutoriel: Astuces
msg_tuto_tips_1#Le contrôle du temps (standard: Shift droit) permet de se déplacer plus vite.
msg_tuto_tips_2#Appuyez sur [Enter] pour fermer les boites de message.
enemy_type_bat#une chauve-souris
enemy_type_rat#un rat
enemy_type_rat_black#un rat noir
enemy_type_rat_helmet#un rat casqué
enemy_type_rat_black_helmet#un rat noir casqué
enemy_type_evil_flower#une fleur maléfique
enemy_type_evil_flower_ice#un edelweiss maléfique
enemy_type_snake#un serpent
enemy_type_snake_blood#un serpent de sang
enemy_type_slime#un slime
enemy_type_slime_red#un slime rouge
enemy_type_slime_blue#un slime bleu
enemy_type_slime_violet#un slime violet
enemy_type_imp_blue#un diablotin bleu
enemy_type_imp_red#un diablotin rouge
enemy_type_pumpkin#une citrouille démente
enemy_type_witch#une sorcière
enemy_type_witch_red#une sorcière rouge
enemy_type_cauldron#un chaudron
enemy_type_bubble#une bulle
enemy_type_boss_butcher#le Boucher porcin
enemy_type_boss_slime_giant#le Slime géant
enemy_type_boss_cyclops#le Cyclope de pierre
enemy_type_boss_rat_king#le Roi des Rats-garous
enemy_type_boss_spider_giant#l'Araignée géante
enemy_type_green_rat#un rat vert
enemy_type_rock_falling#un rocher tombant
enemy_type_rock_missile#un rocher lancé
enemy_type_spider_egg#un oeuf d'araignée tombant
enemy_type_spider_little#une araignée
enemy_type_spider_web#une toile d'araignée
enemy_type_ghost#un fantôme
enemy_type_zombie#un zombie
enemy_type_zombie_dark#un zombie sombre
enemy_type_francky#la Chose
enemy_type_himself#lui-même
source_explosion#une explosion
source_poison#du poison
dc_certificate#Certificat de décès
dc_killed_by#Tué par
dc_died_level#Mort au niveau
dc_after#après
dc_minutes#min. de jeu
dc_killed_monsters#Monstres vaincus
dc_gold#Or
dc_challenges#Défis relevés
player_name#Nom du joueur
player_name_desc#Modifier le nom du joueur
hi_scores#Hall of fame
hi_scores_desc#Meilleurs scores
credits#Crédits
credits_desc#Ecran des crédits
volume_sound#Volume du son
volume_sound_desc#Utiliser les flèches gauche/droite pour modifier le volume
volume_music#Volume de la musique
certificate_capture#Appuyez sur [F1] pour faire une copie du certificat dans un PNG
certificate_saved#Enregistré sous
msg_tuto_temple_0#Tutoriel: Temple
msg_tuto_temple_1#Au temple, vous pouvez vénérer des divinités et faire des donations.
msg_tuto_temple_2#Les divinités vous apporte leur aide et des bonus.
key_interact#interaction
interact_worship#Vénérer
interact_shop#Acheter
interact_donate#Donner 10 pièces
interact_donate_fail#(pas assez d'argent)
worshipping#Vous êtes maintenant un disciple de
divinity_healer_0#Pomonos le Juste
divinity_healer_1#Gardien de la vertu et protecteur des faibles.
divinity_healer_2#Il apprécie les dons, la souffrance, et le combat contre le mal.
divinity_fighter_0#Tello le Puissant
divinity_fighter_1#Seigneur des guerriers et de la force.
divinity_fighter_2#Il aime voir tomber les monstres et les titans.
divinity_ice_0#Mister Snow
divinity_ice_1#Divinité du Froid.
divinity_ice_2#Il apprécie l'usage de la glace.
divinity_stone_0#Gaya
divinity_stone_1#Divinité de la Terre et de la Pierre.
divinity_stone_2#Il apprécie l'usage de la pierre.
divinity_intervention_0#Intervention divine
divinity_intervention_1#intervient en votre faveur.
divinity_gift_0#Présent divin
divinity_gift_1#vous offre un présent.
item_floor_map#Carte du donjon
item_floor_map_desc#Révèle la carte de cet étage
item_alcohol#Absinthe
item_alcohol_desc#Vous rend temporairement plus fort
achiev_rats#Rodenticide
achiev_rats_desc#Tuer 250 rats
achiev_100#Radin
achiev_100_desc#Posséder 100 pièces
achiev_piety_max#Fidèle
achiev_piety_max_desc#Atteindre le niveau max de piété
achiev_4_hits#Brochette
achiev_4_hits_desc#Toucher 4 monstres avec le même tir
achiev_complete_set#Habillé
achiev_complete_set_desc#Posséder robe + chapeau + bottes + gants
achiev_giant_slime#Pourfendeur de Slime Géant
achiev_giant_slime_desc#Tuer le Slime Géant
achiev_cyclops#Pourfendeur de Cyclope
achiev_cyclops_desc#Tuer le Cyclope de pierre
achiev_rat_king#Pourfendeur de Rat-Garou
achiev_rat_king_desc#Tuer le Rat-Garou
achiev_giant_spider#Pourfendeur d'Araignée Géante
achiev_giant_spider_desc#Tuer l'Araignée Géante
achiev_francky#Pourfendeur de Chose
achiev_francky_desc#Tuer la Chose
achiev_butcher#Pourfendeur de Boucher
achiev_butcher_desc#Tuer le Boucher porcin
achiev_witches#Inquisiteur
achiev_witches_desc#Tuer 50 sorcières
achiev_eggs#Mauvaise omelette
achiev_eggs_desc#Détruire 100 oeufs
achiev_vampire#Chasseur de vampires
achiev_vampire_desc#Tuer le Vampire
achiev_challenges#Gladiateur
achiev_challenges_desc#Relever 4 défis
achiev_win#Vivre son rêve
achiev_win_desc#Terminer la démo
func_achiev_screen#Ecran des succès
func_achiev_all#Description des succès
func_double_spell#Drop de deux sorts
enemy_type_evil_flower_fire#une fleur de feu maléfique
enemy_type_bat_skeleton#une chauve-souris squelette
enemy_type_slime_large#un gros slime
enemy_type_slime_blue_large#un gros slime bleu
enemy_type_slime_red_large#un gros slime rouge
enemy_type_slime_violet_large#un gros slime violet
enemy_type_bogeyman#un croque-mitaine
enemy_type_cauldron_elemental#un chaudron élémentaire
menu_achievements#Succès
menu_achievements_desc#Affiche les succès
achievement_complete#Succès débloqué !
item_spell_flower#Sort: Invoquer fleur magique
item_spell_flower_desc#Invoque une fleur magique
item_rapid_shots#Manuel de tir rapide
item_rapid_shots_desc#La mitraillette du magicien
item_fairy_poison#La fée Vicky
item_fairy_poison_desc#Vous aide dans le donjon
item_luck#Trèfle à 4 feuilles
item_luck_desc#Augmente temporairement l'or trouvé
item_fairy_powder#Poussière de fée
item_fairy_powder_desc#Excite temporairement les fées
item_ring_poison#Anneau d'émeraude
item_ring_poison_desc#Augmente le pouvoir de poison
item_gem_poison#Gemme de poison
item_gem_poison_desc#Attaque de poison
item_book_prayer_i#Livre de prières - Tome I
item_book_prayer_i_desc#Augmente la piété
item_book_prayer_ii#Livre de prières - Tome II
item_book_prayer_ii_desc#Reduit les coûts en piété
item_pet_slime#Slime de compagnie
item_pet_slime_desc#Il vous suit et se bat à vos côtés
item_hat_advanced#Chapeau de Warlock
item_hat_advanced_desc#Résistance élémentaire + cadence de tir+
item_robe_advanced#Robe magique de choc
item_robe_advanced_desc#Repousse + armure augmentée
item_critical#Barbe factice de mage
item_critical_desc#Chance de dégâts critiques (x2)
item_critical_advanced#Barbe factice d'Archimage
item_critical_advanced_desc#Chance de dégâts critiques (x3)
item_spell_fairy#Sort: Transformation en fée
item_spell_fairy_desc#Transforme le magicien en fée
item_gloves_advanced#Gants de ranger
item_gloves_advanced_desc#Pièges désactivés + cadence de tir augmentée
item_boots_advanced#Bottes de ranger
item_boots_advanced_desc#Augmente la vitesse
divinity_leveling_0#Niveau supérieur de dévotion !
div_fighter_lvl#augmente les dégâts
div_healer_lvl_2#régénère
div_healer_lvl_3#augmente la régénération
div_ice_lvl_3#augmente la résistance au froid
div_ice_lvl_4#augmente le niveau d'attaque de glace
div_ice_lvl_5#augmente l'immunité de gel
div_stone_lvl_3#augmente la résistance à la pierre
div_stone_lvl_4#augmente le niveau d'attaque de pierre
div_stone_lvl_5#augmente l'immunité de repoussement
enemy_vampire#Vampire
enemy_type_vampire#le Vampire
msg_tuto_achiev_0#Tutorial: Succès
msg_tuto_achiev_1#Vous avez obtenu un succès.
msg_tuto_achiev_2#Ils débloquent des objets ou fonctionnalités.
msg_vampire_0#Le Vampire
msg_vampire_1#J'ai oublié d'emporter de l'ail !
msg_level7_0#La fille de l'Archimage
msg_level7_1#"Je me rapproche encore.
msg_level7_2#Elle ne peut plus être trop loin d'ici."
divinity_air_0#Ostram
divinity_air_1#Divinité de l'air et du tonnerre.
divinity_air_2#Il apprécie l'usage de la foudre.
div_air_lvl#augmente votre vitesse
div_air_lvl_4#augmente le niveau d'attaque de foudre
config_joystick#Configurer le joystick
redef_joystick#Redéfinir les contrôles joystick
joystick_configuration#Configuration du joystick
joystick_configuration_desc#Configurez les actions du joystick
joystick_configuration_insert#[appui bouton]
joystick_not_found#Aucun joystick connecté !
item_scroll_revelation#Parchemin de révélation
item_scroll_revelation_desc#Révéler secrets et effets des potions
item_potion_01#Potion rouge
item_potion_02#Potion verte
item_potion_03#Potion dorée
item_potion_04#Potion bleue
item_potion_05#Potion violette
item_potion_06#Potion rose
item_potion_07#Potion orange
item_potion_08#Potion turquoise
item_potion_09#Potion marron
item_potion_10#Potion sombre
item_potion_desc#Effet inconnu
item_potion_health#Potion de guérison
item_potion_health_desc#Guérit 18 PV
item_potion_poison#Potion de poison
item_potion_poison_desc#Empoisonne le buveur
item_potion_speed#Potion de vitesse
item_potion_speed_desc#Augmente temporairement la vitesse
item_potion_slow#Potion de lenteur
item_potion_slow_desc#Réduit temporairement la vitesse
item_potion_weakness#Potion de faiblesse
item_potion_weakness_desc#Réduit temporairement les dégâts
item_potion_strength#Potion de force
item_potion_strength_desc#Augmente temporairement les dégâts
item_potion_oblivion#Potion d'oubli
item_potion_oblivion_desc#Oublie la carte et les potions
item_potion_confusion#Potion de confusion
item_potion_confusion_desc#Rend confus
item_potion_cure#Potion Tabula Rasa
item_potion_cure_desc#Annule les effets du buveur
item_potion_rage#Potion de rage
item_potion_rage_desc#Tire des boules de feu
item_bag#Sacoche
item_bag_desc#Plus de place pour les consommables
msg_potion_id_0#Identification de potion
msg_potion_id_1#Vous avez identifié:
msg_tuto_consumables_0#Tutoriel: Consommables
msg_tuto_consumables_1#[num1-num4] pour utiliser un objet consommable.
msg_tuto_consumables_2#[left shift][num1-num4] pour le jeter.
msg_tuto_potions_0#Tutoriel: Potions
msg_tuto_potions_1#Vous avez trouvé une potion.
msg_tuto_potions_2#Vous devez la boire ou l'identifier pour connaitre son effet.
secret_found#Salle secrète découverte!
enemy_type_sausage#une saucisse
enemy_type_spider_tarantula#une tarentule
effect_speed#Vitesse augmentée !
effect_slow#Vitesse réduite !
effect_strength#Dégâts augmentés !
effect_weakness#Dégâts réduits !
effect_confusion#Confus !
effect_forget#Vous oubliez !
effect_cure#Tabula rasa !
effect_rage#Raaaage !
item_book_alchemy#Manuel d'alchimie
item_book_alchemy_desc#Révèle les effets de quelques potions
item_fairy_stone#Fairy Cassandre
item_fairy_stone_desc#Vous aide dans le donjon
item_merchant#Sceau des marchand
item_merchant_desc#Meilleurs prix en magasin
item_spell_time#Sort : Arrêter le temps
item_spell_time_desc#Réduit le temps
item_side_shots#Manuel de tirs latéraux
item_side_shots_desc#Tire sur les côtés
item_spell_lightning#Sort: Tonnerre
item_spell_lightning_desc#Invoque un éclair
item_belt_advanced#Ceinture noire
item_belt_advanced_desc#Cadence de tir des fées +
item_rear_shot_advanced#Embout de bâton en argent
item_rear_shot_advanced_desc#Double tir arrière
item_amulet_retaliation#Amulette de vengeance
item_amulet_retaliation_desc#Contre-attaque
item_rage_amulet#Amulette de rage
item_rage_amulet_desc#Tire des boules de feu
achiev_fairies#Charlie's Angels
achiev_fairies_desc#Trouver 3 fées
achiev_ghost#Ghostbuster
achiev_ghost_desc#Tuer 50 fantômes
achiev_noob#Vrai noob
achiev_noob_desc#Mourir au premier niveau
achiev_no_damage#Balèze
achiev_no_damage_desc#Traverser un niveau sans perdre de PV
achiev_no_damage2#Trop balèze
achiev_no_damage2_desc#Traverser 2 niveaux sans perdre de PV
achiev_no_damage3#Trop trop balèze
achiev_no_damage3_desc#Traverser 3 niveaux sans perdre de PV
achiev_apostate#Apostat
achiev_apostate_desc#Rejeter une divinité niveau 4
achiev_fanatic#Fanatique
achiev_fanatic_desc#Donner 100 pièces d'or au temple
func_nothing#Que dalle !
state_frozen#Froid
state_slow#Lenteur
state_speed#Vitesse
state_poison#Poison
state_weakness#Faiblesse
state_strength#Force
state_rage#Rage
state_confusion#Confusion
state_time#Temps figé
state_div_protection#Protection (div)
state_div_speed#Vitesse (div)
state_div_firerate#Cadence de tir+ (div)
state_div_damage#Dégâts+ (div)
dc_victory#Attestation de réussite
dc_after_victory#Victoire après
player#joueur
players#joueurs
ui_base_damage#Dégâts de base
ui_fire_rate#Cadence de tir
ui_second#seconde
ui_temple_donation#Donation au temple
[german]
start_new_game#Neues Spiel starten
start_desc#Alter Speicherstand wird überschrieben !
restore#Speicherstand wiederherstellen
at#um
level#Level
begin_journey#Beginne deine Reise in einem neuen Verlies
config_keys#Steuerung
redef_input#Ändere die Tastenbelegung
exit_game#Spiel verlassen
return_to_desktop#Kehre zum Desktop zurück
key_configuration#Tastenbelegung
key_configuration_desc#Bitte belege die Tasten
key_configuration_insert#[Taste einsetzen]
key_configuration_done#FERTIG
key_move_up#Nach oben
key_move_down#Nach unten
key_move_left#Nach links
key_move_right#Nach rechts
key_fire_up#Schieße oben
key_fire_down#Schieße unten
key_fire_left#Schieße links
key_fire_right#Schieße rechts
key_fire_select#Schieße Auswahl
key_time#Zeitsteuerung
key_fire#Schießen (ein Knopf)
key_spell#Verzaubern
configure_game#Optionen
configure_game_desc#Ändere die Spieloptionen
config_back#Zurück
config_back_desc#Zurück zum Hauptmenü
config_lang#Sprache
config_lang_desc#Wähle mit linker und rechter Pfeiltaste aus
english#Englisch
french#Französisch
german#Deutsch
keys_move#Bewegen
keys_fire#Schießen
keys_select_1#Waffe
keys_select_2#wechseln
keys_time#Zeitsteuerung
play_again#Drücke [ENTER], um nochmal zu spielen / [ESC], um ins Hauptmenü zurückzukehren
items_found#Items
monsters_killed#Monster
congratulations_1#HERZLICHEN GLÜCKWUNSCH !
congratulations_2#Du hast dich der Demo Version gestellt und die Bosse getötet !
congratulations_3#Bis bald für neue Abenteuer !
by#von
critical#KRITISCH
poison#GIFT
merchant_speech_0#Bester Preis im gesamten Verlies!
merchant_speech_1#Willkommen im Pawn'n'Witches Shop!
merchant_speech_2#Schau dir unsere Waren an!
enemy_butcher#Schweinemetzger
enemy_giant_slime#Gigantischer Schleim
enemy_cyclops#Steinzyklop
enemy_rat_king#Werrattenkönig
enemy_giant_spider#Gigantische Spinne
item_copper#Kupfermünze
item_copper_desc#Eine Kupfermünze (Wert 1)
item_silver#Silbermünze
item_silver_desc#Eine Silbermünze (Wert 5)
item_gold#Goldmünze
item_gold_desc#Eine Goldmünze (Wert 10)
item_titan_heart#Herz des Titanen
item_titan_heart_desc#Erhöht die maximalen TP
item_elven_cookie#Elfenkeks
item_elven_cookie_desc#Regeneriert und erhöht die max. TP
item_apple#Apfel
item_apple_desc#Stellt 3 TP wieder her
item_bread#Brot
item_bread_desc#Stellt 7 TP wieder her
item_cheese#Käse
item_cheese_desc#Stellt 15 TP wieder her
item_boss_key#Boss-Schlüssel
item_boss_key_desc#Öffnet die Boss-Tür
item_sorcerer_hat#Hut des Zauberers
item_sorcerer_hat_desc#Erhöht die Feuerrate
item_velvet_boots#Samtschuhe
item_velvet_boots_desc#Erhöht die Geschwindigkeit
item_spell_dual#Zauber : Doppelter Schuss
item_spell_dual_desc#Schießt zwei Schüsse
item_displacement_gloves#Verschiebungs-Handschuhe
item_displacement_gloves_desc#Die Geschwindigkeit des Spielers beeinflusst die der Schüsse
item_staff#Elfenbeinstab
item_staff_desc#Erhöht Schussgeschwindigkeit und Schaden
item_fairy#Lilly-Fee
item_fairy_desc#Hilft dir im Verlies
item_leather_belt#Ledergürtel
item_leather_belt_desc#Erhöht die Feuerrate
item_blood_snake#Blutschlange
item_blood_snake_desc#Erhöht den Schaden
item_gem_ice#Eisjuwel
item_gem_ice_desc#Eisangriff (einfrieren)
item_gem_illusion#Illusionsjuwel
item_gem_illusion_desc#Illusionsangriff (ignoriert Wände)
item_gem_stone#Steinjuwel
item_gem_stone_desc#Steinangriff (rückstoßen)
item_gem_lightning#Blitzjuwel
item_gem_lightning_desc#Blitzangriff (abprallen)
item_fairy_ice#Natasha-Fee
item_fairy_ice_desc#Hilft dir im Verlies
item_ring_ice#Saphir Ring
item_ring_ice_desc#Erhöht die Eiskraft
item_ring_stone#Quarzring
item_ring_stone_desc#Erhöht die Steinkraft
item_ring_lightning#Amethystring
item_ring_lightning_desc#Erhöht die Blitzkraft
item_ring_illusion#Obsidianring
item_ring_illusion_desc#Erhöht die Illusionskraft
item_spell_triple#Zauber : Dreifacher Schuss
item_spell_triple_desc#Schießt drei Schüsse
item_brooch_finesse#Falscher Erzmagierbart
item_brooch_finesse_desc#Kritische Trefferchance (x2)
item_fairy_fire#Alicia-Fee
item_fairy_fire_desc#Hilft dir im Verlies
item_fairy_target#Scarlett-Fee
item_fairy_target_desc#Hilft dir im Verlies
item_robe_magician#Robe des Zauberers
item_robe_magician_desc#Erhöht die Rüstung
item_gem_fire#Feuerjuwel
item_gem_fire_desc#Feuerangriff (mehr Schaden)
item_ring_fire#Rubin Ring
item_ring_fire_desc#Erhöht die Feuerkraft
item_manual_staff#Handbuch des Zauberstabes
item_manual_staff_desc#Erhöht die Reichweite
item_spell_teleport#Spell: Teleport
item_spell_teleport_desc#Cast to teleport within the room
item_spell_slime_explode#Spell: Invoke Slime
item_spell_slime_explode_desc#Cast to invoke an explosive slime
spell_teleport#Teleportation
spell_slime_explode#invoke slime
item_spell_fireball#Zauber: Feuerball
item_spell_fireball_desc#Zauber, um einen Feuerball zu beschwören
item_spell_freeze#Zauber: Monster einfrieren
item_spell_freeze_desc#Zauber, um Monster einzufrieren
item_spell_earthquake#Zauber: Erdbeben
item_spell_earthquake_desc#Zauber, um das Verlies durchzuschütteln
item_spell_protection#Zauber: Magisches Schild
item_spell_protection_desc#Zauber, um ein magisches Schild zu beschwören
spell_fireball#Feuerball
spell_freeze#Monster einfrieren
spell_earthquake#Erdbeben
spell_protection#Magisches Schild
msg_level1_0#Deine Aufgabe beginnt!
msg_level1_1#"Hexen haben die Tochter des Erzmagiers entführt und sie in ihr Lager gebracht.
msg_level1_2#Ich muss sie retten!"
msg_level2_0#Die Tochter des Erzmagiers
msg_level2_1#"Ich komme sofort, um dich zu befreien !
msg_level2_2#Hoffentlich ist sie wohlbehalten..."
msg_level3_0#Die Tochter des Erzmagiers
msg_level3_1#"Hab ich es dir je erzählt?
msg_level3_2#Die Tochter des Erzmagiers ist das süßeste Mädchen der magischen Akademie!"
msg_level4_0#Der Erzmagier
msg_level4_1#"Der Erzmagier ist ein sehr weiser Mann, und zugleich mein Mentor.
msg_level4_2#Er hat mich gelehrt, dass wir auf der besten Welt leben."
msg_level5_0#Die Tochter des Erzmagiers
msg_level5_1#"Ich erinnere mich an die Tochter des Erzmagiers und mich, damals auf der magischen Akademie.
msg_level5_2#Wir haben beim Heilmagier gespielt, hi hi !"
msg_level6_0#Der Erzmagier
msg_level6_1#"Meine Eltern starben, als ich noch ein Baby war.
msg_level6_2#Der Erzmagier hat mich wie seinen eigenen Sohn aufgezogen."
msg_rats_bats_0#Monster
msg_rats_bats_1#"Hey! Warum müssen wir immer Ratten und Fledermäuse ausrotten
msg_rats_bats_2#in diesen Schurken Spielen ?"
msg_snakes_0#Schlangen
msg_snakes_1#"Ich HASSE Schlangen!"
msg_witches_0#Hexen
msg_witches_1#"S... Hexen !!!"
msg_gold_0#Gold
msg_gold_1#"♫ Money money money ♫
msg_gold_2#Ich frage mich, ob ich nützliche Gegenstände in diesem Verlies kaufen kann..."
msg_familiar_0#Feen
msg_familiar_1#"Oh! Ich habe Gesellschaft!
msg_familiar_2#Ich hoffe ich finde noch andere Verbündete im Verlies."
msg_butcher_0#Der Schweinemetzger
msg_butcher_1#"Wow, das ist ein großer Typ!
msg_butcher_2#Ich hoffe ich werde kein Hackfleisch..."
msg_giant_slime_0#Der gigantische Schleim
msg_giant_slime_1#"Ich bin grün, riesig und stinke.
msg_giant_slime_2#Was ich bin ?"
msg_cyclops_0#Der Steinzyklop
msg_cyclops_1#"Wie ist es in dem Raum gelaufen?
msg_cyclops_2#Es ist größer und länger als das Tor!"
msg_wererat_0#Die Werratte
msg_wererat_1#"Sieht aus wie meine alte Tante..."
msg_giant_spider_before_0#Der leere Raum
msg_giant_spider_before_1#"Ist hier jemand? "
msg_giant_spider_after_0#Die riesige Spinne
msg_giant_spider_after_1#"Ich HASSE Spinnen"
msg_tuto_intro_0#Tutorial: Wesentliches
msg_tuto_intro_1#Benutze WASD (Standard), um dich im Verlies zu bewegen.
msg_tuto_intro_2#Feuere mit den Pfeiltasten (Standard).
msg_tuto_items_0#Tutorial: Gegenstände
msg_tuto_items_1#Gegenstände verbessern deinen Charakter oder geben dir neue Kräfte.
msg_tuto_items_2#Finde oder kaufe so viele du kannst.
msg_tuto_heal_0#Tutorial: Leben
msg_tuto_heal_1#Du hast einige Trefferpunkte verloren.
msg_tuto_heal_2#Finde etwas um dich zu heilen, bevor du stirbst.
msg_tuto_shops_0#Tutorial: Geschäfte
msg_tuto_shops_1#Du kannst viele Geschäfte im Verlies finden.
msg_tuto_shops_2#Hier kannst du Geld ausgeben, um Gegenstände oder Essen zu kaufen.
msg_tuto_boss_door_0#Tutorial: Boss-Tür
msg_tuto_boss_door_1#Von hier aus kannst du eine geschlossene, goldene Tür sehen.
msg_tuto_boss_door_2#Hier ist der Boss von dieser Etage, aber du brauchst den goldenen Schlüssel, um die Tür zu öffnen.
msg_tuto_challenge_door_0#Tutorial: Raum der Herausforderung
msg_tuto_challenge_door_1#Schau auf die dekorative Tür. Es ist ein Raum der Herausforderung.
msg_tuto_challenge_door_2#Du kannst hier wertvolle Belohnungen erhalten, aber sei vorsichtig!
msg_tuto_shots_0#Tutorial: Schussarten
msg_tuto_shots_1#Du hast eine neue Schussart gefunden.
msg_tuto_shots_2#Drücke [Waffe wechseln] (Standard: Tab), um zwischen den Schussarten zu wechseln.
msg_tuto_spell_0#Tutorial: Zauber
msg_tuto_spell_1#Du hast einen magischen Zauber gefunden.
msg_tuto_spell_2#Drücke die Zaubertaste (Standard: Leertaste), um einen Zauber zu beschwören.
enemy_type_bat#eine Fledermaus
enemy_type_rat#eine Ratte
enemy_type_rat_black#eine schwarze Ratte
enemy_type_rat_helmet#eine Ratte mit Helm
enemy_type_rat_black_helmet#eine schwarze Ratte mit Helm
enemy_type_evil_flower#eine böse Blume
enemy_type_evil_flower_ice#eine böse Edelweiß
enemy_type_snake#eine Schlange
enemy_type_snake_blood#eine Blutschlange
enemy_type_slime#ein Schleim
enemy_type_slime_red#ein roter Schleim
enemy_type_slime_blue#ein blauer Schleim
enemy_type_slime_violet#ein violetter Schleim
enemy_type_imp_blue#ein blauer Imp
enemy_type_imp_red#ein roter Imp
enemy_type_pumpkin#ein verrückter Kürbis
enemy_type_witch#eine Hexe
enemy_type_witch_red#eine rote Hexe
enemy_type_cauldron#ein großer Kessel
enemy_type_bubble#eine Blase
enemy_type_boss_butcher#der Schweinemetzger
enemy_type_boss_slime_giant#der Gigantische Schleim
enemy_type_boss_cyclops#der Steinzyklop
enemy_type_boss_rat_king#der Werrattenkönig
enemy_type_boss_spider_giant#die Gigantische Spinne
enemy_type_green_rat#eine grüne Ratte
enemy_type_rock_falling#ein fallender Fels
enemy_type_rock_missile#ein geworfener Fels
enemy_type_spider_egg#ein fallendes Spinnenei
enemy_type_spider_little#eine Spinne
enemy_type_spider_web#ein Spinnennetz
enemy_type_ghost#ein Geist
enemy_type_zombie#ein Zombie
enemy_type_zombie_dark#ein dunkler Zombie
enemy_type_francky#das Ding
enemy_type_himself#selbst
source_explosion#Explosion
source_poison#Gift
enemy_francky#Das Ding
enemy_francky_head#Ding's Kopf
item_apple_green#Grüner Apfel
item_apple_green_desc#Regeneriert 3 TP und heilt Vergiftungen
item_manual_slime#Handbuch der Schleimbeherrschung
item_manual_slime_desc#Schleime zielen nicht mehr auf dich
item_spell_dual_quick#Zauberbuch der schnellen Doppelschüsse
item_spell_dual_quick_desc#Schießt zwei Schüsse (schnell)
item_spell_triple_quick#Zauberbuch der schnellen Dreifachschüsse
item_spell_triple_quick_desc#Schießt drei Schüsse (schnell)
item_manual_health#Gesundheitshandbuch
item_manual_health_desc#Gesunde Gegenstände bringen mehr TP
item_rear_shot#Mitarbeiter Kappe
item_rear_shot_desc#Schießt einen Rückwärtsschuss
item_book_random_shot#Zauberbuch der Zufallschüsse
item_book_random_shot_desc#Schießt einen Schuss in eine zufällige Richtung
item_spell_web#Zauber: Spinnennetz
item_spell_web_desc#Zaubere um ein Spinnennetz zu werfen
item_book_magic_i#Zauberbuch - Wälzer I
item_book_magic_i_desc#Verringert die Abklingzeit der Zauber
item_book_magic_ii#Zauberbuch - Wälzer II
item_book_magic_ii_desc#Erhöht die Kraft der Zauber
item_sulfur#Schwefel
item_sulfur_desc#Kann Leichen zum Explodieren bringen
spell_web#Spinnennetz
tuto_reset#Tutorial zurücksetzen
tuto_reset_desc#Setzt das Tutorial zurück
msg_francky_0#Das... Ding
msg_francky_1#Ihh... Es sieht aus als wäre es aus verschiedenen Körperteilen gemacht !
msg_tuto_tips_0#Tutorial: Tipps
msg_tuto_tips_1#Benutze die Zeitkontrolle (Standard: RShift) um schneller zu reisen.
msg_tuto_tips_2#Drücke [Enter] um Nachrichtenboxen sofort zu schließen.
menu_continue#Fortfahren
menu_continue_desc#Mit dem Spiel fortfahren
menu_save_quit#Speichern und beenden
menu_save_quit_desc#Speichern und zum Hauptbildschirm zurückkehren
menu_quit#Beenden ohne speichern
menu_quit_desc#Zum Hauptbildschirm zurückkehren ohne speichern
inventory#Inventar
dc_certificate#Todeszertifikat
dc_killed_by#Getötet hat dich
dc_died_level#Gestorben auf Level
dc_after#nach
dc_minutes#Min. vom Spiel
dc_killed_monsters#Besiegte Monster
dc_gold#Gold
dc_challenges#Abgeschlossene Herausforderungen
player_name#Spielername
player_name_desc#Ändere den Spielernamen
hi_scores#Ruhmeshalle
hi_scores_desc#Highscores
credits#Credits
credits_desc#Credits Bildschirm
volume_sound#Sound Lautstärke
volume_sound_desc#Benutze die linke und rechte Pfeiltaste um die Lautstärke zu regeln
volume_music#Musik Lautstärke
certificate_capture#Drücke [F1] um das Zertifikat als PNG Bild zu speichern
certificate_saved#Speicher auf
msg_tuto_temple_0#Tutorial: Tempel
msg_tuto_temple_1#Der Tempel ist der Ort, wo man zu einem Gott beten oder spenden kann.
msg_tuto_temple_2#Götter können dir helfen und Boni vergeben.
key_interact#interagiere
interact_worship#Anbetung
interact_shop#Kaufe
interact_donate#Spende 10 Gold
interact_donate_fail#(nicht genug Gold)
worshipping#Du bist nun ein Anbeter von
divinity_healer_0#Pomonos der Rechte
divinity_healer_1#Wächter des Rechts und Schutzpatron der Armen.
divinity_healer_2#Er würdigt Spenden, Leid und den Kampf gegen das Böse.
divinity_fighter_0#Tello der Starke
divinity_fighter_1#Gebieter der Kämpfer und der Starken.
divinity_fighter_2#Er würdigt im Kampf gefallene Monster und Titanen.
divinity_ice_0#Mister Schnee
divinity_ice_1#Gott der Kälte.
divinity_ice_2#Er würdigt den Einsatz von Eis.
divinity_stone_0#Gaya
divinity_stone_1#Gott des Gesteines und der Erde.
divinity_stone_2#Er würdigt den Einsatz von Gestein.
divinity_intervention_0#Göttliche Intervention
divinity_intervention_1#schreitet zu deinem Gunsten ein.
divinity_gift_0#Göttliche Gabe
divinity_gift_1#gewährt dir ein Geschenk.
item_floor_map#Verlieskarte
item_floor_map_desc#Offenbart die Karte der derzeitigen Etage
item_alcohol#Absinth
item_alcohol_desc#erhöht vorübergehend den Schaden
achiev_rats#Rattengift
achiev_rats_desc#Töte 250 Ratten
achiev_100#Geizig
achiev_100_desc#Sammle 100 goldene Münzen
achiev_piety_max#Treu
achiev_piety_max_desc#Erreiche die höchste Pietätsstufe
achiev_4_hits#Brochette
achiev_4_hits_desc#Verletze 4 Monster mit demselben Schuss
achiev_complete_set#Gekleidet
achiev_complete_set_desc#Rüste aus: Mantel + Hut + Schuhe + Handschuhe
achiev_giant_slime#Gigantischer Schleim Mörder
achiev_giant_slime_desc#Töte den gigantischen Schleim
achiev_cyclops#Zyklopen Mörder
achiev_cyclops_desc#Töte den Steinzyklopen
achiev_rat_king#Werratten Mörder
achiev_rat_king_desc#Töte den Werrattenkönig
achiev_giant_spider#Gigantischer Spinnen Mörder
achiev_giant_spider_desc#Töte die gigantische Spinne
achiev_francky#Ding Mörder
achiev_francky_desc#Töte das Ding
achiev_butcher#Metzger Mörder
achiev_butcher_desc#Töte den Metzger
achiev_witches#Inquisitor
achiev_witches_desc#Töte 50 Hexen
achiev_eggs#Schlechtes Omelett
achiev_eggs_desc#Zerstöre 100 Eier
achiev_vampire#Vampirjäger
achiev_vampire_desc#Töte den Vampier
achiev_challenges#Gladiator
achiev_challenges_desc#Schließe 4 Herrausforderungen ab
achiev_win#Lebe einen Traum
achiev_win_desc#Beende die Demo
func_achiev_screen#Erfolge Bildschirm
func_achiev_all#Alle Beschreibungen der Erfolge
func_double_spell#Zwei Zauber fallen
enemy_type_evil_flower_fire#eine böse Feuerplanze
enemy_type_bat_skeleton#eine Skelettfledermaus
enemy_type_slime_large#ein riesiger Schleim
enemy_type_slime_blue_large#ein riesiger blauer Schleim
enemy_type_slime_red_large#ein riesiger roter Schleim
enemy_type_slime_violet_large#ein riesiger violetter Schleim
enemy_type_bogeyman#ein Schreckgespenst
enemy_type_cauldron_elemental#ein elementarer Kessel
menu_achievements#Erfolge
menu_achievements_desc#Zeige die Erfolge
achievement_complete#Erfolg freigeschaltet!
item_spell_flower#Zauber: Rufe magische Blume
item_spell_flower_desc#Benutze, um eine magische Blume zu rufen
item_rapid_shots#Zauberbuch des schnellen Schusses
item_rapid_shots_desc#Zauberer Maschinengewehr
item_fairy_poison#Fee Vicky
item_fairy_poison_desc#Hilft dir im Verlies
item_luck#Vierblättriges Kleeblatt
item_luck_desc#Erhöht kurzfristig die Chance auf Gold
item_fairy_powder#Feenstaub
item_fairy_powder_desc#Begeistert die Feen kurzfristig
item_ring_poison#Smaragdring
item_ring_poison_desc#Erhöht die Kraft des Giftes
item_gem_poison#Giftkristall
item_gem_poison_desc#Giftangriff
item_book_prayer_i#Buch der Beter - Wälzer I
item_book_prayer_i_desc#Erhöht die Pietät
item_book_prayer_ii#Buch der Beter - Wälzer II
item_book_prayer_ii_desc#Reduziert Kosten für die Pietät
item_pet_slime#Schleimhaustier
item_pet_slime_desc#Es wird dir folgen und helfen
item_hat_advanced#Hut des Hexenmeisters
item_hat_advanced_desc#Elementare Resistenz + Feuerate erhöht
item_robe_advanced#Magischer Mantel des Schocks
item_robe_advanced_desc#Reflecktiert und erhöht die Rüstung
item_critical#Falscher magischer Bart
item_critical_desc#Kritische Trefferchance (x2)
item_critical_advanced#Falscher Erzmagier Bart
item_critical_advanced_desc#Kritische Trefferchance (x3)
item_spell_fairy#Spell: Feentransmutation
item_spell_fairy_desc#Benutze, um dich in eine Fee zu verwandeln
item_gloves_advanced#Ranger Handschuhe
item_gloves_advanced_desc#Entschärft Fallen und erhöhte Schussrate
item_boots_advanced#Ranger Schuhe
item_boots_advanced_desc#Erhöhte Geschwindigkeit
divinity_leveling_0#Hingabe Aufstieg!
div_fighter_lvl#erhöht deinen Schaden
div_healer_lvl_2#gibt dir Regeneration
div_healer_lvl_3#erhöht deine Regeneration
div_ice_lvl_3#erhöht deine Eisresistenz
div_ice_lvl_4#erhöht deinen Eisangriff
div_ice_lvl_5#erhöht deine Frostimmunität
div_stone_lvl_3#erhöht deine Steinresistenz
div_stone_lvl_4#erhöht deinen Steinangriff
div_stone_lvl_5#erhöht deine Rückstoßimmunität
enemy_vampire#Vampir
enemy_type_vampire#der Vampir
msg_tuto_achiev_0#Tutorial: Erfolge
msg_tuto_achiev_1#Du hast einen Erfolg abgeschlossen.
msg_tuto_achiev_2#Sie offenbaren neue Gegenstände oder Boni.
msg_vampire_0#Der Vampir
msg_vampire_1#Ich habe vergessen Knoblauch mitzunehmen!
msg_level7_0#Die Tochter des Erzmagiers
msg_level7_1#"Ich komme näher und näher.
msg_level7_2#Sie kann nicht so weit weg sein von hier."
divinity_air_0#Ostram
divinity_air_1#Göttlichkeit von Luft und Sturm.
divinity_air_2#Er mag den Einsatz von Blitz.
div_air_lvl#erhöht deine Geschwindigkeit
div_air_lvl_4#erhöht deinen Blitzangriff
config_joystick#Joystick konfigurieren
redef_joystick#Joystick Steuerung neu einstellen
joystick_configuration#Joystick Konfiguration
joystick_configuration_desc#Bitte den Joystick konfigurieren
joystick_configuration_insert#[Taste drücken]
joystick_not_found#Joystick nicht verbunden!
item_scroll_revelation#Schriftrolle der Offenbarung
item_scroll_revelation_desc#Offenbare Geheimnisse und Trankeffekte
item_potion_01#Roter Trank
item_potion_02#Grüner Trank
item_potion_03#Goldener Trank
item_potion_04#Blauer Trank
item_potion_05#Violetter Trank
item_potion_06#Rosa Trank
item_potion_07#Oranger Trank
item_potion_08#Türkiser Trank
item_potion_09#Brauner Trank
item_potion_10#Dunkler Trank
item_potion_desc#Unbekannter Effekt
item_potion_health#Heiltrank
item_potion_health_desc#Stellt 18 LP wieder her
item_potion_poison#Gifttrank
item_potion_poison_desc#Vergiftet
item_potion_speed#Geschwindigkeitstrank
item_potion_speed_desc#Erhöht temporär die Geschwindigkeit
item_potion_slow#Verlangsamungstrank
item_potion_slow_desc#Verringert temporär die Geschwindigkeit
item_potion_weakness#Schwächetrank
item_potion_weakness_desc#Verringert temporär den Schaden
item_potion_strength#Stärketrank
item_potion_strength_desc#Erhöht temporär den Schaden
item_potion_oblivion#Vergesslichkeitstrank
item_potion_oblivion_desc#Vergiss Trankeffekte und die Karte
item_potion_confusion#Verwirrungstrank
item_potion_confusion_desc#Macht verwirrt
item_potion_cure#Tabula Rasa Trank
item_potion_cure_desc#Bricht alle Spielereffekte ab
item_potion_rage#Wuttrank
item_potion_rage_desc#Wirft Feuerbälle um den Spieler
item_bag#Tasche
item_bag_desc#Liefert mehr Platz für Verbrauchsgüter
msg_potion_id_0#Trank Identifikation
msg_potion_id_1#Du hast identifiziert:
msg_tuto_consumables_0#Tutorial: Verbrauchsgüter
msg_tuto_consumables_1#[num1-num4] um ein Verbrauchsgut zu benutzen
msg_tuto_consumables_2#[left shift][num1-num4] um es fallenzulassen.
msg_tuto_potions_0#Tutorial: Tränke
msg_tuto_potions_1#Du hast einen Trank gefunden.
msg_tuto_potions_2#Du musst ihn trinken oder identifizieren, um den Effekt zu wissen.
secret_found#Geheimraum gefunden!
enemy_type_sausage#eine Wurst
enemy_type_spider_tarantula#eine Tarantel
effect_speed#Geschwindigkeit erhöht!
effect_slow#Geschwindigkeit verringert!
effect_strength#Schaden erhöht!
effect_weakness#Schaden verringert!
effect_confusion#Verwirrt!
effect_forget#Du vergisst!
effect_cure#Tabula rasa!
effect_rage#Wuuuut!
item_book_alchemy#Buch der Alchemie
item_book_alchemy_desc#Offenbart den Effekt einiger Tränke
item_fairy_stone#Fee Cassandra
item_fairy_stone_desc#Hilft dir im Verlies
item_merchant#Gildensiegel des Kaufmanns
item_merchant_desc#Bessere Preise im Shop
item_spell_time#Zauber: Zeitstopp
item_spell_time_desc#Zaubere, um die Zeit zu verlangsamen
item_side_shots#Zauberbuch der Seitwärtsschüsse
item_side_shots_desc#Schießt Schüsse seitlich
item_spell_lightning#Zauber: Blitz
item_spell_lightning_desc#Zaubere, um einen Blitz zu beschwören
item_belt_advanced#Schwarzer Gurt
item_belt_advanced_desc#Erhöht die Feuerrate der Feen
item_rear_shot_advanced#Silberne Personalkappe
item_rear_shot_advanced_desc#Schießt zwei Schüsse rückwärts
item_amulet_retaliation#Amulett der Rache
item_amulet_retaliation_desc#Rächt sich
item_rage_amulet#Wutamulett
item_rage_amulet_desc#Sendet Feuerschüsse
achiev_fairies#Charlie's Engel
achiev_fairies_desc#Bekomme 3 Feen
achiev_ghost#Ghostbuster
achiev_ghost_desc#Töte 50 Geister
achiev_noob#Wahrer Anfänger
achiev_noob_desc#Sterbe in Level 1
achiev_no_damage#Zäher Kerl
achiev_no_damage_desc#Beende 1 Level, ohne ein Leben zu verlieren
achiev_no_damage2#Sehr zäher Kerl
achiev_no_damage2_desc#Beende 2 Level, ohne ein Leben zu verlieren
achiev_no_damage3#Sehr sehr zäher Kerl
achiev_no_damage3_desc#Beende 3 Level, ohne ein Leben zu verlieren
achiev_apostate#Apostat
achiev_apostate_desc#Lehne eine Level 4 Göttlichkeit ab
achiev_fanatic#Fanatiker
achiev_fanatic_desc#Gebe dem Tempel 100 Gold
func_nothing#Nichts!
state_frozen#Eingefroren
state_slow#Langsam
state_speed#Eilig
state_poison#Vergiftet
state_weakness#Schwäche
state_strength#Stärke
state_rage#Wut
state_confusion#Verwirrt
state_time#Zeitstopp
state_div_protection#Geschützt (div)
state_div_speed#Eilig (div)
state_div_firerate#Feuerrate+ (div)
state_div_damage#Schaden+ (div)
dc_victory#Siegeszertifikat
dc_after_victory#Sieg danach
player#Spieler
players#Spieler
ui_base_damage#Basisschaden
ui_fire_rate#Feuerrate
ui_second#Sekunde
ui_temple_donation#Tempelspende
[spanish]
start_new_game#Empezar nueva partida
start_desc#La partida anterior se perderá
restore#Restaurar partida
at#en
level#nivel
begin_journey#Comienza tu aventura en un nuevo calabozo
config_keys#Configurar teclas
redef_input#Redefinir controles del jugador
exit_game#Salir del juego
return_to_desktop#Volver al escritorio
key_configuration#Configuración de teclas
key_configuration_desc#Por favor configure las teclas
key_configuration_insert#[presione tecla]
key_configuration_done#LISTO
key_move_up#moverse arriba
key_move_down#moverse abajo
key_move_left#moverse a la izquierda
key_move_right#moverse a la derecha
key_fire_up#disparar arriba
key_fire_down#disparar abajo
key_fire_left#disparar a la izquierda
key_fire_right#disparar a la derecha
key_fire_select#seleccionar disparo
key_time#control del tiempo
key_fire#disparo (un botón)
configure_game#Configuración
configure_game_desc#Cambia las opciones del juego
config_back#Volver
config_back_desc#Volver al menú principal
config_lang#Idioma
config_lang_desc#Elije usando las teclas izquierda y derecha
english#Inglés
french#Francés
german#Alemán
spanish#Español
russian#Ruso
keys_move#mover
keys_fire#disparar
keys_select_1#disparo
keys_select_2#selector
keys_time#control de tiempo
key_spell#invocar un conjuro
play_again#Presiona [ENTER] para jugar de nuevo / [ESC] para volver al menú
items_found#Items
monsters_killed#Monstruos
congratulations_1#FELICIDADES !
congratulations_2#Te haz enfrentado a este demo y has derrotado a los jefes!
congratulations_3#Nos veremos luego en una nueva aventura !
by#por
critical#CRÍTICO
poison#VENENO
merchant_speech_0#¡Los mejores precios de todo el calabozo!
merchant_speech_1#¡Bienvenido a la tienda Pawn'n'Witches!
merchant_speech_2#¡Echa una mirada a nuestra mercancía!
enemy_butcher#Cerdo Carnicero
enemy_giant_slime#Baba Gigante
enemy_cyclops#Cíclope de piedra
enemy_rat_king#Hombre Rata Rey
enemy_giant_spider#Araña gigante
item_copper#Moneda de cobre
item_copper_desc#Una moneda de cobre (valor 1)
item_silver#Moneda de plata
item_silver_desc#Una moneda de plata (valor 5)
item_gold#Moneda de oro
item_gold_desc#Una moneda de oro (valor 10)
item_titan_heart#Corazón de Titán
item_titan_heart_desc#Incrementa PV máximos
item_elven_cookie#Galleta Elven
item_elven_cookie_desc#Restaura y aumenta PV máximos
item_apple#Manzana
item_apple_desc#Restaura 3 PV
item_bread#Pan
item_bread_desc#Restaura 7 PV
item_cheese#Queso
item_cheese_desc#Restaura 15 PV
item_boss_key#Llave del jefe
item_boss_key_desc#Abre la puerta del jefe
item_sorcerer_hat#Sombrero del hechicero
item_sorcerer_hat_desc#Aumenta velocidad de disparo
item_velvet_boots#Botas de terciopelo
item_velvet_boots_desc#Aumenta la velocidad
item_spell_dual#Conjuro : Rayo doble
item_spell_dual_desc#Dispara dos rayos
item_displacement_gloves#Guantes de desplazamiento
item_displacement_gloves_desc#La velocidad del jugador afecta la velocidad del proyectil
item_staff#Báculo Ébano
item_staff_desc#Aumenta la velocidad y el daño del rayo
item_fairy#Hada Lilly
item_fairy_desc#Te ayuda en el calabozo
item_leather_belt#Cinturón de cuero
item_leather_belt_desc#Aumenta la velocidad de disparo
item_blood_snake#Serpiente de sangre
item_blood_snake_desc#Aumenta el daño
item_gem_ice#Gema de hielo
item_gem_ice_desc#Ataque de hielo (congelar)
item_gem_illusion#Gema de ilusión
item_gem_illusion_desc#Ataque de ilusión (ignora paredes y armaduras)
item_gem_stone#Gema de piedra
item_gem_stone_desc#Ataque de piedra (repeler)
item_gem_lightning#Gema de trueno
item_gem_lightning_desc#Ataque de trueno (rebote)
item_fairy_ice#Hada Natasha
item_fairy_ice_desc#Te ayuda en el calabozo
item_ring_ice#Anillo de safiro
item_ring_ice_desc#Aumenta el poder del hielo
item_ring_stone#Anillo de cuarso
item_ring_stone_desc#Aumenta el poder de la piedra
item_ring_lightning#Anillo de amatista
item_ring_lightning_desc#Aumenta el poder del trueno
item_ring_illusion#Anillo de obsidiana
item_ring_illusion_desc#Aumenta el poder de la ilusión
item_spell_triple#Conjuro : Rayo triple
item_spell_triple_desc#Dispara tres rayos
item_brooch_finesse#Barba falsa de archimago
item_brooch_finesse_desc#Probabilidad de disparo crítico (x2)
item_fairy_fire#Hada Alicia
item_fairy_fire_desc#Te ayuda en el calabozo
item_fairy_target#Hada Scarlett
item_fairy_target_desc#Te ayuda en el calabozo
item_robe_magician#Bata del Mago
item_robe_magician_desc#Aumenta armadura
item_gem_fire#Gema de fuego
item_gem_fire_desc#Ataque de fuego (más daño)
item_ring_fire#Anillo de rubí
item_ring_fire_desc#Aumenta el poder del fuego
item_manual_staff#Manual del báculo
item_manual_staff_desc#Aumenta rango de disparo
item_spell_teleport#Conjuro: Teletransportación
item_spell_teleport_desc#Invoca teletransportarse dentro de la habitación
item_spell_slime_explode#Conjuro: Invocar baba
item_spell_slime_explode_desc#Invoca una baba explosiva
spell_teleport#Teletransportación
spell_slime_explode#Invocar baba
spell_fireball#bola de fuego
spell_freeze#congelar monstruos
spell_earthquake#terremoto
spell_protection#escudo mágico
item_spell_fireball#Conjuro: Bola de fuego
item_spell_fireball_desc#Invocar para lanzar una bola de fuego
item_spell_freeze#Conjuro: Congelar monstruos.
item_spell_freeze_desc#Invocar para congelar a los monstruos.
item_spell_earthquake#Conjuro: Terremoto
item_spell_earthquake_desc#Invocar para hacer que el calabozo tiemble
item_spell_protection#Conjuro: Escudo mágico
item_spell_protection_desc#Invocar para crear un escudo mágico
msg_level1_0#Tu expedición comienza!
msg_level1_1#"Brujos han abducido a la hija del Archimago y la han llevado a la guarida.
msg_level1_2#Yo debo rescatarla!"
msg_level2_0#La hija del Archimago
msg_level2_1#"¡Voy ahora mismo a rescatarte!
msg_level2_2#Esperemos que ella esté sana y salva..."
msg_level3_0#La hija del Archimago
msg_level3_1#"¿No te lo he contado?
msg_level3_2#La hija del Archimago es la mujer más dulce de la Academia de Magia!"
msg_level4_0#El Archimago
msg_level4_1#"El Archimago es un hombre muy sabio, y además es mi mentor.
msg_level4_2#Él me ha enseñado que vivimos en lo mejor del mundo."
msg_level5_0#La hija del Archimago
msg_level5_1#"Recuerdo a la hija del Archimago conmigo, de vuelta en la Academia de Magia.
msg_level5_2#Solíamos jugar cerca del mago sanador."
msg_level6_0#El Archimago
msg_level6_1#"Mis padres fallecieron cuando yo era un bebé.
msg_level6_2#El Archimago me crió como si fuera su propio hijo."
msg_rats_bats_0#Monstruos
msg_rats_bats_1#"¡Oye! ¿Por qué siempre tenemos que matar ratas
msg_rats_bats_2#o murciélagos en estos juegos tipo Rogue?"
msg_snakes_0#Serpientes
msg_snakes_1#"ODIO a las serpientes!"
msg_witches_0#Brujas
msg_witches_1#"Pu... Brujas !!!"
msg_gold_0#Oro
msg_gold_1#"♫ Money money money ♫
msg_gold_2#Me pregunto si puedo comprar cosas útiles en este calabozo..."
msg_familiar_0#Hadas
msg_familiar_1#"¡Oh, tengo compañía!
msg_familiar_2#Ojalá encuentre a más aliados en este calabozo."
msg_butcher_0#El Cerdo Carnicero
msg_butcher_1#"¡Wow, este tipo si que es grandote!
msg_butcher_2#Espero no terminar hecho salchichas..."
msg_giant_slime_0#La Baba Gigante
msg_giant_slime_1#"Soy verde, grande y apesto.
msg_giant_slime_2#¿Qué soy?"
msg_cyclops_0#El Cíclope de piedra
msg_cyclops_1#"¿Cómo se pudo meter en la habitación?
msg_cyclops_2#¡Es más grande que la puerta!"
msg_wererat_0#El Hombre Rata
msg_wererat_1#"Se parece a mi vieja tía..."
msg_giant_spider_before_0#La habitación vacía
msg_giant_spider_before_1#"¿Hay alguien ahí? "
msg_giant_spider_after_0#La Araña Gigante
msg_giant_spider_after_1#"ODIO a las arañas"
msg_tuto_intro_0#Tutorial: Cosas básicas
msg_tuto_intro_1#Usa WASD (por defecto) para moverse dentr del calabozo.
msg_tuto_intro_2#Dispara usando las flechas (por defecto).
msg_tuto_items_0#Tutorial: Ítems
msg_tuto_items_1#Ítems mejoran a tu personaje o te dan nuevos poderes.
msg_tuto_items_2#Encuentra o compra la mayor cantidad que puedas.
msg_tuto_heal_0#Tutorial: Puntos de vida
msg_tuto_heal_1#Haz perdido algunos puntos de vida.
msg_tuto_heal_2#Encuentra algo para curarte antes de que mueras.
msg_tuto_shops_0#Tutorial: Tiendas
msg_tuto_shops_1#Puedes encontrar varias tiendas en el calabozo.
msg_tuto_shops_2#Aquí puedes gastar dinero para comprar ítems o comida.
msg_tuto_boss_door_0#Tutorial: Puerta del Jefe
msg_tuto_boss_door_1#Desde aquí puedes ver la puerta dorada cerrada.
msg_tuto_boss_door_2#Esa es la habitación del jefe, pero necesitas la llave dorada para entrar.
msg_tuto_challenge_door_0#Tutorial: Habitación de Desafíos
msg_tuto_challenge_door_1#Mira la puerta decorada. Es una habitación de desafíos.
msg_tuto_challenge_door_2#Puedes obtener buenas recompenzas ahí, ¡Pero entra con precaución!
msg_tuto_shots_0#Tutorial: Tipos de disparo
msg_tuto_shots_1#Haz encontrado un nuevo tipo de disparo.
msg_tuto_shots_2#Presiona la tecla de seleccionar disparos (por defecto: Tab) para cambiar entre tipos de disparo.
msg_tuto_spell_0#Tutorial: Conjuros
msg_tuto_spell_1#Haz encontrado un conjuro mágico.
msg_tuto_spell_2#Presiona la tecla de conjuros (por defecto: Espacio) para realizar el conjuro.
enemy_type_bat#un murciélago
enemy_type_rat#una rata
enemy_type_rat_black#una rata negra
enemy_type_rat_helmet#una rata con casco
enemy_type_rat_black_helmet#una rata negra con casco
enemy_type_evil_flower#una flor malvada
enemy_type_evil_flower_ice#una flor de las nieves malvada
enemy_type_snake#una serpiente
enemy_type_snake_blood#una serpiente ensangrentada
enemy_type_slime#una baba
enemy_type_slime_red#una baba roja
enemy_type_slime_blue#una baba azul
enemy_type_slime_violet#una baba violeta
enemy_type_imp_blue#un diablillo azul
enemy_type_imp_red#un diablillo rojo
enemy_type_pumpkin#una calabaza loca
enemy_type_witch#una bruja
enemy_type_witch_red#una bruja roja
enemy_type_cauldron#un caldero
enemy_type_bubble#una burbuja
enemy_type_boss_butcher#el Cerdo Carnicero
enemy_type_boss_slime_giant#la Baba Gigante
enemy_type_boss_cyclops#el Cíclope de piedra.
enemy_type_boss_rat_king#el Rey Hombre-Rata
enemy_type_boss_spider_giant#la Araña Gigante
enemy_type_green_rat#una rata verde
enemy_type_rock_falling#una roca cayendo
enemy_type_rock_missile#una roca lanzable
enemy_type_spider_egg#un huevo de araña cayendo
enemy_type_spider_little#una araña
enemy_type_spider_web#una tela-araña
enemy_type_ghost#un fantasma
enemy_type_zombie#un zombie
enemy_type_zombie_dark#un zombie oscuro
enemy_type_francky#la Cosa
enemy_type_himself#él mismo
source_explosion#explosión
source_poison#veneno
enemy_francky#La Cosa
enemy_francky_head#La cabeza de La Cosa
item_apple_green#Manzana verde
item_apple_green_desc#Restaura 3 PV y cura el veneno
item_manual_slime#Manual de Maestría de Baba
item_manual_slime_desc#Las babas ya no te atacan directamente
item_spell_dual_quick#El libro de los rayos rápidos dobles
item_spell_dual_quick_desc#Dispara dos rayos (rápido)
item_spell_triple_quick#El libro de los rayos rápidos triples
item_spell_triple_quick_desc#Dispara tres rayos (rápido)
item_manual_health#Manual de Salud
item_manual_health_desc#Los objetos de salud dan más PV
item_rear_shot#Gorra del váculo
item_rear_shot_desc#Dispara un rayo hacia trás
item_book_random_shot#Libro del disparo al azar
item_book_random_shot_desc#Dispara un rayo en una dirección al azar
item_spell_web#Conjuro: Telaraña
item_spell_web_desc#Invocar para lanzar telarañas
item_book_magic_i#Libro de magia - Tomo I
item_book_magic_i_desc#Disminuye el tiempo de espera de los conjuros
item_book_magic_ii#Libro de magia - Tomo II
item_book_magic_ii_desc#Aumenta el poder de los conjuros
item_sulfur#Sulfuro
item_sulfur_desc#Puede hacer que los cadáveres exploten
spell_web#telaraña
tuto_reset#Resetear tutorial
tuto_reset_desc#Resetea el tutorial
msg_francky_0#La... Cosa
msg_francky_1#Yuck... ¡Parece como si estuviera hecho con partes de distintos cuerpos!
msg_tuto_tips_0#Tutorial: Consejos
msg_tuto_tips_1#Usa el Control del Tiempo (por defecto: RShift) para viajar rápidamente.
msg_tuto_tips_2#Presiona [Enter] para cerrar el cuadro de mensajes inmediatamente.
menu_continue#Continuar
menu_continue_desc#Continúa con el juego
menu_save_quit#Guardar y salir
menu_save_quit_desc#Guarda la partida y se vuelve al menú principal
menu_quit#Salir sin guardar
menu_quit_desc#Vuelve al menú principal sin guardar la partida
inventory#Inventario
dc_certificate#Certificado de defunción
dc_killed_by#Matado por
dc_died_level#Muerto en nivel
dc_after#tras
dc_minutes#mins. de juego
dc_killed_monsters#Monstruos asesinados
dc_gold#Oro
dc_challenges#Desafíos completados
player_name#Nombre del jugador
player_name_desc#Modifica el nombre del jugador
hi_scores#Salón de la fama
hi_scores_desc#Mejores puntajes
credits#Créditos
credits_desc#Pantalla de créditos
volume_sound#Volumen del sonido
volume_sound_desc#Usa las flechas izquierda/derecha para cambiar el volumen
volume_music#Volumen de la música
certificate_capture#Presione [F1] para guardar el certificado en un archivo PNG
certificate_saved#Guardado en
msg_tuto_temple_0#Tutorial: Templo
msg_tuto_temple_1#El templo es el lugar en donde puedes venerar a una divinidad o donar.
msg_tuto_temple_2#Las Divinidades te pueden ayudar y te dan bonificaciones.
key_interact#interactuar
interact_worship#Venerar
interact_shop#Comprar
interact_donate#Donar 10 de oro
interact_donate_fail#(no hay suficiente oro)
worshipping#Ahora eres un venerador de
divinity_healer_0#Pomonos el Honrado
divinity_healer_1#Guardián de la honradez and patrocinador de los débiles.
divinity_healer_2#Él aprecia las donaciones, el sufrimiento y la lucha contra el mal.
divinity_fighter_0#Tello el Poderoso
divinity_fighter_1#Señor de los guerreros y los fuertes.
divinity_fighter_2#Él aprecia monstruos y titanes cayendo en la batalla.
divinity_ice_0#Señor Nieve
divinity_ice_1#Divinidad de la frialdad.
divinity_ice_2#Él aprecia el uso del hielo.
divinity_stone_0#Gaya
divinity_stone_1#Divinidad de la piedra y de la tierra.
divinity_stone_2#Él aprecia el uso de la piedra.
divinity_intervention_0#Intervención divina.
divinity_intervention_1#interviene a tu favor.
divinity_gift_0#Regalo divino.
divinity_gift_1#te concede un regalo.
item_floor_map#Mapa del calabozo
item_floor_map_desc#Revela el mapa del piso actual.
item_alcohol#Absenta
item_alcohol_desc#aumenta los daños temporalmente.
achiev_rats#Roedoricidio
achiev_rats_desc#Mata 250 ratas
achiev_100#Tacaño
achiev_100_desc#Recoleta 100 monedas de oro
achiev_piety_max#Fiel
achiev_piety_max_desc#Obtén el máximo nivel de devoción
achiev_4_hits#Brocheta
achiev_4_hits_desc#Daña a 4 monstruos con el mismo disparo
achiev_complete_set#Vestido
achiev_complete_set_desc#Equipar bata + sombrero + botas +guantes
achiev_giant_slime#Cazador de Babas Gigantes
achiev_giant_slime_desc#Mata a la Baba Gigante
achiev_cyclops#Cazador de Cíclopes
achiev_cyclops_desc#Mata al Cíclope de Piedra
achiev_rat_king#Cazador de Hombres-Rata
achiev_rat_king_desc#Mata al Rey Hombre-Rata
achiev_giant_spider#Cazador de Arañas Gigantes
achiev_giant_spider_desc#Mata a la Araña Gigante
achiev_francky#Cazador de Cosas
achiev_francky_desc#Mata a la Cosa
achiev_butcher#Cazador de Carniceros
achiev_butcher_desc#Mata al Carnicero
achiev_witches#Inquisidor
achiev_witches_desc#Mata a 50 brujas
achiev_eggs#Mala tortilla
achiev_eggs_desc#Destruye 100 huevos
achiev_vampire#Caza-Vampiros
achiev_vampire_desc#Mata al Vampiro
achiev_challenges#Gladiador
achiev_challenges_desc#Completa 4 desafíos
achiev_win#Vivir el sueño
achiev_win_desc#Completa el demo
func_achiev_screen#Pantalla de logros
func_achiev_all#Todas las descripciones de los logros
func_double_spell#Dos encantos aparecen
enemy_type_evil_flower_fire#una flor de fuego malvada
enemy_type_bat_skeleton#un esquéleto murciélago
enemy_type_slime_large#una baba grande
enemy_type_slime_blue_large#una baba azul grande
enemy_type_slime_red_large#una baba roja grande
enemy_type_slime_violet_large#una baba violeta grande
enemy_type_bogeyman#un hombre del saco
enemy_type_cauldron_elemental#una caldera elemental
menu_achievements#Logros
menu_achievements_desc#Muestra los logros
achievement_complete#¡Logro desbloqueado!
item_spell_flower#Encanto:Invocar flor mágica
item_spell_flower_desc#Usar para invocar a flor mágica
item_rapid_shots#Libro de disparo rápido
item_rapid_shots_desc#Ametralladora de hechiceros
item_fairy_poison#Hada Vicky
item_fairy_poison_desc#Te ayuda en el calabozo
item_luck#Trébol de cuatro hojas
item_luck_desc#Aumenta temporalmente el oro encontrado
item_fairy_powder#Polvo de hadas
item_fairy_powder_desc#Exalta temporalmente a las hadas
item_ring_poison#Anillo de esmeralda
item_ring_poison_desc#Aumenta el poder de envenenamiento
item_gem_poison#Gema de veneno
item_gem_poison_desc#Ataque de veneno
item_book_prayer_i#Libro de rezos - Tomo I
item_book_prayer_i_desc#Incrementa la devoción
item_book_prayer_ii#Libro de rezos - Tomo II
item_book_prayer_ii_desc#Reduce el costo de la devoción
item_pet_slime#Baba mascota
item_pet_slime_desc#Te seguirá y ayudará
item_hat_advanced#Gorra de Warlock
item_hat_advanced_desc#Resistencia elemental y aumenta velocidad de ataque
item_robe_advanced#Bata mágica de choque
item_robe_advanced_desc#Repulsa e incrementa la armadura
item_critical#Barba de mago falsa
item_critical_desc#Probabilidad de ataque crítico (x2)
item_critical_advanced#Barba de archimago falsa
item_critical_advanced_desc#Probabilidad de ataque crítico (x3)
item_spell_fairy#Encanto: Transmutación de hadas
item_spell_fairy_desc#Usar para transmutar una hada
item_gloves_advanced#Guantes de guardabosques
item_gloves_advanced_desc#Desarma trampas y aumenta velocidad de ataque
item_boots_advanced#Botas de guardabosques
item_boots_advanced_desc#Aumenta velocidad
divinity_leveling_0#¡Mayor nivel de devoción!
div_fighter_lvl#Incrementa tu daño
div_healer_lvl_2#Te da regeneración
div_healer_lvl_3#Aumenta tu regeneración
div_ice_lvl_3#Incrementa tu resistencia al hielo
div_ice_lvl_4#Incrementa tu ataque de hielo
div_ice_lvl_5#Incrementa tu inmunidad al hielo
div_stone_lvl_3#Incrementa tu resistencia a la piedra
div_stone_lvl_4#Incrementa tu ataque de piedra
div_stone_lvl_5#Incrementa tu repulsión a la piedra
enemy_vampire#Vampiro
enemy_type_vampire#El Vampiro
msg_tuto_achiev_0#Tutorial: Logros
msg_tuto_achiev_1#Haz completado un logro-
msg_tuto_achiev_2#Desbloquean nuevos ítems o bonificaciones.
msg_vampire_0#El Vampiro
msg_vampire_1#¡Olvidé traer algo de ajo!
msg_level7_0#La hija del Archimago
msg_level7_1#"Me acerco más y más.
msg_level7_2#Ella no debería estar tan lejos de aquí."
divinity_air_0#Ostram
divinity_air_1#Divinidad del aire y la tormenta
divinity_air_2#Le gusta el uso de la electricidad.
div_air_lvl#Incrementa tu velocidad
div_air_lvl_4#increases your ataque eléctrico.
config_joystick#Configurar joystick
redef_joystick#Redefinir controles joystick
joystick_configuration#Configuración joystick
joystick_configuration_desc#Por favor configurar joystick
joystick_configuration_insert#[presionar botón]
joystick_not_found#¡Joystick no conectado!
item_scroll_revelation#Perfamino de revelaciones
item_scroll_revelation_desc#Revela secretos y efectos de pociones
item_potion_01#Poción roja
item_potion_02#Poción verde
item_potion_03#Poción dorada
item_potion_04#Poción azul
item_potion_05#Poción violeta
item_potion_06#Poción rosa
item_potion_07#Poción naranja
item_potion_08#Poción turquesa
item_potion_09#Poción café
item_potion_10#Poción oscura
item_potion_desc#Efecto desconocido
item_potion_health#Poción de curación
item_potion_health_desc#Restaura 18 PV
item_potion_poison#Poción de veneno
item_potion_poison_desc#Envenena
item_potion_speed#Poción de velocidad
item_potion_speed_desc#Aumenta al velocidad temporalmente
item_potion_slow#Poción lenta
item_potion_slow_desc#Disminuye la velocidad temporalmente
item_potion_weakness#Poción de debilidad
item_potion_weakness_desc#Disminuye el daño temporalmente
item_potion_strength#Poción de fuerza
item_potion_strength_desc#Aumenta el daño temporalmente
item_potion_oblivion#Poción del olvido
item_potion_oblivion_desc#Olvida el mapa y los efectos de poción
item_potion_confusion#Poción de confusión
item_potion_confusion_desc#Te vuelve confuso
item_potion_cure#Poción de Tábula Rasa
item_potion_cure_desc#Cancela todos los efectos del jugador
item_potion_rage#Poción de rabia
item_potion_rage_desc#Lanza bolas de fuego alrededor del jugador
item_bag#Bolsa
item_bag_desc#Da más espacio para objetos consumibles
msg_potion_id_0#Identificación de poción
msg_potion_id_1#Haz identificado:
msg_tuto_consumables_0#Tutorial:Consumibles
msg_tuto_consumables_1#[num1-num4] para usar items consumibles.
msg_tuto_consumables_2#[left shift][num1-num4] para botarlos.
msg_tuto_potions_0#Tutorial:Pociones
msg_tuto_potions_1#Haz encontrado una poción.
msg_tuto_potions_2#Necesitas beberla o identificarla para conocer su efecto.
secret_found#¡Habitación secreta encontrada!
enemy_type_sausage#una salchicha
enemy_type_spider_tarantula#una tarántula
effect_speed#¡Más velocidad!
effect_slow#¡Menor velocidad!
effect_strength#¡Más daño!
effect_weakness#¡Menos daño!
effect_confusion#¡Confundido!
effect_forget#¡Olvidadiso!
effect_cure#¡Tábula rasa!
effect_rage#¡Raaabiaaaa!
item_book_alchemy#Libro de alquimia
item_book_alchemy_desc#Revela los efectos de algunas pociones
item_fairy_stone#Hada Cassandra
item_fairy_stone_desc#Te ayuda en el calabozo
item_merchant#Sello del mercantil
item_merchant_desc#Mejores precios en la tienda
item_spell_time#Encanto:Detener tiempo
item_spell_time_desc#Invocar para hacer el tiempo más lento
item_side_shots#Libro de disparos laterales
item_side_shots_desc#Dispara rayos laterales
item_spell_lightning#Encanto: Relámpago
item_spell_lightning_desc#Invocar para lanzar relámpagos
item_belt_advanced#Cinturón negro
item_belt_advanced_desc#Aumenta el tiempo de disparo de las hadas
item_rear_shot_advanced#Báculo plateado
item_rear_shot_advanced_desc#Dispara dos disparos hacia atrás
item_amulet_retaliation#Amuleto de venganza
item_amulet_retaliation_desc#Contraataca
item_rage_amulet#Amuleto de furia
item_rage_amulet_desc#Lanza disparos de fuego
achiev_fairies#Los Ángles de Charlie
achiev_fairies_desc#Obtén 3 hadas
achiev_ghost#Cazafantasma
achiev_ghost_desc#Mata 50 fantasmas
achiev_noob#Novato de verdad
achiev_noob_desc#Muere en el primer nivel
achiev_no_damage#Tipo rudo
achiev_no_damage_desc#Completa un nivel sin perder vida
achiev_no_damage2#Tipo muy rudo
achiev_no_damage2_desc#Completa dos niveles sin perder vida
achiev_no_damage3#Tipo muy muy rudo
achiev_no_damage3_desc#Completa tres niveles sin perder vida
achiev_apostate#Apóstata
achiev_apostate_desc#Rechaza una divinidad nivel 4
achiev_fanatic#Fanático
achiev_fanatic_desc#Da 100 de oro al templo
func_nothing#¡Nada!
state_frozen#Congelado
state_slow#Lento
state_speed#Apurado
state_poison#Envenenado
state_weakness#Debilidad
state_strength#Fuerza
state_rage#Rabia
state_confusion#Confuso
state_time#Detener tiempo
state_div_protection#Protegido (div)
state_div_speed#Apurado (div)
state_div_firerate#Tiempo de disparo+ (div)
state_div_damage#Daño+ (div)
dc_victory#Certificado de victoria
dc_after_victory#Victoria después
player#jugador
players#jugadores
ui_base_damage#Daño base
ui_fire_rate#Velocidad de disparo
ui_second#segundo
ui_temple_donation#Donación al Templo
[russian]
start_new_game#Начать новую игру
start_desc#Старая игра будет стёрта
restore#Продолжить игру
at#в
level#Уровень
begin_journey#Начните ваше приключение в новом подземелье
config_keys#Настройка управления
redef_input#Сконфигурируйте управление игры
exit_game#Выход из игры
return_to_desktop#Выйти в ОС
key_configuration#Конфигурация клавиш
key_configuration_desc#Пожалуйста, задайте управление
key_configuration_insert#[нажмите клавишу]
key_configuration_done#ГОТОВО
key_move_up#Движение вверх
key_move_down#Движение вниз
key_move_left#Движение влево
key_move_right#Движение вправо
key_fire_up#Выстрел вверх
key_fire_down#Выстрел вниз
key_fire_left#Выстрел влево
key_fire_right#Выстрел вправо
key_fire_select#Выбор оружия
key_time#Ускорение времени
key_fire#Выстрел в направлении движения
key_spell#Произнести заклинание
configure_game#Конфигурация
configure_game_desc#Изменение параметров игры
config_back#Назад
config_back_desc#Назад в главное меню
config_lang#Язык
config_lang_desc#Выберите с помощью клавиш влево и вправо
russian#Русский
keys_move#движение
keys_fire#выстрел
keys_select_1#выбор
keys_select_2#оружия
keys_time#ускорение
play_again#Нажмите [ENTER] чтобы сыграть снова / [ESC] чтобы выйти в меню
items_found#Предметы
monsters_killed#Монстры
congratulations_1#ПОЗДРАВЛЯЕМ !
congratulations_2#Вы прошли демо и победили всех боссов !
congratulations_3#Скоро увидимся с новыми приключениями !
by#
critical#КРИТИЧЕСКИЙ УДАР
poison#ЯД
merchant_speech_0#Лучшие цены во всем подземелье!
merchant_speech_1#Добро пожаловать в магазин "Ведьмы и пешки"!
merchant_speech_2#Да вы только взгляните на наш товар!
enemy_butcher#Свин-мясник
enemy_giant_slime#Гигантский слизень
enemy_cyclops#Каменный циклоп
enemy_rat_king#Король веркрыс
enemy_giant_spider#Гигантский паук
item_copper#Медная монета
item_copper_desc#Медная монета (ценность 1)
item_silver#Серебряная монета
item_silver_desc#Серебряная монета (ценность 5)
item_gold#Золотая монета
item_gold_desc#Золотая монета (ценность 10)
item_titan_heart#Сердце титана
item_titan_heart_desc#Увеличивает максимальный уровень HP
item_elven_cookie#Печенье эльфов
item_elven_cookie_desc#Восстанавливает HP и увеличивает его максимальный уровень
item_apple#Яблоко
item_apple_desc#Восстанавливает 3 HP
item_bread#Хлеб
item_bread_desc#Восстанавливает 7 HP
item_cheese#Сыр
item_cheese_desc#Восстанавливает 15 HP
item_boss_key#Ключ Босса
item_boss_key_desc#Открывает врата в комнату Босса
item_sorcerer_hat#Шляпа мага
item_sorcerer_hat_desc#Увеличивает скорость стрельбы
item_velvet_boots#Бархатные сапоги
item_velvet_boots_desc#Увеличивает скорость
item_spell_dual#Заклинание : Двойной выстрел
item_spell_dual_desc#Позволяет стрелять двойным снарядом
item_rage_amulet#Амулет ярости
item_rage_amulet_desc#Месть
item_displacement_gloves#Перчатки перемещения
item_displacement_gloves_desc#Скорость персонажа влияет на скорость снарядов
item_staff#Эбонитовый посох
item_staff_desc#Увеличивает скорость снаряда и урон
item_fairy#Фея Лилли
item_fairy_desc#Помогает вам в подземелье
item_leather_belt#Кожаный ремень
item_leather_belt_desc#Увеличивает скорость стрельбы
item_blood_snake#Кровавый змей
item_blood_snake_desc#Увеличивает урон
item_gem_ice#Лёд
item_gem_ice_desc#Ледяная атака (заморозка)
item_gem_illusion#Камень иллюзий
item_gem_illusion_desc#Иллюзтонная атака (Игнорирует стены и броню)
item_gem_stone#Камень
item_gem_stone_desc#Каменная атака (отброс)
item_gem_lightning#Камень молний
item_gem_lightning_desc#Атака молний (отражение)
item_fairy_ice#Фея Наташа
item_fairy_ice_desc#Помогает вам в подземелье
item_ring_ice#Кольцо с сапфиром
item_ring_ice_desc#Увеличивает силу льда
item_ring_stone#Кольцо с кварцем
item_ring_stone_desc#Увеличивает силу камня
item_ring_lightning#Кольцо с аметистом
item_ring_lightning_desc#Увеличивает силу молний
item_ring_illusion#Кольцо с обсидианом
item_ring_illusion_desc#Увеличивает силу иллюзий
item_spell_triple#Заклинание : Тройной выстрел
item_spell_triple_desc#Позволяет стрелять тройным снарядом
item_brooch_finesse#Фальшивая борода архимага
item_brooch_finesse_desc#Шанс критического попадания (x2)
item_fairy_fire#Фея Алиса
item_fairy_fire_desc#Помогает вам в подземелье
item_fairy_target#Фея Скарлет
item_fairy_target_desc#Помогает вам в подземелье
item_robe_magician#Роба волшебника
item_robe_magician_desc#Увеличивает броню
item_gem_fire#Камень огня
item_gem_fire_desc#Атака огня (увеличенный урон)
item_ring_fire#Кольцо с рубином
item_ring_fire_desc#Увеличивает силу огня
item_manual_staff#Руководство к посоху
item_manual_staff_desc#Увеличивает дальность стрельбы
item_spell_teleport#Заклинание: Телепорт
item_spell_teleport_desc#Произнесите, чтобы телепортироваться в любое место комнаты
item_spell_slime_explode#Spell: Призыв слизня
item_spell_slime_explode_desc#Произнесите, чтобы призвать взрывного слизня
item_spell_fireball#Заклинание: Огненный шар
item_spell_fireball_desc#Произнесите, чтобы вызвать огненный шар
item_spell_freeze#Заклинание: Заморозка монстров
item_spell_freeze_desc#Произнесите, чтобы заморозить монстров
item_spell_earthquake#Заклинание: землетрясение
item_spell_earthquake_desc#Произнесите, чтобы сотрясти все подземелье
item_spell_protection#Заклинание: Магический щит
item_spell_protection_desc#Произнесите, чтобы призвать магический щит
spell_teleport#Телепорт
spell_slime_explode#Призвать слизня
spell_fireball#огненный шар
spell_freeze#заморозка монстров
spell_earthquake#землетрясение
spell_protection#магический щит
msg_level1_0#Ваше приключение началось!
msg_level1_1#"Ведьмы похитили дочь архимага и утащили ее в свое логово.
msg_level1_2#Мне нужно ее вернуть!"
msg_level2_0#Дочь архимага
msg_level2_1#"Я пришел чтобы спасти тебя!
msg_level2_2#Надеюсь, она жива..."
msg_level3_0#Дочь архимага
msg_level3_1#"Я когда-нибудь рассказывал тебе?
msg_level3_2#Дочь архимага - приятнейшая девушка во всей магической академии!"
msg_level4_0#Архимаг
msg_level4_1#"Архимаг - очень мудрый человек... А так же мой наставник.
msg_level4_2#Он показал мне, что мы живем в лучшем из миров."
msg_level5_0#Дочь архимага
msg_level5_1#"Я помню нас с дочерью архимага в магической академии.
msg_level5_2#Мы игрались с магией лечения, хи-хи !"
msg_level6_0#Архимаг
msg_level6_1#"Мои родители погибли, когда я был совсем крохой.
msg_level6_2#И архимаг растил меня как своего собственного сына."
msg_rats_bats_0#Монстры
msg_rats_bats_1#"Эй! Почему мы постоянно должны истреблять крыс и летучих мышей
msg_rats_bats_2#в рогаликах ?"
msg_snakes_0#Змеи
msg_snakes_1#"Я НЕНАВИЖУ ЗМЕЙ!"
msg_witches_0#Ведьмы
msg_witches_1#"Бл... Ведьмы !!!"
msg_gold_0#Золото
msg_gold_1#"♫ Money money money ♫
msg_gold_2#Я удивлюсь, если смогу купить хоть что-то полезное в этом подземелье..."
msg_familiar_0#Феи
msg_familiar_1#"Ох! Наконец-то я буду не один!
msg_familiar_2#Надеюсь, мне удастся найти больше союзников в этом подземелье."
msg_butcher_0#Свиночел-мясник
msg_butcher_1#"Эй, смотри какой здоровяк!
msg_butcher_2#Надеюсь, удастся порубить его на колбасу..."
msg_giant_slime_0#Гигантский слизень
msg_giant_slime_1#"Я зеленый, большой... И я воняю.
msg_giant_slime_2#Что же я такое?"
msg_cyclops_0#Каменный циклоп
msg_cyclops_1#"Как он прошел в комнату?
msg_cyclops_2#Он же гораздо больше двери!"
msg_wererat_0#Король веркрыс
msg_wererat_1#"Выглядит как моя старая тетка..."
msg_giant_spider_before_0#Пустая комната
msg_giant_spider_before_1#"Здесь есть кто-нибудь? "
msg_giant_spider_after_0#Гигантский паук
msg_giant_spider_after_1#"Я НЕНАВИЖУ ПАУКОВ"
msg_tuto_intro_0#Обучение: Основы
msg_tuto_intro_1#Используйте WASD (по умолчанию) для перемещения по подземелью.
msg_tuto_intro_2#Стреляйте клавишами со стрелочками (по умолчанию).
msg_tuto_items_0#Обучение: Предметы
msg_tuto_items_1#Предметы предоставляют вашему персонажу больше возможностей.
msg_tuto_items_2#Найдите или купите столько, сколько сможете.
msg_tuto_heal_0#Обучение: Здоровье
msg_tuto_heal_1#Вы потеряли немного очков здоровья.
msg_tuto_heal_2#Найдите способ вылечиться до того, как умрете.
msg_tuto_shops_0#Обучение: Магазины
msg_tuto_shops_1#Вы можете найти множество магазинов в подземелье.
msg_tuto_shops_2#В магазине вы сможете купить предметы или еду.
msg_tuto_boss_door_0#Обучение: Врата босса
msg_tuto_boss_door_1#Здесь вы видите закрытую золотую дверь.
msg_tuto_boss_door_2#За ней находится босс этого этажа, но вам нужен ключ, чтобы попасть внутрь.
msg_tuto_challenge_door_0#Обучение: Поле битвы
msg_tuto_challenge_door_1#Посмотрите на эту красивую дверь. За ней находится поле битвы
msg_tuto_challenge_door_2#Вы можете найти там ценную награду. Но входите с осторожностью!
msg_tuto_shots_0#Обучение: Типы выстрелов
msg_tuto_shots_1#Вы нашли новвое оружие.
msg_tuto_shots_2#Нажмите [выбор оружия] (по умолчанию: tab) чтобы переключаться между различными оружиями.
msg_tuto_spell_0#Обучение: Заклинания
msg_tuto_spell_1#Вы нашли магическое заклинание.
msg_tuto_spell_2#Нажмите на клавишу заклинания (по умолчанию: space) чтобы произнести его.
enemy_type_bat#летучей мышью
enemy_type_rat#крысой
enemy_type_rat_black#черной крысой
enemy_type_rat_helmet#крысой в шлеме
enemy_type_rat_black_helmet#черной крысой в шлеме
enemy_type_evil_flower#цветком зла
enemy_type_evil_flower_ice#эдельвейсом зла
enemy_type_snake#змеей
enemy_type_snake_blood#змеей крови
enemy_type_slime#слизнем
enemy_type_slime_red#красным слизнем
enemy_type_slime_blue#синим слизнем
enemy_type_slime_violet#фиолетовым слизнем
enemy_type_imp_blue#синим чертом
enemy_type_imp_red#красным чертом
enemy_type_pumpkin#сумасшедшей тыквой
enemy_type_witch#ведьмой
enemy_type_witch_red#красной ведьмой
enemy_type_cauldron#котлом
enemy_type_bubble#пузырем
enemy_type_boss_butcher#Свином-мясником
enemy_type_boss_slime_giant#Гигантским слизнем
enemy_type_boss_cyclops#каменным циклопом
enemy_type_boss_rat_king#Королем веркрысом
enemy_type_boss_spider_giant#Гигантским пауком
enemy_type_green_rat#зеленой крысой
enemy_type_rock_falling#падающим камнем
enemy_type_rock_missile#летящим камнем
enemy_type_spider_egg#упавшим паучьм яйцом
enemy_type_spider_little#пауком
enemy_type_spider_web#паучьей сетью
enemy_type_ghost#призраком
enemy_type_zombie#зомби
enemy_type_zombie_dark#темным зомби
enemy_type_francky#нечто
enemy_type_himself#по глупости
source_explosion#взрывом
source_poison#ядом
enemy_francky#Нечто
enemy_francky_head#Голова нечто
item_apple_green#Зеленое яблоко
item_apple_green_desc#Восстанавливает 3 HP и исцеляет яд
item_manual_slime#Руководство мастера слизней
item_manual_slime_desc#Слизни больше не охотятся на вас
item_spell_dual_quick#Книга быстрого двойного выстрела
item_spell_dual_quick_desc#Стреляет двумя снарядами (быстро)
item_spell_triple_quick#Книга быстрого тройного выстрела
item_spell_triple_quick_desc#Стреляет тремя снарядами (быстро)
item_manual_health#Руководство здоровья
item_manual_health_desc#Увеличенное лечение предметами
item_rear_shot#Наконечник для посоха
item_rear_shot_desc#Выстрел назад
item_book_random_shot#Книга случайного выстрела
item_book_random_shot_desc#Стреляет в случайном направлении
item_spell_web#Заклинание: Паучья сеть
item_spell_web_desc#Произнесите, чтобы метнуть паучьи сети
item_book_magic_i#Книга магии - Том первый
item_book_magic_i_desc#Уменьшает время восстановления заклинаний
item_book_magic_ii#Книга магии - Том второй
item_book_magic_ii_desc#Увеличивает силу заклинаний
item_sulfur#Сера
item_sulfur_desc#Позволяет взрывать трупы
spell_web#паучья сеть
tuto_reset#Сброс обучения
tuto_reset_desc#Сбрасывает обучение
msg_francky_0#Это.... Нечто...
msg_francky_1#Тьфу... Оно выглядит, слово сделано из нескольких трупов !
msg_tuto_tips_0#Обучение: Подсказки
msg_tuto_tips_1#Используйте управление временем (по умолчанию: RShift)
чтобы путешествовать быстрее.
msg_tuto_tips_2#Нажмите [Enter] чтобы немедленно закрыть окно сообщений.
menu_continue#Продолжить
menu_continue_desc#Продолжить игру
menu_save_quit#Сохранить и выйти
menu_save_quit_desc#Сохранить и вернуться в меню игры
menu_quit#Выход без сохранения
menu_quit_desc#Вернуться в главное меню без сохранения
inventory#Инвентарь
dc_certificate#Свидетельство о смерти
dc_killed_by#Убит
dc_died_level#Умер на уровне
dc_after#после
dc_minutes# минут игры
dc_killed_monsters#Убитые монстры
dc_gold#Золото
dc_challenges#Завершено битв
player_name#Имя игрока
player_name_desc#Изменить имя игрока
hi_scores#Зал славы
hi_scores_desc#Лучшие результаты
credits#Авторы
credits_desc#Список создателей
volume_sound#Громкость звука
volume_sound_desc#Используйте клавиши влево/вправо чтоы изменить громкость
volume_music#Громкость музыки
certificate_capture#Нажмите [F1] чтобы сохранить сертификат в PNG файл
certificate_saved#Сохранено в
msg_tuto_temple_0#Обучение: Храм
msg_tuto_temple_1#Храм - это место поклонения и пожертвования божеству.
msg_tuto_temple_2#Божества могут помочь вам предоставив дополнительную силу.
key_interact#взаимодействовать
interact_worship#Поклониться
interact_shop#Купить
interact_donate#Пожертвовать 10 золотых
interact_donate_fail#(не хватает золота)
worshipping#Теперь ваш покровитель
divinity_healer_0#Помоноса Праведная
divinity_healer_1#Защитница праведных и покровительница слабых.
divinity_healer_2#Она ценит пожертвования, страдания и борьбу со злом.
divinity_fighter_0#Телло Могущественный
divinity_fighter_1#Лорд сражающихся и сильных.
divinity_fighter_2#Он ценит монстров и титанов павших в битве.
divinity_ice_0#Мистер Снег
divinity_ice_1#Божество холода.
divinity_ice_2#Он ценит использование льда.
divinity_stone_0#Гайя
divinity_stone_1#Божество земли и камня.
divinity_stone_2#Он ценит использование камней.
divinity_intervention_0#Божественное вмешательство
divinity_intervention_1#вмешивается в вашу пользу.
divinity_gift_0#Божественный дар
divinity_gift_1#предоставляет вам дар.
item_floor_map#Карта подземелья
item_floor_map_desc#Открывает карту текущего этажа
item_alcohol#Абсент
item_alcohol_desc#временно увеличивает урон
achiev_rats#Родентицид
achiev_rats_desc#Убить 250 крыс
achiev_100#Скупой
achiev_100_desc#Собрать 100 золотых монет
achiev_piety_max#Верующий
achiev_piety_max_desc#Достичь максимального уровня благочестия
achiev_4_hits#Вертел
achiev_4_hits_desc#Ранить четырех монстров одним выстрелом
achiev_complete_set#Одеяние
achiev_complete_set_desc#Надеть робу, шляпу, обувь и перчатки
achiev_giant_slime#Убийца гигантского слизня
achiev_giant_slime_desc#Убить гигантского слизня
achiev_cyclops#Убийца циклопов
achiev_cyclops_desc#Убить циклопов
achiev_rat_king#Убийца веркрыса
achiev_rat_king_desc#Убить веркрысу
achiev_giant_spider#Убийца гигантского паука
achiev_giant_spider_desc#Убить гигантского паука
achiev_francky#Убийца нечто
achiev_francky_desc#Убить нечто
achiev_butcher#Убийца мясника
achiev_butcher_desc#Убить свина-мясника
achiev_witches#Инквизитор
achiev_witches_desc#Убить 50 ведьм
achiev_eggs#Испорченный омлет
achiev_eggs_desc#Уничтожить 100 яиц
achiev_vampire#Охотник на вампиров
achiev_vampire_desc#Убить вампира
achiev_challenges#Гладиатор
achiev_challenges_desc#Пройти 4 испытания
achiev_win#Жить мечтой
achiev_win_desc#Пройти демо
func_achiev_screen#Экран достижений
func_achiev_all#Описание достижений
func_double_spell#Два заклинания на выбор
enemy_type_evil_flower_fire#злым огненным цветком
enemy_type_bat_skeleton#крысой-скелетом
enemy_type_slime_large#большим слизнем
enemy_type_slime_blue_large#большим синим слизнем
enemy_type_slime_red_large#большим красным слизнем
enemy_type_slime_violet_large#большим фиолетовым слизнем
enemy_type_bogeyman#пугалом
enemy_type_cauldron_elemental#элементалем котла
menu_achievements#Достижения
menu_achievements_desc#Вывод достижений
achievement_complete#Получено достижение!
item_spell_flower#Заклинание: Призыв волшебного цветка
item_spell_flower_desc#Произнесите чтобы призвать волшебный цветок
item_rapid_shots#Книга быстрой стрельбы
item_rapid_shots_desc#Пулемет для мага
item_fairy_poison#Фея Вики
item_fairy_poison_desc#Помогает вам в подземелье
item_luck#Четырехлистный клевер
item_luck_desc#Временно увеличивает количество выпадающих денег
item_fairy_powder#Пыльца феи
item_fairy_powder_desc#Временно усиливает фей
item_ring_poison#Кольцо с изумрудом
item_ring_poison_desc#Увеличивает силу яда
item_gem_poison#Камень яда
item_gem_poison_desc#Атака ядом
item_book_prayer_i#Книга молитв - Том I
item_book_prayer_i_desc#Увеличивает благочестие
item_book_prayer_ii#Книга молитв - Том II
item_book_prayer_ii_desc#Уменьшает цену благочестия
item_pet_slime#Прислужник слизень
item_pet_slime_desc#Будет следовать за вами и помогать
item_hat_advanced#Шляпа колдуна
item_hat_advanced_desc#Сопротивление элементалям и увеличение скорости стрельбы
item_robe_advanced#Шокирующая волшебная роба
item_robe_advanced_desc#Пульсирует и увеличивает броню
item_critical#Накладная борода мага
item_critical_desc#Увеличивает шанс на критический удар (x2)
item_critical_advanced#Накладная борода архимага
item_critical_advanced_desc#Увеличивает шанс на критический удар (x3)
item_spell_fairy#Заклинание: Трансмутация фей
item_spell_fairy_desc#Произнесите чтобы трансмутировать фей
item_gloves_advanced#Перчатки стрелка
item_gloves_advanced_desc#Обезвреживает ловушки и увеличивает скорость стрельбы
item_boots_advanced#Ботинки стрелка
item_boots_advanced_desc#Увеличивают скорость
divinity_leveling_0#Уровень преданности повышен!
div_fighter_lvl#увеличивает урон
div_healer_lvl_2#предоставляет регенерацию
div_healer_lvl_3#увеличивает регенерацию
div_ice_lvl_3#увеличивает сопротивление люду
div_ice_lvl_4#усиливает атаку людом
div_ice_lvl_5#увеличивает иммунитет к заморозке
div_stone_lvl_3#увеличивает сопротивление камню
div_stone_lvl_4#усиливает атаку камнем
div_stone_lvl_5#увеличивает иммунитет пульсаций
enemy_vampire#Вампир
enemy_type_vampire#вампиром
msg_tuto_achiev_0#Обучение: Достижения
msg_tuto_achiev_1#Вы получили достижение.
msg_tuto_achiev_2#Они открывают новые предметы и бонусы.
msg_vampire_0#Вампир
msg_vampire_1#Как же я забыл взять с собой чеснок?!
msg_level7_0#Дочь архимага
msg_level7_1#"Я все ближе и ближе.
msg_level7_2#Она уже недалеко отсюда."
divinity_air_0#Острам
divinity_air_1#Божество воздуха и шторма.
divinity_air_2#Он ценит использование молний.
div_air_lvl#увеличивает скорость
div_air_lvl_4#увеличивает атаку молнией
config_joystick#Настройка джойстика
redef_joystick#Изменить управление джойстиком
joystick_configuration#Настройка джойстика
joystick_configuration_desc#Настройте джойстик, пожалуйста
joystick_configuration_insert#[нажмите кнопку]
joystick_not_found#Джойстик не подключен!
item_scroll_revelation#Свиток открытий
item_scroll_revelation_desc#Раскрывает секреты зелий
item_potion_01#Красное зелье
item_potion_02#Зеленое зелье
item_potion_03#Золотистое зелье
item_potion_04#Синее зелье
item_potion_05#Фиолетовое зелье
item_potion_06#Розовое зелье
item_potion_07#Оранжевое зелье
item_potion_08#Бирюзовое зелье
item_potion_09#Коричневое зелье
item_potion_10#Темное зелье
item_potion_desc#Эффект неизвестен
item_potion_health#Зелье лечения
item_potion_health_desc#Восстанавливает 18 HP
item_potion_poison#Ядовитое зелье
item_potion_poison_desc#Отравляет
item_potion_speed#Зелье скорости
item_potion_speed_desc#Временно увеличивает скорость
item_potion_slow#Зелье замедления
item_potion_slow_desc#Временно уменьшает скорость
item_potion_weakness#Зелье слабости
item_potion_weakness_desc#Временно уменьшает урон
item_potion_strength#Зелье силы
item_potion_strength_desc#Временно увеличивает силу
item_potion_oblivion#Зелье забвения
item_potion_oblivion_desc#Забыть карту и эффекты зелий
item_potion_confusion#Зелье запутанности
item_potion_confusion_desc#Запутывает
item_potion_cure#Зелье Табула Раса
item_potion_cure_desc#Отменяет все эффекты, наложенные на игрока
item_potion_rage#Зелье ярости
item_potion_rage_desc#Призывает олненные шары в помощь
item_bag#Сумка
item_bag_desc#Предоставляет больше места для предметов
msg_potion_id_0#Идентификация зелий
msg_potion_id_1#Вы идентифицировали:
msg_tuto_consumables_0#Обучение: Используемые предметы
msg_tuto_consumables_1#[num1-num4] чтобы использовать предмет.
msg_tuto_consumables_2#[left shift][num1-num4] чтобы выбросить его.
msg_tuto_potions_0#Обучение: Зелья
msg_tuto_potions_1#Вы нашли зелье.
msg_tuto_potions_2#Вы должны выпить или идентифицировать его, чтобы знать его эффект.
secret_found#Найдена секретная комната!
enemy_type_sausage#колбаска
enemy_type_spider_tarantula#тарантул
effect_speed#Ускорение!
effect_slow#Замедление!
effect_strength#Усиление!
effect_weakness#Слабость!
effect_confusion#Запутанность!
effect_forget#Забытие!
effect_cure#Табула Раса!
effect_rage#ЯРОСТЬ!
item_book_alchemy#Книга алхимии
item_book_alchemy_desc#Раскрывает эффект некоторых зелий
item_fairy_stone#Фея Кассандра
item_fairy_stone_desc#Помогает вам в подземелье
item_merchant#Печать гильдии торговцев
item_merchant_desc#Теперь цены в магазинах куда лучше
item_spell_time#Заклинание: Остановка времени
item_spell_time_desc#Произнесите чтобы замедлить время
item_side_shots#Книга боковых выстрелов
item_side_shots_desc#Стреляет по сторонам
item_spell_lightning#Заклинание: Молния
item_spell_lightning_desc#Произнесите, чтобы призвать молнию
item_belt_advanced#Черный пояс
item_belt_advanced_desc#Увеличивает скорость стрельбы фей
item_rear_shot_advanced#Серебряный наконечник для посоха
item_rear_shot_advanced_desc#Стреляет двумя выстрелами назад
item_amulet_retaliation#Амулет мести
item_amulet_retaliation_desc#Он заступится за меня
item_rage_amulet#Амулет ярости
item_rage_amulet_desc#Стреляет огнем
achiev_fairies#Ангелы чарли
achiev_fairies_desc#Найдите трех фей
achiev_ghost#Охотник за привидениями
achiev_ghost_desc#Убейте 50 призраков
achiev_noob#Рак
achiev_noob_desc#Умрите на первом уровне
achiev_no_damage#Крутой парень
achiev_no_damage_desc#Пройдите один уровень без потери здоровья
achiev_no_damage2#Очень крутой парень
achiev_no_damage2_desc#Пройдите два уровня без потери здоровья
achiev_no_damage3#Офигеть какой крутой парень
achiev_no_damage3_desc#Пройдите три уровня без потери здоровья
achiev_apostate#Отступник
achiev_apostate_desc#Откажитесь от 4-го уровня преданности своему божеству
achiev_fanatic#Фанатик
achiev_fanatic_desc#Пожертвуйте 100 золотых в храм
func_nothing#Ничего!
state_frozen#Заморожен
state_slow#Замедлен
state_speed#Ускорен
state_poison#Отравлен
state_weakness#Ослаблен
state_strength#Усилен
state_rage#Яростен
state_confusion#Запутан
state_time#Время остановлено
state_div_protection#Защищен (покровителем)
state_div_speed#Ускорен (покровителем)
state_div_firerate#Ускорена стрельба (покровителем)
state_div_damage#Усилен (покровителем)
dc_victory#Победный сертификат
dc_after_victory#Победа после
player#игрок
players#игрока
ui_base_damage#Базовый урон
ui_fire_rate#Скорость стрельбы
ui_second#в секунду
ui_temple_donation#Пожертвования
\ No newline at end of file
diff --git a/src/Constants.h b/src/Constants.h
index cf7f3da..cf6ed8d 100644
--- a/src/Constants.h
+++ b/src/Constants.h
@@ -1,735 +1,739 @@
/** This file is part of Witch Blast.
*
* Witch Blast is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Witch Blast is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Witch Blast. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONSTANTS_H_INCLUDED
#define CONSTANTS_H_INCLUDED
#include <string>
const std::string APP_NAME = "Witch Blast";
-const std::string APP_VERSION = "0.7.5";
+const std::string APP_VERSION = "0.7.6";
const std::string CONFIG_FILE = "config.dat";
const std::string SAVE_FILE = "game.sav";
const std::string SAVE_DATA_FILE = "data/data.sav";
const std::string HISCORES_FILE = "data/scores.dat";
const std::string SAVE_VERSION = "SAVE_0.8";
const std::string SCORE_VERSION = "V075_DEV";
const int NB_LANGUAGES = 5;
const std::string languageString[NB_LANGUAGES] = { "english", "french", "german", "spanish", "russian" };
const std::string languageState[NB_LANGUAGES] = { "", "", "", "", "" };
const unsigned int SCORES_MAX = 10;
const int LAST_LEVEL = 8;
// Client size
const int SCREEN_WIDTH = 970;
const int SCREEN_HEIGHT = 720;
// Tile set
const int TILE_WIDTH = 64;
const int TILE_HEIGHT = 64;
// Tile map offset
const int OFFSET_X = 5;
const int OFFSET_Y = 5;
const int MAP_WIDTH = 15;
const int MAP_HEIGHT = 9;
const int MENU_MAP_WIDTH = 16;
const int MENU_MAP_HEIGHT = 13;
const int GAME_WIDTH = MAP_WIDTH * TILE_WIDTH;
const int GAME_HEIGHT = MAP_HEIGHT * TILE_HEIGHT;
const int FLOOR_WIDTH = 13;
const int FLOOR_HEIGHT = 7;
const int ITEM_WIDTH = 32;
const int ITEM_HEIGHT = 32;
const int BOLT_WIDTH = 24;
const int BOLT_HEIGHT = 24;
const int BOLT_PRO_LINE = 10;
const int BB_LEFT = 22;
const int BB_RIGHT = 22;
const int BB_TOP = 4;
const int BB_BOTTOM = 31;
const float FADE_IN_DELAY = 1.0f;
const float FADE_OUT_DELAY = 1.0f;
const float EXPLOSION_DELAY = 2.0f;
const float DEATH_CERTIFICATE_DELAY = 3.5f;
const float ACHIEVEMENT_DELAY_MAX = 15.0f;
const float KeyRoomFXDelay = 2.0f;
enum enum_images {
IMAGE_PLAYER_0,
IMAGE_PLAYER_1,
IMAGE_PLAYER_2,
IMAGE_BOLT,
IMAGE_TILES,
IMAGE_RAT,
IMAGE_MINIMAP,
IMAGE_MAP_BACKGROUND,
IMAGE_ITEMS,
IMAGE_ITEMS_EQUIP,
IMAGE_ITEMS_PRES,
IMAGE_ITEMS_EQUIP_PRES,
IMAGE_CHEST,
IMAGE_BAT,
IMAGE_FLOWER,
IMAGE_SLIME,
IMAGE_IMP,
IMAGE_SPIDER_EGG,
IMAGE_SPIDER_WEB,
IMAGE_LITTLE_SPIDER,
IMAGE_BUBBLE,
IMAGE_EYE,
IMAGE_WITCH,
IMAGE_CAULDRON,
IMAGE_SNAKE,
IMAGE_PUMPKIN,
IMAGE_GHOST,
IMAGE_ZOMBIE,
IMAGE_BOGEY,
IMAGE_SAUSAGE,
IMAGE_BUTCHER,
IMAGE_GIANT_SLIME,
IMAGE_KING_RAT,
IMAGE_CYCLOP,
IMAGE_GIANT_SPIDER,
IMAGE_FRANCKY,
IMAGE_VAMPIRE,
IMAGE_VAMPIRE_BAT,
IMAGE_VAMPIRE_PART,
IMAGE_BLOOD,
IMAGE_CORPSES,
IMAGE_CORPSES_BIG,
IMAGE_STAR,
IMAGE_STAR_2,
IMAGE_HURT_IMPACT,
IMAGE_INTERFACE,
IMAGE_HUD_SHOTS,
IMAGE_EXPLOSION,
IMAGE_KEYS_QWER,
IMAGE_KEYS_AZER,
IMAGE_INTRO,
IMAGE_TITLE,
IMAGE_OVERLAY,
IMAGE_LIGHT_CONE,
IMAGE_DIVINITY,
IMAGE_PNJ,
IMAGE_FAIRY,
IMAGE_KEY_AREA,
IMAGE_UI_LIFE,
IMAGE_UI_MANA,
IMAGE_UI_SPELLS,
IMAGE_UI_MESSAGE,
IMAGE_UI_TOP_LAYER,
IMAGE_UI_ACHIEV,
IMAGE_FOG,
IMAGE_TITLE_ANIM,
IMAGE_SPLATTER,
IMAGE_WITCH_INTRO,
IMAGE_ITEM_DESCRIPTION,
IMAGE_DEATH_CERTIFICATE,
IMAGE_ACHIEVEMENTS,
IMAGE_BOSS_PICTURES,
IMAGE_PORTRAIT_PART,
IMAGE_RANDOM_DUNGEON,
IMAGE_DUNGEON_OBJECTS,
IMAGE_TILES_SHADOW,
IMAGE_TILES_SHADOW_CORNER,
IMAGE_TILES_SHADOW_MEDIUM,
IMAGE_TILES_SHADOW_SMALL,
IMAGE_DOORS,
IMAGE_DESTROYABLE,
IMAGE_HALL_OF_FAME,
IMAGE_LIGHTNING,
IMAGE_WIN_SEAL,
IMAGE_WIN_SEAL_HOF,
IMAGE_BAG,
IMAGE_UI_PAUSE,
IMAGE_SCORE_FONT,
IMAGE_EFFECT_ZONE,
NB_IMAGES
};
enum sound_resources {
SOUND_NONE = -1,
SOUND_BLAST_STANDARD,
SOUND_BLAST_FLOWER,
SOUND_BLAST_LIGHTNING,
SOUND_BLAST_FIRE,
SOUND_BLAST_ICE,
SOUND_BLAST_ILLUSION,
SOUND_BLAST_POISON,
SOUND_BLAST_STONE,
SOUND_DOOR_CLOSING,
SOUND_DOOR_OPENING,
SOUND_CHEST_OPENING,
SOUND_IMPACT,
SOUND_BONUS,
SOUND_DRINK,
SOUND_EAT,
SOUND_PLAYER_HIT,
SOUND_PLAYER_DIE,
SOUND_ENNEMY_DYING,
SOUND_COIN_PICK_UP,
SOUND_PAY,
SOUND_WALL_IMPACT,
SOUND_BIG_WALL_IMPACT,
SOUND_KING_RAT_1,
SOUND_KING_RAT_2,
SOUND_KING_RAT_DIE,
SOUND_SLIME_JUMP,
SOUND_SLIME_IMAPCT,
SOUND_SLIME_IMAPCT_WEAK,
SOUND_SLIME_IMAPCT_BOSS,
SOUND_SLIME_SMASH,
SOUND_ICE_CHARGE,
SOUND_ELECTRIC_CHARGE,
SOUND_SHOT_SELECT,
SOUND_HEART,
SOUND_RAT_DYING,
SOUND_BAT_DYING,
SOUND_IMP_HURT,
SOUND_IMP_DYING,
SOUND_ROCK_IMPACT_LIGHT,
SOUND_ROCK_IMPACT_MEDIUM,
SOUND_ROCK_IMPACT_HEAVY,
SOUND_THROW,
SOUND_CYCLOP_00,
SOUND_CYCLOP_DIE,
SOUND_CYCLOPS_IMPACT,
SOUND_BUTCHER_00,
SOUND_BUTCHER_01,
SOUND_BUTCHER_HURT,
SOUND_BUTCHER_DIE,
SOUND_VIB,
SOUND_BOOM_00,
SOUND_CLANG_00,
SOUND_BUBBLE_00,
SOUND_BUBBLE_01,
SOUND_TRAP,
SOUND_EGG_SMASH_00,
SOUND_EGG_SMASH_01,
SOUND_SPIDER_WALKING,
SOUND_SPIDER_WEB,
SOUND_SPIDER_HURT,
SOUND_SPIDER_DIE,
SOUND_SPIDER_LITTLE_DIE,
SOUND_WITCH_00,
SOUND_WITCH_01,
SOUND_WITCH_02,
SOUND_WITCH_DIE_00,
SOUND_WITCH_DIE_01,
SOUND_INVOKE,
SOUND_CAULDRON,
SOUND_CAULDRON_DIE,
SOUND_SNAKE_DIE,
SOUND_PUMPKIN_00,
SOUND_PUMPKIN_01,
SOUND_PUMPKIN_DIE,
SOUND_CRITICAL,
SOUND_GONG,
SOUND_TELEPORT,
SOUND_SPELL_CHARGE,
SOUND_FIREBALL,
SOUND_MESSAGE,
SOUND_EARTHQUAKE,
SOUND_SPELL_FREEZE,
SOUND_SPELL_SHIELD,
SOUND_HEAVY_STEP_00,
SOUND_HEAVY_STEP_01,
SOUND_NIGHT,
SOUND_GRUMBLE,
SOUND_ZOMBIE_00,
SOUND_ZOMBIE_01,
SOUND_ZOMBIE_ATTACKING,
SOUND_ZOMBIE_DYING,
SOUND_GHOST,
SOUND_GHOST_DYING,
SOUND_ELECTRICITY,
SOUND_ELECTRIC_BLAST,
SOUND_FRANCKY_00,
SOUND_FRANCKY_01,
SOUND_FRANCKY_02,
SOUND_FRANCKY_DYING,
SOUND_OM,
SOUND_GLASS,
SOUND_HICCUP,
SOUND_SPLATCH,
SOUND_INTRO_WITCH,
SOUND_FORCE_FIELD,
SOUND_DOOR_OPENING_BOSS,
SOUND_ACHIEVEMENT,
SOUND_VAMPIRE_FLYING,
SOUND_VAMPIRE_FLAP,
SOUND_VAMPIRE_SONIC_RAY,
SOUND_VAMPIRE_LAUGHING,
SOUND_VAMPIRE_TRANSFORM_BOLT,
SOUND_VAMPIRE_TRANSFORM_BAT,
SOUND_VAMPIRE_HYPNOSIS,
SOUND_VAMPIRE_CRY,
SOUND_VAMPIRE_DYING,
SOUND_ICE_BLOCK,
SOUND_BOGEYMAN_DIE,
SOUND_BOGEYMAN_ATTACK,
SOUND_BOGEYMAN_VORTEX_00,
SOUND_BOGEYMAN_VORTEX_01,
SOUND_BARREL_HIT,
SOUND_BARREL_SMASH,
SOUND_SECRET,
SOUND_SCROLL,
SOUND_CLOCK,
SOUND_BOTTLE,
SOUND_THUNDER,
SOUND_SCORE_BONUS,
SOUND_STONE_HIT,
};
enum corpses_ressources{
FRAME_CORPSE_RAT,
FRAME_CORPSE_BAT,
FRAME_CORPSE_FLOWER,
FRAME_CORPSE_GREEN_RAT,
FRAME_CORPSE_SLIME,
FRAME_CORPSE_BLACK_RAT,
FRAME_CORPSE_IMP_RED,
FRAME_CORPSE_IMP_BLUE,
FRAME_CORPSE_SLIME_RED,
FRAME_CORPSE_SLIME_BLUE,
FRAME_CORPSE_SPIDER_EGG,
FRAME_CORPSE_LITTLE_SPIDER,
FRAME_CORPSE_SPIDER_WEB,
FRAME_CORPSE_RAT_HELMET,
FRAME_CORPSE_BLACK_RAT_HELMET,
FRAME_CORPSE_SLIME_VIOLET,
FRAME_CORPSE_WITCH,
FRAME_CORPSE_WITCH_RED,
FRAME_CORPSE_CAULDRON,
FRAME_CORPSE_SNAKE,
FRAME_CORPSE_SNAKE_BLOOD,
FRAME_CORPSE_PUMPKIN,
FRAME_CORPSE_FLOWER_ICE,
FRAME_CORPSE_GHOST,
FRAME_CORPSE_ZOMBIE,
FRAME_CORPSE_ZOMBIE_DARK,
FRAME_CORPSE_FRANCKY_TORSO,
FRAME_CORPSE_FRANCKY_HEAD,
FRAME_CORPSE_FRANCKY_HAND,
FRAME_CORPSE_FRANCKY_FOOT,
FRAME_CORPSE_FLOWER_FIRE,
FRAME_CORPSE_VAMPIRE,
FRAME_CORPSE_BAT_SKELETON,
FRAME_CORPSE_CAULDRON_BLUE,
FRAME_CORPSE_CAULDRON_RED,
FRAME_CORPSE_CAULDRON_GREEN,
FRAME_CORPSE_LITTLE_SPIDER_TARANTULA,
FRAME_CORPSE_KING_RAT,
FRAME_CORPSE_GIANT_SLIME,
FRAME_CORPSE_CYCLOP,
FRAME_CORPSE_BUTCHER,
FRAME_CORPSE_GIANT_SPIDER,
FRAME_CORPSE_GIANT_SLIME_RED,
FRAME_CORPSE_GIANT_SLIME_BLUE,
};
// chests
enum chest_type_enum {
ChestBasic,
ChestExit,
ChestChallenge,
ChestFairy,
};
const float CHEST_APPEAR_DELAY = 1.5f;
// Artefact Info
const float ARTEFACT_RECT_WIDTH = 650.0f;
const float ARTEFACT_RECT_HEIGHT = 100.0f;
const float ARTEFACT_POS_Y = 450.0f;
const float ARTEFACT_BORDER = 3.0f;
const float ARTEFACT_ZOOM_TIME = 0.5f;
// shot types
enum enumShotType {
ShotTypeStandard,
ShotTypeIce,
ShotTypeIllusion,
ShotTypeStone,
ShotTypeLightning,
ShotTypeFire,
ShotTypePoison,
ShotTypeBomb,
ShotTypeCold,
ShotTypeDeterministic
};
// special shots effects
const int MAX_SHOT_LEVEL = 3;
const float STATUS_FROZEN_DELAY[MAX_SHOT_LEVEL] // how long the freeze occurs
= { 4.0f, 5.0f, 6.0f };
const float STATUS_FROZEN_BOLT_DELAY[MAX_SHOT_LEVEL] // reload time
= { 3.0f, 2.8f, 2.8f };
const float STATUS_FROZEN_MULT[MAX_SHOT_LEVEL] // speed multiplier (= 3 times slower)
= { 0.38f, 0.33f, 0.28f };
const float STONE_DECOIL_DELAY[MAX_SHOT_LEVEL] // how long the stun occurs
= { 0.15f, 0.175f, 0.2f };
const float STONE_DECOIL_VELOCITY[MAX_SHOT_LEVEL] // Decoil velocity
= { 270.0f, 320.0f, 450.0f };
const float ILLUSION_DAMAGE_DECREASE[MAX_SHOT_LEVEL] // Illusion damage malus
= { 0.8f, 0.9f, 1.0f };
const float LIGHTNING_VISCOSITY_INCREASE[MAX_SHOT_LEVEL] // Air resistance
= { 0.01, 0.015f, 0.02f };
const float FIRE_DAMAGE_INCREASE[MAX_SHOT_LEVEL] // Fire damage's bonus
= { 1.15f, 1.3f, 1.45f };
const float POISON_TIMER[MAX_SHOT_LEVEL]
= { 10.5f, 12.5f, 12.5f };
const float POISON_DAMAGE[MAX_SHOT_LEVEL]
= { 1, 1, 1 };
const float POISON_DELAY[MAX_SHOT_LEVEL]
= { 2.0f, 1.5f, 1.0f };
// divinity
enum enumDivinityType {
DivinityHealer,
DivinityFighter,
DivinityIce,
DivinityStone,
DivinityAir,
DivinityIllusion,
+ DivinityFire,
+ DivinityDeath,
NB_DIVINITY
};
const std::string divinityLabel[NB_DIVINITY]
{
"divinity_healer",
"divinity_fighter",
"divinity_ice",
"divinity_stone",
"divinity_air",
"divinity_illusion",
+ "divinity_fire",
+ "divinity_death",
};
const int MAX_DIVINITY_LEVEL = 5;
const int DIVINITY_LEVEL_TRESHOLD[MAX_DIVINITY_LEVEL] =
{ 100, 300, 500, 900, 1400};
// entity type
const int ENTITY_PLAYER = 1;
const int ENTITY_FAMILIAR = 2;
const int ENTITY_DOOR = 3;
const int ENTITY_ARTIFACT_DESCRIPTION = 9;
const int ENTITY_BLOOD = 11;
const int ENTITY_CORPSE = 12;
const int ENTITY_EFFECT = 13;
const int ENTITY_FLYING_TEXT = 14;
const int ENTITY_BOLT = 15;
const int ENTITY_ENEMY_BOLT = 16;
const int ENTITY_PNJ = 17;
const int ENTITY_CHEST = 18;
const int ENTITY_ITEM = 19;
const int ENTITY_EXPLOSION = 20;
const int ENTITY_FAMILIAR_LOCAL = 21;
const int ENTITY_EFFECT_ZONE = 22;
const int ENTITY_ENEMY = 31;
const int ENTITY_ENEMY_INVOCATED = 32;
const int ENTITY_ENEMY_BOSS = 33;
const int ENTITY_ENEMY_NC = 34;
const int ENTITY_ENEMY_MAX = ENTITY_ENEMY_NC;
const int ENTITY_ENEMY_MAX_COUNT = ENTITY_ENEMY_BOSS;
const float DOOR_OPEN_TIME = 1.0f;
const float DOOR_CLOSE_TIME = 1.0f;
// Player game play
const float INITIAL_PLAYER_SPEED = 220.0f;
const int INITIAL_PLAYER_HP = 20;
const float INITIAL_PLAYER_FIRE_DELAY = 0.7f;
const float ACQUIRE_DELAY = 2.3f;
const float UNLOCK_DELAY = 1.2f;
const float WORSHIP_DELAY = 2.0f;
const float INVINCIBLE_DELAY = 1.5f;
const float HICCUP_DELAY = 5.0f;
const float INITIAL_BOLT_LIFE = 0.45f;
const int INITIAL_BOLT_DAMAGES = 8;
const float INITIAL_BOLT_VELOCITY = 700.0f;
const float INITIAL_BOLT_VISCOSITY = 0.98f;
const float FAIRY_SPEED = 220.0f;
const float FAIRY_FIRE_DELAY = 0.8f;
const float ICE_FAIRY_FIRE_DELAY = 1.3f;
const float TARGET_FAIRY_FIRE_DELAY = 1.0f;
const float FAIRY_BOLT_LIFE = 0.4f;
const int FAIRY_BOLT_DAMAGES = 8;
const int FAIRY_FIRE_DAMAGES = 12;
const float FAIRY_BOLT_VELOCITY = 700.0f;
// Rat
const float RAT_SPEED = 195.0f;
const float RAT_SPEED_HELMET = 140.0f;
const int RAT_HP = 16;
const int RAT_HP_HELMET = 24;
const int RAT_DAMAGES = 5;
const int RAT_BB_LEFT = 14;
const int RAT_BB_WIDTH_DIFF = 28;
const int RAT_BB_TOP = 22;
const int RAT_BB_HEIGHT_DIFF = 22;
// Green Rat
const float GREEN_RAT_SPEED = 180.0f;
const int GREEN_RAT_HP = 16;
const int GREEN_RAT_DAMAGES = 5;
const float GREEN_RAT_FADE = 1.0f;
// Black Rat
const float BLACK_RAT_SPEED = 195.0f;
const float BLACK_RAT_SPEED_HELMET = 125.0f;
const int BLACK_RAT_HP = 16;
const int BLACK_RAT_HP_HELMET = 24;
const int BLACK_RAT_DAMAGES = 5;
// Bat
const float BAT_SPEED = 270.0f;
const int BAT_HP = 5;
const int BAT_DAMAGES = 5;
// Zombie
const float ZOMBIE_SPEED = 80.0f;
const int ZOMBIE_HP = 80;
const int ZOMBIE_DAMAGE = 10;
// Evl Flower
const int EVIL_FLOWER_HP = 16;
const int EVIL_FLOWER_MELEE_DAMAGES = 5;
const int EVIL_FLOWER_MISSILE_DAMAGES = 6;
const int EVIL_FLOWER_FIRE_MISSILE_DAMAGES = 8;
const int EVIL_FLOWER_BB_LEFT = 14;
const int EVIL_FLOWER_BB_WIDTH_DIFF = 28;
const int EVIL_FLOWER_BB_TOP = 22;
const int EVIL_FLOWER_BB_HEIGHT_DIFF = 22;
const float EVIL_FLOWER_FIRE_DELAY = 2.2f;
const float EVIL_FLOWER_FIRE_VELOCITY = 230.0f;
// Snake
const float SNAKE_SPEED = 150.0f;
const int SNAKE_HP = 16;
const int SNAKE_DAMAGE = 5;
const float SNAKE_BLOOD_SPEED = 170.0f;
const int SNAKE_BLOOD_HP = 32;
const int SNAKE_BLOOD_DAMAGE = 8;
// Slime
const int SLIME_HP = 16;
const int SLIME_DAMAGES = 5;
const int SLIME_BB_LEFT = 13;
const int SLIME_BB_WIDTH_DIFF = 26;
const int SLIME_BB_TOP = 38;
const int SLIME_BB_HEIGHT_DIFF = 40;
const float SLIME_FIRE_VELOCITY = 240.0f;
// Imp
const float IMP_SPEED = 190.0f;
const int IMP_HP = 20;
const int IMP_MELEE_DAMAGES = 5;
const int IMP_MISSILE_DAMAGES = 8;
const float IMP_FIRE_VELOCITY = 260.0f;
// Witch
const int WITCH_HP = 80;
const int WITCH_DAMAGE = 5;
const int WITCH_VELOCITY = 140.0f;
// Cauldron
const int CAULDRON_HP = 150;
// Ghost
const float GHOST_SPEED = 140.0f;
const int GHOST_HP = 40;
const int GHOST_DAMAGE = 8;
// Butcher
const int BUTCHER_HP = 120;
const int BUTCHER_DAMAGES = 8;
const int BUTCHER_VELOCITY = 100;
// Giant Slime
const int GIANT_SLIME_HP = 250;
const int GIANT_SLIME_DAMAGES = 8;
const int GIANT_SLIME_MISSILE_DAMAGES = 6;
const float GIANT_SLIME_MISSILE_DELAY = 0.33f;
const float GIANT_SLIME_FIRE_VELOCITY = 200.0f;
const int GIANT_SLIME_BB_LEFT = 26;
const int GIANT_SLIME_BB_WIDTH_DIFF = 52;
const int GIANT_SLIME_BB_TOP = 64;
const int GIANT_SLIME_BB_HEIGHT_DIFF = 12;
const int GIANT_SLIME_SPEED = 80.0f;
const float GIANT_SLIME_ULTRA_JUMP_VELOCITY = 1700.0f;
const float GIANT_SLIME_ULTRA_FALL_VELOCITY = -2000.0f;
const float GIANT_SLIME_ULTRA_JUMP_TIMER = 2.3f;
// KingRat
const float KING_RAT_SPEED = 210.0f;
const float KING_RAT_RUNNING_SPEED = 750.0f;
const float KING_RAT_BERSERK_SPEED = 300.0f;
const float KING_RAT_RUNNING_RECOIL = 750.0f;
const int KING_RAT_HP = 700;
const int KING_RAT_DAMAGES = 8;
// Cyclops
const float CYCLOP_SPEED[4] = { 140, 150, 160, 170};
const int CYCLOP_NUMBER_ROCKS[4] = { 5, 7, 9, 12};
const float CYCLOP_FIRE_DELAY[4] = { 0.3f, 0.26f, 0.23f, 0.2f};
const int CYCLOP_HP = 880;
const int CYCLOP_DAMAGES = 8;
// Giant Spider
const float GIANT_SPIDER_SPEED[4] = { 240, 245, 250, 255 };
const int GIANT_SPIDER_NUMBER_EGGS[4] = { 12, 14, 16, 18};
const float GIANT_SPIDER_FIRE_DELAY[4] = { 0.82f, 0.72f, 0.62f, 0.52f};
const int GIANT_SPIDER_HP = 800;
const int GIANT_SPIDER_DAMAGE = 8;
// EFFECTS
const float HURTING_DELAY = 0.4f;
const float HEART_BEAT_DELAY = 1.2f;
// messages
const int NB_MSG_LINES = 3;
enum EnumMessages
{
MsgInfoLevel1,
MsgInfoLevel2,
MsgInfoLevel3,
MsgInfoLevel4,
MsgInfoLevel5,
MsgInfoLevel6,
MsgInfoLevel7,
MsgInfoRatsBats,
MsgInfoSnakes,
MsgInfoWitches,
MsgInfoGold,
MsgInfoFamiliar,
MsgInfoButcher,
MsgInfoGiantSlime,
MsgInfoCyclops,
MsgInfoWererat,
MsgInfoGiantSpiderBefore,
MsgInfoGiantSpiderAfter,
MsgInfoFranky,
MsgInfoVampire,
MsgInfoDivHealer,
MsgInfoDivFighter,
MsgInfoDivIce,
MsgInfoDivStone,
MsgInfoDivAir,
MsgInfoDivIllusion,
MsgInfoDivFire,
MsgInfoDivPoison,
MsgInfoDivIntervention,
MsgInfoDivGift,
MsgInfoDivLevel,
MsgInfoPotionId,
MsgTutoBasics,
MsgTutoTips,
MsgTutoItems,
MsgTutoShops,
MsgTutoBossDoor,
MsgTutoChallengeDoor,
MsgTutoTemple,
MsgTutoHeal,
MsgTutoShots,
MsgTutoSpell,
MsgTutoAchievements,
MsgTutoConsumables,
MsgTutoPotions,
NB_MESSAGES
};
enum EnumMessagesType
{
MessageTypeInfo,
MessageTypeTutorial,
};
struct messageStruct
{
EnumMessagesType messageType;
EnumMessages type;
std::string message[NB_MSG_LINES];
float timer;
float timerMax;
};
enum EnumWorldEvents
{
// info
EventMeetRatsOrBats,
EventMeetSnakes,
EventMeetWitches,
EventGetCoin,
EventPietyMax,
Event4Hits,
// tuto
EventBeingHurted,
EventFindShop,
EventFindBossDoor,
EventFindChallengeDoor,
EventFindTemple,
EventGetItem,
EventGetSpecialShot,
EventGetFamiliar,
EventGetSpell,
EventAchievement,
EventConsumable,
EventPotion,
NB_EVENTS
};
enum EnumInteractionType
{
InteractionTypeTemple,
InteractionTypeMerchandise,
};
#endif // CONSTANTS_H_INCLUDED
diff --git a/src/PlayerEntity.cpp b/src/PlayerEntity.cpp
index 1302d98..eaa16cc 100644
--- a/src/PlayerEntity.cpp
+++ b/src/PlayerEntity.cpp
@@ -1,3863 +1,3958 @@
#include "PlayerEntity.h"
#include "SlimeEntity.h"
#include "SlimePetEntity.h"
#include "FallingRockEntity.h"
#include "BoltEntity.h"
#include "SpiderWebEntity.h"
#include "EvilFlowerEntity.h"
#include "EnemyBoltEntity.h"
#include "ItemEntity.h"
#include "FairyEntity.h"
#include "sfml_game/ImageManager.h"
#include "sfml_game/SoundManager.h"
#include "Constants.h"
#include "WitchBlastGame.h"
#include "TextEntity.h"
#include "TextMapper.h"
#include <iostream>
#include <sstream>
#define SPIRAL_STAIRCASE
const int xHalo[9][3] =
{
{ 13, 13, 18},
{ 47, 45, 37},
{ 48, 47, 44},
{ 15, 15, 16},
{ 45, 45, 45},
{ 46, 44, 42},
{ 13, 13, 13},
{ 13, 24, 36},
{ 13, 17, 13}
};
const int yHalo[9][3] =
{
{ 26, 25, 25},
{ 23, 23, 23},
{ 23, 24, 25},
{ 31, 32, 34},
{ 23, 23, 23},
{ 23, 22, 21},
{ 26, 26, 26},
{ 26, 15, 6},
{ 25, 27, 25}
};
const int KEYS_MOVE_TOLERANCE = 36;
PlayerEntity::PlayerEntity(float x, float y)
: BaseCreatureEntity (ImageManager::getInstance().getImage(IMAGE_PLAYER_0), x, y, 64, 96)
{
currentFireDelay = -1.0f;
randomFireDelay = -1.0f;
rageFireDelay = 1.0f;
invincibleDelay = -1.0f;
divineInterventionDelay = -1.0f;
showCone = false;
fireAnimationDelay = -1.0f;
fireAnimationDelayMax = 0.4f;
spellAnimationDelay = -1.0f;
spellAnimationDelayMax = 0.7f;
canFirePlayer = true;
type = ENTITY_PLAYER;
imagesProLine = 8;
playerStatus = playerStatusPlaying;
hp = INITIAL_PLAYER_HP;
#ifdef TEST_MODE
hp = INITIAL_PLAYER_HP * 100;
#endif // TEST_MODE
hpDisplay = hp;
hpMax = hp;
gold = 0;
donation = 0;
endAge = 0.0f;
hiccupDelay = HICCUP_DELAY;
idleAge = 0.0f;
boltLifeTime = INITIAL_BOLT_LIFE;
specialBoltTimer = -1.0f;
bloodColor = BloodRed;
canExplode = false;
// init the equipment (to empty)
for (int i = 0; i < NUMBER_EQUIP_ITEMS; i++) equip[i] = false;
collidingDirection = 5;
// init the shots (to none)
for (int i = 0; i < SPECIAL_SHOT_SLOTS; i++)
{
specialShots[i] = ShotTypeStandard;
specialShotLevel[i] = 0;
}
// init the consumibles
for (int i = 0; i < MAX_SLOT_CONSUMABLES; i++)
consumable[i] = -1;
// init the lost HP
for (int i = 0; i < LAST_LEVEL; i++)
lostHp[i] = 0;
specialShotIndex = 0;
needInitShotType = false;
computePlayer();
firingDirection = 5;
facingDirection = 2;
keyDirection = 5;
canAnimateFire = true;
sprite.setOrigin(32, 80);
protection.active = false;
armor = 0.0f;
activeSpell.delay = -1.0f;
activeSpell.spell = SpellNone;
divinity.divinity = -1;
divinity.piety = 0;
divinity.level = 0;
divinity.interventions = 0;
divinity.percentsToNextLevels = 0.0f;
shouldBeSavedFromDivinity = false;
isRegeneration = false;
isFairyTransmuted = false;
itemToBuy = NULL;
lastTeleportSave = -15.0f;
}
void PlayerEntity::moveTo(float newX, float newY)
{
float dx = newX - x;
float dy = newY - y;
x = newX;
y = newY;
for(int unsigned i = 0; i < fairies.size(); i++)
{
fairies[i]->setX(fairies[i]->getX() + dx);
fairies[i]->setY(fairies[i]->getY() + dy);
// Keep fairies on screen
if (fairies[i]->getX() < 0)
fairies[i]->setX(0);
else if (fairies[i]->getX() > MAP_WIDTH * TILE_WIDTH)
fairies[i]->setX(MAP_WIDTH * TILE_WIDTH);
if (fairies[i]->getY() < 0)
fairies[i]->setY(0);
else if (fairies[i]->getY() > MAP_HEIGHT * TILE_HEIGHT)
fairies[i]->setY(MAP_HEIGHT * TILE_HEIGHT);
}
}
int PlayerEntity::getFacingDirection()
{
return facingDirection;
}
void PlayerEntity::setFacingDirection(int facingDirection)
{
if (facingDirection == 4 || facingDirection == 6 || facingDirection == 2 || facingDirection == 8)
this->facingDirection = facingDirection;
}
float PlayerEntity::getPercentFireDelay()
{
if (canFirePlayer) return 1.0f;
else return (1.0f - currentFireDelay / fireDelay);
}
float PlayerEntity::getFadingDivinity(bool showCone)
{
if (playerStatus == playerStatusPraying)
{
float result = 1.0f;
if (statusTimer < 0.25f)
result = 4 * statusTimer;
else if (statusTimer > WORSHIP_DELAY - 0.25f)
result = (WORSHIP_DELAY - statusTimer) * 4;
return result;
}
if (!this->showCone && showCone) return -1.0f;
if (divineInterventionDelay <= 0.0f) return -1.0f;
if (!this->showCone)
{
if (int(age * 12) % 2 == 0) return 1.0f;
else return 0.3f;
}
else if (playerStatus == playerStatusPraying)
{
float result = 1.0f;
if (statusTimer < 0.25f)
result = 4 * statusTimer;
else if (statusTimer > WORSHIP_DELAY - 0.25f)
result = (WORSHIP_DELAY - statusTimer) * 4;
return result;
}
else
{
float result = 1.0f;
if (divineInterventionDelay < 0.25f)
result = 4 * divineInterventionDelay;
else if (divineInterventionDelay > WORSHIP_DELAY - 0.25f)
result = (WORSHIP_DELAY - divineInterventionDelay) * 4;
if (isRegeneration) result *= 0.4f;
return result;
}
}
float PlayerEntity::getPercentSpellDelay()
{
if (activeSpell.spell == SpellNone)
return getPercentFireDelay();
else
{
if (activeSpell.delay <= 0.0f) return 1.0f;
else return (1.0f - activeSpell.delay / activeSpell.delayMax);
}
}
int PlayerEntity::getLostHp(int level)
{
if (level >= 1 && level <= LAST_LEVEL)
return (lostHp[level - 1]);
else
return 0;
}
void PlayerEntity::setLostHp(int level, int n)
{
if (level >= 1 && level <= LAST_LEVEL)
lostHp[level - 1] = n;
}
int PlayerEntity::getDamage()
{
return fireDamages;
}
bool PlayerEntity::isPoisoned()
{
return (specialState[SpecialStatePoison].active);
}
int PlayerEntity::getCollidingDirection()
{
return collidingDirection;
}
PlayerEntity::playerStatusEnum PlayerEntity::getPlayerStatus()
{
return playerStatus;
}
void PlayerEntity::setPlayerStatus(PlayerEntity::playerStatusEnum playerStatus)
{
this->playerStatus = playerStatus;
}
bool PlayerEntity::isDead()
{
return playerStatus == playerStatusDead;
}
enemyTypeEnum PlayerEntity::getLastHurtingEnemy()
{
return lastHurtingEnemy;
}
sourceTypeEnum PlayerEntity::getLastHurtingSource()
{
return lastHurtingSource;
}
float PlayerEntity::getEndAge()
{
return endAge;
}
void PlayerEntity::setEndAge(float endAge)
{
this->endAge = endAge;
}
bool PlayerEntity::getFairyTransmuted()
{
return isFairyTransmuted;
}
divinityStruct PlayerEntity::getDivinity()
{
return divinity;
}
int PlayerEntity::getPiety()
{
return divinity.piety;
}
void PlayerEntity::stuck()
{
if (playerStatus != playerStatusEntering)
castTeleport();
}
void PlayerEntity::setEntering()
{
playerStatus = playerStatusEntering;
}
void PlayerEntity::setLeavingLevel()
{
playerStatus = playerStatusGoingNext;
if (game().getLevel() <= LAST_LEVEL)
{
if (getLostHp(game().getLevel()) == 0)
{
game().registerAchievement(AchievementNoDamage);
int counter = 0;
for (int i = 1; i <= game().getLevel(); i++) if (getLostHp(i) == 0) counter++;
if (counter >= 2) game().registerAchievement(AchievementNoDamage2);
if (counter >= 3) game().registerAchievement(AchievementNoDamage3);
}
}
}
float PlayerEntity::getFireRate()
{
return 1.0f / fireDelay;
}
void PlayerEntity::pay(int price)
{
gold -= price;
displayAcquiredGold(-price);
if (gold < 0) gold = 0;
SoundManager::getInstance().playSound(SOUND_PAY);
}
void PlayerEntity::acquireItemAfterStance()
{
if (acquiredItem >= FirstEquipItem)
{
equip[acquiredItem - FirstEquipItem] = true;
if (acquiredItem != ItemBossKey) game().proceedEvent(EventGetItem);
// familiar
if (items[acquiredItem].familiar != FamiliarNone)
{
setEquipped(acquiredItem - FirstEquipItem, true);
game().proceedEvent(EventGetFamiliar);
}
// shot types
else if (items[acquiredItem].specialShot != (ShotTypeStandard))
{
registerSpecialShot(acquiredItem);
game().proceedEvent(EventGetSpecialShot);
}
// spells
else if (items[acquiredItem].spell != SpellNone)
{
setActiveSpell(items[acquiredItem].spell, false);
game().proceedEvent(EventGetSpell);
}
// pet slime
else if (acquiredItem == ItemPetSlime)
{
new SlimePetEntity();
}
// alchemy book
else if (acquiredItem == ItemBookAlchemy)
{
game().acquireAlchemyBook();
}
// floor item
else if (acquiredItem == ItemFloorMap)
game().revealFloor();
else if (acquiredItem == ItemAlcohol)
hiccupDelay = HICCUP_DELAY;
// acquirement
if (equip[EQUIP_DISPLACEMENT_GLOVES] && equip[EQUIP_LEATHER_BOOTS] && equip[EQUIP_MAGICIAN_HAT] && equip[EQUIP_MAGICIAN_ROBE])
game().registerAchievement(AchievementCompleteSet);
computePlayer();
}
else
{
if (acquiredItem == ItemBossHeart)
{
int hpBonus = 2 + rand() % 4;
hpMax += hpBonus;
hp += hpBonus;
hpDisplay += hpBonus;
SoundManager::getInstance().playSound(SOUND_EAT);
std::ostringstream oss;
oss << "HP Max +" << hpBonus;
TextEntity* text = new TextEntity(oss.str(), 15, x, y - 50.0f);
text->setColor(TextEntity::COLOR_FADING_GREEN);
text->setAlignment(ALIGN_CENTER);
text->setAge(-1.0f);
text->setLifetime(1.2f);
text->setWeight(-60.0f);
text->setType(ENTITY_FLYING_TEXT);
text->setZ(2000);
}
else if (acquiredItem == ItemBonusHealth)
{
hpMax += 1;
hp = hpMax;
SoundManager::getInstance().playSound(SOUND_EAT);
TextEntity* text = new TextEntity("HP Max + 1", 15, x, y - 50.0f);
text->setColor(TextEntity::COLOR_FADING_GREEN);
text->setAlignment(ALIGN_CENTER);
text->setAge(-1.0f);
text->setLifetime(1.2f);
text->setWeight(-60.0f);
text->setType(ENTITY_FLYING_TEXT);
text->setZ(2000);
}
}
spriteItem->setDying(true);
spriteItemStar->setDying(true);
playerStatus = playerStatusPlaying;
}
void PlayerEntity::resetFloorItem()
{
equip[EQUIP_BOSS_KEY] = false;
equip[EQUIP_FLOOR_MAP] = false;
equip[EQUIP_ALCOHOL] = false;
equip[EQUIP_FAIRY_POWDER] = false;
equip[EQUIP_LUCK] = false;
computePlayer();
}
void PlayerEntity::setItemToBuy(ItemEntity* item)
{
itemToBuy = item;
}
ItemEntity* PlayerEntity::getItemToBuy()
{
return itemToBuy;
}
void PlayerEntity::animate(float delay)
{
// shot timer
if (specialBoltTimer >= 0.0f)
{
specialBoltTimer -= delay;
if (specialBoltTimer <= 0.0f)
{
if (getShotType() == ShotTypeIce) SoundManager::getInstance().playSound(SOUND_ICE_CHARGE);
}
}
if (playerStatus == playerStatusGoingNext)
{
return;
}
if (playerStatus == playerStatusStairs)
{
x += velocity.x * delay;
y += velocity.y * delay;
age += delay;
frame = ((int)(age * 7.0f)) % 4;
if (frame == 3) frame = 1;
if (x < (MAP_WIDTH / 2) * TILE_WIDTH - TILE_WIDTH / 2)
{
facingDirection = 8;
game().moveToOtherMap(8);
}
return;
}
// rate of fire
if (!canFirePlayer)
{
currentFireDelay -= delay;
canFirePlayer = (currentFireDelay <= 0.0f);
}
if (randomFireDelay >= 0.0f) randomFireDelay -= delay;
// spells
if (activeSpell.spell != SpellNone && activeSpell.delay > 0.0f)
{
if (game().getCurrentMap()->isCleared())
activeSpell.delay -= 40 * delay;
else
activeSpell.delay -= delay;
if (activeSpell.spell == SpellProtection && protection.active)
activeSpell.delay = activeSpell.delayMax;
if (activeSpell.delay <= 0.0f) SoundManager::getInstance().playSound(SOUND_SPELL_CHARGE);
}
// protection
if (protection.active)
{
protection.timer -= delay;
if (protection.timer <= 0.0f)
{
protection.active = false;
computePlayer();
}
}
// acquisition animation
if (playerStatus == playerStatusAcquire)
{
statusTimer -= delay;
if (statusTimer <= 0.0f)
{
acquireItemAfterStance();
}
}
else if (equip[EQUIP_ALCOHOL] && playerStatus == playerStatusPlaying)
{
hiccupDelay -= delay;
if (hiccupDelay <= 0.0f)
{
hiccupDelay = 4.0f;
// hiccup
repulsion.active = true;
repulsion.stun = true;
repulsion.velocity = Vector2D(350.0f);
repulsion.timer = 0.4f;
for (int i = 0; i < 4; i++)
{
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypePoison, 0);
bolt->setDamages(4);
bolt->setFlying(isFairyTransmuted);
bolt->setVelocity(Vector2D(fireVelocity));
}
TextEntity* text = new TextEntity("*hic*", 16, x, y - 30.0f);
text->setColor(TextEntity::COLOR_FADING_GREEN);
text->setAge(-0.6f);
text->setLifetime(0.3f);
text->setWeight(-60.0f);
text->setZ(2000);
text->setAlignment(ALIGN_CENTER);
text->setType(ENTITY_FLYING_TEXT);
SoundManager::getInstance().playSound(SOUND_HICCUP);
SoundManager::getInstance().playSound(SOUND_BLAST_STANDARD);
}
}
if (divineInterventionDelay > 0.0f) divineInterventionDelay -= delay;
if (fireAnimationDelay > 0.0f)
{
fireAnimationDelay -= delay;
if (fireAnimationDelay <= 0.0f) fireAnimationDelay = -1.0f;
}
if (spellAnimationDelay > 0.0f)
{
spellAnimationDelay -= delay;
if (spellAnimationDelay <= 0.0f) spellAnimationDelay = -1.0f;
}
// unlocking animation
else if (playerStatus == playerStatusUnlocking || playerStatus == playerStatusPraying)
{
statusTimer -= delay;
if (statusTimer <= 0.0f)
{
playerStatus = playerStatusPlaying;
}
}
if (playerStatus == playerStatusDead || playerStatus == playerStatusVictorious)
{
endAge += delay;
velocity = Vector2D(0.0f, 0.0f);
}
else
testSpriteCollisions();
// key room collision
if (game().getCurrentMap()->getRoomType() == roomTypeKey && !game().getCurrentMap()->isCleared())
{
sf::IntRect col1;
col1.width = 198;
col1.height = 68;
col1.top = 254;
col1.left = 380;
sf::IntRect col2;
col2.width = 68;
col2.height = 198;
col2.top = 189;
col2.left = 445;
if (boundingBox.intersects(col1) || boundingBox.intersects(col2))
{
repulsion.active = true;
repulsion.stun = true;
repulsion.velocity = Vector2D(GAME_WIDTH / 2, GAME_HEIGHT /2).vectorTo(Vector2D(x, y), 650.0f);
repulsion.timer = 0.4f;
game().activateKeyRoomEffect(true);
}
}
//collidingDirection = 0;
BaseCreatureEntity::animate(delay);
if (firingDirection != 5)
facingDirection = firingDirection;
// find the frame
if (firingDirection != 5 && canAnimateFire)
{
if (fireAnimationDelay < 0.0f)
fireAnimationDelay = fireAnimationDelayMax;
fireAnimationDirection = firingDirection;
}
else if (isMoving())
{
frame = ((int)(age * 7.0f)) % 4;
if (frame == 3) frame = 1;
}
else if (playerStatus == playerStatusAcquire || playerStatus == playerStatusUnlocking || playerStatus == playerStatusPraying)
frame = 3;
else if (playerStatus == playerStatusDead)
frame = 0;
else // standing
{
frame = 1;
}
if (playerStatus != playerStatusPlaying || isMoving() || firingDirection != 5)
idleAge = 0.0f;
else
idleAge += delay;
if (x < 0)
game().moveToOtherMap(4);
else if (x > MAP_WIDTH * TILE_WIDTH)
game().moveToOtherMap(6);
else if (y < 0)
game().moveToOtherMap(8);
else if (y > MAP_HEIGHT * TILE_HEIGHT)
game().moveToOtherMap(2);
#ifdef SPIRAL_STAIRCASE
else if (playerStatus == playerStatusPlaying
&& game().getLevel() < LAST_LEVEL
&& game().getCurrentMap()->getRoomType() == roomTypeExit && y < TILE_HEIGHT * 0.6f)
{
playerStatus = playerStatusStairs;
velocity.y = creatureSpeed / 12;
velocity.x = -creatureSpeed / 3;
facingDirection = 4;
SpriteEntity* exitDoorEntity = new SpriteEntity(ImageManager::getInstance().getImage(IMAGE_TILES),
(MAP_WIDTH / 2) * TILE_WIDTH - TILE_WIDTH / 2,
TILE_HEIGHT / 2, 64, 64, 1);
exitDoorEntity->setZ(TILE_HEIGHT);
exitDoorEntity->setImagesProLine(24);
exitDoorEntity->setFrame(MAP_WALL_BEGIN + 21 + 24 * game().getCurrentMap()->getWallType());
exitDoorEntity->setType(ENTITY_EFFECT);
SpriteEntity* exitDoorAroundEntity = new SpriteEntity(ImageManager::getInstance().getImage(IMAGE_DOORS),
(MAP_WIDTH / 2) * TILE_WIDTH - TILE_WIDTH / 2,
TILE_HEIGHT / 2, 64, 64, 1);
exitDoorAroundEntity->setZ(TILE_HEIGHT + 1);
exitDoorAroundEntity->setImagesProLine(8);
exitDoorAroundEntity->setFrame(5 + 7 * 8);
exitDoorAroundEntity->setType(ENTITY_EFFECT);
SpriteEntity* exitDoorEntityShadow = new SpriteEntity(ImageManager::getInstance().getImage(IMAGE_TILES_SHADOW),
(MAP_WIDTH / 2) * TILE_WIDTH - TILE_WIDTH / 2,
TILE_HEIGHT / 2, 64, 64, 1);
exitDoorEntityShadow->setZ(TILE_HEIGHT + 2);
exitDoorEntityShadow->setImagesProLine(10);
exitDoorEntityShadow->setFrame(4);
exitDoorEntityShadow->setType(ENTITY_EFFECT);
}
#endif
if (playerStatus == playerStatusEntering)
{
if (boundingBox.left > TILE_WIDTH
&& (boundingBox.left + boundingBox.width) < TILE_WIDTH * (MAP_WIDTH - 1)
&& boundingBox.top > TILE_HEIGHT
&& (boundingBox.top + boundingBox.height) < TILE_HEIGHT * (MAP_HEIGHT - 1))
{
playerStatus = playerStatusPlaying;
game().closeDoors();
}
else
{
if (x < 2 * TILE_WIDTH)
{
velocity.x = creatureSpeed;
velocity.y = 0.0f;
}
else if (x > (MAP_WIDTH - 3) * TILE_WIDTH)
{
velocity.x = -creatureSpeed;
velocity.y = 0.0f;
}
else if (y < 2 * TILE_HEIGHT)
{
velocity.y = creatureSpeed;
velocity.x = 0.0f;
}
else if (y > (MAP_HEIGHT - 3) * TILE_HEIGHT)
{
velocity.y = -creatureSpeed;
velocity.x = 0.0f;
}
}
}
if (playerStatus != playerStatusDead)
{
// effects
if (invincibleDelay >= 0.0f) invincibleDelay -= delay;
if (specialState[SpecialStateConfused].active)
SoundManager::getInstance().playSound(SOUND_VAMPIRE_HYPNOSIS, false);
// rage
if (specialState[SpecialStateRage].active)
{
specialState[SpecialStateRage].param3 -= delay;
if (specialState[SpecialStateRage].param3 <= 0.0f)
{
specialState[SpecialStateRage].param3 += specialState[SpecialStateRage].param2;
if (!equip[EQUIP_RAGE_AMULET]) rageFire(specialState[SpecialStateRage].param1, true, 1.5f);
}
}
if (equip[EQUIP_RAGE_AMULET])
{
rageFireDelay -= delay;
if (rageFireDelay <= 0.0f)
{
rageFireDelay += specialState[SpecialStateRage].active ? 1.5f : 8.0f;
rageFire(specialState[SpecialStateRage].param1, true, 1.5f);
}
}
}
z = y + 4;
}
bool PlayerEntity::canCollide()
{
return invincibleDelay <= 0.0f;
}
void PlayerEntity::setSpecialState(enumSpecialState state, bool active, float timer, float param1, float param2, bool waitUnclear)
{
BaseCreatureEntity::setSpecialState(state, active, timer, param1, param2, waitUnclear);
computePlayer();
}
void PlayerEntity::renderPlayer(sf::RenderTarget* app)
{
if (invincibleDelay > 0.0f)
{
if ((int)(age * 10.0f) % 2 == 0)return;
}
sf::Color savedColor = sprite.getColor();
if (isPoisoned()) sprite.setColor(sf::Color(180, 255, 180, 255));
// body
if (isMirroring)
sprite.setTextureRect(sf::IntRect( frame * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( frame * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setColor(savedColor);
// boots
if (equip[EQUIP_BOOTS_ADVANCED] && playerStatus != playerStatusDead)
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (21 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (21 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
else if (equip[EQUIP_LEATHER_BOOTS] && playerStatus != playerStatusDead)
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (9 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (9 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
if (equip[EQUIP_ROBE_ADVANCED] && playerStatus != playerStatusDead)
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (12 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (12 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (15 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (15 + frame) * width, spriteDy * height, width, height));
sprite.setColor(sf::Color(255, 255, 255, 100 + 100 * cosf(game().getAbsolutTime() * 3.5f)));
app->draw(sprite, sf::BlendAdd);
sprite.setColor(sf::Color(255, 255, 255, 255));
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
else if (equip[EQUIP_MAGICIAN_ROBE])
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (12 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (12 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
if (equip[EQUIP_GLOVES_ADVANCED] && playerStatus != playerStatusDead)
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (24 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (24 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
else if (equip[EQUIP_DISPLACEMENT_GLOVES])
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (21 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (21 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
if (equip[EQUIP_CRITICAL_ADVANCED])
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (24 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (24 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
else if (equip[EQUIP_CRITICAL])
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (18 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (18 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
if (equip[EQUIP_RAGE_AMULET])
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (18 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (18 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
else if (equip[EQUIP_AMULET_RETALIATION])
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_2));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (3 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (3 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
if (equip[EQUIP_BELT_ADVANCED] && playerStatus != playerStatusDead)
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (27 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (27 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
else if (equip[EQUIP_LEATHER_BELT])
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (15 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (15 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
// staff
int frameDx = equip[EQUIP_MAHOGANY_STAFF] ? 6 : 3;
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (frameDx + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (frameDx + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
if (equip[EQUIP_BLOOD_SNAKE])
{
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (27 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (27 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
}
if (equip[EQUIP_REAR_SHOT_ADVANCED])
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_2));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
else if (equip[EQUIP_REAR_SHOT])
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
// shot type
if (getShotType() != ShotTypeStandard)
{
switch (getShotType())
{
case ShotTypeIce:
sprite.setColor(sf::Color(100, 220, 255, 255));
break;
case ShotTypeStone:
sprite.setColor(sf::Color(120, 120, 150, 255));
break;
case ShotTypeLightning:
sprite.setColor(sf::Color(255, 255, 0, 255));
break;
case ShotTypeIllusion:
sprite.setColor(sf::Color(240, 180, 250, 255));
break;
case ShotTypeStandard:
sprite.setColor(sf::Color(255, 255, 255, 0));
break;
case ShotTypeFire:
sprite.setColor(sf::Color(255, 180, 0, 255));
break;
case ShotTypePoison:
sprite.setColor(sf::Color(50, 255, 50, 255));
break;
default:
std::cout << "[WARNING] Can not render shot type: " << getShotType() << std::endl;
}
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (3 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (3 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setColor(savedColor);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
// hat
if (equip[EQUIP_HAT_ADVANCED] && playerStatus != playerStatusDead)
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (9 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (9 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
else if (equip[EQUIP_MAGICIAN_HAT] && playerStatus != playerStatusDead)
{
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_1));
if (isMirroring)
sprite.setTextureRect(sf::IntRect( (6 + frame) * width + width, spriteDy * height, -width, height));
else
sprite.setTextureRect(sf::IntRect( (6 + frame) * width, spriteDy * height, width, height));
app->draw(sprite);
sprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_PLAYER_0));
}
}
void PlayerEntity::renderHalo(sf::RenderTarget* app)
{
if (frame > 2 || spriteDy > 8) return;
// gems
if ((getShotType() == ShotTypeIce || getShotType() == ShotTypeLightning || getShotType() == ShotTypeFire || getShotType() == ShotTypePoison) && playerStatus != playerStatusDead)
{
int fade;
sf::Color savedColor = sprite.getColor();
if (getShotType() != ShotTypeIce || specialBoltTimer <= 0.0f) fade = 255;
else fade = ((STATUS_FROZEN_BOLT_DELAY[getShotLevel()] - specialBoltTimer) / STATUS_FROZEN_BOLT_DELAY[getShotLevel()]) * 128;
if (getShotType() == ShotTypeLightning)
fade = 150 + rand() % 105;
if (getShotType() == ShotTypeFire)
fade = 200 + rand() % 40;
if (getShotType() == ShotTypePoison)
fade = 150 + rand() % 40;
if (getShotType() == ShotTypeIce)
sprite.setTextureRect(sf::IntRect(448, 864, 20, 20));
else if (getShotType() == ShotTypeLightning)
sprite.setTextureRect(sf::IntRect(448 + 20, 864, 20, 20));
else if (getShotType() == ShotTypeFire)
sprite.setTextureRect(sf::IntRect(448 + 40, 864, 20, 20));
else if (getShotType() == ShotTypePoison)
sprite.setTextureRect(sf::IntRect(448, 864 + 20, 20, 20));
sprite.setColor(sf::Color(255, 255, 255, fade));
if (isMirroring)
sprite.setPosition(x - 10 + 64 - xHalo[spriteDy][frame], y - 10 + yHalo[spriteDy][frame]);
else
sprite.setPosition(x - 10 + xHalo[spriteDy][frame], y - 10 + yHalo[spriteDy][frame]);
sf::RenderStates r;
r.blendMode = sf::BlendAdd;
app->draw(sprite, r);
sprite.setPosition(x, y);
sprite.setColor(savedColor);
}
}
void PlayerEntity::render(sf::RenderTarget* app)
{
sprite.setPosition(x, y);
spriteDy = 0;
isMirroring = false;
if (idleAge > 8.5f)
{
idleAge -= 8.5f;
}
else if (idleAge >= 7.5)
{
spriteDy = 8;
frame = 2;
}
else if (idleAge >= 7.0)
{
spriteDy = 8;
frame = 1;
}
else if (idleAge >= 6.0)
{
spriteDy = 8;
frame = 0;
}
else if (idleAge >= 5.5f && facingDirection != 2)
{
facingDirection = 2;
idleAge -= 2.0f;
}
else if (fireAnimationDelay <= 0.0f && spellAnimationDelay <= 0.0f)
{
if (facingDirection == 6) spriteDy = 1;
else if (facingDirection == 8) spriteDy = 2;
else if (facingDirection == 4)
{
spriteDy = 1;
isMirroring = true;
}
}
else if (spellAnimationDelay >= 0.0f)
{
spriteDy = 7;
if (spellAnimationDelay < spellAnimationDelayMax * 0.1f) frame = 0;
else if (spellAnimationDelay < spellAnimationDelayMax * 0.2f) frame = 1;
else if (spellAnimationDelay < spellAnimationDelayMax * 0.7f) frame = 2;
else if (spellAnimationDelay < spellAnimationDelayMax * 0.85f) frame = 1;
else frame = 0;
}
else
{
if (fireAnimationDirection == 2) spriteDy = 3;
else if (fireAnimationDirection == 6) spriteDy = 4;
else if (fireAnimationDirection == 8) spriteDy = 5;
else if (fireAnimationDirection == 4)
{
spriteDy = 4;
isMirroring = true;
}
if (fireAnimationDelay < fireAnimationDelayMax * 0.2f) frame = 0;
else if (fireAnimationDelay < fireAnimationDelayMax * 0.4f) frame = 1;
else if (fireAnimationDelay < fireAnimationDelayMax * 0.6f) frame = 2;
else if (fireAnimationDelay < fireAnimationDelayMax * 0.8f) frame = 1;
else frame = 0;
}
if (playerStatus == playerStatusAcquire || playerStatus == playerStatusUnlocking)
{
spriteDy = 6;
frame = ((int)(age * 10.0f)) % 4;
if (frame == 3) frame = 1;
}
else if (playerStatus == playerStatusPraying)
{
spriteDy = 7;
frame = ((int)(age * 10.0f)) % 4;
if (frame == 3) frame = 1;
float delay = playerStatus == playerStatusPraying ? WORSHIP_DELAY : UNLOCK_DELAY;
if (statusTimer < delay * 0.1f) frame = 0;
else if (statusTimer < delay * 0.2f) frame = 1;
else if (statusTimer < delay * 0.7f) frame = 2;
else if (statusTimer < delay * 0.85f) frame = 1;
else frame = 0;
}
if (playerStatus == playerStatusDead)
{
frame = (int)(endAge / 0.35f);
if (frame > 6) frame = 6;
spriteDy = 9;
sprite.setTextureRect(sf::IntRect( frame * width, spriteDy * height, width, height));
app->draw(sprite);
}
else
{
if (isFairyTransmuted)
{
frame = 0;
if (velocity.x * velocity.x + velocity.y * velocity.y > 400)
frame = ((int)(age * 24.0f)) % 2;
else
frame = ((int)(age * 18.0f)) % 2;
sf::Sprite fairySprite;
fairySprite.setColor(sprite.getColor());
fairySprite.setTexture(*ImageManager::getInstance().getImage(IMAGE_FAIRY));
fairySprite.setPosition(sprite.getPosition());
fairySprite.setOrigin(26, 62);
switch (facingDirection)
{
case 8: fairySprite.setTextureRect(sf::IntRect( (2 + frame) * 48, 6 * 72, 48, 72)); break;
case 4: fairySprite.setTextureRect(sf::IntRect( (4 + frame) * 48, 6 * 72, 48, 72)); break;
case 6: fairySprite.setTextureRect(sf::IntRect( (5 + frame) * 48, 6 * 72, - 48, 72)); break;
default: fairySprite.setTextureRect(sf::IntRect( frame * 48, 6 * 72, 48, 72)); break;
}
app->draw(fairySprite);
}
else
{
renderHalo(app);
renderPlayer(app);
}
// shield
if (playerStatus != playerStatusStairs && (specialState[DivineStateProtection].active || protection.active))
{
int firstFrame = 8;
if (specialState[DivineStateProtection].active && divinity.divinity == DivinityStone) firstFrame = 16;
float timer = specialState[DivineStateProtection].active ? specialState[DivineStateProtection].timer : protection.timer;
sprite.setTextureRect(sf::IntRect( firstFrame * width, 9 * height, width, height));
app->draw(sprite);
sf::Color savedColor = sprite.getColor();
sprite.setColor(sf::Color(255, 255, 255, 100 + cos(age * (timer < 2.0f ? 25 : 10)) * 30 ));
sprite.setTextureRect(sf::IntRect( (firstFrame + 1) * width, 9 * height, width, height));
app->draw(sprite);
sprite.setColor(savedColor);
}
// divine field
if (divinity.level > 1)
{
bool displayField = false;
int fieldFrame;
int fieldFade;
switch (divinity.divinity)
{
case DivinityHealer:
{
displayField = true;
fieldFrame = 10;
fieldFade = 40 * (divinity.level - 1);
break;
}
case DivinityFighter:
{
displayField = true;
fieldFrame = 12;
fieldFade = 40 * (divinity.level - 1);
break;
}
case DivinityIce:
{
if (divinity.level > 2)
{
displayField = true;
fieldFrame = 14;
fieldFade = 80 * (divinity.level - 3);
}
break;
}
case DivinityStone:
{
if (divinity.level > 2)
{
displayField = true;
fieldFrame = 16;
fieldFade = 80 * (divinity.level - 3);
}
break;
}
case DivinityAir:
{
if (divinity.level > 1)
{
displayField = true;
fieldFrame = 18;
fieldFade = 40 * (divinity.level - 1);
}
break;
}
+ case DivinityIllusion:
+ {
+ if (divinity.level > 1)
+ {
+ displayField = true;
+ fieldFrame = 20;
+ fieldFade = 40 * (divinity.level - 1);
+ }
+ break;
+ }
+ case DivinityFire:
+ {
+ if (divinity.level > 1)
+ {
+ displayField = true;
+ fieldFrame = 22;
+ fieldFade = 40 * (divinity.level - 1);
+ }
+ break;
+ }
+ case DivinityDeath:
+ {
+ if (divinity.level > 1)
+ {
+ displayField = true;
+ fieldFrame = 24;
+ fieldFade = 40 * (divinity.level - 1);
+ }
+ break;
+ }
}
if (displayField)
{
sf::Color savedColor = sprite.getColor();
sprite.setColor(sf::Color(255, 255, 255, fieldFade ));
sprite.setTextureRect(sf::IntRect( fieldFrame * width, 9 * height, width, height));
app->draw(sprite);
if (divinity.divinity != DivinityStone && divinity.divinity != DivinityHealer)
{
sprite.setColor(sf::Color(255, 255, 255, 2 + fieldFade / 2 + cos(age * 15) * fieldFade / 2 ));
sprite.setTextureRect(sf::IntRect( (fieldFrame + 1) * width, 9 * height, width, height));
app->draw(sprite);
sprite.setColor(savedColor);
}
if (divinity.divinity == DivinityHealer && divineInterventionDelay > 0.0f && isRegeneration)
{
sprite.setTextureRect(sf::IntRect( (fieldFrame + 1) * width, 9 * height, width, height));
app->draw(sprite);
}
sprite.setColor(savedColor);
}
}
}
if (game().getShowLogical() && playerStatus != playerStatusDead)
{
displayBoundingBox(app);
displayCenterAndZ(app);
}
}
void PlayerEntity::calculateBB()
{
if (isFairyTransmuted)
{
boundingBox.left = (int)x - 10;
boundingBox.width = 20;
boundingBox.top = (int)y - 29;
boundingBox.height = 20;
}
else
{
boundingBox.left = (int)x - 10;
boundingBox.width = 20;
boundingBox.top = (int)y - 29;
boundingBox.height = 33;
}
}
void PlayerEntity::readCollidingEntity(CollidingSpriteEntity* entity)
{
if (playerStatus == playerStatusDead || !canCollide()) return;
EnemyBoltEntity* boltEntity = dynamic_cast<EnemyBoltEntity*>(entity);
if (collideWithEntity(entity))
{
if (boltEntity != NULL && !boltEntity->getDying())
{
// TODO bolt source
int boltResult = hurt(getHurtParams(boltEntity->getDamages(),
boltEntity->getBoltType(),
boltEntity->getLevel(),
boltEntity->isCritical(),
SourceTypeBolt,
boltEntity->getEnemyType(),
false));
if (boltResult > -1)
{
boltEntity->collide();
game().generateBlood(x, y, bloodColor);
float xs = (x + boltEntity->getX()) / 2;
float ys = (y + boltEntity->getY()) / 2;
SpriteEntity* star = new SpriteEntity(ImageManager::getInstance().getImage(IMAGE_HURT_IMPACT), xs, ys);
star->setFading(true);
star->setZ(y+ 100);
star->setLifetime(0.7f);
star->setType(ENTITY_EFFECT);
star->setSpin(400.0f);
}
}
}
}
bool PlayerEntity::willCollideWithMap(int dx, int dy, bool checkMiddle)
{
float oldX = x, oldY = y;
bool collide = true;
x = oldX + dx;
y = oldY + dy;
if (!isCollidingWithMap())
collide = false;
else if (checkMiddle)
{
x = oldX + dx / 2;
y = oldY + dy / 2;
if (!isCollidingWithMap())
collide = false;
}
x = oldX;
y = oldY;
return collide;
}
void PlayerEntity::move(int direction)
{
float oldX = x, oldY = y;
bool touchUp, touchDown, touchLeft, touchRight;
x = oldX + 1;
touchRight = isCollidingWithMap();
x = oldX - 1;
touchLeft = isCollidingWithMap();
x = oldX;
y = oldY + 1;
touchDown = isCollidingWithMap();
y = oldY - 1;
touchUp = isCollidingWithMap();
y = oldY;
if (specialState[SpecialStateConfused].active)
{
switch (direction)
{
case 4: direction = 6; break;
case 6: direction = 4; break;
case 2: direction = 8; break;
case 8: direction = 2; break;
case 1: direction = 9; break;
case 9: direction = 1; break;
case 7: direction = 3; break;
case 3: direction = 7; break;
}
}
keyDirection = direction;
if (playerStatus == playerStatusAcquire && statusTimer < ACQUIRE_DELAY / 2)
{
acquireItemAfterStance();
}
if (playerStatus == playerStatusPlaying)
{
collidingDirection = 5;
switch (keyDirection)
{
case 1:
if (touchDown && touchLeft)
{
direction = 5;
collidingDirection = 1;
}
else if (touchDown)
{
direction = 4;
collidingDirection = 2;
}
else if (touchLeft)
{
direction = 2;
collidingDirection = 4;
}
break;
case 3:
if (touchDown && touchRight)
{
direction = 5;
collidingDirection = 3;
}
else if (touchDown)
{
direction = 6;
collidingDirection = 2;
}
else if (touchRight)
{
direction = 2;
collidingDirection = 6;
}
break;
case 7:
if (touchUp && touchLeft)
{
direction = 5;
collidingDirection = 7;
}
else if (touchUp)
{
direction = 4;
collidingDirection = 8;
}
else if (touchLeft)
{
direction = 8;
collidingDirection = 1;
}
break;
case 9:
if (touchUp && touchRight)
{
direction = 5;
collidingDirection = 9;
}
else if (touchUp)
{
direction = 6;
collidingDirection = 8;
}
else if (touchRight)
{
direction = 8;
collidingDirection = 6;
}
break;
case 4:
if (touchLeft)
{
x = oldX - 2;
if (!willCollideWithMap(0, KEYS_MOVE_TOLERANCE, true))
direction = 2;
else if (!willCollideWithMap(0, -KEYS_MOVE_TOLERANCE, true))
direction = 8;
else
{
direction = 5;
collidingDirection = 4;
}
x = oldX;
}
break;
case 6:
if (touchRight)
{
x = oldX + 2;
if (!willCollideWithMap(0, KEYS_MOVE_TOLERANCE, true))
direction = 2;
else if (!willCollideWithMap(0, -KEYS_MOVE_TOLERANCE, true))
direction = 8;
else
{
direction = 5;
collidingDirection = 6;
}
x = oldX;
}
break;
case 8:
if (touchUp)
{
y = oldY - 2;
if (!willCollideWithMap(KEYS_MOVE_TOLERANCE, 0, true))
direction = 6;
else if (!willCollideWithMap(-KEYS_MOVE_TOLERANCE, 0, true))
direction = 4;
else
{
direction = 5;
collidingDirection = 8;
}
y = oldY;
}
break;
case 2:
if (touchDown)
{
y = oldY + 2;
if (!willCollideWithMap(KEYS_MOVE_TOLERANCE, 0, true))
direction = 6;
else if (!willCollideWithMap(-KEYS_MOVE_TOLERANCE, 0, true))
direction = 4;
else
{
direction = 5;
collidingDirection = 2;
}
y = oldY;
}
break;
}
float speedx = 0.0f, speedy = 0.0f;
if (direction == 4)
speedx = - creatureSpeed;
else if (direction == 1 || direction == 7)
speedx = - creatureSpeed * 0.7f;
else if (direction == 6)
speedx = creatureSpeed;
else if (direction == 3 || direction == 9)
speedx = creatureSpeed * 0.7f;
if (direction == 2)
speedy = creatureSpeed;
else if (direction == 1 || direction == 3)
speedy = creatureSpeed * 0.7f;
else if (direction == 8)
speedy = - creatureSpeed;
else if (direction == 7 || direction == 9)
speedy = - creatureSpeed * 0.7f;
setVelocity(Vector2D(speedx, speedy));
if (firingDirection != 5)
facingDirection = firingDirection;
else
{
switch (keyDirection)
{
case 8:
facingDirection = 8;
break;
case 2:
facingDirection = 2;
break;
case 4:
facingDirection = 4;
break;
case 6:
facingDirection = 6;
break;
case 7:
if (facingDirection != 4 && facingDirection != 8) facingDirection = 4;
break;
case 1:
if (facingDirection != 4 && facingDirection != 2) facingDirection = 4;
break;
case 9:
if (facingDirection != 6 && facingDirection != 8) facingDirection = 6;
break;
case 3:
if (facingDirection != 6 && facingDirection != 2) facingDirection = 6;
break;
}
}
}
}
bool PlayerEntity::isMoving()
{
if (velocity.x < -1.0f || velocity.x > 1.0f) return true;
if (velocity.y < -1.0f || velocity.y > 1.0f) return true;
return false;
}
bool PlayerEntity::isEquiped(int eq)
{
return equip[eq];
}
bool* PlayerEntity::getEquipment()
{
return equip;
}
void PlayerEntity::setEquipped(int item, bool toggleEquipped, bool isFairyPlayer)
{
equip[item] = toggleEquipped;
if (toggleEquipped && items[FirstEquipItem + item].familiar > FamiliarNone)
{
FairyEntity* fairy = new FairyEntity(x - 50.0f + rand() % 100,
y - 50.0f + rand() % 100,
items[FirstEquipItem + item].familiar,
isFairyPlayer);
fairies.push_back(fairy);
int nbFamiliarFairies = 0;
for (auto fairy : fairies) if (!fairy->isPlayerControlled()) nbFamiliarFairies++;
if (nbFamiliarFairies == 3) game().registerAchievement(AchievementFairies);
}
computePlayer();
}
void PlayerEntity::generateBolt(float velx, float vely)
{
enumShotType boltType = ShotTypeStandard;
unsigned int shotLevel = 1;
switch (getShotType())
{
case ShotTypeIce:
if (getShotType() == ShotTypeIce)
{
if (specialBoltTimer <= 0.0f)
{
boltType = ShotTypeIce;
shotLevel = getShotLevel();
needInitShotType = true;
}
else boltType = ShotTypeCold;
}
break;
case ShotTypeStandard:
case ShotTypeIllusion:
case ShotTypeStone:
case ShotTypeLightning:
case ShotTypeFire:
case ShotTypePoison:
boltType = getShotType();
shotLevel = getShotLevel();
break;
default:
std::cout << "[WARNING] Can not generate shot type: " << getShotType() << std::endl;
}
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, boltType, shotLevel);
bolt->setFlying(isFairyTransmuted);
int boltDamage = fireDamages;
if (criticalChance > 0)
if (rand()% 100 < criticalChance)
{
boltDamage *= equip[EQUIP_CRITICAL_ADVANCED] ? 3 : 2;
bolt->setCritical(true);
}
bolt->setDamages(boltDamage);
if (equip[EQUIP_GLOVES_ADVANCED])
{
if (firingDirection == 2 || firingDirection == 8)
velx += velocity.x * 0.7f;
else if (firingDirection == 4 || firingDirection == 6)
vely += velocity.y * 0.7f;
}
bolt->setVelocity(Vector2D(velx, vely));
}
void PlayerEntity::rageFire(float damage, bool full, float velMult)
{
float tempFireVelocity = fireVelocity * velMult;
for (int i = -1; i <= 1; i += 2)
for (int j = -1; j <= 1; j += 2)
{
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeFire, 0);
bolt->setDamages(10);
bolt->setFlying(isFairyTransmuted);
float velx = tempFireVelocity * i * 0.42f;
float vely = tempFireVelocity * j * 0.42f;
bolt->setVelocity(Vector2D(velx, vely));
if (full)
{
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeFire, 0);
bolt->setDamages(10);
bolt->setFlying(isFairyTransmuted);
float velx = 0.0f;
float vely = 0.0f;
if (i == -1 && j == -1) velx = -tempFireVelocity * i * 0.6f;
else if (i == -1 && j == 1) velx = tempFireVelocity * i * 0.6f;
else if (i == 1 && j == -1) vely= -tempFireVelocity * i * 0.6f;
else if (i == 1 && j == 1) vely = tempFireVelocity * i * 0.6f;
bolt->setVelocity(Vector2D(velx, vely));
}
}
SoundManager::getInstance().playSound(SOUND_BLAST_FIRE);
}
void PlayerEntity::resetFireDirection()
{
firingDirection = 5;
}
int PlayerEntity::getFireDirection()
{
return firingDirection;
}
void PlayerEntity::fire(int direction)
{
if (age < 0.7f) return;
firingDirection = direction;
if (playerStatus != playerStatusDead)
for(int unsigned i = 0; i < fairies.size(); i++)
fairies[i]->fire(direction);
if (canFirePlayer && playerStatus != playerStatusDead && playerStatus != playerStatusAcquire)
{
canAnimateFire = true;
switch (getShotType())
{
case ShotTypeCold:
case ShotTypeIce:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_ICE);
break;
case ShotTypeFire:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_FIRE);
break;
case ShotTypeIllusion:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_ILLUSION);
break;
case ShotTypeLightning:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_LIGHTNING);
break;
case ShotTypePoison:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_POISON);
break;
case ShotTypeStone:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_STONE);
break;
default:
SoundManager::getInstance().playPitchModSound(SOUND_BLAST_STANDARD);
break;
}
if (equip[EQUIP_BOOK_DUAL] || equip[EQUIP_BOOK_TRIPLE]
|| equip[EQUIP_BOOK_DUAL_QUICK] || equip[EQUIP_BOOK_TRIPLE_QUICK])
{
float shoot_angle = 0.2f;
if ((direction == 4 && velocity.x < -1.0f) || (direction == 6 && velocity.x > 1.0f)
|| (direction == 8 && velocity.y < -1.0f) || (direction == 2 && velocity.y > 1.0f))
shoot_angle = 0.1f;
else if ((direction == 6 && velocity.x < -1.0f) || (direction == 4 && velocity.x > 1.0f)
|| (direction == 2 && velocity.y < -1.0f) || (direction == 8 && velocity.y > 1.0f))
shoot_angle = (equip[EQUIP_BOOK_TRIPLE] || equip[EQUIP_BOOK_TRIPLE_QUICK]) ? 0.35f : 0.2f;
else if (!equip[EQUIP_BOOK_TRIPLE] && !equip[EQUIP_BOOK_TRIPLE_QUICK])
shoot_angle = 0.1f;
switch(direction)
{
case 4:
generateBolt(-fireVelocity * cos(shoot_angle), fireVelocity * sin(shoot_angle));
generateBolt(-fireVelocity * cos(shoot_angle), - fireVelocity * sin(shoot_angle));
break;
case 6:
generateBolt(fireVelocity * cos(shoot_angle), fireVelocity * sin(shoot_angle));
generateBolt(fireVelocity * cos(shoot_angle), - fireVelocity * sin(shoot_angle));
break;
case 8:
generateBolt(fireVelocity * sin(shoot_angle), -fireVelocity * cos(shoot_angle));
generateBolt(-fireVelocity * sin(shoot_angle), - fireVelocity * cos(shoot_angle));
break;
case 2:
generateBolt(fireVelocity * sin(shoot_angle), fireVelocity * cos(shoot_angle));
generateBolt(-fireVelocity * sin(shoot_angle), fireVelocity * cos(shoot_angle));
break;
}
}
if (equip[EQUIP_RAPID_SHOT])
{
Vector2D boltDirection;
switch(direction)
{
case 4:
boltDirection = Vector2D(0, 0).vectorNearlyTo(Vector2D(-1, 0), fireVelocity, 0.2f);
break;
case 6:
boltDirection = Vector2D(0, 0).vectorNearlyTo(Vector2D(1, 0), fireVelocity, 0.2f);
break;
case 8:
boltDirection = Vector2D(0, 0).vectorNearlyTo(Vector2D(0, -1), fireVelocity, 0.2f);
break;
case 2:
boltDirection = Vector2D(0, 0).vectorNearlyTo(Vector2D(0, 1), fireVelocity, 0.2f);
break;
}
generateBolt(boltDirection.x, boltDirection.y);
}
else if (!(equip[EQUIP_BOOK_DUAL] || equip[EQUIP_BOOK_DUAL_QUICK]) || (equip[EQUIP_BOOK_TRIPLE] || equip[EQUIP_BOOK_TRIPLE_QUICK]))
{
switch(direction)
{
case 4:
generateBolt(-fireVelocity, 0.0f);
break;
case 6:
generateBolt(fireVelocity, 0.0f);
break;
case 8:
generateBolt(0.0f, -fireVelocity);
break;
case 2:
generateBolt(0.0f, fireVelocity);
break;
}
}
if (equip[EQUIP_REAR_SHOT_ADVANCED])
{
float shootAngle = 0.165f;
float boltVelocity = fireVelocity * 0.75f;
BoltEntity* bolt1 = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeStandard, 0);
bolt1->setDamages(fireDamages / 2);
bolt1->setFlying(isFairyTransmuted);
BoltEntity* bolt2 = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeStandard, 0);
bolt2->setDamages(fireDamages / 2);
bolt2->setFlying(isFairyTransmuted);
switch (direction)
{
case 4:
bolt1->setVelocity(Vector2D(boltVelocity * cos(shootAngle), boltVelocity * sin(shootAngle)));
bolt2->setVelocity(Vector2D(boltVelocity * cos(shootAngle), -boltVelocity * sin(shootAngle)));
break;
case 6:
bolt1->setVelocity(Vector2D(-boltVelocity * cos(shootAngle), boltVelocity * sin(shootAngle)));
bolt2->setVelocity(Vector2D(-boltVelocity * cos(shootAngle), -boltVelocity * sin(shootAngle)));
break;
case 2:
bolt1->setVelocity(Vector2D(boltVelocity * sin(shootAngle), -boltVelocity * cos(shootAngle)));
bolt2->setVelocity(Vector2D(-boltVelocity * sin(shootAngle), -boltVelocity * cos(shootAngle)));
break;
case 8:
bolt1->setVelocity(Vector2D(boltVelocity * sin(shootAngle), boltVelocity * cos(shootAngle)));
bolt2->setVelocity(Vector2D(-boltVelocity * sin(shootAngle), boltVelocity * cos(shootAngle)));
break;
}
}
else if (equip[EQUIP_REAR_SHOT])
{
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeStandard, 0);
bolt->setDamages(fireDamages / 2);
bolt->setFlying(isFairyTransmuted);
float velx = 0.0f;
float vely = 0.0f;
switch (direction)
{
case 4:
velx = fireVelocity * 0.75f;
break;
case 6:
velx = -fireVelocity * 0.75f;
break;
case 2:
vely = -fireVelocity * 0.75f;
break;
case 8:
vely = fireVelocity * 0.75f;
break;
}
bolt->setVelocity(Vector2D(velx, vely));
}
if (equip[EQUIP_SIDE_SHOTS])
{
BoltEntity* bolt1 = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeStandard, 0);
bolt1->setDamages(fireDamages / 2);
bolt1->setFlying(isFairyTransmuted);
BoltEntity* bolt2 = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeStandard, 0);
bolt2->setDamages(fireDamages / 2);
bolt2->setFlying(isFairyTransmuted);
if (direction == 4 || direction == 6)
{
bolt1->setVelocity(Vector2D(0.0f, fireVelocity * 0.75f));
bolt2->setVelocity(Vector2D(0.0f, -fireVelocity * 0.75f));
}
else
{
bolt1->setVelocity(Vector2D(fireVelocity * 0.75f, 0.0f));
bolt2->setVelocity(Vector2D(-fireVelocity * 0.75f, 0.0f));
}
}
if (equip[EQUIP_BOOK_RANDOM] && randomFireDelay <= 0.0f)
{
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeStandard, 0);
bolt->setDamages(fireDamages);
bolt->setFlying(isFairyTransmuted);
float shotAngle = rand() % 360;
bolt->setVelocity(Vector2D(fireVelocity * 0.75f * cos(shotAngle), fireVelocity * 0.75f * sin(shotAngle)));
randomFireDelay = fireDelay * 1.5f;
}
canFirePlayer = false;
currentFireDelay = fireDelay;
if (needInitShotType) initShotType();
}
else
{
canAnimateFire = false;
}
}
bool PlayerEntity::canMove()
{
return (playerStatus == playerStatusPlaying
|| (playerStatus == playerStatusAcquire && statusTimer < ACQUIRE_DELAY / 2));
}
int PlayerEntity::hurt(StructHurt hurtParam)
{
if (playerStatus == playerStatusDead) return false;
if (isFairyTransmuted && hurtParam.hurtingType != ShotTypeDeterministic)
{
hurtParam.damage *= 2;
}
shouldBeSavedFromDivinity = false;
bool divinityInvoked = false;
int thresholdDam = 5;
if (invincibleDelay <= 0.0f && hp - hurtParam.damage <= thresholdDam && divinity.divinity >= 0)
{
if (triggerIllusionTeleport())
{
castTeleport();
lastTeleportSave = game().getGameTime();
divineInterventionDelay = WORSHIP_DELAY * 1.0f;
showCone = false;
return -999;
}
else if (game().getEnemyCount() > 2)
{
divinityInvoked = triggerDivinityBefore();
if (divinityInvoked)
{
game().testAndAddMessageToQueue((EnumMessages)(MsgInfoDivIntervention));
shouldBeSavedFromDivinity = true;
}
}
}
if (invincibleDelay <= 0.0f || hurtParam.hurtingType == ShotTypeDeterministic)
{
SoundManager::getInstance().playSound(SOUND_PLAYER_HIT);
int oldHp = hp;
if (BaseCreatureEntity::hurt(hurtParam) > 0)
{
if (hurtParam.hurtingType != ShotTypeDeterministic)
{
invincibleDelay = INVINCIBLE_DELAY;
if (equip[EQUIP_AMULET_RETALIATION] && !equip[EQUIP_RAGE_AMULET]) rageFire(10, hp <= hpMax / 5, 1.0f);
game().generateBlood(x, y, bloodColor);
}
hurtingDelay = HURTING_DELAY * 2.0f;
game().generateBlood(x, y, bloodColor);
game().proceedEvent(EventBeingHurted);
if (oldHp > hp && game().getLevel() <= LAST_LEVEL)
lostHp[game().getLevel() - 1] += (oldHp - hp);
lastHurtingEnemy = hurtParam.enemyType;
lastHurtingSource = hurtParam.sourceType;
// divinity
offerHealth(oldHp - hp);
if (!divinityInvoked && hp <= hpMax / 4 && divinity.divinity >= 0)
{
triggerDivinityAfter();
}
game().addHurtingStat(oldHp - hp);
return true;
}
}
return false;
}
void PlayerEntity::setMap(GameMap* map, int tileWidth, int tileHeight, int offsetX, int offsetY)
{
CollidingSpriteEntity::setMap(map, tileWidth, tileHeight, offsetX, offsetY);
//if (slimePet != NULL) slimePet->setMap(map, tileWidth, tileHeight, offsetX, offsetY);
}
void PlayerEntity::loseItem(enumItemType itemType, bool isEquip)
{
CollidingSpriteEntity* itemSprite
= new CollidingSpriteEntity(ImageManager::getInstance().getImage(isEquip ? IMAGE_ITEMS_EQUIP : IMAGE_ITEMS), x, y, 32, 32);
itemSprite->setMap(map, TILE_WIDTH, TILE_HEIGHT, 0, 0);
itemSprite->setZ(-1);
itemSprite->setFrame(itemType);
itemSprite->setImagesProLine(10);
itemSprite->setType(ENTITY_BLOOD);
itemSprite->setVelocity(Vector2D(200 + rand()%450));
itemSprite->setViscosity(0.95f);
itemSprite->setSpin( (rand() % 700) - 350.0f);
}
void PlayerEntity::dying()
{
if (shouldBeSavedFromDivinity)
{
hp = 33 * hpMax / 100;
return;
}
else if (divinity.divinity > -1 && divinity.interventions < divinity.level - 1)
{
hp = 1;
return;
}
playerStatus = playerStatusDead;
endAge = 0.0f;
hp = 0;
SoundManager::getInstance().playSound(SOUND_PLAYER_DIE);
setVelocity(Vector2D(0.0f, 0.0f));
int i;
for (i = 0; i < gold && i < 10; i++) loseItem(ItemCopperCoin, false);
for (i = 0; i < 5; i++) game().generateBlood(x, y, BloodRed);
for (i = 0; i < NUMBER_EQUIP_ITEMS; i++)
{
if (equip[i])
{
if (items[i + FirstEquipItem].familiar == FamiliarNone)
loseItem(enumItemType(i), true);
}
}
remove(SAVE_FILE.c_str());
if (game().getLevel() == 1) game().registerAchievement(AchievementNoob);
game().calculateScore();
}
void PlayerEntity::displayAcquiredGold(int n)
{
std::ostringstream oss;
if (n > 0) oss << "+";
oss << n;
TextEntity* text = new TextEntity(oss.str(), 16, x, y - 30.0f);
text->setColor(TextEntity::COLOR_FADING_YELLOW);
text->setAge(-0.6f);
text->setLifetime(0.3f);
text->setWeight(-60.0f);
text->setZ(2000);
text->setAlignment(ALIGN_CENTER);
text->setType(ENTITY_FLYING_TEXT);
}
void PlayerEntity::acquireItem(enumItemType type)
{
if (items[type].generatesStance) acquireStance(type);
else if (items[type].consumable)
{
acquireConsumable(type);
}
else switch (type)
{
case ItemCopperCoin:
gold++;
displayAcquiredGold(1);
SoundManager::getInstance().playSound(SOUND_COIN_PICK_UP);
game().proceedEvent(EventGetCoin);
break;
case ItemSilverCoin:
gold = gold + 5;
displayAcquiredGold(5);
SoundManager::getInstance().playSound(SOUND_COIN_PICK_UP);
game().proceedEvent(EventGetCoin);
break;
case ItemGoldCoin:
gold = gold + 10;
displayAcquiredGold(10);
SoundManager::getInstance().playSound(SOUND_COIN_PICK_UP);
game().proceedEvent(EventGetCoin);
break;
case ItemHealthVerySmallPoison:
specialState[SpecialStatePoison].active = false;
case ItemHealthVerySmall:
heal(equip[EQUIP_MANUAL_HEALTH] ? 5 : 3);
SoundManager::getInstance().playSound(SOUND_EAT);
break;
case ItemHealthSmall:
heal(equip[EQUIP_MANUAL_HEALTH] ? 10 : 7);
SoundManager::getInstance().playSound(SOUND_EAT);
break;
case ItemHealth:
heal(equip[EQUIP_MANUAL_HEALTH] ? 22 : 15);
SoundManager::getInstance().playSound(SOUND_EAT);
break;
default:
break;
}
}
bool isUnidentified(enumItemType item)
{
return (item >= ItemPotion01 && item < ItemPotion01 + NUMBER_UNIDENTIFIED);
}
int PlayerEntity::getConsumable(int n)
{
if (n < 0 || n >= MAX_SLOT_CONSUMABLES) return -1;
else return consumable[n];
}
void PlayerEntity::setConsumable(int n, int type)
{
if (n < 0 || n >= MAX_SLOT_CONSUMABLES) return;
consumable[n] = type;
}
void PlayerEntity::dropConsumables(int n)
{
if (n < 0 || n >= MAX_SLOT_CONSUMABLES) return;
if (playerStatus != playerStatusPlaying) return;
if (consumable[n] < 0) return;
ItemEntity* newItem = new ItemEntity((enumItemType)(consumable[n]), x, y);
newItem->setVelocity(Vector2D(100.0f + rand()% 250));
newItem->setViscosity(0.96f);
newItem->setAge(-5.0f);
newItem->startsJumping();
consumable[n] = -1;
}
void PlayerEntity::tryToConsume(int n)
{
if (n < 0 || n >= MAX_SLOT_CONSUMABLES) return;
if (playerStatus != playerStatusPlaying) return;
if (consumable[n] > -1)
{
// unidentified
if (isUnidentified((enumItemType)consumable[n]))
{
enumItemType potion = (enumItemType)consumable[n];
enumItemType potionEffect = game().getPotion(potion);
game().setPotionToKnown(potion);
for (int i = 0; i < MAX_SLOT_CONSUMABLES; i++)
if (consumable[i] == potion) consumable[i] = potionEffect;
consume(potionEffect);
}
else if (items[consumable[n]].consumable)
// known
{
consume((enumItemType)consumable[n]);
}
else
{
std::cout << "[ERROR] Trying to consume item: " << items[consumable[n]].name << std::endl;
}
}
consumable[n] = -1;
}
void PlayerEntity::consume(enumItemType item)
{
switch(item)
{
case ItemScrollRevelation:
reveal();
spellAnimationDelay = spellAnimationDelayMax;
SoundManager::getInstance().playSound(SOUND_SCROLL);
break;
case ItemPotionHealth:
heal(equip[EQUIP_MANUAL_HEALTH] ? 28 : 18);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionPoison:
specialState[SpecialStatePoison].active = true;
specialState[SpecialStatePoison].timer = POISON_TIMER[0];
specialState[SpecialStatePoison].param1 = POISON_DAMAGE[0];
specialState[SpecialStatePoison].param2 = POISON_DELAY[0];
specialState[SpecialStatePoison].param3 = POISON_DELAY[0];
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("poison"), TextEntity::COLOR_FADING_RED);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionSpeed:
specialState[SpecialStateSpeed].active = false;
specialState[SpecialStateSpeed].waitUnclear = true;
specialState[SpecialStateSpeed].timer = 30;
specialState[SpecialStateSpeed].param1 = 1.5f;
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_speed"), TextEntity::COLOR_FADING_BLUE);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionSlow:
specialState[SpecialStateSlow].active = false;
specialState[SpecialStateSlow].waitUnclear = true;
specialState[SpecialStateSlow].timer = 30;
specialState[SpecialStateSlow].param1 = 0.35f;
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_slow"), TextEntity::COLOR_FADING_RED);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionWeakness:
specialState[SpecialStateWeakness].active = false;
specialState[SpecialStateWeakness].waitUnclear = true;
specialState[SpecialStateWeakness].timer = 30;
specialState[SpecialStateWeakness].param1 = 0.5f;
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_weakness"), TextEntity::COLOR_FADING_RED);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionStrength:
specialState[SpecialStateStrength].active = false;
specialState[SpecialStateStrength].waitUnclear = true;
specialState[SpecialStateStrength].timer = 30;
specialState[SpecialStateStrength].param1 = 1.5f;
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_strength"), TextEntity::COLOR_FADING_BLUE);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionOblivion:
game().forget();
if (!equip[EQUIP_BOOK_ALCHEMY])
{
for (int i = 0; i < MAX_SLOT_CONSUMABLES; i++)
{
if (consumable[i] > -1)
{
if (consumable[i] >= ItemPotion01 + NUMBER_UNIDENTIFIED && consumable[i] < FirstEquipItem )
{
consumable[i] = game().getPotion((enumItemType)consumable[i]);
}
}
}
}
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_forget"), TextEntity::COLOR_FADING_RED);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionConfusion:
specialState[SpecialStateConfused].active = false;
specialState[SpecialStateConfused].waitUnclear = true;
specialState[SpecialStateConfused].timer = 10;
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_confusion"), TextEntity::COLOR_FADING_RED);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionCure:
for (int i = 0; i < DivineStateProtection; i++)
{
specialState[i].active = false;
specialState[i].waitUnclear = false;
}
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_cure"), TextEntity::COLOR_FADING_BLUE);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
case ItemPotionRage:
specialState[SpecialStateRage].active = false;
specialState[SpecialStateRage].waitUnclear = true;
specialState[SpecialStateRage].timer = 20.5f;
specialState[SpecialStateRage].param1 = 12;
specialState[SpecialStateRage].param2 = 2;
specialState[SpecialStateRage].param3 = 2;
displayFlyingText( x, y - 20.0f, 16, tools::getLabel("effect_rage"), TextEntity::COLOR_FADING_RED);
SoundManager::getInstance().playSound(SOUND_DRINK);
break;
default:
std::cout << "[ERROR] Trying to consume item: " << items[item].name << std::endl;
break;
}
SpriteEntity* usedItem = new SpriteEntity(ImageManager::getInstance().getImage(IMAGE_ITEMS), x, y, 32, 32);
usedItem->setImagesProLine(10);
if (item == ItemScrollRevelation)
usedItem->setFrame((int)item);
else
usedItem->setFrame(38);
usedItem->setFading(true);
usedItem->setZ(y - 100);
usedItem->setLifetime(0.7f);
usedItem->setAge(-0.7);
usedItem->setType(ENTITY_EFFECT);
usedItem->setSpin(rand() % 400 - 200);
usedItem->setVelocity(Vector2D(60));
}
void PlayerEntity::reveal()
{
for (int i = 0; i < MAX_SLOT_CONSUMABLES; i++)
{
if (consumable[i] > -1)
{
if (isUnidentified((enumItemType)consumable[i]))
{
game().setPotionToKnown((enumItemType)consumable[i]);
consumable[i] = game().getPotion((enumItemType)consumable[i]);
}
}
}
if (game().getCurrentMap()->callRevelation())
{
game().refreshMinimap();
SoundManager::getInstance().playSound(SOUND_SECRET);
}
}
bool PlayerEntity::canAquireConsumable(enumItemType type)
{
int nbConsumableSlot = equip[EQUIP_BAG] ? 4 : 2;
for (int i = 0; i < nbConsumableSlot; i++)
{
if (consumable[i] <= 0) return true;
}
return false;
}
void PlayerEntity::acquireConsumable(enumItemType type)
{
int nbConsumableSlot = equip[EQUIP_BAG] ? 4 : 2;
int emptySlot = -1;
for (int i = 0; emptySlot == -1 && i < nbConsumableSlot; i++)
{
if (consumable[i] <= 0) emptySlot = i;
}
if (emptySlot > -1)
{
consumable[emptySlot] = type;
if (type == ItemScrollRevelation)
SoundManager::getInstance().playSound(SOUND_SCROLL);
else
SoundManager::getInstance().playSound(SOUND_BOTTLE);
// events
game().proceedEvent(EventConsumable);
if (isUnidentified(type)) game().proceedEvent(EventPotion);
}
}
void PlayerEntity::onClearRoom()
{
if (divinity.divinity == DivinityHealer)
{
if (divinity.level > 1 && hp < hpMax)
{
divineInterventionDelay = WORSHIP_DELAY / 2;
isRegeneration = true;
showCone = true;
if (divinity.level >= 5) heal(4);
else if (divinity.level >= 4) heal(3);
else if (divinity.level >= 3) heal(2);
else if (divinity.level >= 2) heal(1);
}
}
}
void PlayerEntity::computePlayer()
{
float boltLifeTimeBonus = 1.0f;
float fireDelayBonus = 1.0f;
float creatureSpeedBonus = 1.0f;
float fireVelocityBonus = 1.0f;
float fireDamagesBonus = 1.0f;
armor = 0.0f;
criticalChance = 0;
for (int i = 0; i < NB_RESISTANCES; i++) resistance[i] = ResistanceStandard;
// gloves
if (equip[EQUIP_GLOVES_ADVANCED]) fireDelayBonus -= 0.15f;
else if (equip[EQUIP_DISPLACEMENT_GLOVES]) fireDelayBonus -= 0.10f;
// hat
if (equip[EQUIP_HAT_ADVANCED])
{
fireDelayBonus -= 0.3f;
resistance[ResistanceIce] = (enumStateResistance)(resistance[ResistanceIce] - 1);
resistance[ResistanceStone] = (enumStateResistance)(resistance[ResistanceStone] - 1);
resistance[ResistanceLightning] = (enumStateResistance)(resistance[ResistanceLightning] - 1);
resistance[ResistanceFire] = (enumStateResistance)(resistance[ResistanceFire] - 1);
}
else if (equip[EQUIP_MAGICIAN_HAT]) fireDelayBonus -= 0.2f;
// belt
if (equip[EQUIP_LEATHER_BELT]) fireDelayBonus -= 0.15f;
// boots
if (equip[EQUIP_BOOTS_ADVANCED]) creatureSpeedBonus += 0.25f;
else if (equip[EQUIP_LEATHER_BOOTS]) creatureSpeedBonus += 0.15f;
// multi-fire
if (equip[EQUIP_BOOK_TRIPLE]) fireDelayBonus += 0.7f;
else if (equip[EQUIP_BOOK_DUAL]) fireDelayBonus += 0.5f;
if (equip[EQUIP_CRITICAL]) criticalChance += 5;
if (equip[EQUIP_MANUAL_STAFF]) boltLifeTimeBonus += 0.4f;
if (equip[EQUIP_MAHOGANY_STAFF])
{
fireVelocityBonus += 0.15f;
fireDamagesBonus += 0.5f;
}
if (equip[EQUIP_BLOOD_SNAKE]) fireDamagesBonus += 0.5f;
if (equip[EQUIP_ROBE_ADVANCED]) armor += 0.2f;
else if (equip[EQUIP_MAGICIAN_ROBE]) armor += 0.15f;
// divinity
switch (divinity.divinity)
{
case (DivinityHealer):
{
break;
}
case (DivinityFighter):
{
if (divinity.level >= 5)
fireDamagesBonus += 0.5f;
else if (divinity.level >= 4)
fireDamagesBonus += 0.375f;
else if (divinity.level >= 3)
fireDamagesBonus += 0.25f;
else if (divinity.level >= 2)
fireDamagesBonus += 0.125f;
break;
}
case (DivinityIce):
{
if (divinity.level >= 5) resistance[ResistanceFrozen] = ResistanceVeryHigh;
if (divinity.level >= 3) resistance[ResistanceIce] = (enumStateResistance)(resistance[ResistanceIce] - 1);
break;
}
+ case (DivinityFire):
+ {
+ if (divinity.level >= 3) resistance[ResistanceFire] = (enumStateResistance)(resistance[ResistanceFire] - 1);
+ break;
+ }
+ case (DivinityDeath):
+ {
+ if (divinity.level >= 5) resistance[ResistancePoison] = ResistanceVeryHigh;
+ else if (divinity.level >= 3) resistance[ResistancePoison] = ResistanceHigh;
+ break;
+ }
case (DivinityStone):
{
if (divinity.level >= 5) resistance[ResistanceRepulsion] = ResistanceVeryHigh;
if (divinity.level >= 3) resistance[ResistanceStone] = (enumStateResistance)(resistance[ResistanceStone] - 1);
break;
}
case (DivinityAir):
{
if (divinity.level > 1) creatureSpeedBonus += (divinity.level - 1) * 0.04f;
if (divinity.level >= 3) resistance[ResistanceLightning] = (enumStateResistance)(resistance[ResistanceLightning] - 1);
break;
}
}
fireDelay = INITIAL_PLAYER_FIRE_DELAY * fireDelayBonus;
creatureSpeed = INITIAL_PLAYER_SPEED * creatureSpeedBonus;
fireVelocity = INITIAL_BOLT_VELOCITY * fireVelocityBonus;
fireDamages = INITIAL_BOLT_DAMAGES * fireDamagesBonus;
boltLifeTime = INITIAL_BOLT_LIFE * boltLifeTimeBonus;
// gems
for (int i = 1; i < SPECIAL_SHOT_SLOTS; i++)
{
specialShotLevel[i] = 0;
switch (specialShots[i])
{
case ShotTypeIce:
if (equip[EQUIP_RING_ICE]) specialShotLevel[i]++;
if (divinity.divinity == DivinityIce && divinity.level >= 4) specialShotLevel[i]++;
break;
case ShotTypeStone:
if (equip[EQUIP_RING_STONE]) specialShotLevel[i]++;
if (divinity.divinity == DivinityStone && divinity.level >= 4) specialShotLevel[i]++;
break;
case ShotTypeLightning:
if (equip[EQUIP_RING_LIGHTNING]) specialShotLevel[i]++;
if (divinity.divinity == DivinityAir && divinity.level >= 4) specialShotLevel[i]++;
break;
case ShotTypeIllusion:
if (equip[EQUIP_RING_ILLUSION]) specialShotLevel[i]++;
if (divinity.divinity == DivinityIllusion && divinity.level >= 4) specialShotLevel[i]++;
break;
case ShotTypeFire:
if (equip[EQUIP_RING_FIRE]) specialShotLevel[i]++;
+ if (divinity.divinity == DivinityFire && divinity.level >= 4) specialShotLevel[i]++;
break;
case ShotTypePoison:
if (equip[EQUIP_RING_POISON]) specialShotLevel[i]++;
+ if (divinity.divinity == DivinityDeath && divinity.level >= 4) specialShotLevel[i]++;
break;
default:
break;
}
}
if (getShotType() == ShotTypeIllusion) fireDamages *= ILLUSION_DAMAGE_DECREASE[getShotLevel()];
else if (getShotType() == ShotTypeFire) fireDamages *= FIRE_DAMAGE_INCREASE[getShotLevel()];
// divinity
if (specialState[DivineStateProtection].active)
armor += specialState[DivineStateProtection].param1;
// post-computation
if (equip[EQUIP_BOOK_TRIPLE_QUICK]) fireDamages *= 0.65f;
else if (equip[EQUIP_BOOK_DUAL_QUICK]) fireDamages *= 0.75f;
else if (equip[EQUIP_RAPID_SHOT])
{
fireDelay *= 0.20f;
fireDamages *= 0.25f;
}
if (equip[EQUIP_ALCOHOL]) fireDamages *= 1.25f;
// spells
if (protection.active) armor += protection.value;
if (armor > 1.0f) armor = 1.0f;
// fairy ?
if (isFairyTransmuted)
{
fireDamages *= 0.5f;
creatureSpeed *= 1.5f;
movingStyle = movFlying;
}
else
{
movingStyle = movWalking;
}
// potions
if (specialState[SpecialStateWeakness].active && !specialState[SpecialStateStrength].active)
fireDamages *= specialState[SpecialStateWeakness].param1;
if (specialState[SpecialStateStrength].active && !specialState[SpecialStateWeakness].active)
fireDamages *= specialState[SpecialStateStrength].param1;
}
void PlayerEntity::acquireStance(enumItemType type)
{
velocity.x = 0.0f;
velocity.y = 0.0f;
playerStatus = playerStatusAcquire;
statusTimer = ACQUIRE_DELAY;
acquiredItem = (enumItemType)(type);
SoundManager::getInstance().playSound(SOUND_BONUS);
game().showArtefactDescription(type);
enumItemType itemFrame = type;
int itemImage = IMAGE_ITEMS;
if (itemFrame >= FirstEquipItem)
{
itemFrame = (enumItemType)(itemFrame - FirstEquipItem);
itemImage = IMAGE_ITEMS_EQUIP;
}
spriteItem = new SpriteEntity(
ImageManager::getInstance().getImage(itemImage),
x, y - 100.0f, ITEM_WIDTH, ITEM_HEIGHT);
spriteItem->setFrame((int)itemFrame);
spriteItem->setImagesProLine(10);
spriteItem->setZ(z);
spriteItem->setLifetime(ACQUIRE_DELAY);
spriteItemStar = new SpriteEntity(
ImageManager::getInstance().getImage(IMAGE_STAR),
x, y - 100.0f);
spriteItemStar->setScale(4.0f, 4.0f);
spriteItemStar->setZ(z-1.0f);
spriteItemStar->setLifetime(ACQUIRE_DELAY);
spriteItemStar->setSpin(50.0f);
}
void PlayerEntity::collideMapRight()
{
collidingDirection = 6;
if (repulsion.active) repulsion.velocity.x = -repulsion.velocity.x * 0.7f;
}
void PlayerEntity::collideMapLeft()
{
collidingDirection = 4;
if (repulsion.active) repulsion.velocity.x = -repulsion.velocity.x * 0.7f;
}
void PlayerEntity::collideMapTop()
{
collidingDirection = 8;
if (repulsion.active) repulsion.velocity.y= -repulsion.velocity.y * 0.7f;
}
void PlayerEntity::collideMapBottom()
{
collidingDirection = 2;
if (repulsion.active) repulsion.velocity.y= -repulsion.velocity.y * 0.7f;
}
void PlayerEntity::useBossKey()
{
velocity.x = 0.0f;
velocity.y = 0.0f;
playerStatus = playerStatusUnlocking;
statusTimer = UNLOCK_DELAY;
acquiredItem = (enumItemType)(type - FirstEquipItem);
SoundManager::getInstance().playSound(SOUND_DOOR_OPENING_BOSS);
equip[EQUIP_BOSS_KEY] = false;
SpriteEntity* spriteItem = new SpriteEntity(
ImageManager::getInstance().getImage(IMAGE_ITEMS_EQUIP),
x, y - 80.0f, ITEM_WIDTH, ITEM_HEIGHT);
spriteItem->setFrame(EQUIP_BOSS_KEY);
spriteItem->setZ(z);
spriteItem->setAge(-UNLOCK_DELAY * 0.5f);
spriteItem->setLifetime(UNLOCK_DELAY * 0.5f);
spriteItem->setFading(true);
spriteItem->setSpin(300);
}
enumShotType PlayerEntity::getShotType()
{
return specialShots[specialShotIndex];
}
int PlayerEntity::getShotIndex()
{
return specialShotIndex;
}
void PlayerEntity::setShotIndex(int index)
{
specialShotIndex = index;
}
enumShotType PlayerEntity::getShotType(int slot)
{
return specialShots[slot];
}
void PlayerEntity::setShotType(int slot, enumShotType shotType)
{
specialShots[slot] = shotType;
}
void PlayerEntity::registerSpecialShot(int item)
{
bool found = false;
int index = 1;
while (index < SPECIAL_SHOT_SLOTS && !found)
{
found = specialShots[index] == ShotTypeStandard;
if (!found) index++;
}
if (found)
{
this->specialShots[index] = items[item].specialShot;
specialShotIndex = index;
initShotType();
}
}
void PlayerEntity::selectShotType(int n)
{
if (n == specialShotIndex) return;
if (n > 0 && getShotType(n) == ShotTypeStandard) return;
specialShotIndex = n;
initShotType();
SoundManager::getInstance().playSound(SOUND_SHOT_SELECT);
computePlayer();
}
void PlayerEntity::selectNextShotType()
{
int index = specialShotIndex + 1;
bool found = false;
while (index < SPECIAL_SHOT_SLOTS && !found)
{
if (specialShots[index] == ShotTypeStandard) index++;
else found = true;
}
if (found)
{
specialShotIndex = index;
initShotType();
}
else
specialShotIndex = 0;
SoundManager::getInstance().playSound(SOUND_SHOT_SELECT);
computePlayer();
}
void PlayerEntity::initShotType()
{
specialBoltTimer = STATUS_FROZEN_BOLT_DELAY[getShotLevel()];
needInitShotType = false;
if (getShotType() == ShotTypeLightning)
SoundManager::getInstance().playSound(SOUND_ELECTRIC_CHARGE);
}
unsigned int PlayerEntity::getShotLevel()
{
return specialShotLevel[specialShotIndex];
}
unsigned int PlayerEntity::getShotLevel(int index)
{
return specialShotLevel[index];
}
int PlayerEntity::getFairieNumber()
{
return fairies.size();
}
FairyEntity* PlayerEntity::getFairy(unsigned int n)
{
if (n < fairies.size())
return fairies[n];
else
return NULL;
}
bool PlayerEntity::canGetNewShot(bool advancedShot)
{
int nbSpecial =0;
int nbAdvanced =0;
for (int i = 1; i < SPECIAL_SHOT_SLOTS; i++)
{
switch (specialShots[i])
{
case ShotTypeIce:
case ShotTypeStone:
case ShotTypeLightning:
nbSpecial++;
break;
case ShotTypeFire:
case ShotTypeIllusion:
case ShotTypePoison:
nbAdvanced++;
break;
case ShotTypeStandard:
break;
default:
std::cout << "[WARNING] Can not register shot type: " << getShotType() << std::endl;
}
}
if (advancedShot)
return (nbAdvanced >= SPECIAL_SHOT_SLOTS_ADVANCED);
else
return (nbSpecial >= SPECIAL_SHOT_SLOTS_STANDARD);
}
void PlayerEntity::interact(EnumInteractionType interaction, int id)
{
if (playerStatus == playerStatusPlaying)
{
// praying at the temple
if (interaction == InteractionTypeTemple)
{
if (divinity.divinity == id)
{
// donation
if (gold >= 10)
{
donate(10);
}
}
else
{
worship((enumDivinityType)id);
}
}
else if (interaction == InteractionTypeMerchandise)
{
if (itemToBuy != NULL) itemToBuy->buy();
}
}
}
float PlayerEntity::getBolPositionY()
{
if (isFairyTransmuted)
return y - 25;
else
return y - 20;
}
bool PlayerEntity::collideWithMap(int direction)
{
if (playerStatus == playerStatusEntering)
return false;
else
return BaseCreatureEntity::collideWithMap(direction);
}
// DIVINITY
void PlayerEntity::donate(int n)
{
if (gold >= n)
{
gold -= n;
donation += n;
if (donation >= 100) game().registerAchievement(AchievementFanatic);
displayAcquiredGold(-n);
SoundManager::getInstance().playSound(SOUND_PAY);
// standard : 1 gold = 3 piety
int pietyProGold = 3;
if (divinity.divinity == DivinityHealer)
pietyProGold = 5;
addPiety(pietyProGold * n);
// check item invoke
bool divineGift = false;
enumItemType itemType = ItemCopperCoin;
if (divinity.level >= 4 && game().getItemsCount() == 0 && donation >= 40)
{
if (divinity.divinity == DivinityIce && equip[EQUIP_GEM_ICE] && !equip[EQUIP_RING_ICE])
{
divineGift = true;
itemType = ItemRingIce;
}
else if (divinity.divinity == DivinityStone && equip[EQUIP_GEM_STONE] && !equip[EQUIP_RING_STONE])
{
divineGift = true;
itemType = ItemRingStone;
}
else if (divinity.divinity == DivinityAir && equip[EQUIP_GEM_LIGHTNING] && !equip[EQUIP_RING_LIGHTNING])
{
divineGift = true;
itemType = ItemRingLightning;
}
else if (divinity.divinity == DivinityIllusion && equip[EQUIP_GEM_ILLUSION] && !equip[EQUIP_RING_ILLUSION])
{
divineGift = true;
itemType = ItemRingIllusion;
}
+ else if (divinity.divinity == DivinityFire && equip[EQUIP_GEM_FIRE] && !equip[EQUIP_RING_FIRE])
+ {
+ divineGift = true;
+ itemType = ItemRingFire;
+ }
+ else if (divinity.divinity == DivinityDeath && equip[EQUIP_GEM_POISON] && !equip[EQUIP_RING_POISON])
+ {
+ divineGift = true;
+ itemType = ItemRingPoison;
+ }
}
if (divinity.level >= 3 && game().getItemsCount() == 0)
{
if (divinity.divinity == DivinityHealer && !equip[EQUIP_MANUAL_HEALTH])
{
// Healer + level 3 = Health manual
divineGift = true;
itemType = ItemManualHealth;
}
else if (divinity.divinity == DivinityIce && !equip[EQUIP_GEM_ICE])
{
divineGift = true;
itemType = ItemGemIce;
}
else if (divinity.divinity == DivinityStone && !equip[EQUIP_GEM_STONE])
{
divineGift = true;
itemType = ItemGemStone;
}
else if (divinity.divinity == DivinityAir && !equip[EQUIP_GEM_LIGHTNING])
{
divineGift = true;
itemType = ItemGemLightning;
}
else if (divinity.divinity == DivinityIllusion && !equip[EQUIP_GEM_ILLUSION])
{
divineGift = true;
itemType = ItemGemIllusion;
}
+ else if (divinity.divinity == DivinityFire && !equip[EQUIP_GEM_FIRE])
+ {
+ divineGift = true;
+ itemType = ItemGemFire;
+ }
+ else if (divinity.divinity == DivinityDeath && !equip[EQUIP_GEM_POISON])
+ {
+ divineGift = true;
+ itemType = ItemGemPoison;
+ }
}
if (divineGift)
{
float xItem = GAME_WIDTH / 2;
float yItem = GAME_HEIGHT * 0.8f;
new ItemEntity(itemType, xItem, yItem);
SoundManager::getInstance().playSound(SOUND_OM);
divineInterventionDelay = WORSHIP_DELAY / 2;
showCone = true;
isRegeneration = false;
for (int i = 0; i < 8; i++)
{
game().generateStar(sf::Color::White, xItem, yItem);
game().generateStar(sf::Color(255, 255, 210), xItem, yItem);
}
game().testAndAddMessageToQueue((EnumMessages)(MsgInfoDivGift));
}
}
}
void PlayerEntity::offerMonster(enemyTypeEnum monster, enumShotType hurtingType)
{
if (divinity.divinity > -1)
{
// standard : 1 monster = 2 piety - 1 boss = 20 piety
int pietyProMonster = 2;
int pietyProBoss = 20;
switch (divinity.divinity)
{
case DivinityHealer:
if (monster == EnemyTypeGhost
|| monster == EnemyTypeZombie
|| monster == EnemyTypeZombieDark
|| monster == EnemyTypeImpBlue
|| monster == EnemyTypeImpRed
|| monster == EnemyTypeWitch
|| monster == EnemyTypeWitchRed
|| monster == EnemyTypeBogeyman)
pietyProMonster = 4;
else
pietyProMonster = 0;
break;
case DivinityFighter:
pietyProMonster = 3;
pietyProBoss = 30;
break;
case DivinityIce:
if (monster == EnemyTypeSlimeRed
|| monster == EnemyTypeImpRed
|| monster == EnemyTypeEvilFlowerFire)
pietyProMonster = 4;
if (hurtingType == ShotTypeCold || hurtingType == ShotTypeIce)
{
pietyProMonster *= 1.5f;
pietyProBoss = 25;
}
break;
case DivinityStone:
if (hurtingType == ShotTypeStone)
{
pietyProMonster = 3;
pietyProBoss = 30;
}
else
{
pietyProBoss = 25;
}
break;
case DivinityIllusion:
if (hurtingType == ShotTypeIllusion)
{
pietyProMonster = 3;
pietyProBoss = 30;
}
else
{
pietyProBoss = 25;
}
break;
}
if (monster < EnemyTypeButcher) // normal or mini-boss
{
addPiety(pietyProMonster);
}
else if (monster < EnemyTypeBat_invocated) // boss
{
addPiety(pietyProBoss);
}
}
}
void PlayerEntity::offerHealth(int lostHp)
{
if (divinity.divinity == DivinityHealer)
{
addPiety(lostHp * 2.5f);
}
}
void PlayerEntity::offerChallenge()
{
if (divinity.divinity >= 0)
addPiety(30);
}
void PlayerEntity::offerSecret()
{
if (divinity.divinity == DivinityIllusion)
addPiety(35);
else
addPiety(10);
}
void PlayerEntity::divineFury()
{
enumShotType shotType = ShotTypeStandard;
if (divinity.divinity == DivinityIce) shotType = ShotTypeIce;
else if (divinity.divinity == DivinityStone) shotType = ShotTypeStone;
else if (divinity.divinity == DivinityAir) shotType = ShotTypeLightning;
else if (divinity.divinity == DivinityIllusion) shotType = ShotTypeIllusion;
+ else if (divinity.divinity == DivinityFire) shotType = ShotTypeFire;
+ else if (divinity.divinity == DivinityDeath) shotType = ShotTypePoison;
int multBonus = 6;
- if (divinity.divinity == DivinityFighter) multBonus = 8;
+ if (divinity.divinity == DivinityFighter || divinity.divinity == DivinityFire) multBonus = 8;
for (int i = 0; i < (divinity.divinity == DivinityAir ? 16 : 32); i ++)
{
BoltEntity* bolt = new BoltEntity(TILE_WIDTH * 1.5f + rand() % (MAP_WIDTH - 3) * TILE_WIDTH ,
TILE_HEIGHT * 1.5f + rand() % (MAP_HEIGHT - 3) * TILE_HEIGHT,
boltLifeTime, shotType, 0);
bolt->setDamages(8 + divinity.level * multBonus);
float velx = 400 * cos(i);
float vely = 400 * sin(i);
bolt->setVelocity(Vector2D(velx, vely));
if (divinity.divinity == DivinityAir)
{
bolt->setFlying(true);
bolt->setLifetime(10.0f);
}
else
{
bolt->setLifetime(8.0f);
}
bolt->setViscosity(1.0f);
bolt->setGoThrough(true);
bolt->setFromPlayer(false);
}
}
void PlayerEntity::divineDestroyUndead()
{
game().destroyUndead(40);
}
void PlayerEntity::divineIce()
{
EntityManager::EntityList* entityList = EntityManager::getInstance().getList();
EntityManager::EntityList::iterator it;
for (it = entityList->begin (); it != entityList->end ();)
{
GameEntity *e = *it;
it++;
if (e->getType() >= ENTITY_ENEMY && e->getType() <= ENTITY_ENEMY_MAX)
{
EnemyEntity* enemy = dynamic_cast<EnemyEntity*>(e);
enemy->setSpecialState(SpecialStateIce, true, 10.0f, 0.1f, 0.0f);
}
}
}
void PlayerEntity::divineRepulse()
{
EntityManager::EntityList* entityList = EntityManager::getInstance().getList();
EntityManager::EntityList::iterator it;
for (it = entityList->begin (); it != entityList->end ();)
{
GameEntity *e = *it;
it++;
if (e->getType() >= ENTITY_ENEMY && e->getType() <= ENTITY_ENEMY_MAX)
{
EnemyEntity* enemy = dynamic_cast<EnemyEntity*>(e);
enemy->hurt(getHurtParams
(8,
ShotTypeStandard,
0,
false,
SourceTypeBolt,
EnemyTypeNone,
false));
enemy->giveRepulsion(true, Vector2D(x, y).vectorTo(Vector2D(enemy->getX(), enemy->getY()), 700.0f), 2.0f);
}
}
// effect
for (int i = 0; i < 40; i++)
{
SpriteEntity* spriteRock = new SpriteEntity(
ImageManager::getInstance().getImage(IMAGE_CYCLOP),
x, y, 64, 64);
spriteRock->setZ(1000.0f);
spriteRock->setImagesProLine(20);
spriteRock->setFrame(rand() % 2 == 0 ? 38 : 58);
spriteRock->setSpin(-100 + rand()%200);
spriteRock->setVelocity(Vector2D(400 + rand()%400));
spriteRock->setFading(true);
spriteRock->setAge(-0.8f);
spriteRock->setLifetime(2.0f);
spriteRock->setType(ENTITY_EFFECT);
}
game().makeShake(1.0f);
SoundManager::getInstance().playSound(SOUND_EARTHQUAKE);
}
void PlayerEntity::divineProtection(float duration, float armorBonus)
{
setSpecialState(DivineStateProtection, true, duration, armorBonus, 0.0f);
}
void PlayerEntity::divineHeal(int hpHealed)
{
int oldHp = hp;
hp += hpHealed;
if (hp > hpMax) hp = hpMax;
specialState[SpecialStatePoison].active = false;
divineInterventionDelay = WORSHIP_DELAY;
showCone = true;
isRegeneration = false;
game().addHealingStat(hp - oldHp);
}
bool PlayerEntity::triggerIllusionTeleport()
{
if (divinity.divinity == DivinityIllusion)
{
// TODO timer
if (game().getGameTime() - lastTeleportSave > 15) return true;
}
return false;
}
bool PlayerEntity::triggerDivinityBefore()
{
if (divinity.divinity > -1 && divinity.interventions < divinity.level - 1)
{
switch (divinity.divinity)
{
case DivinityHealer:
{
if (game().getUndeadCount() > 0 && rand() % 2 == 0)
{
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 2);
divineDestroyUndead();
game().makeColorEffect(X_GAME_COLOR_WHITE, 0.45f);
return true;
}
break;
}
case DivinityFighter:
{
int r = rand() % 3;
if (r == 0) return false;
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 3);
if (r == 1) divineProtection(8.0f, 0.8f);
else divineFury();
game().makeColorEffect(X_GAME_COLOR_RED, 0.45f);
return true;
break;
}
case DivinityIce:
{
int r = rand() % 3;
if (r == 0) return false;
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 3);
if (r == 1)
{
divineIce();
game().makeColorEffect(X_GAME_COLOR_BLUE, 7.5f);
}
else
{
divineFury();
game().makeColorEffect(X_GAME_COLOR_BLUE, 0.5f);
}
return true;
break;
}
case DivinityStone:
{
int r = rand() % 2;
divineProtection(10.0f, 0.75f);
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 3);
if (r == 0)
{
divineRepulse();
game().makeColorEffect(X_GAME_COLOR_BROWN, 3.0f);
}
else
{
divineFury();
game().makeColorEffect(X_GAME_COLOR_BROWN, 0.5f);
}
return true;
break;
}
case DivinityAir:
{
int r = rand() % 3;
if (r == 0) return false;
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 3);
{
divineFury();
game().makeColorEffect(X_GAME_COLOR_VIOLET, 0.5f);
}
return true;
break;
}
case DivinityIllusion:
{
int r = rand() % 3;
if (r == 0) return false;
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 3);
{
divineFury();
game().makeColorEffect(X_GAME_COLOR_VIOLET, 0.5f);
}
return true;
break;
}
+ case DivinityFire:
+ {
+ int r = rand() % 3;
+ if (r == 0) return false;
+
+ SoundManager::getInstance().playSound(SOUND_OM);
+ incrementDivInterventions();
+ divineHeal(hpMax / 3);
+ {
+ divineFury();
+ game().makeColorEffect(X_GAME_COLOR_RED, 0.5f);
+ }
+ return true;
+ break;
+ }
+ case DivinityDeath:
+ {
+ int r = rand() % 3;
+ if (r == 0) return false;
+
+ SoundManager::getInstance().playSound(SOUND_OM);
+ incrementDivInterventions();
+ divineHeal(hpMax / 3);
+ {
+ divineFury();
+ game().makeColorEffect(X_GAME_COLOR_GREEN, 0.5f);
+ }
+ return true;
+ break;
+ }
}
}
return false;
}
void PlayerEntity::triggerDivinityAfter()
{
if (divinity.divinity > -1 && divinity.interventions < divinity.level - 1)
{
switch (divinity.divinity)
{
case DivinityHealer:
{
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax);
break;
}
default:
{
SoundManager::getInstance().playSound(SOUND_OM);
incrementDivInterventions();
divineHeal(hpMax / 2);
break;
}
}
game().testAndAddMessageToQueue((EnumMessages)(MsgInfoDivIntervention));
}
}
void PlayerEntity::addPiety(int n)
{
if (n > 0 && equip[EQUIP_BOOK_PRAYER_I]) n *= 1.5f;
int oldLevel = divinity.level;
divinity.piety += n;
if (divinity.piety >= DIVINITY_LEVEL_TRESHOLD[MAX_DIVINITY_LEVEL - 1])
{
divinity.piety = DIVINITY_LEVEL_TRESHOLD[MAX_DIVINITY_LEVEL - 1];
divinity.percentsToNextLevels = 1.0f;
game().registerAchievement(AchievementPietyMax);
divinity.level = MAX_DIVINITY_LEVEL + 1;
}
else
{
int i = 0;
while (divinity.piety > DIVINITY_LEVEL_TRESHOLD[i] && i < (MAX_DIVINITY_LEVEL + 1)) i++;
divinity.level = i + 1;
if (divinity.level == 1)
divinity.percentsToNextLevels = (float)divinity.piety / (float)DIVINITY_LEVEL_TRESHOLD[0];
else
divinity.percentsToNextLevels
= (float)(divinity.piety - DIVINITY_LEVEL_TRESHOLD[divinity.level - 2])
/ (float)(DIVINITY_LEVEL_TRESHOLD[divinity.level - 1] - DIVINITY_LEVEL_TRESHOLD[divinity.level - 2]);
}
if (divinity.level > oldLevel)
{
SoundManager::getInstance().playSound(SOUND_OM);
divineInterventionDelay = WORSHIP_DELAY * 1.5f;
showCone = false;
isRegeneration = false;
pietyLevelUp();
computePlayer();
}
else if (divinity.level < oldLevel)
{
computePlayer();
}
}
void PlayerEntity::pietyLevelUp()
{
std::string label = "";
switch (divinity.divinity)
{
case DivinityFighter:
label = "div_fighter_lvl";
break;
case DivinityHealer:
if (divinity.level == 2) label = "div_healer_lvl_2";
else label = "div_healer_lvl_3";
break;
case DivinityIce:
if (divinity.level == 3) label = "div_ice_lvl_3";
else if (divinity.level == 4) label = "div_ice_lvl_4";
else if (divinity.level == 5) label = "div_ice_lvl_5";
break;
case DivinityStone:
if (divinity.level == 3) label = "div_stone_lvl_3";
else if (divinity.level == 4) label = "div_stone_lvl_4";
else if (divinity.level == 5) label = "div_stone_lvl_5";
break;
case DivinityAir:
if (divinity.level == 4) label = "div_air_lvl_4";
else label = "div_air_lvl";
break;
case DivinityIllusion:
if (divinity.level == 3) label = "div_illusion_lvl_3";
else if (divinity.level == 4) label = "div_illusion_lvl_4";
break;
}
if (label.compare("") != 0) game().addDivLevelMessageToQueue(label);
}
void PlayerEntity::incrementDivInterventions()
{
divinity.interventions++;
addPiety(-divinity.piety * (equip[EQUIP_BOOK_PRAYER_II] ? 0.04f : 0.08f));
}
void PlayerEntity::worship(enumDivinityType id)
{
int oldPiety = divinity.piety;
int oldLevel = divinity.level;
bool isReconversion = divinity.divinity > -1;
playerStatus = playerStatusPraying;
statusTimer = WORSHIP_DELAY;
SoundManager::getInstance().playSound(SOUND_OM);
divinity.divinity = id;
divinity.piety = 0;
divinity.level = 1;
divinity.percentsToNextLevels = 0.0f;
facingDirection = 2;
// text
float x0 = MAP_WIDTH * 0.5f * TILE_WIDTH;
float y0 = MAP_HEIGHT * 0.5f * TILE_HEIGHT + 140.0f;
std::stringstream ss;
ss << tools::getLabel("worshipping") << " ";
ss << tools::getLabel(divinityLabel[divinity.divinity] + "_0");
TextEntity* text = new TextEntity(ss.str(), 24, x0, y0);
text->setAlignment(ALIGN_CENTER);
text->setLifetime(2.5f);
text->setWeight(-36.0f);
text->setZ(1200);
text->setColor(TextEntity::COLOR_FADING_WHITE);
// reconversion
if (isReconversion)
{
if (oldLevel >= 4)
game().registerAchievement(AchievementApostate);
addPiety((equip[EQUIP_BOOK_PRAYER_I]) ? 0.66 * oldPiety : 0.5 * oldPiety);
if (divinity.interventions > divinity.level - 1)
divinity.interventions = divinity.level - 1;
}
else
divinity.interventions = 0;
// message
game().testAndAddMessageToQueue((EnumMessages)(MsgInfoDivHealer + (int)id));
}
void PlayerEntity::loadDivinity(int id, int piety, int level, int interventions)
{
divinity.divinity = id;
divinity.piety = piety;
divinity.level = level;
divinity.interventions = interventions;
if (id >= 0) addPiety(0);
}
// MAGIC
castSpellStruct PlayerEntity::getActiveSpell()
{
return activeSpell;
}
void PlayerEntity::setActiveSpell(enumCastSpell spell, bool fromSaveInFight)
{
if (activeSpell.spell != SpellNone)
{
// drop the old spell
equip[activeSpell.frame] = false;
ItemEntity* newItem = new ItemEntity((enumItemType)(ItemMagicianHat + activeSpell.frame), x, y);
newItem->setVelocity(Vector2D(100.0f + rand()% 250));
newItem->setViscosity(0.96f);
}
activeSpell.spell = spell;
switch (spell)
{
case SpellTeleport:
activeSpell.delayMax = 20.0f;
activeSpell.frame = ItemSpellTeleport - FirstEquipItem;
break;
case SpellSlimeExplode:
activeSpell.delayMax = 40.0f;
activeSpell.frame = ItemSpellSlimeExplode - FirstEquipItem;
break;
case SpellFireball:
activeSpell.delayMax = 20.0f;
activeSpell.frame = ItemSpellFireball - FirstEquipItem;
break;
case SpellFreeze:
activeSpell.delayMax = 40.0f;
activeSpell.frame = ItemSpellFreeze - FirstEquipItem;
break;
case SpellEarthquake:
activeSpell.delayMax = 40.0f;
activeSpell.frame = ItemSpellEarthquake - FirstEquipItem;
break;
case SpellProtection:
activeSpell.delayMax = 40.0f;
activeSpell.frame = ItemSpellProtection - FirstEquipItem;
break;
case SpellWeb:
activeSpell.delayMax = 35.0f;
activeSpell.frame = ItemSpellWeb - FirstEquipItem;
break;
case SpellFlower:
activeSpell.delayMax = 80.0f;
activeSpell.frame = ItemSpellFlower - FirstEquipItem;
break;
case SpellFairy:
activeSpell.delayMax = 10.0f;
activeSpell.frame = ItemSpellFairy - FirstEquipItem;
break;
case SpellTime:
activeSpell.delayMax = 70.0f;
activeSpell.frame = ItemSpellTime - FirstEquipItem;
break;
case SpellLightning:
activeSpell.delayMax = 70.0f;
activeSpell.frame = ItemSpellLightning - FirstEquipItem;
break;
case SpellNone:
break;
}
if (fromSaveInFight) activeSpell.delay = 1.0f;
else activeSpell.delay = activeSpell.delayMax;
}
void PlayerEntity::castSpell()
{
if (playerStatus != playerStatusPlaying) return;
if (canCastSpell())
{
activeSpell.delay = equip[EQUIP_BOOK_MAGIC_I] ? activeSpell.delayMax * 0.8f : activeSpell.delayMax;
switch (activeSpell.spell)
{
case SpellTeleport:
castTeleport();
break;
case SpellSlimeExplode:
castSummonsSlimeExplode();
break;
case SpellFireball:
castFireball();
break;
case SpellFreeze:
spellAnimationDelay = spellAnimationDelayMax;
castFreeze();
break;
case SpellEarthquake:
spellAnimationDelay = spellAnimationDelayMax;
castEarthquake();
break;
case SpellProtection:
spellAnimationDelay = spellAnimationDelayMax;
castProtection();
break;
case SpellWeb:
castWeb();
break;
case SpellFlower:
spellAnimationDelay = spellAnimationDelayMax;
castSummonsFlower();
break;
case SpellFairy:
castTransmuteFairy();
break;
case SpellTime:
spellAnimationDelay = spellAnimationDelayMax;
castTimeStop();
break;
case SpellLightning:
spellAnimationDelay = spellAnimationDelayMax;
castLightning();
break;
case SpellNone:
break;
}
}
}
bool PlayerEntity::canCastSpell()
{
return activeSpell.spell != SpellNone && activeSpell.delay <= 0.0f;
}
void PlayerEntity::castTeleport()
{
bool ok = false;
int xm, ym;
float xNew = x, yNew = y;
invincibleDelay = equip[EQUIP_BOOK_MAGIC_II] ? 2.5f : 2.0f;
SoundManager::getInstance().playSound(SOUND_TELEPORT);
game().makeColorEffect(X_GAME_COLOR_VIOLET, 0.3f);
for(int i=0; i < 6; i++)
{
generateStar(sf::Color(50, 50, 255, 255));
generateStar(sf::Color(200, 200, 255, 255));
}
int counter = 150;
while (!ok && counter > 0)
{
counter--;
int distanceMin = 20000;
if (counter < 50) distanceMin = 30000;
else if (counter < 100) distanceMin = 25000;
xm = 1 +rand() % (MAP_WIDTH - 3);
ym = 1 +rand() % (MAP_HEIGHT - 3);
if (game().getCurrentMap()->isWalkable(xm, ym))
{
// enemy or bolt ?
EntityManager::EntityList* entityList =EntityManager::getInstance().getList();
EntityManager::EntityList::iterator it;
bool isBad = false;
xNew = xm * TILE_WIDTH + TILE_WIDTH * 0.5f;
yNew = ym * TILE_HEIGHT+ TILE_HEIGHT * 0.5f;
for (it = entityList->begin (); !isBad && it != entityList->end ();)
{
GameEntity *e = *it;
it++;
if ((e->getType() >= ENTITY_ENEMY && e->getType() <= ENTITY_ENEMY_MAX_COUNT) || e->getType() == ENTITY_ENEMY_BOLT)
isBad = Vector2D(xNew, yNew).distance2(Vector2D(e->getX(), e->getY())) < distanceMin;
}
if (!isBad)
{
x = xNew;
y = yNew;
}
}
}
for(int i=0; i < 6; i++)
{
generateStar(sf::Color(50, 50, 255, 255));
generateStar(sf::Color(200, 200, 255, 255));
}
}
void PlayerEntity::initFallingGrid()
{
for (int i = 0; i < MAP_WIDTH; i++)
for (int j = 0; j < MAP_HEIGHT; j++)
fallingGrid[i][j] = false;
}
void PlayerEntity::fallRock()
{
int rx, ry;
do
{
rx = 1 + rand() % (MAP_WIDTH - 2);
ry = 1 + rand() % (MAP_HEIGHT - 2);
}
while (fallingGrid[rx][ry]);
fallingGrid[rx][ry] = true;
new FallingRockEntity(rx * TILE_WIDTH + TILE_WIDTH / 2,
ry * TILE_HEIGHT + TILE_HEIGHT / 2,
rand() % 3,
true);
}
void PlayerEntity::castSummonsSlimeExplode()
{
SlimeEntity* slime = new SlimeEntity( ((int)(x) / TILE_WIDTH) * TILE_WIDTH + TILE_WIDTH * 0.5f,
y - 5, SlimeTypeViolet, true);
slime->makePet(facingDirection);
game().makeColorEffect(X_GAME_COLOR_VIOLET, 0.3f);
}
void PlayerEntity::castFireball()
{
SoundManager::getInstance().playSound(SOUND_FIREBALL);
game().makeColorEffect(X_GAME_COLOR_RED, 0.3f);
enumShotType boltType = ShotTypeFire;
unsigned int shotLevel = 2;
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime + 0.5f, boltType, shotLevel);
int boltDamage = fireDamages * (equip[EQUIP_BOOK_MAGIC_II] ? 6 : 4);
if (equip[EQUIP_BOOK_MAGIC_II] && boltDamage < 44) boltDamage = 44;
else if (!equip[EQUIP_BOOK_MAGIC_II] && boltDamage < 32) boltDamage = 32;
bolt->setDamages(boltDamage);
bolt->setGoThrough(true);
float velx = 0.0f, vely = 0.0f;
if (facingDirection == 4) velx = -fireVelocity;
else if (facingDirection == 8) vely = -fireVelocity;
else if (facingDirection == 2) vely = fireVelocity;
else velx = fireVelocity;
bolt->setVelocity(Vector2D(velx, vely));
}
void PlayerEntity::castFreeze()
{
int iceLevel = equip[EQUIP_BOOK_MAGIC_II] ? 2 : 1;
for (float i = 0.0f; i < 2 * PI; i += PI / 8)
{
BoltEntity* bolt1 = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeIce, iceLevel);
bolt1->setDamages(1);
float velx = fireVelocity * cos(i);
float vely = fireVelocity * sin(i);
bolt1->setVelocity(Vector2D(velx, vely));
}
game().makeColorEffect(X_GAME_COLOR_BLUE, 0.3f);
SoundManager::getInstance().playSound(SOUND_SPELL_FREEZE);
}
void PlayerEntity::castEarthquake()
{
initFallingGrid();
int nbIterations = equip[EQUIP_BOOK_MAGIC_II] ? 24 : 22;
for (int i = 0; i < nbIterations; i++) fallRock();
game().makeShake(0.25f);
game().makeColorEffect(X_GAME_COLOR_BROWN, 0.3f);
SoundManager::getInstance().playSound(SOUND_EARTHQUAKE);
}
void PlayerEntity::castProtection()
{
protection.active = true;
protection.value = equip[EQUIP_BOOK_MAGIC_II] ? 0.6f : 0.4f;
protection.timer = 10.0f;
computePlayer();
game().makeColorEffect(X_GAME_COLOR_BLUE, 0.3f);
SoundManager::getInstance().playSound(SOUND_SPELL_SHIELD);
}
void PlayerEntity::castWeb()
{
SoundManager::getInstance().playSound(SOUND_SPIDER_WEB);
int nbWeb = equip[EQUIP_BOOK_MAGIC_II] ? 4 : 3;
for (int i = 0; i < nbWeb; i++)
{
SpiderWebEntity* web = new SpiderWebEntity(x, y, true);
float webVel = 100 + rand()% 500;
float webAngle = -60 + rand() % 120;
webAngle = PI * webAngle / 180.0f;
if (facingDirection == 4) webAngle += PI;
else if (facingDirection == 8) webAngle -= PI * 0.5;
else if (facingDirection == 2) webAngle += PI * 0.5;
web->setVelocity(Vector2D(webVel * cos(webAngle), webVel * sin(webAngle)));
}
}
void PlayerEntity::castSummonsFlower()
{
SoundManager::getInstance().playSound(SOUND_INVOKE);
EvilFlowerEntity* flower = new EvilFlowerEntity(x, y, FlowerTypePet);
flower->setLifetime(equip[EQUIP_BOOK_MAGIC_II] ? 45 : 35);
if (equip[EQUIP_BOOK_MAGIC_II]) flower->setFireDelayMax(EVIL_FLOWER_FIRE_DELAY * 0.8f);
}
void PlayerEntity::castTransmuteFairy()
{
if (isFairyTransmuted)
{
movingStyle = movWalking;
if (isCollidingWithMap())
movingStyle = movFlying;
else
{
SoundManager::getInstance().playSound(SOUND_INVOKE);
isFairyTransmuted = false;
computePlayer();
for(int i=0; i < 6; i++)
{
generateStar(sf::Color(50, 50, 255, 255));
generateStar(sf::Color(200, 200, 255, 255));
}
}
}
else
{
SoundManager::getInstance().playSound(SOUND_INVOKE);
isFairyTransmuted = true;
computePlayer();
for(int i=0; i < 6; i++)
{
generateStar(sf::Color(50, 50, 255, 255));
generateStar(sf::Color(200, 200, 255, 255));
}
}
}
void PlayerEntity::castTimeStop()
{
specialState[SpecialStateTime].active = true;
specialState[SpecialStateTime].timer = equip[EQUIP_BOOK_MAGIC_II] ? 7 : 5;
game().pauseMusic();
}
void PlayerEntity::castLightning()
{
game().makeColorEffect(X_GAME_COLOR_WHITE, 0.4f);
int nbBolts = equip[EQUIP_BOOK_MAGIC_II] ? 9 : 7;
for (int i = 0; i < nbBolts ; i++)
{
BoltEntity* bolt = new BoltEntity(x, getBolPositionY(), boltLifeTime, ShotTypeLightning, 0);
int boltDamage = game().getLevel() + 2;
if (i == 0) boltDamage += 10;
bolt->setDamages(boltDamage);
float shotAngle = rand() % 360;
bolt->setVelocity(Vector2D(400 * cos(shotAngle), 400 * sin(shotAngle)));
bolt->setViscosity(1.0f);
bolt->setLifetime(5 + 0.1f * (float)(rand() % 50));
}
SpriteEntity* lightningSprite = new SpriteEntity(ImageManager::getInstance().getImage(IMAGE_LIGHTNING), x, y - 300);
lightningSprite->setFading(true);
lightningSprite->setLifetime(0.2f);
lightningSprite->setAge(-0.4f);
lightningSprite->setRenderAdd();
lightningSprite->setZ(2000);
SoundManager::getInstance().playSound(SOUND_THUNDER);
}
bool PlayerEntity::seeInvisible()
{
return (divinity.divinity == DivinityIllusion && divinity.level >= 3);
}

File Metadata

Mime Type
text/x-diff
Expires
Fri, Sep 12, 5:33 AM (1 d, 1 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
42814
Default Alt Text
(254 KB)

Event Timeline