mirror of
https://github.com/JonasHinterdorfer/TextAdventure.git
synced 2025-10-26 03:41:10 +00:00
Added drone cooldown
This commit is contained in:
parent
fc8bb30ab2
commit
63cdc7aea8
29
adventure.pl
29
adventure.pl
@ -20,6 +20,7 @@
|
|||||||
:- dynamic(konami_sequence/1).
|
:- dynamic(konami_sequence/1).
|
||||||
:- dynamic(konami_position/1).
|
:- dynamic(konami_position/1).
|
||||||
:- dynamic(emp_used_in_combat/1).
|
:- dynamic(emp_used_in_combat/1).
|
||||||
|
:- dynamic(drone_cooldown/2).
|
||||||
|
|
||||||
% ========== INITIALIZATION ==========
|
% ========== INITIALIZATION ==========
|
||||||
init_game :-
|
init_game :-
|
||||||
@ -35,6 +36,7 @@ init_game :-
|
|||||||
retractall(hack_attempted(_)),
|
retractall(hack_attempted(_)),
|
||||||
retractall(crow_weakened(_)),
|
retractall(crow_weakened(_)),
|
||||||
retractall(emp_used_in_combat(_)),
|
retractall(emp_used_in_combat(_)),
|
||||||
|
retractall(drone_cooldown(_, _)),
|
||||||
|
|
||||||
% Initialize random number generator
|
% Initialize random number generator
|
||||||
randomize,
|
randomize,
|
||||||
@ -47,6 +49,7 @@ init_game :-
|
|||||||
assertz(game_state(crow_weakened, false)),
|
assertz(game_state(crow_weakened, false)),
|
||||||
assertz(game_state(components_explained, false)),
|
assertz(game_state(components_explained, false)),
|
||||||
assertz(game_state(konami_unlocked, false)),
|
assertz(game_state(konami_unlocked, false)),
|
||||||
|
assertz(drone_cooldown(none, 0)),
|
||||||
|
|
||||||
% Initialize obstacles
|
% Initialize obstacles
|
||||||
init_obstacles.
|
init_obstacles.
|
||||||
@ -516,6 +519,7 @@ execute_item_use(_) :-
|
|||||||
start_combat(EnemyName) :-
|
start_combat(EnemyName) :-
|
||||||
player_location(Loc),
|
player_location(Loc),
|
||||||
enemy_location(EnemyName, Loc),
|
enemy_location(EnemyName, Loc),
|
||||||
|
assertz(drone_cooldown(EnemyName, 0)),
|
||||||
write('Du beginnst den Kampf gegen '), enemy(EnemyName, DisplayName, _, _),
|
write('Du beginnst den Kampf gegen '), enemy(EnemyName, DisplayName, _, _),
|
||||||
write(DisplayName), write('!'), nl,
|
write(DisplayName), write('!'), nl,
|
||||||
assertz(in_combat(EnemyName)),
|
assertz(in_combat(EnemyName)),
|
||||||
@ -569,17 +573,27 @@ execute_combat_item_use(emp_granate, Enemy) :-
|
|||||||
(assertz(enemy(Enemy, DisplayName, NewHealth, Desc)),
|
(assertz(enemy(Enemy, DisplayName, NewHealth, Desc)),
|
||||||
enemy_turn(Enemy))))).
|
enemy_turn(Enemy))))).
|
||||||
|
|
||||||
|
execute_combat_item_use(kampfdrohne, Enemy) :-
|
||||||
|
drone_cooldown(Enemy, Cooldown),
|
||||||
|
Cooldown > 0,
|
||||||
|
write('Deine Kampfdrohne lädt noch auf! Cooldown: '), write(Cooldown), write(' Runden.'), nl,
|
||||||
|
!.
|
||||||
|
|
||||||
execute_combat_item_use(kampfdrohne, Enemy) :-
|
execute_combat_item_use(kampfdrohne, Enemy) :-
|
||||||
enemy(Enemy, DisplayName, Health, Desc),
|
enemy(Enemy, DisplayName, Health, Desc),
|
||||||
Damage = 25,
|
Damage = 25,
|
||||||
NewHealth is Health - Damage,
|
NewHealth is Health - Damage,
|
||||||
write('Deine Kampfdrohne greift an und verursacht '), write(Damage), write(' Schaden!'), nl,
|
write('Deine Kampfdrohne greift an und verursacht '), write(Damage), write(' Schaden!'), nl,
|
||||||
|
write('Die Drohne muss sich jetzt 2 Runden lang aufladen.'), nl,
|
||||||
|
% Set cooldown to 2 turns
|
||||||
|
retract(drone_cooldown(Enemy, _)),
|
||||||
|
assertz(drone_cooldown(Enemy, 2)),
|
||||||
retract(enemy(Enemy, DisplayName, Health, Desc)),
|
retract(enemy(Enemy, DisplayName, Health, Desc)),
|
||||||
(NewHealth =< 0 ->
|
(NewHealth =< 0 ->
|
||||||
(write(DisplayName), write(' wurde besiegt!'), nl,
|
(write(DisplayName), write(' wurde besiegt!'), nl,
|
||||||
defeat_enemy(Enemy)) ;
|
defeat_enemy(Enemy)) ;
|
||||||
assertz(enemy(Enemy, DisplayName, NewHealth, Desc)),
|
(assertz(enemy(Enemy, DisplayName, NewHealth, Desc)),
|
||||||
enemy_turn(Enemy)).
|
enemy_turn(Enemy))).
|
||||||
|
|
||||||
execute_combat_item_use(heilspray, _) :-
|
execute_combat_item_use(heilspray, _) :-
|
||||||
execute_item_use(heilspray).
|
execute_item_use(heilspray).
|
||||||
@ -593,6 +607,12 @@ execute_combat_item_use(Item, _) :-
|
|||||||
write(Item), write(' kann nicht im Kampf verwendet werden!'), nl.
|
write(Item), write(' kann nicht im Kampf verwendet werden!'), nl.
|
||||||
|
|
||||||
enemy_turn(Enemy) :-
|
enemy_turn(Enemy) :-
|
||||||
|
drone_cooldown(Enemy, Cooldown),
|
||||||
|
(Cooldown > 0 ->
|
||||||
|
(NewCooldown is Cooldown - 1,
|
||||||
|
retract(drone_cooldown(Enemy, Cooldown)),
|
||||||
|
assertz(drone_cooldown(Enemy, NewCooldown))) ;
|
||||||
|
true),
|
||||||
enemy(Enemy, DisplayName, _, _),
|
enemy(Enemy, DisplayName, _, _),
|
||||||
(Enemy = die_kraehe, game_state(crow_weakened, false) ->
|
(Enemy = die_kraehe, game_state(crow_weakened, false) ->
|
||||||
crow_mind_control ;
|
crow_mind_control ;
|
||||||
@ -615,6 +635,7 @@ defeat_enemy(EnemyName) :-
|
|||||||
retract(in_combat(EnemyName)),
|
retract(in_combat(EnemyName)),
|
||||||
handle_enemy_defeat(EnemyName),
|
handle_enemy_defeat(EnemyName),
|
||||||
retractall(emp_used_in_combat(EnemyName)),
|
retractall(emp_used_in_combat(EnemyName)),
|
||||||
|
retractall(drone_cooldown(EnemyName, _)),
|
||||||
nl.
|
nl.
|
||||||
|
|
||||||
handle_enemy_defeat(tauben_schwarm) :-
|
handle_enemy_defeat(tauben_schwarm) :-
|
||||||
@ -1076,10 +1097,10 @@ end_game(defeat) :-
|
|||||||
|
|
||||||
% ========== UTILITY PREDICATES ==========
|
% ========== UTILITY PREDICATES ==========
|
||||||
get_random_damage(Damage) :-
|
get_random_damage(Damage) :-
|
||||||
random(15, 26, Damage). % Random damage between 15-25
|
random(12, 20, Damage). % Random damage between 12-20
|
||||||
|
|
||||||
get_random_enemy_damage(Damage) :-
|
get_random_enemy_damage(Damage) :-
|
||||||
random(8, 16, Damage). % Random enemy damage between 8-15
|
random(10, 18, Damage). % Random enemy damage between 10-18
|
||||||
|
|
||||||
damage_player(Damage) :-
|
damage_player(Damage) :-
|
||||||
player_health(Health),
|
player_health(Health),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user