Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crystal Cove Online - Black screen after initial load screen complete #12572

Closed
CasualPokePlayer opened this issue Aug 5, 2023 · 5 comments · Fixed by #12886
Closed

Crystal Cove Online - Black screen after initial load screen complete #12572

CasualPokePlayer opened this issue Aug 5, 2023 · 5 comments · Fixed by #12886
Labels
A-avm2 Area: AVM2 (ActionScript 3) bug Something isn't working

Comments

@CasualPokePlayer
Copy link

Describe the bug

After the initial loading screen, the game ends up with a black screen. The music plays fine at this point, and some limited interactivity is possible (pressing Z or Enter has a pop sound effect indicating the next screen is reached, although inputs seem to do nothing else afterwards).

I'm using dropbox here as the game exceeds GitHub's zip size limit (as the game is ~40MB). Two links are provided here, the first is an unmodified copy of the game, and the second one is slightly modified to allow for the standalone flashplayer to play this game (and thus compare its results) (the modifications just being disabling the online enforcement and thus allowing flashplayer to fetch the swf files locally). The result is the same regardless within Ruffle.

https://www.dropbox.com/s/64st2l6qrwhcd9n/crystal_cove_online_unmodified.zip?dl=1
https://www.dropbox.com/scl/fi/ka28zfp5uramkxxlf0l3q/crystal_cove_online.zip?rlkey=wg0mi1dzdtkjw6dcmow8b18l1&dl=1

Image of issue:
image

Expected behavior

The next screen should load up fine:
image

Affected platform

Desktop app

Operating system

Windows 10

Browser

No response

Additional information

Using RUST_LOG=warn,ruffle_core=debug,avm_trace=trace

2023-08-05T10:10:11.111189Z  INFO ruffle_core::player: Loaded SWF version 10, resolution 688x375 @ 30 FPS
2023-08-05T10:10:11.164130Z  INFO run_frame:run_all_phases_avm2: avm_trace: sending unique to toAchieveModule unique val: 1244
2023-08-05T10:10:11.164392Z  WARN run_frame:run_all_phases_avm2: ruffle_core::stub: Encountered stub: AVM2 flash.net.LocalConnection.send()
2023-08-05T10:10:11.165403Z  INFO run_frame:run_all_phases_avm2: avm_trace: LocalConnection encountered an error.
2023-08-05T10:10:11.165712Z  WARN run_frame:run_all_phases_avm2: ruffle_core::stub: Encountered stub: AVM2 flash.net.LocalConnection.connect()
2023-08-05T10:10:11.189154Z  INFO run_frame:run_all_phases_avm2: avm_trace: <temp_xml><file cast="Xmls" type="xmlswf" filename="Animation.swf"/><file cast="Xmls" type="xmlswf" filename="Xmls.swf"/><file cast="Font" type="font" filename="Fonts.swf"/><file cast="Room_000" type="swf" filename="Rooms/000.swf"/><file cast="Room_CC_EX_01a" type="swf" filename="Rooms/CC_EX_01a.swf"/><file cast="Room_CC_IN_01a" type="swf" filename="Rooms/CC_IN_01a.swf"/><file cast="Sound" type="swf" filename="Sound/Sound.swf"/><file cast="LevelMedia" type="swf" filename="LevelMedia/LevelMedia.swf"/><file cast="Media_Screen" type="swf" filename="Media_Screen/Media_Screen.swf"/><file cast="Media_Screen" type="swf" filename="Media_Screen/M_Splash_Week_0.swf"/><file cast="Media_Screen" type="swf" filename="Media_Screen/M_Splash_Week_X.swf"/><file cast="PDA" type="swf" filename="PDA/PDA.swf"/><file cast="Media_MM" type="swf" filename="Media_MM/Media_MM.swf"/><file cast="Media_Popup" type="swf" filename="Media_Popup/Media_Popup.swf"/><file cast="Media_Avatar" type="swf" filename="Media_Avatar/avatar.swf"/><file cast="Media_Avatar" type="swf" filename="Media_Avatar/avatar2.swf"/><file cast="Media_Poster" type="swf" filename="Media_Poster/Media_Poster.swf"/><file cast="Media_Character" type="swf" filename="Media_Character/characters.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/Media_Enemy.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/caterpillar.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/wasp.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/giantfly.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/wolf.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/RCar.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/Rat.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/crab.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/Gator.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/idol.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/bat.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/monkey.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/gnome.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/wreckball.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/mechspider.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/octopus.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/cicada.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/flamingSkull.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/motorcycle.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/evilRose.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/traps.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/dragon.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/zombie.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/beetle.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/chair.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/bearRug.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/snake.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/JetPlane.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/ShadowFreak.swf"/><file cast="Media_Enemy" type="swf" filename="Media_Enemy/WaspNest.swf"/><file cast="Preloader" type="swf" filename="PreloaderGame.swf"/><file cast="Media_Screen" type="swf" filename="Media_Screen/M_Splash_Week_26.swf"/></temp_xml>
2023-08-05T10:10:11.222798Z  INFO run_frame:run_all_phases_avm2: avm_trace: [INFO] engine::DownloadManager::mNextImgDownload()[null - TotalDownload: 14228KB
2023-08-05T10:10:11.505312Z  WARN run_frame:run_all_phases_avm2: ruffle_core::stub: Encountered stub: AVM2 flash.display.Loader.unload()
2023-08-05T10:10:12.957067Z  WARN run_frame:run_all_phases_avm2: ruffle_core::stub: Encountered stub: AVM2 flash.text.Font.registerFont()
2023-08-05T10:10:13.040641Z  INFO run_frame: avm_trace:



2023-08-05T10:10:13.040983Z  INFO run_frame: avm_trace: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-08-05T10:10:13.041845Z  INFO run_frame: avm_trace: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-08-05T10:10:13.042142Z  INFO run_frame: avm_trace:



2023-08-05T10:10:13.160852Z  INFO avm_trace: sending unique to toAchieveModule unique val: 1244
2023-08-05T10:10:13.161159Z  INFO avm_trace: LocalConnection encountered an error.
2023-08-05T10:10:13.241338Z  INFO run_frame: avm_trace:



2023-08-05T10:10:13.241702Z  INFO run_frame: avm_trace: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-08-05T10:10:13.242541Z  INFO run_frame: avm_trace: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-08-05T10:10:13.242817Z  INFO run_frame: avm_trace:



2023-08-05T10:10:13.409810Z  INFO run_frame: avm_trace:



2023-08-05T10:10:13.410092Z  INFO run_frame: avm_trace: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-08-05T10:10:13.410932Z  INFO run_frame: avm_trace: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2023-08-05T10:10:13.411180Z  INFO run_frame: avm_trace:



2023-08-05T10:10:13.458536Z  WARN run_frame: ruffle_core::stub: Encountered stub: AVM2 flash.media.Sound constructor with arguments
2023-08-05T10:10:13.835238Z  WARN run_frame:run_all_phases_avm2: ruffle_core::stub: Encountered stub: AVM2 flash.display.InteractiveObject.tabIndex setter
2023-08-05T10:10:15.122608Z  INFO avm_trace: sending unique to toAchieveModule unique val: 1244
2023-08-05T10:10:15.122842Z  INFO avm_trace: LocalConnection encountered an error.
2023-08-05T10:10:17.139948Z  INFO avm_trace: sending unique to toAchieveModule unique val: 1244
2023-08-05T10:10:17.140266Z  INFO avm_trace: LocalConnection encountered an error.
2023-08-05T10:10:18.365978Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160af777710 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.393054Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b1934bb0 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.426574Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b1935550 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.459806Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b19349f0 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.492985Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b19366d0 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.526593Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b19367b0 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.559594Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b1936970 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.593031Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b1934050 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.626709Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b1936c10 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.659864Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b19360b0 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")
2023-08-05T10:10:18.746948Z ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x160b1934130 }) to handler FunctionObject(FunctionObject { ptr: 0x160f29ff830 }) : RustError("ArgumentError: Child is not a child of this object")

Those last errors end up just getting spammed constantly.

@CasualPokePlayer CasualPokePlayer added the bug Something isn't working label Aug 5, 2023
@p0008874
Copy link
Contributor

Is seen it fixed in latest nightly, Are you sure did you wanna check again?

@CasualPokePlayer
Copy link
Author

The black screen issue does appear to be fixed.

However, it now just reveals further issues in game:

  1. Trying to select Save File 1 will not work; it will show an animation indicating it is pressed but not actually pop up a choose name prompt. Selecting Save File 2 or 3 works strangly enough.
  2. When getting actually in game, the automatic cutscene with Velma does not start, and the player is not able to move at all.
  3. You can press M at this point to enter the phone menu, although clicking the phone icon in the top right corner doesn't enter the phone menu like it should.
  4. The phone menu defaults to the Help (? icon) menu in Ruffle, but it's supposed to default to the map (Globe icon) menu (as seen in flashplayer).
  5. The phone menu can't be exited, and pressing all the buttons do nothing (at most making the sound effect indicating they have been clicked but not actually changing the menu).
  6. The phone menu is supposed to be opened when the Flash window goes out of focus (as seen in flashplayer), while Ruffle does not emulate this functionality.

@CasualPokePlayer
Copy link
Author

CasualPokePlayer commented Aug 21, 2023

Actually, strangely enough, trying to test this out when RUST_LOG=warn,ruffle_core=debug,avm_trace=trace is set ends up just fixing these issues??? Although issue 6 still happens regardless.

@CasualPokePlayer
Copy link
Author

CasualPokePlayer commented Aug 21, 2023

Playing through the first mystery (I guess "first level" for this game) by using the debug logging workaround, I've encountered more issues:

  1. The game seems to just suffer from performance issues, issues which are not present in the original flashplayer. Granted, this could be partly to blame with the debug logging I've ended up enabling.
  2. The phone menu has achievements and past text screens completely blank, instead of having their normal contents.
  3. At some point a bush icon appears on the top right of the screen, seemingly burned to that position on screen and moving with the player.
  4. At some point in the first level, you end up stuck on a loading screen with this error popping up in the console (which I could assume caused the issue):
    2023-08-21T17:11:41.383143Z ERROR ruffle_core::loader: Error during movie loading of "file:///<path to game>/Crystal_Cove/Media_Game_7/Rooms/101_IN_02b.swf": FetchError("Can't open file file:///<path to game>/Crystal_Cove/Media_Game_7/Rooms/101_IN_02b.swf: The system cannot find the file specified. (os error 2)")
    This file doesn't seem to exist here in the copy I've obtained (which was originally just scraped off of Cartoon Network's servers as they still have the game there funnily enough). However, flashplayer doesn't seem to care and the game works correctly regardless. Checking Cartoon Network's site again anyways and that file doesn't appear to be present, so it probably doesn't exist at all.
  5. Also problem 4 doesn't re-appear loading the save back up (fresh save only? weird one off?) (edit: fresh save doesn't have the issue, I would guess this is something else weird going on, maybe somehow related to 3?)

@CasualPokePlayer
Copy link
Author

CasualPokePlayer commented Aug 21, 2023

Seems like it's ruffle_core=debug causing the issues to seemingly be "fixed." If I only have RUST_LOG warning, I do get something useful indicating what's going on:
On bootup:
2023-08-21T22:33:57.453662Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x1eae5a53ad0 }) to handler FunctionObject(FunctionObject { ptr: 0x1eae39642c0 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
On trying to click File 1:
023-08-21T22:35:13.423111Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "E_DELAYED_CLICK", class: flash.events::MouseEvent, ptr: 0x1eaa2dc7b30 }) to handler FunctionObject(FunctionObject { ptr: 0x1eaecea0300 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
On trying to click the phone:
2023-08-21T22:35:45.657064Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "click", class: flash.events::MouseEvent, ptr: 0x1eaa2f317c0 }) to handler FunctionObject(FunctionObject { ptr: 0x1eab10106c0 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
On entering the phone menu:
2023-08-21T22:36:06.570502Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x1eab2ffe100 }) to handler FunctionObject(FunctionObject { ptr: 0x1eae39642c0 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
On trying to click any of the icons (besides X) in the phone menu:
2023-08-21T22:37:06.161776Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "mouseDown", class: flash.events::MouseEvent, ptr: 0x1eab4612b80 }) to handler FunctionObject(FunctionObject { ptr: 0x1eaa4f13cf0 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
Trying to click the X in the phone menu:
2023-08-21T22:37:33.708374Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "E_DELAYED_CLICK", class: flash.events::MouseEvent, ptr: 0x1eab47f90a0 }) to handler FunctionObject(FunctionObject { ptr: 0x1eaa4f16090 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
Trying to press Up in the phone menu:
2023-08-21T22:37:49.809594Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "38", class: flash.events::KeyboardEvent, ptr: 0x1eaa2ceb4e0 }) to handler FunctionObject(FunctionObject { ptr: 0x1eaa4f19060 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)
Trying to press Down in the phone menu:
2023-08-21T22:37:50.585362Z ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "40", class: flash.events::KeyboardEvent, ptr: 0x1eab1f0d4d0 }) to handler FunctionObject(FunctionObject { ptr: 0x1eaa4f187f0 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: http://adobe.com/AS3/2006/builtin::search)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-avm2 Area: AVM2 (ActionScript 3) bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants