@@ -345,7 +345,7 @@ typedef struct CraftaxMobs2 {
345345 int32_t type_id [CRAFTAX_NUM_LEVELS ][2 ];
346346} CraftaxMobs2 ;
347347
348- typedef struct CraftaxState {
348+ typedef struct State {
349349 // === Hot data (accessed every step) ===
350350 int32_t player_position [2 ];
351351 int32_t player_level ;
@@ -416,7 +416,9 @@ typedef struct CraftaxState {
416416 int32_t up_ladders [CRAFTAX_NUM_LEVELS ][2 ];
417417 bool chests_opened [CRAFTAX_NUM_LEVELS ];
418418 int32_t monsters_killed [CRAFTAX_NUM_LEVELS ];
419- } CraftaxState ;
419+ } State ;
420+
421+ typedef State CraftaxState ;
420422
421423typedef char CraftaxStateMatchesWorldState [
422424 (sizeof (CraftaxState ) == sizeof (CraftaxWorldState )) ? 1 : -1
@@ -494,15 +496,6 @@ static inline void craftax_refresh_spawn_bits_all(CraftaxState* state) {
494496 }
495497}
496498
497- #define CRAFTAX_ARENA_PACKET_SIZE 64
498-
499- typedef struct CraftaxArena {
500- CraftaxState * states ;
501- int num_envs ;
502- int packet_size ;
503- int num_packets ;
504- } CraftaxArena ;
505-
506499#ifdef CRAFTAX_ENABLE_ENV_IMPL
507500static inline void craftax_change_floor_native (CraftaxState * state , int32_t action );
508501static inline void craftax_do_crafting_native (CraftaxState * state , int32_t action );
@@ -587,11 +580,7 @@ typedef struct Craftax {
587580 unsigned int rng ;
588581 uint64_t seed ;
589582 CraftaxThreefryKey rng_key ;
590- CraftaxArena * arena ;
591- CraftaxState * state ;
592- int32_t packet_id ;
593- int32_t lane_id ;
594- bool owns_state_storage ;
583+ State state ;
595584
596585 float achievements [CRAFTAX_NUM_ACHIEVEMENTS ];
597586 float episode_return_accum ;
@@ -678,37 +667,18 @@ static inline void craftax_set_reset_pool_size(int n) {
678667 g_craftax_reset_pool_ready = 1 ;
679668}
680669
681- static inline void craftax_ensure_state_storage (Craftax * env ) {
682- if (env -> state != NULL ) {
683- return ;
684- }
685-
686- CraftaxArena * arena = (CraftaxArena * )calloc (1 , sizeof (CraftaxArena ));
687- arena -> states = (CraftaxState * )calloc (1 , sizeof (CraftaxState ));
688- arena -> num_envs = 1 ;
689- arena -> packet_size = 1 ;
690- arena -> num_packets = 1 ;
691-
692- env -> arena = arena ;
693- env -> state = arena -> states ;
694- env -> packet_id = 0 ;
695- env -> lane_id = 0 ;
696- env -> owns_state_storage = true;
697- }
698-
699670static inline void craftax_reset_state_from_seed (Craftax * env ) {
700- craftax_ensure_state_storage (env );
701671 CraftaxThreefryKey initial_key = craftax_prng_key ((uint32_t )env -> seed );
702672 if (g_craftax_reset_pool_size > 0 ) {
703673 CraftaxThreefryKey discard ;
704674 craftax_threefry_split (initial_key , & env -> rng_key , & discard );
705675 int idx = (int )(env -> seed % (uint64_t )g_craftax_reset_pool_size );
706- memcpy (env -> state , & g_craftax_reset_pool [idx ], sizeof (CraftaxState ));
676+ memcpy (& env -> state , & g_craftax_reset_pool [idx ], sizeof (CraftaxState ));
707677 return ;
708678 }
709679 CraftaxThreefryKey reset_key ;
710680 craftax_threefry_split (initial_key , & env -> rng_key , & reset_key );
711- craftax_reset_state_from_reset_key (env -> state , reset_key );
681+ craftax_reset_state_from_reset_key (& env -> state , reset_key );
712682}
713683
714684// Hot-path reset used by c_step on episode-done. Consults the reset pool
@@ -865,7 +835,6 @@ static float craftax_gameplay_step_native(
865835static void c_init (Craftax * env ) {
866836 env -> client = NULL ;
867837 env -> num_agents = 1 ;
868- craftax_ensure_state_storage (env );
869838 env -> episode_return_accum = 0.0f ;
870839 env -> episode_length_accum = 0 ;
871840 memset (env -> achievements , 0 , sizeof (env -> achievements ));
@@ -886,7 +855,7 @@ static void c_reset(Craftax* env) {
886855 memset (env -> achievements , 0 , sizeof (env -> achievements ));
887856
888857 craftax_reset_state_from_seed (env );
889- craftax_encode_native_observation (env -> state , env -> observations );
858+ craftax_encode_native_observation (& env -> state , env -> observations );
890859}
891860
892861#ifdef CRAFTAX_PROFILE
@@ -912,14 +881,14 @@ static void c_step_native(Craftax* env) {
912881 craftax_threefry_split (step_key , & step_rng , & reset_key );
913882 CRAFTAX_PROFILE_END (12 );
914883
915- float reward = craftax_gameplay_step_native (env -> state , action , step_rng );
884+ float reward = craftax_gameplay_step_native (& env -> state , action , step_rng );
916885
917886 CRAFTAX_PROFILE_ZONE (13 );
918- bool done = craftax_is_game_over_native (env -> state );
887+ bool done = craftax_is_game_over_native (& env -> state );
919888 CRAFTAX_PROFILE_END (13 );
920889
921890 CRAFTAX_PROFILE_ZONE (15 );
922- craftax_copy_achievements_to_env (env , env -> state );
891+ craftax_copy_achievements_to_env (env , & env -> state );
923892 CRAFTAX_PROFILE_END (15 );
924893
925894 CRAFTAX_PROFILE_ZONE (16 );
@@ -935,12 +904,12 @@ static void c_step_native(Craftax* env) {
935904 env -> episode_length_accum = 0 ;
936905 memset (env -> achievements , 0 , sizeof (env -> achievements ));
937906 CRAFTAX_PROFILE_ZONE (14 );
938- craftax_reset_state_on_done (env -> state , reset_key );
907+ craftax_reset_state_on_done (& env -> state , reset_key );
939908 CRAFTAX_PROFILE_END (14 );
940909 }
941910
942911 CRAFTAX_PROFILE_ZONE (11 );
943- craftax_encode_native_observation (env -> state , env -> observations );
912+ craftax_encode_native_observation (& env -> state , env -> observations );
944913 CRAFTAX_PROFILE_END (11 );
945914
946915 // Record unprofiled time
@@ -974,9 +943,9 @@ static void c_step_gameplay(Craftax* env) {
974943 CraftaxThreefryKey reset_key ;
975944 craftax_threefry_split (step_key , & step_rng , & reset_key );
976945
977- float reward = craftax_gameplay_step_native (env -> state , action , step_rng );
978- bool done = craftax_is_game_over_native (env -> state );
979- craftax_copy_achievements_to_env (env , env -> state );
946+ float reward = craftax_gameplay_step_native (& env -> state , action , step_rng );
947+ bool done = craftax_is_game_over_native (& env -> state );
948+ craftax_copy_achievements_to_env (env , & env -> state );
980949
981950 env -> rewards [0 ] = reward ;
982951 env -> terminals [0 ] = done ? 1.0f : 0.0f ;
@@ -988,12 +957,12 @@ static void c_step_gameplay(Craftax* env) {
988957 env -> episode_return_accum = 0.0f ;
989958 env -> episode_length_accum = 0 ;
990959 memset (env -> achievements , 0 , sizeof (env -> achievements ));
991- craftax_reset_state_on_done (env -> state , reset_key );
960+ craftax_reset_state_on_done (& env -> state , reset_key );
992961 }
993962}
994963
995964static void c_step_encode (Craftax * env ) {
996- craftax_encode_native_observation (env -> state , env -> observations );
965+ craftax_encode_native_observation (& env -> state , env -> observations );
997966}
998967
999968static void c_step (Craftax * env ) {
@@ -1002,14 +971,7 @@ static void c_step(Craftax* env) {
1002971}
1003972
1004973static void c_close (Craftax * env ) {
1005- if (!env -> owns_state_storage || env -> arena == NULL ) {
1006- return ;
1007- }
1008- free (env -> arena -> states );
1009- free (env -> arena );
1010- env -> arena = NULL ;
1011- env -> state = NULL ;
1012- env -> owns_state_storage = false;
974+ (void )env ;
1013975}
1014976
1015977// ------------------------------------------------------------
@@ -1108,7 +1070,7 @@ static void c_render(Craftax* env) {
11081070 if (!craftax_textures_loaded ) craftax_load_textures ();
11091071 if (IsKeyDown (KEY_ESCAPE )) exit (0 );
11101072
1111- CraftaxState * s = env -> state ;
1073+ State * s = & env -> state ;
11121074 int lvl = s -> player_level ;
11131075 int pr = s -> player_position [0 ];
11141076 int pc = s -> player_position [1 ];
0 commit comments