Closed crabel closed 6 years ago
When this occurs can you please get the file server-log.txt from the game's working directory and send it to me? It will have a log saying what's going wrong.
On Sat, Oct 28, 2017 at 1:43 PM, Christoph Rabel notifications@github.com wrote:
When using Flesh Golems remake power, the game sometimes gets stuck. I still can click on things, but I cannot complete the "spell". Steps to reproduce: Flesh golem needs to be damaged. Click on Remake List of cards changes to "Remake" Click Remake Red arrows connect golem to remake card.
Whatever I try, I can never finish the spell. I need to restart the game
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/davewx7/citadel/issues/141, or mute the thread https://github.com/notifications/unsubscribe-auth/AA0pohBffA3QqC0ZWarZ2QWUW4C_Bybvks5sw5H2gaJpZM4QKFe4 .
I don't think there is a logfile on Linux. It seems, it just writes to stderr. I have changed the run.sh file now to redirect the output to a file.
LIBGL_DRI3_DISABLE=1 \ LD_LIBRARY_PATH=./bin/:$LD_LIBRARY_PATH \ ./bin/anura --module=citadel --utility=update_launcher --update-module=true --update-anura=true --anura=anura_linux --anura-exe=./anura.sh --args --module=citadel $@ >citadel.log 2>&1
I think that's the relevant part of the error message in the logfile:
`ERROR: asserts.cpp:141 : ASSERT FAIL: formula_vm.cpp:451 ASSERTION FAILED: Assertion failed: Could not find item in find_or_die message: ["@eval deserialize('60ea5fc756dd4d4daba6911225c6c1bf')"] at in Virtual Machine: At /home/odie/.citadel//dlc/citadel/data/classes/game_state.cfg 357: if(info.ability, find_or_die(creature.activated_abilities, value._uuid = in... ^
---VM: 0: OP_LOOKUP 72 2: OP_JMP_UNLESS 9 ( -> 12) 4: OP_POP 5: OP_LOOKUP 72 7: OP_CONSTANT 0 ( "ability" ) 9: OP_INDEX 10: OP_JMP 82 ( -> 93) 12: OP_POP 13: OP_LOOKUP 152 15: OP_PUSH_SCOPE 16: OP_LOOKUP 13 18: OP_POP_SCOPE 19: OP_JMP_UNLESS 52 ( -> 72) 21: OP_POP 22: OP_LOOKUP 153 24: OP_PUSH_NULL 25: OP_NEQ 26: OP_JMP_IF 5 ( -> 32) 28: OP_CONSTANT 1 ( "creature != null" ) 30: OP_PUSH_NULL 31: OP_ASSERT 32: OP_POP 33: OP_LOOKUP 153 35: OP_PUSH_SCOPE 36: OP_LOOKUP 16 38: OP_POP_SCOPE 39: OP_PUSH_INT 158 41: OP_ALGO_FIND 14 43: OP_LOOKUP 154 45: OP_PUSH_SCOPE 46: OP_LOOKUP 8 48: OP_POP_SCOPE 49: OP_LOOKUP 152 51: OP_PUSH_SCOPE 52: OP_LOOKUP 15 54: OP_POP_SCOPE 55: OP_EQ 56: OP_PUSH_INT -1 58: OP_EQ 59: OP_POP_JMP_UNLESS 10 ( -> 70) 61: OP_CONSTANT 2 ( "Could not find item in find_or_die" ) 63: OP_LOOKUP 153 65: OP_PUSH_SCOPE 66: OP_LOOKUP 16 68: OP_POP_SCOPE -->69: OP_ASSERT 70: OP_JMP 22 ( -> 93) 72: OP_POP 73: OP_LOOKUP 21 75: OP_LOOKUP 152 77: OP_PUSH_SCOPE 78: OP_LOOKUP 26 80: OP_POP_SCOPE 81: OP_INDEX 82: OP_PUSH_SCOPE 83: OP_LOOKUP 55 85: OP_POP_SCOPE 86: OP_LOOKUP 152 88: OP_PUSH_SCOPE 89: OP_LOOKUP 25 91: OP_POP_SCOPE 92: OP_INDEX 93: OP_DUP 94: OP_CONSTANT 3 ( "@eval (UNSERIALIZABLE_OBJECT N12_GLOBAL__N_118variant_type_classE)" ) 96: OP_IS 97: OP_POP_JMP_IF 7 ( -> 105) 99: OP_CONSTANT 4 ( "Type mis-match. Expected class card_base found " ) 101: OP_SWAP 102: OP_ADD 103: OP_PUSH_NULL 104: OP_ASSERT
---STACK--- --TOS+0-- [(object at address 0xedf3b20){_data: '(Unknown)', value: null, self: (object at address 0xedf3b20){...}, me: (object at address 0xedf3b20){...}, new_in_update: true, orphaned_by_update: false, _class: 'activated_ability', lib: (object at address 0x20489e0){Uninspectable Object: object}, _uuid: '60ea5fc756dd4d4daba6911225c6c1bf', _internal_id: null, _invalid_target_reason: (0x52775c0)(game, avatar, targets, target)null, _standard_invalid_target_reasons: (0xece1410)(game, avatar, targets, target)instrument('invalid_target_reasons', if(cover_reason, cover_reason,
if(building_reason, building_reason,
if(indestructible_reason, indestructible_reason)
where indestructible_reason =
if(target.indestructible,
eval_with_temp_modifications(me,
if(target.loc in possible_targets(game, avatar, targets),
'This creature is indestructible and cannot be targeted by this card.'
),
set(target.abilities, filter(target.abilities, value != 'Indestructible')),
set(target.abili
ERROR: ies, target.abilities) ) ) )
where building_reason =
if(target.is_building,
eval_with_temp_modifications(me,
if(target.loc in possible_targets(game, avatar, targets),
'This spell must target creatures, not buildings.'
),
set(target.is_building, false),
set(target.is_building, true)
)
)
)
where cover_reason =
if(target.controller != avatar.controller and target.has_cover(game),
eval_with_temp_modifications(me,
if(target.loc in possible_targets(game, avatar, targets),
'This creature has <i>Cover</i> which protects it from enemy spells'
),
set(target.abilities, filter(target.abilities, value != 'Cover')),
set(target.abilities, target.abilities)
)
)
),
additional_cost: (0x527d110)(game, player)0, ai_eval_end_of_turn: true, ai_flags: [], ai_patterns: (0x527e080)(game, targets)[], ai_score: (0x527e2c0)(game, targets)0, all_buildings_as_possible_targets: (0xf57ac70)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, creature.is_building, creature.is_valid_target(game, avatar.controller, me)]), all_creatures_and_buildings_as_possible_targets: (0xa7824b0)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, creature.is_valid_target(game, avatar.controller, me)]), all_creatures_and_players_as_possible_targets: (0xea0c080)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, not creature.is_building, creature.is_valid_target(game, avatar.controller, me)] + [[-1, player.player_index] | player <- game.players]), all_creatures_as_possible_targets: (0xf188e30)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, not creature.is_building, creature.is_valid_target(game, avatar.controller, me)]), all_players_as_possible_targets: (0x5287500)(game, avatar, targets)if(targets = [], [[-1, player.player_index] | player <- game.players]), all_tiles_as_possible_targets: (0x528aec0)(game, avatar, targets)if(targets = [], game.all_locs), animation_sequence: [], arrow_texture: null, background_color_bot: {'blue': 0.1,'green': 0.05,'red': 0.05}, background_color_top: {'blue': 0.44,'green': 0.32,'red': 0.25}, calculate_invalid_target_reason: (0xf41b0b0)(game, avatar, targets, target)if(possible = null or (target.loc in possible), null, if(reason, reason, _standard_invalid_target_reasons(game, avatar, targets, target) ) where reason = _invalid_target_reason(game, avatar, targets, target) ) where possible = possible_targets(game, avatar, targets), card_font: 'CoreMellow35.otf', cost: 2, creature: null, creature_object: null, custom_reason_cannot_cast: (0x528e970)(game, avatar)null, default_channeled_mana: 0, draw_id: -1, enemy_buildings_as_possible_targets: (0x66b1e70)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, creature.is_building, creature.controller != avatar.controller, creature.is_valid_target(game, avatar.controller, me)]), enemy_creatures_as_possible_targets: ERROR: (0xf62b100)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, not creature.is_building, creature.controller != avatar.controller, creature.is_valid_target(game, avatar.controller, me)]), equipment_invalid_reason: (0x528edc0)(game, avatar, targets, target)if(target.turn_summoned != game.nturn, 'This spell may only be cast on creatures that were summoned this turn'), equipment_targets: (0xe8fa8e0)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, creature.turn_summoned = game.nturn, not creature.is_building, creature.is_valid_target(game, avatar.controller, me)]), first_school: 2, flavor_text: null, flavor_voice: null, help_strings: [], hero: false, hue_shift: 0.0, internal_id: 'Remake', is_building: false, is_channeled: false, is_instant: false, is_land: false, is_on_cooldown: false, is_play_likely_misclick: (0xf2e7930)(game, avatar, targets)if(possible_targets(game, avatar, targets) = null, if((AI_CARD_NEVER_TARGET_ONLY_FRIENDS in ai_flags) and find(targets, c = null or c.controller != avatar.controller where c = game.creature_at_loc(value)) = null, true, false ), false ), is_player_ability: false, is_regular_creature: false, is_response: false, is_usable: (0x8a206e0)(game, creature)true, loyalty_cost: 0, min_targets: null, modify_creature: (0xf62f0f0)(attr, value)if(creature_object and creature, if(unique_creature = null, set(creature, deep_copy(creature)) ); [ set(creature_object[attr], value), set(creature[attr], value), set(unique_creature, generate_uuid()), ] ), my_buildings_as_possible_targets: (0xf180e20)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, creature.is_building, creature.controller = avatar.controller, creature.is_valid_target(game, avatar.controller, me)]), my_creatures_as_possible_targets: (0xeecc640)(game, avatar, targets)if(targets = [], [creature.loc | creature <- game.creatures, not creature.is_building, creature.controller = avatar.controller, creature.is_valid_target(game, avatar.controller, me)]), name: 'Remake', no_targets: (0x529bc60)(game, avatar, targets)null, on_cast: (0x52a8210)(game, info)null, on_pay_cost: (0x5298370)(game, info)null, on_play: (0xf6412a0)(game, info)[ creature.restore(game) ] where creature = info.get_creature(game), once_ever: false, once_per_turn: false, plays_on_stack: true, portrait: 'flesh-golem.png', portrait_focus: [340, 222], portrait_focus_height: null, portrait_focus_width: null, possible_targets: (0x529d7e0)(game, avatar, targets)null, preload_objects: [], preloads: [], record_animation: (0xedc9b90)(game, nplayer, info, stack_id)add(game.animation_hints, [construct('animation.play_card_hint', { type: 'play_ability', card: me, player: nplayer, targets: [info.get_creature(game).loc] + info.targets, stack_id: stack_id, info: info, } )]), resolve_animation_delay: 0, resolve_delay: 0, resolve_effect: '', resolve_impact: null, resolve_impact_delay: 30, res ERROR: lve_launch: null, resolve_num_particles: 0, resolve_particle: '', resolve_projectile: null, rules: 'Restore Flesh Golem', rules_text: 'Restore Flesh Golem', rules_text_font_size: 16, rules_tips: [], school: [2], school_list: [2], second_portrait: null, settings: {}, shadow: false, sound_fizzle: 'gameplay/card-fizzle', sound_resolve: 'gameplay/card_resolve_generic', sound_windup: null, stretch_image_edges: true, subcard_tips: [], tags: [], targets_valid: (0xf623c60)(game, creature, targets, existing)if(possible = null, targets = [], if(possible = [], false, targets != [] and (targets[0] in possible) and targets_valid(game, creature, targets[1:], existing + [targets[0]]))) where possible = possible_targets(game, creature, existing), text_color: [1, 1, 1], tips: [], type: 'ability', type_text: 'Ability', unique_creature: null, unique_id: null, used_this_turn: false, user_info: {}, uses_attack: false, uses_movement: false, windup_sound: '', hidden_from_activating: false, hidden_on_creature: false}] --TOS+1-- 'Could not find item in find_or_die' --TOS+2-- null
CRITICAL: At /home/odie/.citadel//dlc/citadel/data/classes/game_state.cfg 355: where card = class card_base<- ^
At /home/odie/.citadel//dlc/citadel/data/objects/citadel_controller.cfg 1667: state.play_card(construct('message.play_card', play_card_message)) ^
CRITICAL: stack trace:
CRITICAL: ./anura : validation_failure_exception::validation_failure_exception(std::string const&)+0x2d1
CRITICAL: ./anura : formula_vm::VirtualMachine::executeInternal(game_logic::FormulaCallable const&, std::vector<ffl::IntrusivePtr
To be clear, is this in a game vs the AI? If you are playing against the AI another separate "server" process runs and should log to the server-log.txt file. You can see the process by using "ps ax|grep anura" in bash -- you'll see the client process and server process and the server process should be writing to server-log.txt
However, that error message you posted seems relevant. The way you describe it, the entire UI doesn't lock up? The arrow still moves, animtaions still occur? This would mean the server is crashing, not the client.
Does the problem reproduce for you every single time you use it on a damaged Flesh Golem? I am having trouble reproducing it (I am also using Linux, so it's not a platform difference).
Yes, game against AI. Saw the process now and used lsof now to find the open files. You should probably give people a little hint about the location, I would never have found it here: ~/.citadel/dlc/anura_linux/server-log.txt
The UI seems to work quite normal. I can click around and everything but I can't continue the game. I simply can't complete the spell.
The error doesn't seem to happen on the "happy path". To reproduce the issue, I click "Remake" and then I click somewhere else. Not on the card to complete the spell. e.g. on other cards. When I try then to complete the spell, the error happens.
If you download the latest version of the installer ( http://theargentlark.com/files/argentum-age.tar.bz2 ), it installs and runs in a much more straightforward location. If you do this you probably want to blow away ~/.citadel/dlc -- you will also have to do a full new downlad.
Where else do you click exactly? By design if you click elsewhere the Remake spell should disappear so you can't click it.
Do you think you could make a video of the issue and how you reproduce it? That might help.
Ok, thanks. Just to make sure: My saves, cards and everything are outside/elsewhere?
I will try to make a video. Tried it now, you are right, clicking on another card doesn't work and finishes the spell. I think, I clicked on the Golem. I will try again tomorrow and also send you the logfile.
Deleting just ~/.citadel/dlc is safe (in that you will only need to do a new download with the new installer) it won't delete any of your history. There are some settings stored elsewhere under ~/.citadel so you don't want to touch anything outside of the dlc directory
No video yet since I had to retry a couple of times to reproduce the effect. But I have a server log.
Click on Golem, invoke power. Before(!) completing power: Click again on golem and invoke the power a second time. (I think, that simply shouldn't be doable at all)
Server log: (one time link) https://send.firefox.com/download/5938a11aee/#UGmRmd7po5voyv84xRdVFg
Alright, thank you for these detailed instructions. I have managed to reproduce this issue now and should be able to fix it.
Should be fixed now, thank you!
When using Flesh Golems remake power, the game sometimes gets stuck. I still can click on things, but I cannot complete the "spell". Steps to reproduce: Flesh golem needs to be damaged. Click on Remake List of cards changes to "Remake" Click Remake Red arrows connect golem to remake card.
Whatever I try, I can never finish the spell. I need to restart the game
Edit: I probably made a mistake here. I tried to open a bug for Argentum Age.