View Single Post
DennisKainz DennisKainz's Avatar

JCF Member

Joined: Dec 2005

Posts: 415

DennisKainz is notorious for his worthless posts

Jan 9, 2014, 10:36 AM
DennisKainz is offline
Reply With Quote
Arrow

I'm working on a new levelpack called Another Tomb Rabbit Adventure.

I'm not allowed to upload previews on J2O downloads, so I'm showing you the script:

Code:
uint isjumping = 0;
uint isfalling = 0;
uint issliding = 0;
uint fallbad = 0;
uint realhealth = 100;
uint jumplock = 0;
uint zone = 0;
uint reload = 0;
uint skelekill = 0;
uint ghoulkill = 0;
uint mode = 0;
uint deathtype = 0;
uint kills = 0;
uint redkeyGET = 0;
uint bullshot = 0;
void onLevelLoad()
{
jjObjectPresets[OBJECT::SKELETON].scriptedCollisions = true;
jjObjectPresets[OBJECT::SKELETON].behavior = TheSkeleton;
jjObjectPresets[OBJECT::SKELETON].energy = 5;
jjObjectPresets[OBJECT::RAPIER].scriptedCollisions = true;
jjObjectPresets[OBJECT::RAPIER].behavior = TheGhoul;
jjObjectPresets[OBJECT::RAPIER].energy = 9;
jjObjectPresets[OBJECT::TOASTERBULLETPU].ySpeed = -2;
jjObjectPresets[OBJECT::TOASTERBULLETPU].xSpeed = 0;
jjObjectPresets[OBJECT::APPLE].determineCurAnim(ANIM::MENU, 5);
jjObjectPresets[OBJECT::APPLE].behavior = RedKey;
jjObjectPresets[OBJECT::APPLE].scriptedCollisions = true;
}
void onLevelBegin()
{
jjPalette.gradient(255, 176, 0, 192, 64, 0, 208, 10, 1.0);
jjPalette.gradient(255, 192, 64, 0, 0, 0, 96, 24, 1.0);
jjPalette.gradient(176, 64, 0, 0, 0, 0, 195, 13, 1.0);
jjPalette.gradient(255, 160, 0, 32, 16, 0, 160, 16, 1.0);
jjPalette.gradient(255, 176, 0, 32, 16, 0, 134, 19, 1.0);
jjPalette.gradient(192, 255, 0, 0, 0, 0, 179, 11, 1.0);
jjPalette.gradient(224, 144, 0, 224, 128, 0, 222, 2, 1.0);
jjPalette.apply();
}
void onMain()
{
if (p.charCurr != CHAR::LORI)
{
p.morphTo(CHAR::LORI, false);
}
if (p.yPos > 4*480)
{
mode = 1;
deathtype = 1;
}
p.food = 0;
if (redkeyGET == 1 && mode == 2)
{
jjDrawSprite(p.cameraX+608, p.cameraY+16, ANIM::MENU, 5, 0, 0, SPRITE::PALSHIFT, 80);
}
if (redkeyGET == 2)
{
jjSamplePriority(SOUND::COMMON_COIN);
redkeyGET = 1;
}
if (skelekill == 1)
{
jjSamplePriority(SOUND::AMMO_BOEM1);
skelekill = 0;
kills = kills + 1;
}
if (ghoulkill == 1)
{
jjSamplePriority(SOUND::BILSBOSS_SCARY3);
ghoulkill = 0;
kills = kills + 1;
}
if (p.yPos > 0 && p.yPos < 480)
{
jjMusicLoad("camel.xm", false);
}
if (p.yPos > 480 && p.yPos < 2*480)
{
jjMusicLoad("midnight.s3m", false);
}
if (p.yPos > 2*480 && p.yPos < 3*480)
{
jjMusicLoad("digsh.s3m", false);
}
if (p.yPos > 3*480 && p.yPos < 4*480)
{
jjMusicLoad("voice_of.j2b", false);
}
p.invincibility = 0;
p.blink = 0;
if (p.health > 2)
{
p.health = 2;
}
if (p.health == 1)
{
p.xPos = 16;
p.yPos = 16;
mode = 1;
deathtype = 2;
jjSamplePriority(SOUND::LORISOUNDS_DIE1);
p.health = 2;
}
if (realhealth < 0 || realhealth > 80000000)
{
mode = 1;
realhealth = 100;
jjSamplePriority(SOUND::LORISOUNDS_DIE1);
p.xPos = 16;
p.yPos = 16;
}
if (mode == 0)
{
p.cameraFreeze(p.xPos, (p.yPos - p.yPos%480)+240, true, true);
jjDrawSprite(p.cameraX+5, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+10, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+15, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+20, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+25, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+30, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+35, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+40, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+45, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+50, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+55, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+60, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+65, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+70, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+75, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+80, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+85, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+90, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+95, p.cameraY+16, ANIM::PICKUPS, 21, 0, 0, SPRITE::SINGLECOLOR, 0);
jjDrawSprite(p.cameraX+626, p.cameraY+464, ANIM::PICKUPS, 29, jjGameTicks/7, 1, SPRITE::TINTED, 44);
jjDrawSprite(p.cameraX+622, p.cameraY+464, ANIM::PICKUPS, 29, (jjGameTicks/7)+5, -1, SPRITE::TINTED, 44);
}
if (mode == 1)
{
p.cameraFreeze(320, 4.5*480, true, true);
p.xPos = 16;
p.yPos = 16;
jjMusicStop();
}
if (mode == 2 && jjKey[09])
{
p.cameraFreeze(320, 5.5*480, true, true);
}
if (mode == 2 && !jjKey[09])
{
mode = 0;
}
p.jumpStrength = -12;
if (jumplock > 0)
{
jumplock --;
}
if (reload > 0)
{
reload --;
}
if (p.ySpeed > 0 && !jjMaskedHLine(p.xPos-12,24,p.yPos+24))
{
isjumping = 1;
isfalling = 1;
}
if (jjMaskedPixel(p.xPos-12, p.yPos+24) && !jjMaskedPixel(p.xPos-4, p.yPos+24) && jjMaskedPixel(p.xPos-4, p.yPos+48))
{
issliding = 1;
}
if (jjMaskedPixel(p.xPos+12, p.yPos+24) && !jjMaskedPixel(p.xPos+4, p.yPos+24) && jjMaskedPixel(p.xPos-4, p.yPos+48))
{
issliding = -1;
}
if (jjMaskedPixel(p.xPos-12, p.yPos+24) && jjMaskedPixel(p.xPos+12, p.yPos+24) || isjumping == 1)
{
issliding = 0;
}
if (p.ySpeed == 0 && isfalling == 1)
{
isjumping = 0;
isfalling = 0;
jumplock = 10;
}
if (p.ySpeed < -9.75)
{
isjumping = 1;
}
if (isjumping == 1 && p.ySpeed > 0)
{
isfalling = 1;
}
if (isfalling == 1)
{
fallbad = p.ySpeed;
}
if (fallbad > 5 && p.ySpeed == 0)
{
realhealth = realhealth - ((fallbad - 5)*25);
if (realhealth < 0 || realhealth > 80000000)
{
deathtype = 1;
}
fallbad = 0;
}
}
bool onDrawHealth(jjPLAYER@p, jjCANVAS@ canvas)
{
if (mode == 0)
{
canvas.drawString(608, 472, "PISTOLS", STRING::SMALL, STRING::RIGHTALIGN);
canvas.drawString(624, 16, "PRESS TAB FOR STATISTICS AND INVENTORY", STRING::SMALL, STRING::RIGHTALIGN);
}
if (mode == 1 && deathtype == 0)
{
canvas.drawString(112, 32, "LORI WILL AIM AT ENEMIES", STRING::MEDIUM, STRING::NORMAL);
canvas.drawString(192, 64, "AUTOMATICALLY", STRING::MEDIUM, STRING::NORMAL);
}
if (mode == 1 && deathtype == 1)
{
canvas.drawString(128, 32, "YOU FELL FROM TOO HIGH", STRING::MEDIUM, STRING::NORMAL);
canvas.drawString(224, 64, "AND DIED", STRING::MEDIUM, STRING::NORMAL);
}
if (mode == 1 && deathtype == 2)
{
canvas.drawString(112, 32, "SOME TRAPS CAN KILL YOU", STRING::MEDIUM, STRING::NORMAL);
canvas.drawString(224, 64, "INSTANTLY", STRING::MEDIUM, STRING::NORMAL);
}
if (mode == 2)
{
canvas.drawString(0, 16, "KILLS: "+(kills/2), STRING::MEDIUM, STRING::NORMAL);
canvas.drawString(0, 40, "BULLETS SHOT: "+bullshot, STRING::MEDIUM, STRING::NORMAL);
canvas.drawString(0, 48, "", STRING::MEDIUM, STRING::NORMAL);
}
return true;
}
bool onDrawLives(jjPLAYER@p, jjCANVAS@ canvas)
{
return true;
}
bool onDrawAmmo(jjPLAYER@p, jjCANVAS@ canvas)
{
return true;
}
bool onDrawScore(jjPLAYER@p, jjCANVAS@ canvas)
{
if (mode == 0)
{
if (realhealth > 5)
{
canvas.drawSprite(5, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 10)
{
canvas.drawSprite(10, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 15)
{
canvas.drawSprite(15, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 20)
{
canvas.drawSprite(20, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 25)
{
canvas.drawSprite(25, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 30)
{
canvas.drawSprite(30, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 35)
{
canvas.drawSprite(35, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 40)
{
canvas.drawSprite(40, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 45)
{
canvas.drawSprite(45, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 50)
{
canvas.drawSprite(50, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 55)
{
canvas.drawSprite(55, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 60)
{
canvas.drawSprite(60, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 65)
{
canvas.drawSprite(65, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 70)
{
canvas.drawSprite(70, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 75)
{
canvas.drawSprite(75, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 80)
{
canvas.drawSprite(80, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 85)
{
canvas.drawSprite(85, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 90)
{
canvas.drawSprite(90, 16, ANIM::PICKUPS, 21, 0);
}
if (realhealth > 95)
{
canvas.drawSprite(95, 16, ANIM::PICKUPS, 21, 0);
}
}
return true;
}
void onPlayerInput(jjPLAYER@ p)
{
if (mode == 0 && jjKey[09])
{
mode = 2;
}
if (mode != 0)
{
p.keyJump = false;
p.keyRun = false;
p.keyFire = false;
p.keySelect = false;
}
if (reload != 0)
{
p.keyFire = false;
}
if (p.keyFire == true && reload == 0)
{
bullshot ++;
}
for (int i = 1; i < jjObjectCount; i++)
{
jjOBJ@ obj = jjObjects[i];
if (obj.eventID == OBJECT::SKELETON && p.keyFire == true)
{
if (p.xPos - obj.xPos > -128 && -obj.xPos + p.xPos < 128 && p.yPos - obj.yPos > -128 && -obj.yPos + p.yPos < 128)
{
obj.energy --;
jjSamplePriority(SOUND::RAPIER_GOSTOOOH);
if (p.xPos < obj.xPos)
{
obj.xPos = obj.xPos+8;
}
if (p.xPos > obj.xPos)
{
obj.xPos = obj.xPos-8;
}
}
}
if (obj.eventID == OBJECT::RAPIER && p.keyFire == true)
{
if (p.xPos - obj.xPos > -128 && -obj.xPos + p.xPos < 128 && p.yPos - obj.yPos > -128 && -obj.yPos + p.yPos < 128)
{
obj.energy --;
jjSamplePriority(SOUND::HATTER_PTOEI);
if (p.xPos < obj.xPos)
{
obj.xPos = obj.xPos+8;
}
if (p.xPos > obj.xPos)
{
obj.xPos = obj.xPos-8;
}
if (p.yPos < obj.yPos)
{
obj.yPos = obj.yPos+8;
}
if (p.yPos > obj.yPos)
{
obj.yPos = obj.yPos-8;
}
}
}
if (p.keyFire == true)
{
reload = 30;
}
if (obj.eventID == OBJECT::BLASTERBULLET)
{
if (p.direction > 0)
{
obj.xPos = p.xPos + 22;
}
if (p.direction < 0)
{
obj.xPos = p.xPos - 22;
}
obj.yPos = p.yPos - 8;
obj.state = STATE::EXPLODE;
}
}
p.keyDown = false;
p.keyUp = false;
p.keyRun = false;
if (isjumping == 1)
{
p.keyJump = false;
if (p.xSpeed < -3 && isfalling == 0)
{
p.keyLeft = true;
p.keyRight = false;
}
if (p.xSpeed > 3 && isfalling == 0)
{
p.keyRight = true;
p.keyLeft = false;
}
if (isfalling == 1)
{
p.keyRight = false;
p.keyLeft = false;
}
p.keyDown = false;
}
if (issliding == 1)
{
p.keyRight = true;
p.keyLeft = false;
}
if (issliding == -1)
{
p.keyLeft = true;
p.keyRight = false;
}
if (jumplock > 0 || issliding == 1 && p.xSpeed < 3.125 || issliding == -1 && p.xSpeed > -3.125)
{
p.keyJump = false;
}
}
void onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ player, int force)
{
if (obj.eventID == OBJECT::APPLE)
{
redkeyGET = 2;
}
if (obj.eventID == OBJECT::SKELETON)
{
p.xSpeed = (p.xPos - obj.xPos)/8;
if (!jjMaskedHLine(p.xPos-12,24,p.yPos+24))
{
p.ySpeed = (p.yPos - obj.yPos)/8;
}
realhealth = realhealth - 5;
}
if (obj.eventID == OBJECT::RAPIER)
{
p.xSpeed = (p.xPos - obj.xPos)/8;
if (!jjMaskedHLine(p.xPos-12,24,p.yPos+24))
{
p.ySpeed = (p.yPos - obj.yPos)/8;
}
realhealth = realhealth - 5;
}
}
void TheSkeleton(jjOBJ@ skele)
{
skele.behave(BEHAVIOR::SKELETON, false);
{
if (jjMaskedHLine(skele.xPos-6, 12, skele.yPos+32))
{
skele.putOnGround(true);
}
skele.direction = (p.xPos - skele.xPos)%32;
if (jjGameTicks%15+jjRandom()%15+skele.curFrame%15 == 0)
{
jjObjects[jjAddObject(OBJECT::RAPIER, skele.xPos, skele.yPos)];
}
jjDrawSprite(skele.xPos, skele.yPos, ANIM::SKELETON, 2, (jjGameTicks/5)+(skele.xPos/8), skele.direction, SPRITE::NORMAL);
jjDrawSprite(skele.xPos-12, skele.yPos-12, ANIM::AMMO, 55, (jjGameTicks/7)+(skele.xPos/32), skele.direction, 

SPRITE::NORMAL);
jjDrawSprite(skele.xPos, skele.yPos-16, ANIM::AMMO, 55, (jjGameTicks/7)+6+(skele.xPos/32), skele.direction, 

SPRITE::NORMAL);
jjDrawSprite(skele.xPos+12, skele.yPos-4, ANIM::AMMO, 55, (jjGameTicks/7)+3+(skele.xPos/32), skele.direction, 

SPRITE::NORMAL);
jjDrawSprite(skele.xPos, skele.yPos, ANIM::AMMO, 2, (jjGameTicks/7)+(skele.xPos/32), skele.direction, SPRITE::NORMAL);
jjDrawSprite(skele.xPos, skele.yPos+16, ANIM::AMMO, 2, (jjGameTicks/7)+5+(skele.xPos/32), skele.direction, 

SPRITE::NORMAL);
jjDrawSprite(skele.xPos, skele.yPos-16, ANIM::AMMO, 2, (jjGameTicks/7)+3+(skele.xPos/32), skele.direction, 

SPRITE::NORMAL);
if (!jjMaskedPixel(skele.xPos-24, skele.yPos) && !jjMaskedPixel(skele.xPos+24, skele.yPos) && jjMaskedPixel(skele.xPos-

16,skele.yPos+32) && jjMaskedPixel(skele.xPos+16,skele.yPos+32))
{
skele.xPos = skele.xPos - ((skele.xPos - p.xPos)/64);
}
if (skele.energy < 0)
{
jjObjects[jjAddObject(OBJECT::THING, skele.xPos, skele.yPos)];
skele.state = STATE::KILL;
skelekill = 1;
}
}
}
void TheGhoul(jjOBJ@ ghoul)
{
ghoul.direction = (p.xPos - ghoul.xPos)%32;
ghoul.behave(BEHAVIOR::RAPIER, false);
ghoul.playerHandling = HANDLING::PICKUP;
ghoul.state = STATE::START;
jjDrawSprite(ghoul.xPos, ghoul.yPos, ANIM::RAPIER, 1, (jjGameTicks/5)+((ghoul.xPos+ghoul.yPos)/64), ghoul.direction, 

SPRITE::TINTED, 44);
if ((p.yPos - p.yPos%480)+240 == (ghoul.yPos - ghoul.yPos%480)+240)
{
ghoul.xPos = ghoul.xPos - ((ghoul.xPos - p.xPos)/128);
ghoul.yPos = ghoul.yPos - ((ghoul.yPos - p.yPos)/128);
}
if (ghoul.energy < 0)
{
ghoul.state = STATE::KILL;
ghoulkill = 1;
jjObjects[jjAddObject(OBJECT::TOASTERBULLETPU, ghoul.xPos, ghoul.yPos)];
}
}
void RedKey(jjOBJ@ redkey)
{
redkey.yPos = redkey.yPos + (jjSin(jjGameTicks*16));
jjDrawSprite(redkey.xPos, redkey.yPos, ANIM::MENU, 5, 0, 0, SPRITE::PALSHIFT, 80);
if (redkeyGET != 0)
{
redkey.xPos = 0;
}
}
It includes a Lori Jackrabbit behaving exactly like Lara Croft, including a way of shooting enemies that resembles that of the very first Tomb Raider games, new enemies, for now only the necromancer and the ghouls he summons, a brand new way of controlling and showing the player's health and ammo, a statistics and inventory subscreen, collectable keys and other trigger items, and a few more things.



If you think the code can be improved and fixed, I will be more than glad to have it improved and fixed, and ofcourse include you in the credits!

Last edited by DennisKainz; Jan 9, 2014 at 11:39 AM.