diff --git a/source/games/duke/src/sectors_d.cpp b/source/games/duke/src/sectors_d.cpp index 953f283c2..55056e80d 100644 --- a/source/games/duke/src/sectors_d.cpp +++ b/source/games/duke/src/sectors_d.cpp @@ -154,6 +154,50 @@ void operateforcefields_d(DDukeActor* act, int low) operateforcefields_common(act, low, { DTILE_W_FORCEFIELD, DTILE_W_FORCEFIELD2, DTILE_W_FORCEFIELD3, DTILE_BIGFORCE }); } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +bool checkaccessswitch_d(int snum, int switchpal, DDukeActor* act, walltype* wwal) +{ + if (ps[snum].access_incs == 0) + { + if (switchpal == 0) + { + if ((ps[snum].got_access & 1)) + ps[snum].access_incs = 1; + else FTA(70, &ps[snum]); + } + + else if (switchpal == 21) + { + if (ps[snum].got_access & 2) + ps[snum].access_incs = 1; + else FTA(71, &ps[snum]); + } + + else if (switchpal == 23) + { + if (ps[snum].got_access & 4) + ps[snum].access_incs = 1; + else FTA(72, &ps[snum]); + } + + if (ps[snum].access_incs == 1) + { + if (!act) + ps[snum].access_wall = wwal; + else + ps[snum].access_spritenum = act; + } + + return 1; + } + return 0; +} + //--------------------------------------------------------------------------- // // how NOT to implement switch animations... @@ -202,39 +246,7 @@ bool checkhitswitch_d(int snum, walltype* wwal, DDukeActor *act) break; case DTILE_ACCESSSWITCH: case DTILE_ACCESSSWITCH2: - if (ps[snum].access_incs == 0) - { - if (switchpal == 0) - { - if ((ps[snum].got_access & 1)) - ps[snum].access_incs = 1; - else FTA(70, &ps[snum]); - } - - else if (switchpal == 21) - { - if (ps[snum].got_access & 2) - ps[snum].access_incs = 1; - else FTA(71, &ps[snum]); - } - - else if (switchpal == 23) - { - if (ps[snum].got_access & 4) - ps[snum].access_incs = 1; - else FTA(72, &ps[snum]); - } - - if (ps[snum].access_incs == 1) - { - if (!act) - ps[snum].access_wall = wwal; - else - ps[snum].access_spritenum = act; - } - - return 0; - } + checkaccessswitch_d(snum, switchpal, act, wwal); [[fallthrough]]; case DTILE_DIPSWITCH2: case DTILE_DIPSWITCH2ON: diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp index e31dd2720..b8897f924 100644 --- a/source/games/duke/src/sectors_r.cpp +++ b/source/games/duke/src/sectors_r.cpp @@ -113,6 +113,61 @@ void operateforcefields_r(DDukeActor* act, int low) operateforcefields_common(act, low, { RTILE_BIGFORCE }); } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +bool checkaccessswitch_r(int snum, int switchpal, DDukeActor* act, walltype* wwal) +{ + if (ps[snum].access_incs == 0) + { + if (switchpal == 0) + { + if (ps[snum].keys[1]) + ps[snum].access_incs = 1; + else + { + FTA(70, &ps[snum]); + if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor()); + } + } + + else if (switchpal == 21) + { + if (ps[snum].keys[2]) + ps[snum].access_incs = 1; + else + { + FTA(71, &ps[snum]); + if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor()); + } + } + + else if (switchpal == 23) + { + if (ps[snum].keys[3]) + ps[snum].access_incs = 1; + else + { + FTA(72, &ps[snum]); + if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor()); + } + } + + if (ps[snum].access_incs == 1) + { + if (!act) + ps[snum].access_wall = wwal; + else + ps[snum].access_spritenum = act; + } + return 1; + } + return 0; +} + //--------------------------------------------------------------------------- // // @@ -161,51 +216,7 @@ bool checkhitswitch_r(int snum, walltype* wwal, DDukeActor* act) break; case RTILE_ACCESSSWITCH: case RTILE_ACCESSSWITCH2: - if (ps[snum].access_incs == 0) - { - if (switchpal == 0) - { - if (ps[snum].keys[1]) - ps[snum].access_incs = 1; - else - { - FTA(70, &ps[snum]); - if (isRRRA()) S_PlayActorSound(99, act? act : ps[snum].GetActor()); - } - } - - else if (switchpal == 21) - { - if (ps[snum].keys[2]) - ps[snum].access_incs = 1; - else - { - FTA(71, &ps[snum]); - if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor()); - } - } - - else if (switchpal == 23) - { - if (ps[snum].keys[3]) - ps[snum].access_incs = 1; - else - { - FTA(72, &ps[snum]); - if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor()); - } - } - - if (ps[snum].access_incs == 1) - { - if (!act) - ps[snum].access_wall = wwal; - else - ps[snum].access_spritenum = act; - } - - return 0; - } + checkaccessswitch_r(snum, switchpal, act, wwal); goto goOn1; case RTILE_MULTISWITCH2: