Quick answer: GameMaker async I/O completing after Room End firing on a different room's objects? Cancel async work on Room End; otherwise callbacks fire on destroyed/new objects.

Room transitions while download is in progress. Callback fires; finds the wrong room; corrupts state.

Cancel on Room End

http_request_cancel(req_id);

Stops the in-flight request before room transition.

Or check room

Async callback checks room ID; early-return if different. Defensive.

Track per-room requests

Cleanup all room-scoped async work at Room End. Per-room cleanup ritual.

“Room End is a state change. State changes need cleanup.”

Build a per-room cleanup helper. Every async work registered; cleaned on Room End. The pattern prevents the bug class.

Related reading