refactored Tsumuri more, and documentation.

pull/91/head
Miepee 5 years ago
parent c3fb373fa3
commit fd3c36076b

@ -34,18 +34,33 @@ hitsound = sndEHit5;
deathsound = sndEDeath1;
platyoffset = -14;
frozenspr = sTsumuriFrozen;
target = 0;
canattack = 1;
image_speed = 0.2;
state = 1;
myangle = 0;
update = 1;
sbstate = 0;
sbmove = 0;
angleprevious = 0;
rotationspeed = 0;
angle = 0;
shouldMove = true;
tsumuriState = 0;
tsumuriDirection = 0;
previousAngle = 0;
rotationSpeed = 0;
falling = false;
xVel = 0;
yVel = 0;
enum TsumuriStates{
FALLING,
BOTTOMFLOOR,
RIGHTWALL,
CEILING,
LEFTWALL,
INNERDOWNRIGHTWALL,
INNERUPRIGHTWALL,
INNERUPLEFTWALL,
INNERDOWNLEFTWALL,
OUTERUPRIGHTWALL,
OUTERDOWNRIGHTWALL,
OUTERDOWNLEFTWALL,
OUTERUPLEFTWALL
}
</string>
</argument>
</arguments>
@ -68,14 +83,15 @@ yVel = 0;
<arguments>
<argument>
<kind>1</kind>
<string>if(sbstate == 0) {
<string>// If Tsumuri is falling, make it fall faster
if(tsumuriState == TsumuriStates.FALLING) {
yVel += 0.1;
if (stun == 0) moveTo(xVel, yVel);
alarm[0] = 1;
}
else {
angleprevious = 0;
direction = myangle;
previousAngle = 0;
direction = angle;
image_angle = direction;
xVel = 0;
yVel = 0;
@ -138,42 +154,45 @@ if (room_width &lt;= 320) { // just in case we have flush rooms, we don't want t
<kind>1</kind>
<string>action_inherited();
if (active == 1 &amp;&amp; frozen == 0) {
update = !update;
shouldMove = !shouldMove;
// movement // Run the movement code every other step, effectively resulting in 0.5 speed.
if(update){
// Run the movement code every other step, effectively resulting in 0.5 speed.
if(shouldMove){
event_user(1);
}
var inst1 = collision_line(x-2, y, x+2, y, oSolid, false, true),
inst2 = collision_line(x, y-2, x, y+2, oSolid, false, true),
inst = noone; // -1 IS SELF YOU DIP
inst = noone;
// If we're on Slopes, set our angle accordingly
if(instance_exists(inst1) &amp;&amp; string_pos("Slope", object_get_name(inst1.object_index))) inst = inst1;
else if(instance_exists(inst2) &amp;&amp; string_pos("Slope", object_get_name(inst2.object_index))) inst = inst2;
if(instance_exists(inst)) {
if(string_pos("1", object_get_name(inst.object_index))) myangle = 45;
if(string_pos("2", object_get_name(inst.object_index))) myangle = 315;
if(string_pos("3", object_get_name(inst.object_index))) myangle = 225;
if(string_pos("4", object_get_name(inst.object_index))) myangle = 135;
if(string_pos("1B", object_get_name(inst.object_index))) myangle = 25;
if(string_pos("2B", object_get_name(inst.object_index))) myangle = 334;
if(string_pos("3B", object_get_name(inst.object_index))) myangle = 205;
if(string_pos("4B", object_get_name(inst.object_index))) myangle = 154;
if(string_pos("1", object_get_name(inst.object_index))) angle = 45;
if(string_pos("2", object_get_name(inst.object_index))) angle = 315;
if(string_pos("3", object_get_name(inst.object_index))) angle = 225;
if(string_pos("4", object_get_name(inst.object_index))) angle = 135;
if(string_pos("1B", object_get_name(inst.object_index))) angle = 25;
if(string_pos("2B", object_get_name(inst.object_index))) angle = 334;
if(string_pos("3B", object_get_name(inst.object_index))) angle = 205;
if(string_pos("4B", object_get_name(inst.object_index))) angle = 154;
}
if(angleprevious != myangle) {
rotationspeed = (abs(angle_difference(myangle, angleprevious))*15)/90;
angleprevious = myangle;
if(previousAngle != angle) {
rotationSpeed = (abs(angle_difference(angle, previousAngle))*15)/90;
previousAngle = angle;
}
if(falling == false) turn_towards_direction(myangle, rotationspeed);
if(falling == false) turn_towards_direction(angle, rotationSpeed);
image_angle = direction;
image_speed = 0.2;
// Make Tsumuri fall if there's oQuake
if (instance_number(oQuake) &gt; 0 &amp;&amp; falling == false) {
if(image_angle &gt;= 90 &amp;&amp; image_angle &lt;= 270) {
x = x + lengthdir_x(4, image_angle + 90);
y = y + lengthdir_y(4, image_angle + 90);
}
}
} // if (active == 1 &amp;&amp; frozen == 0)
}
if (state == 100) enemy_death();
</string>
</argument>
@ -197,167 +216,120 @@ if (state == 100) enemy_death();
<arguments>
<argument>
<kind>1</kind>
<string>///Movement Refactor Attempt 1
<string>/// Tsumuris Movement Code
sbstateprevious = sbstate;
sbstate = 0;
edgedl = position_meeting(x - 2, y + 1, oSolid);
edgedr = position_meeting(x + 2, y + 1, oSolid);
edgeul = position_meeting(x - 2, y - 2, oSolid);
edgeur = position_meeting(x + 2, y - 2, oSolid);
tsumuriState = TsumuriStates.FALLING;
edgedl = position_meeting(x - 2, y + 1, oSolid); // down-left
edgedr = position_meeting(x + 2, y + 1, oSolid); // down-right
edgeul = position_meeting(x - 2, y - 2, oSolid); // up-left
edgeur = position_meeting(x + 2, y - 2, oSolid); // up-right
if (isCollisionBottom(0) == 1) y -= 1;
if (isCollisionTop(0) == 1) y += 1;
if (isCollisionLeft(0) == 1) x += 1;
if (isCollisionRight(0) == 1) x -= 1;
var _collisionRight = isCollisionRight(1);
var _collisionLeft = isCollisionLeft(1);
var _collisionBottom = isCollisionBottom(1);
var _collisionTop = isCollisionTop(1);
// We save the results from Collision checks, in order to only need to call them once
var tempCollisionRight = isCollisionRight(1);
var tempCollisionLeft = isCollisionLeft(1);
var tempCollisionBottom = isCollisionBottom(1);
var tempCollisionTop = isCollisionTop(1);
if (_collisionBottom &amp;&amp; !_collisionRight &amp;&amp; !_collisionLeft) sbstate = 1;
if (_collisionRight &amp;&amp; !_collisionBottom &amp;&amp; !_collisionTop) sbstate = 2;
if (_collisionTop &amp;&amp; !_collisionRight &amp;&amp; !_collisionLeft) sbstate = 3;
if (_collisionLeft &amp;&amp; !_collisionBottom &amp;&amp; !_collisionTop) sbstate = 4;
if (tempCollisionBottom &amp;&amp; !tempCollisionRight &amp;&amp; !tempCollisionLeft) tsumuriState = TsumuriStates.BOTTOMFLOOR;
if (tempCollisionRight &amp;&amp; !tempCollisionBottom &amp;&amp; !tempCollisionTop) tsumuriState = TsumuriStates.RIGHTWALL;
if (tempCollisionTop &amp;&amp; !tempCollisionRight &amp;&amp; !tempCollisionLeft) tsumuriState = TsumuriStates.CEILING;
if (tempCollisionLeft &amp;&amp; !tempCollisionBottom &amp;&amp; !tempCollisionTop) tsumuriState = TsumuriStates.LEFTWALL;
if (_collisionBottom &amp;&amp; _collisionRight) sbstate = 5;
if (_collisionTop &amp;&amp; _collisionRight) sbstate = 6;
if (_collisionTop &amp;&amp; _collisionLeft) sbstate = 7;
if (_collisionBottom &amp;&amp; _collisionLeft) sbstate = 8;
if (tempCollisionBottom &amp;&amp; tempCollisionRight) tsumuriState = TsumuriStates.INNERDOWNRIGHTWALL;
if (tempCollisionTop &amp;&amp; tempCollisionRight) tsumuriState = TsumuriStates.INNERUPRIGHTWALL;
if (tempCollisionTop &amp;&amp; tempCollisionLeft) tsumuriState = TsumuriStates.INNERUPLEFTWALL;
if (tempCollisionBottom &amp;&amp; tempCollisionLeft) tsumuriState = TsumuriStates.INNERDOWNLEFTWALL;
if (!_collisionRight &amp;&amp; !_collisionLeft &amp;&amp; !_collisionBottom &amp;&amp; !_collisionTop) {
if (edgedl == 1 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) sbstate = 9;
if (edgeul == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) sbstate = 10;
if (edgeur == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgedr == 0) sbstate = 11;
if (edgedr == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0) sbstate = 12;
if (!tempCollisionRight &amp;&amp; !tempCollisionLeft &amp;&amp; !tempCollisionBottom &amp;&amp; !tempCollisionTop) {
if (edgedl == 1 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) tsumuriState = TsumuriStates.OUTERUPRIGHTWALL;
if (edgeul == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) tsumuriState = TsumuriStates.OUTERDOWNRIGHTWALL;
if (edgeur == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgedr == 0) tsumuriState = TsumuriStates.OUTERDOWNLEFTWALL;
if (edgedr == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0) tsumuriState = TsumuriStates.OUTERUPLEFTWALL;
if (edgedl == 1 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 1) sbstate = 1;
if (edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 1 &amp;&amp; edgedr == 1) sbstate = 2;
if (edgedl == 0 &amp;&amp; edgeul == 1 &amp;&amp; edgeur == 1 &amp;&amp; edgedr == 0) sbstate = 3;
if (edgedl == 1 &amp;&amp; edgeul == 1 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) sbstate = 4;
if (edgedl == 1 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 1) tsumuriState = TsumuriStates.BOTTOMFLOOR;
if (edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 1 &amp;&amp; edgedr == 1) tsumuriState = TsumuriStates.RIGHTWALL;
if (edgedl == 0 &amp;&amp; edgeul == 1 &amp;&amp; edgeur == 1 &amp;&amp; edgedr == 0) tsumuriState = TsumuriStates.CEILING;
if (edgedl == 1 &amp;&amp; edgeul == 1 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) tsumuriState = TsumuriStates.LEFTWALL;
}
/*if (isCollisionBottom(1) == 1 &amp;&amp; isCollisionRight(1) == 0 &amp;&amp; isCollisionLeft(1) == 0) sbstate = 1;
if (isCollisionRight(1) == 1 &amp;&amp; isCollisionBottom(1) == 0 &amp;&amp; isCollisionTop(1) == 0) sbstate = 2;
if (isCollisionTop(1) == 1 &amp;&amp; isCollisionRight(1) == 0 &amp;&amp; isCollisionLeft(1) == 0) sbstate = 3;
if (isCollisionLeft(1) == 1 &amp;&amp; isCollisionBottom(1) == 0 &amp;&amp; isCollisionTop(1) == 0) sbstate = 4;
if (isCollisionBottom(1) == 1 &amp;&amp; isCollisionRight(1) == 1) sbstate = 5;
if (isCollisionTop(1) == 1 &amp;&amp; isCollisionRight(1) == 1) sbstate = 6;
if (isCollisionTop(1) == 1 &amp;&amp; isCollisionLeft(1) == 1) sbstate = 7;
if (isCollisionBottom(1) == 1 &amp;&amp; isCollisionLeft(1) == 1) sbstate = 8;
if (isCollisionBottom(1) == 0 &amp;&amp; isCollisionLeft(1) == 0 &amp;&amp; isCollisionRight(1) == 0 &amp;&amp; isCollisionTop(1) == 0) {
if (edgedl == 1 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) sbstate = 9;
if (edgeul == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) sbstate = 10;
if (edgeur == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgedr == 0) sbstate = 11;
if (edgedr == 1 &amp;&amp; edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0) sbstate = 12;
if (edgedl == 1 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 1) sbstate = 1;
if (edgedl == 0 &amp;&amp; edgeul == 0 &amp;&amp; edgeur == 1 &amp;&amp; edgedr == 1) sbstate = 2;
if (edgedl == 0 &amp;&amp; edgeul == 1 &amp;&amp; edgeur == 1 &amp;&amp; edgedr == 0) sbstate = 3;
if (edgedl == 1 &amp;&amp; edgeul == 1 &amp;&amp; edgeur == 0 &amp;&amp; edgedr == 0) sbstate = 4;
}*/
// falling
if (sbstate == 0 &amp;&amp; falling == false) {
if (tsumuriState == TsumuriStates.FALLING &amp;&amp; falling == false) {
falling = true;
if(image_angle &gt; 270 || image_angle &lt; 90) xVel = 0.5 * facing;
if(image_angle &gt; 90 &amp;&amp; image_angle &lt; 270) xVel = -0.5 * facing;
alarm[0] = 1;
}
if (facing == 1 &amp;&amp; sbmove == 0) {
if (sbstate == 1) sbmove = 1;
if (sbstate == 3) sbmove = -1;
if (sbstate == 5) sbmove = 1;
if (sbstate == 6) sbmove = -1;
if (sbstate == 7) sbmove = -1;
if (sbstate == 8) sbmove = 1;
if (sbstate == 9) sbmove = 1;
if (sbstate == 10) sbmove = -1;
if (sbstate == 11) sbmove = -1;
if (sbstate == 12) sbmove = 1;
}
if (facing == -1 &amp;&amp; sbmove == 0) {
if (sbstate == 1) sbmove = -1;
if (sbstate == 3) sbmove = 1;
if (sbstate == 5) sbmove = -1;
if (sbstate == 6) sbmove = 1;
if (sbstate == 7) sbmove = 1;
if (sbstate == 8) sbmove = -1;
if (sbstate == 9) sbmove = -1;
if (sbstate == 10) sbmove = 1;
if (sbstate == 11) sbmove = 1;
if (sbstate == 12) sbmove = -1;
}
if (sbstate == 1) x += sbmove;
if (sbstate == 2) y -= sbmove;
if (sbstate == 3) x -= sbmove;
if (sbstate == 4) y += sbmove;
if (sbstate == 5) {
if (sbmove == 1) y -= 1;
if (sbmove == -1) x -= 1;
}
if (sbstate == 6) {
if (sbmove == 1) x -= 1;
if (sbmove == -1) y += 1;
}
if (sbstate == 7) {
if (sbmove == 1) y += 1;
if (sbmove == -1) x += 1;
if (tsumuriDirection == 0) {
switch (tsumuriState){
case TsumuriStates.BOTTOMFLOOR:
case TsumuriStates.INNERDOWNRIGHTWALL:
case TsumuriStates.INNERDOWNLEFTWALL:
case TsumuriStates.OUTERUPRIGHTWALL:
case TsumuriStates.OUTERUPLEFTWALL: tsumuriDirection = facing; break;
case TsumuriStates.CEILING:
case TsumuriStates.INNERUPRIGHTWALL:
case TsumuriStates.INNERUPLEFTWALL:
case TsumuriStates.OUTERDOWNRIGHTWALL:
case TsumuriStates.OUTERDOWNLEFTWALL: tsumuriDirection = -facing; break;
}
if (sbstate == 8) {
if (sbmove == 1) x += 1;
if (sbmove == -1) y -= 1;
}
if (sbstate == 9) {
if (sbmove == 1) y += 1;
if (sbmove == -1) x -= 1;
}
if (sbstate == 10) {
if (sbmove == 1) x -= 1;
if (sbmove == -1) y -= 1;
}
if (sbstate == 11) {
if (sbmove == 1) y -= 1;
if (sbmove == -1) x += 1;
}
if (sbstate == 12) {
if (sbmove == 1) x += 1;
if (sbmove == -1) y += 1;
}
// rotation
switch (sbstate) {
case 1: myangle = 0; break;
case 2: myangle = 90; break;
case 3: myangle = 180; break;
case 4: myangle = 270; break;
// Move tsumuris according to their state
switch (tsumuriState){
case TsumuriStates.BOTTOMFLOOR:
angle = 0;
x += tsumuriDirection;
break;
case TsumuriStates.RIGHTWALL:
angle = 90;
y -= tsumuriDirection;
break;
case TsumuriStates.CEILING:
angle = 180;
x -= tsumuriDirection;
break;
case TsumuriStates.LEFTWALL:
angle = 270;
y += tsumuriDirection
break;
case TsumuriStates.INNERDOWNRIGHTWALL:
if (tsumuriDirection == 1) y -= 1;
if (tsumuriDirection == -1) x -= 1;
break;
case TsumuriStates.INNERUPRIGHTWALL:
if (tsumuriDirection == 1) x -= 1;
if (tsumuriDirection == -1) y += 1;
break;
case TsumuriStates.INNERUPLEFTWALL:
if (tsumuriDirection == 1) y += 1;
if (tsumuriDirection == -1) x += 1;
break;
case TsumuriStates.INNERDOWNLEFTWALL:
if (tsumuriDirection == 1) x += 1;
if (tsumuriDirection == -1) y -= 1;
break;
case TsumuriStates.OUTERUPRIGHTWALL:
if (tsumuriDirection == 1) y += 1;
if (tsumuriDirection == -1) x -= 1;
break;
case TsumuriStates.OUTERDOWNRIGHTWALL:
if (tsumuriDirection == 1) x -= 1;
if (tsumuriDirection == -1) y -= 1;
break;
case TsumuriStates.OUTERDOWNLEFTWALL:
if (tsumuriDirection == 1) y -= 1;
if (tsumuriDirection == -1) x += 1;
break;
case TsumuriStates.OUTERUPLEFTWALL:
if (tsumuriDirection == 1) x += 1;
if (tsumuriDirection == -1) y += 1;
break;
}
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="7" enumb="0">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>/// dummied
</string>
</argument>
</arguments>

Loading…
Cancel
Save