Browse Source

Added boss rush and scripted stage skipping.

master
5 years ago
parent
commit
796a78195b
3 changed files with 1096 additions and 398 deletions
  1. 73
    0
      CEAs/boss-jump-updated.CEA
  2. 121
    0
      CEAs/bp-jumping-beta.CEA
  3. 902
    398
      DevilMayCry4SpecialEdition.CT

+ 73
- 0
CEAs/boss-jump-updated.CEA View File

@@ -0,0 +1,73 @@
[enable]
alloc(newmem,160)
label(returnhere)
label(bael)
label(echidna)
label(credo)
label(agnus)
label(originalcode)
label(exit)
newmem:
//need to jump to the next boss stage!
//write destination stage to memory
//edit room i.d to match boss stage
//jump to berial if we're in i.d 705!
//jump to bael if we're in stage id 704 OR 503 (Berial room)
//jump to echidna if we're in stage id 703 OR 504 (Bael room)
//jump to credo if we're in stage id 701 OR 505 (Echidna room)
//jump to agnus if we're in stage i.d 702 OR 507 (Credo room)
//need not bother anymore if we're on agnus's room
//eax is currently the object for bloody palace!
push ebx
mov ebx, [eax+90] //which stage are we at?
cmp ebx, 14 //14 in hex = 20 in decimal
jge bael //greater or equal to 20 our next set is bael
mov edx, 1f7 //below stage 20 we go to berial (1f7 == 503)
mov [eax+90], 14
jmp originalcode
bael:
cmp ebx, 28 //28 in hex = 40 in decimal
jge echidna //greater or equal to 40 our next set is echidna
mov edx, 1f8 //1f8 = 504
mov [eax+90], 28
jmp originalcode
echidna:
cmp ebx, 3c
jge credo
mov edx, 1f9 //1f9 = 505 in decimal
mov [eax+90], 3c
jmp originalcode
credo:
cmp ebx, 50
jge agnus
mov edx, 1fb //1fb = 507
mov [eax+90], 50
jmp originalcode
agnus:
cmp ebx, 64
jge originalcode
mov edx, 1fa
mov [eax+90], 64
//let this continue as usual
originalcode:
mov [eax+00000088],edx //still in use! do this last
exit:
pop ebx
jmp returnhere
"DevilMayCry4SpecialEdition.exe"+152461:
jmp newmem
nop
returnhere:
[disable]
dealloc(newmem)
"DevilMayCry4SpecialEdition.exe"+152461:
mov [eax+00000088],edx //writes room i.d to memory

+ 121
- 0
CEAs/bp-jumping-beta.CEA View File

@@ -0,0 +1,121 @@
[enable]
alloc(newmem,2048)
registersymbol(next_stage)
alloc(next_stage, 2)
label(sunnypalace) //first set leading to Berial
label(sunsetpalace) //second set leading to Bael
label(cloudypalace) //third set leading to Echidna
label(nightpalace) //fourth set leading to Credo
label(dmdpalace) //fifth set leading to Agnus
label(berial)
label(bael)
label(echidna)
label(credo)
label(agnus)
label(dante)
label(stageset)
label(returnhere)
label(originalcode)
label(exit)
next_stage:
db 0 //initialization, this will update per stage
newmem:
push ebx //free to use ebx!
mov ebx, [eax+90]
cmp [next_stage], ebx
jg sunnypalace //if greater than current then jump
//otherwise make sure next_stage is equal to current stage!
//in this context, the stage number is the destination stage
//usual case when targetting lower stages is enemy don't spawn
//avoid that case.
mov [eax+90], ebx
jmp originalcode
//there is probably a far more elegant way to do this
sunnypalace:
cmp [next_stage], 13 //13 in hex = 19 in decimal
jg sunsetpalace
mov edx, 2c1 //move room i.d just in case, 2c1 = 705
jmp stageset
sunsetpalace:
cmp [next_stage], 14 //target stage is berial?
je berial
cmp [next_stage], 27 //27 in hex = 39 in decimal
jg cloudypalace
mov edx, 2c0 //stage i.d for stage 21-39 (704)
jmp stageset
berial:
mov edx, 1f7 //stage i.d for berial's room
jmp stageset
cloudypalace:
cmp [next_stage], 28 //target stage is bael?
je bael
cmp [next_stage], 3b //3b = 59 in decimal
jg nightpalace
mov edx, 2bf //stage i.d for stage 41-59 (703)
jmp stageset
bael:
mov edx, 1f8 //stage i.d for bael's room
jmp stageset
nightpalace:
cmp [next_stage], 3c //target stage is echidna?
je echidna
cmp [next_stage], 4f //4f = 79 in decimal
jg dmdpalace
mov edx, 2bd //stage i.d for stage 61-79 (701)
jmp stageset
echidna:
mov edx, 1f9 //stage i.d for echidna's room
jmp stageset
dmdpalace:
cmp [next_stage], 50 //target stage is credo?
je credo
cmp [next_stage], 63 //63 = 99 in decimal
jg agnus
mov edx, 2be //stage i.d for stage 81 - 99 (702)
jmp stageset
credo:
mov edx, 1fb //stage i.d for credo's room (507)
jmp stageset
agnus:
cmp [next_stage], 64
jg dante
mov edx, 1fa
jmp stageset
dante:
mov edx, 2bc
stageset:
mov ebx, [next_stage]
mov [eax+90], ebx
originalcode:
mov [eax+00000088],edx
exit:
pop ebx
jmp returnhere
"DevilMayCry4SpecialEdition.exe"+152461:
jmp newmem
nop
returnhere:
[disable]
dealloc(newmem)
dealloc(next_stage)
"DevilMayCry4SpecialEdition.exe"+152461:
mov [eax+00000088],edx

+ 902
- 398
DevilMayCry4SpecialEdition.CT
File diff suppressed because it is too large
View File


Loading…
Cancel
Save