|
|
Re: Problem mit Gamestudio
[Re: MasterQ32]
#344965
10/22/10 10:47
10/22/10 10:47
|
Joined: May 2008
Posts: 113 Italien, Südtirol, Naturns
Patrick92
OP
Member
|
OP
Member
Joined: May 2008
Posts: 113
Italien, Südtirol, Naturns
|
Das ist alles von mir selbst geschrieben. Sorry das ich keine Beschreibungen mache. Könnte das auch an diesen hier liegen: include <acknex.h> // include for Pure Mode #include <default.c> // default key functions Dass main.c: #include <acknex.h> // include for Pure Mode #include <default.c> // default key functions #include <Ragdoll.c> // Iclude Ragdoll #include <player.c> // Iclude player
#define PRAGMA_PATH "./levels"; #define PRAGMA_PATH "./models"; #define PRAGMA_PATH "./SOUNDs";
function main() { level_load("level1.wmb"); wait(5); ph_setgravity(vector(0, 0, -400)); // set gravity ph_iterations = 40; // set itterating physics to smooth out. ph_setcorrections(9000, 0); // set physics corrections ph_setcollisions(1000, 20); use_decal_gun(); }
action play_er() { move_player(); } Dass Player.c: #include <acknex.h> // include for Pure Mode #include <default.c> // default key functions #include <Ragdoll.c> // Iclude Ragdoll
#define PRAGMA_PATH "./levels"; #define PRAGMA_PATH "./models"; #define PRAGMA_PATH "./SOUNDs";
#define Life skill1
#define player_dist0 skill30 #define player_dist1 skill31 #define player_dist2 skill32
#define jumper skill51 #define mensch skill52 // Ob das ojekt blooded oder nicht
BMAP* bmMark = "images.tga"; BMAP* bmblood = "blood.bmp";
function schwerkraft() { var temp[3]; vec_set (temp, my.x); temp[2] -= 1000; trace_mode = IGNORE_ME + IGNORE_PASSABLE + USE_BOX; my.jumper = trace(my.x, temp); if (my.jumper > 2) { my.player_dist2 -= 2 * time_step; } else { my.player_dist2 = 0; } if (my.jumper < 0) { my.player_dist2 += 2 * time_step; } }
function shoot_event() { if (event_type == EVENT_SHOOT) { my.Life -= 1; } }
function use_decal_gun() { var vec_ang[3]; while (1) { // calculate the target vector VECTOR trace_target; vec_set(trace_target,vector(5000,0,0)); // the weapon has a firing range of 5000 quants vec_ang[0] = camera.pan+random(1)-0.5; vec_ang[1] = camera.pan+random(1)-0.5; vec_ang[2] = camera.pan; vec_rotate(trace_target, vector(camera.pan+random(5)-2.5,camera.tilt+random(5)-2.5,camera.roll+random(5)-2.5)); vec_add(trace_target, camera.x); // display a red spot at the target position // draw_point3d(hit.x,vector(50,50,255),100,3);
// fire and then place a decal at the hit position if (mouse_left) // fire { if (c_trace(camera.x,trace_target, IGNORE_ME | USE_POLYGON | SCAN_TEXTURE | ACTIVATE_SHOOT) > 0) // hit something? if (HIT_TARGET) // target hit? { if(you != NULL) { if(your.mensch == 1) { PARTICLE* p = ent_decal(you,bmblood,7+random(3),random(360)); // place a random sized decal at the hit entity p.lifespan = 1600; // remove decal after 100 seconds // p.material = mat_model; // assign a dedal material set(p,PASSABLE); set(p,OVERLAY); set(p,TRANSLUCENT); set(p,BEAM); set(p,STREAK); } } else { PARTICLE* p = ent_decal(you,bmMark,7+random(3),random(360)); // place a random sized decal at the hit entity p.lifespan = 1600; // remove decal after 100 seconds p.material = mat_model; // assign a dedal material set(p,PASSABLE); } } // snd_play (sndShot,100,0); // play the shot sound at a volume of 100 wait(-0.1); // reload } wait(1); } }
function move_player() { STRING* bone_name = ""; my.Life = 2; my.mensch = 1; //my.ENABLE_SHOOT = ON; my.emask |= ENABLE_SHOOT; my.event = shoot_event; var stand_speed; var ragdoll_tog = 0; while(1) { if(my.Life > 0) { move_mode = IGNORE_PASSABLE+GLIDE; ent_move(vector(my.player_dist0,my.player_dist1,my.player_dist2), nullvector); schwerkraft(); ent_animate(my, "stand", stand_speed, ANM_CYCLE); stand_speed += 5*time_step; } if(my.Life <= 0) { if(ragdoll_tog == 0) { ent_bonename(my, bone_name,hit); Ph_ragdoll_init(my, bone_name); ragdoll_tog = 1; } } wait(1); } }
Dass Ragdoll.c: #include <acknex.h> // include for Pure Mode #include <default.c> // default key functions
#define PRAGMA_PATH "./models"; #define PRAGMA_PATH "./SOUNDs";
VECTOR Hinge1, Hinge2;
SOUND* sPong = "jump.wav"; SOUND* sPong2 = "lp_flap.wav";
function shoot_event_ph() { if (event_type == EVENT_SHOOT) { phent_addvelglobal(my, vector(50,0,50), nullvector); } }
function Plop() { ent_playsound(my,sPong,400); } function Plop2() { ent_playsound(my,sPong2,400); }
var GroupID = 2;
function updateBoneHinge(ENTITY* hingeEnt, STRING* bodyPart, ENTITY* actor) { VECTOR temp_pos, temp_ang, temp_mov, temp_ang_1;
ENTITY* hingePointer = hingeEnt; ENTITY* actorPointer = actor; STRING* updatePart = bodyPart; while(hingePointer != NULL) { // reset bone position ent_bonereset(actorPointer, updatePart); vec_for_bone(temp_pos, actorPointer, updatePart); ang_for_bone(temp_ang, actorPointer, updatePart); vec_set(temp_mov, hingePointer.x); vec_sub(temp_mov, temp_pos); temp_mov.x /= actorPointer.scale_x; temp_mov.y /= actorPointer.scale_y; temp_mov.z /= actorPointer.scale_z; vec_rotateback (temp_mov, temp_ang);///change this please temp_ang.x = 360-temp_ang.x; temp_ang.y = 360-temp_ang.y; temp_ang.z = 360-temp_ang.z; vec_set(temp_ang_1, nullvector); ang_add(temp_ang_1, vector(temp_ang.x,0,0)); ang_add(temp_ang_1, vector(0,temp_ang.y,0)); ang_add(temp_ang_1, vector(0,0,temp_ang.z)); ang_rotate(temp_ang_1, hingePointer.pan); ent_bonerotate(you, updatePart, temp_ang_1); ent_bonemove(you, updatePart, temp_mov); wait(1); } }
function update_actor(ENTITY* hingeEnt, ENTITY* actor) { while(actor != NULL) { vec_set(actor.x, hingeEnt.x); vec_set(actor.pan, hingeEnt.pan); wait(1); } }
function ph_body_init(var mass,ENTITY* entityMe) { set(entityMe, INVISIBLE); set(entityMe, PASSABLE); phent_settype(entityMe, PH_RIGID, PH_BOX); phent_setmass(entityMe, mass, PH_BOX); // phent_setgroup(entityMe, GroupID); phent_setfriction(entityMe, 15); phent_setdamping(entityMe, 35, 35); phent_setelasticity(entityMe, 35, 30); // bounciness reset(entityMe, PASSABLE); entityMe.skill1 = integer(random(2)); entityMe.event = Plop; entityMe.event = shoot_event_ph; entityMe.emask |= ENABLE_FRICTION; entityMe.emask |= ENABLE_SHOOT; }
function Ragdoll_pos(ENTITY* entityMe, STRING* bodyPart, ENTITY* hingeEnt) { var temp[3]; vec_for_bone(temp,entityMe,bodyPart); vec_set(hingeEnt.x,temp); }
function setLimit(VECTOR* vec1, VECTOR* vec2) { vec_set(Hinge1, vec1); vec_set(Hinge2, vec2); }
function setHinge(ENTITY* constr_1, ENTITY* constr_2) { var tempHinge; // make constraint tempHinge = phcon_add(PH_HINGE, constr_1, constr_2); // attach to bodypart phcon_setparams1(tempHinge, constr_1.x, Hinge1, nullvector); // set hinge limits phcon_setparams2(tempHinge, Hinge2, nullvector, nullvector); // same }
function RD_blendPose(ENTITY* limb, ENTITY* actor, STRING* boneBlend) { phent_enable(limb, 0); vec_for_bone(limb.x, actor, boneBlend); // place at right position ang_for_bone(limb.pan, actor, boneBlend); // rotate by right angle phent_enable(limb, 1); }
function PH_treffer(ENTITY* me_ent) { phent_addvelglobal(me_ent, vector(50,0,50), nullvector); }
function Ph_ragdoll_init(ENTITY* entityMe, STRING* bone_name_hit)//,STRING* Ragdoll_name { // ; // set(my, TRANSLUCENT); GroupID += 1; you = entityMe; set(you, PASSABLE); reset(you, INVISIBLE); ENTITY* Ent_1; ENTITY* Ent_2; ENTITY* Ent_3; ENTITY* Pelvis; Ent_1 = ent_create("torso.mdl", you.x, NULL); Ragdoll_pos(my, "stomach", Ent_1); ph_body_init(30,Ent_1); RD_blendPose(Ent_1, you, "stomach"); updateBoneHinge(Ent_1, "stomach", you); PH_treffer(Ent_1); Pelvis = ent_create("head.mdl", you.x, NULL); ph_body_init(1,Pelvis); set(Pelvis, PASSABLE); update_actor(Pelvis, you); setHinge(Pelvis, Ent_1); Ent_2 = ent_create("LEG2.mdl", you.x, NULL); Ragdoll_pos(you, "right_up_leg", Ent_2); ph_body_init(10,Ent_2); setLimit(vector(1,0,1), vector(-40,40,0)); // set rotational boundaries RD_blendPose(Ent_2, you, "right_up_leg"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_2, "right_up_leg", you); Ent_3 = ent_create("LEG.mdl", you.x, NULL); Ragdoll_pos(you, "right_low_leg", Ent_3); ph_body_init(10,Ent_3); setLimit(vector(0,1,0), vector(0,120,0)); RD_blendPose(Ent_3, you, "right_low_leg"); setHinge(Ent_3, Ent_2); updateBoneHinge(Ent_3, "right_low_leg", you); Ent_2 = ent_create("LEG2.mdl", you.x, NULL); Ragdoll_pos(you, "left_up_leg", Ent_2); ph_body_init(10,Ent_2); setLimit(vector(1,0,1), vector(-40,40,0)); // set rotational boundaries RD_blendPose(Ent_2, you, "left_up_leg"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_2, "left_up_leg", you); Ent_3 = ent_create("LEG.mdl", you.x, NULL); Ragdoll_pos(you, "left_low_leg", Ent_3); ph_body_init(10,Ent_3); setLimit(vector(0,1,0), vector(0,120,0)); RD_blendPose(Ent_3, you, "left_low_leg"); setHinge(Ent_3, Ent_2); updateBoneHinge(Ent_3, "left_low_leg", you); Ent_2 = Ent_1; Ent_1 = ent_create("torso.mdl", you.x, NULL); Ragdoll_pos(you, "pelvis", Ent_1); ph_body_init(20,Ent_1); set(Ent_1, PASSABLE); setLimit(vector(0,0,0), vector(-15,15,0)); RD_blendPose(Ent_1, you, "pelvis"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_1, "pelvis", you); Ent_2 = Ent_1; Ent_1 = ent_create("Chest.mdl", you.x, NULL); Ragdoll_pos(you, "Chest", Ent_1); ph_body_init(20,Ent_1); setLimit(vector(1,1,0), vector(-20,20,0)); RD_blendPose(Ent_1, you, "Chest"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_1, "Chest", you); Ent_2 = ent_create("arm_down_right.mdl", you.x, NULL); Ragdoll_pos(you, "right_up_arm", Ent_2); ph_body_init(10,Ent_2); setLimit(vector(1,0,1), vector(-70, 116,20)); RD_blendPose(Ent_2, you, "right_up_arm"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_2, "right_up_arm", you); Ent_3 = ent_create("arm_down_right.mdl", you.x, NULL); Ragdoll_pos(you, "right_low_arm", Ent_3); ph_body_init(10,Ent_3); setLimit(vector(1,1,0), vector(270,0,0)); RD_blendPose(Ent_3, you, "right_low_arm"); setHinge(Ent_3, Ent_2); updateBoneHinge(Ent_3, "right_low_arm", you); Ent_2 = ent_create("arm_down_left.mdl", you.x, NULL); Ragdoll_pos(you, "left_up_arm", Ent_2); ph_body_init(5,Ent_2); setLimit(vector(1,0,1), vector(-70, 116,20)); RD_blendPose(Ent_2, you, "left_up_arm"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_2, "left_up_arm", you); // PH_treffer(Ent_2); Ent_3 = ent_create("arm_down_left.mdl", you.x, NULL); Ragdoll_pos(you, "left_low_arm", Ent_3); ph_body_init(5,Ent_3); setLimit(vector(1,1,0), vector(270,0,0)); RD_blendPose(Ent_3, you, "left_low_arm"); setHinge(Ent_3, Ent_2); updateBoneHinge(Ent_3, "left_low_arm", you); Ent_2 = ent_create("head.mdl", you.x, NULL); Ragdoll_pos(you, "head", Ent_2); ph_body_init(10,Ent_2); setLimit(vector(1,1,0), vector(-45,45,0)); RD_blendPose(Ent_2, you, "head"); setHinge(Ent_2, Ent_1); updateBoneHinge(Ent_2, "head", you);
while(you) { if(key_space) { phent_addvelglobal(Ent_1, vector(0,0,50), nullvector); // THIS ADDS A FORCE TO THE RAGDOLL } wait(1); } }
Last edited by Patrick92; 10/22/10 10:51.
|
|
|
Re: Problem mit Gamestudio
[Re: Patrick92]
#344970
10/22/10 11:26
10/22/10 11:26
|
Joined: Nov 2008
Posts: 216
jane
Member
|
Member
Joined: Nov 2008
Posts: 216
|
Die Fehler die ich auf die Schnelle gefunden habe
in player.c :
trace_mode = IGNORE_ME + IGNORE_PASSABLE + USE_BOX; my.jumper = trace(my.x, temp);
ersetzen durch:
my.jumper = c_trace(my.x, temp,IGNORE_ME | IGNORE_PASSABLE | USE_BOX);
und:
if(your.mensch == 1)
ersetzen durch:
if(you.mensch == 1)
und:
move_mode = IGNORE_PASSABLE+GLIDE; ent_move(vector(my.player_dist0,my.player_dist1,my.player_dist2), nullvector);
ersetzen durch:
c_move(vector(my.player_dist0,my.player_dist1,my.player_dist2), nullvector,IGNORE_PASSABLE|GLIDE);
Habe noch was gefunden:
var temp[3];
vec_set (temp, my.x); temp[2] -= 1000;
temp sollte hier als vector deffiniert werden, also ersetzen durch:
VECTOR temp[3];
temp.x = my.x; temp.y = my.y; temp.z = -1000;
Last edited by jane; 10/22/10 12:21.
|
|
|
|