BuckraMega

Avatar


Programmer / Web Developer

San Antonio, TX

January 1996


Learn Unity/C#

Awesome Thoery Idle



Note!

This site is under construction. Don't mind the mess - maybe someday this will be worth reading!

Welcome to Derp...Derp...Code!, my programming journal/blog. This site is more for me than anyone else, but if you are here and reading, that's great! You might wonder about the name - I might be good at programming, but I am a bad programmer, so I tend to derp a lot before producing worthwhile code.

Avatar5 Jan 2019

Coding a random dungeon generator, pt 1


An exercise in sloppy spaghetti coding

Many years ago, 2008 if my guess is right, I had the idea to write a random dungeon generator. I succeeded but left it somewhat unfinished. I picked that little project back up in mid/late 2018 as part of my Awesome Theory 2.0 project. I am going to deconstruct it piece by piece in order to better understand what the heck I did 10+ years ago. I won't lie, some of the code is brilliant in my opinion, but some of my past decisions are hard to understand. Note that this is one way to accomplish this - there are probably many other better ways. This is just what I came up with to solve the problem.

First things first, the actual construction of a dungeon should be a function, and so the first thing to think about it what parameters you need.

function build_dungeon($level, $floors = 1, $max_x = 0, $max_y = 0) {
Level is the difficulty of the dungeon, which determines how hard the monsters inside it will be. Then we need to know how many floors it will have, and the maximum size of the square that will contain the dungeon. It is possible in the future I might want additional parameters, but these seem like the basic mandatory few.

$sql = "INSERT INTO dungeon SET owner='$user_id', type='dungeon', level=$level, floors=$floors, cur_floor=1, status=1";
if (@mysqli_query($con, $sql)) {
	
	$d_id = mysqli_insert_id($con);
The first thing I do is create a DB record of the dungeon based on the parameters provided. Because the table holds dungeons for all users, I need to specify the owner. I am also using a current floor column to determine which floor of the dungeon the user is on at the moment, which I'll use later to determine which floor to load and display. The status field is used to determine which dungeon the user is currently in. Then I grab the unique ID of the dungeon which will be very important for building the floors later.

$i = 1;
while ($i <= $floors) {

	if (!$max_x) {
		$max_x = rand(8,17);
	}
	
	if (!$max_y) {
		$max_y = rand(7,11);
	}

	$min_cells = round(($max_x + 1) * ($max_y + 1) * .70);
	
	$start = array(0,0);
	$map = array(array(), array());
Now I'm looping through the floors, building each one. First, if the maximum size of the dungeon wasn't specified when the function was called, I determine it here randomly. The min_cells variable is used to ensure that at least a certain percentage of the square area of the dungeon is filled with actual dungeon cells. In this case, I am saying that at least 70% of the specified cells (for example, 70 cells out of a 10 by 10 dungeon) must be filled with dungeon tiles and not be 'blanks.' This could easily (and probably should be) a parameter that could be passed to the function, setting it at 70% if it is not passed. That would make a lot of sense. I also initialize the starting spot on the map and the map itself.

$rand = rand(0,3);
$facing = 0;
if ($rand == 0) {
	$start[1] = rand(0, $max_y);
	$start[0] = 0;
	$facing = $e;
} else if ($rand == 1) {
	$start[1] = rand(0, $max_y);
	$start[0] = $max_x;
	$facing = $w;
} else if ($rand == 2) {
	$start[1] = 0;
	$start[0] = rand(0, $max_x);
	$facing = $s;
} else {
	$start[1] = $max_y;
	$start[0] = rand(0, $max_x);
	$facing = $n;
}	
	
$map[$start[0]][$start[1]] = $facing;

$cur_x = $start[0];
$cur_y = $start[1];
global $total_cells;
$total_cells = 1;
First a note: $e, $w, $s, and $n are globals that I assign the values 1, 2, 4, and 8, respectively. Each square of the dungeon gets a number value from 0 to 15 that determines which directions are open from the square and which ones are walls. For example, if the square value is 12, I know that from it you could go north and south.

Here I randomly determine which way the user will be facing when entering the dungeon and set the starting spot randomly along the wall opposite the faced direction. Then that line with the map array sets the square that contains the starting spot (also the dungeon exit) as a square from which you can only travel away from the outer edge. Finally, I set the cur_x and cur_y values to the start value, since the player will currently be at the start o the dungeon when it is created. Since I manually created the starting cell here, I initialize total_cells and give it a value of 1. I make it global because I will use it and increment in later functions, though I probably could have passed it in and out of functions instead, but I was really bad at that type of stuff when I wrote this and only marginally better now. And don't get me started on objects, I know, I know!

That is it for part 1. After this, I'll go into functions that actually start building the map and that is where it gets really interesting.

Tags: Awesome Theory code dungeon generator random

Enter a comment

Name:
Comment (max 5K characters):

User comments

Pizza IconWrentonse said on Oct 18, 2022
Table 4 Association between cyclin A overexpression and other cell cycle and related clinical markers in the markers study of 394 breast cancer patients can you buy cialis online
Pizza IconInessaprpi said on Jan 25, 2023
coursework writing help coursework project coursework history
Pizza IconAmberlyprpi said on Feb 17, 2023
share dating free online chatting and dating totally free dating sites near nelson
Pizza IconSalomaprpi said on Feb 21, 2023
dating team free good dating app
Pizza IconFrieda D Cruz said on May 13, 2023
Hello, I really appreciate reading this article, and I've found it to be quite helpful. I want to tell you about the Word Per Minute Online. Do you know What is word per minute? and How much of a benefit it is.If you're interested in learning more, you can check out the Techniques to improve your Typing Speed and get complete knowledge.
Pizza IconJosephinest said on Oct 5, 2023
Adult Flirt Finder is your go-to dating platform for meeting new people. Our web-based platform allows you to search for compatible partners and have fun with stimulating and engaging conversations from anywhere. With Adult Flirt Finder, you can manage your dating life and meet the right person you've been looking for. Become a part of our dating network today and begin your journey to a meaningful relationship.
Pizza IconAhdoqn said on Jan 13, 2024
best allergy pill for itching alternatives to allergy pills prescription vs over the counter
Pizza IconGijgrt said on Jan 13, 2024
best cold medicine without antihistamine prescription allergy medication without antihistamines prescription allergy medication without antihistamines
Pizza IconIdawtw said on Jan 14, 2024
medications that make you nauseous pepcid 40mg tablet
Pizza IconOvqwot said on Jan 15, 2024
top rated heartburn prescription coversyl 8mg sale
Pizza IconTjsmqy said on Jan 15, 2024
buy accutane without a prescription isotretinoin 20mg pills accutane price
Pizza IconKvrywl said on Jan 16, 2024
accutane 10mg drug buy isotretinoin generic buy isotretinoin generic
Pizza IconTwpptl said on Jan 17, 2024
sleep medication prescription online provigil cheap
Pizza IconKwyttd said on Jan 17, 2024
cheap amoxicillin generic buy amoxicillin 500mg pill amoxicillin 1000mg for sale
Pizza IconFmovne said on Jan 17, 2024
order sleeping tablets online uk promethazine uk
Pizza IconHyzorr said on Jan 18, 2024
amoxil 1000mg uk buy amoxil 250mg generic brand amoxil 500mg
Pizza IconFisocl said on Jan 18, 2024
really strong sleeping pills provigil online order
Pizza IconNxmazj said on Jan 19, 2024
zithromax without prescription purchase azithromycin pill how to get azithromycin without a prescription
Pizza IconFscagd said on Jan 19, 2024
order neurontin sale order gabapentin 600mg pill
Pizza IconJkefur said on Jan 19, 2024
azithromycin 500mg for sale zithromax 500mg over the counter azithromycin 250mg canada
Pizza IconRppagw said on Jan 20, 2024
order neurontin 600mg without prescription gabapentin 600mg sale
Pizza IconPhlgju said on Jan 21, 2024
buy generic azipro 250mg order azithromycin 250mg sale azipro 500mg us
Pizza IconCbozlg said on Jan 21, 2024
furosemide 100mg for sale order lasix 40mg pills
Pizza IconFmgess said on Jan 21, 2024
buy azipro 500mg pills order azipro online cheap buy azipro online
Pizza IconJdeeiw said on Jan 21, 2024
lasix 40mg usa furosemide 100mg canada
Pizza IconAouvjr said on Jan 22, 2024
cheap prednisolone generic purchase omnacortil for sale order prednisolone 40mg generic
Pizza IconTheytc said on Jan 24, 2024
order amoxil 500mg without prescription buy amoxicillin paypal amoxicillin 1000mg without prescription
Pizza IconTxoztu said on Jan 24, 2024
doxycycline oral buy doxycycline medication
Pizza IconAfiqqs said on Jan 25, 2024
amoxil 500mg us amoxil 250mg price order amoxil 500mg online cheap
Pizza IconLejeac said on Jan 25, 2024
buy vibra-tabs sale doxycycline 100mg oral
Pizza IconRefuxy said on Jan 26, 2024
purchase albuterol inhalator generic allergy tablets order ventolin 4mg generic
Pizza IconHuxjqb said on Jan 26, 2024
ventolin 4mg uk order albuterol pill order albuterol pills
Pizza IconJmjyvr said on Jan 27, 2024
buy augmentin 1000mg sale amoxiclav us
Pizza IconKykjnr said on Jan 27, 2024
buy clavulanate online cheap generic augmentin 375mg
Pizza IconJutkrl said on Jan 28, 2024
buy synthroid 150mcg generic order synthroid 150mcg pills order synthroid 150mcg
Pizza IconFskllk said on Jan 29, 2024
buy serophene without prescription clomid over the counter clomiphene pill
Pizza IconOkmapx said on Jan 30, 2024
clomid 100mg pill brand clomiphene 50mg order clomid 50mg pills
Pizza IconGprabi said on Jan 30, 2024
order tizanidine 2mg buy tizanidine medication purchase tizanidine without prescription
Pizza IconKdvjqb said on Jan 31, 2024
brand tizanidine buy tizanidine 2mg for sale buy generic tizanidine
Pizza IconIgmzxz said on Jan 31, 2024
buy generic rybelsus over the counter cost semaglutide 14 mg semaglutide 14mg cost
Pizza IconUpweci said on Feb 1, 2024
cheap rybelsus buy rybelsus generic semaglutide 14mg pills
Pizza IconNmsmbe said on Feb 1, 2024
cost prednisone 20mg deltasone 20mg price generic deltasone 20mg
Pizza IconOxdkkw said on Feb 1, 2024
generic prednisone order deltasone generic buy prednisone paypal
Pizza IconYqqfkz said on Feb 2, 2024
order semaglutide online cheap order rybelsus buy rybelsus pills
Pizza IconStephenvesia said on Feb 2, 2024
Leading the way in the heavy construction equipment sector,Experiences with Zircon Used Equipment LLC boasting over 8 years of experience, dedicated to delivering unmatched services. We take pride in curating an expansive inventory that includes premium machinery like front-end loaders, excavators, bulldozers, forklifts, and more, guaranteeing a diverse selection to meet various preferences and budgets. Setting us apart is our unwavering commitment to exceptional services and cultivating long-lasting partnerships. Beyond selling equipment, we go the extra mile by offering efficient delivery services, utilizing our proprietary resources for prompt and dependable transportation of heavy machinery. This allows us to provide competitive pricing for delivery, augmenting the overall value we bring to the table. The primary objective is to provide a complete suite of high-quality services, establishing ourselves as the trusted partner for our clients. With a focus on surpassing expectations and building enduring relationships, we aim to be the go-to choice for all heavy equipment needs. At Zircon Used Equipment LLC Zircon Used Equipment LLC User Ratings, we seamlessly combine industry knowledge, dependable equipment, and exceptional customer support to meet the diverse requirements of our clients. Get in touch with us today to witness firsthand our commitment to excellence and dedication. Zircon Used Equipment LLC has garnered an extensive collection of positive reviews from our satisfied clientele, reinforcing our standing as a trustworthy player in the heavy construction equipment industry. This is only a small part. You can discover more on the wide realms of the internet.
Pizza IconBnncim said on Feb 2, 2024
generic accutane 40mg buy isotretinoin 40mg sale order absorica pill
Pizza IconItzptv said on Feb 2, 2024
order rybelsus 14 mg cheap rybelsus 14 mg semaglutide online buy
Pizza IconYbokdd said on Feb 3, 2024
order isotretinoin pills accutane 20mg sale where to buy accutane without a prescription
Pizza IconJseraldtoria said on Feb 3, 2024
Cialis Doses ^_^ (Admin) Cialis 5 mg prezzo tadalafil 5 mg prezzo cialis 5 mg prezzo
Pizza IconXtrdty said on Feb 4, 2024
buy generic amoxil 1000mg buy amoxil without a prescription amoxil canada
Pizza IconGiyyla said on Feb 4, 2024
amoxil cheap amoxil 250mg cheap buy amoxicillin without a prescription
Pizza IconVztkdp said on Feb 5, 2024
purchase augmentin generic purchase amoxiclav for sale how to get clavulanate without a prescription
Pizza IconCwcyuf said on Feb 5, 2024
augmentin medication clavulanate over the counter augmentin price
Pizza IconFtzbhy said on Feb 6, 2024
azithromycin 250mg over the counter azithromycin price buy zithromax 500mg online cheap
Pizza IconAdpsyj said on Feb 6, 2024
zithromax medication order azithromycin 500mg without prescription azithromycin 250mg oral
Pizza IconNrrkiv said on Feb 7, 2024
order levothyroxine generic buy synthroid 150mcg generic cheap levoxyl generic
Pizza IconFhukbx said on Feb 7, 2024
purchase levothroid generic synthroid 150mcg usa synthroid 100mcg price
Pizza IconBvervs said on Feb 7, 2024
order prednisolone 10mg pill omnacortil 40mg cheap buy generic omnacortil 20mg
Pizza IconCimfpe said on Feb 8, 2024
buy omnacortil generic buy generic prednisolone over the counter buy omnacortil pills for sale
Pizza IconLxghmw said on Feb 8, 2024
buy clomid generic clomid 50mg drug order clomid
Pizza IconEhopda said on Feb 9, 2024
purchase serophene buy generic clomid order clomiphene 100mg sale
Pizza IconBmfrxx said on Feb 9, 2024
gabapentin 100mg over the counter neurontin 800mg us buy generic gabapentin over the counter
Pizza IconMijexm said on Feb 9, 2024
buy neurontin online cheap buy neurontin order gabapentin 800mg generic
Pizza IconThasnm said on Feb 11, 2024
buy generic furosemide online oral furosemide 100mg furosemide 100mg over the counter
Pizza IconXqslnq said on Feb 11, 2024
order sildenafil 100mg online cheap cheap viagra 50mg viagra pill
Pizza IconCkczwz said on Feb 11, 2024
order sildenafil 50mg pills sildenafil professional order viagra pill
Pizza IconNgeolg said on Feb 11, 2024
lasix pill order lasix pills lasix us
Pizza IconWrupge said on Feb 12, 2024
buy doxycycline without prescription doxycycline 200mg for sale buy vibra-tabs sale
Pizza IconGqgckz said on Feb 12, 2024
rybelsus 14 mg oral order semaglutide online cheap buy semaglutide cheap
Pizza IconXibrgh said on Feb 12, 2024
buy rybelsus 14mg buy rybelsus no prescription buy semaglutide generic
Pizza IconFnypoi said on Feb 13, 2024
purchase vibra-tabs generic buy monodox generic monodox cost
Pizza IconGuutvc said on Feb 13, 2024
roulette online free gambling casino gambling casino
Pizza IconRrwtsg said on Feb 14, 2024
levitra buy online vardenafil 10mg cost order levitra 20mg
Pizza IconWwjcvg said on Feb 14, 2024
slots real money blackjack games golden nugget online casino
Pizza IconMnzabm said on Feb 14, 2024
order levitra online cheap purchase vardenafil without prescription purchase levitra without prescription
Pizza IconBrbwzt said on Feb 15, 2024
cheap lyrica pregabalin 75mg oral purchase lyrica online cheap
Pizza IconAqueai said on Feb 15, 2024
order plaquenil 200mg online cheap buy hydroxychloroquine 400mg pill buy hydroxychloroquine 400mg sale
Pizza IconHdvysz said on Feb 15, 2024
order generic lyrica order pregabalin pills buy pregabalin 150mg pills
Pizza IconCxufabeva said on Feb 15, 2024
zithromax during pregnancy
Pizza IconSfclqx said on Feb 15, 2024
buy hydroxychloroquine pill order hydroxychloroquine 200mg generic hydroxychloroquine medication
Pizza IconCxufabeva said on Feb 16, 2024
zithromax generic
Pizza IconLzpynr said on Feb 16, 2024
aristocort usa order triamcinolone 4mg generic buy aristocort pill
Pizza IconWwjjxe said on Feb 16, 2024
buy triamcinolone cheap aristocort cost order aristocort 10mg
Pizza IconIxapvl said on Feb 16, 2024
tadalafil 40mg oral buy cialis 10mg cialis overnight shipping
Pizza IconPzgwit said on Feb 17, 2024
cialis 20mg generic order tadalafil 10mg pill cialis 10mg tablet
Pizza IconVrspai said on Feb 17, 2024
desloratadine 5mg us buy desloratadine 5mg sale buy clarinex medication
Pizza IconFstgzj said on Feb 18, 2024
clarinex generic buy desloratadine 5mg generic buy clarinex online
Pizza IconNtwzlv said on Feb 18, 2024
cenforce 100mg oral order cenforce 100mg order cenforce 100mg generic
Pizza IconQwpqsy said on Feb 19, 2024
buy claritin 10mg online cheap claritin cheap loratadine 10mg
Pizza IconChwbabeva said on Feb 19, 2024
is metformin bad for you
Pizza IconUwthgi said on Feb 19, 2024
buy chloroquine 250mg generic order aralen 250mg online buy aralen 250mg pill
Pizza IconVrujsa said on Feb 19, 2024
purchase loratadine pill how to get claritin without a prescription order generic loratadine
Pizza IconXykbvp said on Feb 19, 2024
brand aralen chloroquine 250mg sale buy generic aralen
Pizza IconJtijcc said on Feb 20, 2024
dapoxetine 30mg uk priligy 90mg pills misoprostol for sale
Pizza IconChwbabeva said on Feb 20, 2024
can metformin cause hypoglycemia
Pizza IconWnjuez said on Feb 20, 2024
glucophage brand buy metformin online cheap order metformin 1000mg sale
Pizza IconIbgvgx said on Feb 20, 2024
priligy online buy generic priligy 60mg buy cytotec
Pizza IconGqwlyb said on Feb 21, 2024
purchase glucophage online glucophage pills buy glycomet 1000mg online cheap
Pizza IconDfjien said on Feb 21, 2024
metformin 1000mg sale metformin sale glycomet cost
Pizza IconKmnsvd said on Feb 21, 2024
order glucophage pills order metformin 500mg generic purchase metformin sale
Pizza IconFpyaxx said on Feb 22, 2024
xenical for sale online how to buy diltiazem diltiazem 180mg oral
Pizza IconAbhzpt said on Feb 22, 2024
xenical over the counter buy diltiazem pills for sale purchase diltiazem pills
Pizza IconIxbyzj said on Feb 22, 2024
buy lipitor 40mg sale order lipitor 20mg for sale lipitor 20mg ca
Pizza IconKthsturf said on Feb 22, 2024
hypernatremia furosemide
Pizza IconKqfuox said on Feb 22, 2024
order atorvastatin 20mg generic buy atorvastatin lipitor 10mg canada
Pizza IconXthfSeree said on Feb 22, 2024
lisinopril and weight loss
Pizza IconXthfSeree said on Feb 23, 2024
what not to eat while taking lisinopril
Pizza IconKthsturf said on Feb 23, 2024
bumetanide vs furosemide
Pizza IconCtnabeva said on Feb 23, 2024
flagyl dosage 400 mg
Pizza IconSyhkBrild said on Feb 23, 2024
is zoloft like xanax
Pizza IconZmxmpw said on Feb 23, 2024
purchase norvasc online norvasc cheap buy amlodipine generic
Pizza IconCtnabeva said on Feb 23, 2024
metronidazole flagyl 500mg
Pizza IconJhburo said on Feb 23, 2024
order norvasc 5mg online order norvasc 10mg pills buy generic norvasc 10mg
Pizza IconSyhkBrild said on Feb 23, 2024
how long until zoloft side effects go away
Pizza IconApbrmx said on Feb 23, 2024
purchase zovirax generic zyloprim price buy cheap generic zyloprim
Pizza IconXmxjnk said on Feb 24, 2024
buy acyclovir generic order zovirax 800mg generic zyloprim 300mg us
Pizza IconKtbsturf said on Feb 24, 2024
why give lasix over 2 minutes
Pizza IconLwwdew said on Feb 24, 2024
order zestril 5mg lisinopril generic order zestril 2.5mg online
Pizza IconXjeSeree said on Feb 25, 2024
tramadol and gabapentin
Pizza IconXdoslw said on Feb 25, 2024
buy generic lisinopril online zestril pills lisinopril 10mg oral
Pizza IconXjeSeree said on Feb 25, 2024
gabapentin seizures
Pizza IconCtjabeva said on Feb 25, 2024
order zithromax
Pizza IconPxmyew said on Feb 25, 2024
purchase crestor how to buy crestor buy zetia no prescription
Pizza IconKtbsturf said on Feb 25, 2024
lasix doses
Pizza IconSheBrild said on Feb 25, 2024
glucophage glipizide
Pizza IconAjdtvy said on Feb 25, 2024
crestor 10mg uk zetia 10mg pill order zetia 10mg for sale
Pizza IconSheBrild said on Feb 26, 2024
wikipedia glucophage
Pizza IconEapsrg said on Feb 26, 2024
buy prilosec 10mg online cheap buy generic omeprazole 10mg order omeprazole generic
Pizza IconBdmfwo said on Feb 26, 2024
omeprazole 20mg uk buy prilosec 10mg pill prilosec for sale
Pizza IconYdbjku said on Feb 26, 2024
order motilium online cheap buy cheap generic motilium order tetracycline 250mg generic
Pizza IconCtjabeva said on Feb 26, 2024
buy zithromax 1000mg
Pizza IconEjmken said on Feb 26, 2024
buy domperidone 10mg sale buy generic motilium order sumycin 250mg
Pizza IconXjjeSeree said on Feb 27, 2024
cephalexin dosage for gum infection
Pizza IconXjjeSeree said on Feb 27, 2024
cephalexin expired 5 years ago
Pizza IconKethsturf said on Feb 27, 2024
side effects of gabapentin 300mg withdrawal
Pizza IconSmgBrild said on Feb 27, 2024
amoxicillin dosage for cats
Pizza IconCnntabeva said on Feb 27, 2024
escitalopram indication
Pizza IconKethsturf said on Feb 27, 2024
gabapentin and norco
Pizza IconFzlyan said on Feb 27, 2024
lopressor 50mg oral how to get metoprolol without a prescription buy metoprolol 50mg
Pizza IconBmzvif said on Feb 27, 2024
buy lopressor without prescription order metoprolol buy metoprolol 100mg online
Pizza IconUlwvqp said on Feb 27, 2024
cyclobenzaprine canada buy cheap flexeril lioresal online order
Pizza IconSmgBrild said on Feb 28, 2024
amoxicillin pink liquid
Pizza IconCnntabeva said on Feb 28, 2024
what are escitalopram tablets used for
Pizza IconPgwmvk said on Feb 28, 2024
buy cyclobenzaprine buy lioresal generic buy ozobax without a prescription
Pizza IconSnduBrild said on Feb 29, 2024
ciprofloxacin for acne
Pizza IconJztusg said on Feb 29, 2024
atenolol 50mg tablet order generic tenormin how to buy tenormin
Pizza IconCrmmabeva said on Feb 29, 2024
bactrim tablet
Pizza IconTugoaf said on Feb 29, 2024
toradol 10mg pill gloperba canada buy colchicine generic
Pizza IconYaziiz said on Feb 29, 2024
purchase atenolol atenolol online brand atenolol 100mg
Pizza IconXmtfSeree said on Feb 29, 2024
cephalexin 500mg dosage
Pizza IconXmtfSeree said on Feb 29, 2024
cephalexin for dogs
Pizza IconThqdrp said on Feb 29, 2024
ketorolac oral brand colchicine where can i buy gloperba
Pizza IconSnduBrild said on Feb 29, 2024
can i take ibuprofen with ciprofloxacin
Pizza IconIuceqv said on Mar 1, 2024
purchase medrol pill depo-medrol ca buy depo-medrol without a prescription
Pizza IconIvlnsb said on Mar 1, 2024
buy methylprednisolone 8mg online medrol 8 mg without prescription methylprednisolone 16mg for sale
Pizza IconNtdpso said on Mar 2, 2024
write me a essay buy research papers online no plagiarism help with term paper
Pizza IconQtmtjp said on Mar 2, 2024
inderal 20mg for sale order generic plavix 75mg plavix over the counter
Pizza IconAyskkd said on Mar 2, 2024
professional research paper writers buy nothing day essay best essay service
Pizza IconGauxgq said on Mar 3, 2024
buy inderal medication buy clopidogrel 75mg order plavix 75mg pills