diff --git a/GLDEFS.txt b/GLDEFS.txt new file mode 100644 index 0000000..ec7a709 --- /dev/null +++ b/GLDEFS.txt @@ -0,0 +1,21 @@ +brightmap sprite jmppa0 +{ + map "sprites/jmpr_brightmap_1.png" + disablefullbright +} + + +brightmap sprite jmppb0 +{ + map "sprites/jmpr_brightmap_2.png" + disablefullbright +} + +brightmap sprite jmppc0 +{ + map "sprites/jmpr_brightmap_3.png" + disablefullbright +} + + + diff --git a/graphics/jmpr_reticle1.png b/graphics/jmpr_reticle1.png index f1d3aeb..38ad529 100644 Binary files a/graphics/jmpr_reticle1.png and b/graphics/jmpr_reticle1.png differ diff --git a/graphics/jmpr_reticle2.png b/graphics/jmpr_reticle2.png index 15e2645..af05a82 100644 Binary files a/graphics/jmpr_reticle2.png and b/graphics/jmpr_reticle2.png differ diff --git a/graphics/jmpr_reticle3.png b/graphics/jmpr_reticle3.png index 938377d..b172144 100644 Binary files a/graphics/jmpr_reticle3.png and b/graphics/jmpr_reticle3.png differ diff --git a/source_data/Makefile b/source_data/Makefile index 2151423..613724f 100644 --- a/source_data/Makefile +++ b/source_data/Makefile @@ -5,7 +5,26 @@ all : \ ../sprites/jmppa0.png \ ../sprites/jmppb0.png \ ../sprites/jmppc0.png \ - ../graphics/jmpr_reticle.png + ../graphics/jmpr_reticle1.png \ + ../graphics/jmpr_reticle2.png \ + ../graphics/jmpr_reticle3.png \ + ../sprites/jmpia0.png \ + ../sprites/jmpib0.png \ + ../sprites/jmpic0.png \ + ../sprites/jmpid0.png \ + ../sprites/jmpie0.png \ + ../sprites/jmpif0.png \ + ../sprites/jmpig0.png \ + ../sprites/jmpja0.png \ + ../sprites/jmpjb0.png \ + ../sprites/jmpjc0.png \ + ../sprites/jmpjd0.png \ + ../sprites/jmpje0.png \ + ../sprites/jmpjf0.png \ + ../sprites/jmpjg0.png \ + letter_sprites_l \ + letter_sprites_r \ + brightmaps ../sprites/jmpka0.png : kit.aseprite aseprite -b $^ --save-as $@ @@ -17,8 +36,10 @@ all : \ # status light. ../sprites/jmppa0.png ../sprites/jmppb0.png ../sprites/jmppc0.png : povsprite.aseprite aseprite -b $^ \ - --ignore-layer "numberindicatorleft" \ - --ignore-layer "numberindicatorright" \ + --ignore-layer "brightmap_display" \ + --ignore-layer "brightmap_leds" \ + --ignore-layer "numberindicatorl" \ + --ignore-layer "numberindicatorr" \ --frame-range 0,2 --save-as $@ # Correct Aseprite's automatic naming to Doom's. (Number at the @@ -26,6 +47,200 @@ all : \ mv ../sprites/jmppa1.png ../sprites/jmppb0.png mv ../sprites/jmppa2.png ../sprites/jmppc0.png -../graphics/jmpr_reticle.png : jmpr_reticle.aseprite +../graphics/jmpr_reticle1.png \ +../graphics/jmpr_reticle2.png \ +../graphics/jmpr_reticle3.png : jmpr_reticle.aseprite aseprite -b $^ \ --frame-range 0,2 --save-as $@ + +../sprites/jmpia0.png \ +../sprites/jmpib0.png \ +../sprites/jmpic0.png \ +../sprites/jmpid0.png \ +../sprites/jmpie0.png \ +../sprites/jmpif0.png \ +../sprites/jmpig0.png \ +../sprites/jmpja0.png \ +../sprites/jmpjb0.png \ +../sprites/jmpjc0.png \ +../sprites/jmpjd0.png \ +../sprites/jmpje0.png \ +../sprites/jmpjf0.png \ +../sprites/jmpjg0.png : povsprite.aseprite + + aseprite -b $^ \ + --layer "numberindicatorl" \ + --frame-range 0,6 --save-as ../sprites/jmpia.png + + aseprite -b $^ \ + --layer "numberindicatorr" \ + --frame-range 0,6 --save-as ../sprites/jmpja.png + + mv ../sprites/jmpia1.png ../sprites/jmpia0.png + mv ../sprites/jmpia2.png ../sprites/jmpib0.png + mv ../sprites/jmpia3.png ../sprites/jmpic0.png + mv ../sprites/jmpia4.png ../sprites/jmpid0.png + mv ../sprites/jmpia5.png ../sprites/jmpie0.png + mv ../sprites/jmpia6.png ../sprites/jmpif0.png + mv ../sprites/jmpia7.png ../sprites/jmpig0.png + mv ../sprites/jmpja1.png ../sprites/jmpja0.png + mv ../sprites/jmpja2.png ../sprites/jmpjb0.png + mv ../sprites/jmpja3.png ../sprites/jmpjc0.png + mv ../sprites/jmpja4.png ../sprites/jmpjd0.png + mv ../sprites/jmpja5.png ../sprites/jmpje0.png + mv ../sprites/jmpja6.png ../sprites/jmpjf0.png + mv ../sprites/jmpja7.png ../sprites/jmpjg0.png + + +letter_sprites_% : + + + aseprite -b povsprite.aseprite \ + --layer "numberindicator$*" \ + --frame-range 0,6 --save-as tmp.png + + convert tmp6.png \ + tmp3.png -composite \ + tmp5.png -composite \ + tmp4.png -composite \ + tmp2.png -composite \ + tmp1.png -composite \ + indic_$*_0.png + + convert tmp4.png \ + tmp5.png -composite \ + indic_$*_1.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp3.png -composite \ + tmp5.png -composite \ + tmp2.png -composite \ + indic_$*_2.png + + convert tmp3.png \ + tmp4.png -composite \ + tmp5.png -composite \ + tmp6.png -composite \ + tmp7.png -composite \ + indic_$*_3.png + + convert tmp1.png \ + tmp4.png -composite \ + tmp5.png -composite \ + tmp7.png -composite \ + indic_$*_4.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp3.png -composite \ + tmp4.png -composite \ + tmp1.png -composite \ + indic_$*_5.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp3.png -composite \ + tmp4.png -composite \ + tmp1.png -composite \ + tmp2.png -composite \ + indic_$*_6.png + + convert tmp6.png \ + tmp5.png -composite \ + tmp4.png -composite \ + indic_$*_7.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp3.png -composite \ + tmp5.png -composite \ + tmp4.png -composite \ + tmp2.png -composite \ + tmp1.png -composite \ + indic_$*_8.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp3.png -composite \ + tmp5.png -composite \ + tmp4.png -composite \ + tmp1.png -composite \ + indic_$*_9.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp5.png -composite \ + tmp4.png -composite \ + tmp2.png -composite \ + tmp1.png -composite \ + indic_$*_a.png + + convert tmp7.png \ + tmp3.png -composite \ + tmp4.png -composite \ + tmp2.png -composite \ + tmp1.png -composite \ + indic_$*_b.png + + convert tmp3.png \ + tmp1.png -composite \ + tmp2.png -composite \ + tmp6.png -composite \ + indic_$*_c.png + + convert tmp7.png \ + tmp3.png -composite \ + tmp4.png -composite \ + tmp2.png -composite \ + tmp5.png -composite \ + indic_$*_d.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp3.png -composite \ + tmp2.png -composite \ + tmp1.png -composite \ + indic_$*_e.png + + convert tmp6.png \ + tmp7.png -composite \ + tmp2.png -composite \ + tmp1.png -composite \ + indic_$*_f.png + + mv indic_$*_0.png ../sprites/jmi$*a0.png + mv indic_$*_1.png ../sprites/jmi$*b0.png + mv indic_$*_2.png ../sprites/jmi$*c0.png + mv indic_$*_3.png ../sprites/jmi$*d0.png + mv indic_$*_4.png ../sprites/jmi$*e0.png + mv indic_$*_5.png ../sprites/jmi$*f0.png + mv indic_$*_6.png ../sprites/jmi$*g0.png + mv indic_$*_7.png ../sprites/jmi$*h0.png + mv indic_$*_8.png ../sprites/jmi$*i0.png + mv indic_$*_9.png ../sprites/jmi$*j0.png + mv indic_$*_a.png ../sprites/jmi$*k0.png + mv indic_$*_b.png ../sprites/jmi$*l0.png + mv indic_$*_c.png ../sprites/jmi$*m0.png + mv indic_$*_d.png ../sprites/jmi$*n0.png + mv indic_$*_e.png ../sprites/jmi$*o0.png + mv indic_$*_f.png ../sprites/jmi$*p0.png + +brightmaps : povsprite.aseprite + + aseprite -b $^ \ + --layer "brightmap_display" \ + --frame-range 0,0 --save-as brightmap_display.png + + aseprite -b $^ \ + --layer "brightmap_leds" \ + --frame-range 0,2 --save-as brightmap_leds.png + + aseprite -b $^ \ + --layer "brightmap_digits" \ + --frame-range 0,0 --save-as brightmap_digits.png + + composite brightmap_display.png brightmap_leds1.png -compose screen ../sprites/jmpr_brightmap_1.png + composite brightmap_display.png brightmap_leds2.png -compose screen ../sprites/jmpr_brightmap_2.png + composite brightmap_display.png brightmap_leds3.png -compose screen ../sprites/jmpr_brightmap_3.png + cp brightmap_digits.png ../sprites/bright_jmpr_digits.png diff --git a/source_data/jmpr_reticle.aseprite b/source_data/jmpr_reticle.aseprite index b2267a4..3a39d27 100644 Binary files a/source_data/jmpr_reticle.aseprite and b/source_data/jmpr_reticle.aseprite differ diff --git a/source_data/povsprite.aseprite b/source_data/povsprite.aseprite index 9bf24a4..36c60d0 100644 Binary files a/source_data/povsprite.aseprite and b/source_data/povsprite.aseprite differ diff --git a/sprites/jmppa0.png b/sprites/jmppa0.png index 2f83dd4..11a1d82 100644 Binary files a/sprites/jmppa0.png and b/sprites/jmppa0.png differ diff --git a/sprites/jmppb0.png b/sprites/jmppb0.png index 414ab5e..f1fb611 100644 Binary files a/sprites/jmppb0.png and b/sprites/jmppb0.png differ diff --git a/sprites/jmppc0.png b/sprites/jmppc0.png index 95066d9..cbf2d8c 100644 Binary files a/sprites/jmppc0.png and b/sprites/jmppc0.png differ diff --git a/textures.txt b/textures.txt index c9ef819..426620d 100644 --- a/textures.txt +++ b/textures.txt @@ -24,6 +24,12 @@ sprite JMPKA0, 48, 32 { } +// Weapon sprites. +// +// Note that there's a corresponding offset in the ledd_left_indicator +// and ledd_right_indicator states in object itself, which offset the +// text into position. + sprite JMPPA0, 320, 200 { offset 0, 32 patch JMPPA0,0,0 { } @@ -39,4 +45,3 @@ sprite JMPPC0, 320, 200 { patch JMPPC0,0,0 { } } - diff --git a/zscript.zs b/zscript.zs index 381cb98..8b56d42 100644 --- a/zscript.zs +++ b/zscript.zs @@ -295,18 +295,20 @@ class JumperCablesUsable : HDWeapon // statusBar.SetClipRect(cx,cy,cw,ch); String filename = String.Format("graphics/jmpr_reticle%d.png", lastIndicatorStatus + 1); - console.printf("blep, %s %d\n", filename, frame); + // console.printf("blep, %s %d\n", filename, frame); statusBar.drawImage( filename, (0, 0) + bob, statusBar.DI_SCREEN_CENTER | statusBar.DI_ITEM_TOP, scale : (0.5, 0.5)); + } states { spawn: + JMPP # 0 offset(0, -32); JMPK A -1; stop; @@ -314,8 +316,14 @@ class JumperCablesUsable : HDWeapon JMPP A 0; goto super::select; + ledd_left_indicator: + JMIL A 1 offset(0, -32); wait; + ledd_right_indicator: + JMIR A 1 offset(0, -32); wait; + ready: JMPP # 1 { + if(PressingFire()) { SetWeaponState("deploy"); } @@ -329,6 +337,9 @@ class JumperCablesUsable : HDWeapon hitPos = linetraceData.hitLocation - Vec3Offset(0, 0, 0); } + A_Overlay(355, "ledd_left_indicator"); + A_Overlay(356, "ledd_right_indicator"); + SpawnParticleForLineTrace( HDPlayerPawn(invoker.owner), linetraceData); @@ -347,19 +358,37 @@ class JumperCablesUsable : HDWeapon #### # 0 A_Jump(256,"ready"); deploy: - JMPP AA 1; - #### #### 1; - #### #### 1; + JMPP A 1 offset(0, 16); + JMPP A 1 offset(0, 32); + JMPP A 1 offset(0, 48); + JMPP A 1 offset(0, 64); + JMPP A 1 offset(0, 72); + JMPP A 1 offset(0, 96); + JMPP A 1 offset(0, 128); - #### # 0 A_JumpIf(!pressingfire(),"ready"); - #### # 4 A_StartSound("weapons/pismagclick",CHAN_WEAPON); - #### # 2 A_StartSound("derp/crawl",CHAN_WEAPON,CHANF_OVERLAP); + JMPP A 0 A_JumpIf(!pressingfire(),"ready"); + JMPP A 4 A_StartSound("weapons/pismagclick",CHAN_WEAPON); + JMPP A 2 A_StartSound("derp/crawl",CHAN_WEAPON,CHANF_OVERLAP); - #### # 1 { + JMPP A 1 { // invoker.owner.A_Log("Blep"); A_WeaponReady(WRF_NOFIRE | WRF_ALLOWRELOAD | WRF_ALLOWUSER4); AttachCables(HDPlayerPawn(invoker.owner)); } + + JMPP A 1 offset(0, 128); + JMPP A 1 offset(0, 96); + JMPP A 1 offset(0, 72); + JMPP A 1 offset(0, 64); + JMPP A 1 offset(0, 48); + JMPP A 1 offset(0, 32); + JMPP A 1 offset(0, 16); + JMPP A 1 offset(0, 0); + + JMPP A 1 { + A_WeaponReady(WRF_NOFIRE | WRF_ALLOWRELOAD | WRF_ALLOWUSER4); + } + goto ready; user3: @@ -384,7 +413,9 @@ class JumperCablesUsable : HDWeapon // } // } - if(LineTraceFindbrokenLine(linetraceData)) { + Line brokenLine = LineTraceFindbrokenLine(linetraceData); + + if(brokenLine) { particleColor = "green"; // Found somethine we can fix! @@ -406,20 +437,36 @@ class JumperCablesUsable : HDWeapon } - invoker.lastIndicatorStatus = player.getpsprite(PSP_WEAPON).frame; + int frame_left = random(0, 15); + int frame_right = random(0, 15); - if(linetraceData.hitType == TRACE_HitNone) { - return; + Line lineForDisplay = brokenLine; + if(!lineForDisplay) { + lineForDisplay = hitLine; + } + if(lineForDisplay) { + JumperCablesMapLoader loader = JumperCablesMapLoader.Get(); + int originalSpecial = loader.originalLinedefSpecials2.Get(lineForDisplay.index()); + console.printf("Original special: %d", originalSpecial); + frame_right = originalSpecial % 16; + frame_left = originalSpecial / 16; } - Vector3 hitPos = linetraceData.hitLocation - Vec3Offset(0, 0, 0); - // console.printf("hit pos: %f %f %f\n", hitPos.x, hitPos.y, hitPos.z); - A_SpawnParticle( - particleColor, - 0, 10, 2, 0, - hitPos.x, - hitPos.y, - hitPos.z); + player.getpsprite(355).frame = frame_left; + player.getpsprite(356).frame = frame_right; + + invoker.lastIndicatorStatus = player.getpsprite(PSP_WEAPON).frame; + + if(linetraceData.hitType != TRACE_HitNone) { + Vector3 hitPos = linetraceData.hitLocation - Vec3Offset(0, 0, 0); + // console.printf("hit pos: %f %f %f\n", hitPos.x, hitPos.y, hitPos.z); + A_SpawnParticle( + particleColor, + 0, 10, 2, 0, + hitPos.x, + hitPos.y, + hitPos.z); + } } action float Vec2Mag(Vector2 v) @@ -470,7 +517,7 @@ class JumperCablesUsable : HDWeapon 48, pawn.pitch, flags : TRF_THRUACTORS | TRF_ABSOFFSET, - offsetz : pawn.gunPos.z, // * 0.8, + offsetz : pawn.gunPos.z - 1, // * 0.8, offsetforward : pawn.gunPos.x, offsetside : pawn.gunPos.y, data : linetraceData); @@ -516,18 +563,25 @@ class JumperCablesUsable : HDWeapon Line secLine = sec.lines[secLineIndex]; - // If this is currently special, we don't care about it. + // If this is currently special, we don't care about + // it (it's working fine, presumably). if(secLine.special == 0) { // If this *used* to be special, we DO care about it! if(loader.originalLinedefSpecials2.CheckKey(secLine.index())) { - // See if thise is the closest one we've found so far. - float distanceToLine = GetDistanceToLine( - secLine, linetraceData.hitLocation); - if(distanceToLine <= closestLineDistance) { - closestLineInRange = secLine; - closestLineDistance = distanceToLine; + // Make sure it's actually changed. + int originalSpecial = loader.originalLinedefSpecials2.Get(secLine.index()); + int currentSpecial = secLine.special; + if(originalSpecial != currentSpecial) { + + // See if this is the closest one we've found so far. + float distanceToLine = GetDistanceToLine( + secLine, linetraceData.hitLocation); + if(distanceToLine <= closestLineDistance) { + closestLineInRange = secLine; + closestLineDistance = distanceToLine; + } } } }