Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
game.set_render_crosshair(False)
game.set_render_weapon(True)
game.set_render_decals(False) # Bullet holes and blood on the walls
game.set_render_particles(False)
game.set_render_effects_sprites(False) # Smoke and blood
game.set_render_messages(False) # In-game messages
game.set_render_corpses(False)
game.set_render_screen_flashes(True) # Effect upon taking damage or picking up items
# Adds buttons that will be allowed.
game.add_available_button(vzd.Button.MOVE_LEFT)
game.add_available_button(vzd.Button.MOVE_RIGHT)
game.add_available_button(vzd.Button.ATTACK)
# Adds game variables that will be included in state.
game.add_available_game_variable(vzd.GameVariable.AMMO2)
# Causes episodes to finish after 200 tics (actions)
game.set_episode_timeout(200)
# Makes episodes start after 10 tics (~after raising the weapon)
game.set_episode_start_time(10)
# Makes the window appear (turned on by default)
game.set_window_visible(True)
# Turns on the sound. (turned off by default)
game.set_sound_enabled(True)
# Sets the livin reward (for each move) to -1
game.set_living_reward(-1)
# game.advance_action();
# continue;
# Analyze the state ... or not
s = game.get_state()
# print(s)
# Make your action.
game.make_action(choice(actions))
# Log time and frags/kills every ~10 seconds
if s and s.number % 350 == 0:
print("Time: {}, Kills: {}, Frags: {}",
game.get_episode_time(),
game.get_game_variable(vzd.GameVariable.KILLCOUNT),
game.get_game_variable(vzd.GameVariable.FRAGCOUNT))
print("Episode FINISHED !")
game.close()
info['ON_GROUND'] = state_variables[7]
info['ATTACK_READY'] = state_variables[8]
info['ALTATTACK_READY'] = state_variables[9]
info['SELECTED_WEAPON'] = state_variables[10]
info['SELECTED_WEAPON_AMMO'] = state_variables[11]
info['AMMO1'] = state_variables[12]
info['AMMO2'] = state_variables[13]
info['AMMO3'] = state_variables[14]
info['AMMO4'] = state_variables[15]
info['AMMO5'] = state_variables[16]
info['AMMO6'] = state_variables[17]
info['AMMO7'] = state_variables[18]
info['AMMO8'] = state_variables[19]
info['AMMO9'] = state_variables[20]
info['AMMO0'] = state_variables[21]
info['POSITION_X'] = doom_fixed_to_double(self.game.get_game_variable(GameVariable.USER1))
info['POSITION_Y'] = doom_fixed_to_double(self.game.get_game_variable(GameVariable.USER2))
return info
state = game.get_state()
time = game.get_episode_time()
game.advance_action()
last_action = game.get_last_action()
reward = game.get_last_reward()
print("State #" + str(state.number))
print("Game variables: ", state.game_variables)
print("Action:", last_action)
print("Reward:", reward)
print("=====================")
print("Episode finished!")
print("Total reward:", game.get_total_reward())
print("Kills:", game.get_game_variable(vzd.GameVariable.KILLCOUNT))
print("Items:", game.get_game_variable(vzd.GameVariable.ITEMCOUNT))
print("Secrets:", game.get_game_variable(vzd.GameVariable.SECRETCOUNT))
print("Time:", time / 35, "s")
print("************************")
sleep(2.0)
game.close()
# Remove output of generator
os.remove(wad_path)
os.remove(wad_path.replace("wad", "old"))
os.remove(wad_path.replace("wad", "txt"))
# Not needed for the first episode but the loop is nicer.
game.new_episode()
# Use this to remember last shaping reward value.
last_total_shaping_reward = 0
while not game.is_episode_finished():
# Gets the state and possibly to something with it
state = game.get_state()
# Makes a random action and save the reward.
reward = game.make_action(choice(actions))
# Retrieve the shaping reward
fixed_shaping_reward = game.get_game_variable(vzd.GameVariable.USER1) # Get value of scripted variable
shaping_reward = vzd.doom_fixed_to_double(
fixed_shaping_reward) # If value is in DoomFixed format project it to double
shaping_reward = shaping_reward - last_total_shaping_reward
last_total_shaping_reward += shaping_reward
print("State #" + str(state.number))
print("Health: ", state.game_variables[0])
print("Last Reward:", reward)
print("Last Shaping Reward:", shaping_reward)
print("=====================")
# Sleep some time because processing is too fast to watch.
if sleep_time > 0:
sleep(sleep_time)
print("Episode finished!")