Пример #1
0
li_object *g1_add_stank_weapons(li_object * i, li_environment * env)
{
	while (i)
	{
		li_object * o=li_car(i,env);
		g1_stank_ammo_type_struct * a=g1_stank_ammo_types.add();
		a->weapon_type=li_symbol::get(li_car(o,env),env);
		o=li_cdr(o,env);
		a->max_amount=li_get_int(li_eval(li_car(o,env),env),env);
		o=li_cdr(o,env);
		a->refuel_delay=li_get_int(li_eval(li_car(o,env),env),env);
		o=li_cdr(o,env);
		a->fire_delay=li_get_int(li_eval(li_car(o,env),env),env);
		o=li_cdr(o,env);

		char name[100];
		sprintf(name,"bitmaps/stank/frame_%s.tga", li_get_string(li_car(o,env),env));
		a->icon=i4_load_image(name); //what the heck? i4_const_str() sometimes fails.

		sprintf(name,"bitmaps/stank/dark_%s.tga", li_get_string(li_car(o,env), env));
		a->dark_icon=i4_load_image(name);


		i=li_cdr(i,env);
	}
	return 0;
}
Пример #2
0
static li_object *wait_near(li_object * o, li_environment * env)
{
    wait_camera=g1_find_named_camera(li_get_string(li_eval(li_first(o,env),env),env));
    camera_dist=(float)li_get_float(li_eval(li_second(o,env), env),env);

    return 0;
}
Пример #3
0
static li_object *eval_quasiquote(li_object *exp, li_object *env) {
    li_object *head, *iter, *tail;

    if (!li_is_pair(exp))
        return exp;
    else if (li_is_unquoted(exp))
        return li_eval(li_cadr(exp), env);
    else if (li_is_unquoted_splicing(li_car(exp))) {
        head = tail = li_null;
        for (iter = li_eval(li_cadar(exp), env); iter; iter = li_cdr(iter)) {
            if (head)
                tail = li_set_cdr(tail, li_cons(li_car(iter), li_null));
            else
                head = tail = li_cons(li_car(iter), li_null);
        }
        if (tail) {
            li_set_cdr(tail, eval_quasiquote(li_cdr(exp), env));
            return head;
        } else {
            return eval_quasiquote(li_cdr(exp), env);
        }
    }
    return li_cons(eval_quasiquote(li_car(exp), env),
            eval_quasiquote(li_cdr(exp), env));
}
Пример #4
0
li_object *g1_get_tile_textures(li_object * o, li_environment * env)
{
	//li_object *fmt=li_eval(li_car(o,env),env);

	//char buf[200];

	for (o=li_cdr(o,env); o; o=li_cdr(o,env))  // skip path at start
	{
		char * name;
		if (li_car(o,env)->type()==LI_STRING)
		{
			name=li_string::get(li_eval(li_car(o,env),env),env)->value();
		}
		else
		{
			name=li_string::get(li_eval(li_car(li_car(o,env),env),env),env)->value();
		}

		// The format is unused and must not be stored with the texture names,
		// since location and extension of the textures is handled by the loader, not
		// the texture handler.
		//sprintf(buf, li_string::get(fmt,env)->value(), name);
		I4_ASSERT(name!=0,"Error: Invalid texture name found");
		g1_current_tnames->add(new i4_str(name));
		li_set_value("texture_object_list",new li_list(li_car(o,env),li_get_value("texture_object_list",env)),env);

		g1_current_t_tiles++;
	}


	return 0;
}
Пример #5
0
void golgotha_app::choice_first_level()
{

	for (int i=1; i<(int)argc; i++)
	{
		if (argv[i]=="-f")
		{
			i4_os_string(*(argv+i+1), first_level, 80);
			i++;
		}
		else if (argv[i]==i4_const_str("-edit"))
		{
			start_in_editor=1;
		}
		else if (argv[i]=="-eval")
		{
			i++;
			char buf[1000];
			i4_os_string(argv[i], buf, 1000);
			char * s=buf;
			li_eval(li_get_expression(s,0), 0);
		}
		else if (argv[i]=="-frame_lock")
		{
			frame_locked_mode=1;
		}
	}
}
Пример #6
0
extern li_object *li_eval(li_object *exp, li_object *env) {
    li_object *seq, *proc, *args;
    int done;

    done = 0;
    while (!li_is_self_evaluating(exp) && !done) {
        li_stack_trace_push(exp);
        if (li_is_symbol(exp)) {
            exp = li_environment_lookup(env, exp);
            done = 1;
        } else if (li_is_quoted(exp)) {
            check_special_form(li_cdr(exp) && !li_cddr(exp), exp);
            exp = li_cadr(exp);
            done = 1;
        } else if (li_is_quasiquoted(exp)) {
            check_special_form(li_cdr(exp) && !li_cddr(exp), exp);
            exp = eval_quasiquote(li_cadr(exp), env);
            done = 1;
        } else if (li_is_application(exp)) {
            proc = li_eval(li_car(exp), env);
            args = li_cdr(exp);
            if (li_is_procedure(proc))
                args = list_of_values(args, env);
            if (li_is_lambda(proc)) {
                env = extend_environment(li_to_lambda(proc).vars, args,
                        li_to_lambda(proc).env);
                for (seq = li_to_lambda(proc).body; seq && li_cdr(seq);
                        seq = li_cdr(seq))
                    li_eval(li_car(seq), env);
                exp = li_car(seq);
            } else if (li_is_macro(proc)) {
                exp = expand_macro(proc, args);
            } else if (li_is_primitive_procedure(proc)) {
                exp = li_to_primitive_procedure(proc)(args);
                done = 1;
            } else if (li_is_special_form(proc)) {
                exp = li_to_special_form(proc)(args, env);
            } else {
                li_error("not applicable", proc);
            }
        } else {
            li_error("unknown expression type", exp);
        }
        li_stack_trace_pop();
    }
    return exp;
}
Пример #7
0
static li_object *expand_macro(li_object *mac, li_object *args) {
    li_object *env, *ret, *seq;

    ret = li_null;
    env = extend_environment(li_to_macro(mac).vars, args, li_to_macro(mac).env);
    for (seq = li_to_macro(mac).body; seq; seq = li_cdr(seq))
        ret = li_eval(li_car(seq), env);
    return ret;
}
Пример #8
0
void g1_demo_tick()
{
    if (wait_camera)
    {
        g1_object_class * c=g1_player_man.get_local()->get_commander();
        if (!c)
        {
            wait_camera=0;
        }
        else if ((c->x-wait_camera->x)*(c->x-wait_camera->x)+
                 (c->y-wait_camera->y)*(c->y-wait_camera->y)+
                 (c->h-wait_camera->h)*(c->h-wait_camera->h) < camera_dist*camera_dist)
        {
            wait_camera=0;
        }
    }
    else if (wait_ticks)
    {
        wait_ticks--;
    }
    else
    {
        li_object * script_start=demo_script.get();
        li_object * script=script_start;

        while (!wait_camera && !wait_ticks && script)
        {

            li_object * o=li_car(script, 0);
            if (o->type()==LI_INT)
            {
                wait_ticks=li_get_int(o, 0);
            }
            else
            {
                li_eval(o);
            }

            if (script_start!=demo_script.get())
            {
                // we loaded another script
                script=0;
            }

            if (script)
            {
                script=li_cdr(script, 0);
            }
        }

        if (script_start==demo_script.get())
        {
            demo_script=script;
        }
    }
}
Пример #9
0
static li_object *list_of_values(li_object *exps, li_object *env) {
    li_object *head, *node, *tail;

    head = li_null;
    while (exps) {
        tail = li_cons(li_eval(li_car(exps), env), li_null);
        node = head ? li_set_cdr(node, tail) : (head = tail);
        exps = li_cdr(exps);
    }
    return head;
}
Пример #10
0
li_object *g1_sky_textures(li_object * o, li_environment * env)
{
	//li_object *fmt=li_eval(li_car(o,env),env);

	//char buf[200], name1[200], name2[200];

	//call the global function (used to build the list of skys.)
	//This is defined in golg__sky.cpp
	g1_def_skys(o,env);

	for (o=li_cdr(o,env); o; o=li_cdr(o,env))  // skip path at start
	{
		char * name;
		if (li_car(o,env)->type()==LI_STRING)
		{
			name=li_string::get(li_eval(li_car(o,env),env),env)->value();
		}
		else
		{
			name=li_string::get(li_eval(li_car(li_car(o,env),env),env),env)->value();
		}

		//sprintf(buf, li_string::get(fmt,env)->value(), name);
		//sprintf(name1, "%s1", buf);
		//sprintf(name2, "%s2", buf);

		g1_current_tnames->add(new i4_str(name));
		//g1_current_tnames->add(new i4_str(name1));
		//g1_current_tnames->add(new i4_str(name2));
		li_set_value("texture_object_list",new li_list(li_car(o,env),li_get_value("texture_object_list",env)),env);

		g1_current_t_tiles+=1;
	}


	return 0;
}
Пример #11
0
extern li_object *li_apply(li_object *proc, li_object *args) {
    li_object *head, *tail, *obj;

    if (li_is_primitive_procedure(proc))
        return li_to_primitive_procedure(proc)(args);
    head = li_null;
    while (args) {
        obj = li_car(args);
        if (!li_is_self_evaluating(obj))
            obj = li_cons(li_symbol("quote"), li_cons(obj, li_null));
        if (head)
            tail = li_set_cdr(tail, li_cons(obj, li_null));
        else
            head = tail = li_cons(obj, li_null);
        args = li_cdr(args);
    }
    return li_eval(li_cons(proc, head), li_to_lambda(proc).env);
}
Пример #12
0
li_object *g1_set_default_level(li_object * o, li_environment * env)
{
	strcpy(first_level, li_get_string(li_eval(li_car(o,env),env),env));
	return 0;
}