r/maxpayne 6h ago

Meme/Humour Would you rather drink the Max Payne beer or the Alan Wake's American Lager

Post image
112 Upvotes

please dont say Mona Sax Smoothie


r/maxpayne 14h ago

Max Payne 2 What kind of turn radius did these vans have

Thumbnail
gallery
100 Upvotes

r/maxpayne 17h ago

Fan Content Max Payne 1 & 2 Graphic Novel Conversion Script

Thumbnail
gallery
56 Upvotes

DISCLAIMER: This is an unofficial fan-made tool inspired by the graphic novel presentation of Max Payne 1 and Max Payne 2. Max Payne is property of Remedy Entertainment and Rockstar Games. This project is not affiliated with or endorsed by them (although endorsement is welcome).

SECOND DISCLAIMER: I'm not doing self-promotion, since I'm not selling anything. Use the script if you want to, or don't, doesn't affect me either way. This script is not monetized.

I whipped up a Bash script to convert an image into the style of Max Payne 1 & 2 graphic novels. It may or may not be in its final form (I'm really happy with it for now). I'm sharing a few example outputs...first image - the famous image of Sam Lake dressed as Max Payne. Second image is randomly pulled from a web image search (I claim no ownership over either image, by the way). The second image looks more similar to a more typical scene in a Max Payne 1 graphic novel, which is why it looks closer to what you'd expect to see. Sam Lake is in a bright room, so the effect may not be as obvious. Script works on images of any resolution (including 4K), though processing time can be longer. Third image uses the Max Payne 2 style rendering for graphic novel, also pulled from web image search, I claim no ownership.

Only dependency is ImageMagick. Since I run Linux on metal, I've only tested it on Linux (Windows users can grab WSL, or even setup a VM, or better yet dedicate a machine to Linux on metal). I've ported scripts for ImageMagick to Windows in the past and it's a royal pain (more effort to test & debug, get some weird quirks too) anyone is welcome to do it if that's your thing. I know MacOS has Bash in terminal, but I'm not a Mac user so I'm not gonna troubleshoot that. Pretty sure it'd be minimal effort to make it work on a Mac.

Anyway, I'll share the code. Should auto-install missing dependencies on Debian/Fedora/Arch based distros. Just make it executable (in right-click->properties or chmod +x /path/to/MaxPayneGraphicNovel.sh).

To run it, open Bash terminal and run /path/to/MaxPayneGraphicNovel.sh /path/to/file.jpg --mp1

You can switch --mp1 to --mp2 or --noir (Noir is basically MP1 filters but output is in Black and White). Should work with any image file (JPG, PNG, WEBP).

NOT HANDLED BY THE SCRIPT: for your text boxes, well you can design speech bubbles with background colour #ABB5B6 and narration boxes background colour #A8D7A8 for Max Payne 1 style and #A5AFAE for Max Payne 2 style (black outline). For the text, use all caps with the Graphite font (bold, semi-condensed). Here's the link to the main font but you can look up the other variants (bold, bold-narrow, bold-wide, light, light-narrow), assuming you'll be using bold-narrow in all caps the whole time. Note that the font that I linked is FREE FOR PERSONAL USE. I have no idea what the IP rights are on replicating filters used by Remedy for Max Payne 1 & 2 graphic novels, so it's more of a personal use kind of thing. TLDR good for fan art, NOT FOR CREATING your own game called Pax Mayne and claiming it to be entirely your IP.

#!/usr/bin/env bash

set -euo pipefail
#############################################
# Max Payne Graphic Novel Generator
# Painted oil-brush style — v2.1
#############################################


VERSION="2.1"


#############################################
# Colors
#############################################

RED="\e[31m"
GREEN="\e[32m"
YELLOW="\e[33m"
RESET="\e[0m"


#############################################
# Dependency installer
#############################################

install_dependencies()
{

echo -e "${YELLOW}Missing dependencies detected.${RESET}"


if command -v apt >/dev/null 2>&1; then

    echo "Detected Debian-based system"

    sudo apt update

    sudo apt install -y \
        imagemagick \
        libnotify-bin


elif command -v dnf >/dev/null 2>&1; then

    echo "Detected Fedora-based system"

    sudo dnf install -y \
        ImageMagick \
        libnotify


elif command -v pacman >/dev/null 2>&1; then

    echo "Detected Arch-based system"

    sudo pacman -Sy --needed --noconfirm \
        imagemagick \
        libnotify


else

    echo -e "${RED}"
    echo "Cannot automatically install dependencies."
    echo "Unsupported Linux distribution."
    echo
    echo "Please install:"
    echo "  ImageMagick"
    echo "  libnotify"
    echo -e "${RESET}"

    exit 1

fi

}


#############################################
# Check dependencies
#############################################

check_dependencies()
{

MISSING=()

command -v magick >/dev/null \
|| MISSING+=("imagemagick")


command -v notify-send >/dev/null \
|| MISSING+=("libnotify")


if [ ${#MISSING[@]} -gt 0 ]; then

    install_dependencies

fi

}


#############################################
# Check
#############################################

check_dependencies



#############################################
# Defaults
#############################################

PROFILE="mp1"


#############################################
# Usage
#############################################

usage()
{

cat <<EOF

Max Payne Graphic Novel Filter $VERSION

Usage:

$0 image [options]


Profiles:

--mp1       Original Max Payne style (warm, gritty)
--mp2       Max Payne 2 graphic novel (sharp, high-contrast, inked)
--noir      Black and white noir


Examples:

$0 photo.jpg --mp1

EOF

}



#############################################
# Parse arguments
#############################################

INPUT=""

while [[ $# -gt 0 ]]
do

case "$1" in


--mp1)
PROFILE="mp1"
;;


--mp2)
PROFILE="mp2"
;;


--noir)
PROFILE="noir"
;;


-h|--help)
usage
exit
;;


*)
INPUT="$1"
;;

esac

shift

done



if [[ -z "$INPUT" ]]
then

usage
exit 1

fi



if [[ ! -f "$INPUT" ]]
then

echo "File not found:"
echo "$INPUT"

exit 1

fi



#############################################
# Profiles
#############################################

case "$PROFILE" in


mp1)

PAINT=3
BILATERAL_SIGMA=3
SHADOW_BLACK=5
SHADOW_WHITE=100
SATURATION=55
WARM="#70533a"
COLORIZE=10
GRAIN=0.18
NOISE_ATTENUATE=0.6

;;


mp2)

PAINT=2
SHADOW_BLACK=14
SHADOW_WHITE=97
SHARPEN_RADIUS=1
SHARPEN_AMOUNT=0.5
LOCAL_CONTRAST_RADIUS=20
LOCAL_CONTRAST_AMOUNT=0.15
SATURATION=55
WARM="#4a5868"
COLORIZE=3
SIGMOIDAL_AMT=4
SIGMOIDAL_MID=45
GRAIN=0.22
NOISE_ATTENUATE=0.7
VIGNETTE_SIZE=55

;;


noir)

PAINT=5
BILATERAL_SIGMA=5
SHADOW_BLACK=10
SHADOW_WHITE=95
SATURATION=0
WARM=""
COLORIZE=0
GRAIN=0.25
NOISE_ATTENUATE=0.7

;;


esac



#############################################
# Output filename
#############################################

DIR="$(dirname "$INPUT")"
FILE="$(basename "$INPUT")"

NAME="${FILE%.*}"

OUTPUT="$DIR/${NAME}_mpgn_${PROFILE}.png"



#############################################
# Temporary workspace
#############################################

TMP=$(mktemp -d)

trap 'rm -rf "$TMP"' EXIT



#############################################
# Pipeline
#############################################


echo "Processing:"
echo "$INPUT"


# --- Step 1: Normalize ---

magick "$INPUT" \
-auto-orient \
-colorspace sRGB \
-strip \
"$TMP/01.png"


# --- Scale factors for resolution ---
# Effects are tuned for 1080p. Scale parameters
# with a power curve so larger images get disproportionately
# stronger effects to maintain perceived visual impact.

DIMS=$(magick identify -format "%w %h" "$TMP/01.png" 2>&1)
IMG_W=$(echo "$DIMS" | cut -d' ' -f1)
IMG_H=$(echo "$DIMS" | cut -d' ' -f2)

if [ "$IMG_W" -ge "$IMG_H" ]; then
    LONGEST=$IMG_W
else
    LONGEST=$IMG_H
fi

SCALE=$(awk "BEGIN { printf \"%.2f\", ($LONGEST / 1920) ^ 2.0 }")

# Linear scale for intensity effects (color, shadow) —
# these don't need the aggressive power curve.
LIN_SCALE=$(awk "BEGIN { printf \"%.2f\", $LONGEST / 1920 }")

PAINT_S=$(awk "BEGIN { v = $PAINT * $SCALE; printf \"%.0f\", (v < 2) ? 2 : v }")
COLORIZE_S=$(awk "BEGIN { v = $COLORIZE * $LIN_SCALE; printf \"%.0f\", (v < 1) ? 1 : v }")
SHADOW_S=$(awk "BEGIN { v = $SHADOW_BLACK * $LIN_SCALE; printf \"%.0f\", (v > 25) ? 25 : v }")



case "$PROFILE" in


mp1|noir)

# --- MP1 / Noir Pipeline ---
# Painted oil-brush look — warm, gritty, atmospheric.

BIL_R_S=$(awk "BEGIN { v = 4 * $SCALE; printf \"%.0f\", (v < 3) ? 3 : v }")
BIL_S_S=$(awk "BEGIN { v = $BILATERAL_SIGMA * $SCALE; printf \"%.0f\", (v < 2) ? 2 : v }")

echo "Resolution: ${IMG_W}x${IMG_H}  scale: ${SCALE}x  paint: ${PAINT_S}  blur: ${BIL_R_S}x${BIL_S_S}  colorize: ${COLORIZE_S}%  shadow: ${SHADOW_S}%"


# Step 2: Oil paint brush effect

magick "$TMP/01.png" \
-paint "$PAINT_S" \
"$TMP/02.png"


# Step 3: Bilateral blur

magick "$TMP/02.png" \
-bilateral-blur ${BIL_R_S}x${BIL_S_S} \
"$TMP/03.png"


# Step 4: Color grading

magick "$TMP/03.png" \
-modulate 100,$SATURATION,100 \
${WARM:+-fill "$WARM" -colorize "${COLORIZE_S}"%} \
"$TMP/04.png"


# Step 5: Shadow deepening

magick "$TMP/04.png" \
-level "${SHADOW_S}%,${SHADOW_WHITE}%" \
"$TMP/05.png"


# Step 6: Film grain

magick "$TMP/05.png" \
-seed 42 \
-attenuate "$NOISE_ATTENUATE" \
+noise Gaussian \
"$TMP/06.png"


# Step 7: Output

magick "$TMP/06.png" \
"$OUTPUT"

;;


mp2)

# --- Max Payne 2 Pipeline ---
# High-contrast graphic novel — sharp edges, deep blacks,
# printed ink texture. Less painterly than MP1, more photographic.

SHARPEN_S=$(awk "BEGIN { v = $SHARPEN_RADIUS * $LIN_SCALE; printf \"%.1f\", (v < 0.5) ? 0.5 : v }")
SHARPEN_A=$(awk "BEGIN { printf \"%.2f\", $SHARPEN_AMOUNT * $LIN_SCALE }")
LOCAL_R=$(awk "BEGIN { v = $LOCAL_CONTRAST_RADIUS * $LIN_SCALE; printf \"%.0f\", (v < 10) ? 10 : v }")
LOCAL_A=$(awk "BEGIN { printf \"%.2f\", $LOCAL_CONTRAST_AMOUNT * $LIN_SCALE }")
VIG_S=$(awk "BEGIN { v = $VIGNETTE_SIZE * $LIN_SCALE; printf \"%.0f\", (v < 50) ? 50 : v }")

echo "Resolution: ${IMG_W}x${IMG_H}  scale: ${SCALE}x  paint: ${PAINT_S}  sharpen: ${SHARPEN_S}x${SHARPEN_A}  local: ${LOCAL_R}x${LOCAL_A}  colorize: ${COLORIZE_S}%  vig: ${VIG_S}"


# Step 2: Subtle oil paint
# Just enough to break up photographic fine detail without
# making it look "painted" — MP2 is graphic, not painterly.

magick "$TMP/01.png" \
-paint "$PAINT_S" \
"$TMP/02.png"


# Step 3: Sharpen edges
# MP2 has crisp, well-defined edges. Unsharp mask brings
# back and enhances detail lost by the light paint step.

magick "$TMP/02.png" \
-unsharp "${SHARPEN_S}x${SHARPEN_A}+0.05+0" \
"$TMP/03.png"


# Step 4: Local contrast boost
# Large-radius unsharp mask increases midtone contrast
# without affecting fine detail — makes skin and surfaces
# look dramatically lit, which is core to the MP2 look.

magick "$TMP/03.png" \
-unsharp "${LOCAL_R}x${LOCAL_A}+0+0" \
"$TMP/04.png"


# Step 5: Color grading
# Muted, slightly cool/neutral tones. MP2 has less warm
# cast than MP1 — more steel blue-grey than amber.

magick "$TMP/04.png" \
-modulate 100,$SATURATION,100 \
${WARM:+-fill "$WARM" -colorize "${COLORIZE_S}"%} \
"$TMP/05.png"


# Step 6: S-curve contrast
# Crush blacks first, then apply sigmoidal contrast for
# the dramatic shadow/highlight pop of the MP2 graphic novel.

magick "$TMP/05.png" \
-level "${SHADOW_S}%,${SHADOW_WHITE}%" \
-sigmoidal-contrast "${SIGMOIDAL_AMT}x${SIGMOIDAL_MID}%" \
"$TMP/06.png"


# Step 7: Heavy film grain
# MP2's graphic novel panels have a visible printed texture.
# Much heavier grain than MP1 for that comic-book halftone feel.

magick "$TMP/06.png" \
-seed 42 \
-attenuate "$NOISE_ATTENUATE" \
+noise Gaussian \
"$TMP/07.png"


# Step 8: Vignette
# Manual radial gradient vignette — darkens edges to draw
# focus center and approximate MP2's close-up depth feel.

magick "$TMP/07.png" \
\( +clone -fill black -colorize 100% \
   -fill white -draw "roundrectangle 15,15,%[fx:w-16],%[fx:h-16] 30,30" \
   -blur 0x"${VIG_S}" \
\) \
-compose multiply -composite \
"$TMP/08.png"


# Step 9: Output

magick "$TMP/08.png" \
"$OUTPUT"

;;

esac



#############################################
# Notification
#############################################

notify-send \
"Max Payne Graphic Novel" \
"Created $(basename "$OUTPUT")" \
2>/dev/null || true



echo
echo -e "${GREEN}Finished:${RESET}"
echo "$OUTPUT"

Note for Max Payne 3, there's two ways to go. There's the filters/effects for cover art, and there's the actual comic books which use a Marvel Hero style. That's going to be a separate script of its own.


r/maxpayne 7h ago

Max Payne 3 Lego Max Payne 3

Thumbnail
gallery
35 Upvotes

„The way I see it there’s two type of people, those who spend their lives trying to build a future and those who spend their lives trying to rebuild the past” - Max Payne

I made Max Payne with few of his outfits coming from the 3rd installment. I hope you will like it ! Plus I made this panorama to present the aesthetic of the favelas in the third game.


r/maxpayne 8h ago

Max Payne 3 what are you aiming at, Max? Spoiler

Thumbnail streamable.com
8 Upvotes

all that booze and meds scrambled his brains


r/maxpayne 8h ago

Max Payne 3 NYMHC

Post image
8 Upvotes

New PB and actually a decent time.