0 registered members (),
1,094
guests, and 1
spider. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Empty pointer in fire_bullets
#169009
11/23/07 01:48
11/23/07 01:48
|
Joined: Jan 2005
Posts: 30
fp
OP
Newbie
|
OP
Newbie
Joined: Jan 2005
Posts: 30
|
Why do i get this error message?
Empty pointer in fire_bullets: weapon2.frame = 102;
Here is the code: //////////////////////////////////////////////////////////////////////
var current_ammo = 20;
var player1_pos; // stores the initial position of the player var player2_pos; // stores the position of the player after a frame
var weapon_height; var weapon_offset;
var trace_coords;
var got_weapon2 = 0;
string weapon2_mdl = <pistol.mdl>; bmap cross_map = <crosshair.tga>; string target_mdl = <target.mdl>;
string muzzle_pcx = <muzzle.pcx>; // muzzle sprite string explosion_pcx = <explosion+5.pcx>; // explosion sprite string hithole_tga = <hithole.tga>;
sound bullet_wav = <bullet.wav>; sound nobullets_wav = <nobullets.wav>; sound reload_wav = <reload.wav>;
function fire_bullets(); // creates the bullets function reload(); function display_muzzle(); function explosion_sprite(); // controls the explosion sprite function show_target(); // displays the (red) target model function display_hithole(); // shows the hit hole bitmap function show_crosshair();
panel crosshair { layer = 4; bmap = cross_map; alpha = 100; flags = transparent, refresh, overlay, d3d; }
function show_crosshair() { crosshair.pos_x = (screen_size.x - bmap_width(cross_map))/2; //Center on x Axis crosshair.pos_y = (screen_size.y - bmap_height(cross_map))/2; //Center on y Axis crosshair.visible = on; //Set crosshair visible }
/////////////////////////////////////////////////////////////////////////////////////////
entity* weapon2;
function players_weapon() { my.znear = on; my.passable = on; got_weapon2 = 1; my.scale_x =4; my.scale_y =4; my.scale_z =4; proc_late(); while (1) { vec_set (player1_pos.x, player.x); // store the initial player position my.pan = camera.pan; my.tilt = camera.tilt; vec_set (weapon_offset.x, vector (35, -15, -22)); if (vec_dist (player1_pos.x, player2_pos.x) != 0) // the player has moved during the last frame? { weapon_height += 30 * time; // then offset weapon_height (30 = weapon waving speed) weapon_offset.z += 0.3 * sin(weapon_height); // (0.3 = weapon waving amplitude) } // rotate weapon_offset according to the camera angles vec_rotate (weapon_offset.x, vector (camera.pan, camera.tilt, 0)); vec_add (weapon_offset.x, camera.x); // add the camera position to weapon_offset vec_set (my.x, weapon_offset.x); // set weapon's coords to weapon_offset if (got_weapon2 == 1) // still got weapon2 ? { on_mouse_left = fire_bullets; vec_set(trace_coords.x, vector(10000, 0, 0)); // the weapon has a firing range of up to 10,000 quants vec_rotate(trace_coords.x, camera.pan); vec_add(trace_coords.x, camera.x); if (c_trace(camera.x, trace_coords.x, ignore_me | ignore_passable) > 0) // hit something? { ent_create (target_mdl, target.x, show_target); // then show the target model show_crosshair(); } } my.pan = camera.pan; // use the same camera angles for the weapon my.tilt = camera.tilt; vec_set (player2_pos.x, player.x); // store the new player coordinates after 1 frame wait (1); } } function show_target() { my.passable = on; // the target model is passable my.ambient = 100; // and should look bright enough my.scale_x = min (6, vec_dist (my.x, camera.x) / 500); // play with 6 and with 500 my.scale_y = my.scale_x; my.scale_z = my.scale_x; wait (1); ent_remove (my); }
function fire_bullets() { // wait(-0.22); // fire speed // proc_kill(4); // don't allow more than 1 copy of this function to run
if (current_ammo > 0) // got ammo? { c_trace(camera.x, trace_coords.x, ignore_me | ignore_passable | activate_shoot); if (you == null) // hit a wall? { ent_create (hithole_tga, target.x, display_hithole); // then create a bullet hit hole } weapon2.frame = 102; while (weapon2.frame <= 115) { weapon2.frame += 3.5 * time_step; //shot animation wait(1); } // ent_create (muzzle_pcx, temp.x, display_muzzle); // create the gun muzzle ent_create (explosion_pcx, target.x, explosion_sprite); // create the explosion sprite snd_play (bullet_wav, 100, 0); // play the bullet sound at a volume of 100 current_ammo -= 1; // decrease the number of bullets } else // no ammo left? { snd_play (nobullets_wav, 100, 0); // then play the noammo.wav sound reload(); }
wait(-0.22); // fire speed
}
function display_hithole() { vec_to_angle (my.pan, normal); // orient the hit hole sprite correctly vec_add(my.x, normal.x); // move the sprite a bit away from the wall my.passable = on; // the hit hole bitmap is passable my.transparent = on; // and transparent my.ambient = 50; my.flare = on; my.oriented = on; // the sprite is oriented my.roll = random(360); // and has a random roll angle (looks nicer this way) my.scale_x = 0.5; // we scale it down my.scale_y = my.scale_x; // on the x and y axis sleep (20); // show the hit hole for 20 seconds ent_remove (my); // and then remove it }
function display_muzzle() { my.passable = on; // the muzzle is passable my.flare = on; // make the black parts transparent even without using tga files (using a pcx file here) my.bright = on; // the muzzle should be bright my.ambient = 100; // and this line makes it even brighter my.oriented = on; // the sprite is oriented my.pan = weapon2.pan; // has the same pan and tilt my.tilt = weapon2.tilt; // with the weapon my.roll = random(360); // and a random roll angle (looks nicer) my.scale_x = 0.5; // we scale it down my.scale_y = my.scale_x; // on all the axis my.scale_z = my.scale_z; // this would only be needed for a 3D (model-based) muzzle weapon2.ambient = 100; // highlight the weapon (makes it look more realistic) wait (2); // show the muzzle sprite for 2 frames weapon2.ambient = 0; // restore the normal weapon ambient value ent_remove (my); // and then remove it }
function explosion_sprite() { my.passable = on; // the explosion sprite is passable my.scale_x = 0.15; // we scale it down to 0.15 my.scale_y = my.scale_x; // on both axis my.flare = on; // we set its flare my.bright = on; // and bright flags my.ambient = 100; // and we give it an ambient of 100 my.roll = random(360); // we set a random roll angle my.transparent = on; // and make it transparent my.alpha = 100; // but we set it to be completely opaque for now while (my.frame < 5) // go through all the animation frames { my.frame += 2 * time; // animation speed wait (1); } while (my.alpha > 0) // now fade the last frame quickly { my.alpha -= 50 * time; // 50 = fading speed wait (1); } ent_remove (my); }
function reload() { beep; }
action my_weapon { weapon2 = my; my.passable = on; while (player == null) {wait (1);} while (vec_dist (player.x, my.x) > 70) { my.pan += 3 * time; wait (1); } ent_remove (my); ent_create (weapon2_mdl, camera.x, players_weapon); }
|
|
|
Re: Empty pointer in fire_bullets
[Re: fp]
#169012
11/23/07 21:03
11/23/07 21:03
|
Joined: Sep 2006
Posts: 292
Mythran
Member
|
Member
Joined: Sep 2006
Posts: 292
|
// Defines define NO_ITEM = 1600; define MAX_INVENTORY = 45; define MAX_SLIDER = 12;
define MOVE_ITEM = 0; define USE_ITEM = 1; define VIEW_ITEM = 2;
define ITEM_PICKUP_RANGE = 200;
define NECK = 0; define HEAD = 1; define BACK = 2; define RSHLDR = 3; define BODY = 4; define LSHLDR = 5; define RARM = 6; define WAIST = 7; define LARM = 8; define RHAND = 9; define LEGS = 10; define LHAND = 11; define RFINGER = 12; define FEET = 13; define LFINGER = 14; define NOEQUIP = 15;
// skills define health, skill9; define armor, skill10; define merchant, skill13; define itemcarry0, skill14; define itemcarry1, skill15; define itemcarry2, skill16; define itemcarry3, skill17; define itemcarry4, skill18; define itemcarry5, skill19; define item_number, skill20;
define expendable, flag1;
// Variables var inv_index[max_inventory]; var merc_inv_index[6]; var equipped_index[15]; var equipped_ent_hdl[15]; var bitmap_hdl[1601]; var item_description_hdl[1601]; var item_skill_4[1601]; var item_skill_9[1601]; var item_skill_10[1601]; var item_wear_hdl[16]; var item_cmd_hdl[3]; var slider_pos = 0; var index; var item_sel_num = NO_ITEM; var merc_item_sel_num; //var item_sel_hdl; var temp_item_num; var merc_temp_item_num; var wear_item_num; var item_pnl_selected; var merc_item_pnl_selected; var equipped_pnl_sel; var counter; var drop_vector[3]; var drop_loc_set = 0; var item_command = move_item; var inventory_display; var loot_on;
string view_str1; string view_str2; string temp_str; string wear_str; string str_temp; string str_player_ac; string str_player_hp;
entity* player; entity* temp_item; //entity* selected_item;
// model strings string shield_mdl = <shield.mdl>; string red_shield_mdl = <red_shield.mdl>; string power_pill_mdl = <power_pill.mdl>; string cigs_mdl = <cigs.mdl>; string fish_mdl = <fish.mdl>; string mace_mdl = <mace.mdl>; string staff_mdl = <staff.mdl>; string warlock_mdl = <warlock.mdl>; string lamp_mdl = <Lampe.mdl>;
// ******************** ADD ITEM DESRIPTIONS HERE ************************** // item description strings string large_shld_str = "Large Shield"; string large_shld_plus1_str = "+1 Large Shield"; string power_pill_str = "Power Pill"; string cig_str = "Cigarettes"; string fish_str = "Fish"; string mace_str = "Mace"; string staff_str = "Staff"; string lamp_str = "Decorative Lamp";
//************************************************************************
// item wear position strings - do not change - unless re-coding string neck_str = "Neck"; string head_str = "Head"; string back_str = "Back"; string rshdlr_str = "Right Shoulder"; string body_str = "Body"; string lshldr_str = "Left Shoulder"; string rarm_str = "Right Arm"; string waist_str = "Waist"; string larm_str = "Left Arm"; string rhand_str = "Right Hand"; string legs_str = "Legs"; string lhand_str = "Left Hand"; string rfinger_str = "Right Finger"; string feet_str = "Feet"; string lfinger_str = "Left Finger"; string unwearable_str = "Cannot be equipped";
// Fonts font fnt_century12 = <Centur12.pcx>,16,20;
// bitmaps //panels bmap inventory_bmp = <inventory.bmp>; bmap merc_inventory_bmp = <mercinventory.bmp>; bmap equipped_bmp = <equipped.bmp>; bmap slider_bmp = <slider.bmp>; bmap button_bmp = <button.bmp>; bmap usepnl_bmp = <usepnl.bmp>; bmap movepnl_bmp = <movepnl.bmp>; bmap viewpnl_bmp = <viewpnl.bmp>; bmap view_bmp = <view.bmp>; bmap invhead_bmp = <invhead.bmp>;
//****************** ADD YOUR ITEM BITMAPS HERE **************************** bmap no_item_bmp = <no_item.bmp>; bmap shield_bmp = <shield.bmp>; bmap red_shield_bmp = <red_shield.bmp>; bmap power_pill_bmp = <power_pill.bmp>; bmap cigs_bmp = <cigs.bmp>; bmap fish_bmp = <fish.bmp>; bmap mace_bmp = <mace.bmp>; bmap staff_bmp = <staff.bmp>; bmap lamp_bmp = <lamp.bmp>; //***************************************************************************
function init_items(); function selected(); function drop_item(); function item_function(); function switch_item_cmd(); function load_merc_inv_panel();
// Panels panel equipped_pnl { bmap = equipped_bmp; layer = 20; pos_x = 844; pos_y = 0; flags = refresh, d3d, visible; }
panel item_cmd_pnl { bmap = movepnl_bmp; layer = 21; pos_x = 1000; pos_y = 2; on_click = switch_item_cmd; flags = refresh, d3d, visible; }
panel inv_head_pnl { bmap = invhead_bmp; layer = 20; pos_x = 844; pos_y = 262; flags = overlay, refresh, d3d, visible; }
panel inventory_pnl { bmap = inventory_bmp; layer = 20; pos_x = 844; pos_y = 287; vslider = 158, 2, 154, slider_bmp, 0, MAX_SLIDER, slider_pos; flags = overlay, refresh, d3d, visible; }
panel merc_inventory_pnl { bmap = merc_inventory_bmp; layer = 20; pos_x = 844; pos_y = 453; flags = overlay, refresh, d3d; }
panel view_item_pnl { bmap = view_bmp; layer = 20; pos_x = 200; pos_y = 0; flags = overlay, refresh, d3d; }
text view_item_txt1 { layer = 21; pos_x = 220; pos_y = 10; strings = 50; font = fnt_century12; }
text view_item_txt2 { layer = 21; pos_x = 220; pos_y = 30; strings = 50; font = fnt_century12; }
// text to display this player's Armor Class text txt_player_hp { pos_x = 0; // set in init_display pos_y = 35; layer = 15; font fnt_century12; string str_player_hp; flags = visible; }
// text to display this player's Armor Class text txt_player_ac { pos_x = 0; // set in init_display pos_y = 65; layer = 15; font fnt_century12; string str_player_ac; flags = visible; }
panel sel_item_pnl { bmap = mace_bmp; layer = 21; pos_x = 846; pos_y = 2; flags = transparent, overlay, refresh, d3d; }
panel equipped_neck_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 2; on_click = neck; flags = transparent, overlay, refresh, d3d; }
panel equipped_head_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 2; on_click = head; flags = transparent, overlay, refresh, d3d; }
panel equipped_back_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 2; on_click = back; flags = transparent, overlay, refresh, d3d; }
panel equipped_rshldr_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 54; on_click = rshldr; flags = transparent, overlay, refresh, d3d; }
panel equipped_body_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 54; on_click = body; flags = transparent, overlay, refresh, d3d; }
panel equipped_lshldr_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 54; on_click = lshldr; flags = transparent, overlay, refresh, d3d; }
panel equipped_rarm_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 106; on_click = rarm; flags = transparent, overlay, refresh, d3d; }
panel equipped_waist_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 106; on_click = waist; flags = transparent, overlay, refresh, d3d; }
panel equipped_larm_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 106; on_click = larm; flags = transparent, overlay, refresh, d3d; }
panel equipped_rhand_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 158; on_click = rhand; flags = transparent, overlay, refresh, d3d; }
panel equipped_legs_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 158; on_click = legs; flags = transparent, overlay, refresh, d3d; }
panel equipped_lhand_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 158; on_click = lhand; flags = transparent, overlay, refresh, d3d; } panel equipped_rfinger_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 210; on_click = rfinger; flags = transparent, overlay, refresh, d3d; }
panel equipped_feet_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 210; on_click = feet; flags = transparent, overlay, refresh, d3d; }
panel equipped_lfinger_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 210; on_click = lfinger; flags = transparent, overlay, refresh, d3d; }
panel item0_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 289; on_click = select_item0; flags = transparent, overlay, refresh, d3d; }
panel item1_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 289; on_click = select_item1; flags = transparent, overlay, refresh, d3d; }
panel item2_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 289; on_click = select_item2; flags = transparent, overlay, refresh, d3d; }
panel item3_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 341; on_click = select_item3; flags = transparent, overlay, refresh, d3d; }
panel item4_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 341; on_click = select_item4; flags = transparent, overlay, refresh, d3d; }
panel item5_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 341; on_click = select_item5; flags = transparent, overlay, refresh, d3d; }
panel item6_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 393; on_click = select_item6; flags = transparent, overlay, refresh, d3d; }
panel item7_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 393; on_click = select_item7; flags = transparent, overlay, refresh, d3d; }
panel item8_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 393; on_click = select_item8; flags = transparent, overlay, refresh, d3d; }
panel merc_item0_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 455; on_click = merc_select_item0; flags = transparent, overlay, refresh, d3d; }
panel merc_item1_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 455; on_click = merc_select_item1; flags = transparent, overlay, refresh, d3d; }
panel merc_item2_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 455; on_click = merc_select_item2; flags = transparent, overlay, refresh, d3d; }
panel merc_item3_pnl { bmap = no_item_bmp; layer = 21; pos_x = 846; pos_y = 507; on_click = merc_select_item3; flags = transparent, overlay, refresh, d3d; }
panel merc_item4_pnl { bmap = no_item_bmp; layer = 21; pos_x = 898; pos_y = 507; on_click = merc_select_item4; flags = transparent, overlay, refresh, d3d; }
panel merc_item5_pnl { bmap = no_item_bmp; layer = 21; pos_x = 950; pos_y = 507; on_click = merc_select_item5; flags = transparent, overlay, refresh, d3d; }
action item_action { my.enable_click = on; my.event = selected; }
action lootable_item { my.enable_click = on; my.event = load_merc_inv_panel; }
function item_function() { my.enable_click = on; my.event = selected; my.item_number = item_sel_num; }
function load_merc_inv_panel() { if(loot_on == ON) { goto (loot_turn_off); } if(vec_dist(player.x, player.y) <= ITEM_PICKUP_RANGE) { loot_on = ON; item_sel_num = NO_ITEM; merc_inv_index[0] = my.itemcarry0; merc_inv_index[1] = my.itemcarry1; merc_inv_index[2] = my.itemcarry2; merc_inv_index[3] = my.itemcarry3; merc_inv_index[4] = my.itemcarry4; merc_inv_index[5] = my.itemcarry5; merc_inventory_pnl.visible = on; merc_item0_pnl.visible = on; merc_item1_pnl.visible = on; merc_item2_pnl.visible = on; merc_item3_pnl.visible = on; merc_item4_pnl.visible = on; merc_item5_pnl.visible = on; loot_turn_off: loot_on = OFF; loot_off(); } }
// Equipped panel functions function neck() { equipped_pnl_sel = NECK; place_equipped(); }
function head() { equipped_pnl_sel = HEAD; place_equipped(); }
function back() { equipped_pnl_sel = BACK; place_equipped(); }
function rshldr() { equipped_pnl_sel = RSHLDR; place_equipped(); }
function body() { equipped_pnl_sel = BODY; place_equipped(); }
function lshldr() { equipped_pnl_sel = LSHLDR; place_equipped(); }
function rarm() { equipped_pnl_sel = RARM; place_equipped(); }
function waist() { equipped_pnl_sel = WAIST; place_equipped(); }
function larm() { equipped_pnl_sel = LARM; place_equipped(); }
function rhand() { equipped_pnl_sel = RHAND; place_equipped(); }
function legs() { equipped_pnl_sel = LEGS; place_equipped(); }
function lhand() { equipped_pnl_sel = LHAND; place_equipped(); }
function rfinger() { equipped_pnl_sel = RFINGER; place_equipped(); }
function feet() { equipped_pnl_sel = FEET; place_equipped(); }
function lfinger() { equipped_pnl_sel = LFINGER; place_equipped(); }
// Inventory panel functions function select_item0() { item_pnl_selected = 0; place_item(); }
function select_item1() { item_pnl_selected = 1; place_item(); }
function select_item2() { item_pnl_selected = 2; place_item(); }
function select_item3() { item_pnl_selected = 3; place_item(); }
function select_item4() { item_pnl_selected = 4; place_item(); }
function select_item5() { item_pnl_selected = 5; place_item(); }
function select_item6() { item_pnl_selected = 6; place_item(); }
function select_item7() { item_pnl_selected = 7; place_item(); }
function select_item8() { item_pnl_selected = 8; place_item(); }
// Merchant inventory panel functions function merc_select_item0() { merc_item_pnl_selected = 0; merc_place_item(); }
function merc_select_item1() { merc_item_pnl_selected = 1; merc_place_item(); }
function merc_select_item2() { merc_item_pnl_selected = 2; merc_place_item(); }
function merc_select_item3() { merc_item_pnl_selected = 3; merc_place_item(); }
function merc_select_item4() { merc_item_pnl_selected = 4; merc_place_item(); }
function merc_select_item5() { merc_item_pnl_selected = 5; merc_place_item(); }
function display_skills() { restart_display: while (!player) { wait(1); } while(player) { str_cpy(str_player_hp, "HP: "); str_for_num(str_temp, player.health); str_cat(str_player_hp, str_temp); str_cpy(str_player_ac, "AC: "); str_for_num(str_temp, player.armor); str_cat(str_player_ac, str_temp); wait(1); } goto(restart_display); }
function delete_expendable() { item_sel_num = NO_ITEM; sel_item_pnl.visible = off; }
// Adds adjustments to player skills that this item being equipped has function add_item_skill_adj() { player.armor += item_skill_10[item_sel_num]; // add armor adjustment of this item to player }
// Removes adjustments to player skills that this item being unequipped has function remove_item_skill_adj() { player.armor -= item_skill_10[item_sel_num]; // remove armor adjustment of this item from player }
function power_up() { //if(item_skill_9[temp_item_num] > 0) //{ // exit; player.health += int(random(item_skill_9[temp_item_num]))+1; //} //if(item_skill_9[temp_item_num] < 0) //{ // exit: // player.health -= int(random(item_skill_9[temp_item_num]))+1; //} }
// Places selected item into the equipment panel function place_equipped() { me = player; /* use this if using player variable i.e. player_walk_fight, comment out if using 3rd person*/ //me = warlock; //***** Third person code // if moving item if (item_command == MOVE_ITEM) { if (item_sel_num != NO_ITEM) // if item was selected with mouse { if(equipped_index[equipped_pnl_sel] == NO_ITEM) { if ((item_sel_num >= equipped_pnl_sel*100) && (item_sel_num < (equipped_pnl_sel*100+100))) { equipped_index[equipped_pnl_sel] = item_sel_num; // set slot to current item number //equipped_ent_hdl[equipped_pnl_sel] = item_sel_hdl; sel_item_pnl.visible = off; view_item_txt1.visible = off; view_item_txt2.visible = off; view_item_pnl.visible = off; attach_item(); add_item_skill_adj(); // add skill adjustments of this item to player item_sel_num = NO_ITEM; // no item selected now } } else //we have an item in this slot so switch { if ((item_sel_num >= equipped_pnl_sel*100) && (item_sel_num < (equipped_pnl_sel*100+100))) { temp_item_num = equipped_index[equipped_pnl_sel]; remove_item(); equipped_index[equipped_pnl_sel] = item_sel_num ; //equipped_ent_hdl[equipped_pnl_sel] = item_sel_hdl; attach_item(); add_item_skill_adj(); item_sel_num = temp_item_num; remove_item_skill_adj(); wear_item_num = item_sel_num; get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); } } } else { if (equipped_index[equipped_pnl_sel] != NO_ITEM) { item_sel_num = equipped_index[equipped_pnl_sel]; remove_item_skill_adj(); temp_item_num = item_sel_num; wear_item_num = item_sel_num; get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; remove_item(); equipped_index[equipped_pnl_sel] = NO_ITEM; //remove the item from slot sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); // place new bmap sel_item_pnl.visible = on; // show item bitmap } } } else // using item or viewing item { if (item_command == USE_ITEM) // using item { //********** put item specific use code here - if can use item from equipped slot temp_item_num = equipped_index[equipped_pnl_sel]; // get item # if( temp_item_num == 1100) // have a smoke { str_cpy(temp_str, "You smoke a cigarette."); power_up(); equipped_index[equipped_pnl_sel] = NO_ITEM; //remove the item from slot } if( temp_item_num == 1101) // eat some fish { str_cpy(temp_str, "You eat some delicious fish."); power_up(); equipped_index[equipped_pnl_sel] = NO_ITEM; //remove the item from slot } //******************************************************************************* } else // Viewing Item { wear_item_num = equipped_index[equipped_pnl_sel]; if (wear_item_num != NO_ITEM) { get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[equipped_index[equipped_pnl_sel]])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; } } }
}
// places selected item into the inventory panel function place_item() { if (item_command == MOVE_ITEM) { if (item_sel_num != NO_ITEM) // if item was selected with mouse { if(inv_index[item_pnl_selected+(3*int(slider_pos))] == NO_ITEM) // no item in current slot { inv_index[item_pnl_selected+(3*int(slider_pos))] = item_sel_num; // set slot to current item number view_item_txt1.visible = off; view_item_txt2.visible = off; view_item_pnl.visible = off; item_sel_num = NO_ITEM; // no item selected now sel_item_pnl.visible = off; } else //we have an item in this slot so switch { temp_item_num = inv_index[item_pnl_selected+(3*int(slider_pos))]; // save current item in slot inv_index[item_pnl_selected+(3*int(slider_pos))] = item_sel_num ;// place new item in slot item_sel_num = temp_item_num; // place old item onto mouse pointer wear_item_num = item_sel_num; get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); // place new bmap } } else // if no item selected with mouse see if item is in slot to pick up { // if item in slot pick up if (inv_index[item_pnl_selected+(3*int(slider_pos))] != NO_ITEM) { item_sel_num = inv_index[item_pnl_selected+(3*int(slider_pos))]; // get item from slot wear_item_num = item_sel_num; get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; inv_index[item_pnl_selected+(3*int(slider_pos))] = NO_ITEM; //remove the item from slot sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); // place new bmap sel_item_pnl.visible = on; // show item bitmap } } } else // using item or viewing item { if (item_command == USE_ITEM) // using item { temp_item_num = inv_index[item_pnl_selected+(3*int(slider_pos))]; // if (temp_item_num == An SPECIFIC Item Number), do your action //******** put item specific use code here - if can use item from inventory //************************************************************************ if(temp_item_num == 1509) // power pill { str_cpy(temp_str, "You swallow a big red pill."); power_up(); inv_index[item_pnl_selected+(3*int(slider_pos))] = NO_ITEM; // remove the item from inv } } else // Viewing Item { wear_item_num = inv_index[item_pnl_selected+(3*int(slider_pos))]; if (wear_item_num != NO_ITEM) { get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[inv_index[item_pnl_selected+(3*int(slider_pos))]])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; } } } }
// places selected item into the inventory panel function merc_place_item() {
if (item_command == MOVE_ITEM) { if (item_sel_num != NO_ITEM) // if item was selected with mouse { if(merc_inv_index[merc_item_pnl_selected] == NO_ITEM) // no item in current slot { merc_inv_index[merc_item_pnl_selected] = item_sel_num; // set slot to current item number view_item_txt1.visible = off; view_item_txt2.visible = off; view_item_pnl.visible = off; item_sel_num = NO_ITEM; // no item selected now sel_item_pnl.visible = off; } else //we have an item in this slot so switch { merc_temp_item_num = merc_inv_index[merc_item_pnl_selected]; // save current item in slot merc_inv_index[merc_item_pnl_selected] = item_sel_num ;// place new item in slot item_sel_num = merc_temp_item_num; // place old item onto mouse pointer wear_item_num = item_sel_num; get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); // place new bmap } } else // if no item selected with mouse see if item is in slot to pick up { // if item in slot pick up if (merc_inv_index[merc_item_pnl_selected] != NO_ITEM) { item_sel_num = merc_inv_index[merc_item_pnl_selected]; // get item from slot wear_item_num = item_sel_num; get_wear_str(); //str_for_num(item_sel_num); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; //view_item_txt2.visible = on;//;;;; //sleep(20); str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; merc_inv_index[merc_item_pnl_selected] = NO_ITEM; //remove the item from slot sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); // place new bmap sel_item_pnl.visible = on; // show item bitmap } } } else // using item or viewing item { if (item_command == USE_ITEM) // using item { temp_item_num = merc_inv_index[merc_item_pnl_selected]; // if (temp_item_num == An SPECIFIC Item Number), do your action //******** put item specific use code here - if can use item from inventory //************************************************************************ } else // Viewing Item { wear_item_num = merc_inv_index[merc_item_pnl_selected]; if (wear_item_num != NO_ITEM) { get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[merc_inv_index[merc_item_pnl_selected]])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; } } } }
// item event function selected() { if (item_command == USE_ITEM) { item_command = MOVE_ITEM; } if (vec_dist(player.X,my.X)<=ITEM_PICKUP_RANGE) { if(my.merchant) { load_merc_inv_panel(); return; } if (item_sel_num != NO_ITEM) // if already have item selected drop it { drop_vector = my.pos; drop_loc_set = 1;
drop_item(); } item_sel_num = my.item_number; if (item_command == VIEW_ITEM || item_command == MOVE_ITEM) { // show discription wear_item_num = item_sel_num; get_wear_str(); str_cpy(view_str2,"Wear: "); str_cat(view_str2, wear_str); view_item_txt2.string = view_str2; str_cpy(temp_str,ptr_for_handle(item_description_hdl[item_sel_num])); str_cpy(view_str1,"Item: "); str_cat(view_str1, temp_str); view_item_txt1.string = view_str1; view_item_txt1.visible = on; view_item_txt2.visible = on; view_item_pnl.visible = on; // if just viewing set selected item to none if (item_command == VIEW_ITEM) { item_sel_num = NO_ITEM; } } if (item_command == MOVE_ITEM) { sel_item_pnl.bmap = ptr_for_handle(bitmap_hdl[item_sel_num]); sel_item_pnl.pos_x = mouse_pos.x - 51; sel_item_pnl.pos_y = mouse_pos.y - 25; sel_item_pnl.visible = on;
ent_remove(me); // remove selected item entity from level } } }
// get handles for all the available item bitmaps function init_items() { // item command panel bitmaps - do not change unless re-coding item_cmd_hdl[MOVE_ITEM] = handle(movepnl_bmp); item_cmd_hdl[USE_ITEM] = handle(usepnl_bmp); item_cmd_hdl[VIEW_ITEM] = handle(viewpnl_bmp); // item wear strings - decribes wear item is supposed to be worn -do not change unless re-coding item_wear_hdl[0] = handle(neck_str); item_wear_hdl[1] = handle(head_str); item_wear_hdl[2] = handle(back_str); item_wear_hdl[3] = handle(rshdlr_str); item_wear_hdl[4] = handle(body_str); item_wear_hdl[5] = handle(lshldr_str); item_wear_hdl[6] = handle(rarm_str); item_wear_hdl[7] = handle(waist_str); item_wear_hdl[8] = handle(larm_str); item_wear_hdl[9] = handle(rhand_str); item_wear_hdl[10] = handle(legs_str); item_wear_hdl[11] = handle(lhand_str); item_wear_hdl[12] = handle(rfinger_str); item_wear_hdl[13] = handle(feet_str); item_wear_hdl[14] = handle(lfinger_str); item_wear_hdl[15] = handle(unwearable_str); //***************** ADD/CHANGE YOUR AVAILABLE ITEMS HERE ******************** // neck - item#'s 0 - 99 // head - item#'s 100 - 199 // back - item#'s 200 - 299 // right - shoulder item#'s 300 - 399 // body - item#'s 400 - 499 // left shoulder - item#'s 500 - 599 // right arm - item#'s 600 - 699 // waist - item#'s 700 - 799 // left arm - item#'s 800 - 899 bitmap_hdl[800] = handle(shield_bmp); item_description_hdl[800] = handle(large_shld_str); bitmap_hdl[801] = handle(red_shield_bmp); item_description_hdl[801] = handle(large_shld_plus1_str); item_skill_10[801] = 1; // +1 to AC // right hand - item#'s 900 - 999 bitmap_hdl[900] = handle(mace_bmp); item_description_hdl[900] = handle(mace_str); bitmap_hdl[901] = handle(staff_bmp); item_description_hdl[901] = handle(staff_str); // legs - item#'s 1000 - 1999 //left hand - item#'s 1100 - 1199 bitmap_hdl[1100] = handle(cigs_bmp); item_description_hdl[1100] = handle(cig_str); item_skill_9[1100] = -10; bitmap_hdl[1101] = handle(fish_bmp); item_description_hdl[1101] = handle(fish_str); item_skill_9[1101] = 10; // right finger - item#'s 1200 - 1299 // feet - item#'s 1300 - 1399 // left finger - item#'s 1400 - 1499 // can't be equipped - item#'s 1500 - 1599 bitmap_hdl[1500] = handle(lamp_bmp); item_description_hdl[1500] = handle(lamp_str); bitmap_hdl[1509] = handle(power_pill_bmp); item_description_hdl[1509] = handle(power_pill_str); item_skill_9[1509] = 20; // add 1-20 hp when used // no item bitmap - item# 1600 //************************************************************************** bitmap_hdl[NO_ITEM] = handle(no_item_bmp); }
// displays selected item by mouse pointer function display_sel_item() { while(1) { while (sel_item_pnl.visible == on) { sel_item_pnl.pos_x = mouse_pos.x - 51; sel_item_pnl.pos_y = mouse_pos.y - 25; wait(1); } wait(1); } }
// displays the inventory and equipped panels // our good friend, the handle, hehe // basically this gets the item_number from the inventory slot array // then gets a pointer from the handle array of bitmaps we set up in init_items() function display_inv() { while(1) { item_cmd_pnl.bmap = ptr_for_handle(item_cmd_hdl[item_command]); equipped_neck_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[0]]); equipped_head_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[1]]); equipped_back_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[2]]); equipped_rshldr_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[3]]); equipped_body_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[4]]); equipped_lshldr_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[5]]); equipped_rarm_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[6]]); equipped_waist_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[7]]); equipped_larm_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[8]]); equipped_rhand_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[9]]); equipped_legs_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[10]]); equipped_lhand_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[11]]); equipped_rfinger_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[12]]); equipped_feet_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[13]]); equipped_lfinger_pnl.bmap = ptr_for_handle(bitmap_hdl[equipped_index[14]]); index = (int(slider_pos) * 3); item0_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index]]); item1_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+1]]); item2_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+2]]); item3_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+3]]); item4_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+4]]); item5_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+5]]); item6_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+6]]); item7_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+7]]); item8_pnl.bmap = ptr_for_handle(bitmap_hdl[inv_index[index+8]]); wait(1); } }
function display_merc_inv() { while(1) { merc_item0_pnl.bmap = ptr_for_handle(bitmap_hdl[merc_inv_index[0]]); merc_item1_pnl.bmap = ptr_for_handle(bitmap_hdl[merc_inv_index[1]]); merc_item2_pnl.bmap = ptr_for_handle(bitmap_hdl[merc_inv_index[2]]); merc_item3_pnl.bmap = ptr_for_handle(bitmap_hdl[merc_inv_index[3]]); merc_item4_pnl.bmap = ptr_for_handle(bitmap_hdl[merc_inv_index[4]]); merc_item5_pnl.bmap = ptr_for_handle(bitmap_hdl[merc_inv_index[5]]); wait(1); } }
// set's item entity's skills when an item is dropped function reset_item_skills() { you.skill4 = item_skill_4[item_sel_num]; you.skill9 = item_skill_9[item_sel_num]; you.skill10 = item_skill_10[item_sel_num]; }
// drops the item onto the level function drop_item() { //******* use this code when using player variable ********** me = player; // when using player variable view_item_txt1.visible = off; view_item_txt2.visible = off; view_item_pnl.visible = off; if (drop_loc_set != 1) // if not dropping at another items position, drop at player pos { vec_set(drop_vector, my.pos); drop_vector.x += random(60) - 30; drop_vector.y -= random(60) - 30; } else { drop_loc_set = 0; } //********************************************* //********** Third person code ************************** /*me = warlock; // for 3rd person drop_vector.x = pointer.x; //*** save mouse x drop_vector.y = pointer.y; //*** save mouse y drop_vector.z = 500; //*** put z above, it will trace down to surface and add item there vec_for_screen (drop_vector, camera); //*** get vector */ //********************************************** if (item_sel_num != NO_ITEM) // if we have item selected drop it at mouse pointer { //****************** ADD YOUR ITEMS HERE FOR DROP ************************** if (item_sel_num == 800) { ent_create(shield_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 801) { you = ent_create(red_shield_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 900) { you = ent_create(mace_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 901) { you = ent_create(staff_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 1100) { you = ent_create(cigs_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 1101) { you = ent_create(fish_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 1500) { you = ent_create(lamp_mdl,drop_vector,item_function); reset_item_skills();} if (item_sel_num == 1509) { you = ent_create(power_pill_mdl,drop_vector,item_function); reset_item_skills();} //************************************************************************** item_sel_num = NO_ITEM; sel_item_pnl.visible = off; } }
function save_screen() { screenshot("inventory",1); }
function attach() { my = temp_item; while(my) { vec_set(my.pan,player.pan); // set pan to owner's pan vec_set(my.X,player.X); // get position of weapon wait(1); } }
function attach_item() { //******** put attachable items here to be attached if equipped ******** if (item_sel_num == 800) //shield { temp_item = ent_create(shield_mdl,nullvector,attach_armor); equipped_ent_hdl[equipped_pnl_sel] = handle(temp_item); attach(); } if (item_sel_num == 900) //mace { temp_item = ent_create(mace_mdl,nullvector,attach_entity); equipped_ent_hdl[equipped_pnl_sel] = handle(temp_item); attach(); handle_mace_collision(); } if (item_sel_num == 901) //staff { temp_item = ent_create(staff_mdl,nullvector,attach_entity); equipped_ent_hdl[equipped_pnl_sel] = handle(temp_item); attach(); } }
function remove_item() { //********* put attachable items here to be removed if unequipped ******* if (temp_item_num == 800) //shield { temp_item = ptr_for_handle(equipped_ent_hdl[equipped_pnl_sel]); ent_remove(temp_item); } if (temp_item_num == 900) //mace { temp_item = ptr_for_handle(equipped_ent_hdl[equipped_pnl_sel]); ent_remove(temp_item); } if (temp_item_num == 901) //staff { temp_item = ptr_for_handle(equipped_ent_hdl[equipped_pnl_sel]); ent_remove(temp_item); } }
function switch_item_cmd() { if (item_command == MOVE_ITEM) { item_command = USE_ITEM; } else { if (item_command == USE_ITEM) { item_command = VIEW_ITEM; } else { item_command = MOVE_ITEM; view_item_txt1.visible = off; view_item_txt2.visible = off; view_item_pnl.visible = off; } } }
function get_wear_str() { wear_item_num = int(wear_item_num/100); str_cpy(wear_str, ptr_for_handle(item_wear_hdl[wear_item_num])); }
function loot_off() { // save merchant inventory, what was not taken my.itemcarry0 = merc_inv_index[0]; my.itemcarry1 = merc_inv_index[1]; my.itemcarry2 = merc_inv_index[2]; my.itemcarry3 = merc_inv_index[3]; my.itemcarry4 = merc_inv_index[4]; my.itemcarry5 = merc_inv_index[5]; merc_inventory_pnl.visible = off; merc_item0_pnl.visible = off; merc_item1_pnl.visible = off; merc_item2_pnl.visible = off; merc_item3_pnl.visible = off; merc_item4_pnl.visible = off; merc_item5_pnl.visible = off; }
function toggle_inventory() { if (inventory_display == OFF) { inventory_display = ON; item_cmd_pnl.visible = on; equipped_pnl.visible = on; inv_head_pnl.visible = on; inventory_pnl.visible = on; equipped_pnl.visible = on; equipped_neck_pnl.visible = on; equipped_head_pnl.visible = on; equipped_back_pnl.visible = on; equipped_rshldr_pnl.visible = on; equipped_body_pnl.visible = on; equipped_lshldr_pnl.visible = on; equipped_rarm_pnl.visible = on; equipped_waist_pnl.visible = on; equipped_larm_pnl.visible = on; equipped_rhand_pnl.visible = on; equipped_legs_pnl.visible = on; equipped_lhand_pnl.visible = on; equipped_rfinger_pnl.visible = on; equipped_feet_pnl.visible = on; equipped_lfinger_pnl.visible = on; item0_pnl.visible = on; item1_pnl.visible = on; item2_pnl.visible = on; item3_pnl.visible = on; item4_pnl.visible = on; item5_pnl.visible = on; item6_pnl.visible = on; item7_pnl.visible = on; item8_pnl.visible = on; } else { inventory_display = off; item_cmd_pnl.visible = off; inv_head_pnl.visible = off; inventory_pnl.visible = off; equipped_pnl.visible = off; equipped_neck_pnl.visible = off; equipped_head_pnl.visible = off; equipped_back_pnl.visible = off; equipped_rshldr_pnl.visible = off; equipped_body_pnl.visible = off; equipped_lshldr_pnl.visible = off; equipped_rarm_pnl.visible = off; equipped_waist_pnl.visible = off; equipped_larm_pnl.visible = off; equipped_rhand_pnl.visible = off; equipped_legs_pnl.visible = off; equipped_lhand_pnl.visible = off; equipped_rfinger_pnl.visible = off; equipped_feet_pnl.visible = off; equipped_lfinger_pnl.visible = off; item0_pnl.visible = off; item1_pnl.visible = off; item2_pnl.visible = off; item3_pnl.visible = off; item4_pnl.visible = off; item5_pnl.visible = off; item6_pnl.visible = off; item7_pnl.visible = off; item8_pnl.visible = off; } }
on_d drop_item(); on_f1 save_screen(); on_u switch_item_cmd(); on_i toggle_inventory();
Empty pointer in load_merc_inv_panel: (vec_dist(player.x, player.y) <= ITEM_PICKUP_RANGE)
Empty pointer in drop_item: vec_set(drop_vector, my.pos); drop_vector.x += random(60) - 30; drop_vector.y -= random(60) - 30;
Anyone knows why does this happend? Thanks in advance.
Last edited by Mythran; 11/23/07 21:24.
|
|
|
|