I tried this. It sounds good on paper but the LLM will just "forget" to use it's tools. Either it will decline to query the database and just make stuff up, or it will decline to update the database when it should. The further along the game play gets the more out of sync the game word gets from the external state. I'm sure there is a clever solution but I never found it.
you're making the mistake to assume that leaving the structure of the communication and game play to the LLM is the only option. the LLM just is a tool serving a specific purpose in the game play. the LLM cannot forget to query if the query/state-management task is simply an imperative step in a loop. it's not left to the LLM to remember it.