Add project code
This commit is contained in:
36
objects/o_player/Create_0.gml
Normal file
36
objects/o_player/Create_0.gml
Normal file
@@ -0,0 +1,36 @@
|
||||
// Vital stats
|
||||
get_damaged_create(200, true);
|
||||
|
||||
|
||||
// Movement variables
|
||||
move_dir = 0;
|
||||
move_spd = 2;
|
||||
x_speed = 0;
|
||||
y_speed = 0;
|
||||
|
||||
// Aiming variables
|
||||
center_y_offset = -5;
|
||||
center_y = y + center_y_offset;
|
||||
aim_dir = 0;
|
||||
|
||||
// Sprite controls
|
||||
face = 1;
|
||||
sprites[0] = s_player_idle;
|
||||
sprites[1] = s_player_walk;
|
||||
sprites[2] = s_player_attack;
|
||||
sprites[3] = s_player_hurt;
|
||||
sprites[4] = s_player_death;
|
||||
sprites[5] = s_player_heal;
|
||||
|
||||
sprite_index = sprites[0];
|
||||
|
||||
// Weapon info
|
||||
shoot_timer = 0;
|
||||
heal_timer = 0;
|
||||
heal_cooldown = 30 * 60;
|
||||
weapon_offset_dist = 5;
|
||||
weapon_length = sprite_get_bbox_right(s_aimer) - sprite_get_xoffset(s_aimer);
|
||||
|
||||
// Add weapon to player's inventory
|
||||
selected_weapon = 0;
|
||||
weapon = global.PlayerWeapons[selected_weapon];
|
||||
10
objects/o_player/Draw_0.gml
Normal file
10
objects/o_player/Draw_0.gml
Normal file
@@ -0,0 +1,10 @@
|
||||
if aim_dir >= 0 && aim_dir < 180 {
|
||||
draw_own_weapon();
|
||||
}
|
||||
|
||||
|
||||
draw_sprite_ext(sprite_index, image_index, x, y, face, image_yscale, image_angle, image_blend, image_alpha);
|
||||
|
||||
if aim_dir >= 180 && aim_dir < 360 {
|
||||
draw_own_weapon();
|
||||
}
|
||||
4
objects/o_player/Other_7.gml
Normal file
4
objects/o_player/Other_7.gml
Normal file
@@ -0,0 +1,4 @@
|
||||
if sprite_index == sprites[4] {
|
||||
instance_create_depth(0, 0, -10000, o_game_over);
|
||||
instance_destroy();
|
||||
}
|
||||
143
objects/o_player/Step_0.gml
Normal file
143
objects/o_player/Step_0.gml
Normal file
@@ -0,0 +1,143 @@
|
||||
var right_key = global.right_key;
|
||||
var left_key = global.left_key;
|
||||
var up_key = global.up_key;
|
||||
var down_key = global.down_key;
|
||||
var shoot_key = global.shoot_key;
|
||||
var swap_key_pressed = global.swap_key_pressed;
|
||||
var heal_key_pressed = global.heal_key_pressed;
|
||||
var pause_key_pressed = global.pause_key_pressed;
|
||||
|
||||
// Pause game
|
||||
if pause_key_pressed {
|
||||
if !instance_exists(o_pause_menu) {
|
||||
instance_create_depth(0, 0, -10000, o_pause_menu);
|
||||
} else {
|
||||
instance_destroy(o_pause_menu);
|
||||
}
|
||||
}
|
||||
|
||||
if pause_movement() { exit; }
|
||||
|
||||
// Movements
|
||||
#region
|
||||
var _horizontal_key = right_key - left_key;
|
||||
var _vertical_key = down_key - up_key;
|
||||
move_dir = point_direction(0, 0, _horizontal_key, _vertical_key);
|
||||
|
||||
// Speeds
|
||||
var _speed = 0;
|
||||
var _input_lvl = point_distance(0, 0, _horizontal_key, _vertical_key);
|
||||
_input_lvl = clamp(_input_lvl, 0 , 1);
|
||||
_speed = move_spd * _input_lvl;
|
||||
|
||||
x_speed = lengthdir_x(_speed, move_dir);
|
||||
y_speed = lengthdir_y(_speed, move_dir);
|
||||
|
||||
// Collision
|
||||
if place_meeting(x + x_speed, y, o_wall) {
|
||||
x_speed = 0;
|
||||
}
|
||||
if place_meeting(x, y + y_speed, o_wall) {
|
||||
y_speed = 0;
|
||||
}
|
||||
|
||||
x += x_speed;
|
||||
y += y_speed;
|
||||
|
||||
depth = -600;
|
||||
#endregion
|
||||
|
||||
// Sprite controls
|
||||
#region
|
||||
// Determine if the player is moving
|
||||
var is_moving = (_horizontal_key != 0 || _vertical_key != 0);
|
||||
|
||||
// Update animation based on movement
|
||||
if (is_moving) {
|
||||
sprite_index = sprites[1]; // Walking animation
|
||||
} else {
|
||||
sprite_index = sprites[0]; // Idle animation
|
||||
}
|
||||
|
||||
// Determine facing direction
|
||||
if (_horizontal_key != 0) {
|
||||
face = sign(_horizontal_key);
|
||||
} else if (!is_moving) {
|
||||
var _mouse_x_offset = mouse_x - x;
|
||||
face = (_mouse_x_offset > 0) ? 1 : -1;
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Get damaged
|
||||
if get_damaged(o_player_hurt, true) {
|
||||
audio_play_sound(hurt_sound, 0, false);
|
||||
create_screen_pause(6);
|
||||
camera_shake(6);
|
||||
}
|
||||
|
||||
// Aiming
|
||||
#region
|
||||
center_y = y + center_y_offset;
|
||||
aim_dir = point_direction(x, center_y, mouse_x, mouse_y)
|
||||
#endregion
|
||||
|
||||
// Shooting
|
||||
#region
|
||||
if shoot_key {
|
||||
sprite_index = sprites[2];
|
||||
}
|
||||
|
||||
if shoot_timer > 0 {
|
||||
shoot_timer--;
|
||||
}
|
||||
|
||||
if shoot_key && shoot_timer <= 0 {
|
||||
|
||||
shoot_timer = weapon.cooldown;
|
||||
|
||||
var _x_offset = lengthdir_x(weapon_length + weapon_offset_dist, aim_dir);
|
||||
var _y_offset = lengthdir_y(weapon_length + weapon_offset_dist, aim_dir);
|
||||
|
||||
var _spread = weapon.bullet_spread;
|
||||
var _spread_div = _spread / max(weapon.bullet_num - 1, 1);
|
||||
|
||||
for (var i = 0; i < weapon.bullet_num; i++) {
|
||||
var _bullet_inst = instance_create_depth(x + _x_offset + i*10, center_y + _y_offset, depth-50, weapon.bullet_obj);
|
||||
with (_bullet_inst) {
|
||||
bullet_dir = other.aim_dir - _spread/2 + _spread_div*i;
|
||||
image_angle = bullet_dir;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Heal
|
||||
#region
|
||||
if (heal_timer > 0) {
|
||||
heal_timer--; // Reduce cooldown timer each step
|
||||
}
|
||||
|
||||
if (heal_key_pressed && heal_timer <= 0) {
|
||||
instance_create_depth(x, y, depth - 100, o_heal); // Spawn heal effect
|
||||
sprite_index = sprites[5]; // Play heal animation
|
||||
heal_timer = heal_cooldown; // Set cooldown
|
||||
audio_play_sound(item_pick, 0, false);
|
||||
hp += 20;
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Swap weapons
|
||||
#region
|
||||
var _player_weapons = global.PlayerWeapons;
|
||||
if swap_key_pressed {
|
||||
selected_weapon++;
|
||||
if selected_weapon >= array_length(_player_weapons) {
|
||||
selected_weapon = 0;
|
||||
}
|
||||
weapon = _player_weapons[selected_weapon];
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Die
|
||||
is_dying(sprites[4]);
|
||||
|
||||
41
objects/o_player/o_player.yy
generated
Normal file
41
objects/o_player/o_player.yy
generated
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"$GMObject":"",
|
||||
"%Name":"o_player",
|
||||
"eventList":[
|
||||
{"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
|
||||
{"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":3,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
|
||||
{"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":0,"eventType":8,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
|
||||
{"$GMEvent":"v1","%Name":"","collisionObjectId":null,"eventNum":7,"eventType":7,"isDnD":false,"name":"","resourceType":"GMEvent","resourceVersion":"2.0",},
|
||||
],
|
||||
"managed":true,
|
||||
"name":"o_player",
|
||||
"overriddenProperties":[],
|
||||
"parent":{
|
||||
"name":"Player",
|
||||
"path":"folders/Player.yy",
|
||||
},
|
||||
"parentObjectId":null,
|
||||
"persistent":false,
|
||||
"physicsAngularDamping":0.1,
|
||||
"physicsDensity":0.5,
|
||||
"physicsFriction":0.2,
|
||||
"physicsGroup":1,
|
||||
"physicsKinematic":false,
|
||||
"physicsLinearDamping":0.1,
|
||||
"physicsObject":false,
|
||||
"physicsRestitution":0.1,
|
||||
"physicsSensor":false,
|
||||
"physicsShape":1,
|
||||
"physicsShapePoints":[],
|
||||
"physicsStartAwake":true,
|
||||
"properties":[],
|
||||
"resourceType":"GMObject",
|
||||
"resourceVersion":"2.0",
|
||||
"solid":false,
|
||||
"spriteId":{
|
||||
"name":"s_player_walk",
|
||||
"path":"sprites/s_player_walk/s_player_walk.yy",
|
||||
},
|
||||
"spriteMaskId":null,
|
||||
"visible":true,
|
||||
}
|
||||
Reference in New Issue
Block a user