void newsroom_set_names(newsroom_local *local, const char *pilot1, const char *pilot2, const char *har1, const char *har2, int sex1, int sex2) { str_create_from_cstr(&local->pilot1, pilot1); str_create_from_cstr(&local->pilot2, pilot2); str_create_from_cstr(&local->har1, har1); str_create_from_cstr(&local->har2, har2); local->sex1 = sex1; local->sex2 = sex2; // Remove the whitespace at the end of pilots name if(isspace(str_at(&local->pilot1, str_size(&local->pilot1)-1))) { str_remove_at(&local->pilot1, str_size(&local->pilot1)-1); } if(isspace(str_at(&local->pilot2, str_size(&local->pilot2)-1))) { str_remove_at(&local->pilot2, str_size(&local->pilot2)-1); } }
void test_str_append_c(void) { str dst; str_create_from_cstr(&dst, "base_string"); str_append_c(&dst, "appended_string"); CU_ASSERT(str_size(&dst) == 26); CU_ASSERT_PTR_NOT_NULL(dst.data); CU_ASSERT_NSTRING_EQUAL(dst.data, "base_string", 11); CU_ASSERT_NSTRING_EQUAL(dst.data+11, "appended_string", 15); CU_ASSERT(dst.data[dst.len] == 0); str_free(&dst); }
animation* create_animation_from_single(sprite *sp, vec2i pos) { animation *a = malloc(sizeof(animation)); a->start_pos = pos; a->id = -1; str_create_from_cstr(&a->animation_string, "A9999999999"); vector_create(&a->collision_coords, sizeof(collision_coord)); vector_create(&a->extra_strings, sizeof(str)); vector_create(&a->sprites, sizeof(sprite)); vector_append(&a->sprites, sp); free(sp); return a; }
void test_str_slice(void) { str src; str dst; str_create_from_cstr(&src, "test-data-a"); str_create(&dst); str_slice(&dst, &src, 0, 9); CU_ASSERT(dst.len == 9); CU_ASSERT_NSTRING_EQUAL(dst.data, "test-data", 9); str_free(&src); str_free(&dst); }
void animation_create(animation *ani, void *src, int id) { sd_animation *sdani = (sd_animation*)src; // Copy simple stuff ani->id = id; ani->start_pos = vec2i_create(sdani->start_x, sdani->start_y); str_create_from_cstr(&ani->animation_string, sdani->anim_string); // Copy collision coordinates vector_create(&ani->collision_coords, sizeof(collision_coord)); collision_coord tmp_coord; for(int i = 0; i < sdani->coord_count; i++) { tmp_coord.pos = vec2i_create(sdani->coord_table[i].x, sdani->coord_table[i].y); tmp_coord.frame_index = sdani->coord_table[i].frame_id; vector_append(&ani->collision_coords, &tmp_coord); } ani->extra_string_count = sdani->extra_string_count; // Copy extra strings vector_create(&ani->extra_strings, sizeof(str)); str tmp_string; for(int i = 0; i < sdani->extra_string_count; i++) { str_create_from_cstr(&tmp_string, sdani->extra_strings[i]); vector_append(&ani->extra_strings, &tmp_string); // don't str_free tmp_str here because it will free the pointers // inside it, which vector_append does not copy } // Handle sprites vector_create(&ani->sprites, sizeof(sprite)); sprite tmp_sprite; for(int i = 0; i < sdani->sprite_count; i++) { sprite_create(&tmp_sprite, (void*)sdani->sprites[i], i); vector_append(&ani->sprites, &tmp_sprite); } }
void newsroom_fixup_str(newsroom_local *local) { /* * Substitution table 1= Player1 - Crystal 2= Player2 - Steffan 3= HAR1 - jaguar 4= HAR2 - shadow 5= Arena - power plant 6= His/Her P1 - Her 7= Him/Her P1 - Her 8= He/She P1 - She 10= Him/Her P2 - Him 11= He/She P2 - He */ const char *text = NULL; if(local->screen == 0) { text = lang_get(NEWSROOM_TEXT+local->news_id); } else { text = lang_get(NEWSROOM_TEXT+local->news_id+1); } str textstr; size_t prevpos=0, pos = 0; str_create_from_cstr(&textstr, text); str_free(&local->news_str); while(str_next_of(&textstr, '~', &pos)) { str tmp; str_create(&tmp); str_substr(&tmp, &textstr, prevpos, pos); str_append(&local->news_str, &tmp); str_free(&tmp); // replace ~n tokens char n = str_at(&textstr, pos+1); char nn = str_at(&textstr, pos+2); switch(n) { case '1': if(nn == '0') { // ~10 str_append_c(&local->news_str, object_pronoun(local->sex2)); pos++; } else if(nn == '1') { // ~11 str_append_c(&local->news_str, subject_pronoun(local->sex2)); pos++; } else { // ~1 str_append(&local->news_str, &local->pilot1); } break; case '2': str_append(&local->news_str, &local->pilot2); break; case '3': str_append(&local->news_str, &local->har1); break; case '4': str_append(&local->news_str, &local->har2); break; case '5': str_append_c(&local->news_str, "Stadium"); break; case '6': str_append_c(&local->news_str, "The"); break; case '7': str_append_c(&local->news_str, object_pronoun(local->sex1)); break; case '8': str_append_c(&local->news_str, subject_pronoun(local->sex1)); break; case '9': str_append_c(&local->news_str, "WTF"); break; } pos+=2; prevpos = pos; } str tmp; str_create(&tmp); str_substr(&tmp, &textstr, pos, str_size(&textstr)); str_append(&local->news_str, &tmp); str_free(&tmp); str_free(&textstr); }