2 registered members (AndrewAMD, VoroneTZ),
779
guests, and 3
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: [REQ] converting a code to lite-c
[Re: Cowabanga]
#240566
12/11/08 15:58
12/11/08 15:58
|
Joined: Feb 2008
Posts: 3,232 Australia
EvilSOB
Expert
|
Expert
Joined: Feb 2008
Posts: 3,232
Australia
|
Im sorry to say, Ive reached the limits of my available help. Im just not competant enough with c_move and c_scan to know whats wrong...
I was able to dodge the issue by altering the model's origin point, but that is cheating... I had a couple of other fudges in there that both link to this problem.
If maybe hienekenbottle can help Im sure both you AND me will be grateful..
Again, my apologies for my limitations.
"There is no fate but what WE make." - CEO Cyberdyne Systems Corp. A8.30.5 Commercial
|
|
|
Re: [REQ] converting a code to lite-c
[Re: Cowabanga]
#240580
12/11/08 16:26
12/11/08 16:26
|
Joined: Nov 2007
Posts: 1,032 Croatia
croman
Serious User
|
Serious User
Joined: Nov 2007
Posts: 1,032
Croatia
|
yeah i know he made some changes. i thought you might wanna know about that but it seems you already do know about it.
btw. i tried converting that code in lite-c myself and i got those problems with jumping also. then i tried to implement only KH jumping into my project and i once again i got the problem.
so i think that it's not a coincidence that jumping isn't working to me and to you, it has to do with newer Acknex version or c-script & lite-c language difference
Ubi bene, ibi Patria.
|
|
|
Re: [REQ] converting a code to lite-c
[Re: Cowabanga]
#240661
12/11/08 19:58
12/11/08 19:58
|
Joined: Oct 2008
Posts: 218 Nashua NH
heinekenbottle
Member
|
Member
Joined: Oct 2008
Posts: 218
Nashua NH
|
doesn't work -.- waiting you hienekenbottle . Alright, he's got a script on the wiki, so you just need the combo attack code?
|
|
|
Re: [REQ] converting a code to lite-c
[Re: heinekenbottle]
#240676
12/11/08 21:08
12/11/08 21:08
|
Joined: Oct 2008
Posts: 218 Nashua NH
heinekenbottle
Member
|
Member
Joined: Oct 2008
Posts: 218
Nashua NH
|
Actually, I just finished and I encountered a problem. But once that problem is fixed, I think it will be complete. I took the script, reworked it as lite-c. It is still David Lancaster's script in look and function, I simply translated. Now from what works, it seems to be fine except for one thing: the player keeps falling. When he hits the ground he "teleports" to the top of the screen and continues falling. I think the other scripts work, because he moves and he's animated and he swings his sword, but he keeps falling. Big script inc: main.c
///////////////////////////////
#define PRAGMA_PATH "%EXE_DIR%\templates\images";
#define PRAGMA_PATH "%EXE_DIR%\templates\models";
#define PRAGMA_PATH "%EXE_DIR%\templates\sounds";
#include <acknex.h>
//#include "default.c"
#include "player.c"
#include "enemy.c"
#include "animation.c"
function main()
{
camera.clip_near = 0;
video_switch(7,0,1);
level_load("khmove.wmb");
}
player.c
function rotate_entity(rotate_angle,rotate_speed);
function handle_animation(animation_speed);
#define nullframe -2
#define blend -1
#define stand 0
#define run 1
#define walk 2
#define jump 3
#define fall 4
#define attack_a 5
#define attack_b 6
#define attack_c 7
#define attack_d 8
#define attack_e 9
#define attack_f 10
#define move_x skill22
#define move_y skill23
#define move_z skill24
#define force_x skill25
#define force_y skill26
#define force_z skill27
#define velocity_x skill28
#define velocity_y skill29
#define velocity_z skill30
#define animate skill31
#define animate2 skill32
#define animblend skill33
#define currentframe skill34
#define blendframe skill35
#define z_offset skill50
#define jumping_mode skill51
#define grav skill52
#define movement_mode skill53
#define moving skill54
#define hit_by_player skill55
#define entity_type skill56
ENTITY* player_weapon;
ENTITY* target_enemy;
var camera_move_to[3];
var camera_distance = 200;
var camera_pan;
var camera_tilt;
var space_press = 0;
var mouse_left_press = 0;
var mouse_right_press = 0;
var combo_continue = 0;
var player_lock_on = 0;
var airborne_attack = 0;
action attach_weapon()
{
VECTOR temp;
VECTOR temp2;
ANGLE tempAng;
player_weapon = my;
set(my,PASSABLE,SHADOW);
proc_mode = PROC_LATE;
while(!player) wait(1);
while (player) {
vec_for_vertex(temp.x,player,1175); //hand palm base
vec_for_vertex(temp2.x,player,1240); //hand palm tip
vec_set(my.x,temp.x);
vec_diff(temp.x,temp2.x,temp.x);
vec_to_angle(tempAng.pan,temp.x);
vec_set(my.pan,tempAng.pan);
wait(1);
}
}
function handle_movement()
{
VECTOR temp;
VECTOR temp2;
ANGLE plAng;
temp.x = -1000;
temp.y = 0;
my.moving = 0;
if (key_w == 1 && key_s == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan; }
if (key_s == 1 && key_w == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan + 180; }
if (key_a == 1 && key_s == 0 && key_w == 0 && key_d == 0) { temp.x = camera.pan + 90; }
if (key_d == 1 && key_s == 0 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 90; }
if (key_w == 1 && key_a == 1 && key_d == 0 && key_s == 0) { temp.x = camera.pan + 45; }
if (key_w == 1 && key_d == 1 && key_a == 0 && key_s == 0) { temp.x = camera.pan - 45; }
if (key_s == 1 && key_a == 1 && key_d == 0 && key_w == 0) { temp.x = camera.pan + 135; }
if (key_s == 1 && key_d == 1 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 135; }
if (temp.x != -1000) {
my.moving = 1;
if (key_shift == 1) { temp.y = 10 * time_step; } else { temp.y = 15 * time_step; }
}
if (my.movement_mode == 0) {
my.move_x = fcos(temp.x,temp.y);
my.move_y = fsin(temp.x,temp.y);
}
if (my.movement_mode == 1 || my.movement_mode == 2) {
temp.y = fsin((my.animate * 1.2) + 45,15 * time_step);
my.move_x = fcos(my.pan,temp.y);
my.move_y = fsin(my.pan,temp.y);
temp.y = 0;
if (temp.x != -1000) { //if we need to rotate whilst attacking (the player is pressing keys to rotate)
temp.y = 1;
}
}
// move_mode = IGNORE_PASSABLE | GLIDE; //replace c_move with these 2 lines in versions of gamestudio below 6.4
// ent_move(nullvector,my.move_x);
c_move(my,nullvector,my.move_x,USE_AABB | IGNORE_PASSABLE | GLIDE);
result = c_trace(vector(my.x,my.y,my.z - my.z_offset),vector(my.x,my.y,my.z - 4000),IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
if (result < 0) { my.z -= result; my.velocity_z = 0; }
if (target_enemy == NULL) {
if (temp.y > 0) { rotate_entity(temp.x,30); }
} else {
vec_diff(temp2.x,target_enemy.x,my.x);
vec_to_angle(plAng.pan,temp2.x);
rotate_entity(plAng.pan,30);
}
if (my.movement_mode == 0) {
my.grav = 6;
if (my.move_x != 0 || my.move_y != 0) { //if we are moving
if (my.animblend == stand) { //if our current animation is stand
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
if (my.animblend == run && key_shift == 1) { my.blendframe = walk; }
if (my.animblend == walk && key_shift == 0) { my.blendframe = run; }
} else {
if (my.animblend > stand && my.animblend != jump && my.animblend != fall) { //if we arn't moving and our current animation is walk or run, blend and cycle the stand animation
my.blendframe = stand;
}
}
if (mouse_left == 0 && mouse_left_press == 1) { mouse_left_press = 0; }
if (mouse_left == 1 && mouse_left_press == 0 && my.animblend >= stand) {
mouse_left_press = 1;
my.blendframe = attack_a;
if (my.jumping_mode == 1) {
airborne_attack = 1;
} else {
airborne_attack = 0;
}
my.movement_mode = 1;
combo_continue = 0;
}
if (mouse_right == 0 && mouse_right_press == 1) { mouse_right_press = 0; } ///////////////
if (mouse_right == 1 && mouse_right_press == 0) {
if (player_lock_on == 0) {
// vec_set(temp.x,vector(360,180,250)); //replace c_scan with these 2 lines in versions of gamestudio below 6.4
// result = scan_entity(player.x,temp);
c_scan(player.x,player.pan,vector(360,180,250),SCAN_ENTS | SCAN_LIMIT | IGNORE_ME);
if (you != NULL) {
if (you.entity_type == 2) { //make sure you've scanned an enemy
player_lock_on = 1;
target_enemy = you;
}
}
} else {
player_lock_on = 0;
target_enemy = NULL;
}
mouse_right_press = 1;
}
}
if (my.movement_mode == 1) {
if (my.jumping_mode != 10) {
my.jumping_mode = 0;
} else {
if (my.animate >= 60 && my.animblend >= stand) { my.jumping_mode = 0; }
}
if (mouse_left == 0 && mouse_left_press == 1) { mouse_left_press = 0; }
if (mouse_left == 1 && mouse_left_press == 0 && my.animate >= 30 && combo_continue == 0) { mouse_left_press = 1; combo_continue = 1; }
}
if (my.movement_mode == 2) {
my.jumping_mode = 0;
if (mouse_left == 0 && mouse_left_press == 1) { mouse_left_press = 0; }
if (mouse_left == 1 && mouse_left_press == 0 && my.animate >= 30 && combo_continue == 0) { mouse_left_press = 1; combo_continue = 1; }
}
}
function handle_grav()
{
//trace_mode = IGNORE_ME+IGNORE_PASSABLE+USE_BOX;
result = c_trace(vector(my.x,my.y,my.z - my.z_offset),vector(my.x,my.y,my.z - 4000),IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
if (result < 3) {
if (my.jumping_mode == 0) {
my.force_z = -1 * result;
if (key_space == 0 && space_press == 1) { space_press = 0; }
if (key_space == 1 && space_press == 0 && my.movement_mode == 0 && my.animblend >= stand && my.animblend != jump && my.animblend != fall) {
space_press = 1;
my.jumping_mode = 1;
my.force_z = 25;
my.blendframe = jump;
my.animate2 = 0;
my.animblend = blend;
}
}
if (my.jumping_mode == 2 || my.jumping_mode == 3) { my.jumping_mode = 0; }
} else {
if (my.jumping_mode == 2) {
if (result > 120) {
my.animate = 60;
my.jumping_mode = 3;
} else {
my.jumping_mode = 0;
}
}
if (my.jumping_mode == 3 && result <= 120) { my.jumping_mode = 0; }
if (my.jumping_mode == 0 && my.movement_mode == 0) {
if (result > 120 && my.animblend >= stand && my.animblend != jump && my.animblend != fall) {
my.jumping_mode = 3;
my.blendframe = fall;
my.animate2 = 0;
my.animblend = blend;
}
}
my.force_z -= my.grav * time_step;
my.force_z = maxv(-30,my.force_z);
if (my.movement_mode == 2) { my.force_z = 0; }
}
my.velocity_z += (time_step * my.force_z) - (minv(time_step*0.7,1) * my.velocity_z);
my.move_z = my.velocity_z * time_step;
}
//////////////////////////////
//Stable/rigid camera collision
//////////////////////////////
function handle_camera()
{
var temp;
VECTOR tempVec;
camera.pan -= mouse_force.x * 12 * time_step;
camera.tilt += mouse_force.y * 8 * time_step;
camera.tilt = clamp(camera.tilt,-30,10);
temp = fcos(camera.tilt,-camera_distance);
vec_set(camera.x,vector(my.x + fcos(camera.pan,temp),my.y + fsin(camera.pan,temp),my.z + 20 + fsin(camera.tilt,-camera_distance)));
vec_diff(tempVec.x,camera.x,my.x); //find the vector from the player to the camera
vec_normalize(tempVec.x,16); //get the magnitude of it's vector to 16 quants and store it in temp
vec_add(tempVec.x,camera.x); //add the vector (from player to camera) of a magnitude of 16 quants and add it to the camera's position.
//trace_mode = IGNORE_ME+IGNORE_PASSABLE+ignore_models;
result = c_trace(my.x,tempVec.x,IGNORE_ME | IGNORE_PASSABLE | IGNORE_MODELS); //trace from the player to 16 quants behind the camera.
if (result > 0) {
vec_diff(tempVec.x,my.x,target.x); //find the vector from the point the trace hit to the player
vec_normalize(tempVec.x,16); //get the magnitude of this vector to 16 quants and store in temp
vec_set(camera.x,target.x); //place the camera at the trace hit point
vec_add(camera.x,tempVec.x); //move the camera away from the wall by the vector temp, 16 quants towards the player
}
}
//////////////////////////////
//Smooth camera collision
//////////////////////////////
/*function handle_camera() {
camera_pan -= mouse_force.x * 12 * time_step_step_step;
camera_tilt += mouse_force.y * 8 * time_step_step_step;
camera_tilt = clamp(camera_tilt,-30,10);
camera.pan = camera_pan;
temp = fcos(camera_tilt,-camera_distance);
vec_set(camera_move_to.x,vector(my.x + fcos(camera.pan,temp),my.y + fsin(camera.pan,temp),my.z + 20 + fsin(camera_tilt,-camera_distance)));
temp = minv(1,0.5 * time_step_step); //changing 0.5 will change how fast the camera moves, at 1 places us at target, this value is what allows the smooth movement
camera.x += temp*(camera_move_to.x - camera.x);
camera.y += temp*(camera_move_to.y - camera.y);
camera.z += temp*(camera_move_to.z - camera.z);
vec_diff(temp.x,camera.x,my.x);
vec_normalize(temp.x,16);
vec_add(temp.x,camera.x);
trace_mode = IGNORE_ME + IGNORE_PASSABLE + ignore_models;
if (trace(my.x,temp.x) > 0) {
vec_diff(temp.x,my.x,target.x);
vec_normalize(temp.x,16);
vec_set(camera.x,target.x);
vec_add(camera.x,temp.x);
}
vec_diff(temp.x,my.x,camera.x);
vec_to_angle(camera.pan,temp.x);
}*/
function rotate_entity(rotate_angle,rotate_speed)
{
if (my.pan == rotate_angle) return;
result = ang(rotate_angle - my.pan);
if (result > 0) { my.pan += rotate_speed * time_step; }
if (result < 0) { my.pan -= rotate_speed * time_step; }
if (ang(rotate_angle - my.pan) < 0 && result > 0) { my.pan = rotate_angle; }
if (ang(rotate_angle - my.pan) > 0 && result < 0) { my.pan = rotate_angle; }
}
function handle_sword_collision()
{
VECTOR temp;
VECTOR temp2;
you = NULL;
vec_for_vertex(temp.x,player_weapon,274); //sword base
vec_for_vertex(temp2.x,player_weapon,54); //sword tip
//trace_mode = IGNORE_ME+IGNORE_PASSABLE+USE_BOX;
result = c_trace(temp.x,temp2.x, IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
if (you != NULL) {
if (you.entity_type == 2 && you.hit_by_player == 0) {
if (airborne_attack == 1 && my.animblend == attack_a) {
my.movement_mode = 2;
}
you.hit_by_player = 1;
if (target_enemy == NULL) { target_enemy = you; player_lock_on = 1; }
}
}
}
action player_action()
{
player = my;
my.grav = 6;
my.z_offset = 6;
set(my,SHADOW);
ent_create("sword.mdl",my.x,attach_weapon);
wait(1);
while (1) { //the main loop
handle_grav();
handle_movement();
handle_camera();
handle_animation(1);
wait(1);
}
}
enemy.c action enemy_dummy()
{
set(my,SHADOW);
my.entity_type = 2;
//my.enable_scan = on;
my.emask |= ENABLE_SCAN;
while (1) {
if (my.hit_by_player == 1) {
my.move_x = player.move_x;
my.move_y = player.move_y;
my.move_z = player.move_z;
// move_mode = ignore_passable | glide; //replace c_move with these 2 lines in versions of gamestudio below 6.4
// ent_move(nullvector,my.move_x);
c_move(my,nullvector,my.move_x,USE_AABB | IGNORE_PASSABLE | GLIDE);
if (player.animblend == blend || player.animblend < attack_a || my.animblend > attack_f) { my.hit_by_player = 0; }
}
if ((player.animblend >= stand && target_enemy == my && player_lock_on == 0) && (player.animblend < attack_a || player.animblend > attack_f)) target_enemy = NULL;
if (target_enemy == my && vec_dist(my.x,player.x) > 200) target_enemy = NULL;
wait(1);
}
} animation.c
function handle_animation(animation_speed) {
if (animation_speed <= 0) { animation_speed = 1; }
if (my.animblend != blend && my.blendframe != nullframe) { my.animate2 = 0; my.animblend = blend; }
if (my.animblend == blend) {
if (my.currentframe == stand) { ent_animate(my,"stand",my.animate,ANM_CYCLE); }
if (my.currentframe == run) { ent_animate(my,"run",my.animate,ANM_CYCLE); }
if (my.currentframe == walk) { ent_animate(my,"walk",my.animate,ANM_CYCLE); }
if (my.currentframe == jump) { ent_animate(my,"jump",my.animate,0); }
if (my.currentframe == attack_a) { ent_animate(my,"attack_a",my.animate,0); }
if (my.currentframe == attack_b) { ent_animate(my,"attack_b",my.animate,0); }
if (my.currentframe == attack_c) { ent_animate(my,"attack_c",my.animate,0); }
if (my.currentframe == attack_d) { ent_animate(my,"attack_d",my.animate,0); }
if (my.currentframe == attack_e) { ent_animate(my,"attack_e",my.animate,0); }
if (my.currentframe == attack_f) { ent_animate(my,"attack_f",my.animate,0); }
if (my.blendframe == stand) { ent_blend("stand",0,my.animate2); }
if (my.blendframe == run) { ent_blend("run",0,my.animate2); }
if (my.blendframe == walk) { ent_blend("walk",0,my.animate2); }
if (my.blendframe == jump) { ent_blend("jump",0,my.animate2); }
if (my.blendframe == fall) { ent_blend("jump",60,my.animate2); }
if (my.blendframe == attack_a) { ent_blend("attack_a",0,my.animate2); }
if (my.blendframe == attack_b) { ent_blend("attack_b",0,my.animate2); }
if (my.blendframe == attack_c) { ent_blend("attack_c",0,my.animate2); }
if (my.blendframe == attack_d) { ent_blend("attack_d",0,my.animate2); }
if (my.blendframe == attack_e) { ent_blend("attack_e",0,my.animate2); }
if (my.blendframe == attack_f) { ent_blend("attack_f",0,my.animate2); }
my.animate2 += 45 * time_step;
if (my.animate2 >= 100) {
my.animate = 0;
my.animblend = my.blendframe;
my.blendframe = nullframe;
}
}
if (my.animblend == stand) {
ent_animate(my,"stand",my.animate,ANM_CYCLE);
my.animate += 5 * animation_speed * time_step;
my.animate %= 100;
my.currentframe = stand;
}
if (my.animblend == run) {
ent_animate(my,"run",my.animate,ANM_CYCLE);
my.animate += 8 * animation_speed * time_step;
my.animate %= 100;
my.currentframe = run;
}
if (my.animblend == walk) {
ent_animate(my,"walk",my.animate,ANM_CYCLE);
my.animate += 8 * animation_speed * time_step;
my.animate %= 100;
my.currentframe = walk;
}
if (my.animblend == jump || my.animblend == fall) {
if (my.jumping_mode == 3) { my.animate = 60; }
ent_animate(my,"jump",my.animate,0);
my.animate += 10 * animation_speed * time_step;
my.currentframe = jump;
if (my.animate >= 60 && my.jumping_mode == 1) { my.jumping_mode = 2; }
if (my.animate >= 100) {
ent_animate(my,"jump",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
}
}
if (my.animblend == attack_a) {
ent_animate(my,"attack_a",my.animate,0);
my.animate += 20 * animation_speed * time_step;
my.currentframe = attack_a;
if (my.animate >= 100) {
ent_animate(my,"attack_a",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
if (combo_continue == 1) {
combo_continue = 0;
my.blendframe = attack_b;
} else {
my.movement_mode = 0;
}
}
}
if (my.animblend == attack_b) {
ent_animate(my,"attack_b",my.animate,0);
my.animate += 15 * animation_speed * time_step;
my.currentframe = attack_b;
if (my.animate >= 100) {
ent_animate(my,"attack_b",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
if (combo_continue == 1) {
combo_continue = 0;
my.blendframe = attack_c;
} else {
my.movement_mode = 0;
}
}
}
if (my.animblend == attack_c) {
ent_animate(my,"attack_c",my.animate,0);
my.animate += 10 * animation_speed * time_step;
my.currentframe = attack_c;
if (my.animate >= 100) {
ent_animate(my,"attack_c",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
if (combo_continue == 1) {
my.jumping_mode = 10;
my.force_z = 12;
my.grav = 4;
combo_continue = 0;
my.blendframe = attack_d;
} else {
my.movement_mode = 0;
}
}
}
if (my.animblend == attack_d) {
handle_sword_collision();
ent_animate(my,"attack_d",my.animate,0);
my.animate += 15 * animation_speed * time_step;
my.currentframe = attack_d;
if (my.animate >= 100) {
ent_animate(my,"attack_d",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
if (combo_continue == 1) {
combo_continue = 0;
my.blendframe = attack_e;
} else {
my.movement_mode = 0;
}
}
}
if (my.animblend == attack_e) {
ent_animate(my,"attack_e",my.animate,0);
my.animate += 15 * animation_speed * time_step;
my.currentframe = attack_e;
if (my.jumping_mode == 0 && my.animate >= 20 && my.animate < 60) {
my.grav = 3;
my.jumping_mode = 10;
my.force_z = 15;
}
if (my.animate >= 100) {
ent_animate(my,"attack_e",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
if (combo_continue == 1) {
combo_continue = 0;
my.blendframe = attack_f;
} else {
my.movement_mode = 0;
}
}
}
if (my.animblend == attack_f) {
ent_animate(my,"attack_f",my.animate,0);
my.animate += 6 * animation_speed * time_step;
my.currentframe = attack_f;
if (my.jumping_mode == 0 && my.animate >= 40 && my.animate < 60) {
my.grav = 6;
my.jumping_mode = 10;
my.force_z = 12;
}
if (my.animate >= 100) {
my.movement_mode = 0;
ent_animate(my,"attack_f",100,0);
my.animate = 100;
my.blendframe = stand;
if (my.moving == 1) {
if (key_shift == 1) { my.blendframe = walk; } else { my.blendframe = run; }
}
}
}
if (my.animblend >= attack_a && my.animblend <= attack_f) { handle_sword_collision(); }
if (my.animblend != blend && my.blendframe != nullframe) { my.animate2 = 0; my.animblend = blend; }
}
|
|
|
|