Example #1
0
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);
    }
}
Example #2
0
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);
}
Example #3
0
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;
}
Example #4
0
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);
}
Example #5
0
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);
    }
}
Example #6
0
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);
}