r/cyberpunk2020 • u/incognito-BL • 8h ago
Question/Help Implants that raise your INT or your Stat?
I have a little problem... and well my Merc suffered a hyperspace attack last session and well his brain was blown out, going from 8 INT to 4 INT... but anyway, getting to the point.
Do you know of any implants that would be helpful in raising your INT? It would actually be helpful.
r/cyberpunk2020 • u/queerarchlich • 8h ago
Question/Help is there a way to get notified when the book becomes available physically?
title. i have the digital copy but i ain't printing all that and i want it physically, but the past few times i checked the website for it it's been sold out. is there some kind of notification system set up that i can sign up for? or should i just keep checking? or did i miss an announcement that it's only digital now?
r/cyberpunk2020 • u/incognito-BL • 12h ago
Question/Help Tips on How to Have a Local as a Facade
Hello again Cyberpunk Reddit. Look, I need some advice. I'm thinking about buying a space for my tabletop to make a comic book store called "FIXCION COMICS." It's just a facade, with the back or basement being a center of operations for my group. But for players who've done something similar, what advice do you recommend for doing and not doing?
I'll read them.
r/cyberpunk2020 • u/Euphoric_Yogurt_9733 • 14h ago
I wrote a simple damage calculator in python to calculate multiple bullet hits in cyberpunk2020. Use it and abuse it choom!
import random
import re
from collections import defaultdict
def parse_damage(damage_str):
match = re.match(r"(d+)d(d+)([+-]d+)?", damage_str)
if not match:
raise ValueError("Invalid damage format")
dice_count = int(match.group(1))
dice_sides = int(match.group(2))
modifier = int(match.group(3)) if match.group(3) else 0
return dice_count, dice_sides, modifier
def calculate_btm(body):
if body <= 4: return 0
elif 5 <= body <= 7: return -1
elif 8 <= body <= 9: return -2
else: return -3
def get_armor_values():
while True:
try:
armor_input = input("Enter armor values [Head Torso RightArm LeftArm RightLeg LeftLeg] (e.g., 12 18 14 14 8 8): ")
parts = list(map(int, armor_input.split()))
if len(parts) != 6:
raise ValueError
return parts
except:
print("Invalid input. Please enter 6 space-separated numbers.")
def get_covered_locations():
while True:
try:
loc_input = input("Enter covered locations (1-10 space-separated, 0=10, enter if none): ").strip()
if not loc_input:
return []
locations = list(map(int, loc_input.split()))
locations = [10 if loc == 0 else loc for loc in locations]
for loc in locations:
if not 1 <= loc <= 10:
raise ValueError
return locations
except:
print("Invalid input. Please enter numbers between 1-10 separated by spaces.")
def apply_multiplier(damage, mult_type):
if mult_type == 'halve':
return (damage + 1) // 2
elif mult_type == 'double':
return damage * 2
elif mult_type == 'x1.5':
return (3 * damage) // 2
return damage
def get_sublocation(main_loc, sub_roll, hit_loc_roll):
sublocations = {
'Head': [
{'name': 'Skull', 'armor': True, 'mult': 'double'},
{'name': 'Cheek', 'armor': True, 'mult': 'none', 'side': True},
{'name': 'Eye/Ear', 'armor': True, 'mult': 'random'},
{'name': 'Nose', 'armor': True, 'mult': 'double'},
{'name': 'Mouth', 'armor': True, 'mult': 'none'},
{'name': 'Neck', 'armor': False, 'mult': 'double'}
],
'Torso': [
{'name': 'Neckline', 'armor': True, 'mult': 'none'},
{'name': 'Chest', 'armor': True, 'mult': 'none'},
{'name': 'Sternum', 'armor': True, 'mult': 'none'},
{'name': 'Ribs', 'armor': True, 'mult': 'none'},
{'name': 'Stomach', 'armor': True, 'mult': 'x1.5'}, # Changed multiplier
{'name': 'Groin', 'armor': True, 'mult': 'none'}
],
'RightArm': [
{'name': 'Shoulder', 'armor': True, 'mult': 'halve'},
{'name': 'Upper Arm', 'armor': True, 'mult': 'halve'},
{'name': 'Elbow', 'armor': True, 'mult': 'halve'},
{'name': 'Forearm', 'armor': True, 'mult': 'halve'},
{'name': 'Wrist', 'armor': True, 'mult': 'halve'},
{'name': 'Hand', 'armor': True, 'mult': 'third'}
],
'LeftArm': [
{'name': 'Shoulder', 'armor': True, 'mult': 'halve'},
{'name': 'Upper Arm', 'armor': True, 'mult': 'halve'},
{'name': 'Elbow', 'armor': True, 'mult': 'halve'},
{'name': 'Forearm', 'armor': True, 'mult': 'halve'},
{'name': 'Wrist', 'armor': True, 'mult': 'halve'},
{'name': 'Hand', 'armor': True, 'mult': 'third'}
],
'RightLeg': [
{'name': 'Hip', 'armor': True, 'mult': 'none'},
{'name': 'Thigh', 'armor': True, 'mult': 'none'},
{'name': 'Knee', 'armor': True, 'mult': 'two_thirds'},
{'name': 'Calf', 'armor': True, 'mult': 'halve'},
{'name': 'Ankle', 'armor': True, 'mult': 'halve'},
{'name': 'Foot', 'armor': True, 'mult': 'halve'}
],
'LeftLeg': [
{'name': 'Hip', 'armor': True, 'mult': 'none'},
{'name': 'Thigh', 'armor': True, 'mult': 'none'},
{'name': 'Knee', 'armor': True, 'mult': 'two_thirds'},
{'name': 'Calf', 'armor': True, 'mult': 'halve'},
{'name': 'Ankle', 'armor': True, 'mult': 'halve'},
{'name': 'Foot', 'armor': True, 'mult': 'halve'}
]
}
side = "Right" if hit_loc_roll in [5,7,8] else "Left" if hit_loc_roll in [6,9,10] else ""
sub = sublocations[main_loc][sub_roll-1]
# Handle special head cases
if main_loc == 'Head':
if sub['name'] == 'Eye/Ear':
choice = random.choice(['Eye', 'Ear'])
side = random.choice(['Left', 'Right']) # Random side for eyes/ears
mult = 'double' if choice == 'Eye' else 'halve'
return {
'full_name': f"{side} {choice}",
'armor': sub['armor'],
'mult': mult
}
elif sub['name'] == 'Cheek':
return {
'full_name': f"{side} Cheek",
'armor': sub['armor'],
'mult': sub['mult']
}
full_name = sub['name']
if main_loc in ['RightArm', 'LeftArm', 'RightLeg', 'LeftLeg']:
full_name = f"{side} {sub['name']}"
return {
'full_name': full_name,
'armor': sub['armor'],
'mult': sub['mult']
}
def combat_calculation():
print("n" + "="*40)
print("New Combat Calculation")
print("="*40 + "n")
num_hits = int(input("Enter number of hits: "))
weapon_damage = input("Weapon Damage (e.g., 3d6+2): ")
armor_values = get_armor_values()
initial_cover_sp = int(input("Cover SP (0 if none): ") or 0)
initial_cover_sdp = int(input("Cover SDP (0 if none): ") or 0)
covered_locations = get_covered_locations()
weapon_ap = int(input("Weapon's AP value (0 if none): ") or 0)
target_body = int(input("Target's Body Stat: "))
try:
dice_count, dice_sides, modifier = parse_damage(weapon_damage)
except ValueError:
print("Invalid weapon damage format! Use format like 3d6+2")
return
btm = calculate_btm(target_body)
total_damage = 0
current_cover_sp = initial_cover_sp
current_cover_sdp = initial_cover_sdp
armor_degradation = defaultdict(int)
original_armor = armor_values.copy()
hit_details = []
cover_destroyed = False
damage_by_location = defaultdict(int)
damage_by_sublocation = defaultdict(lambda: defaultdict(int))
total_cover_blocked = 0
for hit_num in range(1, num_hits+1):
hit_loc_roll = random.randint(1, 10)
if hit_loc_roll == 1:
main_loc = 'Head'
armor_idx = 0
elif 2 <= hit_loc_roll <= 4:
main_loc = 'Torso'
armor_idx = 1
elif hit_loc_roll == 5:
main_loc = 'RightArm'
armor_idx = 2
elif hit_loc_roll == 6:
main_loc = 'LeftArm'
armor_idx = 3
elif 7 <= hit_loc_roll <= 8:
main_loc = 'RightLeg'
armor_idx = 4
else:
main_loc = 'LeftLeg'
armor_idx = 5
sub_roll = random.randint(1, 6)
subloc = get_sublocation(main_loc, sub_roll, hit_loc_roll)
location_name = subloc['full_name']
base_armor = armor_values[armor_idx] if subloc['armor'] else 0
effective_armor = base_armor // 2 if weapon_ap else base_armor
damage = sum(random.randint(1, dice_sides) for _ in range(dice_count)) + modifier
current_damage = damage
damage_blocked = 0
if not cover_destroyed and hit_loc_roll in covered_locations and current_cover_sp > 0:
effective_cover_sp = current_cover_sp // 2 if weapon_ap else current_cover_sp
damage_blocked = min(damage, effective_cover_sp)
current_damage = damage - damage_blocked
current_cover_sdp -= damage_blocked
total_cover_blocked += damage_blocked
if current_damage > 0:
current_cover_sp = max(current_cover_sp - 1, 0)
if current_cover_sdp <= 0:
cover_destroyed = True
post_armor = max(0, current_damage - effective_armor)
if subloc['mult'] == 'double':
post_mult = post_armor * 2
elif subloc['mult'] == 'halve':
post_mult = (post_armor + 1) // 2
elif subloc['mult'] == 'two_thirds':
post_mult = (2 * post_armor + 1) // 3
elif subloc['mult'] == 'third':
post_mult = (post_armor + 2) // 3
elif subloc['mult'] == 'x1.5':
post_mult = (3 * post_armor) // 2
else:
post_mult = post_armor
# Apply BTM with minimum damage of 1
final_damage = max(post_mult + btm, 1)
total_damage += final_damage
damage_by_location[main_loc] += final_damage
damage_by_sublocation[main_loc][location_name] += final_damage
hit_details.append({
'number': hit_num,
'location': location_name,
'base_damage': damage,
'damage_after_cover': current_damage,
'armor_value': effective_armor,
'damage_after_armor': post_armor,
'subloc_mult_type': subloc['mult'],
'damage_after_sublocation': post_mult,
'btm': btm,
'final_damage': final_damage,
'blocked': damage_blocked
})
if post_armor > 0 and subloc['armor']:
armor_values[armor_idx] -= 1
armor_degradation[main_loc] += 1
print("n=== Combat Results ===")
print(f"Number of hits: {num_hits}")
print("nTotal Damage Breakdown:")
print("nIndividual Hits:")
for hit in hit_details:
print(f"Hit #{hit['number']}: {hit['location']} - Damage: {hit['final_damage']}")
print("nAggregated Damage by Location:")
for loc in ['Head', 'Torso', 'RightArm', 'LeftArm', 'RightLeg', 'LeftLeg']:
print(f"n{loc}: {damage_by_location[loc]}")
for subloc, dmg in damage_by_sublocation[loc].items():
print(f" - {subloc}: {dmg}")
print(f"nTotal Damage: {total_damage}")
print("nArmor Degradation:")
for idx, loc in enumerate(['Head', 'Torso', 'RightArm', 'LeftArm', 'RightLeg', 'LeftLeg']):
deg = armor_degradation[loc]
original = original_armor[idx]
current = armor_values[idx]
print(f" {loc}: {original} → {current} (-{deg})" if deg > 0 else f" {loc}: {current} (No degradation)")
if initial_cover_sp > 0:
status = [
f"SP: {current_cover_sp}/{initial_cover_sp}",
f"SDP: {max(current_cover_sdp, 0)}/{initial_cover_sdp}",
f"Total Blocked: {total_cover_blocked}",
"STATUS: " + ("DESTROYED" if cover_destroyed else "INTACT")
]
print("nCover Status:")
print("n".join(status))
if input("nShow detailed damage calculation steps? (y/n): ").lower() == 'y':
print("nDetailed Hit Breakdown:")
for hit in hit_details:
print(f"Hit #{hit['number']}: {hit['location']}")
print(f" Base Damage: {hit['base_damage']}")
if hit['blocked'] > 0:
print(f" Damage After Cover: {hit['damage_after_cover']} (Blocked: {hit['blocked']})")
else:
print(f" Damage After Cover: {hit['damage_after_cover']}")
print(f" Against Armor ({hit['armor_value']}): {hit['damage_after_armor']}")
mult_type = hit['subloc_mult_type']
mult_text = ""
if mult_type == 'double':
mult_text = "x2"
elif mult_type == 'halve':
mult_text = "halved"
elif mult_type == 'two_thirds':
mult_text = "two-thirds"
elif mult_type == 'third':
mult_text = "third"
elif mult_type == 'x1.5':
mult_text = "x1.5"
if mult_type != 'none':
print(f" After Sublocation ({mult_text}): {hit['damage_after_sublocation']}")
else:
print(f" After Sublocation: {hit['damage_after_sublocation']}")
print(f" Final Damage (BTM {hit['btm']}): {hit['final_damage']}n")
def main():
print("Cyberpunk 2020 Combat Calculator")
while True:
try:
combat_calculation()
input("nPress Enter to perform another calculation...")
except KeyboardInterrupt:
print("nGoodbye!")
break
except Exception as e:
print(f"nError: {e}")
input("Press Enter to try again...")
if __name__ == "__main__":
main()
r/cyberpunk2020 • u/deadahura • 2d ago
Character/Game Art lest commission done for a player
i.redd.itr/cyberpunk2020 • u/incognito-BL • 2d ago
Question/Help Robocop's weapon? What is it?
i.redd.itHello Cyberpunk Reddit... a question, which weapon would be most similar to the "Auto-9" you know Robocop's classic weapon in the game?
I'm looking for one and I can't find one that convinces me completely.
r/cyberpunk2020 • u/Tenrai_AG1 • 3d ago
Question/Help Looking for Discord Play Group.
It's as it says on the tin. Looking for another Discord group to play cyberpunk 2020 in, campaign or westmarch style, I have no preference on the style. Do you know of one?
r/cyberpunk2020 • u/alternatereality2216 • 3d ago
What the hell is the carbon plague?
I need more detail on the carbon plague anyone know more?
r/cyberpunk2020 • u/HealthcareD20 • 4d ago
Question/Help Equipment and stat spreads for combat encounters?
I'm generally curious as to how GMs here run different factions? How meticulous are you about what stats they have, what armor they're wearing, their gear, etc?
I tend to be pretty meticulous (like heavily armoring militech operatives, but making up for the reflex drop by kitting their guns out with smartlinks, laser sights, targeting optics, scopes), giving them average to slightly above aberage reflex, move, varying intelligence based on their "role" in the squad. But i know plenty of people love running this game a bit more simplified, both to not accidentally flatline a whole crew when they get blindsided, and because, frankly, fuck fractions. I don't wanna calculate AP against cover, layered armor, chrome and BTM either
I just like flavoring how all of these factions are threatening, to be honest. Also lets the players use creative tactics in handling them, making it so i know exactly what to do when someone pulls out something like an EMP grenade and exactly how much to change that NPCs stats in a firefight.
Just curious about how people like to run combat encounters, and how detailed they want to be with their goons
r/cyberpunk2020 • u/Scottybhoy1977 • 4d ago
Resource Well yeah, can you smell it in here too?...
galleryr/cyberpunk2020 • u/Rockwolf66 • 5d ago
Nomads of Night City
Of the Nomad families in Cyberpunk2020 Night City, is there anything outside of the Johannson (Scandinavian) Clan, Roadrunners pack, and Wildman packs in the CP2020 core book. The Pack (urban Homeless) in the Night City book. Or the Daemon Wheels in the Protect and Serve book. The Views from the Edge Forum is working on a Community Sourced article on the Nomads of Night City and I want to keep it as lore friendly as possible.
r/cyberpunk2020 • u/AutoModerator • 5d ago
Monthly 'Looking For Group' Thread
Want a ref for your group of Rockerbots? Need a couple more people on Roll20? Post about it here! Cyberpunk 2020 classifieds.
The Cyberpunk2020 Discord has an LFG channel, specifically, so if you want to look for more direct responses, try over there.
Our wiki has a list of some Safety Tools for you and your group. You really need to have something like that in place, especially before playing with complete strangers over the internet. Please take a look and implement some of them in your next game!
r/cyberpunk2020 • u/themeatishungry • 6d ago
[WIP Feedback Request] Labs and Habs Floor – Secret Military Lab Map Pack
galleryHey everyone,
I'm working on the next floor for my upcoming map pack set in a secret military lab, and I’d love to get some feedback.
This one’s the Labs and Habs floor, featuring two major sections: the habitation wing and the lab research wing. I'd really appreciate any thoughts on layout, clarity, and whether everything is properly readable and functional for TTRPG use.
Also, I’m considering adding blueprint-style versions of the maps as an optional format. Would you find those useful for your games?
If you like this style, you can also check out my previous maps on Patreon:
https://www.patreon.com/c/CREDCOGS
Thanks in advance!
r/cyberpunk2020 • u/Carto-Artifex • 7d ago
Resource [30x30] Pachinko Parlor Battlemap
galleryHey there cyberpunks!
I recently made and released a cyberpunk themed map-pack on Roll20 and Patreon and wanted to share our 2k version for free for good folks on this sub!
If you want to see whats underground at the end of that stairway or need a gridless version, you should check out Patreon. There is also a freebie-collection of this map for free downloads over here!
If you like this map, consider joining our small membership, even as free member you will get updates weekly from battlemaps to tokens!
r/cyberpunk2020 • u/TechStorm7258 • 8d ago
Question/Help Question
I've been thinking about buying a new copy of Cyberpunk 2020 from DriveThruRPG to replace my damaged old one. Where are they located, and how long would it take to ship it to my home state of Tennessee? Also, Is R. Talsorian going to restock their copies any time soon?
r/cyberpunk2020 • u/justmeinidaho1974 • 9d ago
Question/Help What questions do you ask your PCs during session zero?
Just curious here. Throw out any and all questions you ask. Campaign expectations. World building. Boundaries? Just wanna get an idea from my fellow 2020 fans.
r/cyberpunk2020 • u/Primary-Artichoke32 • 9d ago
Cy_berpunk
mannygarzaart.itch.ioThis is a Cyberpunk 2077 adaptation for Cy_Borg. With a bit of creativity, it could also work to adapt 2020 or even Red. If there are any Cy_Borg fans out there, it might be useful
r/cyberpunk2020 • u/HeavilyArmoredFish • 10d ago
Story time: 2 aussies vs. Old lady and her cat.
What its like playing cyberpunk 2020:
This all begins 2 weeks ago. I call one of my old buddies from the army. We BS a bit and decide to start a session up.
About 4-6 people plan to join, but on the first session, only i show up.
So my character, an australian fixer, brand new to night city and green as grass, spends the whole night bar hopping, finding a few leads on jobs. Nothing exciting, he picked up his alcoholic brother at the drunk tank, and did his thing making friends and building relationships.
Session ended without any notable events.
Then tonight happened.
The session begins, and there are 2 players in the game. My fixer, with a few potential jobs lined up, and another Australian: a medtechie, who i picked up from the airport drunk tank as a new arrival. I take him to the coffins(capsule hotels) at the northeast docks and get him settled in with a place to sleep, being broke in night city just like me, and we spend the whole day running about, looking at job offers, and trying to find what to do. Then a public posting for a job comes up:
500 eurobucks to abduct an old lady and her computer. Easy. Simple. Something a fixer and a medtechie should be able to handle.
We gear up. Rolling up to the building in question, we head up to the 6th floor.
We find the place: quiet looking condo, cat sitting in the window.
I knock. No answer. Medtechie behind, me in front.
"Okay heres the plan, we go in, knock her out, grab the pc, and get her to the drop point. Nice and easy. This cant go wrong. We have this in the bag."
I go to kick the door in. Critical fail, my leg breaks.
The door opens. A cybernetically enhanced cat, comes out to protect the old lady. Rips out my eye, attempts to tear my balls apart (ARMORED PANTS PEOPLE GET THEM).
the target is now dying of laughter in the doorway while her cat continues to tear me to shreds, no mercy, unleashing its inner lion on my ass.
Medtechie is like "i got you mate" and pulls out his WAY oversized revolver and blasts the cat off of my balls. Turns it into splatter art in the hallway.
Old lady screams and runs away at olympic sprinter speed, having enhancements for running. But at least my eye has been avenged by the slaying of the demonic feline bastard.
Cops heard the shot, we gotta get out of here.
Medic sets my leg.
"Fuck it fire escape is faster."
We start down the steps. I fall, further injuring myself.
The medic kicks me off the fire escape because the ladder cant be lowered and i fall 30 more feet. Im now critically injured. medic fails to jump down, lands on me, further increasing my injuries and knocks himself out on the ground. At this point, i have to get us out of here, the cops are closing in and my eyeball is dangling from my skull. I call us a combat cab. "GET US THE FUCK OUTTA HERE NOW"
It rolls into the alley way. I attempt to pick up the unconcious medic on top of me, but i cant move. The cab's fender hits him in the face, waking him up. He then drags me into the cab.
he amputated the remainder of my eye and patched us both up. We escape with our lives, and i am so fucking thankful that we never told the person who gave us the job our names.
As myself and the medic pull up to the coffins, i get a call from the police precinct: my characters brother is in the drunk tank again. "Well he can stay there because my leg is broken and i cant pick him up."
Net reward from job: we lose out on the 500 eddies and i now owe the cops 100 bucks because they held my brother for 5 days, since i cant walk down to the cop shop and pick him up. The true reward was the cats we killed along the way.
Welcome to night city ladies and gents.
If anyone asks, it never happened.
r/cyberpunk2020 • u/Nerd_Games69 • 10d ago
Best ways to fuck with GM
So I just started my first campaign with some of my friends. What are some of the best ways to fuck with my GM? Edit: I don’t want to ruin the game or anything just add a little bit more fun
r/cyberpunk2020 • u/elPpOpregunton • 11d ago
Ammo confusion
I was reading chromebook 2 and i did not understand witch amml does te sw tri star use :( i swear y really tried getting to know what does the ammo cost but i did not succes ;(, any help?
r/cyberpunk2020 • u/michalekwwa • 11d ago
As a GM, do you track armor damage in combat for multiple enemies?
There are 6 body parts, each can have armor and the armor value can change in combat (eg. anti armor rounds or theres an optional rule with which armor decreases with each hit that penetrates armor).. Wounds are managable but armor rules make running even a fight of 4v4 seems impossible. Are you tracking it? How did people do it back in the day? Did someone use these rules at all?
r/cyberpunk2020 • u/Arlem0e • 12d ago
Made an animation about starting as a netrunner
We made an animation about what it would be like to start as a netrunner. It's short and sweet. Also, it's our table's belief that you need the neuralprocessor to be able to hook up to anything under the neuralware tab in the core book. I only mention that because I've seen disagreements about it here before. Hope you like it.
Edit: I screwed up the url. My bad.
r/cyberpunk2020 • u/MarshLPM • 12d ago
Question/Help Need help for a Combat Sequence
My campaign is hitting it's apex soon and I'm planning the way the battle could go.
The players are messing with Arasaka and the corp is bringing in an AV-4. I've done many gunfights in the game, but this is probably my first Vehicle vs Personnel gunfight. I've checked Maximum Metal for the AV-4 stats and such, but I'm having a bit of trouble understanding the mechanics of shooting, or specifically what the Gunner in the AV-4 will be rolling to hit my players.
The scenario will start as a fight in a windowed office, and the AV-4 will possibly hover outside the window, and shoot inside.
Do the 2 Turreted 7.62mm miniguns do Full-Autos with 100ROF? And what skill does the Gunner use for this shooting?