A Demo Release

Discussions Related to Game Hacking and Memory Hacking Software

Moderators: g3nuin3, SpeedWing, WhiteHat, mezzo

Postby esco » Thu Nov 23, 2006 4:29 pm

Nevermind.... I figured it out. Unfortunately, using a while do loop slows the program down a LOT... so for now I can just use if then statements.... something like this basically...

if (value1 == 1 || tag = 1) {value2=3; tag =1;}
if (value1 == 78 ) {tag =0;}

It just requires 1 more memory address... but that shouldn't be much of a problem for now. :)

Also... are all those returns declarations necessary? because it seems that if I leave them out, the value is still placed into the memory location. Why is it then that I need those?

P.S. I would LOVE TO declare global variables.... but every time I try the program crashes on me. It doesn't matter if I open a process first or not. Also i've tried it on 2 different computers, and I even just cut and pasted the line from your code to make certain. Even deleting EVERYTHING from the screen, creating a new address, and then just putting the variable declaration in it by itself causes it. Even if I don't check any boxes.
Esco.... the name says it all. New Yorikan for life.
User avatar
esco
NULL
 
Posts: 148
Joined: Mon Sep 18, 2006 2:25 am
Location: Florida, a.k.a. the US's version of hell!

Postby L. Spiro » Thu Nov 23, 2006 7:07 pm

Demo #5

Fixes the update problem with the Helper window in the Hex Editor.
Adds the Search Options option dialog and fixes all buttons that are intended to load this dialog.
Fixes the script crash related to declaring globals using empty strings.
Fixes the script crash related to writing a script that has no functions and using it for items.





Also... are all those returns declarations necessary? because it seems that if I leave them out, the value is still placed into the memory location. Why is it then that I need those?

What?


L. Spiro
User avatar
L. Spiro
L. Spiro
 
Posts: 3129
Joined: Mon Jul 17, 2006 10:14 pm
Location: Tokyo, Japan

Postby esco » Fri Nov 24, 2006 2:35 am

Heh... looks like I was actually helpful for once.
:P

Anyways i think I misunderstood you about "global" variables... I was assuming you meant global as in I could declare them under one memory addresses lock screen, then go to a seperate one and use it again without redeclaring it. But what you actually meant was I could declare it OUTSIDE the functions, and then use it for several functions withhin THAT lock screen, not another, right?

For example, this works:

All under memory address 5b7530:


MHS_ADDRESS GetBaseAddress() {
test();
test2();
return 0x005b7530;
return 0x005b7532;
}

extern WORD tag1 = { "", 0x005b7530 };
extern WORD tag2 = { "", 0x005b7532 };

VOID Lock( MHS_ADDRESS aAddress ) {
test();
test2();
}

void test() {
if (tag1==1) {tag2=2;}
}

void test2() {
if (tag2==2) {tag1=1;}
}

----------------------------------------------------------------------------
BUT THIS WON'T:

memory address 5b7530:


MHS_ADDRESS GetBaseAddress() {
test();
test2();
return 0x005b7530;
return 0x005b7532;
}

extern WORD tag1 = { "", 0x005b7530 };
extern WORD tag2 = { "", 0x005b7532 };


Then I put THIS PART is Under memory address 5b7532 (gives a compile error):

VOID Lock( MHS_ADDRESS aAddress ) {
test();
test2();
}

void test() {
if (tag1==1) {tag2=2;}
}

void test2() {
if (tag2==2) {tag1=1;}
}

---------------------------------------------------------------------------------
Also my other question that you didn't udnerstand before was this:

MHS_ADDRESS GetBaseAddress() {
test();
test2();
return 0x005b7530;
return 0x005b7532;
}


(RIGHT HERE! THOSE RETURN LINES above... if I pull them out the program STILL returns a value to those memory addresses if my script changes them within the function. So I was asking why I need to include them still?)

extern WORD tag1 = { "", 0x005b7530 };
extern WORD tag2 = { "", 0x005b7532 };

VOID Lock( MHS_ADDRESS aAddress ) {
test();
test2();
}

void test() {
if (tag1==1) {tag2=2;}
}

void test2() {
if (tag2==2) {tag1=1;}
}
Esco.... the name says it all. New Yorikan for life.
User avatar
esco
NULL
 
Posts: 148
Joined: Mon Sep 18, 2006 2:25 am
Location: Florida, a.k.a. the US's version of hell!

Postby L. Spiro » Fri Nov 24, 2006 3:35 am

But what you actually meant was I could declare it OUTSIDE the functions, and then use it for several functions withhin THAT lock screen, not another, right?

Correct.
I told you before the items are individual islands that are not connected in any way.



(RIGHT HERE! THOSE RETURN LINES above... if I pull them out the program STILL returns a value to those memory addresses if my script changes them within the function. So I was asking why I need to include them still?)


return 0x005b7532;” does nothing.
I told you before the code never goes here. It is a useless statement that wastes space.
You already returned from the function on the line above.

I don’t know what you are saying it returns by removing the “return” lines, but it is not what you think it is.
The point of GetBaseAddress() is to get the base address of the item.
The only way to do that is to use “return”.
In that script, you use a static base address, so why do you even have GetBaseAddress() at all?

I told you to use that function before because Lock() wasn’t implemented, but now that it is there, using a script to get the base address is a waste of time (because your base address is just a static number, which the system can compute for you automatically using the settings in the other tab).
If the address of your item never changes, using the system to calculate the address is 16 times faster and uses less RAM and disk space when you save the item.


L. Spiro
User avatar
L. Spiro
L. Spiro
 
Posts: 3129
Joined: Mon Jul 17, 2006 10:14 pm
Location: Tokyo, Japan

Postby esco » Fri Nov 24, 2006 6:34 am

L. Spiro wrote:
(RIGHT HERE! THOSE RETURN LINES above... if I pull them out the program STILL returns a value to those memory addresses if my script changes them within the function. So I was asking why I need to include them still?)


return 0x005b7532;” does nothing.
I told you before the code never goes here. It is a useless statement that wastes space.
You already returned from the function on the line above.

I don’t know what you are saying it returns by removing the “return” lines, but it is not what you think it is.
The point of GetBaseAddress() is to get the base address of the item.
The only way to do that is to use “return”.
In that script, you use a static base address, so why do you even have GetBaseAddress() at all?

I told you to use that function before because Lock() wasn’t implemented, but now that it is there, using a script to get the base address is a waste of time (because your base address is just a static number, which the system can compute for you automatically using the settings in the other tab).
If the address of your item never changes, using the system to calculate the address is 16 times faster and uses less RAM and disk space when you save the item.


L. Spiro


Wow... just when I think I'm getting the hang of it. I feel REALLY dumb now, this stuff is so easy to you it's like nuthin, but to me I seem to have heck figuring out some of this simple stuff. I can't wait till next semester when I have my c programming class. :D

Aight so then I ripped that part out and just left this:

extern WORD tag1 = { "", 0x005b7530 };
extern WORD tag2 = { "", 0x005b7532 };

VOID Lock( MHS_ADDRESS aAddress ) {
test();
test2();
}

void test() {
if (tag1==1) {tag2=2;}
}


Easy enough.... but now the script does nothing at all and doesn't execute. And yeah, I made sure the lock box was checked. What the heck am I missing? :(

I even tried just using void Lock (), or void Lock (aAddress)... nothing happens. I tried several other things to... nothing. What am I screwing up now?
Esco.... the name says it all. New Yorikan for life.
User avatar
esco
NULL
 
Posts: 148
Joined: Mon Sep 18, 2006 2:25 am
Location: Florida, a.k.a. the US's version of hell!

Postby L. Spiro » Fri Nov 24, 2006 10:02 am

Well I don’t see test2() there.


But now that you removed GetBaseAddress() you need to check the Systematic Address settings to ensure it is the address you want.
My system stores the information for both specifically for this reason.
That is, even though you switch over to Script Address and use GetBaseAddress(), the information for the Systematic Address is still stored and kept in the background so you can switch between them with the check of a simple button.

But after all this time your Systematic Address may no longer be accurate.


Lock() has been tested multiple times and I know it works, even when off the screen.
One thing you can do is change the lock update speed in the options.
Right now it saves CPU resources by only updating 10 times per second.
You can change it to 1,000.


L. Spiro
User avatar
L. Spiro
L. Spiro
 
Posts: 3129
Joined: Mon Jul 17, 2006 10:14 pm
Location: Tokyo, Japan

Postby esco » Fri Nov 24, 2006 12:20 pm

Aw shit dawg... you know what it was... I never checked the LOCK box in the main tab. I just checked the one script lock tab, not this one too.

I figured that if I did, it would freeze the value in THAT address to the number there, rather than using the script! So I never tried checking that one too. Now that I tried that with the address with the script in, it works fine... before when I left getbaseaddress there though it was working WITHOUT having that box checked. And THAT is when if scrolled if screen it failed to run.

Thanks again for trying to help... though I have NO CLUE what your above post meant honestly. Keep in mind, I'm good at hacking... not c programming, I'm a total beginner at that. :)

P.S. Thanks for all the memory info... I'm gonna take your adviuce and make sure my scripts don't run CONSTANTLY for no reason so I don't waste ram. :D
Esco.... the name says it all. New Yorikan for life.
User avatar
esco
NULL
 
Posts: 148
Joined: Mon Sep 18, 2006 2:25 am
Location: Florida, a.k.a. the US's version of hell!

Postby L. Spiro » Fri Nov 24, 2006 2:30 pm

Thanks again for trying to help... though I have NO CLUE what your above post meant honestly. Keep in mind, I'm good at hacking... not c programming, I'm a total beginner at that.

But you are getting a head-start on your C Programming class.
Most of what you learn from there can be applied to my language, and what you learn from my language can mostly be applied there, except of course the “extern” concept.


L. Spiro
User avatar
L. Spiro
L. Spiro
 
Posts: 3129
Joined: Mon Jul 17, 2006 10:14 pm
Location: Tokyo, Japan

Postby rat » Wed Nov 29, 2006 6:54 pm

Hi evryone :)
Have not been here fore a while. Thougt I shell make a visit and se whats going on. And here I come and see that a new version was coming. Downloaded the lastest demo and checked the layout. And what can I say about it than that it looks great :)

Can't wait until the next demo or the final relese is comming :)
rat
I Ask A Lot Of Questions
 
Posts: 10
Joined: Wed Aug 09, 2006 9:24 am

Postby esco » Mon Dec 04, 2006 3:27 pm

Hey bro... found a problem. Let's say for example I have a memory address (I'll use 5b6e40 as an example) in my file. And then I load another SAVE file... and it also has a 5b6e40. They BOTH end up on screen. Now that's fine, but here is the issue... if I SAVE the file, close and reload it. ONE of them is GONE! And it seems to be the one locked with the script in it. Oh shit.....

Luckily for me, I had a backup... otherwise TONS of code would have just been lost. Any plans to fix this? :)

P.S. this script locking shiit RULES!!!!! :D

On a more interesting note.... THIS SCRIPT ALWAYS CRASHES MHS. AND WHEN IT CRASHES THE NEXT 3-4 TIMES I BRING UP MHS, IT CRASHES AGAIN THE MINUTE I DOUBLE CLICK IT. IT EVEN CRASHES THE COMPILER UNDER SCRIPT EDITOR:


VOID Lock() {
warg();
zombie();
bonescimitar();
skeleton();
axearmor();
bloodyzombie();
owlknight();
}

extern WORD hroomnum = { "", 0x00629ef0 };
extern WORD vroomnum = { "", 0x00629ef4 };
extern WORD hroompos = { "", 0x0064e230 };
extern WORD vroompos = { "", 0x0064e234 };
extern WORD enemy1vertpos = { "", 0x0062d11e };
extern WORD enemy1action = { "", 0x0062d144 };
extern WORD enemy1frametimer = { "", 0x0062d16a };
extern WORD enemy1timer = { "", 0x0062d198 };
extern WORD enemy1hp = { "", 0x0062d156 };
extern WORD enemy2vertpos = { "", 0x0062dcde };
extern WORD enemy2action = { "", 0x0062dd04 };
extern WORD enemy2frametimer = { "", 0x0062dd2a };
extern WORD enemy2timer = { "", 0x0062dd58 };
extern WORD enemy2hp = { "", 0x0062dd16 };
extern WORD enemy3vertpos = { "", 0x0062e89e };
extern WORD enemy3action = { "", 0x0062e8c4 };
extern WORD enemy3frametimer = { "", 0x0062e8ea };
extern WORD enemy3timer = { "", 0x0062e918 };
extern WORD enemy3hp = { "", 0x0062e8d6 };
extern WORD enemy4vertpos = { "", 0x0062f45e };
extern WORD enemy4action = { "", 0x0062f484 };
extern WORD enemy4frametimer = { "", 0x0062f4aa };
extern WORD enemy4timer = { "", 0x0062f4d8 };
extern WORD enemy4hp = { "", 0x0062f496 };
extern WORD enemy5vertpos = { "", 0x0063001e };
extern WORD enemy5action = { "", 0x00630044 };
extern WORD enemy5frametimer = { "", 0x0063006a };
extern WORD enemy5timer = { "", 0x00630098 };
extern WORD enemy5hp = { "", 0x00630056 };
extern WORD room02038 = { "", 0x005b7546};

void warg(){
//warg1: 62d118- 62d1d4
if (hroomnum == 2 && vroomnum == 38) {
//moves warg off screen, if you go back in room
if (room02038 > 0 && room02038 < 24) {enemy1vertpos = 1121;}
//if near door room is “locked” while tag = 0
if (room02038 == 0 && hroompos >= 455) { vroomnum = 255;}
}
if (hroomnum == 2 && vroomnum == 255) {
//if away from door or warg is dead, puts room # back to normal
if (hroompos < 455 || room02038 == 1) { vroomnum = 38;}
//sets tag if warg 1 is killed
if (enemy1action == 0 && hroompos > 224) {room02038 = 1;}
}
//next line needed so that warg code works whether or not door shows locked, but DOESN’T
//work later if owl knight is here instead.
if (room02038 == 0 && hroomnum == 2 && (vroomnum == 255 || vroomnum == 38)) {
//attacks faster
if (enemy1action == 6 && enemy1timer > 10) {enemy1timer = 10;}
//turns faster
if (enemy1action == 5 && enemy1frametimer > 3) {enemy1frametimer = 3;}
}
//warg 2: 62dcd8- 62dd94
//warg 3 62e898- 62e954
//warg 4 : 62f458- 62f514
//warg 5 : 630018- 6300d4
if (hroomnum == 4 && vroomnum == 40) {
//moves wargs off screen, if you go back in room
if (enemy2hp != 65000 && (room02038 == 2 || room02038 == 4 || room02038 == 6 || room02038 == 8 || room02038 == 10 || room02038 == 12 || room02038 == 14 || room02038 > 15) && room02038 < 24) {enemy2vertpos = 1121;}
if (enemy3hp != 65000 && (room02038 == 3 || room02038 == 4 || room02038 == 7 || room02038 == 11 || room02038 == 8 || room02038 == 12 || room02038 == 15 || room02038 > 15) && room02038 < 24) {enemy3vertpos = 1121;}
if (enemy4hp != 65000 && (room02038 == 5 || room02038 == 6 || room02038 == 7 || room02038 == 13 || room02038 == 15 || room02038 == 14 || room02038 == 8 || room02038 > 15) && room02038 < 24) {enemy4vertpos = 1121;}
if (enemy5hp != 65000 && (room02038 == 9 || room02038 == 10 || room02038 == 13 || room02038 == 11 || room02038 == 15 || room02038 == 14 || room02038 == 12 || room02038 > 15) && room02038 < 24) {enemy5vertpos = 1121;}
//if near door room is “locked” while tag < 16
if (room02038 > 0 && room02038 < 16 && hroompos >= 1740 && hroompos < 1794) { vroomnum = 255;}
}
//puts room back to normal if away from door or all wargs here dead
if (hroomnum == 4 && vroomnum == 255 && (hroompos < 1740 || room02038 == 16)) { vroomnum = 40;}
//next line needed so that code DOESN’T work later in game
if (room02038 > 0 && room02038 < 16 && hroomnum == 4 && vroomnum == 40) {
//attacks faster
if (enemy2action == 6 && enemy2timer > 10) {enemy2timer = 10;}
if (enemy3action == 6 && enemy3timer > 10) {enemy3timer = 10;}
if (enemy4action == 6 && enemy4timer > 10) {enemy4timer = 10;}
if (enemy5action == 6 && enemy5timer > 10) {enemy5timer = 10;}
//turns faster
if (enemy2action == 5 && enemy2frametimer > 3) {enemy2frametimer = 3;}
if (enemy3action == 5 && enemy3frametimer > 3) {enemy3frametimer = 3;}
if (enemy4action == 5 && enemy4frametimer > 3) {enemy4frametimer = 3;}
if (enemy5action == 5 && enemy5frametimer > 3) {enemy5frametimer = 3;}
//increments tag if warg is killed, also changes temp hp so tag only incremented 1 time
if (enemy2action == 11 && (enemy2hp == 0 || enemy2hp > 65000)) {room02038++; enemy2hp = 65000;}
if (enemy3action == 11 && (enemy3hp == 0 || enemy3hp > 65000)) {room02038= room02038 +2; enemy3hp = 65000;}
if (enemy4action == 11 && (enemy4hp == 0 || enemy4hp > 65000)) {room02038= room02038 +4; enemy4hp = 65000;}
if (enemy5action == 11 && (enemy5hp == 0 || enemy5hp > 65000)) {room02038= room02038 +8; enemy5hp = 65000;}
}
//warg 6: 62d118- 62d1d4
//warg 7 : 62dcd8- 62dd94
//warg 8 : 3 62e898- 62e954
if (hroomnum == 14 && vroomnum == 40) {
//moves wargs off screen, if you go back in room
if (enemy1hp != 65000 && (room02038 == 17 || room02038 == 19 || room02038 == 21 || room02038 == 23) && room02038 < 24) {enemy1vertpos = 1121;}
if (enemy2hp != 65000 && (room02038 == 18 || room02038 == 22 || room02038 == 19 || room02038 == 23) && room02038 < 24) {enemy2vertpos = 1121;}
if (enemy3hp != 65000 && (room02038 == 20 || room02038 == 22 || room02038 == 21 || room02038 == 23) && room02038 < 24) {enemy3vertpos = 1121;}
//if near door room is “locked” while tag < 23
if (room02038 > 0 && room02038 < 23 && hroompos >= 1480 && hroompos < 1538) { vroomnum = 255;}
}
//puts room back to normal if away from door or all wargs here dead
if (hroomnum == 14 && vroomnum == 255 && (hroompos < 1480 || room02038 == 23)) { vroomnum = 40;}
//next line needed so that code DOESN’T work later in game
if (room02038 > 0 && room02038 < 23 && hroomnum == 14 && vroomnum == 40) {
//attacks faster
if (enemy1action == 6 && enemy1timer > 10) {enemy1timer = 10;}
if (enemy2action == 6 && enemy2timer > 10) {enemy2timer = 10;}
if (enemy3action == 6 && enemy3timer > 10) {enemy3timer = 10;}
//turns faster
if (enemy1action == 5 && enemy1frametimer > 3) {enemy1frametimer = 3;}
if (enemy2action == 5 && enemy2frametimer > 3) {enemy2frametimer = 3;}
if (enemy3action == 5 && enemy3frametimer > 3) {enemy3frametimer = 3;}
//increments tag if warg is killed, also changes temp hp so tag only incremented 1 time
if (enemy1action == 11 && (enemy1hp == 0 || enemy1hp > 65000)) {room02038++; enemy1hp = 65000;}
if (enemy2action == 11 && (enemy2hp == 0 || enemy2hp > 65000)) {room02038= room02038 +2; enemy2hp = 65000;}
if (enemy3action == 11 && (enemy3hp == 0 || enemy3hp > 65000)) {room02038= room02038 +4; enemy3hp = 65000;}
}
//changes tag to 24, so that enemies are no longer moved off screen once you enter alchemy lab
if (hroomnum == 14 && vroomnum == 36 && room02038 == 23) {room02038 = 24;}
}

extern WORD enemy6hspeed = { "", 0x0063185d};
extern WORD enemy6action = { "", 0x00631880};
extern WORD enemy6frametimer = { "", 0x006318a6};
extern WORD enemy7hspeed = { "", 0x00631919};
extern WORD enemy7action = { "", 0x0063193c};
extern WORD enemy7frametimer = { "", 0x00631962};
extern WORD enemy8hspeed = { "", 0x006319d5};
extern WORD enemy8action = { "", 0x006319f8};
extern WORD enemy8frametimer = { "", 0x00631a1e};
extern WORD enemy9hspeed = { "", 0x006317a1};
extern WORD enemy9action = { "", 0x006317c4};
extern WORD enemy9frametimer = { "", 0x006317ea};


void zombie() {
//zombie: 631798- 631853 (enemy9)
//zombie: 631854- 63190f (enemy6)
//zombie: 631910- 6319cb (enemy7)
//zombie: 6319cc- 631a87 (enemy8)
//zombie: 631a88- 631b44
if ((hroomnum == 4 || hroomnum == 14) && (vroomnum == 40 || vroomnum == 255)) {
//zombies walk faster (right then left)
if (enemy6hspeed == 128) {enemy6hspeed = 400;}
if (enemy6hspeed == 65408) {enemy6hspeed = 65136;}
if (enemy7hspeed == 128) {enemy7hspeed = 228;}
if (enemy7hspeed == 65408) {enemy7hspeed = 65308;}
if (enemy8hspeed == 128) {enemy8hspeed = 228;}
if (enemy8hspeed == 65408) {enemy8hspeed = 65308;}
if (enemy9hspeed == 128) {enemy9hspeed = 228;}
if (enemy9hspeed == 65408) {enemy9hspeed = 65308;}
//zombies rise out of ground faster
if (enemy6action == 2 && enemy6frametimer > 2) {enemy6frametimer = 2;}
if (enemy7action == 2 && enemy7frametimer > 2) {enemy7frametimer = 2;}
if (enemy8action == 2 && enemy8frametimer > 2) {enemy8frametimer = 2;}
if (enemy9action == 2 && enemy9frametimer > 2) {enemy9frametimer = 2;}
}
}

extern WORD enemy3frame = { "", 0x0062e8e8 };
extern WORD enemy3range = { "", 0x0062e8de };
extern WORD enemy3hitbox = { "", 0x0062e8a8 };
extern WORD enemy10frame = { "", 0x0062ea60 };
extern WORD enemy10frametimer = { "", 0x0062ea62 };
extern WORD enemy10range = { "", 0x0062ea56 };
extern WORD enemy10hitbox = { "", 0x0062ea20 };
extern WORD enemy11frame = { "", 0x0062e308 };
extern WORD enemy11frametimer = { "", 0x0062e30a };
extern WORD enemy11range = { "", 0x0062e2fe };
extern WORD enemy11hitbox = { "", 0x0062e2c8 };
extern WORD enemy12frame = { "", 0x0062e3c4 };
extern WORD enemy12frametimer = { "", 0x0062e3c6 };
extern WORD enemy12range = { "", 0x0062e3ba };
extern WORD enemy12hitbox = { "", 0x0062e384 };
extern WORD enemy2frame = { "", 0x0062dd28};
extern WORD enemy2range = { "", 0x0062dd1e };
extern WORD enemy2hitbox = { "", 0x0062dce8 };
extern WORD enemy13frame = { "", 0x0062dea0 };
extern WORD enemy13frametimer = { "", 0x0062dea2 };
extern WORD enemy13range = { "", 0x0062de96 };
extern WORD enemy13hitbox = { "", 0x0062de60 };
extern WORD enemy14frame = { "", 0x0062dde4 };
extern WORD enemy14frametimer = { "", 0x0062dde6 };
extern WORD enemy14range = { "", 0x0062ddda };
extern WORD enemy14hitbox = { "", 0x0062dda4 };

void bonescimitar () {
//bonescimitar 1: 62e898- 62e954 enemy3
//bone scimitar 2: 62ea10- 62eacc enemy10
//bone scimitar 3: 62e2b8- 62e374 enemy11
//bone scimitar 4: enemy12
//bone scimitar 5: 62dcd8- 62dd94 (enemy2)
//bone scimitar 6: enemy13
//bonescimitar 7: enemy14
//bonescimitar 8: 62e898- 62e954 enemy3
//bone scimitar 9: 62ea10- 62eacc enemy10

if (hroomnum == 18 && vroomnum == 36) {
if (enemy3frame == 9) {
//holds sword out for less time
if (enemy3frametimer > 10) {enemy3frametimer = 10;}
//increases sword range and moves hitbox
{enemy3range= 4633; enemy3hitbox= 65520;}
}
if (enemy10frame == 9) {
if (enemy10frametimer > 10) {enemy10frametimer = 10;}
{enemy10range= 4633; enemy10hitbox= 65520;}
}
}
//bone scimitar 3 & 4
if (hroomnum == 14 && vroomnum == 36) {
if (enemy11frame == 9) {
if (enemy11frametimer > 10) {enemy11frametimer = 10;}
{enemy11range= 4633; enemy11hitbox= 65520;}
}
if (enemy12frame == 9) {
if (enemy12frametimer > 10) {enemy12frametimer = 10;}
{enemy12range= 4633; enemy12hitbox= 65520;}
}
}
//bone scimitar 5,6, 7
if (hroomnum == 13 && vroomnum == 34) {
if (enemy2frame == 9) {
if (enemy2frametimer > 10) {enemy2frametimer = 10;}
{enemy2range= 4633; enemy2hitbox= 65520;}
}
if (enemy13frame == 9) {
if (enemy13frametimer > 10) {enemy13frametimer = 10;}
{enemy13range= 4633; enemy13hitbox= 65520;}
}
if (enemy14frame == 9) {
if (enemy14frametimer > 10) {enemy14frametimer = 10;}
{enemy14range= 4633; enemy14hitbox= 65520;}
}
}
//bone scimitar 8 & 9
if (hroomnum == 13 && vroomnum == 26) {
if (enemy3frame == 9) {
if (enemy3frametimer > 10) {enemy3frametimer = 10;}
{enemy3range= 4633; enemy3hitbox= 65520;}
}
if (enemy10frame == 9) {
if (enemy10frametimer > 10) {enemy10frametimer = 10;}
{enemy10range= 4633; enemy10hitbox= 65520;}
}
}
}

extern WORD enemy15hspeed = { "", 0x0062df15 };
extern WORD enemy15action = { "", 0x0062df38 };
extern WORD enemy15frametimer = { "", 0x0062df5e };

void axearmor () {
//axe armor1: 62df0c- 62dfc7 enemy15
//axe armor attacks quicker, and moves faster
if (hroomnum== 13 && vroomnum == 34) {
if (enemy15action != 8 && enemy15frametimer > 1) {enemy15frametimer--;}
if ((enemy15action == 2 || enemy15action == 3) && enemy15hspeed > 0 && enemy15hspeed < 65000) {enemy15hspeed = 125;}
if ((enemy15action == 2 || enemy15action == 3) && enemy15hspeed > 65000 ) {enemy15hspeed = 65410;}
}
}

extern WORD enemy9vspeed = { "", 0x006317a6 };
extern WORD enemy6vspeed = { "", 0x00631862 };
extern WORD enemy7vspeed = { "", 0x0063191e };
extern WORD enemy99timer = { "", 0x0062e4ac };
void skeleton () {
//skeleton 1: 62e430- 62e4EC
//bone1: 631798- 631853 (enemy9)
//bone2: 631854- 63190f (enemy6)
//bone3: 631910- 6319cb (enemy7)
if (hroomnum == 14 && vroomnum == 36) {
//skeleton attacks sooner after throwing 1 bone
if (enemy99timer > 60) {enemy99timer = 60;}
//bones fall slightly faster
if (enemy9vspeed == 1) {enemy9vspeed = 3;}
if (enemy6vspeed == 1) {enemy6vspeed = 3;}
if (enemy7vspeed == 1) {enemy7vspeed = 3;}
}
}

extern WORD enemy2tag = { "", 0x0062dd92 };
extern WORD enemy13action = { "", 0x0062de7c };
extern WORD enemy13tag = { "", 0x0062df0a };
extern WORD enemy16action = { "", 0x0062dff4 };
extern WORD enemy16tag = { "", 0x0062e080 };
extern WORD enemy11action = { "", 0x0062e2e4 };
extern WORD enemy11tag = { "", 0x0062e372 };
extern WORD enemy17action = { "", 0x0062e16c };
extern WORD enemy17tag = { "", 0x0062e1fa };

void bloodyzombie() {
//bloody zombie 1 (from marble gallery to entrance): 62dcd8- 62dd94 enemy2
//bloody zombie 2: 62de50- 62df0c enemy13
//bloody zombie 3: 62dfc8- 62e084 enemy16
//bloody zombie 4: 62e2b8- 62e374 enemy11
//bloody zombie 5: 62e140- 62e1fc enemy17
//bloody zombie 6: 62dfc8- 62e084 enemy16
//bloody zombie 7: 62de50- 62df0c enemy13
//bloody zombie 8: 62dcd8- 62dd94 enemy2

//zombies now chase you constantly once they go into pain animation once
if (hroomnum == 18 && vroomnum == 36) {
if (enemy2action == 6) {enemy2tag =1;}
if (enemy2tag == 1 && enemy2action == 1) {enemy2action = 3;}
if (enemy13action == 6) {enemy13tag =1;}
if (enemy13tag == 1 && enemy13action == 1) {enemy13action = 3;}
if (enemy16action == 6) {enemy16tag =1;}
if (enemy16tag == 1 && enemy16action == 1) {enemy16action = 3;}
}
if (hroomnum == 4 && vroomnum == 40) {
if (enemy11action == 6) {enemy11tag =1;}
if (enemy11tag == 1 && enemy11action == 1) {enemy11action = 3;}
if (enemy17action == 6) {enemy17tag =1;}
if (enemy17tag == 1 && enemy17action == 1) {enemy17action = 3;}
if (enemy16action == 6) {enemy16tag =1;}
if (enemy16tag == 1 && enemy16action == 1) {enemy16action = 3;}
if (enemy13action == 6) {enemy13tag =1;}
if (enemy13tag == 1 && enemy13action == 1) {enemy13action = 3;}
if (enemy2action == 6) {enemy2tag =1;}
if (enemy2tag == 1 && enemy2action == 1) {enemy2action = 3;}
}
}
extern WORD selectmenu = { "", 0x006ee7e4 };
extern WORD startmenu = { "", 0x006233a4 };
extern WORD enemy18action = { "", 0x0062e980 };
extern WORD enemy18action2 = { "", 0x0062e982 };
extern WORD enemy18hp = { "", 0x0062e992 };
extern WORD enemy18range = { "", 0x0062e999 };
extern WORD enemy18frame = { "", 0x0062e9a4 };
extern WORD enemy18frametimer = { "", 0x0062e9a6 };
extern WORD enemy18timer = { "", 0x0062e9D4 };
extern WORD enemy18timer2 = { "", 0x0062e9D6 };

void owlknight () {
//owl knight1: 62e954- 62ea10 enemy18
if (room02038 > 23 && hroomnum== 2 && (vroomnum == 254 || vroomnum == 38)) {
//increases touch range
if (enemy18hp > 0) {enemy18range= 3100;}
//lowers mourning timer, and sets him to attack when it’s done
if (enemy18timer2 > 200) {enemy18timer2 = 60;}
if (enemy18action == 13 && enemy18action2 == 4 && enemy18timer == 0) {enemy18action2 = 5;}
//attacks faster if owl is dead (stab then slash)
if (enemy18timer == 16 && enemy18action == 8 && enemy18frametimer > 1 && selectmenu == 0 && startmenu == 0) {enemy18frametimer--; }
if (enemy18timer == 16 && enemy18action == 7 && enemy18frame > 4 && enemy18frametimer > 16) {enemy18frametimer=16; }
}
}



HOWEVER... if I seperate it like below, then it works fine:


VOID Lock() {
warg();
zombie();
bonescimitar();
skeleton();
axearmor();
bloodyzombie();
}

extern WORD hroomnum = { "", 0x00629ef0 };
extern WORD vroomnum = { "", 0x00629ef4 };
extern WORD hroompos = { "", 0x0064e230 };
extern WORD vroompos = { "", 0x0064e234 };
extern WORD enemy1vertpos = { "", 0x0062d11e };
extern WORD enemy1action = { "", 0x0062d144 };
extern WORD enemy1frametimer = { "", 0x0062d16a };
extern WORD enemy1timer = { "", 0x0062d198 };
extern WORD enemy1hp = { "", 0x0062d156 };
extern WORD enemy2vertpos = { "", 0x0062dcde };
extern WORD enemy2action = { "", 0x0062dd04 };
extern WORD enemy2frametimer = { "", 0x0062dd2a };
extern WORD enemy2timer = { "", 0x0062dd58 };
extern WORD enemy2hp = { "", 0x0062dd16 };
extern WORD enemy3vertpos = { "", 0x0062e89e };
extern WORD enemy3action = { "", 0x0062e8c4 };
extern WORD enemy3frametimer = { "", 0x0062e8ea };
extern WORD enemy3timer = { "", 0x0062e918 };
extern WORD enemy3hp = { "", 0x0062e8d6 };
extern WORD enemy4vertpos = { "", 0x0062f45e };
extern WORD enemy4action = { "", 0x0062f484 };
extern WORD enemy4frametimer = { "", 0x0062f4aa };
extern WORD enemy4timer = { "", 0x0062f4d8 };
extern WORD enemy4hp = { "", 0x0062f496 };
extern WORD enemy5vertpos = { "", 0x0063001e };
extern WORD enemy5action = { "", 0x00630044 };
extern WORD enemy5frametimer = { "", 0x0063006a };
extern WORD enemy5timer = { "", 0x00630098 };
extern WORD enemy5hp = { "", 0x00630056 };
extern WORD room02038 = { "", 0x005b7546};

void warg(){
//warg1: 62d118- 62d1d4
if (hroomnum == 2 && vroomnum == 38) {
//moves warg off screen, if you go back in room
if (room02038 > 0 && room02038 < 24) {enemy1vertpos = 1121;}
//if near door room is “locked” while tag = 0
if (room02038 == 0 && hroompos >= 455) { vroomnum = 255;}
}
if (hroomnum == 2 && vroomnum == 255) {
//if away from door or warg is dead, puts room # back to normal
if (hroompos < 455 || room02038 == 1) { vroomnum = 38;}
//sets tag if warg 1 is killed
if (enemy1action == 0 && hroompos > 224) {room02038 = 1;}
}
//next line needed so that warg code works whether or not door shows locked, but DOESN’T
//work later if owl knight is here instead.
if (room02038 == 0 && hroomnum == 2 && (vroomnum == 255 || vroomnum == 38)) {
//attacks faster
if (enemy1action == 6 && enemy1timer > 10) {enemy1timer = 10;}
//turns faster
if (enemy1action == 5 && enemy1frametimer > 3) {enemy1frametimer = 3;}
}
//warg 2: 62dcd8- 62dd94
//warg 3 62e898- 62e954
//warg 4 : 62f458- 62f514
//warg 5 : 630018- 6300d4
if (hroomnum == 4 && vroomnum == 40) {
//moves wargs off screen, if you go back in room
if (enemy2hp != 65000 && (room02038 == 2 || room02038 == 4 || room02038 == 6 || room02038 == 8 || room02038 == 10 || room02038 == 12 || room02038 == 14 || room02038 > 15) && room02038 < 24) {enemy2vertpos = 1121;}
if (enemy3hp != 65000 && (room02038 == 3 || room02038 == 4 || room02038 == 7 || room02038 == 11 || room02038 == 8 || room02038 == 12 || room02038 == 15 || room02038 > 15) && room02038 < 24) {enemy3vertpos = 1121;}
if (enemy4hp != 65000 && (room02038 == 5 || room02038 == 6 || room02038 == 7 || room02038 == 13 || room02038 == 15 || room02038 == 14 || room02038 == 8 || room02038 > 15) && room02038 < 24) {enemy4vertpos = 1121;}
if (enemy5hp != 65000 && (room02038 == 9 || room02038 == 10 || room02038 == 13 || room02038 == 11 || room02038 == 15 || room02038 == 14 || room02038 == 12 || room02038 > 15) && room02038 < 24) {enemy5vertpos = 1121;}
//if near door room is “locked” while tag < 16
if (room02038 > 0 && room02038 < 16 && hroompos >= 1740 && hroompos < 1794) { vroomnum = 255;}
}
//puts room back to normal if away from door or all wargs here dead
if (hroomnum == 4 && vroomnum == 255 && (hroompos < 1740 || room02038 == 16)) { vroomnum = 40;}
//next line needed so that code DOESN’T work later in game
if (room02038 > 0 && room02038 < 16 && hroomnum == 4 && vroomnum == 40) {
//attacks faster
if (enemy2action == 6 && enemy2timer > 10) {enemy2timer = 10;}
if (enemy3action == 6 && enemy3timer > 10) {enemy3timer = 10;}
if (enemy4action == 6 && enemy4timer > 10) {enemy4timer = 10;}
if (enemy5action == 6 && enemy5timer > 10) {enemy5timer = 10;}
//turns faster
if (enemy2action == 5 && enemy2frametimer > 3) {enemy2frametimer = 3;}
if (enemy3action == 5 && enemy3frametimer > 3) {enemy3frametimer = 3;}
if (enemy4action == 5 && enemy4frametimer > 3) {enemy4frametimer = 3;}
if (enemy5action == 5 && enemy5frametimer > 3) {enemy5frametimer = 3;}
//increments tag if warg is killed, also changes temp hp so tag only incremented 1 time
if (enemy2action == 11 && (enemy2hp == 0 || enemy2hp > 65000)) {room02038++; enemy2hp = 65000;}
if (enemy3action == 11 && (enemy3hp == 0 || enemy3hp > 65000)) {room02038= room02038 +2; enemy3hp = 65000;}
if (enemy4action == 11 && (enemy4hp == 0 || enemy4hp > 65000)) {room02038= room02038 +4; enemy4hp = 65000;}
if (enemy5action == 11 && (enemy5hp == 0 || enemy5hp > 65000)) {room02038= room02038 +8; enemy5hp = 65000;}
}
//warg 6: 62d118- 62d1d4
//warg 7 : 62dcd8- 62dd94
//warg 8 : 3 62e898- 62e954
if (hroomnum == 14 && vroomnum == 40) {
//moves wargs off screen, if you go back in room
if (enemy1hp != 65000 && (room02038 == 17 || room02038 == 19 || room02038 == 21 || room02038 == 23) && room02038 < 24) {enemy1vertpos = 1121;}
if (enemy2hp != 65000 && (room02038 == 18 || room02038 == 22 || room02038 == 19 || room02038 == 23) && room02038 < 24) {enemy2vertpos = 1121;}
if (enemy3hp != 65000 && (room02038 == 20 || room02038 == 22 || room02038 == 21 || room02038 == 23) && room02038 < 24) {enemy3vertpos = 1121;}
//if near door room is “locked” while tag < 23
if (room02038 > 0 && room02038 < 23 && hroompos >= 1480 && hroompos < 1538) { vroomnum = 255;}
}
//puts room back to normal if away from door or all wargs here dead
if (hroomnum == 14 && vroomnum == 255 && (hroompos < 1480 || room02038 == 23)) { vroomnum = 40;}
//next line needed so that code DOESN’T work later in game
if (room02038 > 0 && room02038 < 23 && hroomnum == 14 && vroomnum == 40) {
//attacks faster
if (enemy1action == 6 && enemy1timer > 10) {enemy1timer = 10;}
if (enemy2action == 6 && enemy2timer > 10) {enemy2timer = 10;}
if (enemy3action == 6 && enemy3timer > 10) {enemy3timer = 10;}
//turns faster
if (enemy1action == 5 && enemy1frametimer > 3) {enemy1frametimer = 3;}
if (enemy2action == 5 && enemy2frametimer > 3) {enemy2frametimer = 3;}
if (enemy3action == 5 && enemy3frametimer > 3) {enemy3frametimer = 3;}
//increments tag if warg is killed, also changes temp hp so tag only incremented 1 time
if (enemy1action == 11 && (enemy1hp == 0 || enemy1hp > 65000)) {room02038++; enemy1hp = 65000;}
if (enemy2action == 11 && (enemy2hp == 0 || enemy2hp > 65000)) {room02038= room02038 +2; enemy2hp = 65000;}
if (enemy3action == 11 && (enemy3hp == 0 || enemy3hp > 65000)) {room02038= room02038 +4; enemy3hp = 65000;}
}
//changes tag to 24, so that enemies are no longer moved off screen once you enter alchemy lab
if (hroomnum == 14 && vroomnum == 36 && room02038 == 23) {room02038 = 24;}
}

extern WORD enemy6hspeed = { "", 0x0063185d};
extern WORD enemy6action = { "", 0x00631880};
extern WORD enemy6frametimer = { "", 0x006318a6};
extern WORD enemy7hspeed = { "", 0x00631919};
extern WORD enemy7action = { "", 0x0063193c};
extern WORD enemy7frametimer = { "", 0x00631962};
extern WORD enemy8hspeed = { "", 0x006319d5};
extern WORD enemy8action = { "", 0x006319f8};
extern WORD enemy8frametimer = { "", 0x00631a1e};
extern WORD enemy9hspeed = { "", 0x006317a1};
extern WORD enemy9action = { "", 0x006317c4};
extern WORD enemy9frametimer = { "", 0x006317ea};


void zombie() {
//zombie: 631798- 631853 (enemy9)
//zombie: 631854- 63190f (enemy6)
//zombie: 631910- 6319cb (enemy7)
//zombie: 6319cc- 631a87 (enemy8)
//zombie: 631a88- 631b44
if ((hroomnum == 4 || hroomnum == 14) && (vroomnum == 40 || vroomnum == 255)) {
//zombies walk faster (right then left)
if (enemy6hspeed == 128) {enemy6hspeed = 400;}
if (enemy6hspeed == 65408) {enemy6hspeed = 65136;}
if (enemy7hspeed == 128) {enemy7hspeed = 228;}
if (enemy7hspeed == 65408) {enemy7hspeed = 65308;}
if (enemy8hspeed == 128) {enemy8hspeed = 228;}
if (enemy8hspeed == 65408) {enemy8hspeed = 65308;}
if (enemy9hspeed == 128) {enemy9hspeed = 228;}
if (enemy9hspeed == 65408) {enemy9hspeed = 65308;}
//zombies rise out of ground faster
if (enemy6action == 2 && enemy6frametimer > 2) {enemy6frametimer = 2;}
if (enemy7action == 2 && enemy7frametimer > 2) {enemy7frametimer = 2;}
if (enemy8action == 2 && enemy8frametimer > 2) {enemy8frametimer = 2;}
if (enemy9action == 2 && enemy9frametimer > 2) {enemy9frametimer = 2;}
}
}

extern WORD enemy3frame = { "", 0x0062e8e8 };
extern WORD enemy3range = { "", 0x0062e8de };
extern WORD enemy3hitbox = { "", 0x0062e8a8 };
extern WORD enemy10frame = { "", 0x0062ea60 };
extern WORD enemy10frametimer = { "", 0x0062ea62 };
extern WORD enemy10range = { "", 0x0062ea56 };
extern WORD enemy10hitbox = { "", 0x0062ea20 };
extern WORD enemy11frame = { "", 0x0062e308 };
extern WORD enemy11frametimer = { "", 0x0062e30a };
extern WORD enemy11range = { "", 0x0062e2fe };
extern WORD enemy11hitbox = { "", 0x0062e2c8 };
extern WORD enemy12frame = { "", 0x0062e3c4 };
extern WORD enemy12frametimer = { "", 0x0062e3c6 };
extern WORD enemy12range = { "", 0x0062e3ba };
extern WORD enemy12hitbox = { "", 0x0062e384 };
extern WORD enemy2frame = { "", 0x0062dd28};
extern WORD enemy2range = { "", 0x0062dd1e };
extern WORD enemy2hitbox = { "", 0x0062dce8 };
extern WORD enemy13frame = { "", 0x0062dea0 };
extern WORD enemy13frametimer = { "", 0x0062dea2 };
extern WORD enemy13range = { "", 0x0062de96 };
extern WORD enemy13hitbox = { "", 0x0062de60 };
extern WORD enemy14frame = { "", 0x0062dde4 };
extern WORD enemy14frametimer = { "", 0x0062dde6 };
extern WORD enemy14range = { "", 0x0062ddda };
extern WORD enemy14hitbox = { "", 0x0062dda4 };

void bonescimitar () {
//bonescimitar 1: 62e898- 62e954 enemy3
//bone scimitar 2: 62ea10- 62eacc enemy10
//bone scimitar 3: 62e2b8- 62e374 enemy11
//bone scimitar 4: enemy12
//bone scimitar 5: 62dcd8- 62dd94 (enemy2)
//bone scimitar 6: enemy13
//bonescimitar 7: enemy14
//bonescimitar 8: 62e898- 62e954 enemy3
//bone scimitar 9: 62ea10- 62eacc enemy10

if (hroomnum == 18 && vroomnum == 36) {
if (enemy3frame == 9) {
//holds sword out for less time
if (enemy3frametimer > 10) {enemy3frametimer = 10;}
//increases sword range and moves hitbox
{enemy3range= 4633; enemy3hitbox= 65520;}
}
if (enemy10frame == 9) {
if (enemy10frametimer > 10) {enemy10frametimer = 10;}
{enemy10range= 4633; enemy10hitbox= 65520;}
}
}
//bone scimitar 3 & 4
if (hroomnum == 14 && vroomnum == 36) {
if (enemy11frame == 9) {
if (enemy11frametimer > 10) {enemy11frametimer = 10;}
{enemy11range= 4633; enemy11hitbox= 65520;}
}
if (enemy12frame == 9) {
if (enemy12frametimer > 10) {enemy12frametimer = 10;}
{enemy12range= 4633; enemy12hitbox= 65520;}
}
}
//bone scimitar 5,6, 7
if (hroomnum == 13 && vroomnum == 34) {
if (enemy2frame == 9) {
if (enemy2frametimer > 10) {enemy2frametimer = 10;}
{enemy2range= 4633; enemy2hitbox= 65520;}
}
if (enemy13frame == 9) {
if (enemy13frametimer > 10) {enemy13frametimer = 10;}
{enemy13range= 4633; enemy13hitbox= 65520;}
}
if (enemy14frame == 9) {
if (enemy14frametimer > 10) {enemy14frametimer = 10;}
{enemy14range= 4633; enemy14hitbox= 65520;}
}
}
//bone scimitar 8 & 9
if (hroomnum == 13 && vroomnum == 26) {
if (enemy3frame == 9) {
if (enemy3frametimer > 10) {enemy3frametimer = 10;}
{enemy3range= 4633; enemy3hitbox= 65520;}
}
if (enemy10frame == 9) {
if (enemy10frametimer > 10) {enemy10frametimer = 10;}
{enemy10range= 4633; enemy10hitbox= 65520;}
}
}
}

extern WORD enemy15hspeed = { "", 0x0062df15 };
extern WORD enemy15action = { "", 0x0062df38 };
extern WORD enemy15frametimer = { "", 0x0062df5e };

void axearmor () {
//axe armor1: 62df0c- 62dfc7 enemy15
//axe armor attacks quicker, and moves faster
if (hroomnum== 13 && vroomnum == 34) {
if (enemy15action != 8 && enemy15frametimer > 1) {enemy15frametimer--;}
if ((enemy15action == 2 || enemy15action == 3) && enemy15hspeed > 0 && enemy15hspeed < 65000) {enemy15hspeed = 125;}
if ((enemy15action == 2 || enemy15action == 3) && enemy15hspeed > 65000 ) {enemy15hspeed = 65410;}
}
}

extern WORD enemy9vspeed = { "", 0x006317a6 };
extern WORD enemy6vspeed = { "", 0x00631862 };
extern WORD enemy7vspeed = { "", 0x0063191e };
extern WORD enemy99timer = { "", 0x0062e4ac };
void skeleton () {
//skeleton 1: 62e430- 62e4EC
//bone1: 631798- 631853 (enemy9)
//bone2: 631854- 63190f (enemy6)
//bone3: 631910- 6319cb (enemy7)
if (hroomnum == 14 && vroomnum == 36) {
//skeleton attacks sooner after throwing 1 bone
if (enemy99timer > 60) {enemy99timer = 60;}
//bones fall slightly faster
if (enemy9vspeed == 1) {enemy9vspeed = 3;}
if (enemy6vspeed == 1) {enemy6vspeed = 3;}
if (enemy7vspeed == 1) {enemy7vspeed = 3;}
}
}

extern WORD enemy2tag = { "", 0x0062dd92 };
extern WORD enemy13action = { "", 0x0062de7c };
extern WORD enemy13tag = { "", 0x0062df0a };
extern WORD enemy16action = { "", 0x0062dff4 };
extern WORD enemy16tag = { "", 0x0062e080 };
extern WORD enemy11action = { "", 0x0062e2e4 };
extern WORD enemy11tag = { "", 0x0062e372 };
extern WORD enemy17action = { "", 0x0062e16c };
extern WORD enemy17tag = { "", 0x0062e1fa };

void bloodyzombie() {
//bloody zombie 1 (from marble gallery to entrance): 62dcd8- 62dd94 enemy2
//bloody zombie 2: 62de50- 62df0c enemy13
//bloody zombie 3: 62dfc8- 62e084 enemy16
//bloody zombie 4: 62e2b8- 62e374 enemy11
//bloody zombie 5: 62e140- 62e1fc enemy17
//bloody zombie 6: 62dfc8- 62e084 enemy16
//bloody zombie 7: 62de50- 62df0c enemy13
//bloody zombie 8: 62dcd8- 62dd94 enemy2

//zombies now chase you constantly once they go into pain animation once
if (hroomnum == 18 && vroomnum == 36) {
if (enemy2action == 6) {enemy2tag =1;}
if (enemy2tag == 1 && enemy2action == 1) {enemy2action = 3;}
if (enemy13action == 6) {enemy13tag =1;}
if (enemy13tag == 1 && enemy13action == 1) {enemy13action = 3;}
if (enemy16action == 6) {enemy16tag =1;}
if (enemy16tag == 1 && enemy16action == 1) {enemy16action = 3;}
}
if (hroomnum == 4 && vroomnum == 40) {
if (enemy11action == 6) {enemy11tag =1;}
if (enemy11tag == 1 && enemy11action == 1) {enemy11action = 3;}
if (enemy17action == 6) {enemy17tag =1;}
if (enemy17tag == 1 && enemy17action == 1) {enemy17action = 3;}
if (enemy16action == 6) {enemy16tag =1;}
if (enemy16tag == 1 && enemy16action == 1) {enemy16action = 3;}
if (enemy13action == 6) {enemy13tag =1;}
if (enemy13tag == 1 && enemy13action == 1) {enemy13action = 3;}
if (enemy2action == 6) {enemy2tag =1;}
if (enemy2tag == 1 && enemy2action == 1) {enemy2action = 3;}
}
}


PART 2 UNDER SEPERATE ADDRESS LOCK BOX:

VOID Lock() {
owlknight();
}

extern WORD hroomnum = { "", 0x00629ef0 };
extern WORD vroomnum = { "", 0x00629ef4 };
extern WORD room02038 = { "", 0x005b7546};
extern WORD selectmenu = { "", 0x006ee7e4 };
extern WORD startmenu = { "", 0x006233a4 };
extern WORD enemy18action = { "", 0x0062e980 };
extern WORD enemy18action2 = { "", 0x0062e982 };
extern WORD enemy18hp = { "", 0x0062e992 };
extern WORD enemy18range = { "", 0x0062e999 };
extern WORD enemy18frame = { "", 0x0062e9a4 };
extern WORD enemy18frametimer = { "", 0x0062e9a6 };
extern WORD enemy18timer = { "", 0x0062e9D4 };
extern WORD enemy18timer2 = { "", 0x0062e9D6 };

void owlknight () {
//owl knight1: 62e954- 62ea10 enemy18
if (room02038 > 23 && hroomnum== 2 && (vroomnum == 254 || vroomnum == 38)) {
//increases touch range
if (enemy18hp > 0) {enemy18range= 3100;}
//lowers mourning timer, and sets him to attack when it’s done
if (enemy18timer2 > 200) {enemy18timer2 = 60;}
if (enemy18action == 13 && enemy18action2 == 4 && enemy18timer == 0) {enemy18action2 = 5;}
//attacks faster if owl is dead (stab then slash)
if (enemy18timer == 16 && enemy18action == 8 && enemy18frametimer > 1 && selectmenu == 0 && startmenu == 0) {enemy18frametimer--; }
if (enemy18timer == 16 && enemy18action == 7 && enemy18frame > 4 && enemy18frametimer > 16) {enemy18frametimer=16; }
}
}


I don't expect you to read thru all my code of course, but since they work fine seperately, I was wondering if maybe there was a limit on how much code can be in one lock box. And if not I figured it might be a bug and that I should at least be helpful and tell you about it. :)
Esco.... the name says it all. New Yorikan for life.
User avatar
esco
NULL
 
Posts: 148
Joined: Mon Sep 18, 2006 2:25 am
Location: Florida, a.k.a. the US's version of hell!

Postby L. Spiro » Tue Dec 05, 2006 3:02 pm

There is no limit to the amount of code you can apply.
I tried your code in both the item Lock area and in the actual code editor and it all compiles fine.


The problem with not loading duplicate addresses is changed.
I say changed rather than fixed because it was originally intentional.



Demo #6

Added the API functions needed to run the Clean Sweep on Minesweeper script.
Modified the script compilation process a smidge. I found a bug with the switch() statement, which you didn’t use. But who knows if this somehow inadvertently fixed whatever was crashing your scripts; they worked fine for me in this version.

Use http://www.memoryhacking.com/Misc/Tut/Script%20Function%20Reference.htm to view all current API functions.
http://www.memoryhacking.com/Misc/Tut/Predefined%20Enums.htm For current enumerations.
http://www.memoryhacking.com/Misc/Tut/Predefined%20Structs%20&%20Unions.htm For current structures and unions.


L. Spiro
User avatar
L. Spiro
L. Spiro
 
Posts: 3129
Joined: Mon Jul 17, 2006 10:14 pm
Location: Tokyo, Japan

Postby esco » Wed Dec 06, 2006 2:26 pm

L. Spiro wrote:There is no limit to the amount of code you can apply.
I tried your code in both the item Lock area and in the actual code editor and it all compiles fine.


Sorry bro... but definately not. I tried it on 3 computers, and I just tried it again now... crashes EVERY time. It's coo though... I wanted to break the code up anyways so it's easier to edit, so it doesn't get in my way. I just wanted to tell you about it, since you've been so helpful to me, i wanted to be of some help to you right back. :)

Also I've found another random one where it seems to randomly crash if I double click a value to edit it... and I double click TOO fast, but this is random. Although it does happen on several computers... guess I should have mentioned that too, but it's a TOTALLY seperate issue, that happens maybe 1 out of 8 times. I'll let you know if it happens on this one too or not.

YUP! It does... just happened to me. Luckily I know about it, so I save every time I make an important change. It happens quite frequently too.

The problem with not loading duplicate addresses is changed.
I say changed rather than fixed because it was originally intentional.


Coo... I'll play with it some. If I find any bugs I'll let you know. It just keeps getting better and better though. :)

P.S. Oddly... the bug with my scripts from above DOESN'T happen anymore in this new version.... hmmmmm.....
Esco.... the name says it all. New Yorikan for life.
User avatar
esco
NULL
 
Posts: 148
Joined: Mon Sep 18, 2006 2:25 am
Location: Florida, a.k.a. the US's version of hell!

Previous

Return to General Related Discussions

Who is online

Users browsing this forum: No registered users and 0 guests