Thursday, 15 April 2021

【GAMEMAKER】HUD show spells, inventory, change HP, XP, Gold, and weapon

 Information about object: obj_player

Sprite: spr_idle_down
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:
No Physics Object
Create Event:
execute code:

///set up
enum player_state {
    idle,
    up,
    down,
    left,
    right
    }

dir=player_state.down;
is_moving=false;
image_speed=0.5;

can_show_message=true; //allows message to be shown
Alarm Event for alarm 0:
execute code:

can_show_message=true;
Step Event:
execute code:

///keypress code
if (keyboard_check(vk_left))
{
    dir=player_state.left;
    is_moving=true;
}
else
if (keyboard_check(vk_right))
{
    dir=player_state.right;
    is_moving=true;
}
else
if (keyboard_check(vk_up))
{
    dir=player_state.up;
    is_moving=true;
}
else
if (keyboard_check(vk_down))
{
    dir=player_state.down;
    is_moving=true;
}
else
{
    is_moving=false;
}


execute code:

///movement
if is_moving
{
    switch (dir)
    {
        case player_state.up:
        y -= 4;
        break;

        case player_state.down:
        y += 4;
        break;

        case player_state.left:
        x -= 4;
        break;
   
        case player_state.right:
        x += 4;
        break;
    }
}


execute code:

///animation
if is_moving
{
    switch (dir)
    {
        case player_state.up:
        sprite_index=spr_walk_up;
        break;

        case player_state.down:
        sprite_index=spr_walk_down;
        break;

        case player_state.left:
        sprite_index=spr_walk_left;
        break;
   
        case player_state.right:
        sprite_index=spr_walk_right;
        break;
    }
}
else
{
    switch (dir)
    {
        case player_state.up:
        sprite_index=spr_idle_up;
        break;

        case player_state.down:
        sprite_index=spr_idle_down;
        break;

        case player_state.left:
        sprite_index=spr_idle_left;
        break;
   
        case player_state.right:
        sprite_index=spr_idle_right;
        break;
    }
}

execute code:

///collision with object for message
Collision Event with object obj_message_item:
execute code:

if can_show_message
{
    can_show_message=false;
    scr_message(other.message);
    alarm[0]=room_speed*3;
}

Information about object: obj_message
Sprite:
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:
No Physics Object
Create Event:
execute code:

global.message=ds_list_create();//create a ds list to hold messages
can_show=true;//set that a message can show
to_draw="";//set text to draw to ""
show_text="";
count=0;

Alarm Event for alarm 0:
execute code:

///alarm0 set alarm1
alarm[1]=room_speed*1;//create a short pause
to_draw="";//remove text to show
show_text="";
count=0;
Alarm Event for alarm 1:
execute code:

///set as able to show
can_show=true;
Step Event:
execute code:

///check if message waiting
check=ds_list_size(global.message);//get no of messages waiting
if check>0 && can_show//do this if more than one message and can show
{
    to_draw=ds_list_find_value(global.message,0);//get message from top of ds list
    ds_list_delete(global.message,0);//delete this message
    can_show=false;//prevent showing
    alarm[0]=room_speed*4;//create a pause
}
if(string_length(show_text) < string_length(to_draw))
{
show_text = string_copy(to_draw,1,count);
alarm[0] = room_speed*5;
count +=1;
}
Draw GUI Event:
execute code:

///draw message

if to_draw!=""//do if there is a message waiting
{
    draw_set_alpha(0.5);
    //set up
    var xx=350;
    var yy=250;
    var padding=10;
    var border_size=2;
    var width =string_width(to_draw) + padding * 2; // width of message
    var height = string_height(to_draw) + padding * 2; 
    //draw background sprite
    draw_sprite(spr_message_bg,0,xx,yy);
    
    //draw border of message
    draw_set_colour(c_blue);
    draw_roundrect(xx-(width/2)-border_size,
    yy-(height/2)-border_size,xx+(width/2)+border_size,yy+(height/2)+border_size,false);
    //draw main message background
    draw_set_colour(c_aqua);
    draw_roundrect(xx-(width/2),
    yy-(height/2),xx+(width/2),yy+(height/2),false);
    //draw a message
    draw_set_font(font_message);
    draw_set_halign(fa_center);
    draw_set_valign(fa_middle);
    draw_set_colour(c_red);
    draw_text(xx+1,yy+1,show_text);
    draw_set_colour(c_black);
    draw_text(xx,yy,show_text);
    draw_set_alpha(1);
}

Information about object: obj_message_item
Sprite:
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children
obj_door
obj_banana
obj_rum
obj_chest
Mask:
No Physics Object

Information about object: obj_door
Sprite: spr_door
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: obj_message_item
Children:
Mask:
No Physics Object
Create Event:
execute code:

message="You Need A Key To Open This";

Information about object: obj_banana
Sprite: spr_banana
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: obj_message_item
Children:
Mask:
No Physics Object
Create Event:
execute code:

message="Press P To Pick Up Banana";

Information about object: obj_rum
Sprite: spr_rum
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: obj_message_item
Children:
Mask:
No Physics Object
Create Event:
execute code:

message="Press M To Drink The Rum";

Information about object: obj_chest
Sprite: spr_chest
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: obj_message_item
Children:
Mask:
No Physics Object
Create Event:
execute code:

message="Press K To Use The Key";

Information about object: obj_hud
Sprite: spr_hud
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent:
Children:
Mask:
No Physics Object
Create Event:
execute code:

///Set Up Varaibles For Testing / Example
//In your own game you'd set initial values
//in a splash screen or load saved data
//spells
can_show_spells=false; // flag as to whether popup shows
can_show_inventory=false;
global.ice_spell=5;
global.earth_spell=2;
global.fire_spell=8;
global.water_spell=1;
//hp and xp
global.hp=80;
global.xp=35;
//gold
global.gold=1150;
//weapon
global.weapon=0;//starts at 0 as using sub images start at index 0



Step Event:
execute code:

///Keyboard Control
//show / hide spells popup
if keyboard_check_pressed(ord('S'))
{
    can_show_spells=!can_show_spells;
}
//show / hide inventory popup
if keyboard_check_pressed(ord('I'))
{
    can_show_inventory=!can_show_inventory;
}

execute code:

///Following For Testing - To Allow changing of variables
if keyboard_check(ord('Q'))
{
    global.hp++;
}
if keyboard_check(ord('A'))
{
    global.hp--;
    if global.hp<0 global.hp=0;
}
if keyboard_check(ord('E'))
{
    global.xp++;
}
if keyboard_check(ord('D'))
{
    global.xp--;
    if global.xp<0 global.xp=0;
}
if keyboard_check(ord('R'))
{
    global.gold++;
}
if keyboard_check(ord('F'))
{
    global.gold--;
    if global.gold<0 global.gold=0;
}
if keyboard_check_pressed(ord('W'))
{
    global.weapon++;
    if global.weapon==3 global.weapon=0;
}
Draw Event:
execute code:

///this comment prevents default drawing
Draw GUI Event:
execute code:

///draw self - frame
draw_self();
execute code:

///Format text
draw_set_font(font_info);
draw_set_halign(fa_left);
draw_set_valign(fa_middle);
draw_set_colour(c_yellow);
execute code:

///draw spell popup
if can_show_spells
{
    draw_set_alpha(0.5); // set as half transparent
    draw_sprite(spr_popup_spells,0,350,200);
    draw_set_alpha(1); //reset transparency
    draw_text(142,180,global.earth_spell);
    draw_text(274,180,global.fire_spell);
    draw_text(416,180,global.ice_spell);
    draw_text(551,180,global.water_spell);

}
execute code:

///Draw hp, xp & level
draw_hp=global.hp mod 100;
draw_xp=global.xp mod 100;
draw_level=(global.xp div 100)+1;
//hp
draw_text(60,552,"HP:"+string(global.hp));

for (var loop = 0; loop < draw_hp; loop += 1)
{
    draw_line(135+loop,547,135+loop,557);
}
draw_set_colour(c_black);
draw_roundrect(135,547,230,557,true);
draw_roundrect(134,546,231,558,true);
draw_set_colour(c_yellow);
//xp

draw_text(60,582,"XP: "+string(draw_xp));

draw_set_colour(c_teal);
for (var loop = 0; loop < draw_xp; loop += 1)
{
    draw_line(135+loop,577,135+loop,587);
}
draw_set_colour(c_black);
draw_roundrect(135,577,230,587,true);
draw_roundrect(134,576,231,588,true);
draw_set_colour(c_yellow);
//level 
draw_set_halign(fa_center);
draw_text(150,524,"Level: "+string(draw_level));
draw_set_halign(fa_left);
execute code:

///draw gold
draw_text(100,638,"Gold: "+string(global.gold));
execute code:

///draw weapon
switch (global.weapon)
{
  case 0:
  weapon_name="Cutlass";
  break;
  
  case 1:
  weapon_name="Gun";
  break;
  
  case 2:
  weapon_name="Hook";
  break;
}
draw_set_halign(fa_middle);
draw_text(350,522,"Weapon");
draw_text(350,540,weapon_name);
draw_sprite(spr_weapon_1,global.weapon,350,600);



draw_set_halign(fa_left);//reset to preferred default
execute code:

///Draw Inventory
//For example purposes, see Inventory section in the book for a full working example

if can_show_inventory
{
    draw_sprite(spr_inv_bg,0,0,400);
    draw_set_halign(fa_center);
    draw_text(350,420,"Pop Up Inventory System Would Go Here");
    draw_set_font(font_info_small);
    //draw example
    draw_sprite(spr_inv_rum,0,300,450);
    draw_sprite(spr_inv_chest,0,400,450);
}

execute code:

///info
draw_set_font(font_message);
draw_set_halign(fa_left);
draw_text(200,380,"S to show spells - I to show inventory Q A change hp#
E D change xp - R F change gold - W change Weapon");

No comments:

Post a Comment

BREAKING: North Carolina automotive group acquires 7 Upstate dealerships

Breaking news from GSA Business Report Click here to view this message in a browser window. ...