‘еXPА №Wчiq1IA›ЯѕOћVXџџџџџО Ј( @€ЯаРПпрАяЏ  я(№/№/я(я рŸ 0№/8џ0@џ0?џ/8№ 0я(р п?Gџ@PџOWџOXџOPџ?Hџ0@№/7я@Oџ_`џ`hџ_hџPXџ 0р(пP_џopџpxџowџ_gџ@O№/8я'п'р 7№pџ€џ‡џ`oџ?Gя/7р Я€0?№€ˆџ?Hя/8р`/пo?G№OX№@Hя0?р/аpOW№?Hр/8п 7яOPя?Gр/7п(Я РP0@яPX№@Oя0@п 0аO а@H№/Я@'а 0п0@р@P№0?п'Я_OP№@Hр(а 7п/7а'Р Пџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ^^^^^^^^^^џџџџџџџџџџџџџџџџџџџџ^^^^^^^^^^^^^^џџџџџџџџџџџџџџџџ^^TeeBBBBeTT^^^^^^џџџџџџџџџџџџџ^eBDJ33333JJDBeZ^^^^џџџџџџџџџџџTD33==#####==3JDBT^^^^џџџџџџџџџeJ=###=3DeZ^^TџџџџџџџB3# #=3JBZ^^Tџџџџџџ3#  #=JBT^^џџџџџJ# Sll #=JBZ^Tџџџџ# %,68??86,/@A*< ##џџџџ45('.6787-9%:;*<=#џџџџџ$+&,--.,/01)2 3џџџџџџ $%&&'%($!)* ##џџџџџџџ  !"#џџџџџџџџџ  џџџџџџџџџџџ  џџџџџџџџџџџџџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџРџџџќџј№?рРР€€€€РРр№?јќџџџџРџdЄBь•” т@ spr_character  Œxœsђ5уa3 жb(fd€H@хQ@ƒБˆ<]D›љ QС. 3q!rl!Юdt[Јъlr‹H0"fЄ motion_blurь/* ** Usage: ** motion_blur(length,direction) ** ** Arguments: ** length length of blur ** direction direction of the blur ** ** Returns: ** nothing ** ** Notes: ** Example of use (draw event): motion_blur(speed*2,direction); ** Please also remember that the script is compatible with ** image_alpha. For example: If image_alpha is 0.5 then whole ** motion blur will have half tranparency. ** ** GMLscripts.com */ { length = argument[0]; if (length > 0) { step = 3; dir = degtorad(argument[1]); px = cos(dir); py = -sin(dir); a = image_alpha/(length/step); if (a >= 1) { draw_sprite_ext(sprite_index,image_index,x,y,image_xscale, image_yscale,image_angle,image_blend,image_alpha); a /= 2; } for(i=length;i>=0;i-=step) { draw_sprite_ext(sprite_index,image_index,x+(px*i),y+(py*i), image_xscale,image_yscale,image_angle,image_blend,a); } } else { draw_sprite_ext(sprite_index,image_index,x,y,image_xscale, image_yscale,image_angle,image_blend,image_alpha); } }draw_character////////////Can't be arsed to keep redoing the draw_ext code, so I just whipped this up. ///////////Arguments - none //////////Usage - draw_character() draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);є  obj_characterЎџџџџœџџџџџџџ И[џџџџB//////////////range of activating telekenisis on an object spellrange = 200; ///////////////// telekentic power. Note that the greater power, the more unstable the held objects are. A good power should be between 3 and 10 depending on how heavy the objects being lifted are. global.pullpower = 5; global.debug = true0000000џџџџџџџџџџџџИ[џџџџ|///////////movement script - couldn't be arsed to actually do real platforming movement. Just replace this with your own movement code ^_^ if keyboard_check(ord('A')){x-=5}; if keyboard_check(ord('D')){x+=5}; if keyboard_check(ord('W')){y-=5}; if keyboard_check(ord('S')){y+=5}; ////////toggle debug circles if keyboard_check_pressed(vk_space){global.debug = !global.debug};0000000џџџџџџџџџџџџџџџџџџџџИ[џџџџЇdraw_set_color(c_black); ////////draw the range of the spell if global.debug = true draw_circle(x,y,spellrange,true) ////////draw the character draw_character() 0000000џџџџџџџџџџџџobj_moveparentЎџџџџœџџџџџџџ џџџџџџџџџџџџИ[џџџџ&////////// leave this whole part alone maxspeed = 30 if mouse_check_button_pressed(mb_left) and point_distance(x,y,obj_character.x,obj_character.y) < obj_character.spellrange {spellon = true;}; if mouse_check_button_pressed(mb_right) and point_distance(x,y,obj_character.x,obj_character.y) < obj_character.spellrange {motion_add(point_direction(obj_character.x,obj_character.y,x,y),(global.pullpower/weight)*5);}; if mouse_check_button_released(mb_left) or point_distance(x,y,mouse_x,mouse_y) > 400 {spellon = false;}; if spellon = true and point_distance(x,y,mouse_x,mouse_y) < 400 {motion_add(point_direction(x,y,mouse_x,mouse_y),global.pullpower/weight); friction = (global.pullpower)/2 if friction > 10 friction = 10; gravity = weight/(1+global.pullpower/5); if vspeed > maxspeed vspeed = maxspeed;} else { friction = 0; gravity = 1; if vspeed > weight*20 vspeed = weight*20; } ////////terminal speeds if vspeed < -maxspeed vspeed = -maxspeed; if hspeed > maxspeed hspeed = maxspeed; if hspeed < -maxspeed hspeed = -maxspeed;0000000џџџџИ[џџџџдif speed > 0 move_contact_solid(direction,speed) ////////Bounce against the floor and lose momentum based on the bounce of the object move_bounce_solid(true) speed = (speed-bounce*12) if speed < 0 speed = 00000000И[џџџџЋmove_contact_solid(direction,speed) //////Bounce against the wall and lose a bit of momentum move_bounce_solid(true) speed = (speed-5+bounce*3) if speed < 1 speed = 10000000џџџџџџџџџџџџџџџџИ[џџџџ'///////////speaks for itself image_angle = point_direction(x,y,xprevious,yprevious); ///////////draw the sprite and blur motion_blur(point_distance(x,y,xprevious,yprevious),point_direction(x,y,xprevious,yprevious)); //////////draws the range of the spell and other things. use for debugging purposes only if spellon = true { if global.debug = true {draw_circle(x,y,400,true) draw_circle(mouse_x,mouse_y,400,true) } draw_line_color(x,y,mouse_x,mouse_y,c_blue,c_aqua); draw_line_color(x,y,obj_character.x,obj_character.y,c_red,c_maroon); };0000000џџџџџџџџџџџџ obj_crateЎџџџџ И[џџџџАspellon = false; //////////weight MUST be above 0. No weight will cause an error among other problems. Weight should be between .5 (Extremely light) to 2 (Quite heavy). //////////Please note - heavier objects are harder to move, control, and lift. /////////bounce should be between 0 (infinitely bouncy) and 1 (Not very bouncy). Anything outside of this range may cause errors or other undesirables weight = 1; bounce = .5; 0000000џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџobj_wallЎџџџџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ obj_startЎџџџџ2œџџџџџџџ ИBaction_show_infoџџџџ00000000џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ wallparentЎџџџџœџџџџџџџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ floorparentЎџџџџœџџџџџџџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ obj_floorЎџџџџ џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџobj_ballЎџџџџ И[џџџџГspellon = false; //////////weight MUST be above 0. No weight will cause an error among other problems. Weight should be between .5 (Extremely light) to 2 (Quite heavy). //////////Please note - heavier objects are harder to move, control, and lift. /////////bounce should be between 0 (infinitely bouncy) and 1 (Not very bouncy). Anything outside of this range may cause errors or other undesirables weight = 1.2; bounce = .25; 0000000џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџЄroom0€р<џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџ€р€р џџџџџџџџџџџџYР@‡№аЁ†0№Ђ†@Ѓ†pPЄ†РЉ†`РМ†Н† О†@П†`Р†€Т† У†РХ†рЦ†Ч†`Щ† Ь†@Э†€Ю† Я†Ра†рб†@д†`е† ж†з†` и†`€к†``л†`@м†` н†`Рп†`р†`рс†` т†`@ф†`€ц†``ч†` ш† щ†€ъ†`ы†@ь† э†ю†ря†Р№† ё†€ѓ†`є†@ѕ† і†€@ј†€њ†€€ћ† Рў†@Рџ†`Р‡€Р‡ Р‡РР‡рЇЇ Р‡@Р ‡`Р ‡€Р ‡РР ‡рЇЇ Р‡@Р‡ Р‡`@‡ €‡р‡р€‡ €‡€ ‡№ ‡а@ ‡` ‡@@ ‡  ‡€ ‡  !‡Р€ "‡АЅ†"‡€–˜XџџџGame InformationџџџџџџџџXn{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}} {\colortbl ;\red0\green0\blue0;} \viewkind4\uc1\pard\qc\cf1\b\fs32 Necromian's Simple Physics Engine \par \b0\fs24 \par Move with the WASD keys \par (Note, this is topdown movement, I was too busy improving the physics rather than turning it into a full fledged platforming engine. So sue me). \par \par Click and hold the left mouse button while blocks are within your casting radius to cast telekinesis on them. During telekinesis, the block will move towards the mouse. While using telekinesis, you can move the block as far away from the character as you want, but if the block gets too far from the mouse, the telekinesis stops. You can use this to your advantage when you want to fling objects. \par \par Click the right mouse button to cause blocks to shoot away. \par \par Press the Spacebar to toggle those black circles that are used for debug purposes only. \par \par All of the physics is already worked out in the step event of the 'obj_moveparent' object. If you want to make a new object with the telekinesis physics applied, follow the following steps- \par -Make sure the object has a sprite. \par -Make the parent 'obj_moveparent' \par -In the create event of the object, put the code "spellon = false;" \par -Define the weight and bounce of the object (Check the comments in the create event of obj_crate or obj_ball for more details on this) \par \par Everything else you should be able to figure out from my comments. \par \par Credits to GMLscripts for the motion blur script. Give credit to me where due. \par } єSprites spr_characterspr_ball spr_crate spr_blockSounds BackgroundsPathsScripts motion_blurdraw_character Fonts Time LinesObjects  obj_character obj_ballobj_moveparent obj_crateobj_wall obj_floor wallparent floorparent obj_startRoomsroom0 Game Information Global Game Settings